pax_global_header00006660000000000000000000000064152454427460014527gustar00rootroot0000000000000052 comment=3fdf723dca5efe077e7e2ef0f3d33f791af0e511 asn1tools-0.169.0/000077500000000000000000000000001524544274600136275ustar00rootroot00000000000000asn1tools-0.169.0/.coveragerc000066400000000000000000000000331524544274600157440ustar00rootroot00000000000000[run] relative_files = Trueasn1tools-0.169.0/.github/000077500000000000000000000000001524544274600151675ustar00rootroot00000000000000asn1tools-0.169.0/.github/FUNDING.yml000066400000000000000000000000201524544274600167740ustar00rootroot00000000000000github: eerimoq asn1tools-0.169.0/.github/workflows/000077500000000000000000000000001524544274600172245ustar00rootroot00000000000000asn1tools-0.169.0/.github/workflows/python-package.yml000066400000000000000000000055101524544274600226620ustar00rootroot00000000000000name: Python package on: [push, pull_request] jobs: test-python: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python 3.14 uses: actions/setup-python@v5 with: python-version: '3.14' - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt pip install coveralls - name: Test run: | coverage run --source=asn1tools -m unittest discover -t . -s tests - name: Coveralls uses: AndreMiras/coveralls-python-action@develop test-python-sdist: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python 3.14 uses: actions/setup-python@v5 with: python-version: '3.14' - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Test run: | make test-sdist test-c: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python 3.14 uses: actions/setup-python@v5 with: python-version: '3.14' - name: Install dependencies run: | sudo apt-get install -qq valgrind -y python -m pip install --upgrade pip pip install -r requirements.txt - name: Test run: | make test-c make -C examples/benchmarks/c_source (cd tests && bash <(curl -s https://codecov.io/bash) -X coveragepy) examples: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python 3.14 uses: actions/setup-python@v5 with: python-version: '3.14' - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Test run: | env PYTHONPATH=. python examples/benchmarks/codecs.py env PYTHONPATH=. python examples/hello_world.py env PYTHONPATH=. python examples/x509_pem.py env PYTHONPATH=. python examples/compact_extensions_uper/main.py env PYTHONPATH=. python examples/programming_types/main.py release: needs: [test-python, test-python-sdist, test-c, examples] runs-on: ubuntu-latest if: startsWith(github.ref, 'refs/tags') steps: - uses: actions/checkout@v4 - name: Set up Python 3.14 uses: actions/setup-python@v5 with: python-version: '3.14' - name: Install pypa/build run: | python -m pip install build --user - name: Build a binary wheel and a source tarball run: | git clean -dfx python -m build --outdir dist/ . - name: Publish distribution 📦 to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: skip_existing: true password: ${{ secrets.pypi_password }} asn1tools-0.169.0/.gitignore000066400000000000000000000015711524544274600156230ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover # Translations *.mo *.pot # Django stuff: *.log # Sphinx documentation docs/_build/ # PyBuilder target/ test_command_line_* test_cache compile_methods_cache /*.[hc] /main_* /massif.* v0.9.28.tar.gz asn1c-0.9.28/ main main*.massif *.gcno *.gcda gmon.out /*.mk Cargo.lock /rust_source.rs /*.oasn1tools-0.169.0/LICENSE000066400000000000000000000020751524544274600146400ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2017-2019 Erik Moqvist Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. asn1tools-0.169.0/MANIFEST.in000066400000000000000000000002261524544274600153650ustar00rootroot00000000000000include LICENSE include Makefile include examples/programming_types/programming_types.asn recursive-include tests *.py *.asn *.h *.c *.mk *.rs *.toml asn1tools-0.169.0/Makefile000066400000000000000000000130521524544274600152700ustar00rootroot00000000000000ifeq ($(origin CC), default) CC = gcc endif C_SOURCES := \ tests/files/c_source/oer.c \ tests/files/c_source/uper.c FUZZER_CC ?= clang FUZZER_OER_EXE = main_oer_fuzzer FUZZER_UPER_EXE = main_uper_fuzzer FUZZER_OER_C_SOURCES = \ tests/main_oer_fuzzer.c \ tests/files/c_source/oer.c FUZZER_UPER_C_SOURCES = \ tests/main_uper_fuzzer.c \ tests/files/c_source/uper.c FUZZER_CFLAGS = \ -fprofile-instr-generate \ -fcoverage-mapping \ -Itests/files/c_source \ -g -fsanitize=address,fuzzer \ -fsanitize=signed-integer-overflow \ -fno-sanitize-recover=all FUZZER_EXECUTION_TIME ?= 30 CFLAGS := \ -Wall \ -Wextra \ -Wdouble-promotion \ -Wfloat-equal \ -Wformat=2 \ -Wshadow \ -Werror CFLAGS_EXTRA := \ -Wduplicated-branches \ -Wduplicated-cond \ -Wjump-misses-init \ -Wlogical-op \ -Wnull-dereference \ -Wrestrict \ -Wconversion \ -Wpedantic CFLAGS_EXTRA_CLANG := \ -fsanitize=address \ -fsanitize=undefined,nullability \ -Warray-bounds-pointer-arithmetic \ -Wassign-enum \ -Wcast-align \ -Wcast-qual \ -Wchar-subscripts \ -Wcomma \ -Wcomment \ -Wconditional-uninitialized \ -Wdate-time \ -Wdocumentation \ -Wduplicate-decl-specifier \ -Wduplicate-enum \ -Wduplicate-method-arg \ -Wduplicate-method-match \ -Wembedded-directive \ -Wempty-translation-unit \ -Wexpansion-to-defined \ -Wflexible-array-extensions \ -Wfloat-conversion \ -Wfloat-equal \ -Wfloat-overflow-conversion \ -Wfloat-zero-conversion \ -Wformat-non-iso \ -Wformat-nonliteral \ -Wformat-pedantic \ -Wfour-char-constants \ -Wgnu-anonymous-struct \ -Wgnu-array-member-paren-init \ -Wgnu-auto-type \ -Wgnu-binary-literal \ -Wgnu-case-range \ -Wgnu-complex-integer \ -Wgnu-compound-literal-initializer \ -Wgnu-conditional-omitted-operand \ -Wgnu-designator \ -Wgnu-empty-initializer \ -Wgnu-empty-struct \ -Wgnu-flexible-array-initializer \ -Wgnu-flexible-array-union-member \ -Wgnu-folding-constant \ -Wgnu-imaginary-constant \ -Wgnu-include-next \ -Wgnu-label-as-value \ -Wgnu-redeclared-enum \ -Wgnu-statement-expression \ -Wgnu-union-cast \ -Wgnu-zero-line-directive \ -Wgnu-zero-variadic-macro-arguments \ -Wheader-hygiene \ -Widiomatic-parentheses \ -Wimplicit \ -Wimplicit-fallthrough \ -Wloop-analysis \ -Wmethod-signatures \ -Wmissing-braces \ -Wmissing-field-initializers \ -Wnested-anon-types \ -Wnewline-eof \ -Wnull-pointer-arithmetic \ -Woverlength-strings \ -Wpointer-arith \ -Wsign-compare \ -Wtautological-compare \ -Wundef \ -Wuninitialized \ -Wunreachable-code \ -Wunreachable-code-aggressive \ -Wunused-comparison \ -Wunused-const-variable \ -Wunused-parameter \ -Wunused-variable \ -Wvariadic-macros \ -Wzero-as-null-pointer-constant \ -Wzero-length-array .PHONY: test test: python3 -m unittest discover -t . -s tests $(MAKE) test-sdist env PYTHONPATH=. python3 examples/benchmarks/packages/ber.py env PYTHONPATH=. python3 examples/benchmarks/packages/uper.py env PYTHONPATH=. python3 examples/benchmarks/codecs.py env PYTHONPATH=. python3 examples/benchmarks/compile_methods.py env PYTHONPATH=. python3 examples/benchmarks/question/question.py env PYTHONPATH=. python3 examples/hello_world.py env PYTHONPATH=. python3 examples/x509_pem.py env PYTHONPATH=. python3 examples/compact_extensions_uper/main.py env PYTHONPATH=. python3 examples/programming_types/main.py $(MAKE) test-c env FUZZER_EXECUTION_TIME=1 $(MAKE) test-c-fuzzer $(MAKE) -C examples/benchmarks/c_source python3 -m pycodestyle $$(git ls-files "asn1tools/*.py") .PHONY: codespell codespell: codespell -d $$(git ls-files | grep -v ietf \ | grep -v 3gpp \ | grep -v generated \ | grep -v "\\.rs" \ | grep -v asn1tools/source/rust \ | grep -v "\.asn") .PHONY: test-c test-c: for f in $(C_SOURCES) ; do \ $(CC) $(CFLAGS) $(CFLAGS_EXTRA) -std=c99 -O3 -c $$f ; \ clang $(CFLAGS) $(CFLAGS_EXTRA_CLANG) -std=c99 -O3 -c $$f ; \ done $(MAKE) -C tests .PHONY: test-c-oer-fuzzer-run test-c-oer-fuzzer-run: $(FUZZER_CC) $(FUZZER_CFLAGS) $(FUZZER_OER_C_SOURCES) -o $(FUZZER_OER_EXE) rm -f $(FUZZER_OER_EXE).profraw LLVM_PROFILE_FILE="$(FUZZER_OER_EXE).profraw" \ ./$(FUZZER_OER_EXE) \ -max_total_time=$(FUZZER_EXECUTION_TIME) \ -print_final_stats llvm-profdata merge \ -sparse $(FUZZER_OER_EXE).profraw \ -o $(FUZZER_OER_EXE).profdata llvm-cov show ./$(FUZZER_OER_EXE) \ -instr-profile=$(FUZZER_OER_EXE).profdata .PHONY: test-c-uper-fuzzer-run test-c-uper-fuzzer-run: $(FUZZER_CC) $(FUZZER_CFLAGS) $(FUZZER_UPER_C_SOURCES) -o $(FUZZER_UPER_EXE) rm -f $(FUZZER_UPER_EXE).profraw LLVM_PROFILE_FILE="$(FUZZER_UPER_EXE).profraw" \ ./$(FUZZER_UPER_EXE) \ -max_total_time=$(FUZZER_EXECUTION_TIME) \ -print_final_stats llvm-profdata merge \ -sparse $(FUZZER_UPER_EXE).profraw \ -o $(FUZZER_UPER_EXE).profdata llvm-cov show ./$(FUZZER_UPER_EXE) \ -instr-profile=$(FUZZER_UPER_EXE).profdata .PHONY: test-c-fuzzer test-c-fuzzer: $(MAKE) test-c-oer-fuzzer-run $(MAKE) test-c-uper-fuzzer-run echo echo "REPORT:" echo llvm-cov report ./$(FUZZER_OER_EXE) \ -instr-profile=$(FUZZER_OER_EXE).profdata echo llvm-cov report ./$(FUZZER_UPER_EXE) \ -instr-profile=$(FUZZER_UPER_EXE).profdata .PHONY: test-rust test-rust: cd tests/rust_source && cargo run .PHONY: test-sdist test-sdist: rm -rf dist python3 setup.py sdist cd dist && \ mkdir test && \ cd test && \ tar xf ../*.tar.gz && \ cd asn1tools-* && \ python3 -m unittest discover -t . -s tests .PHONY: release-to-pypi release-to-pypi: python3 setup.py sdist python3 setup.py bdist_wheel --universal twine upload dist/* asn1tools-0.169.0/README.rst000066400000000000000000000277641524544274600153360ustar00rootroot00000000000000|coverage|_ |codecov|_ |nala|_ About ===== A Python package for `ASN.1`_ parsing, encoding and decoding. This project is *under development* and does only support a subset of the ASN.1 specification syntax. Supported codecs: - Basic Encoding Rules (BER) - Distinguished Encoding Rules (DER) - Generic String Encoding Rules (GSER) - JSON Encoding Rules (JER) - Basic Octet Encoding Rules (OER) - Aligned Packed Encoding Rules (PER) - Unaligned Packed Encoding Rules (UPER) - XML Encoding Rules (XER) Miscellaneous features: - `C` source code generator for OER and UPER (with some limitations). Project homepage: https://github.com/eerimoq/asn1tools Documentation: http://asn1tools.readthedocs.org/en/latest Known limitations ================= - The ``CLASS`` keyword (X.681) and its friends are not yet supported. - Parametrization (X.683) is not yet supported. - The ``EMBEDDED PDV`` type is not yet supported. - The ``ANY`` and ``ANY DEFINED BY`` types are not supported. They were removed from the ASN.1 standard 1994. - ``WITH COMPONENT`` and ``WITH COMPONENTS`` constraints are ignored, except for OER ``REAL``. - The ``DURATION`` type is not yet supported. Installation ============ .. code-block:: python pip install asn1tools Example Usage ============= This is an example ASN.1 specification defining the messages of a fictitious Foo protocol (based on the FooProtocol on Wikipedia). .. code-block:: text Foo DEFINITIONS ::= BEGIN Question ::= SEQUENCE { id INTEGER, question IA5String } Answer ::= SEQUENCE { id INTEGER, answer BOOLEAN } END Scripting --------- `Compile`_ the ASN.1 specification, and `encode`_ and `decode`_ a question using the default codec (BER). .. code-block:: python >>> import asn1tools >>> foo = asn1tools.compile_files('tests/files/foo.asn') >>> encoded = foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'}) >>> encoded bytearray(b'0\x0e\x02\x01\x01\x16\x09Is 1+1=3?') >>> foo.decode('Question', encoded) {'id': 1, 'question': 'Is 1+1=3?'} The same ASN.1 specification, but using the PER codec. .. code-block:: python >>> import asn1tools >>> foo = asn1tools.compile_files('tests/files/foo.asn', 'per') >>> encoded = foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'}) >>> encoded bytearray(b'\x01\x01\tIs 1+1=3?') >>> foo.decode('Question', encoded) {'id': 1, 'question': 'Is 1+1=3?'} See the `examples`_ folder for additional examples. Command line tool ----------------- The shell subcommand ^^^^^^^^^^^^^^^^^^^^ Use the command line shell to convert data between given formats. The default input codec is BER and output codec is GSER (produces human readable text). .. code-block:: text > asn1tools shell Welcome to the asn1tools shell! $ help Commands: compile convert exit help $ compile tests/files/foo.asn $ convert Question 300e0201011609497320312b313d333f question Question ::= { id 1, question "Is 1+1=3?" } $ compile --output-codec xer tests/files/foo.asn $ convert Question 300e0201011609497320312b313d333f 1 Is 1+1=3? $ compile -o uper tests/files/foo.asn $ convert Question 300e0201011609497320312b313d333f 01010993cd03156c5eb37e $ exit > The convert subcommand ^^^^^^^^^^^^^^^^^^^^^^ Convert given encoded Question from BER to GSER (produces human readable text). .. code-block:: text > asn1tools convert tests/files/foo.asn Question 300e0201011609497320312b313d333f question Question ::= { id 1, question "Is 1+1=3?" } > Convert given encoded Question from UPER to XER (xml). .. code-block:: text > asn1tools convert -i uper -o xer tests/files/foo.asn Question 01010993cd03156c5eb37e 1 Is 1+1=3? > Convert given encoded Question from UPER to JER (json). .. code-block:: text > asn1tools convert -i uper -o jer tests/files/foo.asn Question 01010993cd03156c5eb37e { "id": 1, "question": "Is 1+1=3?" } > Continuously convert encoded Questions read from standard input. Any line that cannot be converted is printed as is, in this example the dates. .. code-block:: text > cat encoded.txt 2018-02-24 11:22:09 300e0201011609497320312b313d333f 2018-02-24 11:24:15 300e0201021609497320322b323d353f > cat encoded.txt | asn1tools convert tests/files/foo.asn Question - 2018-02-24 11:22:09 question Question ::= { id 1, question "Is 1+1=3?" } 2018-02-24 11:24:15 question Question ::= { id 2, question "Is 2+2=5?" } > The convert subcommand with a cache ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Convert given encoded PCCH-Message from UPER to GSER with the ``--cache-dir`` option set to ``my_cache``. Using a cache significantly reduces the command execution time after the first call. .. code-block:: text > time asn1tools convert --cache-dir my_cache -i uper tests/files/3gpp/rrc_8_6_0.asn PCCH-Message 28 pcch-message PCCH-Message ::= { message c1 : paging : { systemInfoModification true, nonCriticalExtension { } } } real 0m2.090s user 0m1.977s sys 0m0.032s > time asn1tools convert --cache-dir my_cache -i uper tests/files/3gpp/rrc_8_6_0.asn PCCH-Message 28 pcch-message PCCH-Message ::= { message c1 : paging : { systemInfoModification true, nonCriticalExtension { } } } real 0m0.276s user 0m0.197s sys 0m0.026s > The parse subcommand ^^^^^^^^^^^^^^^^^^^^ Parse given ASN.1 specification and write it as a Python dictionary to given file. Use the created file to convert given encoded Question from BER to GSER (produces human readable text). The conversion is significantly faster than passing .asn-file(s) to the convert subcommand, especially for larger ASN.1 specifications. .. code-block:: text > asn1tools parse tests/files/foo.asn foo.py > asn1tools convert foo.py Question 300e0201011609497320312b313d333f question Question ::= { id 1, question "Is 1+1=3?" } > The generate C source subcommand ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Generate OER or UPER C source code from an ASN.1 specification. No dynamic memory is used in the generated code. To achieve this all types in the ASN.1 specification must have a known maximum size, i.e. ``INTEGER (0..7)``, ``OCTET STRING (SIZE(12))``, etc. Below is an example generating OER C source code from `tests/files/c_source/c_source.asn`_. .. code-block:: text > asn1tools generate_c_source --namespace oer tests/files/c_source/c_source.asn Successfully generated oer.h and oer.c. The same as above, but generate UPER C source code instead of OER. .. code-block:: text > asn1tools generate_c_source --codec uper --namespace uper tests/files/c_source/c_source.asn Successfully generated uper.h and uper.c. The same as the first example, but also generate fuzz testing C source code for `libFuzzer`_. .. code-block:: text > asn1tools generate_c_source --namespace oer --generate-fuzzer tests/files/c_source/c_source.asn Successfully generated oer.h and oer.c. Successfully generated oer_fuzzer.c and oer_fuzzer.mk. Run "make -f oer_fuzzer.mk" to build and run the fuzzer. Requires a recent version of clang. See `oer.h`_, `oer.c`_, `uper.h`_, `uper.c`_, `oer_fuzzer.c`_ and `oer_fuzzer.mk`_ for the contents of the generated files. Limitations by design: - Only the types ``BOOLEAN``, ``INTEGER``, ``NULL``, ``OCTET STRING``, ``BIT STRING``, ``ENUMERATED``, ``SEQUENCE``, ``SEQUENCE OF``, and ``CHOICE`` are supported. The OER generator also supports ``REAL``. - All types must have a known maximum size, i.e. ``INTEGER (0..7)``, ``OCTET STRING (SIZE(12))``. - ``INTEGER`` must be 64 bits or less. - ``REAL`` must be IEEE 754 binary32 or binary64. binary32 is generated as ``float`` and binary64 as ``double``. - Recursive types are not supported. Known limitations: - Extension additions (``...``) are only supported in the OER generator. See `compact_extensions_uper`_ for how to make UPER ``CHOICE`` and ``SEQUENCE`` extendable without using ``...``. - Named numbers in ``ENUMERATED`` are not yet supported. Other OER and/or UPER C code generators: - https://github.com/vlm/asn1c - https://github.com/ttsiodras/asn1scc See the `benchmark example`_ for a comparison of `asn1c`, `asn1scc` and `asn1tools`. Contributing ============ #. Fork the repository. #. Install prerequisites. .. code-block:: text pip install -r requirements.txt #. Implement the new feature or bug fix. #. Implement test case(s) to ensure that future changes do not break legacy. #. Run the tests. .. code-block:: text make test #. Create a pull request. Specifications ============== ASN.1 specifications released by ITU and IETF. General ------- - `X.680: Specification of basic notation `_ - `X.681: Information object specification `_ - `X.682: Constraint specification `_ - `X.683: Parameterization of ASN.1 specifications `_ Encodings --------- - `X.690: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER) `_ - `X.691: Specification of Packed Encoding Rules (PER) `_ - `X.693: XML Encoding Rules (XER) `_ - `X.696: Specification of Octet Encoding Rules (OER) `_ - `RFC 3641: Generic String Encoding Rules (GSER) for ASN.1 `_ - `Overview of the JSON Encoding Rules (JER) `_ .. |coverage| image:: https://coveralls.io/repos/github/eerimoq/asn1tools/badge.svg?branch=master .. _coverage: https://coveralls.io/github/eerimoq/asn1tools .. |codecov| image:: https://codecov.io/gh/eerimoq/asn1tools/branch/master/graph/badge.svg .. _codecov: https://codecov.io/gh/eerimoq/asn1tools .. |nala| image:: https://img.shields.io/badge/nala-test-blue.svg .. _nala: https://github.com/eerimoq/nala .. _ASN.1: https://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One .. _Compile: http://asn1tools.readthedocs.io/en/latest/#asn1tools.compile_files .. _encode: http://asn1tools.readthedocs.io/en/latest/#asn1tools.compiler.Specification.encode .. _decode: http://asn1tools.readthedocs.io/en/latest/#asn1tools.compiler.Specification.decode .. _examples: https://github.com/eerimoq/asn1tools/tree/master/examples .. _tests/files/c_source/c_source.asn: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/c_source.asn .. _oer.h: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer.h .. _oer.c: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer.c .. _uper.h: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/uper.h .. _uper.c: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/uper.c .. _oer_fuzzer.c: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer_fuzzer.c .. _oer_fuzzer.mk: https://github.com/eerimoq/asn1tools/blob/master/tests/files/c_source/oer_fuzzer.mk .. _libFuzzer: https://llvm.org/docs/LibFuzzer.html .. _benchmark example: https://github.com/eerimoq/asn1tools/blob/master/examples/benchmarks/c_source .. _compact_extensions_uper: https://github.com/eerimoq/asn1tools/blob/master/examples/compact_extensions_uper asn1tools-0.169.0/asn1tools/000077500000000000000000000000001524544274600155525ustar00rootroot00000000000000asn1tools-0.169.0/asn1tools/__init__.py000066400000000000000000000352411524544274600176700ustar00rootroot00000000000000"""The top level of the ASN.1 tools package contains commonly used functions and classes, and the command line interface. """ import sys import os import argparse import binascii import logging from pprint import pformat try: from prompt_toolkit.completion import WordCompleter from prompt_toolkit import PromptSession from prompt_toolkit.history import FileHistory from prompt_toolkit.auto_suggest import AutoSuggestFromHistory has_prompt_toolkit = True except ImportError: has_prompt_toolkit = False from .compiler import compile_dict from .compiler import compile_string from .compiler import compile_files from .compiler import pre_process_dict from .parser import parse_string from .parser import parse_files from .parser import ParseError from .errors import Error from .errors import EncodeError from .errors import DecodeError from .errors import CompileError from .errors import ConstraintsError from . source import c from . source import rust from .version import __version__ __author__ = 'Erik Moqvist' class ArgumentParserError(Error): pass class ArgumentParser(argparse.ArgumentParser): def exit(self, status=0, message=None): if message: self._print_message(message, sys.stdout) raise ArgumentParserError(message) def error(self, message): self.print_usage(sys.stdout) message = '{}: error: {}'.format(self.prog, message) print(message) raise ArgumentParserError(message) def _import_module(pyfilepath): module_name = os.path.splitext(os.path.basename(pyfilepath))[0] if sys.version_info > (3, 4): import importlib.util spec = importlib.util.spec_from_file_location(module_name, pyfilepath) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) else: import imp module = imp.load_source(module_name, pyfilepath) return module def _convert_hexstring(input_spec, output_spec, output_codec, type_name, hexstring): try: encoded = binascii.unhexlify(hexstring) except Exception as e: raise TypeError("'{}': {}".format(hexstring, str(e))) decoded = input_spec.decode(type_name, encoded) if output_codec in ['gser', 'xer', 'jer']: decoded = output_spec.encode(type_name, decoded, indent=4).strip() else: decoded = binascii.hexlify(output_spec.encode(type_name, decoded)) print(decoded.decode('latin-1')) def _compile_files(specs, input_codec, output_codec, cache_dir): py_count = [spec.endswith('.py') for spec in specs].count(True) if py_count > 0: if py_count != 1: raise Exception('Expected one .py-file, but got {}.'.format(py_count)) module = _import_module(specs[0]) parsed = module.SPECIFICATION input_spec = compile_dict(parsed, input_codec) output_spec = compile_dict(parsed, output_codec) else: input_spec = compile_files(specs, input_codec, cache_dir=cache_dir) output_spec = compile_files(specs, output_codec, cache_dir=cache_dir) return input_spec, output_spec def _do_convert(args): input_spec, output_spec = _compile_files(args.specification, args.input_codec, args.output_codec, args.cache_dir) if args.hexstring == '-': for hexstring in sys.stdin: hexstring = hexstring.strip('\r\n') if hexstring: try: _convert_hexstring(input_spec, output_spec, args.output_codec, args.type, hexstring) except TypeError: print(hexstring) except DecodeError as e: print(hexstring) print(str(e)) else: print(hexstring) else: _convert_hexstring(input_spec, output_spec, args.output_codec, args.type, args.hexstring) def _handle_command_compile(line): parser = ArgumentParser(prog='compile') parser.add_argument('-i', '--input-codec', choices=('ber', 'der', 'jer', 'oer', 'per', 'uper', 'xer'), default='ber', help='Input codec (default: %(default)s).') parser.add_argument('-o', '--output-codec', choices=( 'ber', 'der', 'jer', 'oer', 'per', 'uper', 'xer', 'gser' ), default='gser', help='Output codec (default: %(default)s).') parser.add_argument('-c', '--cache-dir', help='Cache directory.') parser.add_argument('specification', nargs='+', help='ASN.1 specification as one or more .asn files.') try: args = parser.parse_args(args=line.split()[1:]) except ArgumentParserError: return None, None, None try: input_spec, output_spec = _compile_files(args.specification, args.input_codec, args.output_codec, args.cache_dir) return input_spec, output_spec, args.output_codec except Exception as e: print('error: {}'.format(str(e))) return None, None, None def _handle_command_convert(line, input_spec, output_spec, output_codec): if not input_spec: print("No compiled specification found. Please use the " "'compile' command to compile one.") return parser = ArgumentParser(prog='convert') parser.add_argument('type', help='Type to convert.') parser.add_argument( 'hexstring', help='Hexstring to convert.') try: args = parser.parse_args(args=line.split()[1:]) except ArgumentParserError: return try: _convert_hexstring(input_spec, output_spec, output_codec, args.type, args.hexstring) except Exception as e: print('error: {}'.format(str(e))) def _handle_command_help(): print('Commands:') print(' compile') print(' convert') print(' exit') print(' help') def _do_shell(_args): if not has_prompt_toolkit: raise RuntimeError( 'Shell needs prompt_toolkit, but the package is not installed') commands = ['compile', 'convert', 'help', 'exit'] completer = WordCompleter(commands, WORD=True) user_home = os.path.expanduser('~') history = FileHistory(os.path.join(user_home, '.asn1tools-history.txt')) session = PromptSession(completer=completer, complete_while_typing=True, auto_suggest=AutoSuggestFromHistory(), enable_history_search=True, history=history) input_spec = None output_spec = None output_codec = None print("\nWelcome to the asn1tools shell!\n") while True: try: line = session.prompt(u'$ ') except EOFError: return line = line.strip() if line: if line.startswith('compile'): input_spec, output_spec, output_codec = _handle_command_compile(line) elif line.startswith('convert'): _handle_command_convert(line, input_spec, output_spec, output_codec) elif line == 'help': _handle_command_help() elif line == 'exit': return else: print('{}: command not found'.format(line)) def _do_parse(args): parsed = parse_files(args.specification) with open(args.outfile, 'w') as fout: fout.write('SPECIFICATION = {}'.format(pformat(parsed))) def _do_generate_c_source(args): if args.namespace is None: name = os.path.basename(args.specification[0]) name = os.path.splitext(name)[0] else: name = args.namespace filename_h = name + '.h' filename_c = name + '.c' fuzzer_filename_c = name + '_fuzzer.c' fuzzer_filename_mk = name + '_fuzzer.mk' compiled = compile_files(args.specification, args.codec) header, source, fuzzer_source, fuzzer_makefile = c.generate( compiled, args.codec, name, filename_h, filename_c, fuzzer_filename_c) with open(filename_h, 'w') as fout: fout.write(header) with open(filename_c, 'w') as fout: fout.write(source) print('Successfully generated {} and {}.'.format(filename_h, filename_c)) if args.generate_fuzzer: with open(fuzzer_filename_c, 'w') as fout: fout.write(fuzzer_source) with open(fuzzer_filename_mk, 'w') as fout: fout.write(fuzzer_makefile) print('Successfully generated {} and {}.'.format(fuzzer_filename_c, fuzzer_filename_mk)) print() print( 'Run "make -f {}" to build and run the fuzzer. Requires a'.format( fuzzer_filename_mk)) print('recent version of clang.') def _do_generate_rust_source(args): name = os.path.basename(args.specification[0]) name = os.path.splitext(name)[0] filename_rs = name + '.rs' compiled = compile_files(args.specification, args.codec) source = rust.generate(compiled, args.codec) with open(filename_rs, 'w') as fout: fout.write(source) print('Successfully generated {}.'.format(filename_rs)) def _main(): parser = argparse.ArgumentParser( description='Various ASN.1 utilities.') parser.add_argument('-d', '--debug', action='store_true') parser.add_argument('-v', '--verbose', choices=(0, 1, 2), type=int, default=1, help=('Control the verbosity; disable(0), warning(1) ' 'and debug(2) (default: %(default)s).')) parser.add_argument('--version', action='version', version=__version__, help='Print version information and exit.') # Workaround to make the subparser required in Python 3. subparsers = parser.add_subparsers(title='subcommands', dest='subcommand') subparsers.required = True # The 'convert' subparser. subparser = subparsers.add_parser( 'convert', description='Convert given hextring and print it to standard output.') subparser.add_argument( '-i', '--input-codec', choices=('ber', 'der', 'jer', 'oer', 'per', 'uper', 'xer'), default='ber', help='Input format (default: %(default)s).') subparser.add_argument( '-o', '--output-codec', choices=('ber', 'der', 'jer', 'oer', 'per', 'uper', 'xer', 'gser'), default='gser', help='Output format (default: %(default)s).') subparser.add_argument('-c', '--cache-dir', help='Cache directory.') subparser.add_argument( 'specification', nargs='+', help=('ASN.1 specification as one or more .asn files or one .py ' 'file. The .py-file may be created with the parse subcommand.')) subparser.add_argument('type', help='Type to convert.') subparser.add_argument( 'hexstring', help='Hexstring to convert, or - to read hexstrings from standard input.') subparser.set_defaults(func=_do_convert) # The 'shell' subparser. subparser = subparsers.add_parser('shell', description='An interactive shell.') subparser.set_defaults(func=_do_shell) # The 'parse' subparser. subparser = subparsers.add_parser('parse', description='Convert to a Python dictionary.') subparser.add_argument('specification', nargs='+', help='ASN.1 specification as one or more .asn files.') subparser.add_argument('outfile', help='Output file name.') subparser.set_defaults(func=_do_parse) # The 'generate_c_source' subparser. subparser = subparsers.add_parser( 'generate_c_source', description='Generate C source code from given ASN.1 specification.') subparser.add_argument( '-c', '--codec', choices=('oer', 'uper'), default='oer', help='Codec to generate code for (default: %(default)s).') subparser.add_argument( '-n', '--namespace', help='Namespace of defines, structs, functions, files, etc.') subparser.add_argument( '-f', '--generate-fuzzer', action='store_true', help='Also generate fuzzer source code.') subparser.add_argument('specification', nargs='+', help='ASN.1 specification as one or more .asn files.') subparser.set_defaults(func=_do_generate_c_source) # The 'generate_rust_source' subparser. subparser = subparsers.add_parser( 'generate_rust_source', description='Generate Rust source code from given ASN.1 specification.') subparser.add_argument( '-c', '--codec', choices=('uper', ), default='uper', help='Codec to generate code for (default: %(default)s).') subparser.add_argument('specification', nargs='+', help='ASN.1 specification as one or more .asn files.') subparser.set_defaults(func=_do_generate_rust_source) args = parser.parse_args() levels = [logging.CRITICAL, logging.WARNING, logging.DEBUG] level = levels[args.verbose] logging.basicConfig(format='%(levelname)s: %(message)s', level=level) if args.debug: args.func(args) else: try: args.func(args) except BaseException as e: sys.exit('error: {}'.format(str(e))) asn1tools-0.169.0/asn1tools/__main__.py000066400000000000000000000000441524544274600176420ustar00rootroot00000000000000from . import _main as main main() asn1tools-0.169.0/asn1tools/codecs/000077500000000000000000000000001524544274600170125ustar00rootroot00000000000000asn1tools-0.169.0/asn1tools/codecs/__init__.py000066400000000000000000000237721524544274600211360ustar00rootroot00000000000000import binascii from datetime import datetime from datetime import timedelta from functools import wraps from ..errors import Error from ..errors import EncodeError as _EncodeError from ..errors import DecodeError as _DecodeError from ..errors import ConstraintsError as _ConstraintsError from .. import compat class BaseType(object): """ Base Type class containing common functionality between all codecs """ def __init__(self, name, type_name): self.name = name self.type_name = type_name self.optional = False self.default = None def set_default(self, value): self.default = value def get_default(self): return self.default def has_default(self): return self.default is not None def is_default(self, value): return value == self.default def encode(self, *args, **kwargs): raise NotImplementedError('To be implemented by subclasses.') def decode(self, *args, **kwargs): raise NotImplementedError('To be implemented by subclasses.') def __repr__(self): return '{}({})'.format(self.__class__.__name__, self.name) def type_label(self): return '{}({})'.format(self.type_name, self.name) if self.name else self.type_name class ErrorWithLocation(Exception): """ Mixin for Error classes which have location list """ def __init__(self, message, location=None): """ :param str message: :param BaseType location: Type error occured for """ self.message = message self.location = [location] if location else [] def add_location(self, element): """ Add location data for element :param BaseType element: :return: """ # Don't add name if it is blank (for SEQUENCE OF, SET OF etc) if (not getattr(element, 'no_error_location', False) and (not self.location or element != self.location[-1])): self.location.append(element) @property def location_str(self): return '.'.join(loc.name for loc in self.location[::-1] if loc.name) def __str__(self): if self.location: return "{}: {}".format(self.location_str, self.message) else: return self.message class EncodeError(ErrorWithLocation, _EncodeError): """General ASN.1 encode error. """ pass class DecodeError(ErrorWithLocation, _DecodeError): """ General ASN.1 decode error with error location in the message. """ def __init__(self, message, offset=None, location=None): """ :param str message: Message for error :param int offset: Data offset at which error occurred. Can be bits or bytes depending on codec :param BaseType location: Element in which error occurred """ super(DecodeError, self).__init__(message, location=location) self.offset = offset def __str__(self): if self.location: _str = "{}: {}".format(self.location_str, self.message) else: _str = self.message if self.offset is not None: _str += self.get_offset_message() return _str def get_offset_message(self): """ Get offset details to add to error message :return: """ return ' (At offset: {})'.format(self.offset) class ConstraintsError(ErrorWithLocation, _ConstraintsError): """ General ASN.1 constraints error with error location in the message. """ pass class OutOfDataError(DecodeError): """ Error for when trying to read data beyond length of type """ def __init__(self, offset_bits, location=None): super(OutOfDataError, self).__init__( 'out of data', offset=offset_bits, location=location) def get_offset_message(self): """ Get offset details to add to error message :return: """ return ' (At bit offset: {})'.format(self.offset) def _generalized_time_to_datetime(string): length = len(string) if '.' in string: try: return datetime.strptime(string, '%Y%m%d%H%M.%f') except ValueError: return datetime.strptime(string, '%Y%m%d%H%M%S.%f') elif ',' in string: try: return datetime.strptime(string, '%Y%m%d%H%M,%f') except ValueError: return datetime.strptime(string, '%Y%m%d%H%M%S,%f') elif length == 12: return datetime.strptime(string, '%Y%m%d%H%M') elif length == 14: return datetime.strptime(string, '%Y%m%d%H%M%S') else: raise ValueError def format_or(items): """Return a string of comma separated items, with the last to items separated by "or". [1, 2, 3] -> "1, 2 or 3" """ formatted_items = [] for item in items: try: item = "'" + item + "'" except TypeError: item = str(item) formatted_items.append(item) if len(items) == 1: return formatted_items[0] else: return '{} or {}'.format(', '.join(formatted_items[:-1]), formatted_items[-1]) def utc_time_to_datetime(string): """Convert given ASN.1 UTC time string `string` to a ``datetime.datetime`` object. """ length = len(string) try: if string[-1] == 'Z': if length == 11: return datetime.strptime(string[:-1], '%y%m%d%H%M') elif length == 13: return datetime.strptime(string[:-1], '%y%m%d%H%M%S') else: raise ValueError elif length == 15: return compat.strptime(string, '%y%m%d%H%M%z') elif length == 17: return compat.strptime(string, '%y%m%d%H%M%S%z') else: raise ValueError except (ValueError, IndexError): raise Error( "Expected a UTC time string, but got '{}'.".format(string)) def utc_time_from_datetime(date): """Convert given ``datetime.datetime`` object `date` to an ASN.1 UTC time string. """ fmt = '%y%m%d%H%M' if date.second > 0: fmt += '%S' if date.tzinfo is None: fmt += 'Z' else: fmt += '%z' return date.strftime(fmt) def restricted_utc_time_to_datetime(string): """Convert given restricted ASN.1 UTC time string `string` to a ``datetime.datetime`` object. """ try: if string[-1] != 'Z': raise ValueError if len(string) != 13: raise ValueError return datetime.strptime(string[:-1], '%y%m%d%H%M%S') except (ValueError, IndexError): raise Error( "Expected a restricted UTC time string, but got '{}'.".format( string)) def restricted_utc_time_from_datetime(date): """Convert given ``datetime.datetime`` object `date` to an restricted ASN.1 UTC time string. """ if date.tzinfo is not None: date -= date.utcoffset() return date.strftime('%y%m%d%H%M%S') + 'Z' def generalized_time_to_datetime(string): """Convert given ASN.1 generalized time string `string` to a ``datetime.datetime`` object. """ try: if string[-1] == 'Z': date = _generalized_time_to_datetime(string[:-1]) return date.replace(tzinfo=compat.timezone(timedelta(hours=0))) elif string[-5] in '-+': if '.' in string: try: return compat.strptime(string, '%Y%m%d%H%M.%f%z') except ValueError: return compat.strptime(string, '%Y%m%d%H%M%S.%f%z') elif ',' in string: try: return compat.strptime(string, '%Y%m%d%H%M,%f%z') except ValueError: return compat.strptime(string, '%Y%m%d%H%M%S,%f%z') else: return compat.strptime(string, '%Y%m%d%H%M%S%z') else: return _generalized_time_to_datetime(string) except (ValueError, IndexError): raise Error( "Expected a generalized time string, but got '{}'.".format( string)) def generalized_time_from_datetime(date): """Convert given ``datetime.datetime`` object `date` to an ASN.1 generalized time string. """ if date.second == 0: if date.microsecond > 0: string = date.strftime('%Y%m%d%H%M.%f').rstrip('0') else: string = date.strftime('%Y%m%d%H%M') else: if date.microsecond > 0: string = date.strftime('%Y%m%d%H%M%S.%f').rstrip('0') else: string = date.strftime('%Y%m%d%H%M%S') if date.tzinfo is not None: if date.utcoffset(): string += date.strftime('%z') else: string += 'Z' return string def restricted_generalized_time_to_datetime(string): """Convert given restricted ASN.1 generalized time string `string` to a ``datetime.datetime`` object. """ try: if string[-1] != 'Z': raise ValueError if '.' in string: if string[-2] == '0': raise ValueError if string[14] != '.': raise ValueError return datetime.strptime(string[:-1], '%Y%m%d%H%M%S.%f') elif len(string) != 15: raise ValueError return datetime.strptime(string[:-1], '%Y%m%d%H%M%S') except (ValueError, IndexError): raise Error( "Expected a restricted generalized time string, but got '{}'.".format( string)) def restricted_generalized_time_from_datetime(date): """Convert given ``datetime.datetime`` object `date` to an restricted ASN.1 generalized time string. """ if date.tzinfo is not None: date -= date.utcoffset() if date.microsecond > 0: string = date.strftime('%Y%m%d%H%M%S.%f').rstrip('0') else: string = date.strftime('%Y%m%d%H%M%S') return string + 'Z' def format_bytes(tag): """ Format tag as hex string :param bytes tag: :return: """ return tag.hex()asn1tools-0.169.0/asn1tools/codecs/ber.py000066400000000000000000001573621524544274600201520ustar00rootroot00000000000000"""Basic Encoding Rules (BER) codec. """ import time import math import binascii from copy import copy import datetime from ..parser import EXTENSION_MARKER from . import BaseType, format_bytes, DecodeError, ErrorWithLocation from . import EncodeError from . import DecodeError from . import format_or from . import compiler from . import utc_time_to_datetime from . import utc_time_from_datetime from . import generalized_time_to_datetime from . import generalized_time_from_datetime from .compiler import enum_values_as_dict from .compiler import clean_bit_string_value class Class(object): UNIVERSAL = 0x00 APPLICATION = 0x40 CONTEXT_SPECIFIC = 0x80 PRIVATE = 0xc0 class Encoding(object): PRIMITIVE = 0x00 CONSTRUCTED = 0x20 class Tag(object): END_OF_CONTENTS = 0x00 BOOLEAN = 0x01 INTEGER = 0x02 BIT_STRING = 0x03 OCTET_STRING = 0x04 NULL = 0x05 OBJECT_IDENTIFIER = 0x06 OBJECT_DESCRIPTOR = 0x07 EXTERNAL = 0x08 REAL = 0x09 ENUMERATED = 0x0a EMBEDDED_PDV = 0x0b UTF8_STRING = 0x0c RELATIVE_OID = 0x0d SEQUENCE = 0x10 SET = 0x11 NUMERIC_STRING = 0x12 PRINTABLE_STRING = 0x13 T61_STRING = 0x14 VIDEOTEX_STRING = 0x15 IA5_STRING = 0x16 UTC_TIME = 0x17 GENERALIZED_TIME = 0x18 GRAPHIC_STRING = 0x19 VISIBLE_STRING = 0x1a GENERAL_STRING = 0x1b UNIVERSAL_STRING = 0x1c CHARACTER_STRING = 0x1d BMP_STRING = 0x1e DATE = 0x1f TIME_OF_DAY = 0x20 DATE_TIME = 0x21 END_OF_CONTENTS_OCTETS = b'\x00\x00' TAG_MISMATCH = object() def flatten(l): """ Flatten irregular nested list :param l: :return: """ if isinstance(l, (list, tuple)): return [a for i in l for a in flatten(i)] else: return [l] def is_end_of_data(data, offset, end_offset): # Detect end of data if end_offset is not None: if offset >= end_offset: return True, offset elif detect_end_of_contents_tag(data, offset): return True, offset + 2 return False, offset def detect_end_of_contents_tag(data, offset): """ Determine whether end of contents tag is present at offset in data :param bytes data: :param int offset: :return: """ two_bytes = data[offset:offset + 2] if two_bytes == END_OF_CONTENTS_OCTETS: return True # Detect missing data elif len(two_bytes) != 2: raise OutOfByteDataError( 'Ran out of data when trying to find End of Contents tag for indefinite length field', offset=offset) else: return False def check_decode_error(asn_type, decoded_value, data, offset): """ Checks if decode result corresponds to TAG_MISMATCH, if so, raise DecodeTagError :return: """ if decoded_value == TAG_MISMATCH: raise DecodeTagError(asn_type, data, offset, location=asn_type) class MissingMandatoryFieldError(DecodeError): """ Error for when there is no data for a mandatory field member """ def __init__(self, member, offset): super().__init__('{} is missing and has no default value'.format(member), offset=offset, location=member) class OutOfByteDataError(DecodeError): """ Error for when running out of / missing data missing when attempting to decode """ pass class MissingDataError(OutOfByteDataError): """ Special variant of OutOfByteDataError for when remaining data length is less than decoded element length """ def __init__(self, message, offset, expected_length, location=None): super().__init__(message, offset, location=location) self.expected_length = expected_length class DecodeTagError(DecodeError): """ ASN.1 tag decode error for BER and DER codecs """ def __init__(self, asn_type, data, offset, location=None): """ :param StandardDecodeMixin, Type asn_type: ASN type instance error occurred for :param bytes data: ASN data :param int offset: :param str location: Name of ASN1 element error occurred in """ self.actual_tag = format_bytes(read_tag(data, offset) if asn_type.tag_len is None else data[offset:offset + asn_type.tag_len]) self.asn_type = asn_type tag = asn_type.format_tag() message = "Expected {} with {}, but got '{}'.".format( asn_type.type_label(), 'tags {}'.format(tag) if isinstance(tag, list) else "tag '{}'".format(tag), self.actual_tag) super(DecodeTagError, self).__init__(message, offset=offset, location=location) class NoEndOfContentsTagError(DecodeError): """ Exception for when end-of-contents tag (00) could not be found for indefinite-length field """ pass def encode_length_definite(length): if length <= 127: encoded = bytearray([length]) else: encoded = bytearray() while length > 0: encoded.append(length & 0xff) length >>= 8 encoded.append(0x80 | len(encoded)) encoded.reverse() return encoded def decode_length(encoded, offset, enforce_definite=True): """ Decode definite or indefinite length of an ASN.1 node :param bytes encoded: :param int offset: :param bool enforce_definite: Whether to raise error if length is indefinite :return: """ try: length = encoded[offset] except IndexError: raise OutOfByteDataError('Ran out of data when trying to read length', offset=offset) offset += 1 if length & 0x80: # Faster than > 127 # Handle indefinite length if length == 128: if enforce_definite: raise DecodeError('Expected definite length, but got indefinite.', offset=offset - 1) return None, offset else: # Handle long length number_of_bytes = (length & 0x7f) encoded_length = encoded[offset:number_of_bytes + offset] # Verify all the length bytes exist if len(encoded_length) != number_of_bytes: raise OutOfByteDataError('Expected {} length byte(s) at offset {}, but got {}.'.format( number_of_bytes, offset, len(encoded_length)), offset=offset) length = int(binascii.hexlify(encoded_length), 16) offset += number_of_bytes # Detect missing data data_length = len(encoded) if offset + length > data_length: raise MissingDataError( 'Expected at least {} contents byte(s), but got {}.'.format(length, data_length - offset), offset, length ) return length, offset def encode_signed_integer(number): byte_length = (8 + (number + (number < 0)).bit_length()) // 8 return number.to_bytes(length=byte_length, byteorder='big', signed=True) def encode_tag(number, flags): if number < 31: tag = bytearray([flags | number]) else: tag = bytearray([flags | 0x1f]) encoded = bytearray() while number > 0: encoded.append(0x80 | (number & 0x7f)) number >>= 7 encoded[0] &= 0x7f encoded.reverse() tag.extend(encoded) return tag def skip_tag(data, offset): try: byte = data[offset] offset += 1 if byte & 0x1f == 0x1f: while data[offset] & 0x80: offset += 1 offset += 1 except IndexError: raise OutOfByteDataError('Ran out of data when reading tag', offset=offset) if offset >= len(data): raise OutOfByteDataError('Ran out of data when reading tag', offset=offset) return offset def read_tag(data, offset): return data[offset:skip_tag(data, offset)] def skip_tag_length_contents(data, offset): """ Get offset position at end of node (skip tag, length and contents) :param data: :param offset: :return: """ offset = skip_tag(data, offset) return sum(decode_length(data, offset)) def encode_real(data): if data == float('inf'): data = b'\x40' elif data == float('-inf'): data = b'\x41' elif math.isnan(data): data = b'\x42' elif data == 0.0: data = b'' else: if data >= 0: negative_bit = 0 else: negative_bit = 0x40 data *= -1 mantissa, exponent = math.frexp(abs(data)) mantissa = int(mantissa * 2 ** 53) lowest_set_bit = compiler.lowest_set_bit(mantissa) mantissa >>= lowest_set_bit mantissa |= (0x80 << (8 * ((mantissa.bit_length() // 8) + 1))) mantissa = binascii.unhexlify(hex(mantissa)[4:].rstrip('L')) exponent = (52 - lowest_set_bit - exponent) if -129 < exponent < 128: exponent = [0x80 | negative_bit, ((0xff - exponent) & 0xff)] elif -32769 < exponent < 32768: exponent = ((0xffff - exponent) & 0xffff) exponent = [0x81 | negative_bit, (exponent >> 8), exponent & 0xff] else: raise NotImplementedError( 'REAL exponent {} out of range.'.format(exponent)) data = bytearray(exponent) + mantissa return data def decode_real_binary(control, data): if control in [0x80, 0xc0]: exponent = data[1] if exponent & 0x80: exponent -= 0x100 offset = 2 elif control in [0x81, 0xc1]: exponent = ((data[1] << 8) | data[2]) if exponent & 0x8000: exponent -= 0x10000 offset = 3 else: raise DecodeError( 'Unsupported binary REAL control word 0x{:02x}.'.format(control)) mantissa = int(binascii.hexlify(data[offset:]), 16) decoded = float(mantissa * 2 ** exponent) if control & 0x40: decoded *= -1 return decoded def decode_real_special(control): try: return { 0x40: float('inf'), 0x41: float('-inf'), 0x42: float('nan'), 0x43: -0.0 }[control] except KeyError: raise DecodeError( 'Unsupported special REAL control word 0x{:02x}.'.format(control)) def decode_real_decimal(data): return float(data[1:].replace(b',', b'.')) def decode_real(data): if len(data) == 0: decoded = 0.0 else: control = data[0] if control & 0x80: decoded = decode_real_binary(control, data) elif control & 0x40: decoded = decode_real_special(control) else: decoded = decode_real_decimal(data) return decoded def encode_object_identifier(data): identifiers = [int(identifier) for identifier in data.split('.')] first_subidentifier = (40 * identifiers[0] + identifiers[1]) encoded_subidentifiers = encode_object_identifier_subidentifier( first_subidentifier) for identifier in identifiers[2:]: encoded_subidentifiers += encode_object_identifier_subidentifier( identifier) return encoded_subidentifiers def encode_object_identifier_subidentifier(subidentifier): encoded = [subidentifier & 0x7f] subidentifier >>= 7 while subidentifier > 0: encoded.append(0x80 | (subidentifier & 0x7f)) subidentifier >>= 7 return encoded[::-1] def decode_object_identifier(data, offset, end_offset): subidentifier, offset = decode_object_identifier_subidentifier(data, offset) decoded = [subidentifier // 40, subidentifier % 40] while offset < end_offset: subidentifier, offset = decode_object_identifier_subidentifier(data, offset) decoded.append(subidentifier) return '.'.join([str(v) for v in decoded]) def decode_object_identifier_subidentifier(data, offset): decoded = 0 while data[offset] & 0x80: decoded += (data[offset] & 0x7f) decoded <<= 7 offset += 1 decoded += data[offset] return decoded, offset + 1 class Type(BaseType): """ Base type class for BER types """ def __init__(self, name, type_name, number, flags=0): """ :param str name: Name of type instance :param str type_name: ASN1 Type name :param int number: Tag number :param flags: """ super().__init__(name, type_name) if number is None: self.tag = None self.tag_len = None else: self.tag = encode_tag(number, flags) self.tag_len = len(self.tag) def decode(self, data, offset, values=None): """ Decode type value from byte data :param bytearray data: Binary ASN1 data to decode :param int offset: Current byte offset :param dict values: :return: Tuple of (decoded_value, end_offset) """ raise NotImplementedError() def encode(self, data, encoded, values=None): """ Encode value into byte data :param data: Value to be encoded :param bytearray encoded: Existing byte data to add encoded data to :param values: :return: None (extend 'encoded' bytearray) """ raise NotImplementedError() def set_tag(self, number, flags): self.tag = encode_tag(number, flags) self.tag_len = len(self.tag) def format_tag(self): """ Get formatted hex string representation of this type's tag :return: """ return format_bytes(self.tag) if self.tag is not None else '(Unknown)' def set_size_range(self, minimum, maximum, has_extension_marker): pass class StandardDecodeMixin(object): """ Type class mixin for standard decoding logic (single predefined tag to be matched against, then decode length and contents) """ indefinite_allowed = False # Whether indefinite length encoding is allowed for this type def decode(self, data, offset, values=None): """ Implements standard decode logic (single predefined tag to be matched against, then decode length and contents) :param bytearray data: Binary ASN1 data to decode :param int offset: Current byte offset :param dict values: :return: Tuple of (decoded_value, end_offset) """ start_offset = offset offset += self.tag_len # Validate tag tag_data = data[start_offset:offset] if tag_data != self.tag: # Check for missing data if len(tag_data) != self.tag_len: raise OutOfByteDataError('Ran out of data when reading tag', offset=start_offset) # return TAG_MISMATCH Instead of raising DecodeTagError for better performance so that MembersType does # not have to catch exception for every missing optional type # CompiledType.decode_with_length() will detect TAG_MISMATCH returned value and raise appropriate exception return TAG_MISMATCH, start_offset # Decode length length, offset = decode_length(data, offset, enforce_definite=not self.indefinite_allowed) return self.decode_content(data, offset, length) def decode_content(self, data, offset, length): """ Type-specific logic to decode content :param bytearray data: Binary data to decode :param int offset: Offset for start of content bytes :param int length: Length of content bytes (None if indefinite) :return: Tuple of (decoded_value, end_offset) """ raise NotImplementedError('Type {} does not implement decode_content() method'.format(type(self).__name__)) class StandardEncodeMixin(object): """ Type class mixin for standard encoding logic (append tag + length(content) + content) """ def encode(self, data, encoded, values=None): """ Encode value into byte data :param data: Value to be encoded :param bytearray encoded: Existing byte data to add encoded data to :param values: :return: """ encoded_data = bytearray(self.encode_content(data, values=values)) encoded.extend(self.tag + encode_length_definite(len(encoded_data)) + encoded_data) def encode_content(self, data, values=None): """ Encode data value into bytearray :param data: :param values: :return: """ raise NotImplementedError() class PrimitiveOrConstructedType(Type): """ Base type class for types which can be either primitive or constructed (BitString, OctetString, String) """ def __init__(self, name, type_name, number, segment, flags=0): super(PrimitiveOrConstructedType, self).__init__(name, type_name, number, flags) self.segment = segment self.constructed_tag = copy(self.tag) self.constructed_tag[0] |= Encoding.CONSTRUCTED def set_tag(self, number, flags): self.tag = encode_tag(number, flags) self.constructed_tag = copy(self.tag) self.constructed_tag[0] |= Encoding.CONSTRUCTED self.tag_len = len(self.tag) def decode(self, data, start_offset, values=None): """ Custom decode logic to handle primitive or constructed types Return decoded value and new offset """ offset = start_offset + self.tag_len tag = data[start_offset:offset] # Validate tag if tag == self.tag: is_primitive = True elif tag == self.constructed_tag: is_primitive = False elif len(tag) != self.tag_len: # Detect out of data raise OutOfByteDataError('Ran out of data when reading tag', offset=start_offset) else: # Tag mismatch. Return DECODE_FAILED instead of raising DecodeError for performance return TAG_MISMATCH, start_offset length, offset = decode_length(data, offset, enforce_definite=False) if is_primitive: end_offset = offset + length return self.decode_primitive_contents(data, offset, length), end_offset else: return self.decode_constructed_contents(data, offset, length) def decode_constructed_contents(self, data, offset, length): segments = [] end_offset = None if length is None else offset + length while True: end_of_data, offset = is_end_of_data(data, offset, end_offset) if end_of_data: break decoded, offset = self.segment.decode(data, offset) check_decode_error(self.segment, decoded, data, offset) segments.append(decoded) return self.decode_constructed_segments(segments), offset def decode_primitive_contents(self, data, offset, length): raise NotImplementedError('To be implemented by subclasses.') def decode_constructed_segments(self, segments): raise NotImplementedError('To be implemented by subclasses.') class StringType(StandardEncodeMixin, PrimitiveOrConstructedType): TAG = None ENCODING = None def __init__(self, name): super(StringType, self).__init__(name, self.__class__.__name__, self.TAG, OctetString(name)) def encode_content(self, data, values=None): return data.encode(self.ENCODING) def decode_primitive_contents(self, data, offset, length): return data[offset:offset + length].decode(self.ENCODING) def decode_constructed_segments(self, segments): return bytearray().join(segments).decode(self.ENCODING) class MembersType(StandardEncodeMixin, StandardDecodeMixin, Type): indefinite_allowed = True def __init__(self, name, tag_name, tag, root_members, additions): super(MembersType, self).__init__(name, tag_name, tag, Encoding.CONSTRUCTED) self.root_members = root_members self.additions = additions def set_tag(self, number, flags): super(MembersType, self).set_tag(number, flags | Encoding.CONSTRUCTED) def encode_content(self, data, values=None): encoded_members = bytearray() for member in self.root_members: self.encode_member(member, data, encoded_members) if self.additions: self.encode_additions(data, encoded_members) return encoded_members def encode_additions(self, data, encoded_members): try: for addition in self.additions: encoded_addition = bytearray() if isinstance(addition, list): for member in addition: self.encode_member(member, data, encoded_addition) else: self.encode_member(addition, data, encoded_addition) encoded_members.extend(encoded_addition) except EncodeError: pass def encode_member(self, member, data, encoded_members): name = member.name if name in data: value = data[name] try: if isinstance(member, AnyDefinedBy): member.encode(value, encoded_members, data) elif not member.is_default(value): member.encode(value, encoded_members) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e elif member.optional: pass elif not member.has_default(): raise EncodeError("{} member '{}' not found in {}.".format( self.__class__.__name__, name, data)) def decode_content(self, data, offset, length): end_offset = None if length is None else offset + length values = {} offset, out_of_data = self.decode_members(self.root_members, data, values, offset, end_offset) # Decode additions (even if out of data already, so defaults can be added) if self.additions: offset, out_of_data = self.decode_members(flatten(self.additions), data, values, offset, end_offset, ignore_missing=True) if out_of_data: return values, offset if end_offset is None: raise NoEndOfContentsTagError('Could not find end-of-contents tag for indefinite length field.', offset=offset) else: # Extra data is allowed in cases of versioned additions return values, end_offset def decode_members(self, members, data, values, offset, end_offset, ignore_missing=False): """ Decode values for members from data starting from offset Supports member data encoded in different order than members specified :param list members: List of member types :param bytearray data: :param dict values: :param int offset: :param int end_offset: End offset of member data (None if indefinite length field) :param bool ignore_missing: Whether to not raise DecodeError for missing mandatory fields with no defaults :return: """ # Decode member values from data remaining_members = members # Outer loop to enable decoding members out of order while True: undecoded_members = [] decode_success = False # Whether at least one member was successfully decoded out_of_data, offset = is_end_of_data(data, offset, end_offset) # Attempt to decode remaining members. If they are encoded in same order, should decode all in one loop # Otherwise will require multiple iterations of outer loop for member in remaining_members: # Dont attempt decode if already out of data, just add member to list of undecoded if out_of_data: undecoded_members.append(member) continue # Attempt decode try: value, offset = member.decode(data, offset, values=values) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e if value == TAG_MISMATCH: undecoded_members.append(member) else: decode_success = True values[member.name] = value # Detect end of data out_of_data, offset = is_end_of_data(data, offset, end_offset) remaining_members = undecoded_members if out_of_data: break if not decode_success: # No members are able to decode data, exit loop break # Handle remaining members that there is no data for # (will raise error if member is not optional and has no default) for member in remaining_members: if member.optional: continue if member.has_default(): values[member.name] = member.get_default() elif ignore_missing: break elif out_of_data: raise MissingMandatoryFieldError(member, offset) else: raise DecodeTagError(member, data, offset, location=member) return offset, out_of_data def __repr__(self): return '{}({}, [{}])'.format( self.__class__.__name__, self.name, ', '.join([repr(member) for member in self.root_members])) class ArrayType(StandardEncodeMixin, StandardDecodeMixin, Type): indefinite_allowed = True def __init__(self, name, tag_name, tag, element_type): super(ArrayType, self).__init__(name, tag_name, tag, Encoding.CONSTRUCTED) self.element_type = element_type def set_tag(self, number, flags): super(ArrayType, self).set_tag(number, flags | Encoding.CONSTRUCTED) def encode_content(self, data, values=None): encoded_elements = bytearray() for entry in data: self.element_type.encode(entry, encoded_elements) return encoded_elements def decode_content(self, data, offset, length): decoded = [] start_offset = offset # Loop through data until length exceeded or end-of-contents tag reached. while True: if length is None: # Find end of indefinite sequence. if detect_end_of_contents_tag(data, offset): offset += 2 break elif (offset - start_offset) >= length: # End of definite length sequence. break decoded_element, offset = self.element_type.decode(data, offset) # Invalid Tag check_decode_error(self.element_type, decoded_element, data, offset) decoded.append(decoded_element) return decoded, offset def __repr__(self): return '{}({}, {})'.format(self.__class__.__name__, self.name, self.element_type) class Boolean(StandardEncodeMixin, StandardDecodeMixin, Type): def __init__(self, name): super(Boolean, self).__init__(name, 'BOOLEAN', Tag.BOOLEAN) def encode_content(self, data, values=None): return bytearray([0xff * data]) def decode_content(self, data, offset, length): if length != 1: raise DecodeError( 'Expected BOOLEAN contents length 1, but ' 'got {}.'.format(length), offset=offset-1) return bool(data[offset]), offset + length class Integer(StandardEncodeMixin, StandardDecodeMixin, Type): def __init__(self, name): super(Integer, self).__init__(name, 'INTEGER', Tag.INTEGER) def encode_content(self, data, values=None): return encode_signed_integer(data) def decode_content(self, data, offset, length): end_offset = offset + length return int.from_bytes(data[offset:end_offset], byteorder='big', signed=True), end_offset class Real(StandardEncodeMixin, StandardDecodeMixin, Type): def __init__(self, name): super(Real, self).__init__(name, 'REAL', Tag.REAL) def encode_content(self, data, values=None): return encode_real(data) def decode_content(self, data, offset, length): end_offset = offset + length decoded = decode_real(data[offset:end_offset]) return decoded, end_offset class Null(StandardDecodeMixin, Type): def __init__(self, name): super(Null, self).__init__(name, 'NULL', Tag.NULL) def is_default(self, value): return False def encode(self, _, encoded): encoded.extend(self.tag) encoded.append(0) def decode_content(self, data, offset, length): return None, offset class BitString(StandardEncodeMixin, PrimitiveOrConstructedType): def __init__(self, name, has_named_bits): super(BitString, self).__init__(name, 'BIT STRING', Tag.BIT_STRING, self) self.has_named_bits = has_named_bits def is_default(self, value): if self.default is None: return False clean_value = clean_bit_string_value(value, self.has_named_bits) clean_default = clean_bit_string_value(self.default, self.has_named_bits) return clean_value == clean_default def encode_content(self, data, values=None): number_of_bytes, number_of_rest_bits = divmod(data[1], 8) data = bytearray(data[0]) if number_of_rest_bits == 0: data = data[:number_of_bytes] number_of_unused_bits = 0 else: last_byte = data[number_of_bytes] last_byte &= ((0xff >> number_of_rest_bits) ^ 0xff) data = data[:number_of_bytes] data.append(last_byte) number_of_unused_bits = (8 - number_of_rest_bits) return bytearray([number_of_unused_bits]) + data def decode_primitive_contents(self, data, offset, length): length -= 1 number_of_bits = 8 * length - data[offset] offset += 1 return (data[offset:offset + length], number_of_bits) def decode_constructed_segments(self, segments): decoded = bytearray() number_of_bits = 0 for data, length in segments: decoded.extend(data) number_of_bits += length return (bytes(decoded), number_of_bits) class OctetString(StandardEncodeMixin, PrimitiveOrConstructedType): def __init__(self, name): super(OctetString, self).__init__(name, 'OCTET STRING', Tag.OCTET_STRING, self) def encode_content(self, data, values=None): return data def decode_primitive_contents(self, data, offset, length): return bytes(data[offset:offset + length]) def decode_constructed_segments(self, segments): return bytes().join(segments) class ObjectIdentifier(StandardEncodeMixin, StandardDecodeMixin, Type): def __init__(self, name): super(ObjectIdentifier, self).__init__(name, 'OBJECT IDENTIFIER', Tag.OBJECT_IDENTIFIER) def encode_content(self, data, values=None): return encode_object_identifier(data) def decode_content(self, data, offset, length): end_offset = offset + length decoded = decode_object_identifier(data, offset, end_offset) return decoded, end_offset class Enumerated(StandardEncodeMixin, StandardDecodeMixin, Type): def __init__(self, name, values, numeric): super(Enumerated, self).__init__(name, 'ENUMERATED', Tag.ENUMERATED) if numeric: self.value_to_data = {k: k for k in enum_values_as_dict(values)} self.data_to_value = self.value_to_data else: self.value_to_data = enum_values_as_dict(values) self.data_to_value = {v: k for k, v in self.value_to_data.items()} self.has_extension_marker = (EXTENSION_MARKER in values) def format_names(self): return format_or(sorted(list(self.value_to_data.values()))) def format_values(self): return format_or(sorted(list(self.value_to_data))) def encode_content(self, data, values=None): try: value = self.data_to_value[data] except KeyError: raise EncodeError( "Expected enumeration value {}, but got '{}'.".format( self.format_names(), data)) return encode_signed_integer(value) def decode_content(self, data, offset, length): end_offset = offset + length value = int.from_bytes(data[offset:end_offset], byteorder='big', signed=True) if value in self.value_to_data: return self.value_to_data[value], end_offset elif self.has_extension_marker: return None, end_offset else: raise DecodeError( 'Expected enumeration value {}, but got {}.'.format( self.format_values(), value), offset=offset) class Sequence(MembersType): def __init__(self, name, root_members, additions): super(Sequence, self).__init__(name, 'SEQUENCE', Tag.SEQUENCE, root_members, additions) class SequenceOf(ArrayType): def __init__(self, name, element_type): super(SequenceOf, self).__init__(name, 'SEQUENCE OF', Tag.SEQUENCE, element_type) class Set(MembersType): def __init__(self, name, root_members, additions): super(Set, self).__init__(name, 'SET', Tag.SET, root_members, additions) class SetOf(ArrayType): def __init__(self, name, element_type): super(SetOf, self).__init__(name, 'SET OF', Tag.SET, element_type) class Choice(Type): def __init__(self, name, root_members, additions): super(Choice, self).__init__(name, 'CHOICE', None) members = root_members if additions is not None: for addition in additions: if isinstance(addition, list): members += addition else: members.append(addition) self.has_extension_marker = True else: self.has_extension_marker = False self.members = members self.name_to_member = {member.name: member for member in self.members} self.tag_to_member = {} self.add_tags(self.members) def add_tags(self, members): for member in members: tags = self.get_member_tags(member) for tag in tags: self.tag_to_member[tag] = member def get_member_tags(self, member): tags = [] if isinstance(member, Choice): tags = self.get_choice_tags(member) elif isinstance(member, Recursive): if member.inner is None: member.choice_parents.append(self) else: tags = self.get_member_tags(member.inner) else: tags.append(bytes(member.tag)) if hasattr(member, 'constructed_tag'): tags.append(bytes(member.constructed_tag)) return tags def get_choice_tags(self, choice): tags = [] for member in choice.members: tags.extend(self.get_member_tags(member)) return tags def format_tag(self): return [format_bytes(tag) for tag in self.tag_to_member] def format_names(self): return format_or(sorted([member.name for member in self.members])) def encode(self, data, encoded, values=None): try: member = self.name_to_member[data[0]] except KeyError: raise EncodeError( "Expected choice {}, but got '{}'.".format( self.format_names(), data[0])) try: member.encode(data[1], encoded) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e def decode(self, data, offset, values=None): tag = bytes(read_tag(data, offset)) if tag in self.tag_to_member: member = self.tag_to_member[tag] elif self.has_extension_marker: offset = skip_tag_length_contents(data, offset) return (None, None), offset else: return TAG_MISMATCH, offset try: decoded, offset = member.decode(data, offset) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e return (member.name, decoded), offset def __repr__(self): return 'Choice({}, [{}])'.format( self.name, ', '.join([repr(member) for member in self.members])) class UTF8String(StringType): TAG = Tag.UTF8_STRING ENCODING = 'utf-8' class NumericString(StringType): TAG = Tag.NUMERIC_STRING ENCODING = 'ascii' class PrintableString(StringType): TAG = Tag.PRINTABLE_STRING ENCODING = 'ascii' class IA5String(StringType): TAG = Tag.IA5_STRING ENCODING = 'ascii' class VisibleString(StringType): TAG = Tag.VISIBLE_STRING ENCODING = 'ascii' class GeneralString(StringType): TAG = Tag.GENERAL_STRING ENCODING = 'latin-1' class BMPString(StringType): TAG = Tag.BMP_STRING ENCODING = 'utf-16-be' class GraphicString(StringType): TAG = Tag.GRAPHIC_STRING ENCODING = 'latin-1' class UniversalString(StringType): TAG = Tag.UNIVERSAL_STRING ENCODING = 'utf-32-be' class TeletexString(StringType): TAG = Tag.T61_STRING ENCODING = 'iso-8859-1' class ObjectDescriptor(GraphicString): TAG = Tag.OBJECT_DESCRIPTOR class UTCTime(StandardEncodeMixin, StandardDecodeMixin, Type): def __init__(self, name): super(UTCTime, self).__init__(name, 'UTCTime', Tag.UTC_TIME) def encode_content(self, data, values=None): return utc_time_from_datetime(data).encode('ascii') def decode_content(self, data, offset, length): end_offset = offset + length decoded = data[offset:end_offset].decode('ascii') return utc_time_to_datetime(decoded), end_offset class GeneralizedTime(StandardEncodeMixin, StandardDecodeMixin, Type): def __init__(self, name): super(GeneralizedTime, self).__init__(name, 'GeneralizedTime', Tag.GENERALIZED_TIME) def encode_content(self, data, values=None): return generalized_time_from_datetime(data).encode('ascii') def decode_content(self, data, offset, length): end_offset = offset + length decoded = data[offset:end_offset].decode('ascii') return generalized_time_to_datetime(decoded), end_offset class Date(StandardEncodeMixin, StandardDecodeMixin, Type): def __init__(self, name): super(Date, self).__init__(name, 'DATE', Tag.DATE) def encode_content(self, data, values=None): return str(data).replace('-', '').encode('ascii') def decode_content(self, data, offset, length): end_offset = offset + length decoded = data[offset:end_offset].decode('ascii') decoded = datetime.date(*time.strptime(decoded, '%Y%m%d')[:3]) return decoded, end_offset class TimeOfDay(StandardEncodeMixin, StandardDecodeMixin, Type): def __init__(self, name): super(TimeOfDay, self).__init__(name, 'TIME-OF-DAY', Tag.TIME_OF_DAY) def encode_content(self, data, values=None): return str(data).replace(':', '').encode('ascii') def decode_content(self, data, offset, length): end_offset = offset + length decoded = data[offset:end_offset].decode('ascii') decoded = datetime.time(*time.strptime(decoded, '%H%M%S')[3:6]) return decoded, end_offset class DateTime(StandardEncodeMixin, StandardDecodeMixin, Type): def __init__(self, name): super(DateTime, self).__init__(name, 'DATE-TIME', Tag.DATE_TIME) def encode_content(self, data, values=None): return '{:04d}{:02d}{:02d}{:02d}{:02d}{:02d}'.format(*data.timetuple()).encode('ascii') def decode_content(self, data, offset, length): end_offset = offset + length decoded = data[offset:end_offset].decode('ascii') decoded = datetime.datetime(*time.strptime(decoded, '%Y%m%d%H%M%S')[:6]) return decoded, end_offset class Any(Type): def __init__(self, name): super(Any, self).__init__(name, 'ANY', None) def encode(self, data, encoded): encoded.extend(data) def decode(self, data, offset, values=None): start = offset offset = skip_tag(data, offset) length, offset = decode_length(data, offset) end_offset = offset + length return data[start:end_offset], end_offset class AnyDefinedBy(Type): def __init__(self, name, type_member, choices): super(AnyDefinedBy, self).__init__(name, 'ANY DEFINED BY', None, None) self.type_member = type_member self.choices = choices def encode(self, data, encoded, values): if self.choices: try: self.choices[values[self.type_member]].encode(data, encoded) except KeyError: raise EncodeError('Bad AnyDefinedBy choice {}.'.format( values[self.type_member])) else: encoded.extend(data) def decode(self, data, offset, values): """ :param data: :param int offset: Byte offset in ASN1 data :param dict values: Dictionary of already decoded values in containing type :return: """ if self.choices: try: return self.choices[values[self.type_member]].decode(data, offset) except KeyError: raise DecodeError('Bad AnyDefinedBy choice {}.'.format( values[self.type_member]), offset=offset) else: start = offset offset = skip_tag(data, offset) length, offset = decode_length(data, offset) end_offset = offset + length return data[start:end_offset], end_offset class ExplicitTag(StandardEncodeMixin, StandardDecodeMixin, Type): # no_error_location = True indefinite_allowed = True def __init__(self, name, inner): super(ExplicitTag, self).__init__(name, 'ExplicitTag', None) self.inner = inner def set_default(self, value): self.inner.set_default(value) def get_default(self): return self.inner.get_default() def is_default(self, value): return self.inner.is_default(value) def has_default(self): return self.inner.has_default() def set_tag(self, number, flags): super(ExplicitTag, self).set_tag(number, flags | Encoding.CONSTRUCTED) def encode_content(self, data, values=None): encoded_inner = bytearray() self.inner.encode(data, encoded_inner) return encoded_inner def decode_content(self, data, offset, length): values, end_offset = self.inner.decode(data, offset) check_decode_error(self.inner, values, data, offset) # Verify End of Contents tag exists for Indefinite field if length is None: if not detect_end_of_contents_tag(data, end_offset): raise NoEndOfContentsTagError('Expected end-of-contents tag.', offset=end_offset, location=self) end_offset += 2 return values, end_offset class Recursive(compiler.Recursive, Type): def __init__(self, name, type_name, module_name): super(Recursive, self).__init__(name, 'RECURSIVE', None) self.type_name = type_name self.module_name = module_name self.tag_number = None self.tag_flags = None self.inner = None self.choice_parents = [] def set_tag(self, number, flags): self.tag_number = number self.tag_flags = flags def set_inner_type(self, inner): self.inner = copy(inner) if self.tag_number is not None: self.inner.set_tag(self.tag_number, self.tag_flags) for choice_parent in self.choice_parents: choice_parent.add_tags([self]) def encode(self, data, encoded, values=None): self.inner.encode(data, encoded) def decode(self, data, offset, values=None): return self.inner.decode(data, offset) class CompiledType(compiler.CompiledType): def encode(self, data): encoded = bytearray() try: self._type.encode(data, encoded) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e return encoded def decode(self, data): return self.decode_with_length(data)[0] def decode_with_length(self, data): """ Decode and return decoded values as well as length of binary data decoded :param data: :return: """ try: decoded, offset = self._type.decode(bytearray(data), 0) # Raise DecodeError check_decode_error(self._type, decoded, data, offset) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e return decoded, offset def get_tag_no_encoding(member): value = (member.tag[0] & ~Encoding.CONSTRUCTED) return bytearray([value]) + member.tag[1:] class Compiler(compiler.Compiler): def process_type(self, type_name, type_descriptor, module_name): compiled_type = self.compile_type(type_name, type_descriptor, module_name) return CompiledType(compiled_type) def compile_implicit_type(self, name, type_descriptor, module_name): type_name = type_descriptor['type'] if type_name == 'SEQUENCE': compiled = Sequence( name, *self.compile_members(type_descriptor['members'], module_name)) elif type_name == 'SEQUENCE OF': compiled = SequenceOf(name, self.compile_type('', type_descriptor['element'], module_name)) elif type_name == 'SET': compiled = Set( name, *self.compile_members(type_descriptor['members'], module_name, sort_by_tag=True)) elif type_name == 'SET OF': compiled = SetOf(name, self.compile_type('', type_descriptor['element'], module_name)) elif type_name == 'CHOICE': compiled = Choice( name, *self.compile_members(type_descriptor['members'], module_name)) elif type_name == 'INTEGER': compiled = Integer(name) elif type_name == 'REAL': compiled = Real(name) elif type_name == 'ENUMERATED': compiled = Enumerated(name, self.get_enum_values(type_descriptor, module_name), self._numeric_enums) elif type_name == 'BOOLEAN': compiled = Boolean(name) elif type_name == 'OBJECT IDENTIFIER': compiled = ObjectIdentifier(name) elif type_name == 'OCTET STRING': compiled = OctetString(name) elif type_name == 'TeletexString': compiled = TeletexString(name) elif type_name == 'NumericString': compiled = NumericString(name) elif type_name == 'PrintableString': compiled = PrintableString(name) elif type_name == 'IA5String': compiled = IA5String(name) elif type_name == 'VisibleString': compiled = VisibleString(name) elif type_name == 'GeneralString': compiled = GeneralString(name) elif type_name == 'UTF8String': compiled = UTF8String(name) elif type_name == 'BMPString': compiled = BMPString(name) elif type_name == 'GraphicString': compiled = GraphicString(name) elif type_name == 'UTCTime': compiled = UTCTime(name) elif type_name == 'UniversalString': compiled = UniversalString(name) elif type_name == 'GeneralizedTime': compiled = GeneralizedTime(name) elif type_name == 'DATE': compiled = Date(name) elif type_name == 'TIME-OF-DAY': compiled = TimeOfDay(name) elif type_name == 'DATE-TIME': compiled = DateTime(name) elif type_name == 'BIT STRING': has_named_bits = ('named-bits' in type_descriptor) compiled = BitString(name, has_named_bits) elif type_name == 'ANY': compiled = Any(name) elif type_name == 'ANY DEFINED BY': choices = {} for key, value in type_descriptor['choices'].items(): choices[key] = self.compile_type(key, value, module_name) compiled = AnyDefinedBy(name, type_descriptor['value'], choices) elif type_name == 'NULL': compiled = Null(name) elif type_name == 'EXTERNAL': compiled = Sequence( name, *self.compile_members(self.external_type_descriptor()['members'], module_name)) compiled.set_tag(Tag.EXTERNAL, 0) elif type_name == 'ObjectDescriptor': compiled = ObjectDescriptor(name) else: if type_name in self.types_backtrace: compiled = Recursive(name, type_name, module_name) self.recursive_types.append(compiled) else: compiled = self.compile_user_type(name, type_name, module_name) return compiled def compile_type(self, name, type_descriptor, module_name): module_name = self.get_module_name(type_descriptor, module_name) compiled = self.compile_implicit_type(name, type_descriptor, module_name) if self.is_explicit_tag(type_descriptor): compiled = ExplicitTag(name, compiled) # Set any given tag. if 'tag' in type_descriptor: compiled = self.copy(compiled) tag = type_descriptor['tag'] class_ = tag.get('class', None) if class_ == 'APPLICATION': flags = Class.APPLICATION elif class_ == 'PRIVATE': flags = Class.PRIVATE elif class_ == 'UNIVERSAL': flags = 0 else: flags = Class.CONTEXT_SPECIFIC compiled.set_tag(tag['number'], flags) return compiled def compile_members(self, members, module_name, sort_by_tag=False): compiled_members = [] in_extension = False additions = None for member in members: if member == EXTENSION_MARKER: in_extension = not in_extension if in_extension: additions = [] elif in_extension: self.compile_extension_member(member, module_name, additions) else: self.compile_root_member(member, module_name, compiled_members) if sort_by_tag: compiled_members = sorted(compiled_members, key=get_tag_no_encoding) return compiled_members, additions def compile_extension_member(self, member, module_name, additions): if isinstance(member, list): compiled_group = [] for memb in member: compiled_member = self.compile_member(memb, module_name) compiled_group.append(compiled_member) additions.append(compiled_group) else: compiled_member = self.compile_member(member, module_name) additions.append(compiled_member) def compile_dict(specification, numeric_enums=False): return Compiler(specification, numeric_enums).process() def decode_full_length(data): """ Get total byte length of ASN1 element (tag + contents length) :param data: :return: """ try: return skip_tag_length_contents(bytearray(data), 0) except MissingDataError as e: return e.offset + e.expected_length except OutOfByteDataError: return None asn1tools-0.169.0/asn1tools/codecs/compiler.py000066400000000000000000001203441524544274600212020ustar00rootroot00000000000000"""Base Compiler class used by all codecs. """ import binascii import sys from operator import attrgetter import bitstruct from copy import copy from copy import deepcopy from ..errors import CompileError from ..parser import EXTENSION_MARKER def flatten(dlist): flist = [] for item in dlist: if isinstance(item, list): flist.extend(item) else: flist.append(item) return flist def is_object_class_type_name(type_name): return '&' in type_name def is_open_type(type_name): index = type_name.find('&') if index == -1: return False return type_name[index + 1].isupper() def is_type_name(type_name): """Does not handle keywords. """ return type_name[0].isupper() def lowest_set_bit(value): offset = (value & -value).bit_length() - 1 if offset < 0: offset = 0 return offset def rstrip_bit_string_zeros(data): data = data.rstrip(b'\x00') if len(data) == 0: number_of_bits = 0 else: number_of_bits = 8 * len(data) - lowest_set_bit(data[-1]) return (data, number_of_bits) def clean_bit_string_value(value, has_named_bits): data = bytearray(value[0]) number_of_bits = value[1] number_of_bytes, number_of_rest_bits = divmod(number_of_bits, 8) if number_of_rest_bits == 0: data = data[:number_of_bytes] else: data = data[:number_of_bytes + 1] data[number_of_bytes] &= ((0xff >> number_of_rest_bits) ^ 0xff) if has_named_bits: return rstrip_bit_string_zeros(data) else: return (data, number_of_bits) class CompiledType(object): def __init__(self, type_): self.constraints_checker = None self.type_checker = None self._type = type_ @property def type(self): return self._type @property def name(self): return self._type.name def check_types(self, data): return self.type_checker.encode(data) def check_constraints(self, data): return self.constraints_checker.encode(data) def encode(self, data): raise NotImplementedError('This codec does not support encode().') def decode(self, data): raise NotImplementedError('This codec does not support decode().') def decode_with_length(self, data): raise NotImplementedError('This codec does not support decode_with_length().') def __repr__(self): return repr(self._type) class Recursive(object): """ Mixin used to identify Recursive types """ def __repr__(self): return '{}({})'.format(type(self).__name__, self.type_name) class OpenType(object): def __init__(self, name, table): self._name = name self._object_set_name = table[0] self._table = [] for item in table[1]: offset = item.count('.') offset *= -1 self._table.append((offset, item.lstrip('.'))) def __repr__(self): return 'OpenType({}, {}, {})'.format(self._name, self._object_set_name, self._table) class OpenTypeSequence(object): def __init__(self, name, members): self._name = name self._members = members def __repr__(self): return 'OpenTypeSequence({}, {})'.format(self._name, self._members) class OpenTypeSequenceOf(object): def __init__(self, name, element_type): self._name = name self._element_type = element_type def __repr__(self): return 'OpenTypeSequenceOf({}, {})'.format(self._name, self._element_type) class CompiledOpenTypes(CompiledType): def __init__(self, compiled_open_types, compiled_type): super(CompiledOpenTypes, self).__init__(compiled_type) self._compiled_open_types = compiled_open_types @property def type(self): return self._type.type def encode(self, data, **kwargs): # print() # print('data:', data) # print(self._compiled_open_types) return self._type.encode(data, **kwargs) def decode(self, data): return self._type.decode(data) class Compiler(object): def __init__(self, specification, numeric_enums=False): self._specification = specification self._numeric_enums = numeric_enums self._types_backtrace = [] self.recursive_types = [] self.compiled = {} self.current_type_descriptor = None def types_backtrace_push(self, type_name): self._types_backtrace.append(type_name) def types_backtrace_pop(self): self._types_backtrace.pop() @property def types_backtrace(self): return self._types_backtrace def process(self): self.pre_process() compiled = {} for module_name in self._specification: items = self._specification[module_name]['types'].items() for type_name, type_descriptor in items: self.types_backtrace_push(type_name) compiled_type = self.process_type(type_name, type_descriptor, module_name) compiled_type.type_name = type_name compiled_type.module_name = module_name compiled_open_types = self.compile_open_types(type_name, type_descriptor, module_name) if compiled_open_types: compiled_type = CompiledOpenTypes(compiled_open_types, compiled_type) self.types_backtrace_pop() if module_name not in compiled: compiled[module_name] = {} compiled[module_name][type_name] = compiled_type for recursive_type in self.recursive_types: compiled_module = compiled[recursive_type.module_name] inner_type = compiled_module[recursive_type.type_name].type recursive_type.set_inner_type(inner_type) return compiled def pre_process(self): for module_name, module in self._specification.items(): types = module['types'] type_descriptors = types.values() self.pre_process_components_of(type_descriptors, module_name) self.pre_process_extensibility_implied(module, type_descriptors) self.pre_process_tags(module, module_name) self.pre_process_default_value(type_descriptors, module_name) for module_name, module in self._specification.items(): self.pre_process_parameterization_step_1(module['types'], module_name) for module_name, module in self._specification.items(): types = module['types'] types = self.pre_process_parameterization_step_2(types) module['types'] = types return self._specification def pre_process_components_of(self, type_descriptors, module_name): """COMPONENTS OF expansion. """ for type_descriptor in type_descriptors: self.pre_process_components_of_type(type_descriptor, module_name) def pre_process_components_of_type(self, type_descriptor, module_name): if 'members' not in type_descriptor: return type_descriptor['members'] = self.pre_process_components_of_expand_members( type_descriptor['members'], module_name) def pre_process_components_of_expand_members(self, members, module_name): expanded_members = [] for member in members: if member != EXTENSION_MARKER and 'components-of' in member: type_descriptor, inner_module_name = self.lookup_type_descriptor( member['components-of'], module_name) inner_members = self.pre_process_components_of_expand_members( type_descriptor['members'], inner_module_name) for inner_member in inner_members: if inner_member == EXTENSION_MARKER: break expanded_members.append(deepcopy(inner_member)) else: expanded_members.append(member) return expanded_members def pre_process_extensibility_implied(self, module, type_descriptors): """Make all types extensible. """ if not module['extensibility-implied']: return for type_descriptor in type_descriptors: self.pre_process_extensibility_implied_type(type_descriptor) def pre_process_extensibility_implied_type(self, type_descriptor): if 'members' not in type_descriptor: return members = type_descriptor['members'] for member in members: if member == EXTENSION_MARKER: continue if isinstance(member, list): for type_descriptor in member: self.pre_process_extensibility_implied_type(type_descriptor) else: self.pre_process_extensibility_implied_type(member) if EXTENSION_MARKER not in members: members.append(EXTENSION_MARKER) def pre_process_tags(self, module, module_name): """Add tags where missing. """ module_tags = module.get('tags', 'EXPLICIT') for type_descriptor in module['types'].values(): self.current_type_descriptor = type_descriptor self.pre_process_tags_type(type_descriptor, module_tags, module_name) def is_dummy_reference(self, type_name): if 'parameters' not in self.current_type_descriptor: return False if type_name in self.current_type_descriptor['parameters']: return True return False def pre_process_tags_type(self, type_descriptor, module_tags, module_name): type_name = type_descriptor['type'] if 'tag' in type_descriptor: tag = type_descriptor['tag'] resolved_type_name = self.resolve_type_name(type_name, module_name) if 'kind' not in tag: if resolved_type_name == 'CHOICE': tag['kind'] = 'EXPLICIT' elif self.is_dummy_reference(type_name): tag['kind'] = 'EXPLICIT' elif module_tags in ['IMPLICIT', 'EXPLICIT']: tag['kind'] = module_tags else: tag['kind'] = 'IMPLICIT' # SEQUENCE, SET and CHOICE. if 'members' in type_descriptor: self.pre_process_tags_type_members(type_descriptor, module_tags, module_name) # SEQUENCE OF and SET OF. if 'element' in type_descriptor: self.pre_process_tags_type(type_descriptor['element'], module_tags, module_name) def pre_process_tags_type_members(self, type_descriptor, module_tags, module_name): def is_any_member_tagged(members): for member in members: if member == EXTENSION_MARKER: continue if 'tag' in member: return True return False number = None members = flatten(type_descriptor['members']) # Add tag number to all members if AUTOMATIC TAGS are # selected and no member is tagged. if module_tags == 'AUTOMATIC' and not is_any_member_tagged(members): number = 0 for member in members: if member == EXTENSION_MARKER: continue if number is not None: if 'tag' not in member: member['tag'] = {} member['tag']['number'] = number number += 1 self.pre_process_tags_type(member, module_tags, module_name) def pre_process_default_value(self, type_descriptors, module_name): """SEQUENCE and SET default member value cleanup. """ sequences_and_sets = self.get_type_descriptors( type_descriptors, ['SEQUENCE', 'SET']) for type_descriptor in sequences_and_sets: for member in type_descriptor['members']: if member == EXTENSION_MARKER: continue if 'default' not in member: continue resolved_member = self.resolve_type_descriptor(member, module_name) if resolved_member['type'] == 'BIT STRING': self.pre_process_default_value_bit_string(member, resolved_member) if resolved_member['type'] == 'OCTET STRING': self.pre_process_default_value_octet_string(member) if resolved_member['type'] == 'ENUMERATED' and self._numeric_enums: for key, value in resolved_member['values']: if key == member['default']: member['default'] = value break def pre_process_default_value_bit_string(self, member, resolved_member): default = member['default'] if isinstance(default, tuple): # Already pre-processed. return if isinstance(default, list): named_bits = dict(resolved_member['named-bits']) reversed_mask = 0 for name in default: reversed_mask |= (1 << int(named_bits[name])) mask = int(bin(reversed_mask)[2:][::-1], 2) number_of_bits = reversed_mask.bit_length() elif default.startswith('0x'): if len(default) % 2 == 1: default += '0' default = '01' + default[2:] mask = int(default, 16) mask >>= lowest_set_bit(mask) number_of_bits = mask.bit_length() - 1 mask ^= (1 << number_of_bits) elif default == '0b': number_of_bits = 0 else: mask = int(default, 2) mask >>= lowest_set_bit(mask) number_of_bits = len(default) - 2 if number_of_bits > 0: mask = bitstruct.pack('u{}'.format(number_of_bits), mask) else: mask = b'' member['default'] = (mask, number_of_bits) def pre_process_default_value_octet_string(self, member): default = member['default'] if sys.version_info[0] > 2 and isinstance(default, bytes): # Already pre-processed. return if default.startswith('0b'): default = default[2:] if len(default) % 8 != 0: default += '0' * (-len(default) % 8) member['default'] = binascii.unhexlify( hex(int('11111111' + default, 2))[4:] ) elif default.startswith('0x'): default = default[2:] if len(default) % 2 == 1: default += '0' member['default'] = binascii.unhexlify(default) def pre_process_parameterization_step_1(self, types, module_name): """X.683 parameterization pre processing - step 1. """ for type_name, type_descriptor in types.items(): # Skip if the type is parameterized. if 'parameters' in type_descriptor: continue self.pre_process_parameterization_step_1_type(type_descriptor, type_name, module_name) def pre_process_parameterization_step_1_type(self, type_descriptor, type_name, module_name): """Recursively find and replace all parameterized types with their actual types. """ # SEQUENCE, SET and CHOICE. if 'members' in type_descriptor: for member in type_descriptor['members']: if member == EXTENSION_MARKER: continue self.pre_process_parameterization_step_1_type(member, type_name, module_name) # SEQUENCE OF and SET OF. if 'element' in type_descriptor: self.pre_process_parameterization_step_1_type( type_descriptor['element'], type_name, module_name) # Just return if the type is not using a parameterized type. if 'actual-parameters' not in type_descriptor: return (parameterized_type_descriptor, parameterized_module_name) = self.lookup_type_descriptor( type_descriptor['type'], module_name) if 'parameters' not in parameterized_type_descriptor: raise CompileError( "Type '{}' in module '{}' is not parameterized.".format( type_descriptor['type'], parameterized_module_name)) dummy_parameters = parameterized_type_descriptor['parameters'] actual_parameters = type_descriptor['actual-parameters'] if len(dummy_parameters) != len(actual_parameters): raise CompileError( "Parameterized type '{}' in module '{}' takes {} " "parameters, but {} are given in type '{}' in " "module '{}'.".format(type_descriptor['type'], parameterized_module_name, len(dummy_parameters), len(actual_parameters), type_name, module_name)) parameterized_type_descriptor = deepcopy(parameterized_type_descriptor) self.pre_process_parameterization_step_1_dummy_to_actual_type( parameterized_type_descriptor, dummy_parameters, actual_parameters, parameterized_module_name) self.pre_process_parameterization_step_1_type( parameterized_type_descriptor, type_name, parameterized_module_name) type_descriptor.update(parameterized_type_descriptor) if 'module-name' not in type_descriptor: if module_name != parameterized_module_name: type_descriptor['module-name'] = parameterized_module_name if 'parameters' in type_descriptor: del type_descriptor['parameters'] del type_descriptor['actual-parameters'] def pre_process_parameterization_step_1_dummy_to_actual_type( self, type_descriptor, dummy_parameters, actual_parameters, module_name): if 'members' in type_descriptor: for member in type_descriptor['members']: if member == EXTENSION_MARKER: continue self.pre_process_parameterization_step_1_dummy_to_actual_type( member, dummy_parameters, actual_parameters, module_name) elif 'element' in type_descriptor: self.pre_process_parameterization_step_1_dummy_to_actual_type( type_descriptor['element'], dummy_parameters, actual_parameters, module_name) # Replace dummy with actual in current type descriptor. for dummy_parameter, actual_parameter in zip(dummy_parameters, actual_parameters): if type_descriptor['type'] == dummy_parameter: type_descriptor.update(actual_parameter) if 'actual-parameters' in type_descriptor: for i, parameter in enumerate(type_descriptor['actual-parameters']): if parameter['type'] == dummy_parameter: type_descriptor['actual-parameters'][i] = actual_parameter if 'size' in type_descriptor: actual_size = [] for item in type_descriptor['size']: if isinstance(item, tuple): minimum, maximum = item if minimum == dummy_parameter: minimum = actual_parameter if maximum == dummy_parameter: maximum = actual_parameter item = (minimum, maximum) elif item == dummy_parameter: item = actual_parameter actual_size.append(item) type_descriptor['size'] = actual_size if 'restricted-to' in type_descriptor: actual_restricted_to = [] for minimum, maximum in type_descriptor['restricted-to']: if minimum == dummy_parameter: minimum = actual_parameter if maximum == dummy_parameter: maximum = actual_parameter actual_restricted_to.append((minimum, maximum)) type_descriptor['restricted-to'] = actual_restricted_to def pre_process_parameterization_step_2(self, types): """X.683 parameterization pre processing - step 2. """ # Remove parameterized types as they are no longer needed. return { type_name: type_descriptor for type_name, type_descriptor in types.items() if 'parameters' not in type_descriptor } def resolve_type_name(self, type_name, module_name): """Returns the ASN.1 type name of given type. """ try: while True: if is_object_class_type_name(type_name): type_name, module_name = self.lookup_object_class_type_name( type_name, module_name) else: type_descriptor, module_name = self.lookup_type_descriptor( type_name, module_name) type_name = type_descriptor['type'] except CompileError: pass return type_name def resolve_type_descriptor(self, type_descriptor, module_name): type_name = type_descriptor['type'] try: while True: if is_object_class_type_name(type_name): type_name, module_name = self.lookup_object_class_type_name( type_name, module_name) else: type_descriptor, module_name = self.lookup_type_descriptor( type_name, module_name) type_name = type_descriptor['type'] except CompileError: pass return type_descriptor def get_type_descriptors(self, type_descriptors, type_names): result = [] for type_descriptor in type_descriptors: result += self.get_type_descriptors_type(type_descriptor, type_names) return result def get_type_descriptors_type(self, type_descriptor, type_names): type_descriptors = [] type_name = type_descriptor['type'] if type_name in type_names: type_descriptors.append(type_descriptor) if 'members' in type_descriptor: for member in type_descriptor['members']: if member == EXTENSION_MARKER: continue if isinstance(member, list): type_descriptors.extend(self.get_type_descriptors(member, type_names)) else: type_descriptors += self.get_type_descriptors_type(member, type_names) if 'element' in type_descriptor: type_descriptors += self.get_type_descriptors_type( type_descriptor['element'], type_names) return type_descriptors def process_type(self, type_name, type_descriptor, module_name): return NotImplementedError('To be implemented by subclasses.') def compile_type(self, name, type_descriptor, module_name): return NotImplementedError('To be implemented by subclasses.') def compile_open_types(self, name, type_descriptor, module_name): """Compile the open types wrapper for given type. Returns ``None`` if given type does not have any open types. """ compiled = None type_name = type_descriptor['type'] if type_name in ['SEQUENCE', 'SET']: compiled_members = [] for member in type_descriptor['members']: if member == EXTENSION_MARKER: continue if isinstance(member, list): # ToDo: Handle groups. continue if is_open_type(member['type']): if 'table' in member: table = member['table'] if isinstance(table, list): compiled_members.append(OpenType(member['name'], table)) else: compiled_member = self.compile_open_types(member['name'], member, module_name) if compiled_member is not None: compiled_members.append(compiled_member) if compiled_members: compiled = OpenTypeSequence(name, compiled_members) elif type_name in ['SEQUENCE OF', 'SET OF']: compiled_element = self.compile_open_types('', type_descriptor['element'], module_name) if compiled_element: compiled = OpenTypeSequenceOf(name, compiled_element) elif type_name == 'CHOICE': # ToDo: Handle CHOICE. pass else: pass return compiled def compile_user_type(self, name, type_name, module_name): compiled = self.get_compiled_type(name, type_name, module_name) if compiled is None: self.types_backtrace_push(type_name) compiled = self.compile_type( name, *self.lookup_type_descriptor( type_name, module_name)) compiled.type_name = type_name compiled.module_name = module_name self.types_backtrace_pop() self.set_compiled_type(name, type_name, module_name, compiled) return compiled def compile_members(self, members, module_name, sort_by_tag=False): compiled_members = [] has_extension_marker = False for member in members: if member == EXTENSION_MARKER: has_extension_marker = True continue if isinstance(member, list): group_members, _ = self.compile_members(member, module_name) compiled_members.extend(group_members) continue compiled_member = self.compile_member(member, module_name) compiled_members.append(compiled_member) if sort_by_tag: compiled_members = sorted(compiled_members, key=attrgetter('tag')) return compiled_members, has_extension_marker def compile_root_member(self, member, module_name, compiled_members): compiled_member = self.compile_member(member, module_name) compiled_members.append(compiled_member) def compile_member(self, member, module_name): if is_object_class_type_name(member['type']): member, class_module_name = self.convert_object_class_type_descriptor( member, module_name) compiled_member = self.compile_type(member['name'], member, class_module_name) else: compiled_member = self.compile_type(member['name'], member, module_name) if 'optional' in member: compiled_member = self.copy(compiled_member) compiled_member.optional = member['optional'] if 'default' in member: compiled_member = self.copy(compiled_member) compiled_member.set_default(member['default']) if 'size' in member: compiled_member = self.copy(compiled_member) compiled_member.set_size_range(*self.get_size_range(member, module_name)) return compiled_member def get_size_range(self, type_descriptor, module_name): """Returns a tuple of the minimum and maximum values allowed according the the ASN.1 specification SIZE parameter. Returns (None, None, None) if the type does not have a SIZE parameter. """ size = type_descriptor.get('size', None) if size is None: minimum = None maximum = None has_extension_marker = None else: if isinstance(size[0], tuple): minimum, maximum = size[0] else: minimum = size[0] maximum = size[0] has_extension_marker = (EXTENSION_MARKER in size) if isinstance(minimum, str): if minimum != 'MIN': minimum = self.lookup_value(minimum, module_name)[0]['value'] if isinstance(maximum, str): if maximum != 'MAX': maximum = self.lookup_value(maximum, module_name)[0]['value'] return minimum, maximum, has_extension_marker def get_enum_values(self, type_descriptor, module_name): """Converts the enum values to ints if they are value references. """ enum_values = [] for value in type_descriptor['values']: if value != EXTENSION_MARKER and not isinstance(value[1], int): lookup = self.lookup_value(value[1], module_name) enum_values.append((value[0], lookup[0]['value'])) else: enum_values.append(value) return enum_values def get_restricted_to_range(self, type_descriptor, module_name): def convert_value(value): try: value = float(value) except ValueError: if not is_type_name(value): try: resolved_type_descriptor = self.resolve_type_descriptor( type_descriptor, module_name) value = resolved_type_descriptor['named-numbers'][value] except KeyError: value = self.lookup_value(value, module_name)[0]['value'] return value restricted_to = type_descriptor['restricted-to'] if isinstance(restricted_to[0], tuple): minimum, maximum = restricted_to[0] else: minimum = restricted_to[0] maximum = restricted_to[0] if isinstance(minimum, str): minimum = convert_value(minimum) if isinstance(maximum, str): maximum = convert_value(maximum) has_extension_marker = (EXTENSION_MARKER in restricted_to) return minimum, maximum, has_extension_marker def get_with_components(self, type_descriptor): return type_descriptor.get('with-components', None) def get_named_bits(self, type_descriptor, module_name): named_bits = type_descriptor.get('named-bits', None) if named_bits is not None: named_bit_values = [] for value in named_bits: if value != EXTENSION_MARKER and not value[1].isdigit(): lookup = self.lookup_value(value[1], module_name) named_bit_values.append((value[0], lookup[0]['value'])) else: named_bit_values.append((value[0], int(value[1]))) return named_bit_values def is_explicit_tag(self, type_descriptor): try: return type_descriptor['tag']['kind'] == 'EXPLICIT' except KeyError: pass return False def get_module_name(self, type_descriptor, module_name): module_name = type_descriptor.get('module-name', module_name) try: _, module_name = self.lookup_type_descriptor(type_descriptor['type'], module_name) except CompileError: pass return module_name def lookup_in_modules(self, section, debug_string, name, module_name): begin_debug_string = debug_string[:1].upper() + debug_string[1:] module = self._specification[module_name] if name in module[section]: return module[section][name], module_name else: for from_module_name, imports in module['imports'].items(): if name not in imports: continue if from_module_name not in self._specification: raise CompileError( "Module '{}' cannot import {} '{}' from missing " "module '{}'.".format(module_name, debug_string, name, from_module_name)) try: return self.lookup_in_modules(section, debug_string, name, from_module_name) except CompileError: raise CompileError( "{} '{}' imported by module '{}' not found in " "module '{}'.".format( begin_debug_string, name, module_name, from_module_name)) raise CompileError("{} '{}' not found in module '{}'.".format( begin_debug_string, name, module_name)) def lookup_type_descriptor(self, type_name, module_name): return self.lookup_in_modules('types', 'type', type_name, module_name) def lookup_value(self, value_name, module_name): return self.lookup_in_modules('values', 'value', value_name, module_name) def lookup_object_class_descriptor(self, object_class_name, module_name): return self.lookup_in_modules('object-classes', 'object class', object_class_name, module_name) def lookup_object_class_type_name(self, type_name, module_name): class_name, member_name = type_name.split('.') result = self.lookup_object_class_descriptor(class_name, module_name) object_class_descriptor, module_name = result for member in object_class_descriptor['members']: if member['name'] == member_name: return member['type'], module_name def get_compiled_type(self, name, type_name, module_name): try: return self.compiled[module_name][type_name][name] except KeyError: return None def set_compiled_type(self, name, type_name, module_name, compiled): if module_name not in self.compiled: self.compiled[module_name] = {} if type_name not in self.compiled[module_name]: self.compiled[module_name][type_name] = {} self.compiled[module_name][type_name][name] = compiled def convert_object_class_type_descriptor(self, type_descriptor, module_name): type_name, module_name = self.lookup_object_class_type_name( type_descriptor['type'], module_name) type_descriptor = deepcopy(type_descriptor) type_descriptor['type'] = type_name return type_descriptor, module_name def copy(self, compiled_type): if not isinstance(compiled_type, Recursive): compiled_type = copy(compiled_type) return compiled_type def set_compiled_restricted_to(self, compiled, type_descriptor, module_name): compiled = self.copy(compiled) compiled.set_restricted_to_range( *self.get_restricted_to_range(type_descriptor, module_name)) return compiled def external_type_descriptor(self): return { 'type': 'SEQUENCE', 'tag': { 'class': 'UNIVERSAL', 'number': 8, 'kind': 'IMPLICIT' }, 'members': [ { 'name': 'direct-reference', 'type': 'OBJECT IDENTIFIER', 'optional': True }, { 'name': 'indirect-reference', 'type': 'INTEGER', 'optional': True }, { 'name': 'data-value-descriptor', 'type': 'ObjectDescriptor', 'optional': True }, { 'name': 'encoding', 'type': 'CHOICE', 'members': [ { 'name': 'single-ASN1-type', 'type': 'NULL', # ToDo: Should be ABSTRACT-SYNTAX.&Type 'tag': { 'number': 0 } }, { 'name': 'octet-aligned', 'type': 'OCTET STRING', 'tag': { 'number': 1, 'kind': 'IMPLICIT' } }, { 'name': 'arbitrary', 'type': 'BIT STRING', 'tag': { 'number': 2, 'kind': 'IMPLICIT' } } ] } ] } def enum_values_as_dict(values): return { value[1]: value[0] for value in values if value != EXTENSION_MARKER } def enum_values_split(values): if EXTENSION_MARKER in values: index = values.index(EXTENSION_MARKER) return values[:index], values[index + 1:] else: return values, None def pre_process(specification): return Compiler(specification).pre_process() asn1tools-0.169.0/asn1tools/codecs/constraints_checker.py000066400000000000000000000335411524544274600234250ustar00rootroot00000000000000"""ASN.1 constraints checker. """ import string from copy import copy from . import ConstraintsError, ErrorWithLocation from . import compiler from . import format_or from .permitted_alphabet import NUMERIC_STRING from .permitted_alphabet import PRINTABLE_STRING from .permitted_alphabet import IA5_STRING from .permitted_alphabet import BMP_STRING from .permitted_alphabet import VISIBLE_STRING STRING_TYPES = [ 'OBJECT IDENTIFIER', 'TeletexString', 'NumericString', 'PrintableString', 'IA5String', 'VisibleString', 'GeneralString', 'UTF8String', 'BMPString', 'GraphicString', 'UniversalString', 'ObjectDescriptor' ] TIME_TYPES = [ 'UTCTime', 'GeneralizedTime', 'DATE', 'TIME-OF-DAY', 'DATE-TIME' ] class Type(object): def __init__(self, name): self.name = name self.minimum = 'MIN' self.maximum = 'MAX' def set_range(self, minimum, maximum, has_extension_marker): if has_extension_marker: return if minimum is None: minimum = 'MIN' if maximum is None: maximum = 'MAX' self.minimum = minimum self.maximum = maximum def set_size_range(self, minimum, maximum, has_extension_marker): self.set_range(minimum, maximum, has_extension_marker) def set_restricted_to_range(self, minimum, maximum, has_extension_marker): self.set_range(minimum, maximum, has_extension_marker) def is_in_range(self, value): minimum_ok = (not self.has_lower_bound()) or (value >= self.minimum) maximum_ok = (not self.has_upper_bound()) or (value <= self.maximum) return minimum_ok and maximum_ok def set_default(self, value): pass def has_lower_bound(self): return self.minimum != 'MIN' def has_upper_bound(self): return self.maximum != 'MAX' def is_bound(self): return self.has_lower_bound() and self.has_upper_bound() def encode(self, data): raise NotImplementedError('To be implemented by subclasses.') class String(Type): PERMITTED_ALPHABET = None def __init__(self, name, permitted_alphabet, minimum, maximum, has_extension_marker): super(String, self).__init__(name) self.set_size_range(minimum, maximum, has_extension_marker) if permitted_alphabet is None: permitted_alphabet = self.PERMITTED_ALPHABET self.permitted_alphabet = permitted_alphabet def encode(self, data): length = len(data) if not self.is_in_range(length): raise ConstraintsError( 'Expected between {} and {} characters, but got {}.'.format( self.minimum, self.maximum, length)) if self.permitted_alphabet is None: return for character in data: if character not in self.permitted_alphabet: raise ConstraintsError( "Expected a character in '{}', but got '{}' (0x{:02x}).".format( ''.join([c if c in string.printable[:-5] else '.' for c in self.permitted_alphabet]), character if character in string.printable else '.', ord(character))) class Boolean(Type): def encode(self, data): pass class Integer(Type): def __init__(self, name): super(Integer, self).__init__(name) def encode(self, data): if not self.is_in_range(data): raise ConstraintsError( 'Expected an integer between {} and {}, but got {}.'.format( self.minimum, self.maximum, data)) class Float(Type): def encode(self, data): pass class Null(Type): def encode(self, data): pass class BitString(Type): def __init__(self, name, minimum, maximum, has_extension_marker): super(BitString, self).__init__(name) self.set_size_range(minimum, maximum, has_extension_marker) def encode(self, data): number_of_bits = data[1] if not self.is_in_range(number_of_bits): raise ConstraintsError( 'Expected between {} and {} bits, but got {}.'.format( self.minimum, self.maximum, number_of_bits)) class Enumerated(Type): def encode(self, data): pass class Bytes(Type): def __init__(self, name, minimum, maximum, has_extension_marker): super(Bytes, self).__init__(name) self.set_size_range(minimum, maximum, has_extension_marker) def encode(self, data): length = len(data) if not self.is_in_range(length): raise ConstraintsError( 'Expected between {} and {} bytes, but got {}.'.format( self.minimum, self.maximum, length)) class Dict(Type): def __init__(self, name, members): super(Dict, self).__init__(name) self.members = members def encode(self, data): for member in self.members: name = member.name if name in data: try: member.encode(data[name]) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e class List(Type): def __init__(self, name, element_type, minimum, maximum, has_extension_marker): super(List, self).__init__(name) self.element_type = element_type self.set_size_range(minimum, maximum, has_extension_marker) def encode(self, data): length = len(data) if not self.is_in_range(length): raise ConstraintsError( 'Expected a list of between {} and {} elements, but got {}.'.format( self.minimum, self.maximum, length)) for entry in data: self.element_type.encode(entry) class Choice(Type): def __init__(self, name, members, has_extension_marker): super(Choice, self).__init__(name) self.members = members self.name_to_member = {member.name: member for member in self.members} self.has_extension_marker = has_extension_marker def format_names(self): return format_or(sorted(self.name_to_member)) def encode(self, data): value = data[0] if value in self.name_to_member: member = self.name_to_member[value] elif self.has_extension_marker: return else: raise ConstraintsError( "Expected choice {}, but got '{}'.".format( self.format_names(), value)) try: member.encode(data[1]) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e class NumericString(String): PERMITTED_ALPHABET = NUMERIC_STRING class PrintableString(String): PERMITTED_ALPHABET = PRINTABLE_STRING class IA5String(String): PERMITTED_ALPHABET = IA5_STRING class BMPString(String): PERMITTED_ALPHABET = BMP_STRING class VisibleString(String): PERMITTED_ALPHABET = VISIBLE_STRING class Time(Type): def encode(self, data): pass class Skip(Type): def encode(self, data): pass class Recursive(compiler.Recursive, Type): def __init__(self, name, type_name, module_name): super(Recursive, self).__init__(name) self.type_name = type_name self.module_name = module_name self.inner = None def set_inner_type(self, inner): self.inner = copy(inner) def encode(self, data): self.inner.encode(data) class CompiledType(compiler.CompiledType): def encode(self, data): try: self._type.encode(data) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e class Compiler(compiler.Compiler): def process_type(self, type_name, type_descriptor, module_name): compiled_type = self.compile_type(type_name, type_descriptor, module_name) return CompiledType(compiled_type) def compile_type(self, name, type_descriptor, module_name): module_name = type_descriptor.get('module-name', module_name) type_name = type_descriptor['type'] if type_name in ['SEQUENCE', 'SET']: members, _ = self.compile_members(type_descriptor['members'], module_name) compiled = Dict(name, members) elif type_name in ['SEQUENCE OF', 'SET OF']: element_type = self.compile_type('', type_descriptor['element'], module_name) compiled = List(name, element_type, *self.get_size_range( type_descriptor, module_name)) elif type_name == 'CHOICE': compiled = Choice(name, *self.compile_members(type_descriptor['members'], module_name)) elif type_name == 'INTEGER': compiled = Integer(name) elif type_name == 'REAL': compiled = Float(name) elif type_name == 'BOOLEAN': compiled = Boolean(name) elif type_name == 'OCTET STRING': compiled = Bytes(name, *self.get_size_range(type_descriptor, module_name)) elif type_name == 'ENUMERATED': compiled = Enumerated(name) elif type_name in TIME_TYPES: compiled = Time(name) elif type_name == 'BIT STRING': compiled = BitString(name, *self.get_size_range(type_descriptor, module_name)) elif type_name == 'NumericString': compiled = NumericString(name, self.get_permitted_alphabet(type_descriptor), *self.get_size_range(type_descriptor, module_name)) elif type_name == 'PrintableString': compiled = PrintableString(name, self.get_permitted_alphabet(type_descriptor), *self.get_size_range(type_descriptor, module_name)) elif type_name == 'IA5String': compiled = IA5String(name, self.get_permitted_alphabet(type_descriptor), *self.get_size_range(type_descriptor, module_name)) elif type_name == 'BMPString': compiled = BMPString(name, self.get_permitted_alphabet(type_descriptor), *self.get_size_range(type_descriptor, module_name)) elif type_name == 'VisibleString': compiled = VisibleString(name, self.get_permitted_alphabet(type_descriptor), *self.get_size_range(type_descriptor, module_name)) elif type_name in STRING_TYPES: compiled = String(name, self.get_permitted_alphabet(type_descriptor), *self.get_size_range(type_descriptor, module_name)) elif type_name in ['ANY', 'ANY DEFINED BY', 'OpenType']: compiled = Skip(name) elif type_name == 'NULL': compiled = Null(name) elif type_name == 'EXTERNAL': members, _ = self.compile_members( self.external_type_descriptor()['members'], module_name) compiled = Dict(name, members) else: if type_name in self.types_backtrace: compiled = Recursive(name, type_name, module_name) self.recursive_types.append(compiled) else: compiled = self.compile_user_type(name, type_name, module_name) if 'restricted-to' in type_descriptor: compiled = self.set_compiled_restricted_to(compiled, type_descriptor, module_name) return compiled def get_permitted_alphabet(self, type_descriptor): def char_range(begin, end): return ''.join([chr(char) for char in range(ord(begin), ord(end) + 1)]) if 'from' not in type_descriptor: return permitted_alphabet = type_descriptor['from'] value = '' for item in permitted_alphabet: if isinstance(item, tuple): value += char_range(item[0], item[1]) else: value += item return ''.join(sorted(value)) def compile_dict(specification, numeric_enums=False): return Compiler(specification, numeric_enums).process() asn1tools-0.169.0/asn1tools/codecs/der.py000066400000000000000000000315571524544274600201510ustar00rootroot00000000000000"""Distinguished Encoding Rules (DER) codec. """ from . import ber from . import restricted_utc_time_to_datetime from . import restricted_utc_time_from_datetime from . import restricted_generalized_time_to_datetime from . import restricted_generalized_time_from_datetime from .compiler import clean_bit_string_value from .ber import Class, DecodeTagError, StandardEncodeMixin from .ber import Encoding from .ber import Tag from .ber import encode_length_definite from .ber import decode_full_length from .ber import encode_signed_integer from .ber import Boolean from .ber import Real from .ber import Null from .ber import ObjectIdentifier from .ber import Enumerated from .ber import Sequence from .ber import Set from .ber import Choice from .ber import Any from .ber import AnyDefinedBy from .ber import Recursive from .ber import ObjectDescriptor from .ber import Date from .ber import TimeOfDay from .ber import DateTime # These imports are not used in this module but referenced externally from .ber import encode_tag from .ber import encode_real from .ber import decode_length from .ber import decode_real class Type(ber.StandardDecodeMixin, ber.Type): def set_tag(self, number, flags): if not Class.APPLICATION & flags: flags |= Class.CONTEXT_SPECIFIC super().set_tag(number, flags) class StringType(StandardEncodeMixin, Type): TAG = None ENCODING = None def __init__(self, name): super(StringType, self).__init__(name, self.__class__.__name__, self.TAG) def encode_content(self, data, values=None): return data.encode(self.ENCODING) def decode_content(self, data, offset, length): end_offset = offset + length return data[offset:end_offset].decode(self.ENCODING), end_offset class ArrayType(StandardEncodeMixin, Type): def __init__(self, name, tag_name, tag, element_type): super(ArrayType, self).__init__(name, tag_name, tag, Encoding.CONSTRUCTED) self.element_type = element_type def set_tag(self, number, flags): super(ArrayType, self).set_tag(number, flags | Encoding.CONSTRUCTED) def encode_content(self, data, values=None): encoded_elements = bytearray() for entry in data: self.element_type.encode(entry, encoded_elements) return encoded_elements def decode_content(self, data, offset, length): decoded = [] start_offset = offset while (offset - start_offset) < length: decoded_element, offset = self.element_type.decode(data, offset) decoded.append(decoded_element) return decoded, offset def __repr__(self): return '{}({}, {})'.format(self.__class__.__name__, self.name, self.element_type) class Integer(StandardEncodeMixin, Type): def __init__(self, name): super(Integer, self).__init__(name, 'INTEGER', Tag.INTEGER) def encode_content(self, data, values=None): return encode_signed_integer(data) def decode_content(self, data, offset, length): end_offset = offset + length return int.from_bytes(data[offset:end_offset], byteorder='big', signed=True), end_offset class BitString(Type): def __init__(self, name, has_named_bits): super(BitString, self).__init__(name, 'BIT STRING', Tag.BIT_STRING) self.has_named_bits = has_named_bits def is_default(self, value): if self.default is None: return False clean_value = clean_bit_string_value(value, self.has_named_bits) clean_default = clean_bit_string_value(self.default, self.has_named_bits) return clean_value == clean_default def encode(self, data, encoded, values=None): number_of_bytes, number_of_rest_bits = divmod(data[1], 8) data = bytearray(data[0]) if number_of_rest_bits == 0: data = data[:number_of_bytes] number_of_unused_bits = 0 else: last_byte = data[number_of_bytes] last_byte &= ((0xff >> number_of_rest_bits) ^ 0xff) data = data[:number_of_bytes] data.append(last_byte) number_of_unused_bits = (8 - number_of_rest_bits) encoded.extend(self.tag) encoded.extend(encode_length_definite(len(data) + 1)) encoded.append(number_of_unused_bits) encoded.extend(data) def decode_content(self, data, offset, length): end_offset = offset + length number_of_bits = 8 * (length - 1) - data[offset] offset += 1 return (bytes(data[offset:end_offset]), number_of_bits), end_offset class OctetString(StandardEncodeMixin, Type): def __init__(self, name): super(OctetString, self).__init__(name, 'OCTET STRING', Tag.OCTET_STRING) def encode_content(self, data, values=None): return data def decode_content(self, data, offset, length): end_offset = offset + length return bytes(data[offset:end_offset]), end_offset class SequenceOf(ArrayType): def __init__(self, name, element_type): super(SequenceOf, self).__init__(name, 'SEQUENCE OF', Tag.SEQUENCE, element_type) class SetOf(ArrayType): def __init__(self, name, element_type): super(SetOf, self).__init__(name, 'SET OF', Tag.SET, element_type) class UTF8String(StringType): TAG = Tag.UTF8_STRING ENCODING = 'utf-8' class NumericString(StringType): TAG = Tag.NUMERIC_STRING ENCODING = 'ascii' class PrintableString(StringType): TAG = Tag.PRINTABLE_STRING ENCODING = 'ascii' class IA5String(StringType): TAG = Tag.IA5_STRING ENCODING = 'ascii' class VisibleString(StringType): TAG = Tag.VISIBLE_STRING ENCODING = 'ascii' class GeneralString(StringType): TAG = Tag.GENERAL_STRING ENCODING = 'latin-1' class BMPString(StringType): TAG = Tag.BMP_STRING ENCODING = 'utf-16-be' class UniversalString(StringType): TAG = Tag.UNIVERSAL_STRING ENCODING = 'utf-32-be' class GraphicString(StringType): TAG = Tag.GRAPHIC_STRING ENCODING = 'latin-1' class TeletexString(StringType): TAG = Tag.T61_STRING ENCODING = 'iso-8859-1' class UTCTime(StandardEncodeMixin, Type): def __init__(self, name): super(UTCTime, self).__init__(name, 'UTCTime', Tag.UTC_TIME) def encode_content(self, data, values=None): return restricted_utc_time_from_datetime(data).encode('ascii') def decode_content(self, data, offset, length): end_offset = offset + length decoded = data[offset:end_offset].decode('ascii') return restricted_utc_time_to_datetime(decoded), end_offset class GeneralizedTime(StandardEncodeMixin, Type): def __init__(self, name): super(GeneralizedTime, self).__init__(name, 'GeneralizedTime', Tag.GENERALIZED_TIME) def encode_content(self, data, values=None): return restricted_generalized_time_from_datetime(data).encode('ascii') def decode_content(self, data, offset, length): end_offset = offset + length decoded = data[offset:end_offset].decode('ascii') return restricted_generalized_time_to_datetime(decoded), end_offset class Compiler(ber.Compiler): def compile_implicit_type(self, name, type_descriptor, module_name): type_name = type_descriptor['type'] if type_name == 'SEQUENCE': compiled = Sequence( name, *self.compile_members(type_descriptor['members'], module_name)) elif type_name == 'SEQUENCE OF': compiled = SequenceOf(name, self.compile_type('', type_descriptor['element'], module_name)) elif type_name == 'SET': compiled = Set( name, *self.compile_members(type_descriptor['members'], module_name)) elif type_name == 'SET OF': compiled = SetOf(name, self.compile_type('', type_descriptor['element'], module_name)) elif type_name == 'CHOICE': compiled = Choice( name, *self.compile_members(type_descriptor['members'], module_name)) elif type_name == 'INTEGER': compiled = Integer(name) elif type_name == 'REAL': compiled = Real(name) elif type_name == 'ENUMERATED': compiled = Enumerated(name, self.get_enum_values(type_descriptor, module_name), self._numeric_enums) elif type_name == 'BOOLEAN': compiled = Boolean(name) elif type_name == 'OBJECT IDENTIFIER': compiled = ObjectIdentifier(name) elif type_name == 'OCTET STRING': compiled = OctetString(name) elif type_name == 'TeletexString': compiled = TeletexString(name) elif type_name == 'NumericString': compiled = NumericString(name) elif type_name == 'PrintableString': compiled = PrintableString(name) elif type_name == 'IA5String': compiled = IA5String(name) elif type_name == 'VisibleString': compiled = VisibleString(name) elif type_name == 'GeneralString': compiled = GeneralString(name) elif type_name == 'UTF8String': compiled = UTF8String(name) elif type_name == 'BMPString': compiled = BMPString(name) elif type_name == 'GraphicString': compiled = GraphicString(name) elif type_name == 'UTCTime': compiled = UTCTime(name) elif type_name == 'UniversalString': compiled = UniversalString(name) elif type_name == 'GeneralizedTime': compiled = GeneralizedTime(name) elif type_name == 'DATE': compiled = Date(name) elif type_name == 'TIME-OF-DAY': compiled = TimeOfDay(name) elif type_name == 'DATE-TIME': compiled = DateTime(name) elif type_name == 'BIT STRING': has_named_bits = ('named-bits' in type_descriptor) compiled = BitString(name, has_named_bits) elif type_name == 'ANY': compiled = Any(name) elif type_name == 'ANY DEFINED BY': choices = {} for key, value in type_descriptor['choices'].items(): choices[key] = self.compile_type(key, value, module_name) compiled = AnyDefinedBy(name, type_descriptor['value'], choices) elif type_name == 'NULL': compiled = Null(name) elif type_name == 'EXTERNAL': compiled = Sequence( name, *self.compile_members(self.external_type_descriptor()['members'], module_name)) compiled.set_tag(Tag.EXTERNAL, 0) elif type_name == 'ObjectDescriptor': compiled = ObjectDescriptor(name) else: if type_name in self.types_backtrace: compiled = Recursive(name, type_name, module_name) self.recursive_types.append(compiled) else: compiled = self.compile_user_type(name, type_name, module_name) return compiled def compile_dict(specification, numeric_enums=False): return Compiler(specification, numeric_enums).process() asn1tools-0.169.0/asn1tools/codecs/gser.py000066400000000000000000000411501524544274600203250ustar00rootroot00000000000000"""General String Encoding Rules (GSER). """ import time import binascii import math from copy import copy import datetime from . import BaseType, format_bytes, ErrorWithLocation from . import EncodeError from . import DecodeError from . import compiler from . import format_or from . import utc_time_from_datetime from . import generalized_time_from_datetime from .compiler import enum_values_as_dict class Type(BaseType): def encode(self, data, _separator, _indent): raise NotImplementedError('To be implemented by subclasses.') def set_size_range(self, minimum, maximum, has_extension_marker): pass class MembersType(Type): def __init__(self, name, members, type_name): super(MembersType, self).__init__(name, type_name) self.members = members def encode(self, data, separator, indent): encoded_members = [] member_separator = separator + ' ' * indent for member in self.members: name = member.name if name in data: try: encoded_member = member.encode(data[name], member_separator, indent) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e encoded_member = u'{}{} {}'.format(member_separator, member.name, encoded_member) encoded_members.append(encoded_member) elif member.optional: pass elif not member.has_default(): raise EncodeError( "{} member '{}' not found in {}.".format( self.__class__.__name__, name, data)) encoded_members = ','.join(encoded_members) return separator.join(['{' + encoded_members, '}']) def __repr__(self): return '{}({}, [{}])'.format( self.__class__.__name__, self.name, ', '.join([repr(member) for member in self.members])) class ArrayType(Type): def __init__(self, name, type_name, element_type): super(ArrayType, self).__init__(name, type_name) self.element_type = element_type def encode(self, data, separator, indent): encoded_elements = [] element_separator = separator + ' ' * indent for entry in data: encoded_element = self.element_type.encode(entry, element_separator, indent) encoded_element = u'{}{}'.format(element_separator, encoded_element) encoded_elements.append(encoded_element) encoded_elements = ','.join(encoded_elements) return separator.join(['{' + encoded_elements, '}']) def __repr__(self): return '{}({}, {})'.format(self.__class__.__name__, self.name, self.element_type) class Boolean(Type): def __init__(self, name): super(Boolean, self).__init__(name, 'BOOLEAN') def encode(self, data, _separator, _indent): return 'TRUE' if data else 'FALSE' class Integer(Type): def __init__(self, name): super(Integer, self).__init__(name, 'INTEGER') def encode(self, data, _separator, _indent): return str(data) class Real(Type): def __init__(self, name): super(Real, self).__init__(name, 'REAL') def encode(self, data, _separator, _indent): if data == float('inf'): data = 'PLUS-INFINITY' elif data == float('-inf'): data = 'MINUS-INFINITY' elif math.isnan(data): raise EncodeError('Cannot encode floating point number NaN.') elif data == 0.0: data = '0' else: data = '{}E0'.format(data) return data class Null(Type): def __init__(self, name): super(Null, self).__init__(name, 'NULL') def encode(self, _data, _separator, _indent): return 'NULL' class BitString(Type): def __init__(self, name): super(BitString, self).__init__(name, 'BIT STRING') def encode(self, data, _separator, _indent): encoded = int(binascii.hexlify(data[0]), 16) encoded |= (0x80 << (8 * len(data[0]))) return "'{}'B".format(bin(encoded)[10:10 + data[1]]).upper() class OctetString(Type): def __init__(self, name): super(OctetString, self).__init__(name, 'OCTET STRING') def encode(self, data, _separator, _indent): return "'{}'H".format(format_bytes(data)).upper() class ObjectIdentifier(Type): def __init__(self, name): super(ObjectIdentifier, self).__init__(name, 'OBJECT IDENTIFIER') def encode(self, data, _separator, _indent): return data class Enumerated(Type): def __init__(self, name, values, numeric): super(Enumerated, self).__init__(name, 'ENUMERATED') if numeric: self.data_to_value = enum_values_as_dict(values) else: self.data_to_value = { v: v for v in enum_values_as_dict(values).values() } def encode(self, data, _separator, _indent): return self.data_to_value[data] class Sequence(MembersType): def __init__(self, name, members): super(Sequence, self).__init__(name, members, 'SEQUENCE') class SequenceOf(ArrayType): def __init__(self, name, element_type): super(SequenceOf, self).__init__(name, 'SEQUENCE OF', element_type) class Set(MembersType): def __init__(self, name, members): super(Set, self).__init__(name, members, 'SET') class SetOf(ArrayType): def __init__(self, name, element_type): super(SetOf, self).__init__(name, 'SET OF', element_type) class Choice(Type): def __init__(self, name, members): super(Choice, self).__init__(name, 'CHOICE') self.members = members self.name_to_member = {member.name: member for member in self.members} def format_names(self): return format_or(sorted([member.name for member in self.members])) def encode(self, data, separator, indent): try: member = self.name_to_member[data[0]] except KeyError: raise EncodeError( "Expected choice {}, but got '{}'.".format( self.format_names(), data[0])) try: encoded = member.encode(data[1], separator, indent) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e return u'{} : {}'.format(data[0], encoded) def __repr__(self): return 'Choice({}, [{}])'.format( self.name, ', '.join([repr(member) for member in self.members])) class UTF8String(Type): def __init__(self, name): super(UTF8String, self).__init__(name, 'UTF8String') def encode(self, data, _separator, _indent): return u'"{}"'.format(data) class NumericString(Type): def __init__(self, name): super(NumericString, self).__init__(name, 'NumericString') def encode(self, data, _separator, _indent): return u'"{}"'.format(data) class PrintableString(Type): def __init__(self, name): super(PrintableString, self).__init__(name, 'PrintableString') def encode(self, data, _separator, _indent): return u'"{}"'.format(data) class IA5String(Type): def __init__(self, name): super(IA5String, self).__init__(name, 'IA5String') def encode(self, data, _separator, _indent): return u'"{}"'.format(data) class VisibleString(Type): def __init__(self, name): super(VisibleString, self).__init__(name, 'VisibleString') def encode(self, data, _separator, _indent): return u'"{}"'.format(data) class GeneralString(Type): def __init__(self, name): super(GeneralString, self).__init__(name, 'GeneralString') def encode(self, data, _separator, _indent): return u'"{}"'.format(data) class BMPString(Type): def __init__(self, name): super(BMPString, self).__init__(name, 'BMPString') def encode(self, data, _separator, _indent): return u'"{}"'.format(data) class GraphicString(Type): def __init__(self, name): super(GraphicString, self).__init__(name, 'GraphicString') def encode(self, data, _separator, _indent): return u'"{}"'.format(data) class UniversalString(Type): def __init__(self, name): super(UniversalString, self).__init__(name, 'UniversalString') def encode(self, data, _separator, _indent): return u'"{}"'.format(data) class TeletexString(Type): def __init__(self, name): super(TeletexString, self).__init__(name, 'TeletexString') def encode(self, data, _separator, _indent): return u'"{}"'.format(data) class ObjectDescriptor(GraphicString): pass class UTCTime(Type): def __init__(self, name): super(UTCTime, self).__init__(name, 'UTCTime') def encode(self, data, _separator, _indent): return u'"{}"'.format(utc_time_from_datetime(data)) class GeneralizedTime(Type): def __init__(self, name): super(GeneralizedTime, self).__init__(name, 'GeneralizedTime') def encode(self, data, _separator, _indent): return u'"{}"'.format(generalized_time_from_datetime(data)) class Date(Type): def __init__(self, name): super(Date, self).__init__(name, 'DATE') def encode(self, data, _separator, _indent): return u'"{}"'.format(str(data)) class TimeOfDay(Type): def __init__(self, name): super(TimeOfDay, self).__init__(name, 'TIME-OF-DAY') def encode(self, data, _separator, _indent): return u'"{}"'.format(str(data)) class DateTime(Type): def __init__(self, name): super(DateTime, self).__init__(name, 'DATE-TIME') def encode(self, data, _separator, _indent): return u'"{}"'.format(str(data).replace(' ', 'T')) class Any(Type): def __init__(self, name): super(Any, self).__init__(name, 'ANY') def encode(self, data, _separator, _indent): data = format_bytes(data).upper() return "'{}'H".format(data) class Recursive(compiler.Recursive, Type): def __init__(self, name, type_name, module_name): super(Recursive, self).__init__(name, 'RECURSIVE') self.type_name = type_name self.module_name = module_name self.inner = None def set_inner_type(self, inner): self.inner = copy(inner) def encode(self, data, separator, indent): return self.inner.encode(data, separator, indent) class CompiledType(compiler.CompiledType): def __init__(self, type_name, compiled_type): super(CompiledType, self).__init__(compiled_type) self._value_name = type_name.lower() self._value_type = type_name def encode(self, data, indent=None): try: if indent is None: encoded = self._type.encode(data, ' ', 0) else: encoded = self._type.encode(data, '\n', indent) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e encoded = u'{} {} ::= {}'.format(self._value_name, self._value_type, encoded.lstrip(' ')) return encoded.encode('utf-8') def decode(self, data): raise NotImplementedError('GSER decoding is not implemented.') class Compiler(compiler.Compiler): def process_type(self, type_name, type_descriptor, module_name): compiled_type = self.compile_type(type_name, type_descriptor, module_name) return CompiledType(type_name, compiled_type) def compile_type(self, name, type_descriptor, module_name): module_name = self.get_module_name(type_descriptor, module_name) type_name = type_descriptor['type'] if type_name == 'SEQUENCE': members, _ = self.compile_members( type_descriptor['members'], module_name) compiled = Sequence(name, members) elif type_name == 'SEQUENCE OF': compiled = SequenceOf(name, self.compile_type('', type_descriptor['element'], module_name)) elif type_name == 'SET': members, _ = self.compile_members( type_descriptor['members'], module_name) compiled = Set(name, members) elif type_name == 'SET OF': compiled = SetOf(name, self.compile_type('', type_descriptor['element'], module_name)) elif type_name == 'CHOICE': members, _ = self.compile_members( type_descriptor['members'], module_name) compiled = Choice(name, members) elif type_name == 'INTEGER': compiled = Integer(name) elif type_name == 'REAL': compiled = Real(name) elif type_name == 'ENUMERATED': compiled = Enumerated(name, self.get_enum_values(type_descriptor, module_name), self._numeric_enums) elif type_name == 'BOOLEAN': compiled = Boolean(name) elif type_name == 'OBJECT IDENTIFIER': compiled = ObjectIdentifier(name) elif type_name == 'OCTET STRING': compiled = OctetString(name) elif type_name == 'TeletexString': compiled = TeletexString(name) elif type_name == 'NumericString': compiled = NumericString(name) elif type_name == 'PrintableString': compiled = PrintableString(name) elif type_name == 'IA5String': compiled = IA5String(name) elif type_name == 'VisibleString': compiled = VisibleString(name) elif type_name == 'GeneralString': compiled = GeneralString(name) elif type_name == 'UTF8String': compiled = UTF8String(name) elif type_name == 'BMPString': compiled = BMPString(name) elif type_name == 'GraphicString': compiled = GraphicString(name) elif type_name == 'UTCTime': compiled = UTCTime(name) elif type_name == 'UniversalString': compiled = UniversalString(name) elif type_name == 'GeneralizedTime': compiled = GeneralizedTime(name) elif type_name == 'DATE': compiled = Date(name) elif type_name == 'TIME-OF-DAY': compiled = TimeOfDay(name) elif type_name == 'DATE-TIME': compiled = DateTime(name) elif type_name == 'BIT STRING': compiled = BitString(name) elif type_name == 'ANY': compiled = Any(name) elif type_name == 'ANY DEFINED BY': compiled = Any(name) elif type_name == 'NULL': compiled = Null(name) elif type_name == 'EXTERNAL': members, _ = self.compile_members( self.external_type_descriptor()['members'], module_name) compiled = Sequence(name, members) elif type_name == 'ObjectDescriptor': compiled = ObjectDescriptor(name) else: if type_name in self.types_backtrace: compiled = Recursive(name, type_name, module_name) self.recursive_types.append(compiled) else: compiled = self.compile_user_type(name, type_name, module_name) return compiled def compile_dict(specification, numeric_enums=False): return Compiler(specification, numeric_enums).process() def decode_full_length(_data): raise DecodeError('Decode length is not supported for this codec.') asn1tools-0.169.0/asn1tools/codecs/jer.py000066400000000000000000000421321524544274600201460ustar00rootroot00000000000000"""JSON Encoding Rules (JER) codec. """ import time import json import binascii import math import datetime from ..parser import EXTENSION_MARKER from . import BaseType, format_bytes, ErrorWithLocation from . import EncodeError from . import DecodeError from . import compiler from . import format_or from . import utc_time_to_datetime from . import utc_time_from_datetime from . import generalized_time_to_datetime from . import generalized_time_from_datetime from .compiler import enum_values_as_dict class Type(BaseType): def set_size_range(self, minimum, maximum, has_extension_marker): pass class StringType(Type): def __init__(self, name): super(StringType, self).__init__(name, self.__class__.__name__) def encode(self, data): return data def decode(self, data): return data class MembersType(Type): def __init__(self, name, members, type_name): super(MembersType, self).__init__(name, type_name) self.members = members def encode(self, data): values = {} for member in self.members: name = member.name if name in data: try: value = member.encode(data[name]) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e elif member.optional or member.has_default(): continue else: raise EncodeError( "{} member '{}' not found in {}.".format( self.__class__.__name__, name, data)) values[name] = value return values def decode(self, data): values = {} for member in self.members: name = member.name if name in data: try: value = member.decode(data[name]) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e values[name] = value elif member.optional: pass elif member.has_default(): values[name] = member.get_default() return values def __repr__(self): return '{}({}, [{}])'.format( self.__class__.__name__, self.name, ', '.join([repr(member) for member in self.members])) class Boolean(Type): def __init__(self, name): super(Boolean, self).__init__(name, 'BOOLEAN') def encode(self, data): return data def decode(self, data): return data class Integer(Type): def __init__(self, name): super(Integer, self).__init__(name, 'INTEGER') def encode(self, data): return data def decode(self, data): return data class Real(Type): def __init__(self, name): super(Real, self).__init__(name, 'REAL') def encode(self, data): if data == float('inf'): return 'INF' elif data == float('-inf'): return '-INF' elif math.isnan(data): return 'NaN' else: return data def decode(self, data): if isinstance(data, float): return data else: return { 'INF': float('inf'), '-INF': float('-inf'), 'NaN': float('nan'), '0': 0.0, '-0': 0.0 }[data] class Null(Type): def __init__(self, name): super(Null, self).__init__(name, 'NULL') def encode(self, data): return data def decode(self, data): return data class BitString(Type): def __init__(self, name, minimum, maximum): super(BitString, self).__init__(name, 'BIT STRING') if minimum is None and maximum is None: self.size = None elif minimum == maximum: self.size = minimum else: self.size = None def encode(self, data): value = format_bytes(data[0]).upper() if self.size is None: value = { "value": value, "length": data[1] } return value def decode(self, data): if self.size is None: return (binascii.unhexlify(data['value']), data['length']) else: return (binascii.unhexlify(data), self.size) class OctetString(Type): def __init__(self, name): super(OctetString, self).__init__(name, 'OCTET STRING') def encode(self, data): return format_bytes(data).upper() def decode(self, data): return binascii.unhexlify(data) class ObjectIdentifier(Type): def __init__(self, name): super(ObjectIdentifier, self).__init__(name, 'OBJECT IDENTIFIER') def encode(self, data): return data def decode(self, data): return str(data) class Enumerated(Type): def __init__(self, name, values, numeric): super(Enumerated, self).__init__(name, 'ENUMERATED') if numeric: self.values = {k: k for k in enum_values_as_dict(values)} else: self.values = { v: v for v in enum_values_as_dict(values).values() } self.has_extension_marker = (EXTENSION_MARKER in values) def format_values(self): return format_or(sorted(list(self.values))) def encode(self, data): try: value = self.values[data] except KeyError: raise EncodeError( "Expected enumeration value {}, but got '{}'.".format( self.format_values(), data)) return value def decode(self, data): if data in self.values: return self.values[data] elif self.has_extension_marker: return None else: raise DecodeError( "Expected enumeration value {}, but got '{}'.".format( self.format_values(), data)) class Sequence(MembersType): def __init__(self, name, members): super(Sequence, self).__init__(name, members, 'SEQUENCE') class SequenceOf(Type): def __init__(self, name, element_type): super(SequenceOf, self).__init__(name, 'SEQUENCE OF') self.element_type = element_type def encode(self, data): values = [] for entry in data: value = self.element_type.encode(entry) values.append(value) return values def decode(self, data): values = [] for element_data in data: value = self.element_type.decode(element_data) values.append(value) return values def __repr__(self): return 'SequenceOf({}, {})'.format(self.name, self.element_type) class Set(MembersType): def __init__(self, name, members): super(Set, self).__init__(name, members, 'SET') class SetOf(Type): def __init__(self, name, element_type): super(SetOf, self).__init__(name, 'SET OF') self.element_type = element_type def encode(self, data): values = [] for entry in data: value = self.element_type.encode(entry) values.append(value) return values def decode(self, data): values = [] for element_data in data: value = self.element_type.decode(element_data) values.append(value) return values def __repr__(self): return 'SetOf({}, {})'.format(self.name, self.element_type) class Choice(Type): def __init__(self, name, members, has_extension_marker): super(Choice, self).__init__(name, 'CHOICE') self.members = members self.name_to_member = {member.name: member for member in self.members} self.has_extension_marker = has_extension_marker def format_names(self): return format_or(sorted([member.name for member in self.members])) def encode(self, data): try: member = self.name_to_member[data[0]] except KeyError: raise EncodeError( "Expected choice {}, but got '{}'.".format( self.format_names(), data[0])) try: return {member.name: member.encode(data[1])} except ErrorWithLocation as e: # Add member location e.add_location(member) raise e def decode(self, data): name, value = list(data.items())[0] if name in self.name_to_member: member = self.name_to_member[name] elif self.has_extension_marker: return (None, None) else: raise DecodeError( "Expected choice {}, but got '{}'.".format( self.format_names(), name)) try: return (name, member.decode(value)) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e def __repr__(self): return 'Choice({}, [{}])'.format( self.name, ', '.join([repr(member) for member in self.members])) class UTF8String(StringType): pass class NumericString(StringType): pass class PrintableString(StringType): pass class IA5String(StringType): pass class VisibleString(StringType): pass class GeneralString(StringType): pass class BMPString(StringType): pass class GraphicString(StringType): pass class UniversalString(StringType): pass class TeletexString(StringType): pass class ObjectDescriptor(GraphicString): pass class UTCTime(StringType): def encode(self, data): return utc_time_from_datetime(data) def decode(self, data): return utc_time_to_datetime(data) class GeneralizedTime(StringType): def encode(self, data): return generalized_time_from_datetime(data) def decode(self, data): return generalized_time_to_datetime(data) class Date(StringType): def encode(self, data): return str(data) def decode(self, data): return datetime.date(*time.strptime(data, '%Y-%m-%d')[:3]) class TimeOfDay(StringType): def encode(self, data): return str(data) def decode(self, data): return datetime.time(*time.strptime(data, '%H:%M:%S')[3:6]) class DateTime(StringType): def encode(self, data): return str(data).replace(' ', 'T') def decode(self, data): return datetime.datetime(*time.strptime(data, '%Y-%m-%dT%H:%M:%S')[:6]) class Any(Type): def __init__(self, name): super(Any, self).__init__(name, 'ANY') def encode(self, _data): raise NotImplementedError('ANY is not yet implemented.') def decode(self, _data): raise NotImplementedError('ANY is not yet implemented.') class Recursive(compiler.Recursive, Type): def __init__(self, name, type_name, module_name): super(Recursive, self).__init__(name, 'RECURSIVE') self.type_name = type_name self.module_name = module_name self._inner = None def set_inner_type(self, inner): self._inner = inner def encode(self, data): return self._inner.encode(data) def decode(self, data): return self._inner.decode(data) class CompiledType(compiler.CompiledType): def encode(self, data, indent=None): try: dictionary = self._type.encode(data) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e if indent is None: string = json.dumps(dictionary, separators=(',', ':')) else: string = json.dumps(dictionary, indent=indent) return string.encode('utf-8') def decode(self, data): try: return self._type.decode(json.loads(data.decode('utf-8'))) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e class Compiler(compiler.Compiler): def process_type(self, type_name, type_descriptor, module_name): compiled_type = self.compile_type(type_name, type_descriptor, module_name) return CompiledType(compiled_type) def compile_type(self, name, type_descriptor, module_name): module_name = self.get_module_name(type_descriptor, module_name) type_name = type_descriptor['type'] if type_name == 'SEQUENCE': members, _ = self.compile_members( type_descriptor['members'], module_name) compiled = Sequence(name, members) elif type_name == 'SEQUENCE OF': compiled = SequenceOf(name, self.compile_type('', type_descriptor['element'], module_name)) elif type_name == 'SET': members, _ = self.compile_members( type_descriptor['members'], module_name) compiled = Set(name, members) elif type_name == 'SET OF': compiled = SetOf(name, self.compile_type('', type_descriptor['element'], module_name)) elif type_name == 'CHOICE': compiled = Choice(name, *self.compile_members( type_descriptor['members'], module_name)) elif type_name == 'INTEGER': compiled = Integer(name) elif type_name == 'REAL': compiled = Real(name) elif type_name == 'ENUMERATED': compiled = Enumerated(name, self.get_enum_values(type_descriptor, module_name), self._numeric_enums) elif type_name == 'BOOLEAN': compiled = Boolean(name) elif type_name == 'OBJECT IDENTIFIER': compiled = ObjectIdentifier(name) elif type_name == 'OCTET STRING': compiled = OctetString(name) elif type_name == 'TeletexString': compiled = TeletexString(name) elif type_name == 'NumericString': compiled = NumericString(name) elif type_name == 'PrintableString': compiled = PrintableString(name) elif type_name == 'IA5String': compiled = IA5String(name) elif type_name == 'VisibleString': compiled = VisibleString(name) elif type_name == 'GeneralString': compiled = GeneralString(name) elif type_name == 'DATE': compiled = Date(name) elif type_name == 'TIME-OF-DAY': compiled = TimeOfDay(name) elif type_name == 'DATE-TIME': compiled = DateTime(name) elif type_name == 'UTF8String': compiled = UTF8String(name) elif type_name == 'BMPString': compiled = BMPString(name) elif type_name == 'GraphicString': compiled = GraphicString(name) elif type_name == 'UTCTime': compiled = UTCTime(name) elif type_name == 'UniversalString': compiled = UniversalString(name) elif type_name == 'GeneralizedTime': compiled = GeneralizedTime(name) elif type_name == 'BIT STRING': minimum, maximum, _ = self.get_size_range(type_descriptor, module_name) compiled = BitString(name, minimum, maximum) elif type_name == 'ANY': compiled = Any(name) elif type_name == 'ANY DEFINED BY': compiled = Any(name) elif type_name == 'NULL': compiled = Null(name) elif type_name == 'EXTERNAL': members, _ = self.compile_members( self.external_type_descriptor()['members'], module_name) compiled = Sequence(name, members) elif type_name == 'ObjectDescriptor': compiled = ObjectDescriptor(name) else: if type_name in self.types_backtrace: compiled = Recursive(name, type_name, module_name) self.recursive_types.append(compiled) else: compiled = self.compile_user_type(name, type_name, module_name) return compiled def compile_dict(specification, numeric_enums=False): return Compiler(specification, numeric_enums).process() def decode_full_length(_data): raise DecodeError('Decode length is not supported for this codec.') asn1tools-0.169.0/asn1tools/codecs/oer.py000066400000000000000000001345561524544274600201670ustar00rootroot00000000000000"""Basic Octet Encoding Rules (OER) codec. """ import binascii from copy import copy import struct from operator import attrgetter import datetime from ..parser import EXTENSION_MARKER from . import BaseType, format_bytes, ErrorWithLocation from . import EncodeError from . import DecodeError from . import OutOfDataError from . import format_or from . import compiler from . import utc_time_to_datetime from . import utc_time_from_datetime from . import generalized_time_to_datetime from . import generalized_time_from_datetime from .compiler import enum_values_as_dict from .ber import Class from .ber import Tag from .ber import encode_object_identifier from .ber import decode_object_identifier from . import der def encode_tag(number, flags): if number < 63: tag = bytearray([flags | number]) else: tag = bytearray([flags | 0x3f]) encoded = bytearray() while number > 0: encoded.append(0x80 | (number & 0x7f)) number >>= 7 encoded[0] &= 0x7f encoded.reverse() tag.extend(encoded) return bytes(tag) class Encoder(object): def __init__(self): self.number_of_bits = 0 self.value = 0 def __iadd__(self, other): self.append_non_negative_binary_integer(other.value, other.number_of_bits) return self def number_of_bytes(self): return (self.number_of_bits + 7) // 8 def set_bit(self, offset): self.value |= (1 << (self.number_of_bits - offset - 1)) def align(self): width = (8 * self.number_of_bytes() - self.number_of_bits) self.number_of_bits += width self.value <<= width def append_bit(self, bit): """Append given bit. """ self.number_of_bits += 1 self.value <<= 1 self.value |= bit def append_bits(self, data, number_of_bits): """Append given bits. """ if number_of_bits == 0: return value = int(binascii.hexlify(data), 16) value >>= (8 * len(data) - number_of_bits) self.append_non_negative_binary_integer(value, number_of_bits) def append_u8(self, value): return self.append_non_negative_binary_integer(value, 8) def append_bytes(self, data): """Append given data. """ self.append_bits(data, 8 * len(data)) def as_bytearray(self): """Return the bits as a bytearray. """ if self.number_of_bits == 0: return bytearray() data = self.value data |= (0x80 << self.number_of_bits) data = hex(data)[4:].rstrip('L') return bytearray(binascii.unhexlify(data)) def append_length_determinant(self, value): if value < 128: self.append_non_negative_binary_integer(value, 8) else: encoded = bytearray() while value > 0: encoded.append(value & 0xff) value >>= 8 length = len(encoded) if length > 127: raise EncodeError('Length determinant {} is too big.'.format(value)) self.append_u8(0x80 | length) self.append_bytes(encoded[::-1]) def append_non_negative_binary_integer(self, value, number_of_bits): """Append given integer value. """ self.number_of_bits += number_of_bits self.value <<= number_of_bits self.value |= value def append_integer(self, value): number_of_bits = value.bit_length() if value < 0: number_of_bytes = ((number_of_bits + 7) // 8) value = ((1 << (8 * number_of_bytes)) + value) if (value & (1 << (8 * number_of_bytes - 1))) == 0: value |= (0xff << (8 * number_of_bytes)) number_of_bytes += 1 elif value > 0: number_of_bytes = ((number_of_bits + 7) // 8) if number_of_bits == (8 * number_of_bytes): number_of_bytes += 1 else: number_of_bytes = 1 self.append_length_determinant(number_of_bytes) self.append_non_negative_binary_integer(value, 8 * number_of_bytes) def append_unsigned_integer(self, value): number_of_bits = max(value.bit_length(), 1) number_of_bytes = ((number_of_bits + 7) // 8) self.append_length_determinant(number_of_bytes) self.append_non_negative_binary_integer(value, 8 * number_of_bytes) def __repr__(self): return format_bytes(self.as_bytearray()) class Decoder(object): def __init__(self, encoded): self.number_of_bits = (8 * len(encoded)) self.total_number_of_bits = self.number_of_bits if len(encoded) > 0: self.value = int(binascii.hexlify(encoded), 16) else: self.value = 0 def align(self): width = (self.number_of_bits & 0x7) self.number_of_bits -= width def number_of_read_bits(self): return self.total_number_of_bits - self.number_of_bits def skip_bits(self, number_of_bits): if number_of_bits > self.number_of_bits: raise OutOfDataError(self.number_of_read_bits()) self.number_of_bits -= number_of_bits def peek_bit(self): return ((self.value >> (self.number_of_bits - 1)) & 1) def clear_bit(self): self.value &= (1 << (self.number_of_bits - 1)) - 1 def read_bit(self): """Read a bit. """ if self.number_of_bits == 0: raise OutOfDataError(self.number_of_read_bits()) self.number_of_bits -= 1 return ((self.value >> self.number_of_bits) & 1) def read_bits(self, number_of_bits): """Read given number of bits. """ if number_of_bits > self.number_of_bits: raise OutOfDataError(self.number_of_read_bits()) self.number_of_bits -= number_of_bits mask = ((1 << number_of_bits) - 1) value = ((self.value >> self.number_of_bits) & mask) value &= mask value |= (0x80 << number_of_bits) return binascii.unhexlify(hex(value)[4:].rstrip('L')) def read_byte(self): return self.read_non_negative_binary_integer(8) def read_bytes(self, number_of_bytes): return self.read_bits(8 * number_of_bytes) def read_non_negative_binary_integer(self, number_of_bits): """Read an integer value of given number of bits. """ if number_of_bits > self.number_of_bits: raise OutOfDataError(self.number_of_read_bits()) self.number_of_bits -= number_of_bits mask = ((1 << number_of_bits) - 1) return ((self.value >> self.number_of_bits) & mask) def read_length_determinant(self): value = self.read_byte() if value & 0x80: length = (value & 0x7f) value = self.read_non_negative_binary_integer(8 * length) return value def read_integer(self): number_of_bytes = self.read_length_determinant() number_of_bits = 8 * number_of_bytes value = self.read_non_negative_binary_integer(number_of_bits) if value & (1 << (number_of_bits - 1)): value -= (1 << number_of_bits) - 1 value -= 1 return value def read_unsigned_integer(self): number_of_bytes = self.read_length_determinant() number_of_bits = 8 * number_of_bytes return self.read_non_negative_binary_integer(number_of_bits) def read_tag(self): byte = self.read_byte() tag = bytearray([byte]) if byte & 0x3f == 0x3f: while True: byte = self.read_byte() tag.append(byte) if byte & 0x80 == 0: break return bytes(tag) class Type(BaseType): def __init__(self, name, type_name, number, flags=0): super().__init__(name, type_name) self.module_name = None if number is None: self.tag = None else: self.tag = encode_tag(number, flags) def set_tag(self, number, flags): if not Class.APPLICATION & flags: flags |= Class.CONTEXT_SPECIFIC self.tag = encode_tag(number, flags) def set_size_range(self, minimum, maximum, has_extension_marker): pass def set_restricted_to_range(self, minimum, maximum, has_extension_marker): pass class KnownMultiplierStringType(Type): TAG = None ENCODING = None def __init__(self, name, minimum=None, maximum=None, has_extension_marker=False): super(KnownMultiplierStringType, self).__init__(name, self.__class__.__name__, self.TAG) self.number_of_bytes = None if minimum is not None or maximum is not None: if not has_extension_marker: if minimum == maximum: self.number_of_bytes = minimum def encode(self, data, encoder): encoded = data.encode(self.ENCODING) if self.number_of_bytes is None: encoder.append_length_determinant(len(encoded)) encoder.append_bytes(encoded) else: encoder.append_bytes(encoded) def decode(self, decoder): if self.number_of_bytes is None: number_of_bytes = decoder.read_length_determinant() else: number_of_bytes = self.number_of_bytes return decoder.read_bytes(number_of_bytes).decode(self.ENCODING) class MembersType(Type): def __init__(self, name, type_name, tag, root_members, additions): super(MembersType, self).__init__(name, type_name, tag) self.root_members = root_members self.additions = additions self.optionals = [ member for member in root_members if member.optional or member.default is not None ] def encode(self, data, encoder): if self.additions is not None: offset = encoder.number_of_bits encoder.append_bit(0) self.encode_root(data, encoder) if len(self.additions) > 0: if self.encode_additions(data, encoder): encoder.set_bit(offset) else: self.encode_root(data, encoder) def encode_root(self, data, encoder): for optional in self.optionals: if optional.optional: encoder.append_bit(optional.name in data) elif optional.name in data: encoder.append_bit(not optional.is_default(data[optional.name])) else: encoder.append_bit(0) encoder.align() for member in self.root_members: self.encode_member(member, data, encoder) def encode_additions(self, data, encoder): # Encode extension additions. presence_bits = 0 addition_encoders = [] try: for addition in self.additions: presence_bits <<= 1 addition_encoder = Encoder() self.encode_member(addition, data, addition_encoder, encode_default=True) if addition_encoder.number_of_bits > 0 or addition.name in data: addition_encoders.append(addition_encoder) presence_bits |= 1 except EncodeError: pass # Return false if no extension additions are present. if not addition_encoders: return False # Presence bit field. number_of_additions = len(self.additions) number_of_unused_bits = (8 - (number_of_additions % 8)) encoder.append_length_determinant(((number_of_additions + 7) // 8) + 1) encoder.append_non_negative_binary_integer(number_of_unused_bits, 8) encoder.append_non_negative_binary_integer(presence_bits, number_of_additions) encoder.align() for addition_encoder in addition_encoders: encoder.append_length_determinant(addition_encoder.number_of_bytes()) encoder += addition_encoder return True def encode_member(self, member, data, encoder, encode_default=False): name = member.name if name in data: try: if member.default is None: member.encode(data[name], encoder) elif not member.is_default(data[name]) or encode_default: member.encode(data[name], encoder) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e elif member.optional or member.has_default(): pass else: raise EncodeError( "{} member '{}' not found in {}.".format( self.__class__.__name__, name, data)) def decode(self, decoder): if self.additions is not None: if decoder.read_bit(): decoded = self.decode_root(decoder) decoded.update(self.decode_additions(decoder)) return decoded else: return self.decode_root(decoder) else: return self.decode_root(decoder) def decode_root(self, decoder): values = {} optionals = { optional: decoder.read_bit() for optional in self.optionals } decoder.align() for member in self.root_members: if optionals.get(member, True): try: value = member.decode(decoder) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e values[member.name] = value elif member.has_default(): values[member.name] = member.default return values def decode_additions(self, decoder): # Presence bit field. length = decoder.read_length_determinant() unused_bits = decoder.read_byte() num_additions = ((length - 1) * 8) - unused_bits presence_bits = decoder.read_non_negative_binary_integer(num_additions) decoder.align() decoded = {} for i in range(num_additions): if presence_bits & (1 << (num_additions - i - 1)): member_length = decoder.read_length_determinant() if i < len(self.additions): addition = self.additions[i] try: decoded[addition.name] = addition.decode(decoder) except ErrorWithLocation as e: # Add member location e.add_location(addition) raise e else: decoder.skip_bits(8 * member_length) return decoded def __repr__(self): return '{}({}, [{}])'.format( self.__class__.__name__, self.name, ', '.join([repr(member) for member in self.root_members])) class ArrayType(Type): def __init__(self, name, type_name, tag, element_type): super(ArrayType, self).__init__(name, type_name, tag) self.element_type = element_type def encode(self, data, encoder): encoder.append_unsigned_integer(len(data)) for entry in data: self.element_type.encode(entry, encoder) def decode(self, decoder): length = decoder.read_unsigned_integer() decoded = [] for _ in range(length): decoded_element = self.element_type.decode(decoder) decoded.append(decoded_element) return decoded def __repr__(self): return '{}({}, {})'.format(self.__class__.__name__, self.name, self.element_type) class Boolean(Type): def __init__(self, name): super(Boolean, self).__init__(name, 'BOOLEAN', Tag.BOOLEAN) def encode(self, data, encoder): encoder.append_non_negative_binary_integer(0xff * data, 8) def decode(self, decoder): return bool(decoder.read_byte()) class Integer(Type): def __init__(self, name): super(Integer, self).__init__(name, 'INTEGER', Tag.INTEGER) self.has_extension_marker = False self.length = None self.fmt = None self.signed = True def set_restricted_to_range(self, minimum, maximum, has_extension_marker): self.has_extension_marker = has_extension_marker if minimum != 'MIN': self.signed = (minimum < 0) if minimum == 'MIN' or maximum == 'MAX' or has_extension_marker: return if minimum >= 0: if maximum < 256: self.length = 1 self.fmt = '>B' elif maximum < 65536: self.length = 2 self.fmt = '>H' elif maximum < 4294967296: self.length = 4 self.fmt = '>I' elif maximum < 18446744073709551616: self.length = 8 self.fmt = '>Q' elif minimum >= -128 and maximum < 128: self.length = 1 self.fmt = '>b' elif minimum >= -32768 and maximum < 32768: self.length = 2 self.fmt = '>h' elif minimum >= -2147483648 and maximum < 2147483648: self.length = 4 self.fmt = '>i' elif minimum >= -9223372036854775808 and maximum < 9223372036854775808: self.length = 8 self.fmt = '>q' def encode(self, data, encoder): if self.fmt: encoder.append_bytes(struct.pack(self.fmt, data)) elif self.signed: encoder.append_integer(data) else: encoder.append_unsigned_integer(data) def decode(self, decoder): if self.fmt: return struct.unpack(self.fmt, decoder.read_bytes(self.length))[0] elif self.signed: return decoder.read_integer() else: return decoder.read_unsigned_integer() class Real(Type): def __init__(self, name, with_components): super(Real, self).__init__(name, 'REAL', Tag.REAL) if with_components is None: self.length = None self.fmt = None else: mantissa, base, exponent = self.unpack_with_components(with_components) if all([mantissa, base, exponent]): if self.is_binary32(mantissa, base, exponent): self.length = 4 self.fmt = '>f' elif self.is_binary64(mantissa, base, exponent): self.length = 8 self.fmt = '>d' else: self.length = None self.fmt = None else: self.length = None self.fmt = None def unpack_with_components(self, with_components): with_components = dict(with_components) try: mantissa = with_components['mantissa'] base = with_components['base'] exponent = with_components['exponent'] except KeyError: mantissa = None base = None exponent = None return (mantissa, base, exponent) def is_binary32(self, mantissa, base, exponent): return (-16777215 <= mantissa[0] <= mantissa[1] <= 16777215 and base == 2 and -149 <= exponent[0] <= exponent[1] <= 104) def is_binary64(self, mantissa, base, exponent): return (-9007199254740991 <= mantissa[0] <= mantissa[1] <= 9007199254740991 and base == 2 and -1074 <= exponent[0] <= exponent[1] <= 971) def encode(self, data, encoder): if self.fmt is None: encoded = der.encode_real(data) encoder.append_length_determinant(len(encoded)) encoder.append_bytes(encoded) else: try: encoder.append_bytes(struct.pack(self.fmt, data)) except (struct.error, OverflowError): raise EncodeError( 'Expected an IEEE 754 {} bits floating point number, but ' 'got {}.'.format(8 * self.length, data)) def decode(self, decoder): if self.fmt is None: length = decoder.read_length_determinant() return der.decode_real(bytearray(decoder.read_bytes(length))) else: return struct.unpack(self.fmt, decoder.read_bytes(self.length))[0] class Null(Type): def __init__(self, name): super(Null, self).__init__(name, 'NULL', Tag.NULL) def encode(self, _data, _encoder): return def decode(self, _decoder): return class BitString(Type): def __init__(self, name, named_bits, minimum, maximum, has_extension_marker): super(BitString, self).__init__(name, 'BIT STRING', Tag.BIT_STRING) self.number_of_bits = None self.named_bits = named_bits if minimum is not None or maximum is not None: if not has_extension_marker: if minimum == maximum: self.number_of_bits = minimum def encode(self, data, encoder): number_of_bytes, number_of_rest_bits = divmod(data[1], 8) data = bytearray(data[0]) if number_of_rest_bits == 0: data = data[:number_of_bytes] number_of_unused_bits = 0 else: last_byte = data[number_of_bytes] last_byte &= ((0xff >> number_of_rest_bits) ^ 0xff) data = data[:number_of_bytes] data.append(last_byte) number_of_unused_bits = (8 - number_of_rest_bits) number_of_bytes += 1 if self.number_of_bits is None: encoder.append_length_determinant(number_of_bytes + 1) encoder.append_non_negative_binary_integer(number_of_unused_bits, 8) encoder.append_bytes(data) else: encoder.append_bytes(data) def decode(self, decoder): if self.number_of_bits is None: number_of_bytes = decoder.read_length_determinant() number_of_unused_bits = decoder.read_byte() number_of_bytes -= 1 number_of_bits = (8 * number_of_bytes - number_of_unused_bits) else: number_of_bytes = (self.number_of_bits + 7) // 8 number_of_bits = self.number_of_bits return (decoder.read_bytes(number_of_bytes), number_of_bits) class OctetString(Type): def __init__(self, name, minimum, maximum, has_extension_marker): super(OctetString, self).__init__(name, 'OCTET STRING', Tag.OCTET_STRING) self.number_of_bytes = None self.set_size_range(minimum, maximum, has_extension_marker) def set_size_range(self, minimum, maximum, has_extension_marker): if minimum is not None or maximum is not None: if not has_extension_marker: if minimum == maximum: self.number_of_bytes = minimum def encode(self, data, encoder): if self.number_of_bytes is None: encoder.append_length_determinant(len(data)) encoder.append_bytes(data) else: encoder.append_bytes(data) def decode(self, decoder): if self.number_of_bytes is None: number_of_bytes = decoder.read_length_determinant() else: number_of_bytes = self.number_of_bytes return decoder.read_bytes(number_of_bytes) class ObjectIdentifier(Type): def __init__(self, name): super(ObjectIdentifier, self).__init__(name, 'OBJECT IDENTIFIER', Tag.OBJECT_IDENTIFIER) def encode(self, data, encoder): encoded_subidentifiers = encode_object_identifier(data) encoder.append_length_determinant(len(encoded_subidentifiers)) encoder.append_bytes(bytearray(encoded_subidentifiers)) def decode(self, decoder): length = decoder.read_length_determinant() data = decoder.read_bytes(length) return decode_object_identifier(bytearray(data), 0, len(data)) class Enumerated(Type): def __init__(self, name, values, numeric): super(Enumerated, self).__init__(name, 'ENUMERATED', Tag.ENUMERATED) if numeric: self.value_to_data = {k: k for k in enum_values_as_dict(values)} self.data_to_value = self.value_to_data else: self.value_to_data = enum_values_as_dict(values) self.data_to_value = {v: k for k, v in self.value_to_data.items()} self.has_extension_marker = (EXTENSION_MARKER in values) def format_names(self): return format_or(sorted(list(self.value_to_data.values()))) def format_values(self): return format_or(sorted(list(self.value_to_data))) def encode(self, data, encoder): try: value = self.data_to_value[data] except KeyError: raise EncodeError( "Expected enumeration value {}, but got '{}'.".format( self.format_names(), data)) if 0 <= value <= 127: encoder.append_non_negative_binary_integer(value, 8) else: offset = encoder.number_of_bits encoder.append_integer(value) encoder.set_bit(offset) def decode(self, decoder): if decoder.peek_bit(): decoder.clear_bit() value = decoder.read_integer() else: value = decoder.read_byte() if value in self.value_to_data: return self.value_to_data[value] elif self.has_extension_marker: return None else: raise DecodeError( 'Expected enumeration value {}, but got {}.'.format( self.format_values(), value)) class Sequence(MembersType): def __init__(self, name, root_members, additions): super(Sequence, self).__init__(name, 'SEQUENCE', Tag.SEQUENCE, root_members, additions) class SequenceOf(ArrayType): def __init__(self, name, element_type): super(SequenceOf, self).__init__(name, 'SEQUENCE OF', Tag.SEQUENCE, element_type) class Set(MembersType): def __init__(self, name, root_members, additions): super(Set, self).__init__(name, 'SET', Tag.SET, root_members, additions) class SetOf(ArrayType): def __init__(self, name, element_type): super(SetOf, self).__init__(name, 'SET OF', Tag.SET, element_type) class Choice(Type): def __init__(self, name, root_members, additions): super(Choice, self).__init__(name, 'CHOICE', None) self.root_members = root_members self.name_to_root_member = { member.name: member for member in root_members } self.tag_to_root_member = {} self.add_tags(self.tag_to_root_member, root_members) if additions is None: additions = [] self.has_extension_marker = False else: self.has_extension_marker = True self.additions = additions self.name_to_addition = { member.name: member for member in additions } self.tag_to_addition = {} self.add_tags(self.tag_to_addition, additions) @property def members(self): return self.root_members + self.additions def add_tags(self, tag_to_member, members): for member in members: tag_to_member[member.tag] = member def format_tags(self): return format_or( sorted([format_bytes(member.tag) for member in self.members])) def format_names(self): return format_or(sorted([member.name for member in self.members])) def encode(self, data, encoder): name = data[0] if name in self.name_to_root_member: member = self.name_to_root_member[name] encoder.append_bytes(member.tag) try: member.encode(data[1], encoder) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e elif name in self.name_to_addition: member = self.name_to_addition[name] encoder.append_bytes(member.tag) addition_encoder = Encoder() try: member.encode(data[1], addition_encoder) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e encoder.append_length_determinant(addition_encoder.number_of_bytes()) encoder += addition_encoder else: raise EncodeError( "Expected choice {}, but got '{}'.".format( self.format_names(), data[0])) # def encode_member(self, member, data, encoder): # try: # member.encode(data, encoder) # except EncodeError as e: # e.location.append(member.name) # raise def decode(self, decoder): tag = decoder.read_tag() if tag in self.tag_to_root_member: member = self.tag_to_root_member[tag] try: decoded = member.decode(decoder) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e elif tag in self.tag_to_addition: member = self.tag_to_addition[tag] decoder.read_length_determinant() try: decoded = member.decode(decoder) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e elif self.has_extension_marker: length = decoder.read_length_determinant() decoder.skip_bits(8 * length) return (None, None) else: raise DecodeError( "Expected choice member tag {}, but got '{}'.".format( self.format_tags(), format_bytes(tag))) return (member.name, decoded) def __repr__(self): return 'Choice({}, [{}])'.format( self.name, ', '.join([repr(member) for member in self.members])) class UTF8String(KnownMultiplierStringType): TAG = Tag.UTF8_STRING ENCODING = 'utf-8' class NumericString(KnownMultiplierStringType): TAG = Tag.NUMERIC_STRING ENCODING = 'ascii' class PrintableString(KnownMultiplierStringType): TAG = Tag.PRINTABLE_STRING ENCODING = 'ascii' class IA5String(KnownMultiplierStringType): TAG = Tag.IA5_STRING ENCODING = 'ascii' class VisibleString(KnownMultiplierStringType): TAG = Tag.VISIBLE_STRING ENCODING = 'ascii' class GeneralString(KnownMultiplierStringType): TAG = Tag.GENERAL_STRING ENCODING = 'latin-1' class BMPString(KnownMultiplierStringType): TAG = Tag.BMP_STRING ENCODING = 'utf-16-be' class GraphicString(KnownMultiplierStringType): TAG = Tag.GENERAL_STRING ENCODING = 'latin-1' class UniversalString(KnownMultiplierStringType): TAG = Tag.UNIVERSAL_STRING ENCODING = 'utf-32-be' class TeletexString(KnownMultiplierStringType): TAG = Tag.T61_STRING ENCODING = 'iso-8859-1' class ObjectDescriptor(GraphicString): TAG = Tag.OBJECT_DESCRIPTOR class UTCTime(VisibleString): TAG = Tag.UTC_TIME def encode(self, data, encoder): encoded = utc_time_from_datetime(data) return super(UTCTime, self).encode(encoded, encoder) def decode(self, decoder): decoded = super(UTCTime, self).decode(decoder) return utc_time_to_datetime(decoded) class GeneralizedTime(VisibleString): TAG = Tag.GENERALIZED_TIME def encode(self, data, encoder): encoded = generalized_time_from_datetime(data) return super(GeneralizedTime, self).encode(encoded, encoder) def decode(self, decoder): decoded = super(GeneralizedTime, self).decode(decoder) return generalized_time_to_datetime(decoded) class Date(Type): def __init__(self, name): super(Date, self).__init__(name, 'DATE', None) year = Integer('year') month = Integer('month') day = Integer('day') month.set_restricted_to_range(1, 12, False) day.set_restricted_to_range(1, 31, False) self._inner = Sequence('DATE-ENCODING', [year, month, day], None) def encode(self, data, encoder): data = { 'year': data.year, 'month': data.month, 'day': data.day } self._inner.encode(data, encoder) def decode(self, decoder): decoded = self._inner.decode(decoder) return datetime.date(decoded['year'], decoded['month'], decoded['day']) class TimeOfDay(Type): def __init__(self, name): super(TimeOfDay, self).__init__(name, 'TIME-OF-DAY', None) hours = Integer('hours') minutes = Integer('minutes') seconds = Integer('seconds') hours.set_restricted_to_range(0, 24, False) minutes.set_restricted_to_range(0, 59, False) seconds.set_restricted_to_range(0, 60, False) self._inner = Sequence('TIME-OF-DAY-ENCODING', [hours, minutes, seconds], None) def encode(self, data, encoder): data = { 'hours': data.hour, 'minutes': data.minute, 'seconds': data.second } self._inner.encode(data, encoder) def decode(self, decoder): decoded = self._inner.decode(decoder) return datetime.time(decoded['hours'], decoded['minutes'], decoded['seconds']) class DateTime(Type): def __init__(self, name): super(DateTime, self).__init__(name, 'DATE-TIME', None) self._date = Date('date') self._time = TimeOfDay('time') def encode(self, data, encoder): self._date.encode(data, encoder) self._time.encode(data, encoder) def decode(self, decoder): decoded_date = self._date.decode(decoder) decoded_time = self._time.decode(decoder) return datetime.datetime(decoded_date.year, decoded_date.month, decoded_date.day, decoded_time.hour, decoded_time.minute, decoded_time.second) class Any(Type): def __init__(self, name): super(Any, self).__init__(name, 'ANY', None) def encode(self, data, encoder): raise NotImplementedError('ANY is not yet implemented.') def decode(self, decoder): raise NotImplementedError('ANY is not yet implemented.') class AnyDefinedBy(Type): def __init__(self, name, type_member, choices): super(AnyDefinedBy, self).__init__(name, 'ANY DEFINED BY', None, None) self.type_member = type_member self.choices = choices def encode(self, data, encoder): raise NotImplementedError('ANY DEFINED BY is not yet implemented.') def decode(self, decoder): raise NotImplementedError('ANY DEFINED BY is not yet implemented.') class Recursive(compiler.Recursive, Type): def __init__(self, name, type_name, module_name): super(Recursive, self).__init__(name, 'RECURSIVE', None) self.type_name = type_name self.module_name = module_name self.tag_number = None self.tag_flags = None self.inner = None def set_inner_type(self, inner): self.inner = copy(inner) if self.tag_number is not None: self.inner.set_tag(self.tag_number, self.tag_flags) def encode(self, data, encoder): self.inner.encode(data, encoder) def decode(self, decoder): return self.inner.decode(decoder) class CompiledType(compiler.CompiledType): def encode(self, data): encoder = Encoder() try: self._type.encode(data, encoder) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e return encoder.as_bytearray() def decode(self, data): decoder = Decoder(bytearray(data)) try: return self._type.decode(decoder) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e class Compiler(compiler.Compiler): def process_type(self, type_name, type_descriptor, module_name): compiled_type = self.compile_type(type_name, type_descriptor, module_name) return CompiledType(compiled_type) def compile_type(self, name, type_descriptor, module_name): module_name = self.get_module_name(type_descriptor, module_name) type_name = type_descriptor['type'] if type_name == 'SEQUENCE': compiled = Sequence(name, *self.compile_members(type_descriptor['members'], module_name)) elif type_name == 'SEQUENCE OF': compiled = SequenceOf(name, self.compile_type('', type_descriptor['element'], module_name)) elif type_name == 'SET': compiled = Set(name, *self.compile_members(type_descriptor['members'], module_name, sort_by_tag=True)) elif type_name == 'SET OF': compiled = SetOf(name, self.compile_type('', type_descriptor['element'], module_name)) elif type_name == 'CHOICE': compiled = Choice( name, *self.compile_members(type_descriptor['members'], module_name)) elif type_name == 'INTEGER': compiled = Integer(name) elif type_name == 'REAL': compiled = Real(name, self.get_with_components(type_descriptor)) elif type_name == 'ENUMERATED': compiled = Enumerated(name, self.get_enum_values(type_descriptor, module_name), self._numeric_enums) elif type_name == 'BOOLEAN': compiled = Boolean(name) elif type_name == 'OBJECT IDENTIFIER': compiled = ObjectIdentifier(name) elif type_name == 'OCTET STRING': compiled = OctetString(name, *self.get_size_range(type_descriptor, module_name)) elif type_name == 'TeletexString': compiled = TeletexString(name) elif type_name == 'NumericString': compiled = NumericString(name, *self.get_size_range(type_descriptor, module_name)) elif type_name == 'PrintableString': compiled = PrintableString(name, *self.get_size_range(type_descriptor, module_name)) elif type_name == 'IA5String': compiled = IA5String(name, *self.get_size_range(type_descriptor, module_name)) elif type_name == 'VisibleString': compiled = VisibleString(name, *self.get_size_range(type_descriptor, module_name)) elif type_name == 'GeneralString': compiled = GeneralString(name) elif type_name == 'UTF8String': compiled = UTF8String(name, *self.get_size_range(type_descriptor, module_name)) elif type_name == 'BMPString': compiled = BMPString(name) elif type_name == 'GraphicString': compiled = GraphicString(name) elif type_name == 'UTCTime': compiled = UTCTime(name) elif type_name == 'UniversalString': compiled = UniversalString(name) elif type_name == 'GeneralizedTime': compiled = GeneralizedTime(name) elif type_name == 'DATE': compiled = Date(name) elif type_name == 'TIME-OF-DAY': compiled = TimeOfDay(name) elif type_name == 'DATE-TIME': compiled = DateTime(name) elif type_name == 'BIT STRING': compiled = BitString(name, self.get_named_bits(type_descriptor, module_name), *self.get_size_range(type_descriptor, module_name)) elif type_name == 'ANY': compiled = Any(name) elif type_name == 'ANY DEFINED BY': choices = {} for key, value in type_descriptor['choices'].items(): choices[key] = self.compile_type(key, value, module_name) compiled = AnyDefinedBy(name, type_descriptor['value'], choices) elif type_name == 'NULL': compiled = Null(name) elif type_name == 'EXTERNAL': compiled = Sequence( name, *self.compile_members(self.external_type_descriptor()['members'], module_name)) compiled.set_tag(Tag.EXTERNAL, 0) elif type_name == 'ObjectDescriptor': compiled = ObjectDescriptor(name) else: if type_name in self.types_backtrace: compiled = Recursive(name, type_name, module_name) self.recursive_types.append(compiled) else: compiled = self.compile_user_type(name, type_name, module_name) if 'tag' in type_descriptor: compiled = self.copy(compiled) tag = type_descriptor['tag'] class_ = tag.get('class', None) if class_ == 'APPLICATION': flags = Class.APPLICATION elif class_ == 'PRIVATE': flags = Class.PRIVATE else: flags = 0 compiled.set_tag(tag['number'], flags) if 'restricted-to' in type_descriptor: compiled = self.set_compiled_restricted_to(compiled, type_descriptor, module_name) return compiled def compile_members(self, members, module_name, sort_by_tag=False): compiled_members = [] in_extension = False additions = None for member in members: if member == EXTENSION_MARKER: in_extension = not in_extension if in_extension: additions = [] elif in_extension: self.compile_extension_member(member, module_name, additions) else: self.compile_root_member(member, module_name, compiled_members) if sort_by_tag: compiled_members = sorted(compiled_members, key=attrgetter('tag')) return compiled_members, additions def compile_extension_member(self, member, module_name, additions): if isinstance(member, list): for memb in member: compiled_member = self.compile_member(memb, module_name) additions.append(compiled_member) else: compiled_member = self.compile_member(member, module_name) additions.append(compiled_member) def compile_dict(specification, numeric_enums=False): return Compiler(specification, numeric_enums).process() def decode_full_length(_data): raise DecodeError('Decode length is not supported for this codec.') asn1tools-0.169.0/asn1tools/codecs/per.py000066400000000000000000002206751524544274600201660ustar00rootroot00000000000000"""Aligned Packed Encoding Rules (PER) codec. """ from operator import attrgetter from operator import itemgetter import binascii import string import datetime from ..parser import EXTENSION_MARKER from . import BaseType, format_bytes, ErrorWithLocation from . import EncodeError from . import DecodeError from . import OutOfDataError from . import compiler from . import format_or from . import restricted_utc_time_to_datetime from . import restricted_utc_time_from_datetime from . import restricted_generalized_time_to_datetime from . import restricted_generalized_time_from_datetime from .compiler import enum_values_split from .compiler import enum_values_as_dict from .compiler import clean_bit_string_value from .compiler import rstrip_bit_string_zeros from .ber import encode_real from .ber import decode_real from .ber import encode_object_identifier from .ber import decode_object_identifier from .permitted_alphabet import NUMERIC_STRING from .permitted_alphabet import PRINTABLE_STRING from .permitted_alphabet import IA5_STRING from .permitted_alphabet import BMP_STRING from .permitted_alphabet import VISIBLE_STRING def is_unbound(minimum, maximum): return ((minimum in [None, 'MIN']) or (maximum in [None, 'MAX']) or (maximum > 65535)) def to_int(chars): if isinstance(chars, int): return chars num = 0 byte_array = bytearray(chars) while len(byte_array) > 0: num <<= 8 byte = byte_array.pop(0) num += byte return num def to_byte_array(num, number_of_bits): byte_array = bytearray() while number_of_bits > 0: byte_array.insert(0, (num & 0xff)) num >>= 8 number_of_bits -= 8 return byte_array def integer_as_number_of_bits(size): """Returns the minimum number of bits needed to fit given positive integer. """ if size == 0: return 0 else: return size.bit_length() def integer_as_number_of_bits_power_of_two(size): """Returns the minimum power of two number of bits needed to fit given positive integer. """ if size == 0: return 0 else: bit_length = integer_as_number_of_bits(size) bit_length_pow_2 = 1 while bit_length > bit_length_pow_2: bit_length_pow_2 <<= 1 return bit_length_pow_2 def size_as_number_of_bytes(size): """Returns the minimum number of bytes needed to fit given positive integer. """ if size == 0: return 1 else: number_of_bits = size.bit_length() rest = (number_of_bits % 8) if rest != 0: number_of_bits += (8 - rest) return number_of_bits // 8 CLASS_PRIO = { 'UNIVERSAL': 0, 'APPLICATION': 1, 'CONTEXT_SPECIFIC': 2, 'PRIVATE': 3 } class PermittedAlphabet(object): def __init__(self, encode_map, decode_map): self.encode_map = encode_map self.decode_map = decode_map def __len__(self): return len(self.encode_map) def encode(self, value): try: return self.encode_map[value] except KeyError: raise EncodeError( "Expected a character in '{}', but got '{}' (0x{:02x})'.".format( ''.join(sorted([chr(v) for v in self.encode_map])), chr(value) if chr(value) in string.printable else '.', value)) def decode(self, value): try: return self.decode_map[value] except KeyError: raise DecodeError( "Expected a value in {}, but got {:d}.".format( list(self.decode_map), value)) class Encoder(object): def __init__(self): self.number_of_bits = 0 self.value = 0 self.chunks_number_of_bits = 0 self.chunks = [] def __iadd__(self, other): for value, number_of_bits in other.chunks: self.append_non_negative_binary_integer(value, number_of_bits) self.append_non_negative_binary_integer(other.value, other.number_of_bits) return self def reset(self): self.number_of_bits = 0 self.value = 0 self.chunks_number_of_bits = 0 self.chunks = [] def are_all_bits_zero(self): return not (any([value for value, _ in self.chunks]) or self.value) def number_of_bytes(self): return (self.chunks_number_of_bits + self.number_of_bits + 7) // 8 def offset(self): return (len(self.chunks), self.number_of_bits) def set_bit(self, offset): chunk_offset, bit_offset = offset if len(self.chunks) == chunk_offset: self.value |= (1 << (self.number_of_bits - bit_offset - 1)) else: chunk = self.chunks[chunk_offset] chunk[0] |= (1 << (chunk[1] - bit_offset - 1)) def align(self): self.align_always() def align_always(self): width = 8 * self.number_of_bytes() width -= self.chunks_number_of_bits width -= self.number_of_bits self.number_of_bits += width self.value <<= width def append_bit(self, bit): """Append given bit. """ self.number_of_bits += 1 self.value <<= 1 self.value |= bit def append_bits(self, data, number_of_bits): """Append given bits. """ if number_of_bits == 0: return value = int(binascii.hexlify(data), 16) value >>= (8 * len(data) - number_of_bits) self.append_non_negative_binary_integer(value, number_of_bits) def append_non_negative_binary_integer(self, value, number_of_bits): """Append given integer value. """ if self.number_of_bits > 4096: self.chunks.append([self.value, self.number_of_bits]) self.chunks_number_of_bits += self.number_of_bits self.number_of_bits = 0 self.value = 0 self.number_of_bits += number_of_bits self.value <<= number_of_bits self.value |= value def append_bytes(self, data): """Append given data. """ self.append_bits(data, 8 * len(data)) def as_bytearray(self): """Return the bits as a bytearray. """ value = 0 number_of_bits = 0 for chunk_value, chunk_number_of_bits in self.chunks: value <<= chunk_number_of_bits value |= chunk_value number_of_bits += chunk_number_of_bits value <<= self.number_of_bits value |= self.value number_of_bits += self.number_of_bits if number_of_bits == 0: return bytearray() number_of_alignment_bits = (8 - (number_of_bits % 8)) if number_of_alignment_bits != 8: value <<= number_of_alignment_bits number_of_bits += number_of_alignment_bits value |= (0x80 << number_of_bits) value = hex(value)[4:].rstrip('L') return bytearray(binascii.unhexlify(value)) def append_length_determinant(self, length): if length < 128: encoded = bytearray([length]) elif length < 16384: encoded = bytearray([(0x80 | (length >> 8)), (length & 0xff)]) elif length < 32768: encoded = b'\xc1' length = 16384 elif length < 49152: encoded = b'\xc2' length = 32768 elif length < 65536: encoded = b'\xc3' length = 49152 else: encoded = b'\xc4' length = 65536 self.append_bytes(encoded) return length def append_length_determinant_chunks(self, length): offset = 0 chunk_length = length while True: chunk_length = self.append_length_determinant(chunk_length) yield offset, chunk_length if chunk_length < 16384: break offset += chunk_length chunk_length = length - offset def append_normally_small_non_negative_whole_number(self, value): if value < 64: self.append_non_negative_binary_integer(value, 7) else: self.append_bit(1) length = (value.bit_length() + 7) // 8 self.append_length_determinant(length) self.append_non_negative_binary_integer(value, 8 * length) def append_normally_small_length(self, value): if value <= 64: self.append_non_negative_binary_integer(value - 1, 7) elif value <= 127: self.append_non_negative_binary_integer(0x100 | value, 9) else: raise NotImplementedError( 'Normally small length number >127 is not yet supported.') def append_constrained_whole_number(self, value, minimum, maximum, number_of_bits): _range = (maximum - minimum + 1) value -= minimum if _range <= 255: self.append_non_negative_binary_integer(value, number_of_bits) elif _range == 256: self.align_always() self.append_non_negative_binary_integer(value, 8) elif _range <= 65536: self.align_always() self.append_non_negative_binary_integer(value, 16) else: self.align_always() self.append_non_negative_binary_integer(value, number_of_bits) def append_unconstrained_whole_number(self, value): number_of_bits = value.bit_length() if value < 0: number_of_bytes = ((number_of_bits + 7) // 8) value = ((1 << (8 * number_of_bytes)) + value) if (value & (1 << (8 * number_of_bytes - 1))) == 0: value |= (0xff << (8 * number_of_bytes)) number_of_bytes += 1 elif value > 0: number_of_bytes = ((number_of_bits + 7) // 8) if number_of_bits == (8 * number_of_bytes): number_of_bytes += 1 else: number_of_bytes = 1 self.append_length_determinant(number_of_bytes) self.append_non_negative_binary_integer(value, 8 * number_of_bytes) def __repr__(self): return format_bytes(self.as_bytearray()) class Decoder(object): def __init__(self, encoded): self.number_of_bits = (8 * len(encoded)) self.total_number_of_bits = self.number_of_bits if len(encoded) > 0: value = int(binascii.hexlify(encoded), 16) value |= (0x80 << self.number_of_bits) self.value = bin(value)[10:] else: self.value = '' def align(self): self.align_always() def align_always(self): width = (self.number_of_bits & 0x7) self.number_of_bits -= width def number_of_read_bits(self): return self.total_number_of_bits - self.number_of_bits def skip_bits(self, number_of_bits): if number_of_bits > self.number_of_bits: raise OutOfDataError(self.number_of_read_bits()) self.number_of_bits -= number_of_bits def read_bit(self): """Read a bit. """ if self.number_of_bits == 0: raise OutOfDataError(self.number_of_read_bits()) bit = int(self.value[self.number_of_read_bits()]) self.number_of_bits -= 1 return bit def read_bits(self, number_of_bits): """Read given number of bits. """ if number_of_bits > self.number_of_bits: raise OutOfDataError(self.number_of_read_bits()) offset = self.number_of_read_bits() value = self.value[offset:offset + number_of_bits] self.number_of_bits -= number_of_bits value = '10000000' + value number_of_alignment_bits = (8 - (number_of_bits % 8)) if number_of_alignment_bits != 8: value += '0' * number_of_alignment_bits return binascii.unhexlify(hex(int(value, 2))[4:].rstrip('L')) def read_bytes(self, number_of_bytes): return self.read_bits(8 * number_of_bytes) def read_non_negative_binary_integer(self, number_of_bits): """Read an integer value of given number of bits. """ if number_of_bits > self.number_of_bits: raise OutOfDataError(self.number_of_read_bits()) if number_of_bits == 0: return 0 offset = self.number_of_read_bits() value = self.value[offset:offset + number_of_bits] self.number_of_bits -= number_of_bits return int(value, 2) def read_length_determinant(self): value = self.read_non_negative_binary_integer(8) if (value & 0x80) == 0x00: return value elif (value & 0xc0) == 0x80: return (((value & 0x7f) << 8) | (self.read_non_negative_binary_integer(8))) else: try: return { 0xc1: 16384, 0xc2: 32768, 0xc3: 49152, 0xc4: 65536 }[value] except KeyError: raise DecodeError( 'Bad length determinant fragmentation value 0x{:02x}.'.format( value)) def read_length_determinant_chunks(self): while True: length = self.read_length_determinant() yield length if length < 16384: break def read_normally_small_non_negative_whole_number(self): if not self.read_bit(): decoded = self.read_non_negative_binary_integer(6) else: length = self.read_length_determinant() decoded = self.read_non_negative_binary_integer(8 * length) return decoded def read_normally_small_length(self): if not self.read_bit(): return self.read_non_negative_binary_integer(6) + 1 elif not self.read_bit(): return self.read_non_negative_binary_integer(7) else: raise NotImplementedError( 'Normally small length number >64 is not yet supported.') def read_constrained_whole_number(self, minimum, maximum, number_of_bits): _range = (maximum - minimum + 1) if _range <= 255: value = self.read_non_negative_binary_integer(number_of_bits) elif _range == 256: self.align_always() value = self.read_non_negative_binary_integer(8) elif _range <= 65536: self.align_always() value = self.read_non_negative_binary_integer(16) else: self.align_always() value = self.read_non_negative_binary_integer(number_of_bits) return value + minimum def read_unconstrained_whole_number(self): length = self.read_length_determinant() decoded = self.read_non_negative_binary_integer(8 * length) number_of_bits = (8 * length) if decoded & (1 << (number_of_bits - 1)): mask = ((1 << number_of_bits) - 1) decoded = (decoded - mask) decoded -= 1 return decoded class Type(BaseType): def __init__(self, name, type_name): super().__init__(name, type_name) self.module_name = None self.tag = None def set_size_range(self, minimum, maximum, has_extension_marker): pass def set_restricted_to_range(self, minimum, maximum, has_extension_marker): pass class KnownMultiplierStringType(Type): ENCODING = 'ascii' PERMITTED_ALPHABET = PermittedAlphabet({}, {}) def __init__(self, name, minimum=None, maximum=None, has_extension_marker=False, permitted_alphabet=None): super(KnownMultiplierStringType, self).__init__(name, self.__class__.__name__) self.set_size_range(minimum, maximum, has_extension_marker) if permitted_alphabet is None: permitted_alphabet = self.PERMITTED_ALPHABET self.permitted_alphabet = permitted_alphabet self.bits_per_character = integer_as_number_of_bits_power_of_two( len(permitted_alphabet) - 1) if len(self.PERMITTED_ALPHABET) < 2 ** self.bits_per_character: self.permitted_alphabet = self.PERMITTED_ALPHABET def set_size_range(self, minimum, maximum, has_extension_marker): self.minimum = minimum self.maximum = maximum self.has_extension_marker = has_extension_marker if is_unbound(minimum, maximum): self.number_of_bits = None else: size = maximum - minimum self.number_of_bits = integer_as_number_of_bits(size) def encode(self, data, encoder): if self.has_extension_marker: if self.minimum <= len(data) <= self.maximum: encoder.append_bit(0) else: raise NotImplementedError( 'String size extension is not yet implemented.') if self.number_of_bits is None: return self.encode_unbound(data, encoder) elif self.minimum != self.maximum: encoder.append_constrained_whole_number(len(data), self.minimum, self.maximum, self.number_of_bits) if self.maximum > 1 and len(data) > 0: encoder.align() elif self.maximum * self.bits_per_character > 16: encoder.align() for value in data: encoder.append_non_negative_binary_integer( self.permitted_alphabet.encode( to_int(value.encode(self.ENCODING))), self.bits_per_character) def encode_unbound(self, data, encoder): encoder.align() for offset, length in encoder.append_length_determinant_chunks(len(data)): for entry in data[offset:offset + length]: encoder.append_non_negative_binary_integer( self.permitted_alphabet.encode( to_int(entry.encode(self.ENCODING))), self.bits_per_character) def decode(self, decoder): if self.has_extension_marker: bit = decoder.read_bit() if bit: raise NotImplementedError( 'String size extension is not yet implemented.') if self.number_of_bits is None: return self.decode_unbound(decoder) else: if self.minimum != self.maximum: length = decoder.read_constrained_whole_number(self.minimum, self.maximum, self.number_of_bits) if self.maximum > 1 and length > 0: decoder.align() elif self.maximum * self.bits_per_character > 16: decoder.align() length = self.minimum else: length = self.minimum data = bytearray() for _ in range(length): value = decoder.read_non_negative_binary_integer(self.bits_per_character) value = self.permitted_alphabet.decode(value) data += to_byte_array(value, self.bits_per_character) return data.decode(self.ENCODING) def decode_unbound(self, decoder): decoder.align() decoded = bytearray() orig_bits_per_character = integer_as_number_of_bits_power_of_two( len(self.ALPHABET) - 1) for length in decoder.read_length_determinant_chunks(): for _ in range(length): value = decoder.read_non_negative_binary_integer( self.bits_per_character) value = self.permitted_alphabet.decode(value) decoded += to_byte_array(value, orig_bits_per_character) return decoded.decode(self.ENCODING) class StringType(Type): ENCODING = None LENGTH_MULTIPLIER = 1 def __init__(self, name): super(StringType, self).__init__(name, self.__class__.__name__) def encode(self, data, encoder): encoded = data.encode(self.ENCODING) encoder.align() for offset, length in encoder.append_length_determinant_chunks(len(data)): offset *= self.LENGTH_MULTIPLIER data = encoded[offset:offset + self.LENGTH_MULTIPLIER * length] encoder.append_bytes(data) def decode(self, decoder): decoder.align() encoded = [] for length in decoder.read_length_determinant_chunks(): encoded.append(decoder.read_bytes(self.LENGTH_MULTIPLIER * length)) return b''.join(encoded).decode(self.ENCODING) class MembersType(Type): def __init__(self, name, root_members, additions, type_name): super(MembersType, self).__init__(name, type_name) self.root_members = root_members self.additions = additions self.optionals = [ member for member in root_members if member.optional or member.default is not None ] def encode(self, data, encoder): if self.additions is not None: offset = encoder.offset() encoder.append_bit(0) self.encode_root(data, encoder) if len(self.additions) > 0: if self.encode_additions(data, encoder): encoder.set_bit(offset) else: self.encode_root(data, encoder) def encode_root(self, data, encoder): for optional in self.optionals: if optional.optional: encoder.append_bit(optional.name in data) elif optional.name in data: encoder.append_bit(not optional.is_default(data[optional.name])) else: encoder.append_bit(0) for member in self.root_members: self.encode_member(member, data, encoder) def encode_additions(self, data, encoder): # Encode extension additions. presence_bits = 0 addition_encoders = [] number_of_precence_bits = 0 try: for addition in self.additions: presence_bits <<= 1 addition_encoder = encoder.__class__() number_of_precence_bits += 1 if isinstance(addition, AdditionGroup): addition.encode_addition_group(data, addition_encoder) else: self.encode_member(addition, data, addition_encoder, encode_default=True) if addition_encoder.number_of_bits > 0 or addition.name in data: addition_encoders.append(addition_encoder) presence_bits |= 1 except EncodeError: pass # Return false if no extension additions are present. if not addition_encoders: return False # Presence bit field. number_of_additions = len(self.additions) presence_bits <<= (number_of_additions - number_of_precence_bits) encoder.append_normally_small_length(number_of_additions) encoder.append_non_negative_binary_integer(presence_bits, number_of_additions) # Embed each encoded extension addition in an open type (add a # length field and multiple of 8 bits). encoder.align() for addition_encoder in addition_encoders: addition_encoder.align_always() encoder.append_length_determinant(addition_encoder.number_of_bytes()) encoder += addition_encoder return True def encode_addition_group(self, data, encoder): self.encode_root(data, encoder) if (encoder.are_all_bits_zero() and (encoder.number_of_bits == len(self.optionals))): encoder.reset() def encode_member(self, member, data, encoder, encode_default=False): name = member.name if name in data: try: if member.default is None: member.encode(data[name], encoder) elif not member.is_default(data[name]) or encode_default: member.encode(data[name], encoder) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e elif member.optional or member.default is not None: pass else: raise EncodeError( "{} member '{}' not found in {}.".format( self.__class__.__name__, name, data)) def decode(self, decoder): if self.additions is not None: if decoder.read_bit(): decoded = self.decode_root(decoder) decoded.update(self.decode_additions(decoder)) else: decoded = self.decode_root(decoder) else: decoded = self.decode_root(decoder) return decoded def decode_root(self, decoder): values = {} optionals = { optional: decoder.read_bit() for optional in self.optionals } for member in self.root_members: if optionals.get(member, True): try: value = member.decode(decoder) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e values[member.name] = value elif member.has_default(): values[member.name] = member.default return values def decode_additions(self, decoder): # Presence bit field. length = decoder.read_normally_small_length() presence_bits = decoder.read_non_negative_binary_integer(length) decoder.align() decoded = {} for i in range(length): if presence_bits & (1 << (length - i - 1)): # Open type decoding. open_type_length = decoder.read_length_determinant() offset = decoder.number_of_bits if i < len(self.additions): addition = self.additions[i] try: if isinstance(addition, AdditionGroup): decoded.update(addition.decode(decoder)) else: decoded[addition.name] = addition.decode(decoder) except ErrorWithLocation as e: # Add member location e.add_location(addition) raise e else: decoder.skip_bits(8 * open_type_length) alignment_bits = (offset - decoder.number_of_bits) % 8 if alignment_bits != 0: decoder.skip_bits(8 - alignment_bits) return decoded def __repr__(self): return '{}({}, [{}])'.format( self.__class__.__name__, self.name, ', '.join([repr(member) for member in self.root_members])) class ArrayType(Type): def __init__(self, name, element_type, minimum, maximum, has_extension_marker, type_name): super(ArrayType, self).__init__(name, type_name) self.element_type = element_type self.minimum = minimum self.maximum = maximum self.has_extension_marker = has_extension_marker if is_unbound(minimum, maximum): self.number_of_bits = None else: size = maximum - minimum self.number_of_bits = integer_as_number_of_bits(size) def encode(self, data, encoder): if self.has_extension_marker: if self.minimum <= len(data) <= self.maximum: encoder.append_bit(0) else: encoder.append_bit(1) encoder.align() encoder.append_length_determinant(len(data)) for entry in data: self.element_type.encode(entry, encoder) return if self.number_of_bits is None: return self.encode_unbound(data, encoder) elif self.minimum != self.maximum: encoder.append_constrained_whole_number(len(data), self.minimum, self.maximum, self.number_of_bits) for entry in data: self.element_type.encode(entry, encoder) def encode_unbound(self, data, encoder): encoder.align() for offset, length in encoder.append_length_determinant_chunks(len(data)): for entry in data[offset:offset + length]: self.element_type.encode(entry, encoder) def decode(self, decoder): length = None if self.has_extension_marker: bit = decoder.read_bit() if bit: decoder.align() length = decoder.read_length_determinant() if length is not None: pass elif self.number_of_bits is None: return self.decode_unbound(decoder) elif self.minimum != self.maximum: length = decoder.read_constrained_whole_number(self.minimum, self.maximum, self.number_of_bits) else: length = self.minimum decoded = [] for _ in range(length): decoded_element = self.element_type.decode(decoder) decoded.append(decoded_element) return decoded def decode_unbound(self, decoder): decoder.align() decoded = [] for length in decoder.read_length_determinant_chunks(): for _ in range(length): decoded_element = self.element_type.decode(decoder) decoded.append(decoded_element) return decoded def __repr__(self): return '{}({}, {})'.format(self.__class__.__name__, self.name, self.element_type) class Boolean(Type): def __init__(self, name): super(Boolean, self).__init__(name, 'BOOLEAN') def encode(self, data, encoder): encoder.append_bit(bool(data)) def decode(self, decoder): return bool(decoder.read_bit()) class Integer(Type): def __init__(self, name): super(Integer, self).__init__(name, 'INTEGER') self.minimum = None self.maximum = None self.has_extension_marker = False self.number_of_bits = None self.number_of_indefinite_bits = None def set_restricted_to_range(self, minimum, maximum, has_extension_marker): self.has_extension_marker = has_extension_marker if minimum == 'MIN' or maximum == 'MAX': return self.minimum = minimum self.maximum = maximum size = self.maximum - self.minimum self.number_of_bits = integer_as_number_of_bits(size) if size <= 65535: self.number_of_indefinite_bits = None else: number_of_bits = ((self.number_of_bits + 7) // 8 - 1).bit_length() self.number_of_indefinite_bits = number_of_bits def encode(self, data, encoder): if self.has_extension_marker: if self.minimum <= data <= self.maximum: encoder.append_bit(0) else: encoder.append_bit(1) encoder.align() encoder.append_unconstrained_whole_number(data) return if self.number_of_bits is None: encoder.align() encoder.append_unconstrained_whole_number(data) else: if self.number_of_indefinite_bits is None: number_of_bits = self.number_of_bits else: number_of_bytes = size_as_number_of_bytes(data - self.minimum) number_of_bits = 8 * number_of_bytes encoder.append_constrained_whole_number( number_of_bytes - 1, 0, 2 ** self.number_of_indefinite_bits, self.number_of_indefinite_bits) encoder.align() encoder.append_constrained_whole_number(data, self.minimum, self.maximum, number_of_bits) def decode(self, decoder): if self.has_extension_marker: if decoder.read_bit(): decoder.align() return decoder.read_unconstrained_whole_number() if self.number_of_bits is None: decoder.align() return decoder.read_unconstrained_whole_number() else: if self.number_of_indefinite_bits is None: number_of_bits = self.number_of_bits else: number_of_bytes = decoder.read_constrained_whole_number( 0, 2 ** self.number_of_indefinite_bits, self.number_of_indefinite_bits) number_of_bytes += 1 number_of_bits = (8 * number_of_bytes) decoder.align() return decoder.read_constrained_whole_number(self.minimum, self.maximum, number_of_bits) class Real(Type): def __init__(self, name): super(Real, self).__init__(name, 'REAL') def encode(self, data, encoder): encoded = encode_real(data) encoder.align() encoder.append_length_determinant(len(encoded)) encoder.append_bytes(encoded) def decode(self, decoder): decoder.align() length = decoder.read_length_determinant() return decode_real(bytearray(decoder.read_bytes(length))) class Null(Type): def __init__(self, name): super(Null, self).__init__(name, 'NULL') def encode(self, _, _encoder): pass def decode(self, _): return None class BitString(Type): def __init__(self, name, named_bits, minimum, maximum, has_extension_marker): super(BitString, self).__init__(name, 'BIT STRING') self.minimum = minimum self.maximum = maximum self.has_extension_marker = has_extension_marker self.named_bits = named_bits self.has_named_bits = named_bits is not None if is_unbound(minimum, maximum): self.number_of_bits = None else: size = self.maximum - self.minimum self.number_of_bits = integer_as_number_of_bits(size) def is_default(self, value): clean_value = clean_bit_string_value(value, self.has_named_bits) clean_default = clean_bit_string_value(self.default, self.has_named_bits) return clean_value == clean_default def rstrip_zeros(self, data, number_of_bits): data, number_of_bits = rstrip_bit_string_zeros(bytearray(data)) if self.minimum is not None: if number_of_bits < self.minimum: number_of_bits = self.minimum number_of_bytes = ((number_of_bits + 7) // 8) data += (number_of_bytes - len(data)) * b'\x00' return (data, number_of_bits) def encode(self, data, encoder): data, number_of_bits = data if self.has_extension_marker: if self.minimum <= number_of_bits <= self.maximum: encoder.append_bit(0) else: raise NotImplementedError( 'BIT STRING extension is not yet implemented.') if self.has_named_bits: data, number_of_bits = self.rstrip_zeros(data, number_of_bits) if self.number_of_bits is None: return self.encode_unbound(data, number_of_bits, encoder) elif self.minimum != self.maximum: encoder.append_constrained_whole_number(number_of_bits, self.minimum, self.maximum, self.number_of_bits) encoder.align() elif self.minimum > 16: encoder.align() encoder.append_bits(data, number_of_bits) def encode_unbound(self, data, number_of_bits, encoder): encoder.align() for offset, length in encoder.append_length_determinant_chunks(number_of_bits): encoder.append_bits(data[offset // 8:(offset + length + 7) // 8], length) def decode(self, decoder): if self.has_extension_marker: if decoder.read_bit(): raise NotImplementedError( 'BIT STRING extension is not yet implemented.') if self.number_of_bits is None: return self.decode_unbound(decoder) else: number_of_bits = self.minimum if self.minimum != self.maximum: number_of_bits = decoder.read_constrained_whole_number( self.minimum, self.maximum, self.number_of_bits) decoder.align() elif self.minimum > 16: decoder.align() value = decoder.read_bits(number_of_bits) return (value, number_of_bits) def decode_unbound(self, decoder): decoder.align() decoded = [] number_of_bits = 0 for length in decoder.read_length_determinant_chunks(): decoded.append(decoder.read_bits(length)) number_of_bits += length return (b''.join(decoded), number_of_bits) class OctetString(Type): def __init__(self, name, minimum, maximum, has_extension_marker): super(OctetString, self).__init__(name, 'OCTET STRING') self.set_size_range(minimum, maximum, has_extension_marker) def set_size_range(self, minimum, maximum, has_extension_marker): self.minimum = minimum self.maximum = maximum self.has_extension_marker = has_extension_marker if is_unbound(minimum, maximum): self.number_of_bits = None else: size = self.maximum - self.minimum if size == 0 and self.maximum >= 65536: self.number_of_bits = None else: self.number_of_bits = integer_as_number_of_bits(size) def encode(self, data, encoder): align = True if self.has_extension_marker: if self.minimum <= len(data) <= self.maximum: encoder.append_bit(0) else: encoder.append_bit(1) encoder.align() encoder.append_length_determinant(len(data)) encoder.append_bytes(data) return if self.number_of_bits is None: return self.encode_unbound(data, encoder) elif self.minimum != self.maximum: encoder.append_constrained_whole_number(len(data), self.minimum, self.maximum, self.number_of_bits) elif self.maximum <= 2: align = False if align: encoder.align() encoder.append_bytes(data) def encode_unbound(self, data, encoder): encoder.align() for offset, length in encoder.append_length_determinant_chunks(len(data)): encoder.align() encoder.append_bytes(data[offset:offset + length]) def decode(self, decoder): align = True if self.has_extension_marker: bit = decoder.read_bit() if bit: decoder.align() length = decoder.read_length_determinant() return decoder.read_bytes(length) if self.number_of_bits is None: return self.decode_unbound(decoder) else: length = self.minimum if self.minimum != self.maximum: length = decoder.read_constrained_whole_number( self.minimum, self.maximum, self.number_of_bits) elif self.maximum <= 2: align = False if align: decoder.align() return decoder.read_bytes(length) def decode_unbound(self, decoder): decoder.align() decoded = [] for length in decoder.read_length_determinant_chunks(): decoder.align() decoded.append(decoder.read_bytes(length)) return b''.join(decoded) class ObjectIdentifier(Type): def __init__(self, name): super(ObjectIdentifier, self).__init__(name, 'OBJECT IDENTIFIER') def encode(self, data, encoder): encoded_subidentifiers = encode_object_identifier(data) encoder.align() encoder.append_length_determinant(len(encoded_subidentifiers)) encoder.append_bytes(bytearray(encoded_subidentifiers)) def decode(self, decoder): decoder.align() length = decoder.read_length_determinant() data = decoder.read_bytes(length) return decode_object_identifier(bytearray(data), 0, len(data)) class Enumerated(Type): def __init__(self, name, values, numeric): super(Enumerated, self).__init__(name, 'ENUMERATED') root, additions = enum_values_split(values) root = sorted(root, key=itemgetter(1)) # Root. index_to_data, data_to_index = self.create_maps(root, numeric) self.root_index_to_data = index_to_data self.root_data_to_index = data_to_index self.root_number_of_bits = integer_as_number_of_bits(len(index_to_data) - 1) if numeric: self.root_data_to_value = {k: k for k in enum_values_as_dict(root)} else: self.root_data_to_value = {v: k for k, v in enum_values_as_dict(root).items()} # Optional additions. if additions is None: index_to_data = None data_to_index = None else: index_to_data, data_to_index = self.create_maps(additions, numeric) self.additions_index_to_data = index_to_data self.additions_data_to_index = data_to_index def create_maps(self, items, numeric): if numeric: index_to_data = { index: value[1] for index, value in enumerate(items) } else: index_to_data = { index: value[0] for index, value in enumerate(items) } data_to_index = { data: index for index, data in index_to_data.items() } return index_to_data, data_to_index def format_root_indexes(self): return format_or(sorted(list(self.root_index_to_data))) def encode(self, data, encoder): if self.additions_index_to_data is None: index = self.root_data_to_index[data] encoder.append_non_negative_binary_integer(index, self.root_number_of_bits) else: if data in self.root_data_to_index: encoder.append_bit(0) index = self.root_data_to_index[data] encoder.append_non_negative_binary_integer(index, self.root_number_of_bits) else: encoder.append_bit(1) index = self.additions_data_to_index[data] encoder.append_normally_small_non_negative_whole_number(index) def decode(self, decoder): if self.additions_index_to_data is None: return self.decode_root(decoder) else: additions = decoder.read_bit() if additions == 0: return self.decode_root(decoder) else: index = decoder.read_normally_small_non_negative_whole_number() if index in self.additions_index_to_data: return self.additions_index_to_data[index] else: return None def decode_root(self, decoder): index = decoder.read_non_negative_binary_integer(self.root_number_of_bits) try: data = self.root_index_to_data[index] except KeyError: raise DecodeError( 'Expected enumeration index {}, but got {}.'.format( self.format_root_indexes(), index)) return data class Sequence(MembersType): def __init__(self, name, root_members, additions): super(Sequence, self).__init__(name, root_members, additions, 'SEQUENCE') class SequenceOf(ArrayType): def __init__(self, name, element_type, minimum, maximum, has_extension_marker): super(SequenceOf, self).__init__(name, element_type, minimum, maximum, has_extension_marker, 'SEQUENCE OF') class Set(MembersType): def __init__(self, name, root_members, additions): super(Set, self).__init__(name, root_members, additions, 'SET') class SetOf(ArrayType): def __init__(self, name, element_type, minimum, maximum, has_extension_marker): super(SetOf, self).__init__(name, element_type, minimum, maximum, has_extension_marker, 'SET OF') class Choice(Type): def __init__(self, name, root_members, additions): super(Choice, self).__init__(name, 'CHOICE') # Root. index_to_member, name_to_index = self.create_maps(root_members) self.root_index_to_member = index_to_member self.root_name_to_index = name_to_index self.maximum = (len(root_members) - 1) self.root_number_of_bits = integer_as_number_of_bits(self.maximum) if self.maximum <= 65535: self.number_of_indefinite_bits = None else: number_of_bits = ((self.root_number_of_bits + 7) // 8 - 1).bit_length() self.number_of_indefinite_bits = number_of_bits # Optional additions. if additions is None: index_to_member = None name_to_index = None else: index_to_member, name_to_index = self.create_maps(additions) self.additions_index_to_member = index_to_member self.additions_name_to_index = name_to_index def create_maps(self, members): index_to_member = { index: member for index, member in enumerate(members) } name_to_index = { member.name: index for index, member in enumerate(members) } return index_to_member, name_to_index def format_root_indexes(self): return format_or(sorted(list(self.root_index_to_member))) def format_names(self): members = list(self.root_index_to_member.values()) if self.additions_index_to_member is not None: members += list(self.additions_index_to_member.values()) return format_or(sorted([member.name for member in members])) def encode(self, data, encoder): if self.additions_index_to_member is not None: if data[0] in self.root_name_to_index: encoder.append_bit(0) self.encode_root(data, encoder) else: encoder.append_bit(1) self.encode_additions(data, encoder) else: self.encode_root(data, encoder) def encode_root(self, data, encoder): try: index = self.root_name_to_index[data[0]] except KeyError: raise EncodeError( "Expected choice {}, but got '{}'.".format( self.format_names(), data[0])) if len(self.root_index_to_member) > 1: self.encode_root_index(index, encoder) member = self.root_index_to_member[index] try: member.encode(data[1], encoder) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e def encode_root_index(self, index, encoder): if self.number_of_indefinite_bits is None: number_of_bits = self.root_number_of_bits else: number_of_bytes = size_as_number_of_bytes(index) number_of_bits = 8 * number_of_bytes encoder.append_constrained_whole_number( number_of_bytes - 1, 0, 2 ** self.number_of_indefinite_bits, self.number_of_indefinite_bits) encoder.align() encoder.append_constrained_whole_number(index, 0, self.maximum, number_of_bits) def encode_additions(self, data, encoder): try: index = self.additions_name_to_index[data[0]] except KeyError: raise EncodeError( "Expected choice {}, but got '{}'.".format( self.format_names(), data[0])) addition_encoder = encoder.__class__() addition = self.additions_index_to_member[index] try: addition.encode(data[1], addition_encoder) except ErrorWithLocation as e: # Add member location e.add_location(addition) raise e # Embed encoded extension addition in an open type (add a # length field and multiple of 8 bits). addition_encoder.align_always() encoder.append_normally_small_non_negative_whole_number(index) encoder.align() encoder.append_length_determinant(addition_encoder.number_of_bytes()) encoder += addition_encoder def decode(self, decoder): if self.additions_index_to_member is not None: if decoder.read_bit(): return self.decode_additions(decoder) else: return self.decode_root(decoder) else: return self.decode_root(decoder) def decode_root(self, decoder): if len(self.root_index_to_member) > 1: index = self.decode_root_index(decoder) else: index = 0 try: member = self.root_index_to_member[index] except KeyError: raise DecodeError( 'Expected choice index {}, but got {}.'.format( self.format_root_indexes(), index)) try: return (member.name, member.decode(decoder)) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e def decode_root_index(self, decoder): if self.number_of_indefinite_bits is None: number_of_bits = self.root_number_of_bits else: number_of_bytes = decoder.read_constrained_whole_number( 0, 2 ** self.number_of_indefinite_bits, self.number_of_indefinite_bits) number_of_bytes += 1 number_of_bits = (8 * number_of_bytes) decoder.align() return decoder.read_constrained_whole_number(0, self.maximum, number_of_bits) def decode_additions(self, decoder): index = decoder.read_normally_small_non_negative_whole_number() if index in self.additions_index_to_member: addition = self.additions_index_to_member[index] else: addition = None # Open type decoding. decoder.align() length = 8 * decoder.read_length_determinant() offset = decoder.number_of_bits if addition is None: name = None decoded = None else: name = addition.name try: decoded = addition.decode(decoder) except ErrorWithLocation as e: # Add member location e.add_location(addition) raise e length -= (offset - decoder.number_of_bits) decoder.skip_bits(length) return (name, decoded) def __repr__(self): return 'Choice({}, [{}])'.format( self.name, ', '.join([repr(member) for member in self.root_name_to_index])) class UTF8String(Type): def __init__(self, name): super(UTF8String, self).__init__(name, 'UTF8String') def encode(self, data, encoder): encoded = data.encode('utf-8') encoder.align() for offset, length in encoder.append_length_determinant_chunks(len(encoded)): encoder.append_bytes(encoded[offset:offset + length]) def decode(self, decoder): decoder.align() encoded = [] for length in decoder.read_length_determinant_chunks(): encoded.append(decoder.read_bytes(length)) return b''.join(encoded).decode('utf-8') class NumericString(KnownMultiplierStringType): ALPHABET = bytearray(NUMERIC_STRING.encode('ascii')) ENCODE_MAP = {v: i for i, v in enumerate(ALPHABET)} DECODE_MAP = {i: v for i, v in enumerate(ALPHABET)} PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_MAP, DECODE_MAP) class PrintableString(KnownMultiplierStringType): ALPHABET = bytearray(PRINTABLE_STRING.encode('ascii')) ENCODE_MAP = {v: v for v in ALPHABET} DECODE_MAP = {v: v for v in ALPHABET} PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_MAP, DECODE_MAP) class IA5String(KnownMultiplierStringType): ALPHABET = bytearray(IA5_STRING.encode('ascii')) ENCODE_DECODE_MAP = {v: v for v in ALPHABET} PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_DECODE_MAP, ENCODE_DECODE_MAP) class BMPString(KnownMultiplierStringType): ENCODING = 'utf-16-be' ALPHABET = BMP_STRING ENCODE_DECODE_MAP = {ord(v): ord(v) for v in ALPHABET} PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_DECODE_MAP, ENCODE_DECODE_MAP) class VisibleString(KnownMultiplierStringType): ALPHABET = bytearray(VISIBLE_STRING.encode('ascii')) ENCODE_DECODE_MAP = {v: v for v in ALPHABET} PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_DECODE_MAP, ENCODE_DECODE_MAP) class GeneralString(StringType): ENCODING = 'latin-1' class GraphicString(StringType): ENCODING = 'latin-1' class TeletexString(StringType): ENCODING = 'iso-8859-1' class UniversalString(StringType): ENCODING = 'utf-32-be' LENGTH_MULTIPLIER = 4 class ObjectDescriptor(GraphicString): pass class UTCTime(VisibleString): def encode(self, data, encoder): encoded = restricted_utc_time_from_datetime(data) return super(UTCTime, self).encode(encoded, encoder) def decode(self, decoder): decoded = super(UTCTime, self).decode(decoder) return restricted_utc_time_to_datetime(decoded) class GeneralizedTime(VisibleString): def encode(self, data, encoder): enceded = restricted_generalized_time_from_datetime(data) return super(GeneralizedTime, self).encode(enceded, encoder) def decode(self, decoder): decoded = super(GeneralizedTime, self).decode(decoder) return restricted_generalized_time_to_datetime(decoded) class Date(Type): def __init__(self, name): super(Date, self).__init__(name, 'DATE') immediate = Integer('immediate') near_future = Integer('near_future') near_past = Integer('near_past') reminder = Integer('reminder') immediate.set_restricted_to_range(2005, 2020, False) near_future.set_restricted_to_range(2021, 2276, False) near_past.set_restricted_to_range(1749, 2004, False) reminder.set_restricted_to_range('MIN', 1748, False) year = Choice('year', [immediate, near_future, near_past, reminder], None) month = Integer('month') day = Integer('day') month.set_restricted_to_range(1, 12, False) day.set_restricted_to_range(1, 31, False) self._inner = Sequence('DATE-ENCODING', [year, month, day], None) def encode(self, data, encoder): if 2005 <= data.year <= 2020: choice = 'immediate' elif 2021 <= data.year <= 2276: choice = 'near_future' elif 1749 <= data.year <= 2004: choice = 'near_past' else: choice = 'reminder' data = { 'year': (choice, data.year), 'month': data.month, 'day': data.day } return self._inner.encode(data, encoder) def decode(self, decoder): decoded = self._inner.decode(decoder) return datetime.date(decoded['year'][1], decoded['month'], decoded['day']) class TimeOfDay(Type): def __init__(self, name): super(TimeOfDay, self).__init__(name, 'TIME-OF-DAY') hours = Integer('hours') minutes = Integer('minutes') seconds = Integer('seconds') hours.set_restricted_to_range(0, 24, False) minutes.set_restricted_to_range(0, 59, False) seconds.set_restricted_to_range(0, 60, False) self._inner = Sequence('TIME-OF-DAY-ENCODING', [hours, minutes, seconds], None) def encode(self, data, encoder): data = { 'hours': data.hour, 'minutes': data.minute, 'seconds': data.second } return self._inner.encode(data, encoder) def decode(self, decoder): decoded = self._inner.decode(decoder) return datetime.time(decoded['hours'], decoded['minutes'], decoded['seconds']) class DateTime(Type): def __init__(self, name): super(DateTime, self).__init__(name, 'DATE-TIME') self._inner = Sequence('DATE-TIME-ENCODING', [Date('date'), TimeOfDay('time')], None) def encode(self, data, encoder): data = { 'date': data, 'time': data } return self._inner.encode(data, encoder) def decode(self, decoder): decoded = self._inner.decode(decoder) return datetime.datetime(decoded['date'].year, decoded['date'].month, decoded['date'].day, decoded['time'].hour, decoded['time'].minute, decoded['time'].second) class OpenType(Type): def __init__(self, name): super(OpenType, self).__init__(name, 'OpenType') def encode(self, data, encoder): encoder.align() encoder.append_length_determinant(len(data)) encoder.append_bytes(data) def decode(self, decoder): decoder.align() length = decoder.read_length_determinant() return decoder.read_bytes(length) class Any(Type): def __init__(self, name): super(Any, self).__init__(name, 'ANY') def encode(self, _, _encoder): raise NotImplementedError('ANY is not yet implemented.') def decode(self, _decoder): raise NotImplementedError('ANY is not yet implemented.') class Recursive(compiler.Recursive, Type): def __init__(self, name, type_name, module_name): super(Recursive, self).__init__(name, 'RECURSIVE') self.type_name = type_name self.module_name = module_name self._inner = None def set_inner_type(self, inner): self._inner = inner def encode(self, data, encoder): self._inner.encode(data, encoder) def decode(self, decoder): return self._inner.decode(decoder) class AdditionGroup(Sequence): pass class CompiledType(compiler.CompiledType): def encode(self, data): encoder = Encoder() try: self._type.encode(data, encoder) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e return encoder.as_bytearray() def decode(self, data): decoder = Decoder(bytearray(data)) try: return self._type.decode(decoder) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e class Compiler(compiler.Compiler): def process_type(self, type_name, type_descriptor, module_name): compiled_type = self.compile_type(type_name, type_descriptor, module_name) return CompiledType(compiled_type) def compile_type(self, name, type_descriptor, module_name): module_name = self.get_module_name(type_descriptor, module_name) type_name = type_descriptor['type'] if type_name == 'SEQUENCE': compiled = Sequence( name, *self.compile_members(type_descriptor['members'], module_name)) elif type_name == 'SEQUENCE OF': compiled = SequenceOf(name, self.compile_type('', type_descriptor['element'], module_name), *self.get_size_range(type_descriptor, module_name)) elif type_name == 'SET': compiled = Set( name, *self.compile_members(type_descriptor['members'], module_name, sort_by_tag=True)) elif type_name == 'SET OF': compiled = SetOf(name, self.compile_type('', type_descriptor['element'], module_name), *self.get_size_range(type_descriptor, module_name)) elif type_name == 'CHOICE': compiled = Choice(name, *self.compile_members( type_descriptor['members'], module_name, flat_additions=True)) elif type_name == 'INTEGER': compiled = Integer(name) elif type_name == 'REAL': compiled = Real(name) elif type_name == 'ENUMERATED': compiled = Enumerated(name, self.get_enum_values(type_descriptor, module_name), self._numeric_enums) elif type_name == 'BOOLEAN': compiled = Boolean(name) elif type_name == 'OBJECT IDENTIFIER': compiled = ObjectIdentifier(name) elif type_name == 'OCTET STRING': compiled = OctetString(name, *self.get_size_range(type_descriptor, module_name)) elif type_name == 'TeletexString': compiled = TeletexString(name) elif type_name == 'NumericString': permitted_alphabet = self.get_permitted_alphabet(type_descriptor) compiled = NumericString(name, *self.get_size_range(type_descriptor, module_name), permitted_alphabet=permitted_alphabet) elif type_name == 'PrintableString': permitted_alphabet = self.get_permitted_alphabet(type_descriptor) compiled = PrintableString(name, *self.get_size_range(type_descriptor, module_name), permitted_alphabet=permitted_alphabet) elif type_name == 'IA5String': permitted_alphabet = self.get_permitted_alphabet(type_descriptor) compiled = IA5String(name, *self.get_size_range(type_descriptor, module_name), permitted_alphabet=permitted_alphabet) elif type_name == 'BMPString': permitted_alphabet = self.get_permitted_alphabet(type_descriptor) compiled = BMPString(name, *self.get_size_range(type_descriptor, module_name), permitted_alphabet=permitted_alphabet) elif type_name == 'VisibleString': permitted_alphabet = self.get_permitted_alphabet(type_descriptor) compiled = VisibleString(name, *self.get_size_range(type_descriptor, module_name), permitted_alphabet=permitted_alphabet) elif type_name == 'GeneralString': compiled = GeneralString(name) elif type_name == 'UTF8String': compiled = UTF8String(name) elif type_name == 'GraphicString': compiled = GraphicString(name) elif type_name == 'UTCTime': compiled = UTCTime(name) elif type_name == 'UniversalString': compiled = UniversalString(name) elif type_name == 'GeneralizedTime': compiled = GeneralizedTime(name) elif type_name == 'DATE': compiled = Date(name) elif type_name == 'TIME-OF-DAY': compiled = TimeOfDay(name) elif type_name == 'DATE-TIME': compiled = DateTime(name) elif type_name == 'BIT STRING': compiled = BitString(name, self.get_named_bits(type_descriptor, module_name), *self.get_size_range(type_descriptor, module_name)) elif type_name == 'ANY': compiled = Any(name) elif type_name == 'ANY DEFINED BY': compiled = Any(name) elif type_name == 'NULL': compiled = Null(name) elif type_name == 'OpenType': compiled = OpenType(name) elif type_name == 'EXTERNAL': compiled = Sequence( name, *self.compile_members(self.external_type_descriptor()['members'], module_name)) elif type_name == 'ObjectDescriptor': compiled = ObjectDescriptor(name) else: if type_name in self.types_backtrace: compiled = Recursive(name, type_name, module_name) self.recursive_types.append(compiled) else: compiled = self.compile_user_type(name, type_name, module_name) if 'tag' in type_descriptor: compiled = self.set_compiled_tag(compiled, type_descriptor) if 'restricted-to' in type_descriptor: compiled = self.set_compiled_restricted_to(compiled, type_descriptor, module_name) return compiled def set_compiled_tag(self, compiled, type_descriptor): compiled = self.copy(compiled) tag = type_descriptor['tag'] class_prio = CLASS_PRIO[tag.get('class', 'CONTEXT_SPECIFIC')] class_number = tag['number'] compiled.tag = (class_prio, class_number) return compiled def compile_members(self, members, module_name, sort_by_tag=False, flat_additions=False): compiled_members = [] in_extension = False additions = None for member in members: if member == EXTENSION_MARKER: in_extension = not in_extension if in_extension: additions = [] elif in_extension: self.compile_extension_member(member, module_name, additions, flat_additions) else: self.compile_root_member(member, module_name, compiled_members) if sort_by_tag: compiled_members = sorted(compiled_members, key=attrgetter('tag')) return compiled_members, additions def compile_extension_member(self, member, module_name, additions, flat_additions): if isinstance(member, list): if flat_additions: for memb in member: compiled_member = self.compile_member(memb, module_name) additions.append(compiled_member) else: compiled_member, _ = self.compile_members(member, module_name) compiled_group = AdditionGroup('ExtensionAddition', compiled_member, None) additions.append(compiled_group) else: compiled_member = self.compile_member(member, module_name) additions.append(compiled_member) def get_permitted_alphabet(self, type_descriptor): def char_range(begin, end): return ''.join([chr(char) for char in range(ord(begin), ord(end) + 1)]) if 'from' not in type_descriptor: return permitted_alphabet = type_descriptor['from'] value = '' for item in permitted_alphabet: if isinstance(item, tuple): value += char_range(item[0], item[1]) else: value += item value = sorted(value) encode_map = {ord(v): i for i, v in enumerate(value)} decode_map = {i: ord(v) for i, v in enumerate(value)} return PermittedAlphabet(encode_map, decode_map) def compile_dict(specification, numeric_enums=False): return Compiler(specification, numeric_enums).process() def decode_full_length(_data): raise DecodeError('Decode length is not supported for this codec.') asn1tools-0.169.0/asn1tools/codecs/permitted_alphabet.py000066400000000000000000000011551524544274600232230ustar00rootroot00000000000000"""Permitted alphabet. """ import string try: unichr except NameError: unichr = chr NUMERIC_STRING = ' 0123456789' PRINTABLE_STRING = (string.ascii_uppercase + string.ascii_lowercase + string.digits + " '()+,-./:=?") IA5_STRING = ''.join([chr(v) for v in range(128)]) # ud800 - udfff are reserved code points for utf-16 surrogates. # at this point, do not support code points in supplementary planes. BMP_STRING = ''.join([unichr(v) for v in range(65536) if v < 0xd800 or v > 0xdfff]) VISIBLE_STRING = ''.join([chr(v) for v in range(32, 127)]) asn1tools-0.169.0/asn1tools/codecs/type_checker.py000066400000000000000000000262631524544274600220420ustar00rootroot00000000000000"""Python type checker. """ import sys import datetime from copy import copy from . import EncodeError, ErrorWithLocation from . import compiler from . import format_or STRING_TYPES = [ 'OBJECT IDENTIFIER', 'TeletexString', 'NumericString', 'PrintableString', 'IA5String', 'VisibleString', 'GeneralString', 'UTF8String', 'BMPString', 'GraphicString', 'UniversalString', 'ObjectDescriptor' ] class Type(object): TYPE = None def __init__(self, name): self.name = name def set_size_range(self, minimum, maximum, has_extension_marker): pass def set_default(self, value): pass def encode(self, data): if not isinstance(data, self.TYPE): raise EncodeError( 'Expected data of type {}, but got {}.'.format(self.TYPE.__name__, data)) class Boolean(Type): TYPE = bool class Integer(Type): def encode(self, data): if sys.version_info[0] > 2: if not isinstance(data, (int, str)): raise EncodeError( 'Expected data of type int or str, but got {}.'.format( data)) else: if not isinstance(data, (int, long, str, unicode)): raise EncodeError( 'Expected data of type int or str, but got {}.'.format( data)) class Float(Type): def encode(self, data): if sys.version_info[0] > 2: if not isinstance(data, (float, int)): raise EncodeError( 'Expected data of type float or int, but got {}.'.format( data)) else: if not isinstance(data, (float, int, long)): raise EncodeError( 'Expected data of type float or int, but got {}.'.format( data)) class Null(Type): def encode(self, data): if data is not None: raise EncodeError('Expected None, but got {}.'.format(data)) class BitString(Type): def encode(self, data): if (not isinstance(data, tuple) or len(data) != 2 or not isinstance(data[0], (bytes, bytearray)) or not isinstance(data[1], int)): raise EncodeError( 'Expected data of type tuple(bytes, int), but got {}.'.format( data)) if 8 * len(data[0]) < data[1]: raise EncodeError( 'Expected at least {} bit(s) data, but got {}.'.format( data[1], 8 * len(data[0]))) class Bytes(Type): def encode(self, data): if not isinstance(data, (bytes, bytearray)): raise EncodeError( 'Expected data of type bytes or bytearray, but got {}.'.format( data)) class String(Type): def encode(self, data): if sys.version_info[0] > 2: if not isinstance(data, str): raise EncodeError( 'Expected data of type str, but got {}.'.format(data)) else: if not isinstance(data, (str, unicode)): raise EncodeError( 'Expected data of type str, but got {}.'.format(data)) class Dict(Type): TYPE = dict def __init__(self, name, members): super(Dict, self).__init__(name) self.members = members def encode(self, data): super(Dict, self).encode(data) self.encode_members(data) def encode_members(self, data): for member in self.members: name = member.name if name in data: try: member.encode(data[name]) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e class List(Type): TYPE = list def __init__(self, name, element_type): super(List, self).__init__(name) self.element_type = element_type def encode(self, data): super(List, self).encode(data) self.encode_members(data) def encode_members(self, data): for entry in data: self.element_type.encode(entry) class Enumerated(Type): def __init__(self, name, numeric_enums): super(Enumerated, self).__init__(name) self._numeric_enums = numeric_enums def encode(self, data): if self._numeric_enums: self.encode_integer(data) else: self.encode_string(data) def encode_integer(self, data): if sys.version_info[0] > 2: if not isinstance(data, int): raise EncodeError( 'Expected data of type int, but got {}.'.format( data)) else: if not isinstance(data, (int, long)): raise EncodeError( 'Expected data of type int, but got {}.'.format( data)) def encode_string(self, data): if sys.version_info[0] > 2: if not isinstance(data, str): raise EncodeError( 'Expected data of type str, but got {}.'.format(data)) else: if not isinstance(data, (str, unicode)): raise EncodeError( 'Expected data of type str, but got {}.'.format(data)) class Choice(Type): def __init__(self, name, members): super(Choice, self).__init__(name) self.members = members self.name_to_member = {member.name: member for member in self.members} def format_names(self): return format_or(sorted([member.name for member in self.members])) def encode(self, data): if sys.version_info[0] > 2: if (not isinstance(data, tuple) or len(data) != 2 or not isinstance(data[0], str)): raise EncodeError( 'Expected data of type tuple(str, object), but got {}.'.format( data)) else: if (not isinstance(data, tuple) or len(data) != 2 or not isinstance(data[0], (str, unicode))): raise EncodeError( 'Expected data of type tuple(str, object), but got {}.'.format( data)) try: member = self.name_to_member[data[0]] except KeyError: raise EncodeError( "Expected choice {}, but got '{}'.".format( self.format_names(), data[0])) try: member.encode(data[1]) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e class Date(Type): def encode(self, data): if not isinstance(data, datetime.date): raise EncodeError( 'Expected data of type datetime.date, but got {}.'.format( data)) class TimeOfDay(Type): def encode(self, data): if not isinstance(data, datetime.time): raise EncodeError( 'Expected data of type datetime.time, but got {}.'.format( data)) class DateTime(Type): def encode(self, data): if not isinstance(data, datetime.datetime): raise EncodeError( 'Expected data of type datetime.datetime, but got {}.'.format( data)) class Skip(Type): def encode(self, data): pass class Recursive(compiler.Recursive, Type): def __init__(self, name, type_name, module_name): super(Recursive, self).__init__(name) self.type_name = type_name self.module_name = module_name self.inner = None def set_inner_type(self, inner): self.inner = copy(inner) def encode(self, data): try: self.inner.encode(data) except ErrorWithLocation as e: # Add member location e.add_location(self.inner) raise e class CompiledType(compiler.CompiledType): def encode(self, data): try: self._type.encode(data) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e class Compiler(compiler.Compiler): def process_type(self, type_name, type_descriptor, module_name): compiled_type = self.compile_type(type_name, type_descriptor, module_name) return CompiledType(compiled_type) def compile_type(self, name, type_descriptor, module_name): module_name = type_descriptor.get('module-name', module_name) type_name = type_descriptor['type'] if type_name in ['SEQUENCE', 'SET']: members, _ = self.compile_members(type_descriptor['members'], module_name) compiled = Dict(name, members) elif type_name in ['SEQUENCE OF', 'SET OF']: element_type = self.compile_type('', type_descriptor['element'], module_name) compiled = List(name, element_type) elif type_name == 'CHOICE': members, _ = self.compile_members(type_descriptor['members'], module_name) compiled = Choice(name, members) elif type_name == 'INTEGER': compiled = Integer(name) elif type_name == 'REAL': compiled = Float(name) elif type_name == 'BOOLEAN': compiled = Boolean(name) elif type_name == 'OCTET STRING': compiled = Bytes(name) elif type_name in ['UTCTime', 'GeneralizedTime', 'DATE-TIME']: compiled = DateTime(name) elif type_name == 'TIME-OF-DAY': compiled = TimeOfDay(name) elif type_name == 'DATE': compiled = Date(name) elif type_name == 'BIT STRING': compiled = BitString(name) elif type_name in STRING_TYPES: compiled = String(name) elif type_name == 'ENUMERATED': compiled = Enumerated(name, self._numeric_enums) elif type_name in ['ANY', 'ANY DEFINED BY', 'OpenType']: compiled = Skip(name) elif type_name == 'NULL': compiled = Null(name) elif type_name == 'EXTERNAL': members, _ = self.compile_members( self.external_type_descriptor()['members'], module_name) compiled = Dict(name, members) else: if type_name in self.types_backtrace: compiled = Recursive(name, type_name, module_name) self.recursive_types.append(compiled) else: compiled = self.compile_user_type(name, type_name, module_name) return compiled def compile_dict(specification, numeric_enums=False): return Compiler(specification, numeric_enums).process() asn1tools-0.169.0/asn1tools/codecs/uper.py000066400000000000000000000554311524544274600203470ustar00rootroot00000000000000"""Unaligned Packed Encoding Rules (UPER) codec. """ from . import DecodeError, ErrorWithLocation from . import per from . import restricted_utc_time_to_datetime from . import restricted_utc_time_from_datetime from . import restricted_generalized_time_to_datetime from . import restricted_generalized_time_from_datetime from .per import to_int from .per import to_byte_array from .per import integer_as_number_of_bits from .per import PermittedAlphabet from .per import Type from .per import Boolean from .per import Real from .per import Null from .per import Enumerated from .per import ObjectIdentifier from .per import Sequence from .per import Set from .per import UTF8String from .per import GeneralString from .per import GraphicString from .per import TeletexString from .per import UniversalString from .per import ObjectDescriptor from .per import Any from .per import Recursive from .permitted_alphabet import NUMERIC_STRING from .permitted_alphabet import PRINTABLE_STRING from .permitted_alphabet import IA5_STRING from .permitted_alphabet import BMP_STRING from .permitted_alphabet import VISIBLE_STRING class Encoder(per.Encoder): def align(self): pass class Decoder(per.Decoder): def align(self): pass class KnownMultiplierStringType(per.KnownMultiplierStringType): ENCODING = 'ascii' PERMITTED_ALPHABET = '' def __init__(self, name, minimum=None, maximum=None, has_extension_marker=None, permitted_alphabet=None): super(KnownMultiplierStringType, self).__init__(name, self.__class__.__name__) self.set_size_range(minimum, maximum, has_extension_marker) if permitted_alphabet is None: permitted_alphabet = self.PERMITTED_ALPHABET self.permitted_alphabet = permitted_alphabet self.bits_per_character = integer_as_number_of_bits( len(permitted_alphabet) - 1) def encode(self, data, encoder): if self.has_extension_marker: encoder.append_bit(0) if self.number_of_bits is None: return self.encode_unbound(data, encoder) elif self.minimum != self.maximum: encoder.append_non_negative_binary_integer(len(data) - self.minimum, self.number_of_bits) for value in data: encoder.append_non_negative_binary_integer( self.permitted_alphabet.encode( to_int(value.encode(self.ENCODING))), self.bits_per_character) def decode(self, decoder): if self.has_extension_marker: bit = decoder.read_bit() if bit: raise NotImplementedError( 'String size extension is not yet implemented.') if self.number_of_bits is None: return self.decode_unbound(decoder) else: length = self.minimum if self.minimum != self.maximum: length += decoder.read_non_negative_binary_integer(self.number_of_bits) data = bytearray() for _ in range(length): value = decoder.read_non_negative_binary_integer(self.bits_per_character) value = self.permitted_alphabet.decode(value) data += to_byte_array(value, self.bits_per_character) return data.decode(self.ENCODING) class ArrayType(per.ArrayType): def encode(self, data, encoder): if self.has_extension_marker: if self.minimum <= len(data) <= self.maximum: encoder.append_bit(0) else: encoder.append_bit(1) encoder.append_length_determinant(len(data)) for entry in data: self.element_type.encode(entry, encoder) return if self.number_of_bits is None: return self.encode_unbound(data, encoder) elif self.minimum != self.maximum: encoder.append_non_negative_binary_integer(len(data) - self.minimum, self.number_of_bits) for entry in data: self.element_type.encode(entry, encoder) def decode(self, decoder): length = None if self.has_extension_marker: bit = decoder.read_bit() if bit: length = decoder.read_length_determinant() if length is not None: pass elif self.number_of_bits is None: return self.decode_unbound(decoder) else: length = self.minimum if self.minimum != self.maximum: length += decoder.read_non_negative_binary_integer( self.number_of_bits) decoded = [] for _ in range(length): decoded_element = self.element_type.decode(decoder) decoded.append(decoded_element) return decoded class Integer(Type): def __init__(self, name): super(Integer, self).__init__(name, 'INTEGER') self.minimum = None self.maximum = None self.has_extension_marker = None self.number_of_bits = None def set_restricted_to_range(self, minimum, maximum, has_extension_marker): self.has_extension_marker = has_extension_marker if minimum == 'MIN' or maximum == 'MAX': return self.minimum = minimum self.maximum = maximum size = self.maximum - self.minimum self.number_of_bits = integer_as_number_of_bits(size) def encode(self, data, encoder): if self.has_extension_marker: if self.minimum <= data <= self.maximum: encoder.append_bit(0) else: encoder.append_bit(1) encoder.append_unconstrained_whole_number(data) return if self.number_of_bits is None: encoder.append_unconstrained_whole_number(data) else: encoder.append_non_negative_binary_integer(data - self.minimum, self.number_of_bits) def decode(self, decoder): if self.has_extension_marker: if decoder.read_bit(): return decoder.read_unconstrained_whole_number() if self.number_of_bits is None: return decoder.read_unconstrained_whole_number() else: value = decoder.read_non_negative_binary_integer(self.number_of_bits) return value + self.minimum def __repr__(self): return 'Integer({})'.format(self.name) class BitString(per.BitString): def encode(self, data, encoder): data, number_of_bits = data if self.has_extension_marker: if self.minimum <= number_of_bits <= self.maximum: encoder.append_bit(0) else: raise NotImplementedError( 'BIT STRING extension is not yet implemented.') if self.has_named_bits: data, number_of_bits = self.rstrip_zeros(data, number_of_bits) if self.number_of_bits is None: return self.encode_unbound(data, number_of_bits, encoder) elif self.minimum != self.maximum: encoder.append_non_negative_binary_integer( number_of_bits - self.minimum, self.number_of_bits) encoder.append_bits(data, number_of_bits) def decode(self, decoder): if self.has_extension_marker: if decoder.read_bit(): raise NotImplementedError( 'BIT STRING extension is not yet implemented.') if self.number_of_bits is None: return self.decode_unbound(decoder) else: number_of_bits = self.minimum if self.minimum != self.maximum: number_of_bits += decoder.read_non_negative_binary_integer( self.number_of_bits) value = decoder.read_bits(number_of_bits) return (value, number_of_bits) class OctetString(per.OctetString): def encode(self, data, encoder): if self.has_extension_marker: if self.minimum <= len(data) <= self.maximum: encoder.append_bit(0) else: encoder.append_bit(1) encoder.align() encoder.append_length_determinant(len(data)) encoder.append_bytes(data) return if self.number_of_bits is None: return self.encode_unbound(data, encoder) elif self.minimum != self.maximum: encoder.append_non_negative_binary_integer(len(data) - self.minimum, self.number_of_bits) encoder.append_bytes(data) def decode(self, decoder): if self.has_extension_marker: bit = decoder.read_bit() if bit: length = decoder.read_length_determinant() return decoder.read_bytes(length) if self.number_of_bits is None: return self.decode_unbound(decoder) else: length = self.minimum if self.minimum != self.maximum: length += decoder.read_non_negative_binary_integer( self.number_of_bits) return decoder.read_bytes(length) class SequenceOf(ArrayType): def __init__(self, name, element_type, minimum, maximum, has_extension_marker): super(SequenceOf, self).__init__(name, element_type, minimum, maximum, has_extension_marker, 'SEQUENCE OF') class SetOf(ArrayType): def __init__(self, name, element_type, minimum, maximum, has_extension_marker): super(SetOf, self).__init__(name, element_type, minimum, maximum, has_extension_marker, 'SET OF') class Choice(per.Choice): def encode_root_index(self, index, encoder): encoder.append_non_negative_binary_integer(index, self.root_number_of_bits) def decode_root_index(self, decoder): return decoder.read_non_negative_binary_integer(self.root_number_of_bits) class NumericString(KnownMultiplierStringType): ALPHABET = bytearray(NUMERIC_STRING.encode('ascii')) ENCODE_MAP = {v: i for i, v in enumerate(ALPHABET)} DECODE_MAP = {i: v for i, v in enumerate(ALPHABET)} PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_MAP, DECODE_MAP) class PrintableString(KnownMultiplierStringType): ALPHABET = bytearray(PRINTABLE_STRING.encode('ascii')) ENCODE_MAP = {v: v for v in ALPHABET} DECODE_MAP = {v: v for v in ALPHABET} PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_MAP, DECODE_MAP) class IA5String(KnownMultiplierStringType): ALPHABET = bytearray(IA5_STRING.encode('ascii')) ENCODE_DECODE_MAP = {v: v for v in ALPHABET} PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_DECODE_MAP, ENCODE_DECODE_MAP) class BMPString(KnownMultiplierStringType): ENCODING = 'utf-16-be' ALPHABET = BMP_STRING ENCODE_DECODE_MAP = {ord(v): ord(v) for v in ALPHABET} PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_DECODE_MAP, ENCODE_DECODE_MAP) class VisibleString(KnownMultiplierStringType): ALPHABET = bytearray(VISIBLE_STRING.encode('ascii')) ENCODE_DECODE_MAP = {v: v for v in ALPHABET} PERMITTED_ALPHABET = PermittedAlphabet(ENCODE_DECODE_MAP, ENCODE_DECODE_MAP) class UTCTime(VisibleString): def encode(self, data, encoder): encoded = restricted_utc_time_from_datetime(data) return super(UTCTime, self).encode(encoded, encoder) def decode(self, decoder): decoded = super(UTCTime, self).decode(decoder) return restricted_utc_time_to_datetime(decoded) class GeneralizedTime(VisibleString): def encode(self, data, encoder): enceded = restricted_generalized_time_from_datetime(data) return super(GeneralizedTime, self).encode(enceded, encoder) def decode(self, decoder): decoded = super(GeneralizedTime, self).decode(decoder) return restricted_generalized_time_to_datetime(decoded) class Date(per.Date): def __init__(self, name): super(Date, self).__init__(name) immediate = Integer('immediate') near_future = Integer('near_future') near_past = Integer('near_past') reminder = Integer('reminder') immediate.set_restricted_to_range(2005, 2020, False) near_future.set_restricted_to_range(2021, 2276, False) near_past.set_restricted_to_range(1749, 2004, False) reminder.set_restricted_to_range('MIN', 1748, False) year = Choice('year', [immediate, near_future, near_past, reminder], None) month = Integer('month') day = Integer('day') month.set_restricted_to_range(1, 12, False) day.set_restricted_to_range(1, 31, False) self._inner = Sequence('DATE-ENCODING', [year, month, day], None) class TimeOfDay(per.TimeOfDay): def __init__(self, name): super(TimeOfDay, self).__init__(name) hours = Integer('hours') minutes = Integer('minutes') seconds = Integer('seconds') hours.set_restricted_to_range(0, 24, False) minutes.set_restricted_to_range(0, 59, False) seconds.set_restricted_to_range(0, 60, False) self._inner = Sequence('TIME-OF-DAY-ENCODING', [hours, minutes, seconds], None) class DateTime(per.DateTime): def __init__(self, name): super(DateTime, self).__init__(name) self._inner = Sequence('DATE-TIME-ENCODING', [Date('date'), TimeOfDay('time')], None) class OpenType(Type): def __init__(self, name): super(OpenType, self).__init__(name, 'OpenType') def encode(self, data, encoder): encoder.align() encoder.append_length_determinant(len(data)) encoder.append_bytes(data) def decode(self, decoder): decoder.align() length = decoder.read_length_determinant() return decoder.read_bytes(length) class CompiledType(per.CompiledType): def encode(self, data): encoder = Encoder() try: self._type.encode(data, encoder) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e return encoder.as_bytearray() def decode(self, data): decoder = Decoder(bytearray(data)) try: return self._type.decode(decoder) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e class Compiler(per.Compiler): def process_type(self, type_name, type_descriptor, module_name): compiled_type = self.compile_type(type_name, type_descriptor, module_name) return CompiledType(compiled_type) def compile_type(self, name, type_descriptor, module_name): module_name = self.get_module_name(type_descriptor, module_name) type_name = type_descriptor['type'] if type_name == 'SEQUENCE': compiled = Sequence( name, *self.compile_members(type_descriptor['members'], module_name)) elif type_name == 'SEQUENCE OF': compiled = SequenceOf(name, self.compile_type('', type_descriptor['element'], module_name), *self.get_size_range(type_descriptor, module_name)) elif type_name == 'SET': compiled = Set( name, *self.compile_members(type_descriptor['members'], module_name, sort_by_tag=True)) elif type_name == 'SET OF': compiled = SetOf(name, self.compile_type('', type_descriptor['element'], module_name), *self.get_size_range(type_descriptor, module_name)) elif type_name == 'CHOICE': compiled = Choice(name, *self.compile_members( type_descriptor['members'], module_name, flat_additions=True)) elif type_name == 'INTEGER': compiled = Integer(name) elif type_name == 'REAL': compiled = Real(name) elif type_name == 'ENUMERATED': compiled = Enumerated(name, self.get_enum_values(type_descriptor, module_name), self._numeric_enums) elif type_name == 'BOOLEAN': compiled = Boolean(name) elif type_name == 'OBJECT IDENTIFIER': compiled = ObjectIdentifier(name) elif type_name == 'OCTET STRING': compiled = OctetString(name, *self.get_size_range(type_descriptor, module_name)) elif type_name == 'TeletexString': compiled = TeletexString(name) elif type_name == 'NumericString': permitted_alphabet = self.get_permitted_alphabet(type_descriptor) compiled = NumericString(name, *self.get_size_range(type_descriptor, module_name), permitted_alphabet=permitted_alphabet) elif type_name == 'PrintableString': permitted_alphabet = self.get_permitted_alphabet(type_descriptor) compiled = PrintableString(name, *self.get_size_range(type_descriptor, module_name), permitted_alphabet=permitted_alphabet) elif type_name == 'IA5String': permitted_alphabet = self.get_permitted_alphabet(type_descriptor) compiled = IA5String(name, *self.get_size_range(type_descriptor, module_name), permitted_alphabet=permitted_alphabet) elif type_name == 'BMPString': permitted_alphabet = self.get_permitted_alphabet(type_descriptor) compiled = BMPString(name, *self.get_size_range(type_descriptor, module_name), permitted_alphabet=permitted_alphabet) elif type_name == 'VisibleString': permitted_alphabet = self.get_permitted_alphabet(type_descriptor) compiled = VisibleString(name, *self.get_size_range(type_descriptor, module_name), permitted_alphabet=permitted_alphabet) elif type_name == 'GeneralString': compiled = GeneralString(name) elif type_name == 'UTF8String': compiled = UTF8String(name) elif type_name == 'GraphicString': compiled = GraphicString(name) elif type_name == 'UTCTime': compiled = UTCTime(name) elif type_name == 'UniversalString': compiled = UniversalString(name) elif type_name == 'GeneralizedTime': compiled = GeneralizedTime(name) elif type_name == 'DATE': compiled = Date(name) elif type_name == 'TIME-OF-DAY': compiled = TimeOfDay(name) elif type_name == 'DATE-TIME': compiled = DateTime(name) elif type_name == 'BIT STRING': compiled = BitString(name, self.get_named_bits(type_descriptor, module_name), *self.get_size_range(type_descriptor, module_name)) elif type_name == 'ANY': compiled = Any(name) elif type_name == 'ANY DEFINED BY': compiled = Any(name) elif type_name == 'NULL': compiled = Null(name) elif type_name == 'OpenType': compiled = OpenType(name) elif type_name == 'EXTERNAL': compiled = Sequence( name, *self.compile_members(self.external_type_descriptor()['members'], module_name)) elif type_name == 'ObjectDescriptor': compiled = ObjectDescriptor(name) else: if type_name in self.types_backtrace: compiled = Recursive(name, type_name, module_name) self.recursive_types.append(compiled) else: compiled = self.compile_user_type(name, type_name, module_name) if 'tag' in type_descriptor: compiled = self.set_compiled_tag(compiled, type_descriptor) if 'restricted-to' in type_descriptor: compiled = self.set_compiled_restricted_to(compiled, type_descriptor, module_name) return compiled def compile_dict(specification, numeric_enums=False): return Compiler(specification, numeric_enums).process() def decode_full_length(_data): raise DecodeError('Decode length is not supported for this codec.') asn1tools-0.169.0/asn1tools/codecs/xer.py000066400000000000000000000535501524544274600201720ustar00rootroot00000000000000"""XML Encoding Rules (XER) codec. """ import time import sys from xml.etree import ElementTree import binascii import datetime from ..parser import EXTENSION_MARKER from . import BaseType, format_bytes, ErrorWithLocation from . import EncodeError from . import DecodeError from . import compiler from . import format_or from . import utc_time_to_datetime from . import utc_time_from_datetime from . import generalized_time_to_datetime from . import generalized_time_from_datetime from .compiler import enum_values_as_dict def indent_xml(element, indent, level=0): i = "\n" + level * indent if len(element): if not element.text or not element.text.strip(): element.text = i + indent if not element.tail or not element.tail.strip(): element.tail = i for element in element: indent_xml(element, indent, level + 1) if not element.tail or not element.tail.strip(): element.tail = i else: if level and (not element.tail or not element.tail.strip()): element.tail = i class Type(BaseType): def __init__(self, name, type_name): super().__init__(name.replace(' ', '_'), type_name) def set_size_range(self, minimum, maximum, has_extension_marker): pass def encode_of(self, data): # Used by ArrayType return self.encode(data) def decode_of(self, element): # Used by ArrayType return self.decode(element) class StringType(Type): def __init__(self, name, type_name=None): if type_name is None: type_name = self.__class__.__name__ super(StringType, self).__init__(name, type_name) def encode(self, data): element = ElementTree.Element(self.name) if len(data) > 0: element.text = data return element def decode(self, element): if element.text is None: return u'' else: if sys.version_info[0] > 2: return element.text else: return unicode(element.text) def __repr__(self): return '{}({})'.format(self.__class__.__name__, self.name) class MembersType(Type): def __init__(self, name, members, type_name): super(MembersType, self).__init__(name, type_name) self.members = members def encode(self, data): element = ElementTree.Element(self.name) for member in self.members: name = member.name if name in data: try: member_element = member.encode(data[name]) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e elif member.optional or member.has_default(): continue else: raise EncodeError( "{} member '{}' not found in {}.".format( self.__class__.__name__, name, data)) element.append(member_element) return element def decode(self, element): values = {} for member in self.members: name = member.name member_element = element.find(name) if member_element is not None: try: value = member.decode(member_element) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e values[name] = value elif member.optional: pass elif member.has_default(): values[name] = member.get_default() return values def __repr__(self): return '{}({}, [{}])'.format( self.__class__.__name__, self.name, ', '.join([repr(member) for member in self.members])) class ArrayType(Type): def __init__(self, name, element_type, type_name): super(ArrayType, self).__init__(name, type_name) self.element_type = element_type def encode(self, data): element = ElementTree.Element(self.name) for entry in data: element.append(self.element_type.encode_of(entry)) return element def decode(self, element): values = [] for member_element in list(element): value = self.element_type.decode_of(member_element) values.append(value) return values def __repr__(self): return '{}({}, {})'.format(self.__class__.__name__, self.name, self.element_type) class Boolean(Type): def __init__(self, name): super(Boolean, self).__init__(name, 'BOOLEAN') def encode(self, data): element = ElementTree.Element(self.name) ElementTree.SubElement(element, 'true' if data else 'false') return element def decode(self, element): return element.find('true') is not None def encode_of(self, data): return ElementTree.Element('true' if data else 'false') def decode_of(self, element): return element.tag == 'true' class Integer(Type): def __init__(self, name): super(Integer, self).__init__(name, 'INTEGER') def encode(self, data): element = ElementTree.Element(self.name) element.text = str(data) return element def decode(self, element): return int(element.text) class Real(Type): def __init__(self, name): super(Real, self).__init__(name, 'REAL') def encode(self, data): data = float(data) exponent = 0 while abs(data) >= 10: data /= 10 exponent += 1 element = ElementTree.Element(self.name) element.text = '{}E{}'.format(data, exponent) return element def decode(self, element): return float(element.text) class Null(Type): def __init__(self, name): super(Null, self).__init__(name, 'NULL') def encode(self, data): return ElementTree.Element(self.name) def decode(self, element): return None class BitString(Type): def __init__(self, name): super(BitString, self).__init__(name, 'BIT STRING') def encode(self, data): element = ElementTree.Element(self.name) if data[1] > 0: encoded = int(binascii.hexlify(data[0]), 16) encoded |= (0x80 << (8 * len(data[0]))) element.text = bin(encoded)[10:10 + data[1]].upper() return element def decode(self, element): encoded = element.text if encoded is None: number_of_bits = 0 decoded = b'' else: number_of_bits = len(encoded) decoded = int(encoded, 2) decoded |= (0x80 << number_of_bits) rest = (number_of_bits % 8) if rest != 0: decoded <<= (8 - rest) decoded = binascii.unhexlify(hex(decoded).rstrip('L')[4:]) return (decoded, number_of_bits) class OctetString(Type): def __init__(self, name): super(OctetString, self).__init__(name, 'OCTET STRING') def encode(self, data): element = ElementTree.Element(self.name) if len(data) > 0: element.text = format_bytes(data).upper() return element def decode(self, element): if element.text is None: return b'' else: if len(element.text) % 2: return binascii.unhexlify(element.text.zfill(len(element.text)+1)) return binascii.unhexlify(element.text) class ObjectIdentifier(StringType): def __init__(self, name): super(ObjectIdentifier, self).__init__(name, 'OBJECT IDENTIFIER') def decode(self, element): if element.text is None: raise DecodeError("Expected an OBJECT IDENTIFIER, but got ''.") return element.text class Enumerated(Type): def __init__(self, name, values, numeric): super(Enumerated, self).__init__(name, 'ENUMERATED') if numeric: self.data_to_value = enum_values_as_dict(values) self.value_to_data = {v: k for k, v in self.data_to_value.items()} else: self.value_to_data = { k: k for k in enum_values_as_dict(values).values() } self.data_to_value = self.value_to_data self.has_extension_marker = (EXTENSION_MARKER in values) def format_names(self): return format_or(sorted(list(self.value_to_data.values()))) def format_values(self): return format_or(sorted(list(self.value_to_data))) def encode(self, data): try: value = self.data_to_value[data] except KeyError: raise EncodeError( "Expected enumeration value {}, but got '{}'.".format( self.format_names(), data)) element = ElementTree.Element(self.name) element.append(ElementTree.Element(value)) return element def decode(self, element): value = element[0].tag if value in self.value_to_data: return self.value_to_data[value] elif self.has_extension_marker: return None else: raise DecodeError( "Expected enumeration value {}, but got '{}'.".format( self.format_values(), value)) def encode_of(self, data): try: value = self.data_to_value[data] except KeyError: raise EncodeError( "Expected enumeration value {}, but got '{}'.".format( self.format_names(), data)) return ElementTree.Element(value) def decode_of(self, element): value = element.tag try: return self.value_to_data[value] except KeyError: raise DecodeError( "Expected enumeration value {}, but got '{}'.".format( self.format_values(), value)) class Sequence(MembersType): def __init__(self, name, members): super(Sequence, self).__init__(name, members, 'SEQUENCE') class SequenceOf(ArrayType): def __init__(self, name, element_type): super(SequenceOf, self).__init__(name, element_type, 'SEQUENCE OF') class Set(MembersType): def __init__(self, name, members): super(Set, self).__init__(name, members, 'SET') class SetOf(ArrayType): def __init__(self, name, element_type): super(SetOf, self).__init__(name, element_type, 'SET OF') class Choice(Type): def __init__(self, name, members, has_extension_marker): super(Choice, self).__init__(name, 'CHOICE') self.members = members self.name_to_member = {member.name: member for member in self.members} self.has_extension_marker = has_extension_marker def format_names(self): return format_or(sorted([member.name for member in self.members])) def encode(self, data): try: member = self.name_to_member[data[0]] except KeyError: raise EncodeError( "Expected choice {}, but got '{}'.".format( self.format_names(), data[0])) element = ElementTree.Element(self.name) try: element.append(member.encode(data[1])) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e return element def decode(self, element): member_element = element[0] name = member_element.tag if name in self.name_to_member: member = self.name_to_member[name] elif self.has_extension_marker: return (None, None) else: raise DecodeError( "Expected choice {}, but got '{}'.".format( self.format_names(), name)) try: return (name, member.decode(member_element)) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e def encode_of(self, data): try: member = self.name_to_member[data[0]] except KeyError: e = EncodeError( "Expected choice {}, but got '{}'.".format( self.format_names(), data[0])) # e.add_location(self.name) raise e try: return member.encode(data[1]) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e def decode_of(self, element): name = element.tag try: member = self.name_to_member[name] except KeyError: raise DecodeError( "Expected choice {}, but got '{}'.".format( self.format_names(), name)) try: return (name, member.decode(element)) except ErrorWithLocation as e: # Add member location e.add_location(member) raise e def __repr__(self): return 'Choice({}, [{}])'.format( self.name, ', '.join([repr(member) for member in self.members])) class UTF8String(StringType): pass class NumericString(StringType): pass class PrintableString(StringType): pass class IA5String(StringType): pass class VisibleString(StringType): pass class GeneralString(StringType): pass class BMPString(StringType): pass class GraphicString(StringType): pass class UniversalString(StringType): pass class TeletexString(StringType): pass class ObjectDescriptor(GraphicString): pass class UTCTime(Type): def __init__(self, name): super(UTCTime, self).__init__(name, 'UTCTime') def encode(self, data): element = ElementTree.Element(self.name) element.text = utc_time_from_datetime(data) return element def decode(self, element): return utc_time_to_datetime(element.text) class GeneralizedTime(Type): def __init__(self, name): super(GeneralizedTime, self).__init__(name, 'GeneralizedTime') def encode(self, data): element = ElementTree.Element(self.name) element.text = generalized_time_from_datetime(data) return element def decode(self, element): return generalized_time_to_datetime(element.text) class Date(StringType): def encode(self, data): element = ElementTree.Element(self.name) element.text = str(data) return element def decode(self, element): return datetime.date(*time.strptime(element.text, '%Y-%m-%d')[:3]) class TimeOfDay(StringType): def encode(self, data): element = ElementTree.Element(self.name) element.text = str(data) return element def decode(self, element): return datetime.time(*time.strptime(element.text, '%H:%M:%S')[3:6]) class DateTime(StringType): def encode(self, data): element = ElementTree.Element(self.name) element.text = str(data).replace(' ', 'T') return element def decode(self, element): return datetime.datetime(*time.strptime(element.text, '%Y-%m-%dT%H:%M:%S')[:6]) class Any(Type): def __init__(self, name): super(Any, self).__init__(name, 'ANY') def encode(self, data): raise NotImplementedError('ANY is not yet implemented.') def decode(self, element): raise NotImplementedError('ANY is not yet implemented.') class Recursive(compiler.Recursive, Type): def __init__(self, name, type_name, module_name): super(Recursive, self).__init__(name, 'RECURSIVE') self.type_name = type_name self.module_name = module_name self._inner = None def set_inner_type(self, inner): self._inner = inner def encode(self, data): encoded = self._inner.encode(data) encoded.tag = self.name return encoded def decode(self, element): return self._inner.decode(element) class CompiledType(compiler.CompiledType): def encode(self, data, indent=None): try: element = self._type.encode(data) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e if indent is not None: indent_xml(element, indent * " ") return ElementTree.tostring(element) def decode(self, data): element = ElementTree.fromstring(data.decode('utf-8')) try: return self._type.decode(element) except ErrorWithLocation as e: # Add member location e.add_location(self._type) raise e class Compiler(compiler.Compiler): def process_type(self, type_name, type_descriptor, module_name): compiled_type = self.compile_type(type_name, type_descriptor, module_name) return CompiledType(compiled_type) def compile_type(self, name, type_descriptor, module_name): module_name = self.get_module_name(type_descriptor, module_name) type_name = type_descriptor['type'] if type_name == 'SEQUENCE': members, _ = self.compile_members( type_descriptor['members'], module_name) compiled = Sequence(name, members) elif type_name == 'SEQUENCE OF': element = type_descriptor['element'] compiled = SequenceOf(name, self.compile_type(type_descriptor.get('element_name') or element['type'], element, module_name)) elif type_name == 'SET': members, _ = self.compile_members( type_descriptor['members'], module_name) compiled = Set(name, members) elif type_name == 'SET OF': element = type_descriptor['element'] compiled = SetOf(name, self.compile_type(type_descriptor.get('element_name') or element['type'], element, module_name)) elif type_name == 'CHOICE': compiled = Choice(name, *self.compile_members( type_descriptor['members'], module_name)) elif type_name == 'INTEGER': compiled = Integer(name) elif type_name == 'REAL': compiled = Real(name) elif type_name == 'ENUMERATED': compiled = Enumerated(name, self.get_enum_values(type_descriptor, module_name), self._numeric_enums) elif type_name == 'BOOLEAN': compiled = Boolean(name) elif type_name == 'OBJECT IDENTIFIER': compiled = ObjectIdentifier(name) elif type_name == 'OCTET STRING': compiled = OctetString(name) elif type_name == 'TeletexString': compiled = TeletexString(name) elif type_name == 'NumericString': compiled = NumericString(name) elif type_name == 'PrintableString': compiled = PrintableString(name) elif type_name == 'IA5String': compiled = IA5String(name) elif type_name == 'VisibleString': compiled = VisibleString(name) elif type_name == 'GeneralString': compiled = GeneralString(name) elif type_name == 'UTF8String': compiled = UTF8String(name) elif type_name == 'BMPString': compiled = BMPString(name) elif type_name == 'GraphicString': compiled = GraphicString(name) elif type_name == 'UTCTime': compiled = UTCTime(name) elif type_name == 'UniversalString': compiled = UniversalString(name) elif type_name == 'GeneralizedTime': compiled = GeneralizedTime(name) elif type_name == 'DATE': compiled = Date(name) elif type_name == 'TIME-OF-DAY': compiled = TimeOfDay(name) elif type_name == 'DATE-TIME': compiled = DateTime(name) elif type_name == 'BIT STRING': compiled = BitString(name) elif type_name == 'ANY': compiled = Any(name) elif type_name == 'ANY DEFINED BY': compiled = Any(name) elif type_name == 'NULL': compiled = Null(name) elif type_name == 'EXTERNAL': members, _ = self.compile_members(self.external_type_descriptor()['members'], module_name) compiled = Sequence(name, members) elif type_name == 'ObjectDescriptor': compiled = ObjectDescriptor(name) else: if type_name in self.types_backtrace: compiled = Recursive(name, type_name, module_name) self.recursive_types.append(compiled) else: compiled = self.compile_user_type(name, type_name, module_name) return compiled def compile_dict(specification, numeric_enums): return Compiler(specification, numeric_enums).process() def decode_full_length(_data): raise DecodeError('Decode length is not supported for this codec.') asn1tools-0.169.0/asn1tools/compat.py000066400000000000000000000025111524544274600174060ustar00rootroot00000000000000"""Python 2 & 3 compatibility. """ import sys from datetime import datetime from datetime import timedelta from datetime import tzinfo if sys.version_info[0] > 2: from datetime import timezone UTC = timezone.utc def strptime(data, fmt): return datetime.strptime(data, fmt) else: class timezone(tzinfo): def __init__(self, offset): self._utcoffset = offset def utcoffset(self, dt): return self._utcoffset def tzname(self, dt): return "-" def dst(self, dt): return timedelta(0) UTC = timezone(timedelta(hours=0, minutes=0)) def strptime(data, fmt): if fmt.endswith('%z'): date = datetime.strptime(data[:-5], fmt[:-2]) try: sign = {'-': -1, '+': 1}[data[-5]] hours = sign * int(data[-4:-2]) minutes = sign * int(data[-2:]) except KeyError: raise ValueError( "time data '{}' does not match format '{}'.".format( data, fmt)) date = date.replace(tzinfo=timezone(timedelta(hours=hours, minutes=minutes))) else: date = datetime.strptime(data, fmt) return date asn1tools-0.169.0/asn1tools/compiler.py000066400000000000000000000317371524544274600177510ustar00rootroot00000000000000"""Compile ASN.1 specifications to Python objects that can be used to encode and decode types. """ try: import diskcache has_diskcache = True except ImportError: has_diskcache = False from .parser import parse_files from .parser import parse_string from .codecs import compiler from .codecs import ber from .codecs import der from .codecs import gser from .codecs import jer from .codecs import oer from .codecs import per from .codecs import uper from .codecs import xer from .codecs import type_checker from .codecs import constraints_checker from .errors import CompileError from .errors import EncodeError from .errors import DecodeError class Specification(object): """This class is used to encode and decode ASN.1 types found in an ASN.1 specification. Instances of this class are created by the factory functions :func:`~asn1tools.compile_files()`, :func:`~asn1tools.compile_string()` and :func:`~asn1tools.compile_dict()`. """ def __init__(self, modules, decode_length, type_checkers, constraints_checkers): self._modules = modules self._decode_length = decode_length self._types = {} duplicated = set() for module_name in modules: types = modules[module_name] for type_name, type_ in types.items(): type_.type_checker = type_checkers[module_name][type_name] type_.constraints_checker = constraints_checkers[module_name][type_name] if type_name in duplicated: continue if type_name in self._types: del self._types[type_name] duplicated.add(type_name) continue self._types[type_name] = type_ @property def types(self): """A dictionary of all unique types in the specification. Types found in two or more modules are not part of this dictionary. >>> question = foo.types['Question'] >>> question Sequence(Question, [Integer(id), IA5String(question)]) >>> question.encode({'id': 1, 'question': 'Is 1+1=3?'}) b'0\\x0e\\x02\\x01\\x01\\x16\\x09Is 1+1=3?' """ return self._types @property def modules(self): """A dictionary of all modules in the specification. Unlike :attr:`.types`, this attribute contains every type, even if the type name was found in two or more modules. >>> question = foo.modules['Foo']['Question'] >>> question Sequence(Question, [Integer(id), IA5String(question)]) >>> question.encode({'id': 1, 'question': 'Is 1+1=3?'}) b'0\\x0e\\x02\\x01\\x01\\x16\\x09Is 1+1=3?' """ return self._modules def encode(self, name, data, check_types=True, check_constraints=False, **kwargs): """Encode given dictionary `data` as given type `name` and return the encoded data as a bytes object. If `check_types` is ``True`` all objects in `data` are checked against the expected Python type for its ASN.1 type. Set `check_types` to ``False`` to minimize the runtime overhead, but instead get less informative error messages. See `Types`_ for a mapping table from ASN.1 types to Python types. If `check_constraints` is ``True`` all objects in `data` are checked against their ASN.1 type constraints. A ConstraintsError exception is raised if the constraints are not fulfilled. Set `check_constraints` to ``False`` to skip the constraints check and minimize the runtime overhead, but instead get less informative error messages and allow encoding of values not fulfilling the constraints. >>> foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'}) b'0\\x0e\\x02\\x01\\x01\\x16\\x09Is 1+1=3?' """ try: type_ = self._types[name] except KeyError: raise EncodeError( "Type '{}' not found in types dictionary.".format(name)) if check_types: type_.check_types(data) if check_constraints: type_.check_constraints(data) return bytes(type_.encode(data, **kwargs)) def decode(self, name, data, check_constraints=False): """Decode given bytes object `data` as given type `name` and return the decoded data as a dictionary. If `check_constraints` is ``True`` all objects in `data` are checked against their ASN.1 type constraints. A ConstraintsError exception is raised if the constraints are not fulfilled. Set `check_constraints` to ``False`` to skip the constraints check and minimize the runtime overhead, but instead allow decoding of values not fulfilling the constraints. >>> foo.decode('Question', b'0\\x0e\\x02\\x01\\x01\\x16\\x09Is 1+1=3?') {'id': 1, 'question': 'Is 1+1=3?'} """ try: type_ = self._types[name] except KeyError: raise DecodeError( "Type '{}' not found in types dictionary.".format(name)) decoded = type_.decode(data) if check_constraints: type_.check_constraints(decoded) return decoded def decode_with_length(self, name, data, check_constraints=False): """Same as :func:`~asn1tools.compiler.Specification.decode`, but also returns the byte length of the decoded data. Use to get the length of indefinite-length BER encoded data. >>> foo.decode_with_length('Question', b'0\\x0e\\x02\\x01\\x01\\x16\\x09Is 1+1=3?') ({'id': 1, 'question': 'Is 1+1=3?'}, 16) """ try: type_ = self._types[name] except KeyError: raise DecodeError( "Type '{}' not found in types dictionary.".format(name)) decoded, length = type_.decode_with_length(data) if check_constraints: type_.check_constraints(decoded) return decoded, length def decode_length(self, data): """Decode the length of given data `data`. Returns None if not enough data was given to decode the length. This method only works for BER and DER codecs with definite length in the first data encoding. Other codecs and combinations lacks length information in the data. >>> foo.decode_length(b'\\x30\\x0e\\x02\\x01\\x01') 16 """ return self._decode_length(data) def _compile_any_defined_by_type(type_, choices): type_['choices'] = {} for key, value in choices.items(): specification = 'A DEFINITIONS ::= BEGIN B ::= {} END'.format(value) type_['choices'][key] = parse_string(specification)['A']['types']['B'] def _compile_any_defined_by_choices(specification, any_defined_by_choices): for location, choices in any_defined_by_choices.items(): module_name = location[0] type_names = location[1:-1] member_name = location[-1] types = specification[module_name]['types'] if len(type_names) == 0: _compile_any_defined_by_type(types[member_name], choices) else: for type_name in type_names: types = types[type_name] for member in types['members']: if member['name'] != member_name: continue _compile_any_defined_by_type(member, choices) break def _compile_files_cache(filenames, codec, any_defined_by_choices, encoding, cache_dir, numeric_enums): key = [codec.encode('ascii')] if isinstance(filenames, str): filenames = [filenames] for filename in filenames: with open(filename, 'rb') as fin: key.append(fin.read()) key = b''.join(key) cache = diskcache.Cache(cache_dir) try: return cache[key] except KeyError: compiled = compile_dict(parse_files(filenames, encoding), codec, any_defined_by_choices, numeric_enums) cache[key] = compiled return compiled def compile_dict(specification, codec='ber', any_defined_by_choices=None, numeric_enums=False): """Compile given ASN.1 specification dictionary and return a :class:`~asn1tools.compiler.Specification` object that can be used to encode and decode data structures with given codec `codec`. `codec` may be one of ``'ber'``, ``'der'``, ``'gser'``, ``'jer'``, ``oer``, ``'per'``, ``'uper'`` and ``'xer'``. Give `numeric_enums` as ``True`` for numeric enumeration values instead of strings. >>> foo = asn1tools.compile_dict(asn1tools.parse_files('foo.asn')) """ codecs = { 'ber': ber, 'der': der, 'gser': gser, 'jer': jer, 'oer': oer, 'per': per, 'uper': uper, 'xer': xer } try: codec = codecs[codec] except KeyError: raise CompileError("Unsupported codec '{}'.".format(codec)) if any_defined_by_choices: _compile_any_defined_by_choices(specification, any_defined_by_choices) return Specification(codec.compile_dict(specification, numeric_enums), codec.decode_full_length, type_checker.compile_dict(specification, numeric_enums), constraints_checker.compile_dict(specification, numeric_enums)) def compile_string(string, codec='ber', any_defined_by_choices=None, numeric_enums=False): """Compile given ASN.1 specification string and return a :class:`~asn1tools.compiler.Specification` object that can be used to encode and decode data structures with given codec `codec`. `codec` may be one of ``'ber'``, ``'der'``, ``'gser'``, ``'jer'``, ``oer``, ``'per'``, ``'uper'`` and ``'xer'``. Give `numeric_enums` as ``True`` for numeric enumeration values instead of strings. >>> with open('foo.asn') as fin: ... foo = asn1tools.compile_string(fin.read()) """ return compile_dict(parse_string(string), codec, any_defined_by_choices, numeric_enums) def compile_files(filenames, codec='ber', any_defined_by_choices=None, encoding='utf-8', cache_dir=None, numeric_enums=False): """Compile given ASN.1 specification file(s) and return a :class:`~asn1tools.compiler.Specification` object that can be used to encode and decode data structures with given codec `codec`. `codec` may be one of ``'ber'``, ``'der'``, ``'gser'``, ``'jer'``, ``oer``, ``'per'``, ``'uper'`` and ``'xer'``. `encoding` is the text encoding. This argument is passed to the built-in function `open()`. `cache_dir` specifies the compiled files cache location in the file system. Give as ``None`` to disable the cache. By default the cache is disabled. The cache key is the concatenated contents of given files and the codec name. Using a cache will significantly reduce the compile time when recompiling the same files. The cache directory is automatically created if it does not exist. Remove the cache directory `cache_dir` to clear the cache. Give `numeric_enums` as ``True`` for numeric enumeration values instead of strings. >>> foo = asn1tools.compile_files('foo.asn') Give `cache_dir` as a string to use a cache. >>> foo = asn1tools.compile_files('foo.asn', cache_dir='my_cache') """ if cache_dir is None: return compile_dict(parse_files(filenames, encoding), codec, any_defined_by_choices, numeric_enums) else: if not has_diskcache: raise RuntimeError( 'Cache access requested, but diskcache module is missing') return _compile_files_cache(filenames, codec, any_defined_by_choices, encoding, cache_dir, numeric_enums) def pre_process_dict(specification): """Pre-process given specification dictionary, expanding COMPONENTS OF and adding extension markers if EXTENSIBILITY IMPLIED is active. """ return compiler.pre_process(specification) asn1tools-0.169.0/asn1tools/errors.py000066400000000000000000000006451524544274600174450ustar00rootroot00000000000000"""Various exceptions/errors. """ class Error(Exception): """Base exception of all asn1tools exceptions. """ class CompileError(Error): """General ASN.1 compile error. """ class EncodeError(Error): """General ASN.1 encode error. """ class DecodeError(Error): """General ASN.1 decode error. """ class ConstraintsError(Error): """General ASN.1 constraints error. """ asn1tools-0.169.0/asn1tools/parser.py000066400000000000000000002037261524544274600174320ustar00rootroot00000000000000"""Convert ASN.1 specifications to Python data structures. """ import logging import re import sys from pyparsing import Literal from pyparsing import Keyword from pyparsing import Word from pyparsing import ZeroOrMore from pyparsing import Regex from pyparsing import printables from pyparsing import DelimitedList from pyparsing import Group from pyparsing import Optional from pyparsing import Forward from pyparsing import StringEnd from pyparsing import OneOrMore from pyparsing import nums from pyparsing import Suppress from pyparsing import ParseException from pyparsing import ParseSyntaxException from pyparsing import NotAny from pyparsing import NoMatch from pyparsing import QuotedString from pyparsing import Combine from pyparsing import ParseResults from pyparsing import lineno from .errors import Error LOGGER = logging.getLogger(__name__) EXTENSION_MARKER = None class ParseError(Error): pass class InternalParserError(Error): pass class Tokens(object): def __init__(self, tag, tokens): self.tag = tag self.tokens = tokens def __getitem__(self, index): return self.tokens[index] def __len__(self): return len(self.tokens) def __iter__(self): for token in self.tokens: yield token def __bool__(self): return len(self.tokens) > 0 def __eq__(self, other): return other == self.tag def __repr__(self): return "Tokens(tag='{}', tokens='{}')".format(self.tag, self.tokens) class Tag(Group): def __init__(self, tag, expr): super(Tag, self).__init__(expr) self.tag = tag def postParse(self, instring, loc, tokenlist): return Tokens(self.tag, tokenlist.asList()) def merge_dicts(dicts): return {k: v for d in dicts for k, v in d.items()} def convert_integer(_s, _l, tokens): try: return int(tokens[0]) except (IndexError, ValueError): return tokens def convert_real_number(_s, _l, tokens): if '.' not in tokens[0]: tokens = int(tokens[0]) return tokens def convert_number(token): if isinstance(token, list): token = token[0] try: return int(token) except (ValueError, TypeError): return token def convert_size(tokens): if len(tokens) == 0: return None tokens = tokens[0] if tokens[0] == 'SIZE': values = [] for item_tokens in tokens[1].asList(): if '..' in item_tokens: value = (convert_number(item_tokens[0]), convert_number(item_tokens[2])) else: value = convert_number(item_tokens[0]) values.append(value) return values elif isinstance(tokens[0], dict): if 'size' in tokens[0]: return tokens[0]['size'] def convert_table(tokens): tokens = tokens[0] try: if isinstance(tokens[1][0][0], list): defined_object_set = tokens[1][0][0][0] else: defined_object_set = tokens[1][0][0] except IndexError: return None try: component_ids = tokens[4] except IndexError: return defined_object_set return [defined_object_set, component_ids] def convert_enum_values(string, location, tokens): number = 0 values = [] used_numbers = [] root, extension = tokens root = root.asList() extension = extension.asList() def add_used_numbers(items): for item in items: if not isinstance(item, list): continue item_number = item[2] if item_number in used_numbers: raise ParseError( 'Duplicated ENUMERATED number {} at line {}.'.format( item_number, lineno(location, string))) used_numbers.append(item_number) # Root enumeration. add_used_numbers(root) for token in root: if isinstance(token, list): values.append((token[0], token[2])) else: while number in used_numbers: number += 1 used_numbers.append(number) values.append((token, number)) number += 1 # Optional additional enumeration. if extension: values.append(EXTENSION_MARKER) additional = extension[1:] add_used_numbers(additional) for token in additional: if isinstance(token, list): number = token[2] values.append((token[0], number)) else: if number in used_numbers: raise ParseError( 'Duplicated ENUMERATED number {} at line {}.'.format( number, lineno(location, string))) values.append((token, number)) used_numbers.append(number) number += 1 return values def convert_tag(tokens): if len(tokens) > 0: if len(tokens[0]) == 1: tag = { 'number': int(tokens[0][0]) } else: tag = { 'number': convert_number(tokens[0][1]), 'class': tokens[0][0] } if tokens[1]: tag['kind'] = tokens[1][0] if tokens[1] else None return tag def convert_value_range(_s, _l, tokens): tokens = tokens.asList() minimum = tokens[0] if isinstance(minimum, list): minimum = minimum[0] maximum = tokens[1] if isinstance(maximum, list): maximum = maximum[0] return (minimum, maximum) def convert_inner_type_constraints(_s, _l, tokens): tokens = tokens.asList() components = [] if tokens[0] == 'WITH COMPONENTS': for item_tokens in tokens[2]: if item_tokens == '...': value = EXTENSION_MARKER elif len(item_tokens) == 2: if isinstance(item_tokens[1], list): value = item_tokens[1][0] if isinstance(value, list): value = value[0] value = (item_tokens[0], value) else: value = (item_tokens[0], item_tokens[1]) else: value = item_tokens components.append(value) return {'with-components': components} else: return {} def convert_size_constraint(_s, _l, tokens): tokens = tokens.asList()[1] values = [] for item_tokens in tokens: if item_tokens == '...': value = EXTENSION_MARKER elif '..' in item_tokens: value = (convert_number(item_tokens[0]), convert_number(item_tokens[2])) else: value = convert_number(item_tokens[0]) values.append(value) return {'size': values} def convert_permitted_alphabet(_s, _l, tokens): tokens = tokens.asList() values = [] for token in tokens[1:]: if isinstance(token[0], list): for char in token[0][0]: values.append((char, char)) else: values.append(token[0]) return {'from': values} def convert_constraint(_s, _l, tokens): tokens = tokens.asList() # print('constraint:', tokens) def convert_members(tokens): members = [] for member_tokens in tokens: if member_tokens in [['...'], '...']: members.append(EXTENSION_MARKER) continue if member_tokens[0] == 'COMPONENTS OF': members.append({ 'components-of': member_tokens[1][0]['type'] }) continue if member_tokens[0] == '[[': members.append(convert_members(member_tokens[1])) continue if len(member_tokens) == 2: member_tokens, qualifiers = member_tokens qualifiers = qualifiers.asList() else: qualifiers = [] member = convert_type(member_tokens[2], []) member['name'] = member_tokens[0] if 'OPTIONAL' in qualifiers: member['optional'] = True if 'DEFAULT' in qualifiers: if len(qualifiers[1]) == 0: value = [] else: value = convert_value(qualifiers[1], member['type']) member['default'] = value tag = convert_tag(member_tokens[1]) if tag: member['tag'] = tag members.append(member) return members def convert_sequence_type(_s, _l, tokens): return { 'type': 'SEQUENCE', 'members': convert_members(tokens[2]) } def convert_sequence_of_type(_s, _l, tokens): is_named_element = len(tokens) == 6 converted_type = { 'type': 'SEQUENCE OF', 'element': convert_type(tokens[5 if is_named_element else 4], []), } if (is_named_element): converted_type['element_name'] = tokens[3] if len(tokens[1]) > 0: converted_type['size'] = tokens[1][0][0]['size'] if len(tokens[1]) > 1 and tokens[1][1] == '...': converted_type['size'].append(None) tag = convert_tag(tokens[4 if is_named_element else 3]) if tag: converted_type['element']['tag'] = tag return converted_type def convert_set_type(_s, _l, tokens): return { 'type': 'SET', 'members': convert_members(tokens[2]) } def convert_set_of_type(_s, _l, tokens): is_named_element = len(tokens) == 6 converted_type = { 'type': 'SET OF', 'element': convert_type(tokens[5 if is_named_element else 4], []) } if (is_named_element): converted_type['element_name'] = tokens[3] if len(tokens[1]) > 0: converted_type['size'] = tokens[1][0][0]['size'] if len(tokens[1]) > 1 and tokens[1][1] == '...': converted_type['size'].append(None) tag = convert_tag(tokens[4 if is_named_element else 3]) if tag: converted_type['element']['tag'] = tag return converted_type def convert_choice_type(_s, _l, tokens): return { 'type': 'CHOICE', 'members': convert_members(tokens[2]) } def convert_defined_type(_s, _l, tokens): converted = { 'type': tokens[0] } # actual-parameters if len(tokens) == 2: converted.update(tokens[1]) return converted def convert_integer_type(_s, _l, tokens): tokens = tokens.asList() compiled = {'type': 'INTEGER'} if tokens[1]: compiled['named-numbers'] = { item[0]: item[2] for item in tokens[1] } return compiled def convert_real_type(_s, _l, _tokens): return {'type': 'REAL'} def convert_enumerated_type(string, location, tokens): return { 'type': 'ENUMERATED', 'values': convert_enum_values(string, location, tokens[2]) } def convert_keyword_type(_s, _l, tokens): return { 'type': tokens[0] } def convert_print(_s, _l, tokens): print('convert_print', tokens) def convert_object_identifier_type(_s, _l, _tokens): return { 'type': 'OBJECT IDENTIFIER' } def convert_bit_string_type(_s, _l, tokens): converted_type = { 'type': 'BIT STRING' } named_bit_list = tokens.asList()[1] if named_bit_list: converted_type['named-bits'] = [ tuple(named_bit) for named_bit in named_bit_list ] return converted_type def convert_octet_string_type(_s, _l, _tokens): return { 'type': 'OCTET STRING' } def convert_ia5_string_type(_s, _l, _tokens): return { 'type': 'IA5String' } def convert_any_defined_by_type(_s, _l, tokens): return { 'type': 'ANY DEFINED BY', 'value': tokens[1], 'choices': {} } def convert_actual_parameter_list(_s, _l, tokens): tokens = tokens.asList()[0] converted = [] for parameter in tokens: converted.append(parameter[0][0]) if converted: converted = {'actual-parameters': converted} else: converted = None return converted def convert_parameter_list(_s, _l, tokens): tokens = tokens.asList() if tokens[0]: converted = {'parameters': tokens[0]} else: converted = None return converted def convert_null_type(_s, _l, _tokens): return { 'type': 'NULL' } def convert_boolean_type(_s, _l, _tokens): return { 'type': 'BOOLEAN' } def convert_type(tokens, parameters): converted_type, constraints = tokens restricted_to = [] for constraint_tokens in constraints: if isinstance(constraint_tokens, ParseResults): constraint_tokens = constraint_tokens.asList() if constraint_tokens == '...': if restricted_to: restricted_to.append(EXTENSION_MARKER) if 'size' in converted_type: converted_type['size'].append(None) elif len(constraint_tokens) == 1: if not isinstance(constraint_tokens[0], dict): restricted_to.append(convert_number(constraint_tokens[0])) elif 'size' in constraint_tokens[0]: converted_type.update(constraint_tokens[0]) elif 'from' in constraint_tokens[0]: converted_type.update(constraint_tokens[0]) elif 'with-components' in constraint_tokens[0]: converted_type.update(constraint_tokens[0]) if isinstance(parameters, dict): converted_type.update(parameters) if '{' in restricted_to: restricted_to = [] if restricted_to: converted_type['restricted-to'] = restricted_to types = [ 'BIT STRING', 'OCTET STRING', 'IA5String', 'BMPString', 'VisibleString', 'UTF8String', 'NumericString', 'PrintableString' ] if converted_type['type'] in types: size = convert_size(constraints) if size: converted_type['size'] = size if '&' in converted_type['type']: converted_type['table'] = convert_table(tokens.asList()[1:]) return converted_type def convert_bstring(_s, _l, tokens): return '0b' + re.sub(r"[\sB']", '', tokens[0]) def convert_hstring(_s, _l, tokens): return '0x' + re.sub(r"[\sH']", '', tokens[0]).lower() def convert_bit_string_value(tokens): value = tokens[0] if value == 'IdentifierList': value = value[:] elif isinstance(value, str): value = value else: value = None return value def convert_value(tokens, type_=None): if type_ == 'INTEGER': value = int(tokens[0]) elif type_ == 'OBJECT IDENTIFIER': value = [] for value_tokens in tokens: if len(value_tokens) == 2: value.append((value_tokens[0], int(value_tokens[1]))) else: value.append(convert_number(value_tokens[0])) elif type_ == 'BOOLEAN': value = (tokens[0] == 'TRUE') elif tokens[0] == 'BitStringValue': value = convert_bit_string_value(tokens[0]) elif isinstance(tokens[0], str): value = convert_number(tokens[0]) elif isinstance(tokens[0], int): value = tokens[0] else: value = None return value def convert_parameterized_object_set_assignment(_s, _l, tokens): members = [] try: for member_tokens in tokens[4].asList(): if len(member_tokens[0]) == 1: member = member_tokens[0][0] else: member = {} for item_tokens in member_tokens[0]: name = item_tokens[0] value = item_tokens[1][0] if isinstance(value, Tokens): value = value[0] member[name] = convert_number(value) members.append(member) except (IndexError, KeyError): pass converted_type = { 'class': tokens[1], 'members': members } return ('parameterized-object-set-assignment', tokens[0], converted_type) def convert_parameterized_object_assignment(_s, _l, tokens): type_ = tokens[1] converted_type = { 'type': type_, 'value': None } return ('parameterized-object-assignment', tokens[0], converted_type) def convert_parameterized_object_class_assignment(s, loc, tokens): members = [] for member in tokens[3]: # Not an object class definition, for example a parameterized # type assignment. Let other alternatives match it. if not isinstance(member, (Tokens, ParseResults, list)): raise ParseException(s, loc, 'Not an object class assignment.') if member[0][1].islower(): converted_member = member[1][0] if isinstance(converted_member, Tokens): converted_member = converted_member[0] else: converted_member = {'type': 'OpenType'} converted_member['name'] = member[0] members.append(converted_member) converted_type = { 'members': members } return ('parameterized-object-class-assignment', tokens[0], converted_type) def convert_parameterized_type_assignment(_s, _l, tokens): tokens = tokens.asList() converted_type = convert_type(tokens[4], tokens[1]) try: tag = convert_tag(tokens[3]) except ValueError: tag = None if tag: converted_type['tag'] = tag return ('parameterized-type-assignment', tokens[0], converted_type) def convert_parameterized_value_assignment(_s, _l, tokens): type_ = tokens[1][0][0] if isinstance(type_, Tokens): type_ = type_[0] elif isinstance(type_, dict): type_ = type_['type'] converted_type = { 'type': type_, 'value': convert_value(tokens[2], type_) } return ('parameterized-value-assignment', tokens[0], converted_type) def convert_imports(_s, _l, tokens): tokens = tokens.asList() imports = {} if tokens: for from_tokens in tokens: from_name = from_tokens[2] LOGGER.debug("Converting imports from '%s'.", from_name) imported = from_tokens[0] if from_name in imports: imported = list(set(imports[from_name] + imported)) imports[from_name] = sorted(imported) return {'imports': imports} def convert_assignment_list(_s, _l, tokens): types = {} values = {} object_classes = {} object_sets = {} for kind, name, value in tokens: if kind == 'parameterized-object-set-assignment': if name in object_sets: LOGGER.warning("Object set '%s' already defined.", name) object_sets[name] = value elif kind == 'parameterized-object-assignment': if name in values: LOGGER.warning("Object '%s' already defined.", name) values[name] = value elif kind == 'parameterized-object-class-assignment': if name in object_classes: LOGGER.warning("Object class '%s' already defined.", name) object_classes[name] = value elif kind == 'parameterized-type-assignment': if name in types: LOGGER.warning("Type '%s' already defined.", name) types[name] = value elif kind == 'parameterized-value-assignment': if name in values: LOGGER.warning("Value '%s' already defined.", name) values[name] = value else: raise InternalParserError( 'Unrecognized assignment kind {}.'.format(kind)) return { 'types': types, 'values': values, 'object-classes': object_classes, 'object-sets': object_sets } def convert_module_body(_s, _l, tokens): return merge_dicts(tokens) def convert_module_definition(_s, _l, tokens): tokens = tokens.asList() module = tokens[1][0] module['extensibility-implied'] = (tokens[0][3] != []) if tokens[0][2]: module['tags'] = tokens[0][2][0] return {tokens[0][0]: module} def convert_specification(_s, _l, tokens): return merge_dicts(tokens) def create_grammar(): """Return the ASN.1 grammar as Pyparsing objects. """ # Keywords. SEQUENCE = Keyword('SEQUENCE').set_name('SEQUENCE') CHOICE = Keyword('CHOICE').set_name('CHOICE') ENUMERATED = Keyword('ENUMERATED').set_name('ENUMERATED') DEFINITIONS = Keyword('DEFINITIONS').set_name('DEFINITIONS') BEGIN = Keyword('BEGIN').set_name('BEGIN') END = Keyword('END').set_name('END') AUTOMATIC = Keyword('AUTOMATIC').set_name('AUTOMATIC') TAGS = Keyword('TAGS').set_name('TAGS') OPTIONAL = Keyword('OPTIONAL').set_name('OPTIONAL') OF = Keyword('OF').set_name('OF') SIZE = Keyword('SIZE').set_name('SIZE') INTEGER = Keyword('INTEGER').set_name('INTEGER') REAL = Keyword('REAL').set_name('REAL') BIT_STRING = Keyword('BIT STRING').set_name('BIT STRING') OCTET_STRING = Keyword('OCTET STRING').set_name('OCTET STRING') DEFAULT = Keyword('DEFAULT').set_name('DEFAULT') IMPORTS = Keyword('IMPORTS').set_name('IMPORTS') EXPORTS = Keyword('EXPORTS').set_name('EXPORTS') FROM = Keyword('FROM').set_name('FROM') CONTAINING = Keyword('CONTAINING').set_name('CONTAINING') ENCODED_BY = Keyword('ENCODED_BY').set_name('ENCODED_BY') IMPLICIT = Keyword('IMPLICIT').set_name('IMPLICIT') EXPLICIT = Keyword('EXPLICIT').set_name('EXPLICIT') OBJECT_IDENTIFIER = Keyword('OBJECT IDENTIFIER').set_name('OBJECT IDENTIFIER') UNIVERSAL = Keyword('UNIVERSAL').set_name('UNIVERSAL') APPLICATION = Keyword('APPLICATION').set_name('APPLICATION') PRIVATE = Keyword('PRIVATE').set_name('PRIVATE') SET = Keyword('SET').set_name('SET') ANY_DEFINED_BY = Keyword('ANY DEFINED BY').set_name('ANY DEFINED BY') EXTENSIBILITY_IMPLIED = Keyword('EXTENSIBILITY IMPLIED').set_name( 'EXTENSIBILITY IMPLIED') BOOLEAN = Keyword('BOOLEAN').set_name('BOOLEAN') TRUE = Keyword('TRUE').set_name('TRUE') FALSE = Keyword('FALSE').set_name('FALSE') CLASS = Keyword('CLASS').set_name('CLASS') WITH_SYNTAX = Keyword('WITH SYNTAX').set_name('WITH SYNTAX') UNIQUE = Keyword('UNIQUE').set_name('UNIQUE') NULL = Keyword('NULL').set_name('NULL') WITH_COMPONENT = Keyword('WITH COMPONENT').set_name('WITH COMPONENT') WITH_COMPONENTS = Keyword('WITH COMPONENTS').set_name('WITH COMPONENTS') WITH_SUCCESSORS = Keyword('WITH SUCCESSORS').set_name('WITH SUCCESSORS') WITH_DESCENDANTS = Keyword('WITH DESCENDANTS').set_name('WITH DESCENDANTS') COMPONENTS_OF = Keyword('COMPONENTS OF').set_name('COMPONENTS OF') PRESENT = Keyword('PRESENT').set_name('PRESENT') ABSENT = Keyword('ABSENT').set_name('ABSENT') ALL = Keyword('ALL').set_name('ALL') EXCEPT = Keyword('EXCEPT').set_name('EXCEPT') MIN = Keyword('MIN').set_name('MIN') MAX = Keyword('MAX').set_name('MAX') INCLUDES = Keyword('INCLUDES').set_name('INCLUDES') PATTERN = Keyword('PATTERN').set_name('PATTERN') CONSTRAINED_BY = Keyword('CONSTRAINED BY').set_name('CONSTRAINED BY') UNION = Keyword('UNION').set_name('UNION') INTERSECTION = Keyword('INTERSECTION').set_name('INTERSECTION') PLUS_INFINITY = Keyword('PLUS-INFINITY').set_name('PLUS-INFINITY') MINUS_INFINITY = Keyword('MINUS-INFINITY').set_name('MINUS-INFINITY') BMPString = Keyword('BMPString').set_name('BMPString') GeneralString = Keyword('GeneralString').set_name('GeneralString') GraphicString = Keyword('GraphicString').set_name('GraphicString') IA5String = Keyword('IA5String').set_name('IA5String') ISO646String = Keyword('ISO646String').set_name('ISO646String') NumericString = Keyword('NumericString').set_name('NumericString') PrintableString = Keyword('PrintableString').set_name('PrintableString') TeletexString = Keyword('TeletexString').set_name('TeletexString') UTCTime = Keyword('UTCTime').set_name('UTCTime') GeneralizedTime = Keyword('GeneralizedTime').set_name('GeneralizedTime') T61String = Keyword('T61String').set_name('T61String') UniversalString = Keyword('UniversalString').set_name('UniversalString') UTF8String = Keyword('UTF8String').set_name('UTF8String') VideotexString = Keyword('VideotexString').set_name('VideotexString') VisibleString = Keyword('VisibleString').set_name('VisibleString') CHARACTER_STRING = Keyword('CHARACTER STRING').set_name('CHARACTER STRING') # Various literals. word = Word(printables, exclude_chars=',(){}[].:=;"|').set_name('word') identifier = Regex(r'[a-z][a-zA-Z0-9-]*').set_name('identifier') assign = Literal('::=').set_name('::=') left_parenthesis = Literal('(') right_parenthesis = Literal(')') left_brace = Literal('{') right_brace = Literal('}') left_bracket = Literal('[') right_bracket = Literal(']') left_version_brackets = Literal('[[') right_version_brackets = Literal(']]') colon = Literal(':') semi_colon = Literal(';') dot = Literal('.') range_separator = Literal('..') ellipsis = Literal('...') pipe = Literal('|') caret = Literal('^') comma = Literal(',') at = Literal('@') exclamation_mark = Literal('!') integer = Word(nums + '-') real_number = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?') bstring = Regex(r"'[01\s]*'B") hstring = Regex(r"'[0-9A-F\s]*'H") cstring = QuotedString('"') number = (Word(nums).set_name('number') + ~dot) ampersand = Literal('&') less_than = Literal('<') reserved_words = Regex(r'(END|SEQUENCE|ENUMERATED|WITH)(\s|$)') # Forward declarations. value = Forward() type_ = Forward() object_ = Forward() object_set = Forward() primitive_field_name = Forward() constraint = Forward() element_set_spec = Forward() token_or_group_spec = Forward() value_reference = Forward().set_name('valuereference') type_reference = Forward().set_name('typereference') value_set = Forward().set_name('"valueSet" not implemented') named_type = Forward() root_element_set_spec = Forward() defined_object_set = Forward() syntax_list = Forward() object_from_object = Forward() object_set_from_objects = Forward() defined_value = Forward().set_name('DefinedValue') component_type_lists = Forward() extension_and_exception = Forward() optional_extension_marker = Forward() additional_element_set_spec = Forward() reference = Forward() defined_object_class = Forward() defined_type = Forward() module_reference = Forward() external_type_reference = Forward() external_value_reference = Forward() simple_defined_type = Forward() defined_object = Forward() referenced_value = Forward() builtin_value = Forward() named_value = Forward() sequence_value = Forward() signed_number = Forward() name_and_number_form = Forward() number_form = Forward().set_name('numberForm') definitive_number_form = Forward().set_name('definitiveNumberForm') version_number = Forward() union_mark = Forward() named_number = Forward() size_constraint = Forward() value_field_reference = Combine(ampersand + value_reference) type_field_reference = Combine(ampersand + type_reference) # ToDo: Remove size_paren as they are a workaround for # SEQUENCE/SET OF. size_paren = (Suppress(Optional(left_parenthesis)) + size_constraint + Suppress(Optional(right_parenthesis))) class_number = (number | defined_value).set_name('ClassNumber') tag = Group(Optional(Suppress(left_bracket) - Group(Optional(UNIVERSAL | APPLICATION | PRIVATE) + class_number) - Suppress(right_bracket) + Group(Optional(IMPLICIT | EXPLICIT)))) any_defined_by_type = (ANY_DEFINED_BY + word) any_defined_by_type.set_name('ANY DEFINED BY') identifier_list = DelimitedList(identifier) # X.683: 8. Parameterized assignments dummy_reference = reference dummy_governor = dummy_reference governor = (type_ | defined_object_class) param_governor = (governor | dummy_governor) parameter = (Suppress(Optional(param_governor + colon)) + dummy_reference) parameter_list = Group(Optional(Suppress(left_brace) + DelimitedList(parameter) + Suppress(right_brace))) # X.683: 9. Referencing parameterized definitions actual_parameter = Group(type_ | value | value_set | defined_object_class | object_ | object_set) actual_parameter_list = Group(Suppress(left_brace) + DelimitedList(actual_parameter) + Suppress(right_brace)) parameterized_object = (defined_object + actual_parameter_list) parameterized_object_set = (defined_object_set + actual_parameter_list) parameterized_object_class = (defined_object_class + actual_parameter_list) parameterized_value_set_type = (simple_defined_type + actual_parameter_list) simple_defined_value = (external_value_reference | value_reference) parameterized_value = (simple_defined_value + actual_parameter_list) simple_defined_type <<= (external_type_reference | type_reference) parameterized_type = (simple_defined_type + actual_parameter_list) parameterized_reference = (reference + Optional(left_brace + right_brace)) # X.682: 11. Contents constraints contents_constraint = ((CONTAINING + type_) | (ENCODED_BY + value) | (CONTAINING + type_ + ENCODED_BY + value)) # X.682: 10. Table constraints, including component relation constraints level = OneOrMore(dot) component_id_list = identifier at_notation = (Suppress(at) - (component_id_list | Combine(level + component_id_list))) component_relation_constraint = (left_brace + Group(Group(defined_object_set)) + right_brace + left_brace - Group(DelimitedList(at_notation)) - right_brace) component_relation_constraint.set_name('"{"') simple_table_constraint = object_set table_constraint = (component_relation_constraint | simple_table_constraint) # X.682: 9. User-defined constants user_defined_constraint_parameter = ((governor + colon + (value | value_set | object_ | object_set)) | type_ | defined_object_class) user_defined_constraint = (CONSTRAINED_BY - left_brace - Optional(DelimitedList( user_defined_constraint_parameter)) - right_brace) user_defined_constraint.set_name('CONSTRAINED_BY') # X.682: 8. General constraint specification general_constraint = (user_defined_constraint | table_constraint | contents_constraint) # X.681: 7. ASN.1 lexical items object_set_reference = type_reference value_set_field_reference = NoMatch().set_name( '"valueSetFieldReference" not implemented') object_field_reference = NoMatch().set_name( '"objectFieldReference" not implemented') object_set_field_reference = NoMatch().set_name( '"objectSetFieldReference" not implemented') object_class_reference = (NotAny(reserved_words) + Regex(r'[A-Z][A-Z0-9-]*')) object_reference = value_reference # X.681: 8. Referencing definitions external_object_set_reference = NoMatch().set_name( '"externalObjectSetReference" not implemented') defined_object_set <<= (external_object_set_reference | object_set_reference) defined_object <<= NoMatch().set_name('"definedObject" not implemented') defined_object_class <<= object_class_reference # X.681: 9. Information object class definition and assignment field_name = primitive_field_name primitive_field_name <<= (type_field_reference | value_field_reference | value_set_field_reference | object_field_reference | object_set_field_reference) object_set_field_spec = NoMatch().set_name('"objectSetFieldSpec" not implemented') object_field_spec = NoMatch().set_name('"objectFieldSpec" not implemented') variable_type_value_set_field_spec = NoMatch().set_name( '"variableTypeValueSetFieldSpec" not implemented') fixed_type_value_set_field_spec = NoMatch().set_name( '"fixedTypeValueSetFieldSpec" not implemented') variable_type_value_field_spec = NoMatch().set_name( '"variableTypeValueFieldSpec" not implemented') fixed_type_value_field_spec = (value_field_reference + type_ + Optional(UNIQUE) + Optional(OPTIONAL | (DEFAULT - value))) type_field_spec = (type_field_reference + Optional(OPTIONAL | (DEFAULT - type_))) field_spec = Group(type_field_spec | fixed_type_value_field_spec | variable_type_value_field_spec | fixed_type_value_set_field_spec | variable_type_value_set_field_spec | object_field_spec | object_set_field_spec) with_syntax_spec = (WITH_SYNTAX - syntax_list) object_class_defn = (CLASS - Suppress(left_brace) - Group(DelimitedList(field_spec)) - Suppress(right_brace) - Optional(with_syntax_spec)) object_class = (object_class_defn # | defined_object_class | parameterized_object_class) parameterized_object_class_assignment = (object_class_reference + Suppress(parameter_list) + assign + object_class) # X.681: 10. Syntax list literal = (word | comma) required_token = (literal | primitive_field_name) optional_group = (left_bracket + OneOrMore(token_or_group_spec) + right_bracket) token_or_group_spec <<= (required_token | optional_group) syntax_list <<= (left_brace + OneOrMore(token_or_group_spec) + right_brace) # X.681: 11. Information object definition and assignment setting = (type_ | value | value_set | object_ | object_set | QuotedString('"')) field_setting = Group(primitive_field_name + setting) default_syntax = (Suppress(left_brace) + DelimitedList(field_setting) + Suppress(right_brace)) defined_syntax_token = (literal | setting) defined_syntax = (left_brace + ZeroOrMore(defined_syntax_token) + right_brace) object_defn = Group(default_syntax | defined_syntax) object_ <<= (defined_object | object_defn | object_from_object | parameterized_object) parameterized_object_assignment = (object_reference + Suppress(parameter_list) + defined_object_class + Suppress(assign) + object_) # X.681: 12. Information object set definition and assignment object_set_elements = (object_ | defined_object_set | object_set_from_objects | parameterized_object_set) object_set_spec = ((root_element_set_spec + Optional(comma + ellipsis + Optional(comma + additional_element_set_spec))) | (ellipsis + Optional(comma + additional_element_set_spec))) object_set <<= (left_brace + Group(object_set_spec) + right_brace) object_set.set_name('"{"') parameterized_object_set_assignment = (object_set_reference + Suppress(parameter_list) + defined_object_class - assign - object_set) # X.681: 13. Associated tables # X.681: 14. Notation for the object class field type fixed_type_field_val = (builtin_value | referenced_value) open_type_field_val = (type_ + colon + value) object_class_field_value = (open_type_field_val | fixed_type_field_val) object_class_field_type = Combine(defined_object_class + dot + field_name) object_class_field_type.set_name('ObjectClassFieldType') # X.681: 15. Information from objects object_set_from_objects <<= NoMatch().set_name( '"objectSetFromObjects" not implemented') object_from_object <<= NoMatch().set_name('"objectFromObject" not implemented') # X.680: 49. The exception identifier exception_spec = Optional( exclamation_mark + NoMatch().set_name('"exceptionSpec" not implemented')) # X.680: 47. Subtype elements pattern_constraint = (PATTERN + value) value_constraint = constraint presence_constraint = (PRESENT | ABSENT | OPTIONAL) component_constraint = (Optional(value_constraint) + Optional(presence_constraint)) named_constraint = Group(identifier + component_constraint) type_constraints = DelimitedList(named_constraint) full_specification = (left_brace + Group(type_constraints) + right_brace) partial_specification = (left_brace + Group(ellipsis + Suppress(comma) + type_constraints) + right_brace) single_type_constraint = constraint multiple_type_constraints = (full_specification | partial_specification) with_component = WITH_COMPONENT - single_type_constraint with_components = WITH_COMPONENTS - multiple_type_constraints inner_type_constraints = with_component | with_components permitted_alphabet = (FROM - constraint) type_constraint = type_ size_constraint <<= (SIZE - Group(constraint)) upper_end_value = (value | MAX) lower_end_value = (value | MIN) upper_endpoint = (Optional(less_than) + upper_end_value) lower_endpoint = (lower_end_value + Optional(less_than)) value_range = (((Combine(integer + dot) + Suppress(range_separator)) | (integer + Suppress(range_separator)) | (lower_endpoint + Suppress(range_separator))) - upper_endpoint) contained_subtype = (Optional(INCLUDES) + type_) single_value = value subtype_elements = (size_constraint | permitted_alphabet | value_range | inner_type_constraints | single_value | pattern_constraint | contained_subtype | type_constraint) # X.680: 46. Element set specification union_mark <<= (pipe | UNION) intersection_mark = (caret | INTERSECTION) elements = Group(subtype_elements | object_set_elements | (left_parenthesis + element_set_spec + right_parenthesis)) unions = DelimitedList(elements, delim=(union_mark | intersection_mark)) exclusions = (EXCEPT + elements) element_set_spec <<= (Suppress(ALL + exclusions) | unions) root_element_set_spec <<= element_set_spec additional_element_set_spec <<= element_set_spec element_set_specs = (root_element_set_spec + Optional(Suppress(comma) - ellipsis + Optional(Suppress(comma) - additional_element_set_spec))) # X.680: 45. Constrained types subtype_constraint = element_set_specs constraint_spec = (general_constraint | subtype_constraint) constraint_spec.set_name('one or more constraints') constraint <<= (Suppress(left_parenthesis) - constraint_spec - Suppress(right_parenthesis)) # X.680: 40. Definition of unrestricted character string types unrestricted_character_string_type = CHARACTER_STRING unrestricted_character_string_value = NoMatch().set_name( '"unrestrictedCharacterStringValue" not implemented') # X.680: 39. Canonical order of characters # X.680: 38. Specification of the ASN.1 module "ASN.1-CHARACTER-MODULE" # X.680: 37. Definition of restricted character string types group = number plane = number row = number cell = number quadruple = (left_brace + group + comma + plane + comma + row + comma + cell + right_brace) table_column = number table_row = number tuple_ = (left_brace + table_column + comma + table_row + right_brace) chars_defn = (cstring | quadruple | tuple_ | defined_value) charsyms = DelimitedList(chars_defn) character_string_list = (left_brace + charsyms + right_brace) restricted_character_string_value = (cstring | character_string_list | quadruple | tuple_) restricted_character_string_type = (BMPString | GeneralString | GraphicString | IA5String | ISO646String | NumericString | PrintableString | TeletexString | UTCTime | GeneralizedTime | T61String | UniversalString | UTF8String | VideotexString | VisibleString) # X.680: 36. Notation for character string types character_string_value = (restricted_character_string_value | unrestricted_character_string_value) character_string_type = (restricted_character_string_type | unrestricted_character_string_type) # X.680: 35. The character string types # X.680: 34. Notation for the external type # external_value = sequence_value # X.680: 33. Notation for embedded-pdv type # embedded_pdv_value = sequence_value # X.680: 32. Notation for relative object identifier type relative_oid_components = Group(number_form | name_and_number_form | defined_value) relative_oid_component_list = OneOrMore(relative_oid_components) relative_oid_value = (Suppress(left_brace) + relative_oid_component_list + Suppress(right_brace)) # X.680: 31. Notation for object identifier type name_and_number_form <<= (identifier + Suppress(left_parenthesis) - number_form - Suppress(right_parenthesis)) number_form <<= (number | defined_value) name_form = identifier obj_id_components = Group(name_and_number_form | defined_value | number_form | name_form) obj_id_components_list = OneOrMore(obj_id_components) object_identifier_value = ((Suppress(left_brace) + obj_id_components_list + Suppress(right_brace)) | (Suppress(left_brace) + defined_value + obj_id_components_list + Suppress(right_brace))) object_identifier_type = (OBJECT_IDENTIFIER + Optional(left_parenthesis + DelimitedList(word, delim='|') + right_parenthesis)) object_identifier_type.set_name('OBJECT IDENTIFIER') # X.680: 30. Notation for tagged types tagged_value = NoMatch() # X.680: 29. Notation for selection types # X.680: 28. Notation for the choice types alternative_type_list = DelimitedList(named_type) extension_addition_alternatives_group = Group(left_version_brackets + Suppress(version_number) - Group(alternative_type_list) - right_version_brackets) extension_addition_alternative = (extension_addition_alternatives_group | named_type) extension_addition_alternatives_list = DelimitedList(extension_addition_alternative) extension_addition_alternatives = Optional(Suppress(comma) + extension_addition_alternatives_list) root_alternative_type_list = alternative_type_list alternative_type_lists = (root_alternative_type_list + Optional(Suppress(comma) + extension_and_exception + extension_addition_alternatives + optional_extension_marker)) choice_type = (CHOICE - left_brace + Group(alternative_type_lists) - right_brace) choice_type.set_name('CHOICE') choice_value = (identifier + colon + value) # X.680: 27. Notation for the set-of types # set_of_value = NoMatch() set_of_type = (SET + Group(Optional(Group(size_constraint) | constraint)) + OF + Optional(identifier) - tag - type_) set_of_type.set_name('SET OF') # X.680: 26. Notation for the set types # set_value = NoMatch() set_type = (SET + left_brace + Group(Optional(component_type_lists | (extension_and_exception + optional_extension_marker))) - right_brace) set_type.set_name('SET') # X.680: 25. Notation for the sequence-of types sequence_of_value = NoMatch() sequence_of_type = (SEQUENCE + Group(Optional(Group(size_constraint) | constraint)) + OF + Optional(identifier) - tag - type_) sequence_of_type.set_name('SEQUENCE OF') # X.680: 24. Notation for the sequence types component_value_list = DelimitedList(named_value) sequence_value <<= (left_brace + Optional(component_value_list) + right_brace) component_type = Group(named_type + Group(Optional(OPTIONAL | (DEFAULT + value))) | (COMPONENTS_OF - type_)) version_number <<= Optional(number + Suppress(colon)) extension_addition_group = Group(left_version_brackets + Suppress(version_number) + Group(DelimitedList(component_type)) + right_version_brackets) extension_and_exception <<= (ellipsis + Optional(exception_spec)) extension_addition = (component_type | extension_addition_group) extension_addition_list = DelimitedList(extension_addition) extension_additions = Optional(Suppress(comma) + extension_addition_list) extension_end_marker = (Suppress(comma) + ellipsis) optional_extension_marker <<= Optional(Suppress(comma) + ellipsis) component_type_list = DelimitedList(component_type) root_component_type_list = component_type_list component_type_lists <<= ((root_component_type_list + Optional(Suppress(comma) + extension_and_exception + extension_additions + ((extension_end_marker + Suppress(comma) + root_component_type_list) | optional_extension_marker))) | (extension_and_exception + extension_additions + ((extension_end_marker + Suppress(comma) + root_component_type_list) | optional_extension_marker))) sequence_type = (SEQUENCE - left_brace + Group(Optional(component_type_lists | (extension_and_exception + optional_extension_marker))) - right_brace) sequence_type.set_name('SEQUENCE') # X.680: 23. Notation for the null type null_value = NULL null_type = NULL # X.680: 22. Notation for the octetstring type # octet_string_value = (bstring # | hstring # | (CONTAINING + value)) octet_string_type = OCTET_STRING octet_string_type.set_name('OCTET STRING') # X.680: 21. Notation for the bitstring type bit_string_type = (BIT_STRING + Group(Optional( Suppress(left_brace) + DelimitedList(Group(word + Suppress(left_parenthesis) + word + Suppress(right_parenthesis))) + Suppress(right_brace)))) bit_string_type.set_name('BIT STRING') bit_string_value = Tag('BitStringValue', bstring | hstring | Tag('IdentifierList', Suppress(left_brace) + Optional(identifier_list) + Suppress(right_brace)) | (CONTAINING - value)) # X.680: 20. Notation for the real type special_real_value = (PLUS_INFINITY | MINUS_INFINITY) numeric_real_value = (real_number | sequence_value) real_value = (numeric_real_value | special_real_value) real_type = REAL real_type.set_name('REAL') # X.680: 19. Notation for the enumerated type enumerated_value = identifier enumeration_item = (named_number | identifier) enumeration = DelimitedList(enumeration_item) root_enumeration = enumeration additional_enumeration = enumeration enumerations = Group(Group(root_enumeration) + Group(Optional(Group(Suppress(comma - ellipsis + exception_spec)) + Optional(Suppress(comma) - additional_enumeration)))) enumerated_type = (ENUMERATED - left_brace + enumerations - right_brace) enumerated_type.set_name('ENUMERATED') # X.680: 18. Notation for the integer type integer_value = (signed_number | identifier) signed_number <<= Combine(Optional('-') + number) named_number <<= Group(identifier + left_parenthesis + (signed_number | defined_value) + right_parenthesis) named_number_list = DelimitedList(named_number) integer_type = (INTEGER + Group(Optional(Suppress(left_brace) + named_number_list + Suppress(right_brace)))) integer_type.set_name('INTEGER') # X.680: 17. Notation for boolean type boolean_type = BOOLEAN boolean_value = (TRUE | FALSE) # X.680: 16. Definition of types and values named_value <<= (identifier + value) referenced_value <<= NoMatch().set_name('"referencedValue" not implemented') builtin_value <<= (bit_string_value | boolean_value | character_string_value | choice_value | relative_oid_value | sequence_value # | embedded_pdv_value | enumerated_value # | external_value # | instance_of_value | real_value | integer_value | null_value | object_identifier_value # | octet_string_value | sequence_of_value # | set_value # | set_of_value | tagged_value) value <<= Group(object_class_field_value) # | referenced_value # | builtin_value) named_type <<= Group(identifier - tag - type_) referenced_type = defined_type referenced_type.set_name('ReferencedType') builtin_type = (choice_type | integer_type | null_type | real_type | bit_string_type | octet_string_type | enumerated_type | sequence_of_type | sequence_type | object_class_field_type | set_of_type | set_type | object_identifier_type | boolean_type | character_string_type) type_ <<= Group((builtin_type | any_defined_by_type | referenced_type).set_name('Type') + Group(ZeroOrMore(constraint))) # X.680: 15. Assigning types and values type_reference <<= (NotAny(reserved_words) + Regex(r'[A-Z][a-zA-Z0-9-]*')) value_reference <<= Regex(r'[a-z][a-zA-Z0-9-]*') value_set <<= NoMatch().set_name('"valueSet" not implemented') parameterized_type_assignment = (type_reference + parameter_list - assign - tag - type_) parameterized_value_assignment = (value_reference + Suppress(parameter_list) - Group(type_) - Suppress(assign) - value) # X.680: 14. Notation to support references to ASN.1 components # X.680: 13. Referencing type and value definitions external_value_reference <<= (module_reference + dot + value_reference) external_type_reference <<= (module_reference + dot + type_reference) defined_type <<= (external_type_reference | parameterized_type | parameterized_value_set_type | type_reference) defined_value <<= (external_value_reference | parameterized_value | value_reference) # X.680: 12. Module definition module_reference <<= (NotAny(reserved_words) + Regex(r'[A-Z][a-zA-Z0-9-]*').set_name('modulereference')) assigned_identifier = Suppress(Optional(object_identifier_value | (defined_value + ~(comma | FROM)))) global_module_reference = (module_reference + assigned_identifier) reference <<= (type_reference | value_reference | object_class_reference | object_reference | object_set_reference) symbol = (parameterized_reference | reference) symbol_list = Group(DelimitedList(symbol)) symbols_from_module = (symbol_list + FROM + global_module_reference + Suppress(Optional(WITH_SUCCESSORS | WITH_DESCENDANTS))) symbols_imported = ZeroOrMore(Group(symbols_from_module)) imports = Optional(Suppress(IMPORTS) - symbols_imported - Suppress(semi_colon)) symbols_exported = OneOrMore(symbol_list) exports = Suppress(Optional(EXPORTS - (ALL | symbols_exported) + semi_colon)) assignment = (parameterized_object_set_assignment | parameterized_object_assignment | parameterized_object_class_assignment | parameterized_type_assignment | parameterized_value_assignment) assignment_list = ZeroOrMore(assignment) module_body = (exports + imports + assignment_list) definitive_name_and_number_form = (identifier + Suppress(left_parenthesis) - definitive_number_form - Suppress(right_parenthesis)) definitive_number_form <<= number definitive_obj_id_component = Group(definitive_name_and_number_form | name_form | definitive_number_form) definitive_obj_id_components_list = OneOrMore(definitive_obj_id_component) definitive_identifier = Group(Optional(Suppress(left_brace) - definitive_obj_id_components_list - Suppress(right_brace))) module_identifier = (module_reference + definitive_identifier) tag_default = Group(Optional((AUTOMATIC | EXPLICIT | IMPLICIT) + TAGS)) extension_default = Group(Optional(EXTENSIBILITY_IMPLIED)) module_definition = (Group(module_identifier - Suppress(DEFINITIONS) + tag_default + extension_default - Suppress(assign) - Suppress(BEGIN)) + Group(module_body) - Suppress(END)) # The whole specification. specification = OneOrMore(module_definition) + StringEnd() # Parse actions converting tokens to asn1tools representation. integer.set_parse_action(convert_integer) signed_number.set_parse_action(convert_integer) real_number.set_parse_action(convert_real_number) bstring.set_parse_action(convert_bstring) hstring.set_parse_action(convert_hstring) value_range.set_parse_action(convert_value_range) with_component.set_parse_action(convert_inner_type_constraints) with_components.set_parse_action(convert_inner_type_constraints) size_constraint.set_parse_action(convert_size_constraint) permitted_alphabet.set_parse_action(convert_permitted_alphabet) constraint.set_parse_action(convert_constraint) module_body.set_parse_action(convert_module_body) specification.set_parse_action(convert_specification) module_definition.set_parse_action(convert_module_definition) assignment_list.set_parse_action(convert_assignment_list) imports.set_parse_action(convert_imports) parameterized_object_set_assignment.set_parse_action( convert_parameterized_object_set_assignment) parameterized_object_assignment.set_parse_action( convert_parameterized_object_assignment) parameterized_object_class_assignment.set_parse_action( convert_parameterized_object_class_assignment) parameterized_type_assignment.set_parse_action( convert_parameterized_type_assignment) parameterized_value_assignment.set_parse_action( convert_parameterized_value_assignment) sequence_type.set_parse_action(convert_sequence_type) sequence_of_type.set_parse_action(convert_sequence_of_type) set_type.set_parse_action(convert_set_type) set_of_type.set_parse_action(convert_set_of_type) integer_type.set_parse_action(convert_integer_type) real_type.set_parse_action(convert_real_type) boolean_type.set_parse_action(convert_boolean_type) bit_string_type.set_parse_action(convert_bit_string_type) octet_string_type.set_parse_action(convert_octet_string_type) null_type.set_parse_action(convert_null_type) object_identifier_type.set_parse_action(convert_object_identifier_type) enumerated_type.set_parse_action(convert_enumerated_type) choice_type.set_parse_action(convert_choice_type) defined_type.set_parse_action(convert_defined_type) character_string_type.set_parse_action(convert_keyword_type) object_class_field_type.set_parse_action(convert_keyword_type) any_defined_by_type.set_parse_action(convert_any_defined_by_type) actual_parameter_list.set_parse_action(convert_actual_parameter_list) parameter_list.set_parse_action(convert_parameter_list) return specification def ignore_comments(string): """Ignore comments in given string by replacing them with spaces. This reduces the parsing time by roughly a factor of two. """ comments = [ (mo.start(), mo.group(0)) for mo in re.finditer(r'(/\*|\*/|--|\n)', string) ] comments.sort() in_single_line_comment = False multi_line_comment_depth = 0 start_offset = 0 non_comment_offset = 0 chunks = [] for offset, kind in comments: if in_single_line_comment: if kind in ['--', '\n']: in_single_line_comment = False if kind == '--': offset += 2 chunks.append(' ' * (offset - start_offset)) non_comment_offset = offset elif multi_line_comment_depth > 0: if kind == '/*': multi_line_comment_depth += 1 elif kind == '*/': multi_line_comment_depth -= 1 if multi_line_comment_depth == 0: offset += 2 chunks.append(' ' * (offset - start_offset)) non_comment_offset = offset elif kind == '--': in_single_line_comment = True start_offset = offset chunks.append(string[non_comment_offset:start_offset]) elif kind == '/*': multi_line_comment_depth = 1 start_offset = offset chunks.append(string[non_comment_offset:start_offset]) if in_single_line_comment: raise ParseSyntaxException( string, start_offset, 'Missing newline or -- for single line comment') if multi_line_comment_depth > 0: raise ParseSyntaxException( string, start_offset, 'Missing */ for multi line comment') chunks.append(string[non_comment_offset:]) return ''.join(chunks) def parse_string(string): """Parse given ASN.1 specification string and return a dictionary of its contents. The dictionary can later be compiled with :func:`~asn1tools.compile_dict()`. >>> with open('foo.asn') as fin: ... foo = asn1tools.parse_string(fin.read()) """ grammar = create_grammar() try: string = ignore_comments(string) tokens = grammar.parse_string(string).asList() except (ParseException, ParseSyntaxException) as e: raise ParseError("Invalid ASN.1 syntax at line {}, column {}: '{}': {}.".format( e.lineno, e.column, e.mark_input_line(), e.msg)) return tokens[0] def parse_files(filenames, encoding='utf-8'): """Parse given ASN.1 specification file(s) and return a dictionary of its/their contents. The dictionary can later be compiled with :func:`~asn1tools.compile_dict()`. `encoding` is the text encoding. This argument is passed to the built-in function `open()`. >>> foo = asn1tools.parse_files('foo.asn') """ if isinstance(filenames, str): filenames = [filenames] string = '' for filename in filenames: if sys.version_info[0] < 3: with open(filename, 'r') as fin: string += fin.read() string += '\n' else: with open(filename, 'r', encoding=encoding, errors='replace') as fin: string += fin.read() string += '\n' return parse_string(string) asn1tools-0.169.0/asn1tools/source/000077500000000000000000000000001524544274600170525ustar00rootroot00000000000000asn1tools-0.169.0/asn1tools/source/__init__.py000066400000000000000000000000321524544274600211560ustar00rootroot00000000000000# Source code generators. asn1tools-0.169.0/asn1tools/source/c/000077500000000000000000000000001524544274600172745ustar00rootroot00000000000000asn1tools-0.169.0/asn1tools/source/c/__init__.py000066400000000000000000000276121524544274600214150ustar00rootroot00000000000000import time from ...version import __version__ from . import oer from . import uper from .utils import camel_to_snake_case HEADER_FMT = '''\ /** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version {version} {date}. */ #ifndef {include_guard} #define {include_guard} #include #include #include #ifndef ENOMEM # define ENOMEM 12 #endif #ifndef EINVAL # define EINVAL 22 #endif #ifndef EOUTOFDATA # define EOUTOFDATA 500 #endif #ifndef EBADCHOICE # define EBADCHOICE 501 #endif #ifndef EBADLENGTH # define EBADLENGTH 502 #endif #ifndef EBADENUM # define EBADENUM 503 #endif {structs} {declarations} #endif ''' SOURCE_FMT = '''\ /** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version {version} {date}. */ #include #include "{header}" {helpers} {definitions}\ ''' FUZZER_SOURCE_FMT = '''\ /** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version {version} {date}. */ #include #include #include #include #include #include "{header}" static void assert_first_encode(ssize_t res) {{ if (res < 0) {{ printf("First encode failed with %ld.\\n", res); __builtin_trap(); }} }} static void assert_second_decode(ssize_t res) {{ if (res < 0) {{ printf("Second decode failed with %ld.\\n", res); __builtin_trap(); }} }} static void assert_second_decode_data(const void *decoded_p, const void *decoded2_p, size_t size) {{ if (memcmp(decoded_p, decoded2_p, size) != 0) {{ printf("Second decode data does not match first decoded data.\\n"); __builtin_trap(); }} }} static void assert_second_encode(ssize_t res, ssize_t res2) {{ if (res != res2) {{ printf("Second encode result %ld does not match first pack " "result %ld.\\n", res, res2); __builtin_trap(); }} }} static void assert_second_encode_data(const uint8_t *encoded_p, const uint8_t *encoded2_p, ssize_t size) {{ ssize_t i; if (memcmp(encoded_p, encoded2_p, size) != 0) {{ for (i = 0; i < size; i++) {{ printf("[%04ld]: 0x%02x 0x%02x\\n", i, encoded_p[i], encoded2_p[i]); }} __builtin_trap(); }} }} {tests} int LLVMFuzzerTestOneInput(const uint8_t *data_p, size_t size) {{ {llvm_body} return (0); }} ''' FUZZER_MAKEFILE_FMT = '''\ # # The MIT License (MIT) # # Copyright (c) 2018-2019 Erik Moqvist # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, copy, # modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # # # This file was generated by asn1tools version {version} {date}. # CC = clang EXE = fuzzer C_SOURCES = \\ \t{source} \\ \t{fuzzer_source} CFLAGS = \\ \t-fprofile-instr-generate \\ \t-fcoverage-mapping \\ \t-I. \\ \t-g -fsanitize=address,fuzzer \\ \t-fsanitize=signed-integer-overflow \\ \t-fno-sanitize-recover=all EXECUTION_TIME ?= 5 all: \t$(CC) $(CFLAGS) $(C_SOURCES) -o $(EXE) \trm -f $(EXE).profraw \tLLVM_PROFILE_FILE="$(EXE).profraw" \\ \t ./$(EXE) \\ \t -max_total_time=$(EXECUTION_TIME) \tllvm-profdata merge -sparse $(EXE).profraw -o $(EXE).profdata \tllvm-cov show ./$(EXE) -instr-profile=$(EXE).profdata \tllvm-cov report ./$(EXE) -instr-profile=$(EXE).profdata ''' TEST_FMT = ''' static void test_{name}( const uint8_t *encoded_p, size_t size) {{ ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct {name}_t decoded; struct {name}_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = {name}_decode( &decoded, encoded_p, size); if (res >= 0) {{ res = {name}_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = {name}_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = {name}_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); }} }}\ ''' def _generate_fuzzer_source(namespace, compiled, date, header_name, source_name, fuzzer_source_name): tests = [] calls = [] for module_name, module in sorted(compiled.modules.items()): for type_name in sorted(module): name = '{}_{}_{}'.format(namespace, camel_to_snake_case(module_name), camel_to_snake_case(type_name)) test = TEST_FMT.format(name=name) tests.append(test) call = ' test_{}(data_p, size);'.format(name) calls.append(call) source = FUZZER_SOURCE_FMT.format(version=__version__, date=date, header=header_name, tests='\n'.join(tests), llvm_body='\n'.join(calls)) makefile = FUZZER_MAKEFILE_FMT.format(version=__version__, date=date, source=source_name, fuzzer_source=fuzzer_source_name) return source, makefile def generate(compiled, codec, namespace, header_name, source_name, fuzzer_source_name): """Generate C source code from given compiled specification. `namespace` is used as a prefix for all defines, data structures and functions. `header_name` is the file name of the C header file, which is included by the C source file. `source_name` is the file name of the C source file, which is needed by the fuzzer makefile. `fuzzer_source_name` is the file name of the C source file, which is needed by the fuzzer makefile. This function returns a tuple of the C header and source files as strings. """ date = time.ctime() namespace = camel_to_snake_case(namespace) include_guard = '{}_H'.format(namespace.upper()) if codec == 'oer': structs, declarations, helpers, definitions = oer.generate( compiled, namespace) elif codec == 'uper': structs, declarations, helpers, definitions = uper.generate( compiled, namespace) else: raise Exception() header = HEADER_FMT.format(version=__version__, date=date, include_guard=include_guard, structs=structs, declarations=declarations) source = SOURCE_FMT.format(version=__version__, date=date, header=header_name, helpers=helpers, definitions=definitions) fuzzer_source, fuzzer_makefile = _generate_fuzzer_source( namespace, compiled, date, header_name, source_name, fuzzer_source_name) return header, source, fuzzer_source, fuzzer_makefile asn1tools-0.169.0/asn1tools/source/c/oer.py000066400000000000000000001260731524544274600204440ustar00rootroot00000000000000"""Basic Octet Encoding Rules (OER) C source code codec generator. """ from operator import itemgetter import bitstruct import textwrap from .utils import ENCODER_AND_DECODER_STRUCTS from .utils import Generator from .utils import camel_to_snake_case from .utils import is_user_type from .utils import indent_lines from .utils import dedent_lines from .utils import canonical from .oer_functions import functions from ...codecs import oer def get_encoded_real_lengths(type_): return [4] if type_.fmt == '>f' else [8] def get_sequence_optionals(type_): return [ member for member in type_.root_members if member.optional or member.default is not None ] def get_sequence_extension_bit(type_): return 1 if type_.additions is not None else 0 def get_sequence_present_mask_length(optionals, extension_bit): return (len(optionals) + extension_bit + 7) // 8 def get_length_determinant_length(length): if length < 128: return 1 elif length < 256: return 2 elif length < 65536: return 3 elif length < 1677726: return 4 else: return 5 def add_encoded_lengths(lengths): length = 0 for length_part in lengths: if isinstance(length_part, int): length += length_part else: length = None break return length def encoded_lengths_as_string(lengths): length = 0 length_strings = [] for length_part in lengths: if isinstance(length_part, int): length += length_part else: length_strings.append(length_part) if length > 0 or len(length_strings) == 0: length_strings.append(str(length) + 'u') return ' + '.join(length_strings) def get_sequence_additions_mask_length(additions): return (len(additions) + 7) // 8 def format_null_inner(): return ( [ '(void)encoder_p;', '(void)src_p;' ], [ '(void)decoder_p;', '(void)dst_p;' ] ) class _Generator(Generator): def __init__(self, namespace): super(_Generator, self).__init__(namespace) self.additional_helpers = {} def format_real(self, type_): if type_.fmt is None: raise self.error('REAL not IEEE 754 binary32 or binary64.') if type_.fmt == '>f': return ['float'] else: return ['double'] def get_enumerated_value_length(self, value): if -128 <= value < 128: return 1 elif -32768 <= value < 32768: return 2 elif -8388608 <= value < 8388608: return 3 elif -2147483648 <= value < 2147483648: return 4 else: raise self.error( '{} does not fit in int32_t.'.format(value)) def get_enumerated_values(self, type_): return sorted([(canonical(data), value) for data, value in type_.data_to_value.items()], key=itemgetter(1)) def get_choice_members(self, type_): return type_.root_members def format_default(self, type_): if isinstance(type_, oer.Boolean): return str(type_.default).lower() elif isinstance(type_, oer.Enumerated): return self.format_default_enumerated(type_) else: return str(type_.default) def format_type(self, type_, checker): if isinstance(type_, oer.Integer): return self.format_integer(checker) elif isinstance(type_, oer.Boolean): return self.format_boolean() elif isinstance(type_, oer.Real): return self.format_real(type_) elif isinstance(type_, oer.Null): return [] elif is_user_type(type_): return self.format_user_type(type_.type_name, type_.module_name) elif isinstance(type_, oer.OctetString): return self.format_octet_string(checker) elif isinstance(type_, oer.Sequence): return self.format_sequence(type_, checker) elif isinstance(type_, oer.Choice): return self.format_choice(type_, checker) elif isinstance(type_, oer.SequenceOf): return self.format_sequence_of(type_, checker) elif isinstance(type_, oer.Enumerated): return self.format_enumerated(type_) elif isinstance(type_, oer.BitString): return self.format_bit_string(type_, checker) else: raise self.error( "Unsupported type '{}'.".format(type_.type_name)) def get_encoded_type_lengths(self, type_, checker): if isinstance(type_, oer.Integer): return self.get_encoded_integer_lengths(checker) elif isinstance(type_, oer.Boolean): return [1] elif isinstance(type_, oer.Real): return get_encoded_real_lengths(type_) elif isinstance(type_, oer.Null): return [0] elif isinstance(type_, oer.OctetString): return self.get_encoded_octet_string_lengths(type_, checker) elif isinstance(type_, oer.Sequence): return self.get_encoded_sequence_lengths(type_, checker) elif isinstance(type_, oer.Choice): return self.get_encoded_choice_lengths(type_, checker) elif isinstance(type_, oer.SequenceOf): return self.get_encoded_sequence_of_lengths(type_, checker) elif isinstance(type_, oer.Enumerated): return self.get_encoded_enumerated_length(type_) else: raise self.error( "Unsupported type '{}'.".format(type_.type_name)) def generate_type_declaration_process(self, type_, checker): if isinstance(type_, oer.Integer): lines = self.format_integer(checker) lines[0] += ' value;' elif isinstance(type_, oer.Boolean): lines = self.format_boolean() lines[0] += ' value;' elif isinstance(type_, oer.Real): lines = self.format_real(type_) lines[0] += ' value;' elif isinstance(type_, oer.Enumerated): lines = self.format_enumerated(type_) lines[0] += ' value;' elif isinstance(type_, oer.Sequence): lines = self.format_sequence(type_, checker)[1:-1] lines = dedent_lines(lines) elif isinstance(type_, oer.SequenceOf): lines = self.format_sequence_of(type_, checker)[1:-1] lines = dedent_lines(lines) elif isinstance(type_, oer.Choice): lines = self.format_choice(type_, checker) lines = dedent_lines(lines[1:-1]) elif isinstance(type_, oer.OctetString): lines = self.format_octet_string(checker)[1:-1] lines = dedent_lines(lines) elif isinstance(type_, oer.BitString): lines = self.format_bit_string(type_, checker) lines[0] += ' value;' elif isinstance(type_, oer.Null): lines = [] else: raise self.error( "Unsupported type '{}'.".format(type_.type_name)) return lines def format_integer_inner(self, checker): type_name = self.format_type_name(checker.minimum, checker.maximum)[:-2] return ( [ 'encoder_append_{}(encoder_p, src_p->{});'.format( type_name, self.location_inner()) ], [ 'dst_p->{} = decoder_read_{}(decoder_p);'.format( self.location_inner(), type_name) ] ) def format_bit_string_inner(self, checker): max_value = 2**checker.minimum - 1 type_name = self.format_type_name(max_value, max_value) type_length = self.value_length(max_value) if type_length <= 4: encode_lines = [ 'encoder_append_uint(encoder_p, (uint32_t)src_p->{}, {});'.format( self.location_inner(), type_length) ] decode_lines = [ 'dst_p->{} = ({})decoder_read_uint(decoder_p, {});'.format( self.location_inner(), type_name, type_length) ] else: encode_lines = [ 'encoder_append_long_uint(encoder_p, (uint64_t)src_p->{}, {});'.format( self.location_inner(), type_length) ] decode_lines = [ 'dst_p->{} = ({})decoder_read_long_uint(decoder_p, {});'.format( self.location_inner(), type_name, type_length) ] if type_length == 3: decode_lines += [ 'dst_p->{} &= 0x00ffffffu;'.format( self.location_inner()) ] return encode_lines, decode_lines def get_encoded_integer_lengths(self, checker): return [self.type_length(checker.minimum, checker.maximum) // 8] def format_boolean_inner(self): return ( [ 'encoder_append_bool(encoder_p, src_p->{});'.format( self.location_inner()) ], [ 'dst_p->{} = decoder_read_bool(decoder_p);'.format( self.location_inner()) ] ) def format_real_inner(self, type_): if type_.fmt == '>f': c_type = 'float' else: c_type = 'double' return ( [ 'encoder_append_{}(encoder_p, src_p->{});'.format( c_type, self.location_inner()) ], [ 'dst_p->{} = decoder_read_{}(decoder_p);'.format( self.location_inner(), c_type) ] ) def format_sequence_inner(self, type_, checker): encode_lines = [] decode_lines = [] optionals = get_sequence_optionals(type_) extension_bit = get_sequence_extension_bit(type_) present_mask_length = get_sequence_present_mask_length(optionals, extension_bit) default_condition_by_member_name = {} if present_mask_length > 0: fmt = 'uint8_t {{}}[{}];'.format(present_mask_length) unique_present_mask = self.add_unique_variable(fmt, 'present_mask') start_set_byte = 0 if extension_bit == 1 and len(type_.additions) > 0: if_line = 'if({}) {{'.format(self.get_addition_present_condition(type_)) encode_lines.extend(textwrap.wrap(if_line, 100, subsequent_indent=' ' * len('if('))) encode_lines.append(' {}[0] = 0x80;'.format(unique_present_mask)) encode_lines.append('}') encode_lines.append('else {') encode_lines.append(' {}[0] = 0x0;'.format(unique_present_mask)) encode_lines.append('}') start_set_byte = 1 for i in range(start_set_byte, present_mask_length): encode_lines.append('{}[{}] = 0;'.format(unique_present_mask, i)) encode_lines.append('') decode_lines += [ 'decoder_read_bytes(decoder_p,', ' &{}[0],'.format(unique_present_mask), ' sizeof({}));'.format(unique_present_mask), '' ] for i, member in enumerate(optionals, start=extension_bit): byte, bit = divmod(i, 8) mask = '0x{:02x}'.format(1 << (7 - bit)) present_mask = '{}[{}]'.format(unique_present_mask, byte) default_condition = '({0} & {1}u) == {1}u'.format(present_mask, mask) default_condition_by_member_name[member.name] = default_condition if member.optional: encode_lines += [ 'if (src_p->{}is_{}_present) {{'.format( self.location_inner('', '.'), canonical(member.name)), ' {} |= {}u;'.format(present_mask, mask), '}', '' ] decode_lines.append( 'dst_p->{0}is_{1}_present = (({2} & {3}u) == {3}u);'.format( self.location_inner('', '.'), canonical(member.name), present_mask, mask)) else: inner = ' {} |= {}u;'.format(present_mask, mask) if self.is_buffer_type(member): default_variable = canonical(member.name) + '_default' encode_lines += [ 'if ((memcmp(src_p->{}{}.buf, {}, sizeof({})) != 0) ||'.format( self.location_inner('', '.'), canonical(member.name), default_variable, default_variable, self.format_default(member)), ' (src_p->{}{}.length != sizeof({}))) {{'.format( self.location_inner('', '.'), canonical(member.name), default_variable), inner, '}', '' ] else: encode_lines += [ 'if (src_p->{}{}{} != {}) {{'.format( self.location_inner('', '.'), canonical(member.name), '.value' if self.is_complex_user_type(member) else '', self.format_default(member)), inner, '}', '' ] encode_lines += [ 'encoder_append_bytes(encoder_p,', ' &{}[0],'.format(unique_present_mask), ' sizeof({}));'.format(unique_present_mask), '' ] decode_lines.append('') for member in type_.root_members: (member_encode_lines, member_decode_lines) = self.format_sequence_inner_member( member, checker, default_condition_by_member_name) encode_lines += member_encode_lines decode_lines += member_decode_lines if type_.additions is not None and len(type_.additions) > 0: additions_encode_lines, additions_decode_lines = ( self.format_sequence_additions(type_, checker)) addition_condition = 'if(({}[0] & 0x80u) == 0x80u) {{'.format( unique_present_mask) encode_lines += [ '', addition_condition ] + indent_lines(additions_encode_lines) + [ '}' ] decode_lines += [ '', addition_condition ] + indent_lines(additions_decode_lines) + [ '}', 'else {' ] + [ ' dst_p->{}is_{}_addition_present = false;'.format( self.location_inner('', '.'), addition.name) for addition in type_.additions] + [ '}' ] return encode_lines, decode_lines def format_sequence_additions(self, type_, checker): encode_lines = [''] decode_lines = [''] addition_mask_length = get_sequence_additions_mask_length(type_.additions) addition_mask_unused_bits = (addition_mask_length * 8) - len(type_.additions) encode_lines.append('encoder_append_length_determinant(encoder_p, {});'.format( addition_mask_length + 1)) unique_addition_length = self.add_unique_decode_variable( 'uint32_t {};', 'addition_length') decode_lines += [ '{} = decoder_read_length_determinant(decoder_p);'.format( unique_addition_length), '', 'if({} <= 1u) {{'.format(unique_addition_length), ' decoder_abort(decoder_p, EBADLENGTH);', '', ' return;', '}', '{} -= 1u;'.format(unique_addition_length)] encode_lines.append('encoder_append_uint8(encoder_p, {});'.format( addition_mask_unused_bits)) unique_addition_unused_bits = self.add_unique_decode_variable( 'uint8_t {};', 'addition_unused_bits') unique_addition_bits = self.add_unique_decode_variable( 'uint32_t {};', 'addition_bits') decode_lines += [ '{} = decoder_read_uint8(decoder_p);'.format(unique_addition_unused_bits), '', 'if ({} > 7u) {{'.format(unique_addition_unused_bits), ' decoder_abort(decoder_p, EBADLENGTH);', '', ' return;', '}', '{} = (({} * 8u) - {});'.format(unique_addition_bits, unique_addition_length, unique_addition_unused_bits)] fmt = 'uint8_t {{}}[{}];'.format(addition_mask_length) unique_addition_mask = self.add_unique_variable( fmt, 'addition_mask') for i in range(addition_mask_length): encode_lines.append('{}[{}] = 0;'.format(unique_addition_mask, i)) for i, addition in enumerate(type_.additions): byte, bit = divmod(i, 8) mask = '0x{:02x}'.format(1 << (7 - bit)) addition_mask = '{}[{}]'.format(unique_addition_mask, byte) encode_lines += [ '', 'if (src_p->{}is_{}_addition_present) {{'.format( self.location_inner('', '.'), addition.name), ' {} |= {}u;'.format(addition_mask, mask), '}' ] encode_lines += [ 'encoder_append_bytes(encoder_p,', ' &{}[0],'.format(unique_addition_mask), ' sizeof({}));'.format(unique_addition_mask)] unique_i = self.add_unique_decode_variable('uint32_t {};', 'i') unique_tmp_addition_mask = self.add_unique_decode_variable('uint8_t {};', 'tmp_addition_mask') unique_unknown_addition_bits = self.add_unique_decode_variable( 'uint32_t {};', 'unknown_addition_bits') unique_mask = self.add_unique_decode_variable('uint8_t {};', 'mask') decode_lines += [ 'decoder_read_bytes(decoder_p,', ' {mask},'.format(mask=unique_addition_mask), ' ({read} < {defined}u) ? {read} : {defined}u);'.format( read=unique_addition_length, defined=addition_mask_length), '', '{} = {}[{}];'.format(unique_tmp_addition_mask, unique_addition_mask, addition_mask_length - 1), '{} = 0x{:02x};'.format(unique_mask, 0x80 >> (len(type_.additions) % 8)), '{} = 0;'.format(unique_unknown_addition_bits), '', 'for (i = {}; i < {}; i++) {{'.format(len(type_.additions), unique_addition_bits), '', ' if ({} == 0u) {{'.format(unique_mask), ' decoder_read_bytes(decoder_p, &{}, 1);'.format( unique_tmp_addition_mask), '', ' if (decoder_get_result(decoder_p) < 0) {', '', ' return;', ' }', ' {} = 0x80;'.format(unique_mask), ' }', '', ' if( ({tmp_addition} & {mask}) == {mask}) {{'.format( tmp_addition=unique_tmp_addition_mask, mask=unique_mask), ' {} += 1u;'.format(unique_unknown_addition_bits), ' };', ' {} >>= 1;'.format(unique_mask), '}' ] for i, addition in enumerate(type_.additions): byte, bit = divmod(i, 8) mask = '0x{:02x}'.format(1 << (7 - bit)) (addition_encode_lines, addition_decode_lines) = self.format_sequence_inner_member( addition, checker, None, skip_when_not_present=False) member_checker = self.get_member_checker(checker, addition.name) encoded_lengths = self.get_encoded_type_lengths(addition, member_checker) encoder_line = 'encoder_append_length_determinant(encoder_p, {});'.format( encoded_lengths_as_string(encoded_lengths)) wrapped_encoder_lines = textwrap.wrap(encoder_line, 100, subsequent_indent=' ' * 4) encode_lines += [ '', 'if (src_p->{}is_{}_addition_present) {{' .format(self.location_inner('', '.'), addition.name) ] + indent_lines(wrapped_encoder_lines + addition_encode_lines) + [ '}' ] decode_lines += [ 'dst_p->{location}is_{name}_addition_present = ' '(({addition_bits} > {current_bit}u) && ' '(({addition_mask}[{index}] & {mask}u) == {mask}u));'.format( location=self.location_inner('', '.'), name=addition.name, addition_bits=unique_addition_bits, current_bit=i, addition_mask=unique_addition_mask, index=byte, mask=mask), '', 'if (dst_p->{location}is_{name}_addition_present) {{'.format( location=self.location_inner('', '.'), name=addition.name), ' (void)decoder_read_length_determinant(decoder_p);' ] + indent_lines(addition_decode_lines) + [ '}', ''] unique_tmp_length = self.add_unique_decode_variable('uint32_t {};', 'tmp_length') decode_lines += [ 'for ({i} = 0; {i} < {unique_unknown_addition_bits}; {i}++) {{'.format( i=unique_i, first_bit=len(type_.additions), unique_unknown_addition_bits=unique_unknown_addition_bits), ' {} = decoder_read_length_determinant(decoder_p);'.format( unique_tmp_length), '', ' if (decoder_free(decoder_p, {}) < 0) {{'.format(unique_tmp_length), '', ' return;', ' }', '}'] return encode_lines, decode_lines def get_encoded_sequence_lengths(self, type_, checker): lengths = [] optionals = get_sequence_optionals(type_) extension_bit = get_sequence_extension_bit(type_) lengths.append(get_sequence_present_mask_length(optionals, extension_bit)) for member in type_.root_members: member_checker = self.get_member_checker(checker, member.name) lengths.extend(self.get_encoded_type_lengths(member, member_checker)) if type_.additions is not None and len(type_.additions) > 0: additions_mask_length = ( get_sequence_additions_mask_length(type_.additions)) lengths.append(get_length_determinant_length(additions_mask_length)) lengths.append(1) lengths.append(additions_mask_length) for addition in type_.additions: member_checker = self.get_member_checker(checker, addition.name) additions_lengths = self.get_encoded_type_lengths(addition, member_checker) addition_length = add_encoded_lengths(additions_lengths) if addition_length is not None: lengths.append(get_length_determinant_length(addition_length)) else: lengths.append('length_determinant_length({})'.format( encoded_lengths_as_string(lengths))) lengths.extend(additions_lengths) return lengths def format_octet_string_inner(self, checker): location = self.location_inner('', '.') if checker.minimum == checker.maximum: encode_lines = [ 'encoder_append_bytes(encoder_p,', ' &src_p->{}buf[0],'.format(location), ' {});'.format(checker.maximum) ] decode_lines = [ 'decoder_read_bytes(decoder_p,', ' &dst_p->{}buf[0],'.format(location), ' {});'.format(checker.maximum) ] elif checker.maximum < 128: encode_lines = [ 'encoder_append_uint8(encoder_p, src_p->{}length);'.format( location), 'encoder_append_bytes(encoder_p,', ' &src_p->{}buf[0],'.format(location), ' src_p->{}length);'.format(location) ] decode_lines = [ 'dst_p->{}length = decoder_read_uint8(decoder_p);'.format( location), '', 'if (dst_p->{}length > {}u) {{'.format(location, checker.maximum), ' decoder_abort(decoder_p, EBADLENGTH);', '', ' return;', '}', '', 'decoder_read_bytes(decoder_p,', ' &dst_p->{}buf[0],'.format(location), ' dst_p->{}length);'.format(location) ] else: encode_lines = [ 'encoder_append_length_determinant(encoder_p, src_p->{}length);'.format( location), 'encoder_append_bytes(encoder_p,', ' &src_p->{}buf[0],'.format(location), ' src_p->{}length);'.format(location) ] decode_lines = [ 'dst_p->{}length = decoder_read_length_determinant(decoder_p);'.format( location), '', 'if (dst_p->{}length > {}u) {{'.format(location, checker.maximum), ' decoder_abort(decoder_p, EBADLENGTH);', '', ' return;', '}', '', 'decoder_read_bytes(decoder_p,', ' &dst_p->{}buf[0],'.format(location), ' dst_p->{}length);'.format(location) ] return encode_lines, decode_lines def get_encoded_octet_string_lengths(self, type_, checker): with self.members_backtrace_push(type_.name): if checker.minimum == checker.maximum: return [checker.maximum] else: location = self.location_inner('', '.') src_length = 'src_p->{}length'.format(location) return ['length_determinant_length({})'.format(src_length), src_length] def format_user_type_inner(self, type_name, module_name): prefix = self.get_user_type_prefix(type_name, module_name) encode_lines = [ '{}_encode_inner(encoder_p, &src_p->{});'.format( prefix, self.location_inner()) ] decode_lines = [ '{}_decode_inner(decoder_p, &dst_p->{});'.format( prefix, self.location_inner()) ] return encode_lines, decode_lines def format_choice_inner(self, type_, checker): encode_lines = [] decode_lines = [] unique_tag = self.add_unique_decode_variable('uint32_t {};', 'tag') choice = '{}choice'.format(self.location_inner('', '.')) for member in type_.root_members: member_checker = self.get_member_checker(checker, member.name) with self.asn1_members_backtrace_push(canonical(member.name)): with self.c_members_backtrace_push('value'): with self.c_members_backtrace_push(canonical(member.name)): choice_encode_lines, choice_decode_lines = self.format_type_inner( member, member_checker) tag_length = len(member.tag) if tag_length > 4: raise self.error( 'CHOICE tags of more than four bytes are not yet supported.') tag = bitstruct.unpack('u{}'.format(8 * tag_length), member.tag)[0] tag = '0x{{:0{}x}}'.format(2 * tag_length).format(tag) choice_encode_lines = [ 'encoder_append_uint(encoder_p, {}, {});'.format( tag, tag_length) ] + choice_encode_lines + [ 'break;' ] encode_lines += [ 'case {}_choice_{}_e:'.format(self.location, canonical(member.name)) ] + indent_lines(choice_encode_lines) + [ '' ] choice_decode_lines = [ 'dst_p->{} = {}_choice_{}_e;'.format(choice, self.location, canonical(member.name)) ] + choice_decode_lines + [ 'break;' ] decode_lines += [ 'case {}:'.format(tag) ] + indent_lines(choice_decode_lines) + [ '' ] encode_lines = [ '', 'switch (src_p->{}) {{'.format(choice), '' ] + encode_lines + [ 'default:', ' encoder_abort(encoder_p, EBADCHOICE);', ' break;', '}', '' ] decode_lines = [ '{} = decoder_read_tag(decoder_p);'.format(unique_tag), '', 'switch ({}) {{'.format(unique_tag), '' ] + decode_lines + [ 'default:', ' decoder_abort(decoder_p, EBADCHOICE);', ' break;', '}', '' ] return encode_lines, decode_lines def get_encoded_choice_lengths(self, type_, checker): function_name = 'get_choice_{}_length'.format(camel_to_snake_case(type_.name)) if function_name not in self.additional_helpers: with self.members_backtrace_push(type_.name): choice = '{}choice'.format(self.location_inner('', '.')) choice_length_lines = [] for member in type_.root_members: member_checker = self.get_member_checker(checker, member.name) with self.asn1_members_backtrace_push(canonical(member.name)): with self.c_members_backtrace_push('value'): with self.c_members_backtrace_push(canonical(member.name)): choice_type_lengths = self.get_encoded_type_lengths( member, member_checker) choice_type_lengths.append(len(member.tag)) length_line = 'length = {};'.format( encoded_lengths_as_string(choice_type_lengths)) wrapped_length_lines = textwrap.wrap(length_line, 100, subsequent_indent=' ' * 4) choice_length_lines += [ 'case {}_choice_{}_e:'.format(self.location, canonical(member.name)) ] + indent_lines(wrapped_length_lines) + [ ' break;', ''] length_lines = [ 'uint32_t length;', '', 'switch (src_p->{}) {{'.format(choice), '' ] + choice_length_lines + [ 'default:', ' length = 0;' ' break;', '}', 'return length;'] length_lines = [ 'static uint32_t {}(const struct {}_t *src_p) {{'.format( function_name, self.location) ] + indent_lines(length_lines) + [ '}'] self.additional_helpers[function_name] = length_lines return ['{}(src_p)'.format(function_name)] def format_enumerated_inner(self, type_): encode_lines = [] decode_lines = [] max_value = max(type_.value_to_data) min_value = min(type_.value_to_data) type_name = '{}_e'.format(self.location) type_length = max(self.get_enumerated_value_length(min_value), self.get_enumerated_value_length(max_value)) unique_enum_length = self.add_unique_variable('uint8_t {};', 'enum_length') encode_lines += [ '{} = enumerated_value_length(src_p->{});'.format( unique_enum_length, self.location_inner()), '', 'if ({} != 0u) {{'.format(unique_enum_length), ' encoder_append_uint8(encoder_p, 0x80u | {});'.format( unique_enum_length), ' encoder_append_int(encoder_p, (int32_t)src_p->{}, {});'.format( self.location_inner(), unique_enum_length), '}', 'else {', ' encoder_append_uint8(encoder_p, (uint8_t)src_p->{});'.format( self.location_inner()), '}'] decode_lines += [ '{} = decoder_read_uint8(decoder_p);'.format(unique_enum_length), '', 'if (({} & 0x80u) == 0x80u) {{'.format(unique_enum_length), ' {} &= 0x7fu;'.format(unique_enum_length), '', ' if (({length} > {type_length}u) || ({length} == 0u)) {{'.format( type_length=type_length, length=unique_enum_length), ' decoder_abort(decoder_p, EBADLENGTH);', '', ' return;', ' }', ' dst_p->{} = (enum {})decoder_read_int(decoder_p, {});'.format( self.location_inner(), type_name, unique_enum_length), '}', 'else {', ' dst_p->{} = (enum {}){};'.format(self.location_inner(), type_name, unique_enum_length), '}'] return encode_lines, decode_lines def get_encoded_enumerated_length(self, type_): with self.members_backtrace_push(type_.name): return ['(uint32_t)enumerated_value_length((int32_t)src_p->{})'.format( self.location_inner()), 1] def format_sequence_of_inner(self, type_, checker): unique_number_of_length_bytes = self.add_unique_variable( 'uint8_t {};', 'number_of_length_bytes') unique_i = self.add_unique_variable( '{} {{}};'.format(self.format_type_name(0, checker.maximum)), 'i') if checker.minimum == checker.maximum: unique_length = self.add_unique_decode_variable('uint8_t {};', 'length') with self.c_members_backtrace_push('elements[{}]'.format(unique_i)): encode_lines, decode_lines = self.format_type_inner( type_.element_type, checker.element_type) location = self.location_inner('', '.') if checker.minimum == checker.maximum: encode_lines = [ '{} = minimum_uint_length({});'.format( unique_number_of_length_bytes, checker.maximum), 'encoder_append_uint8(encoder_p, {});'.format( unique_number_of_length_bytes), 'encoder_append_uint(encoder_p,', ' {},'.format(checker.maximum), ' {});'.format(unique_number_of_length_bytes), '', 'for ({ui} = 0; {ui} < {maximum}u; {ui}++) {{'.format( ui=unique_i, maximum=checker.maximum), ] + indent_lines(encode_lines) decode_lines = [ '{} = decoder_read_uint8(decoder_p);'.format( unique_number_of_length_bytes), '{} = decoder_read_uint8(decoder_p);'.format(unique_length), '', 'if (({} != 1u) || ({} > {}u)) {{'.format(unique_number_of_length_bytes, unique_length, checker.maximum), ' decoder_abort(decoder_p, EBADLENGTH);', '', ' return;', '}', '', 'for ({ui} = 0; {ui} < {maximum}u; {ui}++) {{'.format( ui=unique_i, maximum=checker.maximum), ] + indent_lines(decode_lines) else: if checker.maximum < 256: cast = '(uint8_t)' else: cast = '' encode_lines = [ '{} = minimum_uint_length(src_p->{}length);'.format( unique_number_of_length_bytes, location), 'encoder_append_uint8(encoder_p, {});'.format( unique_number_of_length_bytes), 'encoder_append_uint(encoder_p,', ' src_p->{}length,'.format(location), ' {});'.format(unique_number_of_length_bytes), '', 'for ({ui} = 0; {ui} < src_p->{loc}length; {ui}++) {{'.format( ui=unique_i, loc=location), ] + indent_lines(encode_lines) decode_lines = [ '{} = decoder_read_uint8(decoder_p);'.format( unique_number_of_length_bytes), 'dst_p->{}length = {}decoder_read_uint('.format(location, cast), ' decoder_p,', ' {});'.format(unique_number_of_length_bytes), '', 'if (dst_p->{}length > {}u) {{'.format(location, checker.maximum), ' decoder_abort(decoder_p, EBADLENGTH);', '', ' return;', '}', '', 'for ({ui} = 0; {ui} < dst_p->{loc}length; {ui}++) {{'.format( loc=location, ui=unique_i), ] + indent_lines(decode_lines) encode_lines += ['}', ''] decode_lines += ['}', ''] return encode_lines, decode_lines def get_encoded_sequence_of_lengths(self, type_, checker): inner_lengths = self.get_encoded_type_lengths(type_.element_type, checker.element_type) inner_length = encoded_lengths_as_string(inner_lengths) with self.c_members_backtrace_push(type_.name): return [1, '(uint32_t)minimum_uint_length(src_p->{loc}length)'.format( loc=self.location_inner('', '.')), '(uint32_t)(src_p->{loc}length * ({inner_length}))'.format( loc=self.location_inner('', '.'), inner_length=inner_length)] def format_type_inner(self, type_, checker): if isinstance(type_, oer.Integer): return self.format_integer_inner(checker) elif isinstance(type_, oer.Real): return self.format_real_inner(type_) elif isinstance(type_, oer.Null): return [], [] elif isinstance(type_, oer.Boolean): return self.format_boolean_inner() elif is_user_type(type_): return self.format_user_type_inner(type_.type_name, type_.module_name) elif isinstance(type_, oer.OctetString): return self.format_octet_string_inner(checker) elif isinstance(type_, oer.Sequence): return self.format_sequence_inner(type_, checker) elif isinstance(type_, oer.Choice): return self.format_choice_inner(type_, checker) elif isinstance(type_, oer.SequenceOf): return self.format_sequence_of_inner(type_, checker) elif isinstance(type_, oer.Enumerated): return self.format_enumerated_inner(type_) elif isinstance(type_, oer.BitString): return self.format_bit_string_inner(checker) else: raise self.error(str(type_)) def generate_definition_inner_process(self, type_, checker): if isinstance(type_, oer.Integer): return self.format_integer_inner(checker) elif isinstance(type_, oer.Boolean): return self.format_boolean_inner() elif isinstance(type_, oer.Real): return self.format_real_inner(type_) elif isinstance(type_, oer.Sequence): return self.format_sequence_inner(type_, checker) elif isinstance(type_, oer.SequenceOf): return self.format_sequence_of_inner(type_, checker) elif isinstance(type_, oer.Choice): return self.format_choice_inner(type_, checker) elif isinstance(type_, oer.OctetString): return self.format_octet_string_inner(checker) elif isinstance(type_, oer.BitString): return self.format_bit_string_inner(checker) elif isinstance(type_, oer.Enumerated): return self.format_enumerated_inner(type_) elif isinstance(type_, oer.Null): return format_null_inner() else: return [], [] def is_complex_user_type(self, type_): return is_user_type(type_) and \ not isinstance(type_, (oer.Integer, oer.Boolean, oer.Real, oer.Null)) def is_buffer_type(self, type_): return isinstance(type_, oer.OctetString) def generate_helpers(self, definitions): helpers = [] for pattern, definition in functions: is_in_helpers = any([pattern in helper for helper in helpers]) if pattern in definitions or is_in_helpers: helpers.insert(0, definition) for additional_helpers in self.additional_helpers.values(): helpers.extend(additional_helpers + ['']) return [ENCODER_AND_DECODER_STRUCTS] + helpers + [''] def generate(compiled, namespace): return _Generator(namespace).generate(compiled) asn1tools-0.169.0/asn1tools/source/c/oer_functions.py000066400000000000000000000376621524544274600225410ustar00rootroot00000000000000"""Functions required by the OER C code generator """ from .utils import ENCODER_ABORT from .utils import DECODER_ABORT ENUMERATED_VALUE_LENGTH = ''' static uint8_t enumerated_value_length(int32_t value) { uint8_t length; if ((value >=0) && (value < 128)) { length = 0; } else if ((value >= -128) && (value < 128)) { length = 1; } else if ((value >= -32768) && (value < 32768)) { length = 2; } else if ((value >= -8388608) && (value < 8388608)) { length = 3; } else { length = 4; } return length; }\ ''' LENGTH_DETERMINANT_LENGTH = ''' static uint32_t length_determinant_length(uint32_t value) { uint32_t length; if (value < 128u) { length = 1; } else if (value < 256u) { length = 2; } else if (value < 65536u) { length = 3; } else if (value < 16777216u) { length = 4; } else { length = 5; } return (length); }\ ''' MINIMUM_UINT_LENGTH = ''' static uint8_t minimum_uint_length(uint32_t value) { uint8_t length; if (value < 256u) { length = 1; } else if (value < 65536u) { length = 2; } else if (value < 16777216u) { length = 3; } else { length = 4; } return (length); }\ ''' ENCODER_INIT = '''\ static void encoder_init(struct encoder_t *self_p, uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (ssize_t)size; self_p->pos = 0; }\ ''' ENCODER_GET_RESULT = ''' static ssize_t encoder_get_result(const struct encoder_t *self_p) { return (self_p->pos); }\ ''' ENCODER_ALLOC = ''' static ssize_t encoder_alloc(struct encoder_t *self_p, size_t size) { ssize_t pos; if ((self_p->pos + (ssize_t)size) <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -ENOMEM; encoder_abort(self_p, ENOMEM); } return (pos); }\ ''' ENCODER_APPEND_BYTES = ''' static void encoder_append_bytes(struct encoder_t *self_p, const uint8_t *buf_p, size_t size) { ssize_t pos; pos = encoder_alloc(self_p, size); if (pos < 0) { return; } (void)memcpy(&self_p->buf_p[pos], buf_p, size); }\ ''' ENCODER_APPEND_UINT8 = ''' static void encoder_append_uint8(struct encoder_t *self_p, uint8_t value) { encoder_append_bytes(self_p, &value, sizeof(value)); }\ ''' ENCODER_APPEND_UINT16 = ''' static void encoder_append_uint16(struct encoder_t *self_p, uint16_t value) { uint8_t buf[2]; buf[0] = (uint8_t)(value >> 8); buf[1] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); }\ ''' ENCODER_APPEND_UINT32 = ''' static void encoder_append_uint32(struct encoder_t *self_p, uint32_t value) { uint8_t buf[4]; buf[0] = (uint8_t)(value >> 24); buf[1] = (uint8_t)(value >> 16); buf[2] = (uint8_t)(value >> 8); buf[3] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); }\ ''' ENCODER_APPEND_UINT64 = ''' static void encoder_append_uint64(struct encoder_t *self_p, uint64_t value) { uint8_t buf[8]; buf[0] = (uint8_t)(value >> 56); buf[1] = (uint8_t)(value >> 48); buf[2] = (uint8_t)(value >> 40); buf[3] = (uint8_t)(value >> 32); buf[4] = (uint8_t)(value >> 24); buf[5] = (uint8_t)(value >> 16); buf[6] = (uint8_t)(value >> 8); buf[7] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); }\ ''' ENCODER_APPEND_INT8 = ''' static void encoder_append_int8(struct encoder_t *self_p, int8_t value) { encoder_append_uint8(self_p, (uint8_t)value); }\ ''' ENCODER_APPEND_INT16 = ''' static void encoder_append_int16(struct encoder_t *self_p, int16_t value) { encoder_append_uint16(self_p, (uint16_t)value); }\ ''' ENCODER_APPEND_INT32 = ''' static void encoder_append_int32(struct encoder_t *self_p, int32_t value) { encoder_append_uint32(self_p, (uint32_t)value); }\ ''' ENCODER_APPEND_INT64 = ''' static void encoder_append_int64(struct encoder_t *self_p, int64_t value) { encoder_append_uint64(self_p, (uint64_t)value); }\ ''' ENCODER_APPEND_UINT = ''' static void encoder_append_uint(struct encoder_t *self_p, uint32_t value, uint8_t number_of_bytes) { switch (number_of_bytes) { case 1: encoder_append_uint8(self_p, (uint8_t)value); break; case 2: encoder_append_uint16(self_p, (uint16_t)value); break; case 3: encoder_append_uint8(self_p, (uint8_t)(value >> 16)); encoder_append_uint16(self_p, (uint16_t)value); break; default: encoder_append_uint32(self_p, value); break; } }\ ''' ENCODER_APPEND_LONG_UINT = ''' static void encoder_append_long_uint(struct encoder_t *self_p, uint64_t value, uint8_t number_of_bytes) { const uint8_t *value_p = (const uint8_t*)&value; uint8_t buf[8]; for(uint32_t byte = 0; byte < number_of_bytes; byte++) { buf[number_of_bytes - byte - 1] = *value_p++; } encoder_append_bytes(self_p, buf, number_of_bytes); }\ ''' ENCODER_APPEND_INT = ''' static void encoder_append_int(struct encoder_t *self_p, int32_t value, uint8_t number_of_bytes) { switch (number_of_bytes) { case 1: encoder_append_int8(self_p, (int8_t)value); break; case 2: encoder_append_int16(self_p, (int16_t)value); break; case 3: encoder_append_uint8(self_p, (uint8_t)((uint32_t)value >> 16)); encoder_append_int16(self_p, (int16_t)value); break; default: encoder_append_int32(self_p, value); break; } }\ ''' ENCODER_APPEND_FLOAT = ''' static void encoder_append_float(struct encoder_t *self_p, float value) { uint32_t i32; (void)memcpy(&i32, &value, sizeof(i32)); encoder_append_uint32(self_p, i32); }\ ''' ENCODER_APPEND_DOUBLE = ''' static void encoder_append_double(struct encoder_t *self_p, double value) { uint64_t i64; (void)memcpy(&i64, &value, sizeof(i64)); encoder_append_uint64(self_p, i64); }\ ''' ENCODER_APPEND_BOOL = ''' static void encoder_append_bool(struct encoder_t *self_p, bool value) { encoder_append_uint8(self_p, value ? 255u : 0u); }\ ''' ENCODER_APPEND_LENGTH_DETERMINANT = ''' static void encoder_append_length_determinant(struct encoder_t *self_p, uint32_t length) { if (length < 128u) { encoder_append_int8(self_p, (int8_t)length); } else if (length < 256u) { encoder_append_uint8(self_p, 0x81u); encoder_append_uint8(self_p, (uint8_t)length); } else if (length < 65536u) { encoder_append_uint8(self_p, 0x82u); encoder_append_uint16(self_p, (uint16_t)length); } else if (length < 16777216u) { encoder_append_uint32(self_p, length | (0x83u << 24u)); } else { encoder_append_uint8(self_p, 0x84u); encoder_append_uint32(self_p, length); } }\ ''' DECODER_INIT = ''' static void decoder_init(struct decoder_t *self_p, const uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (ssize_t)size; self_p->pos = 0; }\ ''' DECODER_GET_RESULT = ''' static ssize_t decoder_get_result(const struct decoder_t *self_p) { return (self_p->pos); }\ ''' DECODER_FREE = ''' static ssize_t decoder_free(struct decoder_t *self_p, size_t size) { ssize_t pos; if ((self_p->pos + (ssize_t)size) <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -EOUTOFDATA; decoder_abort(self_p, EOUTOFDATA); } return (pos); }\ ''' DECODER_READ_BYTES = ''' static void decoder_read_bytes(struct decoder_t *self_p, uint8_t *buf_p, size_t size) { ssize_t pos; pos = decoder_free(self_p, size); if (pos >= 0) { (void)memcpy(buf_p, &self_p->buf_p[pos], size); } else { (void)memset(buf_p, 0, size); } }\ ''' DECODER_READ_UINT8 = ''' static uint8_t decoder_read_uint8(struct decoder_t *self_p) { uint8_t value; decoder_read_bytes(self_p, &value, sizeof(value)); return (value); }\ ''' DECODER_READ_UINT16 = ''' static uint16_t decoder_read_uint16(struct decoder_t *self_p) { uint8_t buf[2]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (uint16_t)(((uint16_t)buf[0] << 8) | (uint16_t)buf[1]); }\ ''' DECODER_READ_UINT32 = ''' static uint32_t decoder_read_uint32(struct decoder_t *self_p) { uint8_t buf[4]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]); }\ ''' DECODER_READ_UINT64 = ''' static uint64_t decoder_read_uint64(struct decoder_t *self_p) { uint8_t buf[8]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (((uint64_t)buf[0] << 56) | ((uint64_t)buf[1] << 48) | ((uint64_t)buf[2] << 40) | ((uint64_t)buf[3] << 32) | ((uint64_t)buf[4] << 24) | ((uint64_t)buf[5] << 16) | ((uint64_t)buf[6] << 8) | (uint64_t)buf[7]); }\ ''' DECODER_READ_INT8 = ''' static int8_t decoder_read_int8(struct decoder_t *self_p) { return ((int8_t)decoder_read_uint8(self_p)); }\ ''' DECODER_READ_INT16 = ''' static int16_t decoder_read_int16(struct decoder_t *self_p) { return ((int16_t)decoder_read_uint16(self_p)); }\ ''' DECODER_READ_INT32 = ''' static int32_t decoder_read_int32(struct decoder_t *self_p) { return ((int32_t)decoder_read_uint32(self_p)); }\ ''' DECODER_READ_INT64 = ''' static int64_t decoder_read_int64(struct decoder_t *self_p) { return ((int64_t)decoder_read_uint64(self_p)); }\ ''' DECODER_READ_UINT = ''' static uint32_t decoder_read_uint(struct decoder_t *self_p, uint8_t number_of_bytes) { uint32_t value; switch (number_of_bytes) { case 1: value = decoder_read_uint8(self_p); break; case 2: value = decoder_read_uint16(self_p); break; case 3: value = ((uint32_t)decoder_read_uint8(self_p) << 16u); value |= decoder_read_uint16(self_p); break; case 4: value = decoder_read_uint32(self_p); break; default: value = 0xffffffffu; break; } return (value); }\ ''' DECODER_READ_LONG_UINT = ''' static uint64_t decoder_read_long_uint(struct decoder_t *self_p, uint8_t number_of_bytes) { uint64_t value = 0; for(uint8_t byte = 0; byte < number_of_bytes; byte++) { value = decoder_read_uint8(self_p) | (value << 8); } return (value); }\ ''' DECODER_READ_INT = ''' static int32_t decoder_read_int(struct decoder_t *self_p, uint8_t number_of_bytes) { int32_t value; uint32_t tmp; switch (number_of_bytes) { case 1: value = decoder_read_int8(self_p); break; case 2: value = decoder_read_int16(self_p); break; case 3: tmp = ((uint32_t)decoder_read_uint8(self_p) << 16u); tmp |= decoder_read_uint16(self_p); if((tmp & 0x800000u) == 0x800000u) { tmp += 0xff000000u; } value = (int32_t)tmp; break; case 4: value = decoder_read_int32(self_p); break; default: value = 2147483647; break; } return (value); }\ ''' DECODER_READ_FLOAT = ''' static float decoder_read_float(struct decoder_t *self_p) { float value; uint32_t i32; i32 = decoder_read_uint32(self_p); (void)memcpy(&value, &i32, sizeof(value)); return (value); }\ ''' DECODER_READ_DOUBLE = ''' static double decoder_read_double(struct decoder_t *self_p) { double value; uint64_t i64; i64 = decoder_read_uint64(self_p); (void)memcpy(&value, &i64, sizeof(value)); return (value); }\ ''' DECODER_READ_BOOL = ''' static bool decoder_read_bool(struct decoder_t *self_p) { return (decoder_read_uint8(self_p) != 0u); }\ ''' DECODER_READ_LENGTH_DETERMINANT = ''' static uint32_t decoder_read_length_determinant(struct decoder_t *self_p) { uint32_t length; length = decoder_read_uint8(self_p); if ((length & 0x80u) != 0u) { switch (length & 0x7fu) { case 1: length = decoder_read_uint8(self_p); break; case 2: length = decoder_read_uint16(self_p); break; case 3: length = (((uint32_t)decoder_read_uint8(self_p) << 16) | decoder_read_uint16(self_p)); break; case 4: length = decoder_read_uint32(self_p); break; default: length = 0xffffffffu; break; } } return (length); }\ ''' DECODER_READ_TAG = ''' static uint32_t decoder_read_tag(struct decoder_t *self_p) { uint32_t tag; tag = decoder_read_uint8(self_p); if ((tag & 0x3fu) == 0x3fu) { do { tag <<= 8; tag |= (uint32_t)decoder_read_uint8(self_p); } while ((tag & 0x80u) == 0x80u); } return (tag); }\ ''' functions = [ ('decoder_read_tag(', DECODER_READ_TAG), ('decoder_read_length_determinant(', DECODER_READ_LENGTH_DETERMINANT), ('decoder_read_bool(', DECODER_READ_BOOL), ('decoder_read_double(', DECODER_READ_DOUBLE), ('decoder_read_float(', DECODER_READ_FLOAT), ('decoder_read_int(', DECODER_READ_INT), ('decoder_read_uint(', DECODER_READ_UINT), ('decoder_read_long_uint(', DECODER_READ_LONG_UINT), ('decoder_read_int64(', DECODER_READ_INT64), ('decoder_read_int32(', DECODER_READ_INT32), ('decoder_read_int16(', DECODER_READ_INT16), ('decoder_read_int8(', DECODER_READ_INT8), ('decoder_read_uint64(', DECODER_READ_UINT64), ('decoder_read_uint32(', DECODER_READ_UINT32), ('decoder_read_uint16(', DECODER_READ_UINT16), ('decoder_read_uint8(', DECODER_READ_UINT8), ('decoder_read_bytes(', DECODER_READ_BYTES), ('decoder_free(', DECODER_FREE), ('decoder_abort(', DECODER_ABORT), ('decoder_get_result(', DECODER_GET_RESULT), ('decoder_init(', DECODER_INIT), ('encoder_append_length_determinant(', ENCODER_APPEND_LENGTH_DETERMINANT), ('encoder_append_bool(', ENCODER_APPEND_BOOL), ('encoder_append_double(', ENCODER_APPEND_DOUBLE), ('encoder_append_float(', ENCODER_APPEND_FLOAT), ('encoder_append_int(', ENCODER_APPEND_INT), ('encoder_append_uint(', ENCODER_APPEND_UINT), ('encoder_append_long_uint(', ENCODER_APPEND_LONG_UINT), ('encoder_append_int64(', ENCODER_APPEND_INT64), ('encoder_append_int32(', ENCODER_APPEND_INT32), ('encoder_append_int16(', ENCODER_APPEND_INT16), ('encoder_append_int8(', ENCODER_APPEND_INT8), ('encoder_append_uint64(', ENCODER_APPEND_UINT64), ('encoder_append_uint32(', ENCODER_APPEND_UINT32), ('encoder_append_uint16(', ENCODER_APPEND_UINT16), ('encoder_append_uint8(', ENCODER_APPEND_UINT8), ('encoder_append_bytes(', ENCODER_APPEND_BYTES), ('encoder_alloc(', ENCODER_ALLOC), ('encoder_abort(', ENCODER_ABORT), ('encoder_get_result(', ENCODER_GET_RESULT), ('encoder_init(', ENCODER_INIT), ('minimum_uint_length(', MINIMUM_UINT_LENGTH), ('length_determinant_length(', LENGTH_DETERMINANT_LENGTH), ('enumerated_value_length(', ENUMERATED_VALUE_LENGTH) ] asn1tools-0.169.0/asn1tools/source/c/uper.py000066400000000000000000000611051524544274600206240ustar00rootroot00000000000000"""Unaligned Packed Encoding Rules (UPER) C source code codec generator. """ import textwrap from .utils import ENCODER_AND_DECODER_STRUCTS from .utils import Generator from .utils import camel_to_snake_case from .utils import is_user_type from .utils import indent_lines from .utils import dedent_lines from .utils import canonical from .uper_functions import functions from ...codecs import uper def does_bits_match_range(number_of_bits, minimum, maximum): return 2 ** number_of_bits == (maximum - minimum + 1) class _Generator(Generator): def format_real(self): return [] def get_enumerated_values(self, type_): return sorted([(canonical(data), value) for data, value in type_.root_data_to_value.items()]) def get_choice_members(self, type_): return type_.root_index_to_member.values() def format_default(self, type_): if isinstance(type_, uper.Boolean): return str(type_.default).lower() elif isinstance(type_, uper.Enumerated): return self.format_default_enumerated(type_) else: return str(type_.default) def format_type(self, type_, checker): if isinstance(type_, uper.Integer): return self.format_integer(checker) elif isinstance(type_, uper.Boolean): return self.format_boolean() elif isinstance(type_, uper.Real): return self.format_real() elif isinstance(type_, uper.Null): return [] elif is_user_type(type_): return self.format_user_type(type_.type_name, type_.module_name) elif isinstance(type_, uper.OctetString): return self.format_octet_string(checker) elif isinstance(type_, uper.Sequence): return self.format_sequence(type_, checker) elif isinstance(type_, uper.Choice): return self.format_choice(type_, checker) elif isinstance(type_, uper.SequenceOf): return self.format_sequence_of(type_, checker) elif isinstance(type_, uper.Enumerated): return self.format_enumerated(type_) elif isinstance(type_, uper.BitString): return self.format_bit_string(type_, checker) else: raise self.error( "Unsupported type '{}'.".format(type_.type_name)) def generate_type_declaration_process(self, type_, checker): if isinstance(type_, uper.Integer): lines = self.format_integer(checker) lines[0] += ' value;' elif isinstance(type_, uper.Boolean): lines = self.format_boolean() lines[0] += ' value;' elif isinstance(type_, uper.Real): lines = self.format_real() elif isinstance(type_, uper.Enumerated): lines = self.format_enumerated(type_) lines[0] += ' value;' elif isinstance(type_, uper.Sequence): lines = self.format_sequence(type_, checker)[1:-1] lines = dedent_lines(lines) elif isinstance(type_, uper.SequenceOf): lines = self.format_sequence_of(type_, checker)[1:-1] lines = dedent_lines(lines) elif isinstance(type_, uper.Choice): lines = self.format_choice(type_, checker) lines = dedent_lines(lines[1:-1]) elif isinstance(type_, uper.OctetString): lines = self.format_octet_string(checker)[1:-1] lines = dedent_lines(lines) elif isinstance(type_, uper.BitString): lines = self.format_bit_string(type_, checker) lines[0] += ' value;' elif isinstance(type_, uper.Null): lines = [] else: raise self.error( "Unsupported type '{}'.".format(type_.type_name)) return lines def generate_definition_inner_process(self, type_, checker): if isinstance(type_, uper.Integer): return self.format_integer_inner(type_, checker) elif isinstance(type_, uper.Boolean): return self.format_boolean_inner() elif isinstance(type_, uper.Real): return self.format_real_inner() elif isinstance(type_, uper.Sequence): return self.format_sequence_inner(type_, checker) elif isinstance(type_, uper.SequenceOf): return self.format_sequence_of_inner(type_, checker) elif isinstance(type_, uper.Choice): return self.format_choice_inner(type_, checker) elif isinstance(type_, uper.OctetString): return self.format_octet_string_inner(type_, checker) elif isinstance(type_, uper.BitString): return self.format_bit_string_inner(type_, checker) elif isinstance(type_, uper.Enumerated): return self.format_enumerated_inner(type_) elif isinstance(type_, uper.Null): return self.format_null_inner() else: return [], [] def format_integer_inner(self, type_, checker): type_name = self.format_type_name(checker.minimum, checker.maximum) suffix = type_name[:-2] location = self.location_inner() if type_.number_of_bits in [8, 16, 32, 64] and \ checker.minimum in [0, -128, -32768, -2147483648, -9223372036854775808]: return ( [ 'encoder_append_{}(encoder_p, src_p->{});'.format( suffix, location) ], [ 'dst_p->{} = decoder_read_{}(decoder_p);'.format(location, suffix) ] ) else: return ( [ 'encoder_append_non_negative_binary_integer(', ' encoder_p,', ' (uint64_t)(src_p->{} - {}),'.format(location, checker.minimum), ' {});'.format(type_.number_of_bits) ], [ 'dst_p->{} = ({})decoder_read_non_negative_binary_integer('.format( location, type_name), ' decoder_p,', ' {});'.format(type_.number_of_bits), 'dst_p->{} += {};'.format(location, checker.minimum) ] ) def format_bit_string_inner(self, type_, checker): location = self.location_inner() max_value = 2 ** checker.minimum - 1 type_name = self.format_type_name(max_value, max_value) return ( [ 'encoder_append_non_negative_binary_integer(', ' encoder_p,', ' (uint64_t)(src_p->{}),'.format(location), ' {});'.format(type_.maximum) ], [ 'dst_p->{} = ({})decoder_read_non_negative_binary_integer('.format( location, type_name), ' decoder_p,', ' {});'.format(type_.maximum) ] ) def format_boolean_inner(self): return ( [ 'encoder_append_bool(encoder_p, src_p->{});'.format( self.location_inner()) ], [ 'dst_p->{} = decoder_read_bool(decoder_p);'.format( self.location_inner()) ] ) def format_real_inner(self): return [], [] def format_sequence_inner(self, type_, checker): encode_lines = [] decode_lines = [] member_name_to_is_present = {} if type_.additions is not None: if len(type_.additions) > 0: if_line = 'if({}) {{'.format(self.get_addition_present_condition(type_)) encode_lines.extend(textwrap.wrap(if_line, 120, subsequent_indent=' ' * len('if('))) encode_lines.append(' encoder_abort(encoder_p, EINVAL);') encode_lines.append(' return;') encode_lines.append('}') encode_lines.append('encoder_append_bool(encoder_p, false);') if len(type_.additions) > 0: unique_extension_present = \ self.add_unique_decode_variable('bool {};', 'extension_is_present') decode_lines.append( 'extension_is_present = decoder_read_bool(decoder_p);') else: decode_lines.append('decoder_read_bool(decoder_p);') for member in type_.root_members: if member.optional: name = '{}is_{}_present'.format(self.location_inner('', '.'), canonical(member.name)) encode_lines.append( 'encoder_append_bool(encoder_p, src_p->{});'.format( name)) decode_lines.append( 'dst_p->{} = decoder_read_bool(decoder_p);'.format( name)) elif member.default is not None: unique_is_present = self.add_unique_decode_variable('bool {};', 'is_present') member_name_to_is_present[member.name] = unique_is_present if self.is_buffer_type(member): default_variable = canonical(member.name) + '_default' encode_lines += [ 'encoder_append_bool(encoder_p, (memcmp(src_p->{}{}.buf, {}, sizeof({})) != 0) ||'.format( self.location_inner('', '.'), canonical(member.name), default_variable, default_variable), ' (src_p->{}{}.length != sizeof({})));'.format( self.location_inner('', '.'), canonical(member.name), default_variable) ] else: encode_lines.append( 'encoder_append_bool(encoder_p, src_p->{}{}{} != {});'.format( self.location_inner('', '.'), canonical(member.name), '.value' if self.is_complex_user_type(member) else '', self.format_default(member))) decode_lines.append( '{} = decoder_read_bool(decoder_p);'.format( unique_is_present)) for member in type_.root_members: (member_encode_lines, member_decode_lines) = self.format_sequence_inner_member( member, checker, member_name_to_is_present) encode_lines += member_encode_lines decode_lines += member_decode_lines if type_.additions is not None and len(type_.additions) > 0: decode_lines.append('if({}) {{'.format(unique_extension_present)) decode_lines.append(' decoder_abort(decoder_p, EINVAL);') decode_lines.append(' return;') decode_lines.append('}') return encode_lines, decode_lines def format_octet_string_inner(self, type_, checker): location = self.location_inner('', '.') if checker.maximum < 256: length_type = 'uint8_t' else: length_type = 'uint32_t' if checker.minimum == checker.maximum: encode_lines = [ 'encoder_append_bytes(encoder_p,', ' &src_p->{}buf[0],'.format(location), ' {});'.format(checker.maximum) ] decode_lines = [ 'decoder_read_bytes(decoder_p,', ' &dst_p->{}buf[0],'.format(location), ' {});'.format(checker.maximum) ] else: encode_lines = [ 'encoder_append_non_negative_binary_integer(', ' encoder_p,', ' src_p->{}length - {}u,'.format(location, checker.minimum), ' {});'.format(type_.number_of_bits), 'encoder_append_bytes(encoder_p,', ' &src_p->{}buf[0],'.format(location), ' src_p->{}length);'.format(location) ] decode_lines = [ 'dst_p->{}length = ({})decoder_read_non_negative_binary_integer('.format( location, length_type), ' decoder_p,', ' {});'.format(type_.number_of_bits), 'dst_p->{}length += {}u;'.format(location, checker.minimum) ] if not does_bits_match_range(type_.number_of_bits, checker.minimum, checker.maximum): decode_lines += [ '', 'if (dst_p->{}length > {}u) {{'.format(location, checker.maximum), ' decoder_abort(decoder_p, EBADLENGTH);', '', ' return;', '}', '' ] decode_lines += [ 'decoder_read_bytes(decoder_p,', ' &dst_p->{}buf[0],'.format(location), ' dst_p->{}length);'.format(location) ] return encode_lines, decode_lines def format_user_type_inner(self, type_name, module_name): module_name_snake = camel_to_snake_case(module_name) type_name_snake = camel_to_snake_case(type_name) prefix = '{}_{}_{}'.format(self.namespace, module_name_snake, type_name_snake) encode_lines = [ '{}_encode_inner(encoder_p, &src_p->{});'.format( prefix, self.location_inner()) ] decode_lines = [ '{}_decode_inner(decoder_p, &dst_p->{});'.format( prefix, self.location_inner()) ] return encode_lines, decode_lines def format_choice_inner(self, type_, checker): encode_lines = [] decode_lines = [] type_name = self.format_type_name(0, max(type_.root_index_to_member)) unique_choice = self.add_unique_decode_variable( '{} {{}};'.format(type_name), 'choice') choice = '{}choice'.format(self.location_inner('', '.')) for member in type_.root_index_to_member.values(): member_checker = self.get_member_checker(checker, member.name) with self.asn1_members_backtrace_push(canonical(member.name)): with self.c_members_backtrace_push('value'): with self.c_members_backtrace_push(canonical(member.name)): choice_encode_lines, choice_decode_lines = self.format_type_inner( member, member_checker) index = type_.root_name_to_index[member.name] choice_encode_lines = [ 'encoder_append_non_negative_binary_integer(encoder_p, {}, {});'.format( index, type_.root_number_of_bits) ] + choice_encode_lines + [ 'break;' ] encode_lines += [ 'case {}_choice_{}_e:'.format(self.location, canonical(member.name)) ] + indent_lines(choice_encode_lines) + [ '' ] choice_decode_lines = [ 'dst_p->{} = {}_choice_{}_e;'.format(choice, self.location, canonical(member.name)) ] + choice_decode_lines + [ 'break;' ] decode_lines += [ 'case {}:'.format(index) ] + indent_lines(choice_decode_lines) + [ '' ] encode_lines = [ '', 'switch (src_p->{}) {{'.format(choice), '' ] + encode_lines + [ 'default:', ' encoder_abort(encoder_p, EBADCHOICE);', ' break;', '}', '' ] decode_lines = [ '{} = ({})decoder_read_non_negative_binary_integer(decoder_p, {});'.format( unique_choice, type_name, type_.root_number_of_bits), '', 'switch ({}) {{'.format(unique_choice), '' ] + decode_lines + [ 'default:', ' decoder_abort(decoder_p, EBADCHOICE);', ' break;', '}', '' ] return encode_lines, decode_lines def format_enumerated_inner(self, type_): type_name = self.format_type_name(0, max(type_.root_data_to_value.values())) unique_value = self.add_unique_variable( '{} {{}};'.format(type_name), 'value') location = self.location_inner() value_mapping_required = any([(type_.root_data_to_index[data] != type_.root_data_to_value[data]) for data in type_.root_data_to_index]) if value_mapping_required: encode_lines = ['switch (src_p->{}) {{'.format(location)] for data, _ in self.get_enumerated_values(type_): encode_lines += [ 'case {}_{}_e:'.format(self.location, data), ' {} = {};'.format(unique_value, type_.root_data_to_index[data]), ' break;'] encode_lines += [ 'default:', ' encoder_abort(encoder_p, EBADENUM);', ' return;', '}'] else: encode_lines = ['{} = src_p->{};'.format(unique_value, location)] encode_lines.append('encoder_append_non_negative_binary_integer(encoder_p, ' '{}, {});'.format(unique_value, type_.root_number_of_bits)) decode_lines = [ '{} = ({})decoder_read_non_negative_binary_integer(' 'decoder_p, {});'.format(unique_value, type_name, type_.root_number_of_bits) ] if bin(len(self.get_enumerated_values(type_))).count('1') != 1 and (not value_mapping_required): decode_lines += [ '', 'if ({} > {}u) {{'.format(unique_value, len(self.get_enumerated_values(type_)) - 1), ' decoder_abort(decoder_p, EBADENUM);', '', ' return;', '}', '' ] if value_mapping_required: decode_lines.append('switch ({}) {{'.format(unique_value)) for data, _ in self.get_enumerated_values(type_): decode_lines.append('case {}:'.format(type_.root_data_to_index[data])) decode_lines.append(' dst_p->{} = {}_{}_e;'.format(location, self.location, data)) decode_lines.append(' break;') decode_lines += [ 'default:', ' decoder_abort(decoder_p, EBADENUM);', ' return;', '}'] else: decode_lines += [ 'dst_p->{} = (enum {}_e){};'.format(location, self.location, unique_value) ] return encode_lines, decode_lines def format_null_inner(self): return ( [ '(void)encoder_p;', '(void)src_p;' ], [ '(void)decoder_p;', '(void)dst_p;' ] ) def format_sequence_of_inner(self, type_, checker): type_name = self.format_type_name(0, checker.maximum) unique_i = self.add_unique_variable('{} {{}};'.format(type_name), 'i') with self.c_members_backtrace_push('elements[{}]'.format(unique_i)): encode_lines, decode_lines = self.format_type_inner( type_.element_type, checker.element_type) if checker.minimum == checker.maximum: first_encode_lines = first_decode_lines = [ '', 'for ({0} = 0; {0} < {1}; {0}++) {{'.format( unique_i, checker.maximum) ] else: location = self.location_inner('', '.') first_encode_lines = [ 'encoder_append_non_negative_binary_integer(', ' encoder_p,', ' src_p->{}length - {}u,'.format(location, checker.minimum), ' {});'.format(type_.number_of_bits), '', 'for ({0} = 0; {0} < src_p->{1}length; {0}++) {{'.format( unique_i, location) ] first_decode_lines = [ 'dst_p->{}length = ({})decoder_read_non_negative_binary_integer('.format( location, type_name), ' decoder_p,', ' {});'.format(type_.number_of_bits), 'dst_p->{}length += {}u;'.format(location, checker.minimum), '' ] if not does_bits_match_range(type_.number_of_bits, checker.minimum, checker.maximum): first_decode_lines += [ 'if (dst_p->{}length > {}u) {{'.format(location, checker.maximum), ' decoder_abort(decoder_p, EBADLENGTH);', '', ' return;', '}', '' ] first_decode_lines += [ 'for ({0} = 0; {0} < dst_p->{1}length; {0}++) {{'.format( unique_i, location) ] encode_lines = first_encode_lines + indent_lines(encode_lines) + ['}', ''] decode_lines = first_decode_lines + indent_lines(decode_lines) + ['}', ''] return encode_lines, decode_lines def format_type_inner(self, type_, checker): if isinstance(type_, uper.Integer): return self.format_integer_inner(type_, checker) elif isinstance(type_, uper.Real): return self.format_real_inner() elif isinstance(type_, uper.Null): return [], [] elif isinstance(type_, uper.Boolean): return self.format_boolean_inner() elif is_user_type(type_): return self.format_user_type_inner(type_.type_name, type_.module_name) elif isinstance(type_, uper.OctetString): return self.format_octet_string_inner(type_, checker) elif isinstance(type_, uper.Sequence): return self.format_sequence_inner(type_, checker) elif isinstance(type_, uper.Choice): return self.format_choice_inner(type_, checker) elif isinstance(type_, uper.SequenceOf): return self.format_sequence_of_inner(type_, checker) elif isinstance(type_, uper.Enumerated): return self.format_enumerated_inner(type_) elif isinstance(type_, uper.BitString): return self.format_bit_string_inner(type_, checker) else: raise self.error(type_) def is_complex_user_type(self, type_): return is_user_type(type_) and \ not isinstance(type_, (uper.Integer, uper.Boolean, uper.Real, uper.Null)) def is_buffer_type(self, type_): return isinstance(type_, uper.OctetString) def generate_helpers(self, definitions): helpers = [] for pattern, definition in functions: is_in_helpers = any([pattern in helper for helper in helpers]) if pattern in definitions or is_in_helpers: helpers.insert(0, definition) return [ENCODER_AND_DECODER_STRUCTS] + helpers + [''] def generate(compiled, namespace): return _Generator(namespace).generate(compiled) asn1tools-0.169.0/asn1tools/source/c/uper_functions.py000066400000000000000000000255261524544274600227230ustar00rootroot00000000000000"""Functions required by the UPER C code generator """ from .utils import ENCODER_ABORT from .utils import DECODER_ABORT ENCODER_INIT = '''\ static void encoder_init(struct encoder_t *self_p, uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (8 * (ssize_t)size); self_p->pos = 0; }\ ''' ENCODER_GET_RESULT = ''' static ssize_t encoder_get_result(const struct encoder_t *self_p) { if (self_p->size >= 0) { return ((self_p->pos + 7) / 8); } else { return (self_p->pos); } }\ ''' ENCODER_ALLOC = ''' static ssize_t encoder_alloc(struct encoder_t *self_p, size_t size) { ssize_t pos; if ((self_p->pos + (ssize_t)size) <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -ENOMEM; encoder_abort(self_p, ENOMEM); } return (pos); }\ ''' ENCODER_APPEND_BIT = ''' static void encoder_append_bit(struct encoder_t *self_p, int value) { ssize_t pos; pos = encoder_alloc(self_p, 1); if (pos < 0) { return; } if ((pos % 8) == 0) { self_p->buf_p[pos / 8] = 0; } self_p->buf_p[pos / 8] |= (uint8_t)(value << (7 - (pos % 8))); }\ ''' ENCODER_APPEND_BYTES = ''' static void encoder_append_bytes(struct encoder_t *self_p, const uint8_t *buf_p, size_t size) { size_t i; ssize_t pos; size_t byte_pos; size_t pos_in_byte; pos = encoder_alloc(self_p, 8u * size); if (pos < 0) { return; } byte_pos = ((size_t)pos / 8u); pos_in_byte = ((size_t)pos % 8u); if (pos_in_byte == 0u) { (void)memcpy(&self_p->buf_p[byte_pos], buf_p, size); } else { for (i = 0; i < size; i++) { self_p->buf_p[byte_pos + i] |= (buf_p[i] >> pos_in_byte); self_p->buf_p[byte_pos + i + 1] = (buf_p[i] << (8u - pos_in_byte)); } } }\ ''' ENCODER_APPEND_UINT8 = ''' static void encoder_append_uint8(struct encoder_t *self_p, uint8_t value) { uint8_t buf[1]; buf[0] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); }\ ''' ENCODER_APPEND_UINT16 = ''' static void encoder_append_uint16(struct encoder_t *self_p, uint16_t value) { uint8_t buf[2]; buf[0] = (uint8_t)(value >> 8); buf[1] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); }\ ''' ENCODER_APPEND_UINT32 = ''' static void encoder_append_uint32(struct encoder_t *self_p, uint32_t value) { uint8_t buf[4]; buf[0] = (uint8_t)(value >> 24); buf[1] = (uint8_t)(value >> 16); buf[2] = (uint8_t)(value >> 8); buf[3] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); }\ ''' ENCODER_APPEND_UINT64 = ''' static void encoder_append_uint64(struct encoder_t *self_p, uint64_t value) { uint8_t buf[8]; buf[0] = (uint8_t)(value >> 56); buf[1] = (uint8_t)(value >> 48); buf[2] = (uint8_t)(value >> 40); buf[3] = (uint8_t)(value >> 32); buf[4] = (uint8_t)(value >> 24); buf[5] = (uint8_t)(value >> 16); buf[6] = (uint8_t)(value >> 8); buf[7] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); }\ ''' ENCODER_APPEND_INT8 = ''' static void encoder_append_int8(struct encoder_t *self_p, int8_t value) { encoder_append_uint8(self_p, (uint8_t)value + 128); }\ ''' ENCODER_APPEND_INT16 = ''' static void encoder_append_int16(struct encoder_t *self_p, int16_t value) { encoder_append_uint16(self_p, (uint16_t)value + 32768); }\ ''' ENCODER_APPEND_INT32 = ''' static void encoder_append_int32(struct encoder_t *self_p, int32_t value) { encoder_append_uint32(self_p, (uint32_t)value + 2147483648); }\ ''' ENCODER_APPEND_INT64 = ''' static void encoder_append_int64(struct encoder_t *self_p, int64_t value) { uint64_t u64_value; u64_value = (uint64_t)value; u64_value += 9223372036854775808ull; encoder_append_uint64(self_p, u64_value); }\ ''' ENCODER_APPEND_BOOL = ''' static void encoder_append_bool(struct encoder_t *self_p, bool value) { encoder_append_bit(self_p, value ? 1 : 0); }\ ''' ENCODER_APPEND_NON_NEGATIVE_BINARY_INTEGER = ''' static void encoder_append_non_negative_binary_integer(struct encoder_t *self_p, uint64_t value, size_t size) { size_t i; for (i = 0; i < size; i++) { encoder_append_bit(self_p, (value >> (size - i - 1)) & 1); } }\ ''' DECODER_INIT = ''' static void decoder_init(struct decoder_t *self_p, const uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (8 * (ssize_t)size); self_p->pos = 0; }\ ''' DECODER_GET_RESULT = ''' static ssize_t decoder_get_result(const struct decoder_t *self_p) { if (self_p->size >= 0) { return ((self_p->pos + 7) / 8); } else { return (self_p->pos); } }\ ''' DECODER_FREE = ''' static ssize_t decoder_free(struct decoder_t *self_p, size_t size) { ssize_t pos; if ((self_p->pos + (ssize_t)size) <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -EOUTOFDATA; decoder_abort(self_p, EOUTOFDATA); } return (pos); }\ ''' DECODER_READ_BIT = ''' static int decoder_read_bit(struct decoder_t *self_p) { ssize_t pos; int value; pos = decoder_free(self_p, 1); if (pos >= 0) { value = ((self_p->buf_p[pos / 8] >> (7 - (pos % 8))) & 1); } else { value = 0; } return (value); }\ ''' DECODER_READ_BYTES = ''' static void decoder_read_bytes(struct decoder_t *self_p, uint8_t *buf_p, size_t size) { size_t i; ssize_t pos; size_t byte_pos; size_t pos_in_byte; pos = decoder_free(self_p, 8u * size); if (pos < 0) { return; } byte_pos = ((size_t)pos / 8u); pos_in_byte = ((size_t)pos % 8u); if (pos_in_byte == 0) { (void)memcpy(buf_p, &self_p->buf_p[byte_pos], size); } else { for (i = 0; i < size; i++) { buf_p[i] = (self_p->buf_p[byte_pos + i] << pos_in_byte); buf_p[i] |= (self_p->buf_p[byte_pos + i + 1] >> (8u - pos_in_byte)); } } }\ ''' DECODER_READ_UINT8 = ''' static uint8_t decoder_read_uint8(struct decoder_t *self_p) { uint8_t value = 0; decoder_read_bytes(self_p, &value, sizeof(value)); return (value); }\ ''' DECODER_READ_UINT16 = ''' static uint16_t decoder_read_uint16(struct decoder_t *self_p) { uint8_t buf[2]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (((uint16_t)buf[0] << 8) | (uint16_t)buf[1]); }\ ''' DECODER_READ_UINT32 = ''' static uint32_t decoder_read_uint32(struct decoder_t *self_p) { uint8_t buf[4]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]); }\ ''' DECODER_READ_UINT64 = ''' static uint64_t decoder_read_uint64(struct decoder_t *self_p) { uint8_t buf[8]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (((uint64_t)buf[0] << 56) | ((uint64_t)buf[1] << 48) | ((uint64_t)buf[2] << 40) | ((uint64_t)buf[3] << 32) | ((uint64_t)buf[4] << 24) | ((uint64_t)buf[5] << 16) | ((uint64_t)buf[6] << 8) | (uint64_t)buf[7]); }\ ''' DECODER_READ_INT8 = ''' static int8_t decoder_read_int8(struct decoder_t *self_p) { int8_t value; value = (int8_t)decoder_read_uint8(self_p); value -= 128; return (value); }\ ''' DECODER_READ_INT16 = ''' static int16_t decoder_read_int16(struct decoder_t *self_p) { int16_t value; value = (int16_t)decoder_read_uint16(self_p); value -= 32768; return (value); }\ ''' DECODER_READ_INT32 = ''' static int32_t decoder_read_int32(struct decoder_t *self_p) { int32_t value; value = (int32_t)decoder_read_uint32(self_p); value -= 2147483648; return (value); }\ ''' DECODER_READ_INT64 = ''' static int64_t decoder_read_int64(struct decoder_t *self_p) { uint64_t value; value = decoder_read_uint64(self_p); value -= 9223372036854775808ull; return ((int64_t)value); }\ ''' DECODER_READ_BOOL = ''' static bool decoder_read_bool(struct decoder_t *self_p) { return (decoder_read_bit(self_p) != 0); }\ ''' DECODER_READ_NON_NEGATIVE_BINARY_INTEGER = ''' static uint64_t decoder_read_non_negative_binary_integer(struct decoder_t *self_p, size_t size) { size_t i; uint64_t value; value = 0; for (i = 0; i < size; i++) { value <<= 1; value |= (uint64_t)decoder_read_bit(self_p); } return (value); }\ ''' functions = [ ( 'decoder_read_non_negative_binary_integer(', DECODER_READ_NON_NEGATIVE_BINARY_INTEGER ), ('decoder_read_bool(', DECODER_READ_BOOL), ('decoder_read_int64(', DECODER_READ_INT64), ('decoder_read_int32(', DECODER_READ_INT32), ('decoder_read_int16(', DECODER_READ_INT16), ('decoder_read_int8(', DECODER_READ_INT8), ('decoder_read_uint64(', DECODER_READ_UINT64), ('decoder_read_uint32(', DECODER_READ_UINT32), ('decoder_read_uint16(', DECODER_READ_UINT16), ('decoder_read_uint8(', DECODER_READ_UINT8), ('decoder_read_bytes(', DECODER_READ_BYTES), ('decoder_read_bit(', DECODER_READ_BIT), ('decoder_free(', DECODER_FREE), ('decoder_abort(', DECODER_ABORT), ('decoder_get_result(', DECODER_GET_RESULT), ('decoder_init(', DECODER_INIT), ( 'encoder_append_non_negative_binary_integer(', ENCODER_APPEND_NON_NEGATIVE_BINARY_INTEGER ), ('encoder_append_bool(', ENCODER_APPEND_BOOL), ('encoder_append_int64(', ENCODER_APPEND_INT64), ('encoder_append_int32(', ENCODER_APPEND_INT32), ('encoder_append_int16(', ENCODER_APPEND_INT16), ('encoder_append_int8(', ENCODER_APPEND_INT8), ('encoder_append_uint64(', ENCODER_APPEND_UINT64), ('encoder_append_uint32(', ENCODER_APPEND_UINT32), ('encoder_append_uint16(', ENCODER_APPEND_UINT16), ('encoder_append_uint8(', ENCODER_APPEND_UINT8), ('encoder_append_bytes(', ENCODER_APPEND_BYTES), ('encoder_append_bit(', ENCODER_APPEND_BIT), ('encoder_alloc(', ENCODER_ALLOC), ('encoder_abort(', ENCODER_ABORT), ('encoder_get_result(', ENCODER_GET_RESULT), ('encoder_init(', ENCODER_INIT) ] asn1tools-0.169.0/asn1tools/source/c/utils.py000066400000000000000000000667331524544274600210250ustar00rootroot00000000000000import re from operator import itemgetter from ...errors import Error TYPE_DECLARATION_FMT = '''\ /** * Type {type_name} in module {module_name}. */ {helper_types}\ struct {namespace}_{module_name_snake}_{type_name_snake}_t {{ {members} }}; ''' DECLARATION_FMT = '''\ /** * Encode type {type_name} defined in module {module_name}. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t {namespace}_{module_name_snake}_{type_name_snake}_encode( uint8_t *dst_p, size_t size, const struct {namespace}_{module_name_snake}_{type_name_snake}_t *src_p); /** * Decode type {type_name} defined in module {module_name}. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t {namespace}_{module_name_snake}_{type_name_snake}_decode( struct {namespace}_{module_name_snake}_{type_name_snake}_t *dst_p, const uint8_t *src_p, size_t size); ''' DEFINITION_INNER_FMT = '''\ static void {namespace}_{module_name_snake}_{type_name_snake}_encode_inner( struct encoder_t *encoder_p, const struct {namespace}_{module_name_snake}_{type_name_snake}_t *src_p) {{ {encode_body}\ }} static void {namespace}_{module_name_snake}_{type_name_snake}_decode_inner( struct decoder_t *decoder_p, struct {namespace}_{module_name_snake}_{type_name_snake}_t *dst_p) {{ {decode_body}\ }} ''' DEFINITION_FMT = '''\ ssize_t {namespace}_{module_name_snake}_{type_name_snake}_encode( uint8_t *dst_p, size_t size, const struct {namespace}_{module_name_snake}_{type_name_snake}_t *src_p) {{ struct encoder_t encoder; encoder_init(&encoder, dst_p, size); {namespace}_{module_name_snake}_{type_name_snake}_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); }} ssize_t {namespace}_{module_name_snake}_{type_name_snake}_decode( struct {namespace}_{module_name_snake}_{type_name_snake}_t *dst_p, const uint8_t *src_p, size_t size) {{ struct decoder_t decoder; decoder_init(&decoder, src_p, size); {namespace}_{module_name_snake}_{type_name_snake}_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); }} ''' ENCODER_AND_DECODER_STRUCTS = '''\ struct encoder_t { uint8_t *buf_p; ssize_t size; ssize_t pos; }; struct decoder_t { const uint8_t *buf_p; ssize_t size; ssize_t pos; }; ''' ENCODER_ABORT = ''' static void encoder_abort(struct encoder_t *self_p, ssize_t error) { if (self_p->size >= 0) { self_p->size = -error; self_p->pos = -error; } }\ ''' DECODER_ABORT = ''' static void decoder_abort(struct decoder_t *self_p, ssize_t error) { if (self_p->size >= 0) { self_p->size = -error; self_p->pos = -error; } }\ ''' class _MembersBacktracesContext(object): def __init__(self, backtraces, member_name): self.backtraces = backtraces self.member_name = member_name def __enter__(self): for backtrace in self.backtraces: backtrace.append(self.member_name) def __exit__(self, *args): for backtrace in self.backtraces: backtrace.pop() class _UserType(object): def __init__(self, type_name, module_name, type_declaration, declaration, definition_inner, definition): self.type_name = type_name self.module_name = module_name self.type_declaration = type_declaration self.declaration = declaration self.definition_inner = definition_inner self.definition = definition class Generator(object): def __init__(self, namespace): self.namespace = canonical(namespace) self.asn1_members_backtrace = [] self.c_members_backtrace = [] self.module_name = None self.type_name = None self.helper_lines = [] self.base_variables = set() self.used_suffixes_by_base_variables = {} self.encode_variable_lines = [] self.decode_variable_lines = [] self.used_user_types = [] def reset_type(self): self.helper_lines = [] self.base_variables = set() self.used_suffixes_by_base_variables = {} self.encode_variable_lines = [] self.decode_variable_lines = [] self.used_user_types = [] @property def module_name_snake(self): return camel_to_snake_case(self.module_name) @property def type_name_snake(self): return camel_to_snake_case(self.type_name) def type_length(self, minimum, maximum): # Make sure it fits in 64 bits. if minimum < -9223372036854775808: raise self.error( '{} does not fit in int64_t.'.format(minimum)) elif maximum > 18446744073709551615: raise self.error( '{} does not fit in uint64_t.'.format(maximum)) elif minimum < 0 and maximum > 9223372036854775807: raise self.error( '{} does not fit in int64_t.'.format(maximum)) # Calculate the number of bytes needed. if minimum < -2147483648: minimum_length = 64 elif minimum < -32768: minimum_length = 32 elif minimum < -128: minimum_length = 16 elif minimum < 0: minimum_length = 8 else: minimum_length = 0 if maximum > 4294967295: maximum_length = 64 elif maximum > 65535: maximum_length = 32 elif maximum > 255: maximum_length = 16 elif maximum > 0: maximum_length = 8 else: maximum_length = 0 if minimum_length == maximum_length == 0: length = 8 else: length = max(minimum_length, maximum_length) return length @staticmethod def value_length(value): if value < 256: length = 1 elif value < 65536: length = 2 elif value < 16777216: length = 3 elif value < 4294967296: length = 4 else: length = 8 return length def format_type_name(self, minimum, maximum): length = self.type_length(minimum, maximum) type_name = 'int{}_t'.format(length) if minimum >= 0: type_name = 'u' + type_name return type_name def format_default_enumerated(self, type_): if is_user_type(type_): return '{}_{}_e'.format(self.get_user_type_prefix(type_.type_name, type_.module_name), type_.default) else: with self.members_backtrace_push(type_.name): return '{}_{}_e'.format(self.location, type_.default) def get_addition_present_condition(self, type_): return ' || '.join(['src_p->{}is_{}_addition_present'. format(self.location_inner('', '.'), addition.name) for addition in type_.additions]) def get_named_number_values(self, type_): if type_.named_bits is not None: return sorted([(canonical(data), value) for data, value in type_.named_bits], key=itemgetter(1)) def get_user_type_prefix(self, type_name, module_name): module_name_snake = camel_to_snake_case(module_name) type_name_snake = camel_to_snake_case(type_name) return '{}_{}_{}'.format(self.namespace, module_name_snake, type_name_snake) @property def location(self): location = '{}_{}_{}'.format(self.namespace, self.module_name_snake, self.type_name_snake) if self.asn1_members_backtrace: location += '_{}'.format('_'.join(self.asn1_members_backtrace)) return location def location_inner(self, default='value', end=''): if self.c_members_backtrace: return '.'.join(self.c_members_backtrace) + end else: return default def location_error(self): location = '{}.{}'.format(self.module_name, self.type_name) if self.asn1_members_backtrace: location += '.{}'.format('.'.join(self.asn1_members_backtrace)) return location def members_backtrace_push(self, member_name): backtraces = [ self.asn1_members_backtrace, self.c_members_backtrace ] return _MembersBacktracesContext(backtraces, member_name) def asn1_members_backtrace_push(self, member_name): backtraces = [self.asn1_members_backtrace] return _MembersBacktracesContext(backtraces, member_name) def c_members_backtrace_push(self, member_name): backtraces = [self.c_members_backtrace] return _MembersBacktracesContext(backtraces, member_name) def get_member_checker(self, checker, name): for member in checker.members: if member.name == name: return member raise Error('No member checker found for {}.'.format(name)) def add_unique_variable(self, fmt, name, variable_lines=None): if name in self.base_variables: try: suffix = self.used_suffixes_by_base_variables[name] suffix += 1 except KeyError: suffix = 2 self.used_suffixes_by_base_variables[name] = suffix unique_name = '{}_{}'.format(name, suffix) else: self.base_variables.add(name) unique_name = name line = fmt.format(unique_name) if variable_lines is None: self.encode_variable_lines.append(line) self.decode_variable_lines.append(line) elif variable_lines == 'encode': self.encode_variable_lines.append(line) else: self.decode_variable_lines.append(line) return unique_name def add_unique_encode_variable(self, fmt, name): return self.add_unique_variable(fmt, name, 'encode') def add_unique_decode_variable(self, fmt, name): return self.add_unique_variable(fmt, name, 'decode') def add_sequence_member(self, member, checker): member_checker = self.get_member_checker(checker, member.name) with self.members_backtrace_push(canonical(member.name)): member_lines = self.format_type(member, member_checker) if member_lines: member_lines[-1] += ' {};'.format(canonical(member.name)) return member_lines def error(self, message): return Error('{}: {}'.format(self.location_error(), message)) def format_integer(self, checker): if not checker.has_lower_bound(): raise self.error('INTEGER has no minimum value.') if not checker.has_upper_bound(): raise self.error('INTEGER has no maximum value.') type_name = self.format_type_name(checker.minimum, checker.maximum) return [type_name] def format_boolean(self): return ['bool'] def format_octet_string(self, checker): if not checker.has_upper_bound(): raise self.error('OCTET STRING has no maximum length.') if checker.minimum == checker.maximum: lines = [] elif checker.maximum < 256: lines = [' uint8_t length;'] else: lines = [' uint32_t length;'] return [ 'struct {' ] + lines + [ ' uint8_t buf[{}];'.format(checker.maximum), '}' ] def format_bit_string(self, type_, checker): def get_value(value): byte = (length - 1) - (value // 8) bit = 7 - (value % 8) return ('0x{:0' + str(length // 4) + 'x}').format(1 << (bit + byte * 8)) if checker.minimum != checker.maximum: raise self.error('BIT STRING with variable SIZE not supported.') if checker.minimum > 64: raise self.error('BIT STRING with a length of more than 64 bits are not ' 'supported.') max_value = 2**checker.minimum - 1 length = self.value_length(max_value) named_bits = self.get_named_number_values(type_) type_name = self.format_type_name(max_value, max_value) if named_bits is not None: self.helper_lines += [ 'static const {} {}_{} = {};'.format(type_name, self.location.upper(), name.upper(), get_value(value)) for name, value in self.get_named_number_values(type_) ] return [type_name] def format_sequence(self, type_, checker): lines = [] for member in type_.root_members: if member.optional: lines += ['bool is_{}_present;'.format(canonical(member.name))] lines += self.add_sequence_member(member, checker) if type_.additions is not None and len(type_.additions) > 0: for addition in type_.additions: lines += ['bool is_{}_addition_present;'.format(addition.name)] lines += self.add_sequence_member(addition, checker) return ['struct {'] + indent_lines(lines) + ['}'] def format_sequence_of(self, type_, checker): if not checker.is_bound(): raise self.error('SEQUENCE OF has no maximum length.') lines = self.format_type(type_.element_type, checker.element_type) if lines: lines[-1] += ' elements[{}];'.format(checker.maximum) if checker.minimum == checker.maximum: length_lines = [] elif checker.maximum < 256: length_lines = ['uint8_t length;'] else: length_lines = ['uint32_t length;'] return ['struct {'] + indent_lines(length_lines + lines) + ['}'] def format_enumerated(self, type_): lines = ['enum {}_e'.format(self.location)] values = [ ' {}_{}_e = {}'.format(self.location, name, value) for name, value in self.get_enumerated_values(type_) ] self.helper_lines += [ 'enum {}_e {{'.format(self.location) ] + join_lines(values, ',') + [ '};', '' ] return lines def format_choice(self, type_, checker): lines = [] choices = [] for member in self.get_choice_members(type_): member_checker = self.get_member_checker(checker, member.name) with self.members_backtrace_push(canonical(member.name)): choice_lines = self.format_type(member, member_checker) if choice_lines: choice_lines[-1] += ' {};'.format(canonical(member.name)) lines += choice_lines choices.append(' {}_choice_{}_e'.format(self.location, canonical(member.name))) self.helper_lines += [ 'enum {}_choice_e {{'.format(self.location) ] + join_lines(choices, ',') + [ '};', '' ] lines = [ 'enum {}_choice_e choice;'.format(self.location), 'union {' ] + indent_lines(lines) + [ '} value;' ] lines = ['struct {'] + indent_lines(lines) + ['}'] return lines def format_user_type(self, type_name, module_name): module_name_snake = camel_to_snake_case(module_name) type_name_snake = camel_to_snake_case(type_name) self.used_user_types.append((type_name, module_name)) return ['struct {}_{}_{}_t'.format(self.namespace, module_name_snake, type_name_snake)] def format_sequence_inner_member(self, member, checker, default_condition_by_member_name, skip_when_not_present=True): member_checker = self.get_member_checker(checker, member.name) with self.members_backtrace_push(canonical(member.name)): encode_lines, decode_lines = self.format_type_inner( member, member_checker) location = self.location_inner('', '.') if member.optional and skip_when_not_present: is_present = '{}is_{}_present'.format(location, canonical(member.name)) encode_lines = [ '', 'if (src_p->{}) {{'.format(is_present) ] + indent_lines(encode_lines) + [ '}', '' ] decode_lines = [ '', 'if (dst_p->{}) {{'.format(is_present) ] + indent_lines(decode_lines) + [ '}', '' ] elif member.default is not None and skip_when_not_present: name = '{}{}'.format(location, canonical(member.name)) if self.is_buffer_type(member): default_value = '{{' + ', '.join(['0x%02X' % m for m in member.default]) + '}};' default_variable = self.add_unique_variable('static const uint8_t {}[] = ' + default_value, canonical(member.name) + '_default') encode_lines = [ '', 'if ((memcmp(src_p->{}.buf, {}, sizeof({})) != 0) ||'.format( name, default_variable, default_variable), ' (src_p->{}.length != sizeof({}))) {{'.format( name, default_variable) ] + indent_lines(encode_lines) + [ '}', '' ] decode_lines = [ '', 'if ({}) {{'.format(default_condition_by_member_name[member.name]) ] + indent_lines(decode_lines) + [ '} else {', ' memcpy(dst_p->{}.buf, {}, sizeof({}));'.format( name, default_variable, default_variable), ' dst_p->{}.length = sizeof({});'.format( name, default_variable ), '}', '' ] else: encode_lines = [ '', 'if (src_p->{}{} != {}) {{'.format( name, '.value' if self.is_complex_user_type(member) else '', self.format_default(member)) ] + indent_lines(encode_lines) + [ '}', '' ] decode_lines = [ '', 'if ({}) {{'.format(default_condition_by_member_name[member.name]) ] + indent_lines(decode_lines) + [ '} else {', ' dst_p->{}{} = {};'.format( name, '.value' if self.is_complex_user_type(member) else '', self.format_default(member)), '}', '' ] return encode_lines, decode_lines def generate_type_declaration(self, compiled_type): type_ = compiled_type.type checker = compiled_type.constraints_checker.type lines = self.generate_type_declaration_process(type_, checker) if not lines: lines = ['uint8_t dummy;'] lines = indent_lines(lines) if self.helper_lines: self.helper_lines.append('') return [ TYPE_DECLARATION_FMT.format(namespace=self.namespace, module_name=self.module_name, type_name=self.type_name, module_name_snake=self.module_name_snake, type_name_snake=self.type_name_snake, helper_types='\n'.join(self.helper_lines), members='\n'.join(lines)) ] def generate_declaration(self): return DECLARATION_FMT.format(namespace=self.namespace, module_name=self.module_name, type_name=self.type_name, module_name_snake=self.module_name_snake, type_name_snake=self.type_name_snake) def generate_definition(self): return DEFINITION_FMT.format(namespace=self.namespace, module_name_snake=self.module_name_snake, type_name_snake=self.type_name_snake) def generate_definition_inner(self, compiled_type): encode_lines, decode_lines = self.generate_definition_inner_process( compiled_type.type, compiled_type.constraints_checker.type) if self.encode_variable_lines: encode_lines = self.encode_variable_lines + [''] + encode_lines if self.decode_variable_lines: decode_lines = self.decode_variable_lines + [''] + decode_lines encode_lines = indent_lines(encode_lines) + [''] decode_lines = indent_lines(decode_lines) + [''] return DEFINITION_INNER_FMT.format(namespace=self.namespace, module_name_snake=self.module_name_snake, type_name_snake=self.type_name_snake, encode_body='\n'.join(encode_lines), decode_body='\n'.join(decode_lines)) def generate(self, compiled): user_types = {} user_type_dependencies = {} for module_name, module in sorted(compiled.modules.items()): self.module_name = module_name for type_name, compiled_type in sorted(module.items()): self.type_name = type_name self.reset_type() type_declaration = self.generate_type_declaration(compiled_type) if not type_declaration: continue declaration = self.generate_declaration() definition_inner = self.generate_definition_inner(compiled_type) definition = self.generate_definition() user_type = _UserType(type_name, module_name, type_declaration, declaration, definition_inner, definition) user_type_name_tuple = (user_type.type_name, user_type.module_name) user_types[user_type_name_tuple] = user_type user_type_dependencies[user_type_name_tuple] = self.used_user_types user_type_sorted_names = topological_sort(user_type_dependencies) type_declarations = [] declarations = [] definitions_inner = [] definitions = [] for user_type_name in user_type_sorted_names: user_type = user_types[user_type_name] type_declarations.extend(user_type.type_declaration) declarations.append(user_type.declaration) definitions_inner.append(user_type.definition_inner) definitions.append(user_type.definition) type_declarations = '\n'.join(type_declarations) declarations = '\n'.join(declarations) definitions = '\n'.join(definitions_inner + definitions) helpers = '\n'.join(self.generate_helpers(definitions)) return type_declarations, declarations, helpers, definitions def format_default(self, type_): raise NotImplementedError('To be implemented by subclasses.') def format_type(self, type_, checker): raise NotImplementedError('To be implemented by subclasses.') def format_type_inner(self, type_, checker): raise NotImplementedError('To be implemented by subclasses.') def get_enumerated_values(self, type_): raise NotImplementedError('To be implemented by subclasses.') def get_choice_members(self, type_): raise NotImplementedError('To be implemented by subclasses.') def generate_type_declaration_process(self, type_, checker): raise NotImplementedError('To be implemented by subclasses.') def generate_definition_inner_process(self, type_, checker): raise NotImplementedError('To be implemented by subclasses.') def generate_helpers(self, definitions): raise NotImplementedError('To be implemented by subclasses.') def is_complex_user_type(self, type_): raise NotImplementedError('To be implemented by subclasses.') def is_buffer_type(self, type_): raise NotImplementedError('To be implemented by subclasses.') def canonical(value): """Replace anything but 'a-z', 'A-Z' and '0-9' with '_'. """ return re.sub(r'[^a-zA-Z0-9]', '_', value) def camel_to_snake_case(value): value = re.sub(r'(.)([A-Z][a-z]+)', r'\1_\2', value) value = re.sub(r'(_+)', '_', value) value = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', value).lower() value = canonical(value) return value def join_lines(lines, suffix): return[line + suffix for line in lines[:-1]] + lines[-1:] def is_user_type(type_): return type_.module_name is not None def strip_blank_lines(lines): try: while lines[0] == '': del lines[0] while lines[-1] == '': del lines[-1] except IndexError: pass stripped = [] for line in lines: if line == '' and stripped[-1] == '': continue stripped.append(line) return stripped def indent_lines(lines): indented_lines = [] for line in lines: if line: indented_line = 4 * ' ' + line else: indented_line = line indented_lines.append(indented_line) return strip_blank_lines(indented_lines) def dedent_lines(lines): return [line[4:] for line in lines] def topological_sort(graph): """Topological sort algorithm to return a list of keys to a dictionary of lists of dependencies. The returned keys define an order so that all dependent items are in front of the originating item. """ def recurse(node, path): if node not in path: edges = graph[node] for edge in edges: if edge not in path: path = recurse(edge, path) path = path + [node] return path path = [] for node in sorted(graph): path = recurse(node, path) return path asn1tools-0.169.0/asn1tools/source/rust/000077500000000000000000000000001524544274600200475ustar00rootroot00000000000000asn1tools-0.169.0/asn1tools/source/rust/__init__.py000066400000000000000000000012111524544274600221530ustar00rootroot00000000000000import time from ...version import __version__ from . import uper SOURCE_FMT = '''\ //! This file was generated by asn1tools version {version} {date}. {helpers} {types_code}\ ''' def generate(compiled, codec): """Generate Rust source code from given compiled specification. """ date = time.ctime() if codec == 'uper': helpers, types_code = uper.generate(compiled) else: raise Exception() source = SOURCE_FMT.format(version=__version__, date=date, helpers=helpers, types_code=types_code) return source asn1tools-0.169.0/asn1tools/source/rust/uper.py000066400000000000000000000612451524544274600214040ustar00rootroot00000000000000"""Unaligned Packed Encoding Rules (UPER) Rust source code codec generator. """ from .utils import ENCODER_AND_DECODER_STRUCTS from .utils import ENCODER_ABORT from .utils import DECODER_ABORT from .utils import Generator from .utils import is_user_type from .utils import indent_lines from .utils import dedent_lines from .utils import make_camel_case from ...codecs import uper ENCODER_INIT = '''\ fn new(dst: &'a mut [u8]) -> Encoder { Encoder { size: 8 * dst.len(), buf: dst, pos: 0, error: None } }\ ''' ENCODER_GET_RESULT = ''' fn get_result(&self) -> Result { if self.error.is_none() { return Ok((self.pos + 7) / 8); } else { return Err(self.error.unwrap()); } }\ ''' ENCODER_ALLOC = ''' fn alloc(&mut self, size: usize) -> Result { if self.pos + size <= self.size { let pos = self.pos; self.pos += size; Ok(pos) } else { self.abort(Error::OutOfMemory); Err(()) } }\ ''' ENCODER_APPEND_BIT = ''' fn append_bit(&mut self, value: u8) { if let Ok(pos) = self.alloc(1) { if pos % 8 == 0 { self.buf[pos / 8] = 0; } self.buf[pos / 8] |= value << (7 - (pos % 8)); } }\ ''' ENCODER_APPEND_BYTES = ''' fn append_bytes(&mut self, buf: &[u8]) { if let Ok(pos) = self.alloc(8 * buf.len()) { let byte_pos = pos / 8; let pos_in_byte = pos % 8; if pos_in_byte == 0 { self.buf.get_mut(byte_pos..byte_pos + buf.len()) .unwrap() .copy_from_slice(buf.get(0..buf.len()).unwrap()); } else { for i in 0..buf.len() { self.buf[byte_pos + i] |= buf[i] >> pos_in_byte; self.buf[byte_pos + i + 1] = buf[i] << (8 - pos_in_byte); } } } }\ ''' ENCODER_APPEND_U8 = ''' fn append_u8(&mut self, value: u8) { self.append_bytes(&value.to_be_bytes()); }\ ''' ENCODER_APPEND_U16 = ''' fn append_u16(&mut self, value: u16) { self.append_bytes(&value.to_be_bytes()); }\ ''' ENCODER_APPEND_U32 = ''' fn append_u32(&mut self, value: u32) { self.append_bytes(&value.to_be_bytes()); }\ ''' ENCODER_APPEND_U64 = ''' fn append_u64(&mut self, value: u64) { self.append_bytes(&value.to_be_bytes()); }\ ''' ENCODER_APPEND_I8 = ''' fn append_i8(&mut self, value: i8) { self.append_u8((value as u8).wrapping_add(128)); }\ ''' ENCODER_APPEND_I16 = ''' fn append_i16(&mut self, value: i16) { self.append_u16((value as u16).wrapping_add(32768)); }\ ''' ENCODER_APPEND_I32 = ''' fn append_i32(&mut self, value: i32) { self.append_u32((value as u32).wrapping_add(2147483648)); }\ ''' ENCODER_APPEND_I64 = ''' fn append_i64(&mut self, value: i64) { self.append_u64((value as u64).wrapping_add(9223372036854775808)); }\ ''' ENCODER_APPEND_BOOL = ''' fn append_bool(&mut self, value: bool) { self.append_bit(value as u8); }\ ''' ENCODER_APPEND_NON_NEGATIVE_BINARY_INTEGER = ''' fn append_non_negative_binary_integer(&mut self, value: u64, size: usize) { for i in 0..size { self.append_bit((value >> (size - i - 1)) as u8 & 1); } }\ ''' DECODER_INIT = ''' fn new(src: &'a[u8]) -> Decoder { Decoder { buf: src, size: 8 * src.len(), pos: 0, error: None } }\ ''' DECODER_GET_RESULT = ''' fn get_result(&self) -> Result { if self.error.is_none() { Ok((self.pos + 7) / 8) } else { Err(self.error.unwrap()) } }\ ''' DECODER_FREE = ''' fn free(&mut self, size: usize) -> Result { if self.pos + size <= self.size { let pos = self.pos; self.pos += size; Ok(pos) } else { self.abort(Error::OutOfData); Err(()) } }\ ''' DECODER_READ_BIT = ''' fn read_bit(&mut self) -> u8 { if let Ok(pos) = self.free(1) { (self.buf[pos / 8] >> (7 - (pos % 8))) & 1 } else { 0 } }\ ''' DECODER_READ_BYTES = ''' fn read_bytes(&mut self, buf: &mut [u8]) { if let Ok(pos) = self.free(8 * buf.len()) { let byte_pos = pos / 8; let pos_in_byte = pos % 8; if pos_in_byte == 0 { buf.copy_from_slice( self.buf.get(byte_pos..byte_pos + buf.len()).unwrap()); } else { for i in 0..buf.len() { buf[i] = self.buf[byte_pos + i] << pos_in_byte; buf[i] |= self.buf[byte_pos + i + 1] >> (8 - pos_in_byte); } } } }\ ''' DECODER_READ_U8 = ''' fn read_u8(&mut self) -> u8 { let mut buf = [0; 1]; self.read_bytes(&mut buf); u8::from_be_bytes(buf) }\ ''' DECODER_READ_U16 = ''' fn read_u16(&mut self) -> u16 { let mut buf = [0; 2]; self.read_bytes(&mut buf); u16::from_be_bytes(buf) }\ ''' DECODER_READ_U32 = ''' fn read_u32(&mut self) -> u32 { let mut buf = [0; 4]; self.read_bytes(&mut buf); u32::from_be_bytes(buf) }\ ''' DECODER_READ_U64 = ''' fn read_u64(&mut self) -> u64 { let mut buf = [0; 8]; self.read_bytes(&mut buf); u64::from_be_bytes(buf) }\ ''' DECODER_READ_I8 = ''' fn read_i8(&mut self) -> i8 { self.read_u8().wrapping_sub(128) as i8 }\ ''' DECODER_READ_I16 = ''' fn read_i16(&mut self) -> i16 { self.read_u16().wrapping_sub(32768) as i16 }\ ''' DECODER_READ_I32 = ''' fn read_i32(&mut self) -> i32 { self.read_u32().wrapping_sub(2147483648) as i32 }\ ''' DECODER_READ_I64 = ''' fn read_i64(&mut self) -> i64 { self.read_u64().wrapping_sub(9223372036854775808) as i64 }\ ''' DECODER_READ_BOOL = ''' fn read_bool(&mut self) -> bool { self.read_bit() != 0 }\ ''' DECODER_READ_NON_NEGATIVE_BINARY_INTEGER = ''' fn read_non_negative_binary_integer(&mut self, size: usize) -> u64 { let mut value: u64 = 0; for _ in 0..size { value <<= 1; value |= self.read_bit() as u64; } value }\ ''' def does_bits_match_range(number_of_bits, minimum, maximum): return 2 ** number_of_bits == (maximum - minimum + 1) class _Generator(Generator): def format_real(self): return [] def get_enumerated_values(self, type_): return sorted(type_.root_data_to_index) def get_choice_members(self, type_): return type_.root_index_to_member.values() def format_type(self, type_, checker): if isinstance(type_, uper.Integer): return self.format_integer(checker) elif isinstance(type_, uper.Boolean): return self.format_boolean() elif isinstance(type_, uper.Real): return self.format_real() elif isinstance(type_, uper.Null): return [] elif is_user_type(type_): return self.format_user_type(type_.type_name, type_.module_name) elif isinstance(type_, uper.OctetString): return self.format_octet_string(checker) elif isinstance(type_, uper.Sequence): return self.format_sequence(type_, checker) elif isinstance(type_, uper.Choice): return self.format_choice(type_, checker) elif isinstance(type_, uper.SequenceOf): return self.format_sequence_of(type_, checker) elif isinstance(type_, uper.Enumerated): return self.format_enumerated(type_) else: raise self.error( "Unsupported type '{}'.".format(type_.type_name)) def generate_type_declaration_process(self, type_, checker): if isinstance(type_, uper.Integer): lines = self.format_integer(checker) lines[0] += ' value;' elif isinstance(type_, uper.Boolean): lines = self.format_boolean() lines[0] += ' value;' elif isinstance(type_, uper.Real): lines = self.format_real() elif isinstance(type_, uper.Enumerated): lines = self.format_enumerated(type_) lines[0] += ' value;' elif isinstance(type_, uper.Sequence): lines = self.format_sequence(type_, checker) elif isinstance(type_, uper.SequenceOf): lines = self.format_sequence_of(type_, checker)[1:-1] lines = dedent_lines(lines) elif isinstance(type_, uper.Choice): lines = self.format_choice(type_, checker) elif isinstance(type_, uper.OctetString): lines = self.format_octet_string(checker)[1:-1] lines = dedent_lines(lines) elif isinstance(type_, uper.Null): lines = [] else: raise self.error( "Unsupported type '{}'.".format(type_.type_name)) return lines def generate_definition_inner_process(self, type_, checker): if isinstance(type_, uper.Integer): return self.format_integer_inner(type_, checker) elif isinstance(type_, uper.Boolean): return self.format_boolean_inner() elif isinstance(type_, uper.Real): return self.format_real_inner() elif isinstance(type_, uper.Sequence): return self.format_sequence_inner(type_, checker) elif isinstance(type_, uper.SequenceOf): return self.format_sequence_of_inner(type_, checker) elif isinstance(type_, uper.Choice): return self.format_choice_inner(type_, checker) elif isinstance(type_, uper.OctetString): return self.format_octet_string_inner(type_, checker) elif isinstance(type_, uper.Enumerated): return self.format_enumerated_inner(type_) elif isinstance(type_, uper.Null): return self.format_null_inner() else: return [], [] def format_integer_inner(self, type_, checker): type_name = self.format_type_name(checker.minimum, checker.maximum) location = self.location_inner() if (type_.number_of_bits % 8) == 0: return ( [ 'encoder.append_{}(self.{});'.format( type_name, location) ], [ 'self.{} = decoder.read_{}();'.format(location, type_name) ] ) else: return ( [ 'encoder.append_non_negative_binary_integer(', ' (self.{} - {}) as u64,'.format(location, checker.minimum), ' {});'.format(type_.number_of_bits) ], [ 'self.{} = ' 'decoder.read_non_negative_binary_integer({}) as {};'.format( location, type_.number_of_bits, type_name), 'self.{} += {};'.format(location, checker.minimum) ] ) def format_boolean_inner(self): return ( [ 'encoder.append_bool(self.{});'.format( self.location_inner()) ], [ 'self.{} = decoder.read_bool();'.format( self.location_inner()) ] ) def format_real_inner(self): return [], [] def format_sequence_inner(self, type_, checker): encode_lines = [] decode_lines = [] member_name_to_is_present = {} for member in type_.root_members: if member.optional: name = '{}is_{}_present'.format(self.location_inner('', '.'), member.name) encode_lines.append( 'encoder.append_bit(self.{} as u8);'.format(name)) decode_lines.append( 'self.{} = decoder.read_bit() != 0;'.format( name)) elif member.default is not None: unique_is_present = self.add_unique_variable('is_present') member_name_to_is_present[member.name] = unique_is_present encode_lines.append( 'encoder.append_bit((self.{}{} != {}) as u8);'.format( self.location_inner('', '.'), member.name, member.default)) decode_lines.append( '{} = decoder.read_bit() == 1;'.format( unique_is_present)) for member in type_.root_members: (member_encode_lines, member_decode_lines) = self.format_sequence_inner_member( member, checker, member_name_to_is_present) encode_lines += member_encode_lines decode_lines += member_decode_lines return encode_lines, decode_lines def format_octet_string_inner(self, type_, checker): location = self.location_inner('', '.') if checker.minimum == checker.maximum: encode_lines = [ 'encoder.append_bytes(&self.{}buf);'.format(location) ] decode_lines = [ 'decoder.read_bytes(&mut self.{}buf);'.format(location) ] else: encode_lines = [ 'encoder.append_non_negative_binary_integer(', ' (self.{}length - {}) as u64,'.format(location, checker.minimum), ' {});'.format(type_.number_of_bits), 'encoder.append_bytes(&self.{}buf,'.format(location), ' self.{}length);'.format(location) ] decode_lines = [ 'self.{}length = decoder.read_non_negative_binary_integer('.format( location), ' {});'.format(type_.number_of_bits), 'self.{}length += {};'.format(location, checker.minimum) ] if not does_bits_match_range(type_.number_of_bits, checker.minimum, checker.maximum): decode_lines += [ '', 'if self.{}length > {} {{'.format(location, checker.maximum), ' decoder.abort(Error::BadLength);', '', ' return;', '}', '' ] decode_lines += [ 'decoder.read_bytes(&mut self.{}buf,'.format(location), ' self.{}length);'.format(location) ] return encode_lines, decode_lines def format_user_type_inner(self): encode_lines = [ 'self.{}.encode_inner(&mut encoder);'.format( self.location_inner()) ] decode_lines = [ 'self.{}.decode_inner(&mut decoder);'.format( self.location_inner()) ] return encode_lines, decode_lines def format_choice_inner(self, type_, checker): encode_lines = [] decode_lines = [] unique_choice = self.add_unique_variable('choice') choice = '{}choice'.format(self.location_inner('', '.')) for member in type_.root_index_to_member.values(): member_checker = self.get_member_checker(checker, member.name) with self.asn1_members_backtrace_push(member.name): with self.c_members_backtrace_push(member.name): choice_encode_lines, choice_decode_lines = self.format_type_inner( member, member_checker) index = type_.root_name_to_index[member.name] choice_encode_lines = [ 'encoder.append_non_negative_binary_integer({}, {});'.format( index, type_.root_number_of_bits) ] + choice_encode_lines encode_lines += [ ' {}({}) => {{'.format(make_camel_case(member.name), unique_choice) ] + indent_lines(choice_encode_lines, 8) + [ ' },' ] choice_decode_lines = [ 'self.{} = {}{};'.format(choice, self.location, make_camel_case(member.name)) ] + choice_decode_lines decode_lines += [ ' {} => {{'.format(index) ] + indent_lines(choice_decode_lines, 8) + [ ' },' ] encode_lines = [ '', 'match self {' ] + encode_lines + [ ' _ => encoder.abort(Error::BadChoice);', '}', '' ] decode_lines = [ '', 'match decoder.read_non_negative_binary_integer({}) {{'.format( type_.root_number_of_bits) ] + decode_lines + [ ' _ => decoder.abort(Error::BadChoice);', '}', '' ] return encode_lines, decode_lines def format_enumerated_inner(self, type_): return ( [ 'encoder.append_non_negative_binary_integer(' 'self.{}, {});'.format(self.location_inner(), type_.root_number_of_bits) ], [ 'self.{} = decoder.read_non_negative_binary_integer(' '{});'.format(self.location_inner(), type_.root_number_of_bits) ] ) def format_null_inner(self): return ( [ '(void)src_p;' ], [ '(void)dst_p;' ] ) def format_sequence_of_inner(self, type_, checker): unique_i = self.add_unique_variable('i') with self.c_members_backtrace_push('elements[{}]'.format(unique_i)): encode_lines, decode_lines = self.format_type_inner( type_.element_type, checker.element_type) if checker.minimum == checker.maximum: first_encode_lines = first_decode_lines = [ '', 'for {} in 0..{} {{'.format(unique_i, checker.maximum) ] else: location = self.location_inner('', '.') first_encode_lines = [ 'encoder.append_non_negative_binary_integer(', ' (self.{}length - {}) as u64,'.format(location, checker.minimum), ' {});'.format(type_.number_of_bits), '', 'for {} in 0..self.{}length {{'.format(unique_i, location) ] first_decode_lines = [ 'self.{}length = ' 'decoder.read_non_negative_binary_integer({});'.format( location, type_.number_of_bits), 'self.{}length += {};'.format(location, checker.minimum), '' ] if not does_bits_match_range(type_.number_of_bits, checker.minimum, checker.maximum): first_decode_lines += [ 'if self.{}length > {} {{'.format(location, checker.maximum), ' decoder.abort(Error::BadLength);', '', ' return;', '}', '' ] first_decode_lines += [ 'for {} in 0..self.{}length {{'.format(unique_i, location) ] encode_lines = first_encode_lines + indent_lines(encode_lines) + ['}', ''] decode_lines = first_decode_lines + indent_lines(decode_lines) + ['}', ''] return encode_lines, decode_lines def format_type_inner(self, type_, checker): if isinstance(type_, uper.Integer): return self.format_integer_inner(type_, checker) elif isinstance(type_, uper.Real): return self.format_real_inner() elif isinstance(type_, uper.Null): return [], [] elif isinstance(type_, uper.Boolean): return self.format_boolean_inner() elif is_user_type(type_): return self.format_user_type_inner() elif isinstance(type_, uper.OctetString): return self.format_octet_string_inner(type_, checker) elif isinstance(type_, uper.Sequence): return self.format_sequence_inner(type_, checker) elif isinstance(type_, uper.Choice): return self.format_choice_inner(type_, checker) elif isinstance(type_, uper.SequenceOf): return self.format_sequence_of_inner(type_, checker) elif isinstance(type_, uper.Enumerated): return self.format_enumerated_inner(type_) else: raise self.error(type_) def generate_encoder(self, definitions): functions = [ ('encoder.init(', ENCODER_INIT), ('encoder.get_result(', ENCODER_GET_RESULT), ('encoder.abort(', ENCODER_ABORT), ('encoder.append_bit(', ENCODER_ALLOC), ('encoder.append_bit(', ENCODER_APPEND_BIT), ('encoder.append_bytes(', ENCODER_APPEND_BYTES), ('encoder.append_u8(', ENCODER_APPEND_U8), ('encoder.append_u16(', ENCODER_APPEND_U16), ('encoder.append_u32(', ENCODER_APPEND_U32), ('encoder.append_u64(', ENCODER_APPEND_U64), ('encoder.append_i8(', ENCODER_APPEND_I8), ('encoder.append_i16(', ENCODER_APPEND_I16), ('encoder.append_i32(', ENCODER_APPEND_I32), ('encoder.append_i64(', ENCODER_APPEND_I64), ('encoder.append_bool(', ENCODER_APPEND_BOOL), ( 'encoder.append_non_negative_binary_integer(', ENCODER_APPEND_NON_NEGATIVE_BINARY_INTEGER ) ] helpers = [ "impl<'a> Encoder<'a> {", " fn new(dst: &'a mut [u8]) -> Encoder {", ' Encoder {', ' size: 8 * dst.len(),', ' buf: dst,', ' pos: 0,', ' error: None', ' }', ' }' ] for pattern, definition in functions: if pattern in definitions: helpers.append(definition) return helpers + ['}', ''] def generate_decoder(self, definitions): functions = [ ('decoder.init(', DECODER_INIT), ('decoder.get_result(', DECODER_GET_RESULT), ('decoder.abort(', DECODER_ABORT), ('decoder.read_bit(', DECODER_FREE), ('decoder.read_bit(', DECODER_READ_BIT), ('decoder.read_bytes(', DECODER_READ_BYTES), ('decoder.read_u8(', DECODER_READ_U8), ('decoder.read_u16(', DECODER_READ_U16), ('decoder.read_u32(', DECODER_READ_U32), ('decoder.read_u64(', DECODER_READ_U64), ('decoder.read_i8(', DECODER_READ_I8), ('decoder.read_i16(', DECODER_READ_I16), ('decoder.read_i32(', DECODER_READ_I32), ('decoder.read_i64(', DECODER_READ_I64), ('decoder.read_bool(', DECODER_READ_BOOL), ( 'decoder.read_non_negative_binary_integer(', DECODER_READ_NON_NEGATIVE_BINARY_INTEGER ) ] helpers = [ "impl<'a> Decoder<'a> {", " fn new(src: &'a[u8]) -> Decoder {", ' Decoder {', ' buf: src,', ' size: 8 * src.len(),', ' pos: 0,', ' error: None', ' }', ' }' ] for pattern, definition in functions: if pattern in definitions: helpers.append(definition) return helpers + ['}'] def generate_helpers(self, definitions): helpers = [ENCODER_AND_DECODER_STRUCTS] helpers += self.generate_encoder(definitions) helpers += self.generate_decoder(definitions) return helpers + [''] def generate(compiled): return _Generator().generate(compiled) asn1tools-0.169.0/asn1tools/source/rust/utils.py000066400000000000000000000447121524544274600215710ustar00rootroot00000000000000import re from ...errors import Error TYPE_DECLARATION_FMT = '''\ /// Type {type_name} in module {module_name}. {members} ''' DEFINITION_FMT = ''' impl {module_name}{type_name} {{ pub fn encode(&mut self, mut dst: &mut [u8]) -> Result {{ let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() }} pub fn decode(&mut self, src: &[u8]) -> Result {{ let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() }} fn encode_inner(&mut self, encoder: &mut Encoder) {{ {encode_body}\ }} fn decode_inner(&mut self, decoder: &mut Decoder) {{ {decode_body}\ }} }} ''' ENCODER_AND_DECODER_STRUCTS = '''\ #[derive(Debug, PartialEq, Copy, Clone)] pub enum Error { BadChoice, BadEnum, BadLength, OutOfData, OutOfMemory } struct Encoder<'a> { buf: &'a mut [u8], size: usize, pos: usize, error: Option } struct Decoder<'a> { buf: &'a[u8], size: usize, pos: usize, error: Option } ''' ENCODER_ABORT = ''' fn abort(&mut self, error: Error) { if self.error.is_none() { self.error = Some(error); } }\ ''' DECODER_ABORT = ''' fn abort(&mut self, error: Error) { if self.error.is_none() { self.error = Some(error); } }\ ''' class _MembersBacktracesContext(object): def __init__(self, backtraces, member_name): self.backtraces = backtraces self.member_name = member_name def __enter__(self): for backtrace in self.backtraces: backtrace.append(self.member_name) def __exit__(self, *args): for backtrace in self.backtraces: backtrace.pop() class _UserType(object): def __init__(self, type_name, module_name, type_code, used_user_types): self.type_name = type_name self.module_name = module_name self.type_code = type_code self.used_user_types = used_user_types class Generator(object): def __init__(self): self.namespace = 'a' self.asn1_members_backtrace = [] self.c_members_backtrace = [] self.module_name = None self.type_name = None self.helper_lines = [] self.base_variables = set() self.used_suffixes_by_base_variables = {} self.encode_variable_lines = [] self.decode_variable_lines = [] self.used_user_types = [] def reset_type(self): self.helper_lines = [] self.base_variables = set() self.used_suffixes_by_base_variables = {} self.encode_variable_lines = [] self.decode_variable_lines = [] self.used_user_types = [] @property def module_name_snake(self): return camel_to_snake_case(self.module_name) @property def type_name_snake(self): return camel_to_snake_case(self.type_name) def type_length(self, minimum, maximum): # Make sure it fits in 64 bits. if minimum < -9223372036854775808: raise self.error( '{} does not fit in int64_t.'.format(minimum)) elif maximum > 18446744073709551615: raise self.error( '{} does not fit in uint64_t.'.format(maximum)) elif minimum < 0 and maximum > 9223372036854775807: raise self.error( '{} does not fit in int64_t.'.format(maximum)) # Calculate the number of bytes needed. if minimum < -4294967296: minimum_length = 64 elif minimum < -65536: minimum_length = 32 elif minimum < -256: minimum_length = 16 elif minimum < 0: minimum_length = 8 else: minimum_length = 0 if maximum > 4294967295: maximum_length = 64 elif maximum > 65535: maximum_length = 32 elif maximum > 255: maximum_length = 16 elif maximum > 0: maximum_length = 8 else: maximum_length = 0 if minimum_length == maximum_length == 0: length = 8 else: length = max(minimum_length, maximum_length) return length def format_type_name(self, minimum, maximum): length = self.type_length(minimum, maximum) if minimum >= 0: type_name = 'u{}'.format(length) else: type_name = 'i{}'.format(length) return type_name @property def location(self): location = '{}{}'.format(self.module_name, self.type_name) for member in self.asn1_members_backtrace: location += make_camel_case(member) return location def location_inner(self, default='value', end=''): if self.c_members_backtrace: return '.'.join(self.c_members_backtrace) + end else: return default def location_error(self): location = '{}.{}'.format(self.module_name, self.type_name) if self.asn1_members_backtrace: location += '.{}'.format('.'.join(self.asn1_members_backtrace)) return location def members_backtrace_push(self, member_name): backtraces = [ self.asn1_members_backtrace, self.c_members_backtrace ] return _MembersBacktracesContext(backtraces, member_name) def asn1_members_backtrace_push(self, member_name): backtraces = [self.asn1_members_backtrace] return _MembersBacktracesContext(backtraces, member_name) def c_members_backtrace_push(self, member_name): backtraces = [self.c_members_backtrace] return _MembersBacktracesContext(backtraces, member_name) def get_member_checker(self, checker, name): for member in checker.members: if member.name == name: return member raise Error('No member checker found for {}.'.format(name)) def add_unique_variable(self, name): if name in self.base_variables: try: suffix = self.used_suffixes_by_base_variables[name] suffix += 1 except KeyError: suffix = 2 self.used_suffixes_by_base_variables[name] = suffix unique_name = '{}_{}'.format(name, suffix) else: self.base_variables.add(name) unique_name = name return unique_name def error(self, message): return Error('{}: {}'.format(self.location_error(), message)) def format_integer(self, checker): if not checker.has_lower_bound(): raise self.error('INTEGER has no minimum value.') if not checker.has_upper_bound(): raise self.error('INTEGER has no maximum value.') type_name = self.format_type_name(checker.minimum, checker.maximum) return [type_name] def format_boolean(self): return ['bool'] def format_octet_string(self, checker): if not checker.has_upper_bound(): raise self.error('OCTET STRING has no maximum length.') if checker.minimum == checker.maximum: lines = [] elif checker.maximum < 256: lines = [' let length: u8;'] else: lines = [' let length: u32;'] return [ '#[derive(Debug, Default, PartialEq, Copy, Clone)]', 'pub struct {} {{'.format(self.location) ] + lines + [ ' pub buf: [u8; {}]'.format(checker.maximum), '}' ] def format_sequence(self, type_, checker): helper_lines = [] lines = [] for member in type_.root_members: member_checker = self.get_member_checker(checker, member.name) if member.optional: lines += ['pub is_{}_present: bool,'.format(member.name)] with self.members_backtrace_push(member.name): member_lines = self.format_type(member, member_checker) member_location = self.location if not member_lines: continue if is_inline_member_lines(member_lines): member_lines[-1] = 'pub {}: {},'.format(member.name, member_lines[-1]) else: helper_lines += member_lines + [''] member_lines = ['pub {}: {},'.format(member.name, member_location)] lines += member_lines if lines: lines[-1] = lines[-1].strip(',') return helper_lines + [ '#[derive(Debug, Default, PartialEq, Copy, Clone)]', 'pub struct {} {{'.format(self.location) ] + indent_lines(lines) + [ '}' ] def format_sequence_of(self, type_, checker): if not checker.is_bound(): raise self.error('SEQUENCE OF has no maximum length.') with self.asn1_members_backtrace_push('elem'): lines = self.format_type(type_.element_type, checker.element_type) if lines: lines[-1] += ' elements[{}];'.format(checker.maximum) if checker.minimum == checker.maximum: length_lines = [] elif checker.maximum < 256: length_lines = ['let length: u8;'] else: length_lines = ['let length: u32;'] return ['struct {'] + indent_lines(length_lines + lines) + ['}'] def format_enumerated(self, type_): lines = [ '#[derive(Debug, PartialEq, Copy, Clone)]', 'pub enum {} {{'.format(self.location) ] + [ ' {},'.format(make_camel_case(value)) for value in self.get_enumerated_values(type_) ] + [ '}', '', 'impl Default for {} {{'.format(self.location), ' fn default() -> Self {', ' {}::{}'.format(self.location, self.get_enumerated_values(type_)[0].upper()), ' }', '}' ] return lines def format_choice(self, type_, checker): helper_lines = [] lines = [] for member in self.get_choice_members(type_): member_checker = self.get_member_checker(checker, member.name) with self.members_backtrace_push(member.name): member_lines = self.format_type(member, member_checker) member_location = self.location if not member_lines: continue if is_inline_member_lines(member_lines): member_lines[-1] = '{}({}),'.format(make_camel_case(member.name), member_lines[-1]) else: helper_lines += member_lines + [''] member_lines = ['pub {}: {},'.format(member.name, member_location)] lines += member_lines if lines: lines[-1] = lines[-1].strip(',') return helper_lines + [ '#[derive(Debug, PartialEq, Copy, Clone)]', 'pub enum {} {{'.format(self.location) ] + indent_lines(lines) + [ '}' ] def format_user_type(self, type_name, module_name): self.used_user_types.append((type_name, module_name)) return ['{}{}'.format(module_name, type_name)] def format_sequence_inner_member(self, member, checker, default_condition_by_member_name): member_checker = self.get_member_checker(checker, member.name) with self.members_backtrace_push(member.name): encode_lines, decode_lines = self.format_type_inner( member, member_checker) location = self.location_inner('', '.') if member.optional: is_present = '{}is_{}_present'.format(location, member.name) encode_lines = [ '', 'if src.{} {{'.format(is_present) ] + indent_lines(encode_lines) + [ '}', '' ] decode_lines = [ '', 'if dst.{} {{'.format(is_present) ] + indent_lines(decode_lines) + [ '}', '' ] elif member.default is not None: name = '{}{}'.format(location, member.name) encode_lines = [ '', 'if src.{} != {} {{'.format(name, member.default) ] + indent_lines(encode_lines) + [ '}', '' ] decode_lines = [ '', 'if {} {{'.format(default_condition_by_member_name[member.name]) ] + indent_lines(decode_lines) + [ '} else {', ' dst.{} = {};'.format(name, member.default), '}', '' ] return encode_lines, decode_lines def generate_type_declaration(self, compiled_type): type_ = compiled_type.type checker = compiled_type.constraints_checker.type lines = self.generate_type_declaration_process(type_, checker) if not lines: lines = ['dummy: u8;'] if self.helper_lines: self.helper_lines.append('') return TYPE_DECLARATION_FMT.format(module_name=self.module_name, type_name=self.type_name, members='\n'.join(lines)) def generate_definition(self, compiled_type): encode_lines, decode_lines = self.generate_definition_inner_process( compiled_type.type, compiled_type.constraints_checker.type) if self.encode_variable_lines: encode_lines = self.encode_variable_lines + [''] + encode_lines if self.decode_variable_lines: decode_lines = self.decode_variable_lines + [''] + decode_lines encode_lines = indent_lines(indent_lines(encode_lines)) + [''] decode_lines = indent_lines(indent_lines(decode_lines)) + [''] return DEFINITION_FMT.format(module_name=self.module_name, type_name=self.type_name, encode_body='\n'.join(encode_lines), decode_body='\n'.join(decode_lines)) def generate(self, compiled): user_types = [] for module_name, module in sorted(compiled.modules.items()): self.module_name = module_name for type_name, compiled_type in sorted(module.items()): self.type_name = type_name self.reset_type() type_declaration = self.generate_type_declaration(compiled_type) definition = self.generate_definition(compiled_type) user_type = _UserType(type_name, module_name, type_declaration + definition, self.used_user_types) user_types.append(user_type) user_types = sort_user_types_by_used_user_types(user_types) types_code = [] for user_type in user_types: types_code.append(user_type.type_code) types_code = '\n'.join(types_code) helpers = '\n'.join(self.generate_helpers(types_code)) return helpers, types_code def format_type(self, type_, checker): raise NotImplementedError('To be implemented by subclasses.') def format_type_inner(self, type_, checker): raise NotImplementedError('To be implemented by subclasses.') def get_enumerated_values(self, type_): raise NotImplementedError('To be implemented by subclasses.') def get_choice_members(self, type_): raise NotImplementedError('To be implemented by subclasses.') def generate_type_declaration_process(self, type_, checker): raise NotImplementedError('To be implemented by subclasses.') def generate_definition_inner_process(self, type_, checker): raise NotImplementedError('To be implemented by subclasses.') def generate_helpers(self, definitions): raise NotImplementedError('To be implemented by subclasses.') def canonical(value): """Replace anything but 'a-z', 'A-Z' and '0-9' with '_'. """ return re.sub(r'[^a-zA-Z0-9]', '_', value) def camel_to_snake_case(value): value = re.sub(r'(.)([A-Z][a-z]+)', r'\1_\2', value) value = re.sub(r'(_+)', '_', value) value = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', value).lower() value = canonical(value) return value def make_camel_case(value): return value[0].upper() + value[1:] def join_lines(lines, suffix): return[line + suffix for line in lines[:-1]] + lines[-1:] def is_user_type(type_): return type_.module_name is not None def strip_blank_lines(lines): try: while lines[0] == '': del lines[0] while lines[-1] == '': del lines[-1] except IndexError: pass stripped = [] for line in lines: if line == '' and stripped[-1] == '': continue stripped.append(line) return stripped def indent_lines(lines, width=4): indented_lines = [] for line in lines: if line: indented_line = width * ' ' + line else: indented_line = line indented_lines.append(indented_line) return strip_blank_lines(indented_lines) def dedent_lines(lines, width=4): return [line[width:] for line in lines] def sort_user_types_by_used_user_types(user_types): reversed_sorted_user_types = [] for user_type in user_types: user_type_name_tuple = (user_type.type_name, user_type.module_name) # Insert first in the reversed list if there are no types # using this type. insert_index = 0 for i, reversed_sorted_user_type in enumerate(reversed_sorted_user_types, 1): if user_type_name_tuple in reversed_sorted_user_type.used_user_types: if i > insert_index: insert_index = i reversed_sorted_user_types.insert(insert_index, user_type) return reversed(reversed_sorted_user_types) def is_inline_member_lines(member_lines): return len(member_lines) == 1 asn1tools-0.169.0/asn1tools/version.py000066400000000000000000000000301524544274600176020ustar00rootroot00000000000000__version__ = '0.169.0' asn1tools-0.169.0/docs/000077500000000000000000000000001524544274600145575ustar00rootroot00000000000000asn1tools-0.169.0/docs/Makefile000066400000000000000000000163751524544274600162330ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # User-friendly check for sphinx-build ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) endif # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " applehelp to make an Apple Help Book" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " xml to make Docutils-native XML files" @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" @echo " coverage to run coverage check of the documentation (if enabled)" clean: rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/asn1tools.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/asn1tools.qhc" applehelp: $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp @echo @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." @echo "N.B. You won't be able to view it unless you put it in" \ "~/Library/Documentation/Help or install it in your application" \ "bundle." devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/asn1tools" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/asn1tools" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." coverage: $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage @echo "Testing of coverage in the sources finished, look at the " \ "results in $(BUILDDIR)/coverage/python.txt." xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." asn1tools-0.169.0/docs/conf.py000066400000000000000000000221671524544274600160660ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # asn1tools documentation build configuration file, created by # sphinx-quickstart on Sat Apr 25 11:54:09 2015. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys import os import shlex # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('..')) import asn1tools # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.viewcode', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # source_suffix = ['.rst', '.md'] source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'asn1tools' copyright = u'2017-2019, Erik Moqvist' author = u'Erik Moqvist' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = asn1tools.__version__ # The full version, including alpha/beta/rc tags. release = asn1tools.__version__ # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all # documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. #keep_warnings = False # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. #html_extra_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Language to be used for generating the HTML full-text search index. # Sphinx supports the following languages: # 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' # 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' #html_search_language = 'en' # A dictionary with options for the search language support, empty by default. # Now only 'ja' uses this config value #html_search_options = {'type': 'default'} # The name of a javascript file (relative to the configuration directory) that # implements a search results scorer. If empty, the default will be used. #html_search_scorer = 'scorer.js' # Output file base name for HTML help builder. htmlhelp_basename = 'asn1toolsdoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', # Latex figure (float) alignment #'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'asn1tools.tex', u'asn1tools Documentation', u'Erik Moqvist', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'asn1tools', u'Asn1tools Documentation', [author], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'asn1tools', u'ASN.1 tools documentation.', author, 'asn1tools', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. #texinfo_no_detailmenu = False autodoc_member_order = 'bysource' asn1tools-0.169.0/docs/index.rst000066400000000000000000000140651524544274600164260ustar00rootroot00000000000000.. asn1tools documentation master file, created by sphinx-quickstart on Sat Apr 25 11:54:09 2015. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. .. toctree:: :maxdepth: 2 ASN.1 tools =========== .. include:: ../README.rst Basic Usage =========== .. autofunction:: asn1tools.compile_files .. autoclass:: asn1tools.compiler.Specification :members: Types ===== ASN.1 types are mapped to Python 3 types as shown in the table below. In Python 2, INTEGER may be ``long`` and all string types are ``unicode``. +-------------------+------------------------+---------------------------------------+ | ASN.1 type | Python type | Example | +===================+========================+=======================================+ | BOOLEAN | ``bool`` | ``True`` | +-------------------+------------------------+---------------------------------------+ | INTEGER | ``int`` | ``87`` | +-------------------+------------------------+---------------------------------------+ | REAL | ``float`` | ``33.12`` | +-------------------+------------------------+---------------------------------------+ | NULL | -- | ``None`` | +-------------------+------------------------+---------------------------------------+ | BIT STRING | ``tuple(bytes, int)`` | ``(b'\x50', 4)`` | +-------------------+------------------------+---------------------------------------+ | OCTET STRING | ``bytes`` | ``b'\x44\x1e\xff'`` | +-------------------+------------------------+---------------------------------------+ | OBJECT IDENTIFIER | ``str`` | ``'1.33.2'`` | +-------------------+------------------------+---------------------------------------+ | ENUMERATED | ``str`` or ``int`` (1) | ``'one'`` or ``1`` | +-------------------+------------------------+---------------------------------------+ | SEQUENCE | ``dict`` | ``{'a': 52, 'b': 1}`` | +-------------------+------------------------+---------------------------------------+ | SEQUENCE OF | ``list`` | ``[1, 3]`` | +-------------------+------------------------+---------------------------------------+ | SET | ``dict`` | ``{'foo': 'bar'}`` | +-------------------+------------------------+---------------------------------------+ | SET OF | ``list`` | ``[3, 0, 7]`` | +-------------------+------------------------+---------------------------------------+ | CHOICE | ``tuple(str, object)`` | ``('a', 5)`` | +-------------------+------------------------+---------------------------------------+ | UTF8String | ``str`` | ``'hello'`` | +-------------------+------------------------+---------------------------------------+ | NumericString | ``str`` | ``'234359'`` | +-------------------+------------------------+---------------------------------------+ | PrintableString | ``str`` | ``'goo'`` | +-------------------+------------------------+---------------------------------------+ | IA5String | ``str`` | ``'name'`` | +-------------------+------------------------+---------------------------------------+ | VisibleString | ``str`` | ``'gle'`` | +-------------------+------------------------+---------------------------------------+ | GeneralString | ``str`` | ``'abc'`` | +-------------------+------------------------+---------------------------------------+ | BMPString | ``str`` | ``'ko'`` | +-------------------+------------------------+---------------------------------------+ | GraphicString | ``str`` | ``'a b'`` | +-------------------+------------------------+---------------------------------------+ | TeletexString | ``str`` | ``'ßø'`` | +-------------------+------------------------+---------------------------------------+ | UniversalString | ``str`` | ``'åäö'`` | +-------------------+------------------------+---------------------------------------+ | UTCTime | ``datetime.datetime`` | ``datetime(2018, 6, 11, 11, 4, 59)`` | +-------------------+------------------------+---------------------------------------+ | GeneralizedTime | ``datetime.datetime`` | ``datetime(2018, 1, 31, 5, 0, 47)`` | +-------------------+------------------------+---------------------------------------+ | DATE | ``datetime.date`` | ``date(1985, 4, 12)`` | +-------------------+------------------------+---------------------------------------+ | TIME-OF-DAY | ``datetime.time`` | ``time(15, 27, 46)`` | +-------------------+------------------------+---------------------------------------+ | DATE-TIME | ``datetime.datetime`` | ``datetime(1985, 4, 12, 15, 27, 30)`` | +-------------------+------------------------+---------------------------------------+ | ObjectDescriptor | -- | -- | +-------------------+------------------------+---------------------------------------+ (1) Compile with ``numeric_enums=True`` for numeric enumeration values instead of strings. Advanced Usage ============== .. autofunction:: asn1tools.compile_string .. autofunction:: asn1tools.compile_dict .. autofunction:: asn1tools.parse_files .. autofunction:: asn1tools.parse_string asn1tools-0.169.0/docs/make.bat000066400000000000000000000161221524544274600161660ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. xml to make Docutils-native XML files echo. pseudoxml to make pseudoxml-XML files for display purposes echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled echo. coverage to run coverage check of the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) REM Check if sphinx-build is available and fallback to Python version if any %SPHINXBUILD% 2> nul if errorlevel 9009 goto sphinx_python goto sphinx_ok :sphinx_python set SPHINXBUILD=python -m sphinx.__init__ %SPHINXBUILD% 2> nul if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) :sphinx_ok if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\asn1tools.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\asn1tools.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdf" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf cd %~dp0 echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdfja" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf-ja cd %~dp0 echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) if "%1" == "coverage" ( %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage if errorlevel 1 exit /b 1 echo. echo.Testing of coverage in the sources finished, look at the ^ results in %BUILDDIR%/coverage/python.txt. goto end ) if "%1" == "xml" ( %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml if errorlevel 1 exit /b 1 echo. echo.Build finished. The XML files are in %BUILDDIR%/xml. goto end ) if "%1" == "pseudoxml" ( %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml if errorlevel 1 exit /b 1 echo. echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. goto end ) :end asn1tools-0.169.0/examples/000077500000000000000000000000001524544274600154455ustar00rootroot00000000000000asn1tools-0.169.0/examples/README.rst000066400000000000000000000001041524544274600171270ustar00rootroot00000000000000Examples ======== This folder contains executable example scripts. asn1tools-0.169.0/examples/benchmarks/000077500000000000000000000000001524544274600175625ustar00rootroot00000000000000asn1tools-0.169.0/examples/benchmarks/c_source/000077500000000000000000000000001524544274600213645ustar00rootroot00000000000000asn1tools-0.169.0/examples/benchmarks/c_source/Makefile000066400000000000000000000001011524544274600230140ustar00rootroot00000000000000all: $(MAKE) -C asn1tools $(MAKE) -C asn1scc $(MAKE) -C asn1c asn1tools-0.169.0/examples/benchmarks/c_source/README.rst000066400000000000000000000236761524544274600230710ustar00rootroot00000000000000About ===== Benchmark of generated C source code from asn1c and asn1tools. Executable size --------------- The `asn1c` executable is a lot bigger than `asn1tools` and `asn1scc` because it contains encode and decode functions for all codecs, not only uper as for `asn1tools` and `asn1scc`. There is no `asn1c` option to only generate uper code. `asn1c` also supports more ASN.1 construts and uses dynamic memory. asn1tools: .. code-block:: text data bss dec hex filename 5553 560 8 6121 17e9 main asn1scc: .. code-block:: text data bss dec hex filename 12073 560 8 12641 3161 main asn1c: .. code-block:: text data bss dec hex filename 63733 4904 80 68717 10c6d main Execution time -------------- Encoding and decoding the PDU type 1,000,000 times for each tool and optimization combination. +-----------+--------------+--------------------+ | Tool | Optimization | Exexution time [s] | +===========+==============+====================+ | asn1tools | -O3 | 1.229 | +-----------+--------------+--------------------+ | asn1tools | -Os | 2.987 | +-----------+--------------+--------------------+ | asn1scc | -O3 | 4.023 | +-----------+--------------+--------------------+ | asn1scc | -Os | 6.166 | +-----------+--------------+--------------------+ | asn1c | -O3 | 10.902 | +-----------+--------------+--------------------+ | asn1c | -Os | 12.569 | +-----------+--------------+--------------------+ Source code statistics ---------------------- `asn1tools` has the fewest lines of code, only 832. `asn1scc` has 3549 and `asn1c` 10159. The statistics was created with `cloc`. asn1tools: .. code-block:: ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- C 1 178 28 670 C/C++ Header 1 36 196 162 ------------------------------------------------------------------------------- SUM: 2 214 224 832 ------------------------------------------------------------------------------- asn1scc: .. code-block:: ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- C 4 697 126 3020 C/C++ Header 2 176 28 529 ------------------------------------------------------------------------------- SUM: 6 873 154 3549 ------------------------------------------------------------------------------- asn1c: .. code-block:: ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- C 34 1421 1822 8834 C/C++ Header 38 398 762 1325 ------------------------------------------------------------------------------- SUM: 72 1819 2584 10159 ------------------------------------------------------------------------------- Runtime memory usage -------------------- The runtime memory usage was captured with Valgrind Massif on a 64 bits Ubuntu 16 machine. asn1tools: .. code-block:: -------------------------------------------------------------------------------- n time(B) total(B) useful-heap(B) extra-heap(B) stacks(B) -------------------------------------------------------------------------------- 52 209,480 1,192 0 0 1,192 53 211,936 1,648 0 0 1,648 54 214,464 1,744 0 0 1,744 55 216,904 1,192 0 0 1,192 56 219,328 320 0 0 320 57 221,872 800 0 0 800 58 224,296 936 0 0 936 59 226,720 912 0 0 912 60 229,144 968 0 0 968 61 231,568 912 0 0 912 62 234,088 232 0 0 232 63 236,512 736 0 0 736 64 238,936 520 0 0 520 65 241,376 432 0 0 432 66 243,808 448 0 0 448 67 246,288 480 0 0 480 68 248,752 416 0 0 416 69 251,176 408 0 0 408 asn1scc: .. code-block:: -------------------------------------------------------------------------------- n time(B) total(B) useful-heap(B) extra-heap(B) stacks(B) -------------------------------------------------------------------------------- 52 209,480 1,192 0 0 1,192 53 211,936 1,648 0 0 1,648 54 214,464 1,744 0 0 1,744 55 216,904 1,192 0 0 1,192 56 219,328 320 0 0 320 57 222,240 1,168 0 0 1,168 58 224,664 1,224 0 0 1,224 59 227,088 1,440 0 0 1,440 60 229,512 1,672 0 0 1,672 61 232,120 248 0 0 248 62 234,544 720 0 0 720 63 236,968 536 0 0 536 64 239,424 432 0 0 432 65 241,856 448 0 0 448 66 244,336 480 0 0 480 67 246,800 416 0 0 416 68 249,224 408 0 0 408 asn1c: .. code-block:: -------------------------------------------------------------------------------- n time(B) total(B) useful-heap(B) extra-heap(B) stacks(B) -------------------------------------------------------------------------------- 59 226,712 1,192 0 0 1,192 60 229,168 1,648 0 0 1,648 61 231,696 1,744 0 0 1,744 62 234,128 256 0 0 256 63 236,552 280 0 0 280 64 238,976 1,056 596 92 368 65 241,400 1,464 903 185 376 66 243,824 1,888 920 208 760 67 246,264 2,632 920 208 1,504 68 248,688 2,784 920 208 1,656 69 251,112 2,584 920 208 1,456 70 253,600 2,000 920 208 872 71 256,048 1,584 743 121 720 72 258,608 400 0 0 400 73 261,080 1,368 262 50 1,056 74 263,560 1,832 434 54 1,344 75 265,984 2,224 524 92 1,608 76 268,408 2,232 536 104 1,592 77 270,880 2,464 579 109 1,776 78 273,304 2,568 643 181 1,744 79 275,792 2,704 689 231 1,784 80 278,232 1,944 719 217 1,008 81 280,680 2,536 920 256 1,360 82 283,104 1,712 920 256 536 83 285,632 1,072 481 63 528 84 288,056 520 0 0 520 85 290,544 1,600 0 0 1,600 86 292,968 488 0 0 488 87 295,392 480 0 0 480 asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/000077500000000000000000000000001524544274600223715ustar00rootroot00000000000000asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/Makefile000066400000000000000000000015651524544274600240400ustar00rootroot00000000000000ASN1C ?= ../asn1c-0.9.28/asn1c/asn1c ASN1C_FLAGS = -fcompound-names -fincludes-quoted -gen-PER all: gcc $(CFLAGS) $(OPT_SIZE) generated/*.c main.c -o main size main readelf -s -W main | sort -k3 -n valgrind $(MASSIF_FLAGS) --massif-out-file=main.massif ./main 1 ms_print main.massif time ./main $(ENCODE_DECODE_ITERATIONS) gcc $(CFLAGS) $(OPT_SPEED) generated/*.c main.c -o main time ./main $(ENCODE_DECODE_ITERATIONS) generate: asn1c-0.9.28 rm -rf generated mkdir -p generated cd generated && \ $(ASN1C) $(ASN1C_FLAGS) ../../my_protocol.asn && \ rm Makefile.am.sample converter-sample.c v0.9.28.tar.gz: wget https://github.com/vlm/asn1c/archive/v0.9.28.tar.gz asn1c-0.9.28: v0.9.28.tar.gz rm -rf asn1c-0.9.28 tar xf v0.9.28.tar.gz cd asn1c-0.9.28 && \ test -f configure || autoreconf -iv && \ ./configure && \ $(MAKE) include ../common.mk asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/000077500000000000000000000000001524544274600243275ustar00rootroot00000000000000asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/A.c000066400000000000000000000027131524544274600246560ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #include "A.h" static asn_per_constraints_t asn_PER_type_A_constr_1 GCC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 2, 2, 2, 5 } /* (SIZE(2..5)) */, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_A_1[] = { { ATF_POINTER, 0, 0, -1 /* Ambiguous tag (CHOICE?) */, 0, &asn_DEF_B, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static const ber_tlv_tag_t asn_DEF_A_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_A_specs_1 = { sizeof(struct A), offsetof(struct A, _asn_ctx), 2, /* XER encoding is XMLValueList */ }; asn_TYPE_descriptor_t asn_DEF_A = { "A", "A", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_A_tags_1, sizeof(asn_DEF_A_tags_1) /sizeof(asn_DEF_A_tags_1[0]), /* 1 */ asn_DEF_A_tags_1, /* Same as above */ sizeof(asn_DEF_A_tags_1) /sizeof(asn_DEF_A_tags_1[0]), /* 1 */ &asn_PER_type_A_constr_1, asn_MBR_A_1, 1, /* Single element */ &asn_SPC_A_specs_1 /* Additional specs */ }; asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/A.h000066400000000000000000000013671524544274600246670ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #ifndef _A_H_ #define _A_H_ #include "asn_application.h" /* Including external dependencies */ #include "asn_SEQUENCE_OF.h" #include "constr_SEQUENCE_OF.h" #ifdef __cplusplus extern "C" { #endif /* Forward declarations */ struct B; /* A */ typedef struct A { A_SEQUENCE_OF(struct B) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } A_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_A; #ifdef __cplusplus } #endif /* Referred external types */ #include "B.h" #endif /* _A_H_ */ #include "asn_internal.h" asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/B.c000066400000000000000000000035231524544274600246570ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #include "B.h" static asn_per_constraints_t asn_PER_type_B_constr_1 GCC_NOTUSED = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_B_1[] = { { ATF_NOFLAGS, 0, offsetof(struct B, choice.a), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_C, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "a" }, { ATF_NOFLAGS, 0, offsetof(struct B, choice.b), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_D, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "b" }, }; static const asn_TYPE_tag2member_t asn_MAP_B_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* b */ }; static asn_CHOICE_specifics_t asn_SPC_B_specs_1 = { sizeof(struct B), offsetof(struct B, _asn_ctx), offsetof(struct B, present), sizeof(((struct B *)0)->present), asn_MAP_B_tag2el_1, 2, /* Count of tags in the map */ 0, -1 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_B = { "B", "B", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_B_constr_1, asn_MBR_B_1, 2, /* Elements count */ &asn_SPC_B_specs_1 /* Additional specs */ }; asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/B.h000066400000000000000000000014471524544274600246670ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #ifndef _B_H_ #define _B_H_ #include "asn_application.h" /* Including external dependencies */ #include "C.h" #include "D.h" #include "constr_CHOICE.h" #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum B_PR { B_PR_NOTHING, /* No components present */ B_PR_a, B_PR_b } B_PR; /* B */ typedef struct B { B_PR present; union B_u { C_t a; D_t b; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } B_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_B; #ifdef __cplusplus } #endif #endif /* _B_H_ */ #include "asn_internal.h" asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/BIT_STRING.c000066400000000000000000000107401524544274600262010ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * BIT STRING basic type description. */ static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; static asn_OCTET_STRING_specifics_t asn_DEF_BIT_STRING_specs = { sizeof(BIT_STRING_t), offsetof(BIT_STRING_t, _asn_ctx), ASN_OSUBV_BIT }; asn_TYPE_descriptor_t asn_DEF_BIT_STRING = { "BIT STRING", "BIT_STRING", OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ BIT_STRING_print, BIT_STRING_constraint, OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ OCTET_STRING_decode_xer_binary, BIT_STRING_encode_xer, OCTET_STRING_decode_uper, /* Unaligned PER decoder */ OCTET_STRING_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_BIT_STRING_tags, sizeof(asn_DEF_BIT_STRING_tags) / sizeof(asn_DEF_BIT_STRING_tags[0]), asn_DEF_BIT_STRING_tags, /* Same as above */ sizeof(asn_DEF_BIT_STRING_tags) / sizeof(asn_DEF_BIT_STRING_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ &asn_DEF_BIT_STRING_specs }; /* * BIT STRING generic constraint. */ int BIT_STRING_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; if(st && st->buf) { if((st->size == 0 && st->bits_unused) || st->bits_unused < 0 || st->bits_unused > 7) { ASN__CTFAIL(app_key, td, sptr, "%s: invalid padding byte (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } else { ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } return 0; } static char *_bit_pattern[16] = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" }; asn_enc_rval_t BIT_STRING_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; char scratch[128]; char *p = scratch; char *scend = scratch + (sizeof(scratch) - 10); const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; int xcan = (flags & XER_F_CANONICAL); uint8_t *buf; uint8_t *end; if(!st || !st->buf) ASN__ENCODE_FAILED; er.encoded = 0; buf = st->buf; end = buf + st->size - 1; /* Last byte is special */ /* * Binary dump */ for(; buf < end; buf++) { int v = *buf; int nline = xcan?0:(((buf - st->buf) % 8) == 0); if(p >= scend || nline) { er.encoded += p - scratch; ASN__CALLBACK(scratch, p - scratch); p = scratch; if(nline) ASN__TEXT_INDENT(1, ilevel); } memcpy(p + 0, _bit_pattern[v >> 4], 4); memcpy(p + 4, _bit_pattern[v & 0x0f], 4); p += 8; } if(!xcan && ((buf - st->buf) % 8) == 0) ASN__TEXT_INDENT(1, ilevel); er.encoded += p - scratch; ASN__CALLBACK(scratch, p - scratch); p = scratch; if(buf == end) { int v = *buf; int ubits = st->bits_unused; int i; for(i = 7; i >= ubits; i--) *p++ = (v & (1 << i)) ? 0x31 : 0x30; er.encoded += p - scratch; ASN__CALLBACK(scratch, p - scratch); } if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); ASN__ENCODED_OK(er); cb_failed: ASN__ENCODE_FAILED; } /* * BIT STRING specific contents printer. */ int BIT_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const char * const h2c = "0123456789ABCDEF"; char scratch[64]; const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; uint8_t *buf; uint8_t *end; char *p = scratch; (void)td; /* Unused argument */ if(!st || !st->buf) return (cb("", 8, app_key) < 0) ? -1 : 0; ilevel++; buf = st->buf; end = buf + st->size; /* * Hexadecimal dump. */ for(; buf < end; buf++) { if((buf - st->buf) % 16 == 0 && (st->size > 16) && buf != st->buf) { _i_INDENT(1); /* Dump the string */ if(cb(scratch, p - scratch, app_key) < 0) return -1; p = scratch; } *p++ = h2c[*buf >> 4]; *p++ = h2c[*buf & 0x0F]; *p++ = 0x20; } if(p > scratch) { p--; /* Eat the tailing space */ if((st->size > 16)) { _i_INDENT(1); } /* Dump the incomplete 16-bytes row */ if(cb(scratch, p - scratch, app_key) < 0) return -1; } return 0; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/BIT_STRING.h000066400000000000000000000014701524544274600262060ustar00rootroot00000000000000/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BIT_STRING_H_ #define _BIT_STRING_H_ #include /* Some help from OCTET STRING */ #ifdef __cplusplus extern "C" { #endif typedef struct BIT_STRING_s { uint8_t *buf; /* BIT STRING body */ int size; /* Size of the above buffer */ int bits_unused;/* Unused trailing bits in the last octet (0..7) */ asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ } BIT_STRING_t; extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING; asn_struct_print_f BIT_STRING_print; /* Human-readable output */ asn_constr_check_f BIT_STRING_constraint; xer_type_encoder_f BIT_STRING_encode_xer; #ifdef __cplusplus } #endif #endif /* _BIT_STRING_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/BOOLEAN.c000066400000000000000000000141511524544274600255540ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * BOOLEAN basic type description. */ static const ber_tlv_tag_t asn_DEF_BOOLEAN_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)) }; asn_TYPE_descriptor_t asn_DEF_BOOLEAN = { "BOOLEAN", "BOOLEAN", BOOLEAN_free, BOOLEAN_print, asn_generic_no_constraint, BOOLEAN_decode_ber, BOOLEAN_encode_der, BOOLEAN_decode_xer, BOOLEAN_encode_xer, BOOLEAN_decode_uper, /* Unaligned PER decoder */ BOOLEAN_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_BOOLEAN_tags, sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), asn_DEF_BOOLEAN_tags, /* Same as above */ sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; /* * Decode BOOLEAN type. */ asn_dec_rval_t BOOLEAN_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **bool_value, const void *buf_ptr, size_t size, int tag_mode) { BOOLEAN_t *st = (BOOLEAN_t *)*bool_value; asn_dec_rval_t rval; ber_tlv_len_t length; ber_tlv_len_t lidx; if(st == NULL) { st = (BOOLEAN_t *)(*bool_value = CALLOC(1, sizeof(*st))); if(st == NULL) { rval.code = RC_FAIL; rval.consumed = 0; return rval; } } ASN_DEBUG("Decoding %s as BOOLEAN (tm=%d)", td->name, tag_mode); /* * Check tags. */ rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, tag_mode, 0, &length, 0); if(rval.code != RC_OK) return rval; ASN_DEBUG("Boolean length is %d bytes", (int)length); buf_ptr = ((const char *)buf_ptr) + rval.consumed; size -= rval.consumed; if(length > (ber_tlv_len_t)size) { rval.code = RC_WMORE; rval.consumed = 0; return rval; } /* * Compute boolean value. */ for(*st = 0, lidx = 0; (lidx < length) && *st == 0; lidx++) { /* * Very simple approach: read bytes until the end or * value is already TRUE. * BOOLEAN is not supposed to contain meaningful data anyway. */ *st |= ((const uint8_t *)buf_ptr)[lidx]; } rval.code = RC_OK; rval.consumed += length; ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%d", (long)rval.consumed, (long)length, td->name, *st); return rval; } asn_enc_rval_t BOOLEAN_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t erval; BOOLEAN_t *st = (BOOLEAN_t *)sptr; erval.encoded = der_write_tags(td, 1, tag_mode, 0, tag, cb, app_key); if(erval.encoded == -1) { erval.failed_type = td; erval.structure_ptr = sptr; return erval; } if(cb) { uint8_t bool_value; bool_value = *st ? 0xff : 0; /* 0xff mandated by DER */ if(cb(&bool_value, 1, app_key) < 0) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = sptr; return erval; } } erval.encoded += 1; ASN__ENCODED_OK(erval); } /* * Decode the chunk of XML text encoding INTEGER. */ static enum xer_pbd_rval BOOLEAN__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) { BOOLEAN_t *st = (BOOLEAN_t *)sptr; const char *p = (const char *)chunk_buf; (void)td; if(chunk_size && p[0] == 0x3c /* '<' */) { switch(xer_check_tag(chunk_buf, chunk_size, "false")) { case XCT_BOTH: /* "" */ *st = 0; break; case XCT_UNKNOWN_BO: if(xer_check_tag(chunk_buf, chunk_size, "true") != XCT_BOTH) return XPBD_BROKEN_ENCODING; /* "" */ *st = 1; /* Or 0xff as in DER?.. */ break; default: return XPBD_BROKEN_ENCODING; } return XPBD_BODY_CONSUMED; } else { return XPBD_BROKEN_ENCODING; } } asn_dec_rval_t BOOLEAN_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return xer_decode_primitive(opt_codec_ctx, td, sptr, sizeof(BOOLEAN_t), opt_mname, buf_ptr, size, BOOLEAN__xer_body_decode); } asn_enc_rval_t BOOLEAN_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; asn_enc_rval_t er; (void)ilevel; (void)flags; if(!st) ASN__ENCODE_FAILED; if(*st) { ASN__CALLBACK("", 7); er.encoded = 7; } else { ASN__CALLBACK("", 8); er.encoded = 8; } ASN__ENCODED_OK(er); cb_failed: ASN__ENCODE_FAILED; } int BOOLEAN_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; const char *buf; size_t buflen; (void)td; /* Unused argument */ (void)ilevel; /* Unused argument */ if(st) { if(*st) { buf = "TRUE"; buflen = 4; } else { buf = "FALSE"; buflen = 5; } } else { buf = ""; buflen = 8; } return (cb(buf, buflen, app_key) < 0) ? -1 : 0; } void BOOLEAN_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { if(td && ptr && !contents_only) { FREEMEM(ptr); } } asn_dec_rval_t BOOLEAN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; BOOLEAN_t *st = (BOOLEAN_t *)*sptr; (void)opt_codec_ctx; (void)constraints; if(!st) { st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st))); if(!st) ASN__DECODE_FAILED; } /* * Extract a single bit */ switch(per_get_few_bits(pd, 1)) { case 1: *st = 1; break; case 0: *st = 0; break; case -1: default: ASN__DECODE_STARVED; } ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE"); rv.code = RC_OK; rv.consumed = 1; return rv; } asn_enc_rval_t BOOLEAN_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; asn_enc_rval_t er = { 0, 0, 0 }; (void)constraints; if(!st) ASN__ENCODE_FAILED; if(per_put_few_bits(po, *st ? 1 : 0, 1)) ASN__ENCODE_FAILED; ASN__ENCODED_OK(er); } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/BOOLEAN.h000066400000000000000000000015731524544274600255650ustar00rootroot00000000000000/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BOOLEAN_H_ #define _BOOLEAN_H_ #include #ifdef __cplusplus extern "C" { #endif /* * The underlying integer may contain various values, but everything * non-zero is capped to 0xff by the DER encoder. The BER decoder may * yield non-zero values different from 1, beware. */ typedef int BOOLEAN_t; extern asn_TYPE_descriptor_t asn_DEF_BOOLEAN; asn_struct_free_f BOOLEAN_free; asn_struct_print_f BOOLEAN_print; ber_type_decoder_f BOOLEAN_decode_ber; der_type_encoder_f BOOLEAN_encode_der; xer_type_decoder_f BOOLEAN_decode_xer; xer_type_encoder_f BOOLEAN_encode_xer; per_type_decoder_f BOOLEAN_decode_uper; per_type_encoder_f BOOLEAN_encode_uper; #ifdef __cplusplus } #endif #endif /* _BOOLEAN_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/C.c000066400000000000000000000316301524544274600246600ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #include "C.h" static int memb_a_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { size_t size; if(!sptr) { ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } /* Determine the number of elements */ size = _A_CSEQUENCE_FROM_VOID(sptr)->count; if((size <= 5)) { /* Perform validation of the inner elements */ return td->check_constraints(td, sptr, ctfailcb, app_key); } else { ASN__CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_c_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= -40 && value <= 40)) { /* Constraint check succeeded */ return 0; } else { ASN__CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static int memb_a_constraint_8(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { size_t size; if(!sptr) { ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } /* Determine the number of elements */ size = _A_CSEQUENCE_FROM_VOID(sptr)->count; if((size == 3)) { /* Perform validation of the inner elements */ return td->check_constraints(td, sptr, ctfailcb, app_key); } else { ASN__CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } static asn_per_constraints_t asn_PER_type_a_constr_3 GCC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 3, 3, 0, 5 } /* (SIZE(0..5)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_a_constr_3 GCC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 3, 3, 0, 5 } /* (SIZE(0..5)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_c_constr_6 GCC_NOTUSED = { { APC_CONSTRAINED, 7, 7, -40, 40 } /* (-40..40) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_type_a_constr_9 GCC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_memb_a_constr_9 GCC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, 0, 0 /* No PER value map */ }; static asn_per_constraints_t asn_PER_type_c_constr_8 GCC_NOTUSED = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_a_3[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, &asn_DEF_F, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static const ber_tlv_tag_t asn_DEF_a_tags_3[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_a_specs_3 = { sizeof(struct C__a__a), offsetof(struct C__a__a, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_a_3 = { "a", "a", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_a_tags_3, sizeof(asn_DEF_a_tags_3) /sizeof(asn_DEF_a_tags_3[0]) - 1, /* 1 */ asn_DEF_a_tags_3, /* Same as above */ sizeof(asn_DEF_a_tags_3) /sizeof(asn_DEF_a_tags_3[0]), /* 2 */ &asn_PER_type_a_constr_3, asn_MBR_a_3, 1, /* Single element */ &asn_SPC_a_specs_3 /* Additional specs */ }; static int asn_DFL_6_set_0(int set_value, void **sptr) { long *st = *sptr; if(!st) { if(!set_value) return -1; /* Not a default value */ st = (*sptr = CALLOC(1, sizeof(*st))); if(!st) return -1; } if(set_value) { /* Install default value 0 */ *st = 0; return 0; } else { /* Test default value 0 */ return (*st == 0); } } static asn_TYPE_member_t asn_MBR_a_2[] = { { ATF_NOFLAGS, 0, offsetof(struct C__a, a), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, &asn_DEF_a_3, memb_a_constraint_2, &asn_PER_memb_a_constr_3, 0, "a" }, { ATF_POINTER, 2, offsetof(struct C__a, b), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "b" }, { ATF_NOFLAGS, 1, offsetof(struct C__a, c), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, memb_c_constraint_2, &asn_PER_memb_c_constr_6, asn_DFL_6_set_0, /* DEFAULT 0 */ "c" }, }; static const int asn_MAP_a_oms_2[] = { 1, 2 }; static const ber_tlv_tag_t asn_DEF_a_tags_2[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_a_tag2el_2[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* b */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* c */ }; static asn_SEQUENCE_specifics_t asn_SPC_a_specs_2 = { sizeof(struct C__a), offsetof(struct C__a, _asn_ctx), asn_MAP_a_tag2el_2, 3, /* Count of tags in the map */ asn_MAP_a_oms_2, /* Optional members */ 2, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_a_2 = { "a", "a", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_a_tags_2, sizeof(asn_DEF_a_tags_2) /sizeof(asn_DEF_a_tags_2[0]) - 1, /* 1 */ asn_DEF_a_tags_2, /* Same as above */ sizeof(asn_DEF_a_tags_2) /sizeof(asn_DEF_a_tags_2[0]), /* 2 */ 0, /* No PER visible constraints */ asn_MBR_a_2, 3, /* Elements count */ &asn_SPC_a_specs_2 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_a_9[] = { { ATF_POINTER, 0, 0, (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), 0, &asn_DEF_D, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "" }, }; static const ber_tlv_tag_t asn_DEF_a_tags_9[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_a_specs_9 = { sizeof(struct C__c__a), offsetof(struct C__c__a, _asn_ctx), 0, /* XER encoding is XMLDelimitedItemList */ }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_a_9 = { "a", "a", SEQUENCE_OF_free, SEQUENCE_OF_print, SEQUENCE_OF_constraint, SEQUENCE_OF_decode_ber, SEQUENCE_OF_encode_der, SEQUENCE_OF_decode_xer, SEQUENCE_OF_encode_xer, SEQUENCE_OF_decode_uper, SEQUENCE_OF_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_a_tags_9, sizeof(asn_DEF_a_tags_9) /sizeof(asn_DEF_a_tags_9[0]) - 1, /* 1 */ asn_DEF_a_tags_9, /* Same as above */ sizeof(asn_DEF_a_tags_9) /sizeof(asn_DEF_a_tags_9[0]), /* 2 */ &asn_PER_type_a_constr_9, asn_MBR_a_9, 1, /* Single element */ &asn_SPC_a_specs_9 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_c_8[] = { { ATF_NOFLAGS, 0, offsetof(struct C__c, choice.a), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, &asn_DEF_a_9, memb_a_constraint_8, &asn_PER_memb_a_constr_9, 0, "a" }, { ATF_NOFLAGS, 0, offsetof(struct C__c, choice.b), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_E, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "b" }, }; static const asn_TYPE_tag2member_t asn_MAP_c_tag2el_8[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* b */ }; static asn_CHOICE_specifics_t asn_SPC_c_specs_8 = { sizeof(struct C__c), offsetof(struct C__c, _asn_ctx), offsetof(struct C__c, present), sizeof(((struct C__c *)0)->present), asn_MAP_c_tag2el_8, 2, /* Count of tags in the map */ 0, -1 /* Extensions start */ }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_c_8 = { "c", "c", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_c_constr_8, asn_MBR_c_8, 2, /* Elements count */ &asn_SPC_c_specs_8 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_d_12[] = { { ATF_NOFLAGS, 0, offsetof(struct C__d, a), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_E, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "a" }, }; static const ber_tlv_tag_t asn_DEF_d_tags_12[] = { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_d_tag2el_12[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* a */ }; static asn_SEQUENCE_specifics_t asn_SPC_d_specs_12 = { sizeof(struct C__d), offsetof(struct C__d, _asn_ctx), asn_MAP_d_tag2el_12, 1, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_d_12 = { "d", "d", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_d_tags_12, sizeof(asn_DEF_d_tags_12) /sizeof(asn_DEF_d_tags_12[0]) - 1, /* 1 */ asn_DEF_d_tags_12, /* Same as above */ sizeof(asn_DEF_d_tags_12) /sizeof(asn_DEF_d_tags_12[0]), /* 2 */ 0, /* No PER visible constraints */ asn_MBR_d_12, 1, /* Elements count */ &asn_SPC_d_specs_12 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_C_1[] = { { ATF_POINTER, 1, offsetof(struct C, a), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, &asn_DEF_a_2, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "a" }, { ATF_NOFLAGS, 0, offsetof(struct C, b), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_G, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "b" }, { ATF_NOFLAGS, 0, offsetof(struct C, c), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_c_8, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "c" }, { ATF_NOFLAGS, 0, offsetof(struct C, d), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, &asn_DEF_d_12, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "d" }, }; static const int asn_MAP_C_oms_1[] = { 0 }; static const ber_tlv_tag_t asn_DEF_C_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_C_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* b */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* c */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* d */ }; static asn_SEQUENCE_specifics_t asn_SPC_C_specs_1 = { sizeof(struct C), offsetof(struct C, _asn_ctx), asn_MAP_C_tag2el_1, 4, /* Count of tags in the map */ asn_MAP_C_oms_1, /* Optional members */ 1, 0, /* Root/Additions */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_C = { "C", "C", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_C_tags_1, sizeof(asn_DEF_C_tags_1) /sizeof(asn_DEF_C_tags_1[0]), /* 1 */ asn_DEF_C_tags_1, /* Same as above */ sizeof(asn_DEF_C_tags_1) /sizeof(asn_DEF_C_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_C_1, 4, /* Elements count */ &asn_SPC_C_specs_1 /* Additional specs */ }; asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/C.h000066400000000000000000000032141524544274600246620ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #ifndef _C_H_ #define _C_H_ #include "asn_application.h" /* Including external dependencies */ #include "G.h" #include "BOOLEAN.h" #include "NativeInteger.h" #include "F.h" #include "asn_SEQUENCE_OF.h" #include "constr_SEQUENCE_OF.h" #include "constr_SEQUENCE.h" #include "E.h" #include "D.h" #include "constr_CHOICE.h" #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum C__c_PR { C__c_PR_NOTHING, /* No components present */ C__c_PR_a, C__c_PR_b } C__c_PR; /* C */ typedef struct C { struct C__a { struct C__a__a { A_SEQUENCE_OF(F_t) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } a; BOOLEAN_t *b /* OPTIONAL */; long c /* DEFAULT 0 */; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } *a; G_t b; struct C__c { C__c_PR present; union C__c_u { struct C__c__a { A_SEQUENCE_OF(D_t) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } a; E_t b; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } c; struct C__d { E_t a; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } d; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } C_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_C; #ifdef __cplusplus } #endif #endif /* _C_H_ */ #include "asn_internal.h" asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/D.c000066400000000000000000000106011524544274600246540ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #include "D.h" int D_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; size_t size; if(!sptr) { ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } size = st->size; if((size >= 1 && size <= 16)) { /* Constraint check succeeded */ return 0; } else { ASN__CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using OCTET_STRING, * so here we adjust the DEF accordingly. */ static void D_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_OCTET_STRING.free_struct; td->print_struct = asn_DEF_OCTET_STRING.print_struct; td->check_constraints = asn_DEF_OCTET_STRING.check_constraints; td->ber_decoder = asn_DEF_OCTET_STRING.ber_decoder; td->der_encoder = asn_DEF_OCTET_STRING.der_encoder; td->xer_decoder = asn_DEF_OCTET_STRING.xer_decoder; td->xer_encoder = asn_DEF_OCTET_STRING.xer_encoder; td->uper_decoder = asn_DEF_OCTET_STRING.uper_decoder; td->uper_encoder = asn_DEF_OCTET_STRING.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_OCTET_STRING.per_constraints; td->elements = asn_DEF_OCTET_STRING.elements; td->elements_count = asn_DEF_OCTET_STRING.elements_count; td->specifics = asn_DEF_OCTET_STRING.specifics; } void D_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { D_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int D_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { D_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t D_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { D_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t D_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { D_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t D_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { D_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t D_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { D_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t D_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { D_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t D_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { D_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_D_constr_1 GCC_NOTUSED = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, 0, 0 /* No PER value map */ }; static const ber_tlv_tag_t asn_DEF_D_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) }; asn_TYPE_descriptor_t asn_DEF_D = { "D", "D", D_free, D_print, D_constraint, D_decode_ber, D_encode_der, D_decode_xer, D_encode_xer, D_decode_uper, D_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_D_tags_1, sizeof(asn_DEF_D_tags_1) /sizeof(asn_DEF_D_tags_1[0]), /* 1 */ asn_DEF_D_tags_1, /* Same as above */ sizeof(asn_DEF_D_tags_1) /sizeof(asn_DEF_D_tags_1[0]), /* 1 */ &asn_PER_type_D_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/D.h000066400000000000000000000014611524544274600246650ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #ifndef _D_H_ #define _D_H_ #include "asn_application.h" /* Including external dependencies */ #include "OCTET_STRING.h" #ifdef __cplusplus extern "C" { #endif /* D */ typedef OCTET_STRING_t D_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_D; asn_struct_free_f D_free; asn_struct_print_f D_print; asn_constr_check_f D_constraint; ber_type_decoder_f D_decode_ber; der_type_encoder_f D_encode_der; xer_type_decoder_f D_decode_xer; xer_type_encoder_f D_encode_xer; per_type_decoder_f D_decode_uper; per_type_encoder_f D_encode_uper; #ifdef __cplusplus } #endif #endif /* _D_H_ */ #include "asn_internal.h" asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/E.c000066400000000000000000000075561524544274600246740ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #include "E.h" int E_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { /* Replace with underlying type checker */ td->check_constraints = asn_DEF_BOOLEAN.check_constraints; return td->check_constraints(td, sptr, ctfailcb, app_key); } /* * This type is implemented using BOOLEAN, * so here we adjust the DEF accordingly. */ static void E_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_BOOLEAN.free_struct; td->print_struct = asn_DEF_BOOLEAN.print_struct; td->check_constraints = asn_DEF_BOOLEAN.check_constraints; td->ber_decoder = asn_DEF_BOOLEAN.ber_decoder; td->der_encoder = asn_DEF_BOOLEAN.der_encoder; td->xer_decoder = asn_DEF_BOOLEAN.xer_decoder; td->xer_encoder = asn_DEF_BOOLEAN.xer_encoder; td->uper_decoder = asn_DEF_BOOLEAN.uper_decoder; td->uper_encoder = asn_DEF_BOOLEAN.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_BOOLEAN.per_constraints; td->elements = asn_DEF_BOOLEAN.elements; td->elements_count = asn_DEF_BOOLEAN.elements_count; td->specifics = asn_DEF_BOOLEAN.specifics; } void E_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { E_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int E_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { E_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t E_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { E_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t E_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { E_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t E_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { E_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t E_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { E_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t E_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { E_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t E_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { E_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static const ber_tlv_tag_t asn_DEF_E_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)) }; asn_TYPE_descriptor_t asn_DEF_E = { "E", "E", E_free, E_print, E_constraint, E_decode_ber, E_encode_der, E_decode_xer, E_encode_xer, E_decode_uper, E_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_E_tags_1, sizeof(asn_DEF_E_tags_1) /sizeof(asn_DEF_E_tags_1[0]), /* 1 */ asn_DEF_E_tags_1, /* Same as above */ sizeof(asn_DEF_E_tags_1) /sizeof(asn_DEF_E_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/E.h000066400000000000000000000014471524544274600246720ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #ifndef _E_H_ #define _E_H_ #include "asn_application.h" /* Including external dependencies */ #include "BOOLEAN.h" #ifdef __cplusplus extern "C" { #endif /* E */ typedef BOOLEAN_t E_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_E; asn_struct_free_f E_free; asn_struct_print_f E_print; asn_constr_check_f E_constraint; ber_type_decoder_f E_decode_ber; der_type_encoder_f E_encode_der; xer_type_decoder_f E_decode_xer; xer_type_encoder_f E_encode_xer; per_type_decoder_f E_decode_uper; per_type_encoder_f E_encode_uper; #ifdef __cplusplus } #endif #endif /* _E_H_ */ #include "asn_internal.h" asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/F.c000066400000000000000000000106401524544274600246610ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #include "F.h" int F_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { long value; if(!sptr) { ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } value = *(const long *)sptr; if((value >= (-2147483647L - 1) && value <= 2147483647)) { /* Constraint check succeeded */ return 0; } else { ASN__CTFAIL(app_key, td, sptr, "%s: constraint failed (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void F_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->check_constraints = asn_DEF_NativeInteger.check_constraints; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; td->specifics = asn_DEF_NativeInteger.specifics; } void F_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { F_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int F_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { F_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t F_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { F_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t F_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { F_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t F_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { F_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t F_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { F_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t F_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { F_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t F_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { F_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_F_constr_1 GCC_NOTUSED = { { APC_CONSTRAINED, 32, -1, (-2147483647L - 1), 2147483647 } /* (-2147483648..2147483647) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static const ber_tlv_tag_t asn_DEF_F_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_F = { "F", "F", F_free, F_print, F_constraint, F_decode_ber, F_encode_der, F_decode_xer, F_encode_xer, F_decode_uper, F_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_F_tags_1, sizeof(asn_DEF_F_tags_1) /sizeof(asn_DEF_F_tags_1[0]), /* 1 */ asn_DEF_F_tags_1, /* Same as above */ sizeof(asn_DEF_F_tags_1) /sizeof(asn_DEF_F_tags_1[0]), /* 1 */ &asn_PER_type_F_constr_1, 0, 0, /* No members */ 0 /* No specifics */ }; asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/F.h000066400000000000000000000014501524544274600246650ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #ifndef _F_H_ #define _F_H_ #include "asn_application.h" /* Including external dependencies */ #include "NativeInteger.h" #ifdef __cplusplus extern "C" { #endif /* F */ typedef long F_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_F; asn_struct_free_f F_free; asn_struct_print_f F_print; asn_constr_check_f F_constraint; ber_type_decoder_f F_decode_ber; der_type_encoder_f F_encode_der; xer_type_decoder_f F_decode_xer; xer_type_encoder_f F_encode_xer; per_type_decoder_f F_decode_uper; per_type_encoder_f F_encode_uper; #ifdef __cplusplus } #endif #endif /* _F_H_ */ #include "asn_internal.h" asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/G.c000066400000000000000000000105331524544274600246630ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #include "G.h" int G_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { if(!sptr) { ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } /* Constraint check succeeded */ return 0; } /* * This type is implemented using NativeInteger, * so here we adjust the DEF accordingly. */ static void G_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; td->check_constraints = asn_DEF_NativeInteger.check_constraints; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; if(!td->per_constraints) td->per_constraints = asn_DEF_NativeInteger.per_constraints; td->elements = asn_DEF_NativeInteger.elements; td->elements_count = asn_DEF_NativeInteger.elements_count; /* td->specifics = asn_DEF_NativeInteger.specifics; // Defined explicitly */ } void G_free(asn_TYPE_descriptor_t *td, void *struct_ptr, int contents_only) { G_1_inherit_TYPE_descriptor(td); td->free_struct(td, struct_ptr, contents_only); } int G_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { G_1_inherit_TYPE_descriptor(td); return td->print_struct(td, struct_ptr, ilevel, cb, app_key); } asn_dec_rval_t G_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const void *bufptr, size_t size, int tag_mode) { G_1_inherit_TYPE_descriptor(td); return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); } asn_enc_rval_t G_encode_der(asn_TYPE_descriptor_t *td, void *structure, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { G_1_inherit_TYPE_descriptor(td); return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); } asn_dec_rval_t G_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **structure, const char *opt_mname, const void *bufptr, size_t size) { G_1_inherit_TYPE_descriptor(td); return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); } asn_enc_rval_t G_encode_xer(asn_TYPE_descriptor_t *td, void *structure, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { G_1_inherit_TYPE_descriptor(td); return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); } asn_dec_rval_t G_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { G_1_inherit_TYPE_descriptor(td); return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); } asn_enc_rval_t G_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *structure, asn_per_outp_t *per_out) { G_1_inherit_TYPE_descriptor(td); return td->uper_encoder(td, constraints, structure, per_out); } static asn_per_constraints_t asn_PER_type_G_constr_1 GCC_NOTUSED = { { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static const asn_INTEGER_specifics_t asn_SPC_G_specs_1 = { 0, 0, 0, 0, 0, 0, /* Native long size */ 1 /* Unsigned representation */ }; static const ber_tlv_tag_t asn_DEF_G_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_G = { "G", "G", G_free, G_print, G_constraint, G_decode_ber, G_encode_der, G_decode_xer, G_encode_xer, G_decode_uper, G_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_G_tags_1, sizeof(asn_DEF_G_tags_1) /sizeof(asn_DEF_G_tags_1[0]), /* 1 */ asn_DEF_G_tags_1, /* Same as above */ sizeof(asn_DEF_G_tags_1) /sizeof(asn_DEF_G_tags_1[0]), /* 1 */ &asn_PER_type_G_constr_1, 0, 0, /* No members */ &asn_SPC_G_specs_1 /* Additional specs */ }; asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/G.h000066400000000000000000000014611524544274600246700ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #ifndef _G_H_ #define _G_H_ #include "asn_application.h" /* Including external dependencies */ #include "NativeInteger.h" #ifdef __cplusplus extern "C" { #endif /* G */ typedef unsigned long G_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_G; asn_struct_free_f G_free; asn_struct_print_f G_print; asn_constr_check_f G_constraint; ber_type_decoder_f G_decode_ber; der_type_encoder_f G_encode_der; xer_type_decoder_f G_decode_xer; xer_type_encoder_f G_encode_xer; per_type_decoder_f G_decode_uper; per_type_encoder_f G_encode_uper; #ifdef __cplusplus } #endif #endif /* _G_H_ */ #include "asn_internal.h" asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/INTEGER.c000066400000000000000000000613231524544274600255750ustar00rootroot00000000000000/*- * Copyright (c) 2003-2014 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* Encoder and decoder of a primitive type */ #include /* * INTEGER basic type description. */ static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_INTEGER = { "INTEGER", "INTEGER", ASN__PRIMITIVE_TYPE_free, INTEGER_print, asn_generic_no_constraint, ber_decode_primitive, INTEGER_encode_der, INTEGER_decode_xer, INTEGER_encode_xer, #ifdef ASN_DISABLE_PER_SUPPORT 0, 0, #else INTEGER_decode_uper, /* Unaligned PER decoder */ INTEGER_encode_uper, /* Unaligned PER encoder */ #endif /* ASN_DISABLE_PER_SUPPORT */ 0, /* Use generic outmost tag fetcher */ asn_DEF_INTEGER_tags, sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), asn_DEF_INTEGER_tags, /* Same as above */ sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; /* * Encode INTEGER type using DER. */ asn_enc_rval_t INTEGER_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { INTEGER_t *st = (INTEGER_t *)sptr; ASN_DEBUG("%s %s as INTEGER (tm=%d)", cb?"Encoding":"Estimating", td->name, tag_mode); /* * Canonicalize integer in the buffer. * (Remove too long sign extension, remove some first 0x00 bytes) */ if(st->buf) { uint8_t *buf = st->buf; uint8_t *end1 = buf + st->size - 1; int shift; /* Compute the number of superfluous leading bytes */ for(; buf < end1; buf++) { /* * If the contents octets of an integer value encoding * consist of more than one octet, then the bits of the * first octet and bit 8 of the second octet: * a) shall not all be ones; and * b) shall not all be zero. */ switch(*buf) { case 0x00: if((buf[1] & 0x80) == 0) continue; break; case 0xff: if((buf[1] & 0x80)) continue; break; } break; } /* Remove leading superfluous bytes from the integer */ shift = buf - st->buf; if(shift) { uint8_t *nb = st->buf; uint8_t *end; st->size -= shift; /* New size, minus bad bytes */ end = nb + st->size; for(; nb < end; nb++, buf++) *nb = *buf; } } /* if(1) */ return der_encode_primitive(td, sptr, tag_mode, tag, cb, app_key); } static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value(asn_INTEGER_specifics_t *specs, const char *lstart, const char *lstop); /* * INTEGER specific human-readable output. */ static ssize_t INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; char scratch[32]; /* Enough for 64-bit integer */ uint8_t *buf = st->buf; uint8_t *buf_end = st->buf + st->size; signed long value; ssize_t wrote = 0; char *p; int ret; if(specs && specs->field_unsigned) ret = asn_INTEGER2ulong(st, (unsigned long *)&value); else ret = asn_INTEGER2long(st, &value); /* Simple case: the integer size is small */ if(ret == 0) { const asn_INTEGER_enum_map_t *el; size_t scrsize; char *scr; el = (value >= 0 || !specs || !specs->field_unsigned) ? INTEGER_map_value2enum(specs, value) : 0; if(el) { scrsize = el->enum_len + 32; scr = (char *)alloca(scrsize); if(plainOrXER == 0) ret = snprintf(scr, scrsize, "%ld (%s)", value, el->enum_name); else ret = snprintf(scr, scrsize, "<%s/>", el->enum_name); } else if(plainOrXER && specs && specs->strict_enumeration) { ASN_DEBUG("ASN.1 forbids dealing with " "unknown value of ENUMERATED type"); errno = EPERM; return -1; } else { scrsize = sizeof(scratch); scr = scratch; ret = snprintf(scr, scrsize, (specs && specs->field_unsigned) ?"%lu":"%ld", value); } assert(ret > 0 && (size_t)ret < scrsize); return (cb(scr, ret, app_key) < 0) ? -1 : ret; } else if(plainOrXER && specs && specs->strict_enumeration) { /* * Here and earlier, we cannot encode the ENUMERATED values * if there is no corresponding identifier. */ ASN_DEBUG("ASN.1 forbids dealing with " "unknown value of ENUMERATED type"); errno = EPERM; return -1; } /* Output in the long xx:yy:zz... format */ /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ for(p = scratch; buf < buf_end; buf++) { const char * const h2c = "0123456789ABCDEF"; if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { /* Flush buffer */ if(cb(scratch, p - scratch, app_key) < 0) return -1; wrote += p - scratch; p = scratch; } *p++ = h2c[*buf >> 4]; *p++ = h2c[*buf & 0x0F]; *p++ = 0x3a; /* ":" */ } if(p != scratch) p--; /* Remove the last ":" */ wrote += p - scratch; return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote; } /* * INTEGER specific human-readable output. */ int INTEGER_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const INTEGER_t *st = (const INTEGER_t *)sptr; ssize_t ret; (void)td; (void)ilevel; if(!st || !st->buf) ret = cb("", 8, app_key); else ret = INTEGER__dump(td, st, cb, app_key, 0); return (ret < 0) ? -1 : 0; } struct e2v_key { const char *start; const char *stop; const asn_INTEGER_enum_map_t *vemap; const unsigned int *evmap; }; static int INTEGER__compar_enum2value(const void *kp, const void *am) { const struct e2v_key *key = (const struct e2v_key *)kp; const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; const char *ptr, *end, *name; /* Remap the element (sort by different criterion) */ el = key->vemap + key->evmap[el - key->vemap]; /* Compare strings */ for(ptr = key->start, end = key->stop, name = el->enum_name; ptr < end; ptr++, name++) { if(*ptr != *name) return *(const unsigned char *)ptr - *(const unsigned char *)name; } return name[0] ? -1 : 0; } static const asn_INTEGER_enum_map_t * INTEGER_map_enum2value(asn_INTEGER_specifics_t *specs, const char *lstart, const char *lstop) { const asn_INTEGER_enum_map_t *el_found; int count = specs ? specs->map_count : 0; struct e2v_key key; const char *lp; if(!count) return NULL; /* Guaranteed: assert(lstart < lstop); */ /* Figure out the tag name */ for(lstart++, lp = lstart; lp < lstop; lp++) { switch(*lp) { case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */ case 0x2f: /* '/' */ case 0x3e: /* '>' */ break; default: continue; } break; } if(lp == lstop) return NULL; /* No tag found */ lstop = lp; key.start = lstart; key.stop = lstop; key.vemap = specs->value2enum; key.evmap = specs->enum2value; el_found = (asn_INTEGER_enum_map_t *)bsearch(&key, specs->value2enum, count, sizeof(specs->value2enum[0]), INTEGER__compar_enum2value); if(el_found) { /* Remap enum2value into value2enum */ el_found = key.vemap + key.evmap[el_found - key.vemap]; } return el_found; } static int INTEGER__compar_value2enum(const void *kp, const void *am) { long a = *(const long *)kp; const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; long b = el->nat_value; if(a < b) return -1; else if(a == b) return 0; else return 1; } const asn_INTEGER_enum_map_t * INTEGER_map_value2enum(asn_INTEGER_specifics_t *specs, long value) { int count = specs ? specs->map_count : 0; if(!count) return 0; return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum, count, sizeof(specs->value2enum[0]), INTEGER__compar_value2enum); } static int INTEGER_st_prealloc(INTEGER_t *st, int min_size) { void *p = MALLOC(min_size + 1); if(p) { void *b = st->buf; st->size = 0; st->buf = p; FREEMEM(b); return 0; } else { return -1; } } /* * Decode the chunk of XML text encoding INTEGER. */ static enum xer_pbd_rval INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) { INTEGER_t *st = (INTEGER_t *)sptr; long dec_value; long hex_value = 0; const char *lp; const char *lstart = (const char *)chunk_buf; const char *lstop = lstart + chunk_size; enum { ST_LEADSPACE, ST_SKIPSPHEX, ST_WAITDIGITS, ST_DIGITS, ST_DIGITS_TRAILSPACE, ST_HEXDIGIT1, ST_HEXDIGIT2, ST_HEXDIGITS_TRAILSPACE, ST_HEXCOLON, ST_END_ENUM, ST_UNEXPECTED } state = ST_LEADSPACE; const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */ const char *dec_value_end = 0; if(chunk_size) ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", (long)chunk_size, *lstart, lstop[-1]); if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) return XPBD_SYSTEM_FAILURE; /* * We may have received a tag here. It will be processed inline. * Use strtoul()-like code and serialize the result. */ for(lp = lstart; lp < lstop; lp++) { int lv = *lp; switch(lv) { case 0x09: case 0x0a: case 0x0d: case 0x20: switch(state) { case ST_LEADSPACE: case ST_DIGITS_TRAILSPACE: case ST_HEXDIGITS_TRAILSPACE: case ST_SKIPSPHEX: continue; case ST_DIGITS: dec_value_end = lp; state = ST_DIGITS_TRAILSPACE; continue; case ST_HEXCOLON: state = ST_HEXDIGITS_TRAILSPACE; continue; default: break; } break; case 0x2d: /* '-' */ if(state == ST_LEADSPACE) { dec_value = 0; dec_value_start = lp; state = ST_WAITDIGITS; continue; } break; case 0x2b: /* '+' */ if(state == ST_LEADSPACE) { dec_value = 0; dec_value_start = lp; state = ST_WAITDIGITS; continue; } break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: switch(state) { case ST_DIGITS: continue; case ST_SKIPSPHEX: /* Fall through */ case ST_HEXDIGIT1: hex_value = (lv - 0x30) << 4; state = ST_HEXDIGIT2; continue; case ST_HEXDIGIT2: hex_value += (lv - 0x30); state = ST_HEXCOLON; st->buf[st->size++] = (uint8_t)hex_value; continue; case ST_HEXCOLON: return XPBD_BROKEN_ENCODING; case ST_LEADSPACE: dec_value = 0; dec_value_start = lp; /* FALL THROUGH */ case ST_WAITDIGITS: state = ST_DIGITS; continue; default: break; } break; case 0x3c: /* '<', start of XML encoded enumeration */ if(state == ST_LEADSPACE) { const asn_INTEGER_enum_map_t *el; el = INTEGER_map_enum2value( (asn_INTEGER_specifics_t *) td->specifics, lstart, lstop); if(el) { ASN_DEBUG("Found \"%s\" => %ld", el->enum_name, el->nat_value); dec_value = el->nat_value; state = ST_END_ENUM; lp = lstop - 1; continue; } ASN_DEBUG("Unknown identifier for INTEGER"); } return XPBD_BROKEN_ENCODING; case 0x3a: /* ':' */ if(state == ST_HEXCOLON) { /* This colon is expected */ state = ST_HEXDIGIT1; continue; } else if(state == ST_DIGITS) { /* The colon here means that we have * decoded the first two hexadecimal * places as a decimal value. * Switch decoding mode. */ ASN_DEBUG("INTEGER re-evaluate as hex form"); state = ST_SKIPSPHEX; dec_value_start = 0; lp = lstart - 1; continue; } else { ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart)); break; } /* [A-Fa-f] */ case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46: case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: switch(state) { case ST_SKIPSPHEX: case ST_LEADSPACE: /* Fall through */ case ST_HEXDIGIT1: hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61); hex_value += 10; hex_value <<= 4; state = ST_HEXDIGIT2; continue; case ST_HEXDIGIT2: hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61); hex_value += 10; st->buf[st->size++] = (uint8_t)hex_value; state = ST_HEXCOLON; continue; case ST_DIGITS: ASN_DEBUG("INTEGER re-evaluate as hex form"); state = ST_SKIPSPHEX; dec_value_start = 0; lp = lstart - 1; continue; default: break; } break; } /* Found extra non-numeric stuff */ ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld", lv, (long)(lp - lstart)); state = ST_UNEXPECTED; break; } switch(state) { case ST_END_ENUM: /* Got a complete and valid enumeration encoded as a tag. */ break; case ST_DIGITS: dec_value_end = lstop; /* FALL THROUGH */ case ST_DIGITS_TRAILSPACE: /* The last symbol encountered was a digit. */ switch(asn_strtol_lim(dec_value_start, &dec_value_end, &dec_value)) { case ASN_STRTOL_OK: break; case ASN_STRTOL_ERROR_RANGE: return XPBD_DECODER_LIMIT; case ASN_STRTOL_ERROR_INVAL: case ASN_STRTOL_EXPECT_MORE: case ASN_STRTOL_EXTRA_DATA: return XPBD_BROKEN_ENCODING; } break; case ST_HEXCOLON: case ST_HEXDIGITS_TRAILSPACE: st->buf[st->size] = 0; /* Just in case termination */ return XPBD_BODY_CONSUMED; case ST_HEXDIGIT1: case ST_HEXDIGIT2: case ST_SKIPSPHEX: return XPBD_BROKEN_ENCODING; case ST_LEADSPACE: /* Content not found */ return XPBD_NOT_BODY_IGNORE; case ST_WAITDIGITS: case ST_UNEXPECTED: ASN_DEBUG("INTEGER: No useful digits (state %d)", state); return XPBD_BROKEN_ENCODING; /* No digits */ } /* * Convert the result of parsing of enumeration or a straight * decimal value into a BER representation. */ if(asn_long2INTEGER(st, dec_value)) return XPBD_SYSTEM_FAILURE; return XPBD_BODY_CONSUMED; } asn_dec_rval_t INTEGER_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return xer_decode_primitive(opt_codec_ctx, td, sptr, sizeof(INTEGER_t), opt_mname, buf_ptr, size, INTEGER__xer_body_decode); } asn_enc_rval_t INTEGER_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { const INTEGER_t *st = (const INTEGER_t *)sptr; asn_enc_rval_t er; (void)ilevel; (void)flags; if(!st || !st->buf) ASN__ENCODE_FAILED; er.encoded = INTEGER__dump(td, st, cb, app_key, 1); if(er.encoded < 0) ASN__ENCODE_FAILED; ASN__ENCODED_OK(er); } #ifndef ASN_DISABLE_PER_SUPPORT asn_dec_rval_t INTEGER_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_dec_rval_t rval = { RC_OK, 0 }; INTEGER_t *st = (INTEGER_t *)*sptr; asn_per_constraint_t *ct; int repeat; (void)opt_codec_ctx; if(!st) { st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); if(!st) ASN__DECODE_FAILED; } if(!constraints) constraints = td->per_constraints; ct = constraints ? &constraints->value : 0; if(ct && ct->flags & APC_EXTENSIBLE) { int inext = per_get_few_bits(pd, 1); if(inext < 0) ASN__DECODE_STARVED; if(inext) ct = 0; } FREEMEM(st->buf); st->buf = 0; st->size = 0; if(ct) { if(ct->flags & APC_SEMI_CONSTRAINED) { st->buf = (uint8_t *)CALLOC(1, 2); if(!st->buf) ASN__DECODE_FAILED; st->size = 1; } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { size_t size = (ct->range_bits + 7) >> 3; st->buf = (uint8_t *)MALLOC(1 + size + 1); if(!st->buf) ASN__DECODE_FAILED; st->size = size; } } /* X.691-2008/11, #13.2.2, constrained whole number */ if(ct && ct->flags != APC_UNCONSTRAINED) { /* #11.5.6 */ ASN_DEBUG("Integer with range %d bits", ct->range_bits); if(ct->range_bits >= 0) { if((size_t)ct->range_bits > 8 * sizeof(unsigned long)) ASN__DECODE_FAILED; if(specs && specs->field_unsigned) { unsigned long uvalue; if(uper_get_constrained_whole_number(pd, &uvalue, ct->range_bits)) ASN__DECODE_STARVED; ASN_DEBUG("Got value %lu + low %ld", uvalue, ct->lower_bound); uvalue += ct->lower_bound; if(asn_ulong2INTEGER(st, uvalue)) ASN__DECODE_FAILED; } else { unsigned long svalue; if(uper_get_constrained_whole_number(pd, &svalue, ct->range_bits)) ASN__DECODE_STARVED; ASN_DEBUG("Got value %ld + low %ld", svalue, ct->lower_bound); svalue += ct->lower_bound; if(asn_long2INTEGER(st, svalue)) ASN__DECODE_FAILED; } return rval; } } else { ASN_DEBUG("Decoding unconstrained integer %s", td->name); } /* X.691, #12.2.3, #12.2.4 */ do { ssize_t len; void *p; int ret; /* Get the PER length */ len = uper_get_length(pd, -1, &repeat); if(len < 0) ASN__DECODE_STARVED; p = REALLOC(st->buf, st->size + len + 1); if(!p) ASN__DECODE_FAILED; st->buf = (uint8_t *)p; ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); if(ret < 0) ASN__DECODE_STARVED; st->size += len; } while(repeat); st->buf[st->size] = 0; /* JIC */ /* #12.2.3 */ if(ct && ct->lower_bound) { /* * TODO: replace by in-place arithmetics. */ long value; if(asn_INTEGER2long(st, &value)) ASN__DECODE_FAILED; if(asn_long2INTEGER(st, value + ct->lower_bound)) ASN__DECODE_FAILED; } return rval; } asn_enc_rval_t INTEGER_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; INTEGER_t *st = (INTEGER_t *)sptr; const uint8_t *buf; const uint8_t *end; asn_per_constraint_t *ct; long value = 0; unsigned long v = 0; if(!st || st->size == 0) ASN__ENCODE_FAILED; if(!constraints) constraints = td->per_constraints; ct = constraints ? &constraints->value : 0; er.encoded = 0; if(ct) { int inext = 0; if(specs && specs->field_unsigned) { unsigned long uval; if(asn_INTEGER2ulong(st, &uval)) ASN__ENCODE_FAILED; /* Check proper range */ if(ct->flags & APC_SEMI_CONSTRAINED) { if(uval < (unsigned long)ct->lower_bound) inext = 1; } else if(ct->range_bits >= 0) { if(uval < (unsigned long)ct->lower_bound || uval > (unsigned long)ct->upper_bound) inext = 1; } ASN_DEBUG("Value %lu (%02x/%d) lb %lu ub %lu %s", uval, st->buf[0], st->size, ct->lower_bound, ct->upper_bound, inext ? "ext" : "fix"); value = uval; } else { if(asn_INTEGER2long(st, &value)) ASN__ENCODE_FAILED; /* Check proper range */ if(ct->flags & APC_SEMI_CONSTRAINED) { if(value < ct->lower_bound) inext = 1; } else if(ct->range_bits >= 0) { if(value < ct->lower_bound || value > ct->upper_bound) inext = 1; } ASN_DEBUG("Value %ld (%02x/%d) lb %ld ub %ld %s", value, st->buf[0], st->size, ct->lower_bound, ct->upper_bound, inext ? "ext" : "fix"); } if(ct->flags & APC_EXTENSIBLE) { if(per_put_few_bits(po, inext, 1)) ASN__ENCODE_FAILED; if(inext) ct = 0; } else if(inext) { ASN__ENCODE_FAILED; } } /* X.691-11/2008, #13.2.2, test if constrained whole number */ if(ct && ct->range_bits >= 0) { /* #11.5.6 -> #11.3 */ ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", value, value - ct->lower_bound, ct->range_bits); v = value - ct->lower_bound; if(uper_put_constrained_whole_number_u(po, v, ct->range_bits)) ASN__ENCODE_FAILED; ASN__ENCODED_OK(er); } if(ct && ct->lower_bound) { ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); /* TODO: adjust lower bound */ ASN__ENCODE_FAILED; } for(buf = st->buf, end = st->buf + st->size; buf < end;) { ssize_t mayEncode = uper_put_length(po, end - buf); if(mayEncode < 0) ASN__ENCODE_FAILED; if(per_put_many_bits(po, buf, 8 * mayEncode)) ASN__ENCODE_FAILED; buf += mayEncode; } ASN__ENCODED_OK(er); } #endif /* ASN_DISABLE_PER_SUPPORT */ int asn_INTEGER2long(const INTEGER_t *iptr, long *lptr) { uint8_t *b, *end; size_t size; long l; /* Sanity checking */ if(!iptr || !iptr->buf || !lptr) { errno = EINVAL; return -1; } /* Cache the begin/end of the buffer */ b = iptr->buf; /* Start of the INTEGER buffer */ size = iptr->size; end = b + size; /* Where to stop */ if(size > sizeof(long)) { uint8_t *end1 = end - 1; /* * Slightly more advanced processing, * able to >sizeof(long) bytes, * when the actual value is small * (0x0000000000abcdef would yield a fine 0x00abcdef) */ /* Skip out the insignificant leading bytes */ for(; b < end1; b++) { switch(*b) { case 0x00: if((b[1] & 0x80) == 0) continue; break; case 0xff: if((b[1] & 0x80) != 0) continue; break; } break; } size = end - b; if(size > sizeof(long)) { /* Still cannot fit the long */ errno = ERANGE; return -1; } } /* Shortcut processing of a corner case */ if(end == b) { *lptr = 0; return 0; } /* Perform the sign initialization */ /* Actually l = -(*b >> 7); gains nothing, yet unreadable! */ if((*b >> 7)) l = -1; else l = 0; /* Conversion engine */ for(; b < end; b++) l = (l << 8) | *b; *lptr = l; return 0; } int asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *lptr) { uint8_t *b, *end; unsigned long l; size_t size; if(!iptr || !iptr->buf || !lptr) { errno = EINVAL; return -1; } b = iptr->buf; size = iptr->size; end = b + size; /* If all extra leading bytes are zeroes, ignore them */ for(; size > sizeof(unsigned long); b++, size--) { if(*b) { /* Value won't fit unsigned long */ errno = ERANGE; return -1; } } /* Conversion engine */ for(l = 0; b < end; b++) l = (l << 8) | *b; *lptr = l; return 0; } int asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { uint8_t *buf; uint8_t *end; uint8_t *b; int shr; if(value <= LONG_MAX) return asn_long2INTEGER(st, value); buf = (uint8_t *)MALLOC(1 + sizeof(value)); if(!buf) return -1; end = buf + (sizeof(value) + 1); buf[0] = 0; for(b = buf + 1, shr = (sizeof(long)-1)*8; b < end; shr -= 8, b++) *b = (uint8_t)(value >> shr); if(st->buf) FREEMEM(st->buf); st->buf = buf; st->size = 1 + sizeof(value); return 0; } int asn_long2INTEGER(INTEGER_t *st, long value) { uint8_t *buf, *bp; uint8_t *p; uint8_t *pstart; uint8_t *pend1; int littleEndian = 1; /* Run-time detection */ int add; if(!st) { errno = EINVAL; return -1; } buf = (uint8_t *)MALLOC(sizeof(value)); if(!buf) return -1; if(*(char *)&littleEndian) { pstart = (uint8_t *)&value + sizeof(value) - 1; pend1 = (uint8_t *)&value; add = -1; } else { pstart = (uint8_t *)&value; pend1 = pstart + sizeof(value) - 1; add = 1; } /* * If the contents octet consists of more than one octet, * then bits of the first octet and bit 8 of the second octet: * a) shall not all be ones; and * b) shall not all be zero. */ for(p = pstart; p != pend1; p += add) { switch(*p) { case 0x00: if((*(p+add) & 0x80) == 0) continue; break; case 0xff: if((*(p+add) & 0x80)) continue; break; } break; } /* Copy the integer body */ for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) *bp++ = *p; if(st->buf) FREEMEM(st->buf); st->buf = buf; st->size = bp - buf; return 0; } /* * This function is going to be DEPRECATED soon. */ enum asn_strtol_result_e asn_strtol(const char *str, const char *end, long *lp) { const char *endp = end; switch(asn_strtol_lim(str, &endp, lp)) { case ASN_STRTOL_ERROR_RANGE: return ASN_STRTOL_ERROR_RANGE; case ASN_STRTOL_ERROR_INVAL: return ASN_STRTOL_ERROR_INVAL; case ASN_STRTOL_EXPECT_MORE: return ASN_STRTOL_ERROR_INVAL; /* Retain old behavior */ case ASN_STRTOL_OK: return ASN_STRTOL_OK; case ASN_STRTOL_EXTRA_DATA: return ASN_STRTOL_ERROR_INVAL; /* Retain old behavior */ } return ASN_STRTOL_ERROR_INVAL; /* Retain old behavior */ } /* * Parse the number in the given string until the given *end position, * returning the position after the last parsed character back using the * same (*end) pointer. * WARNING: This behavior is different from the standard strtol(3). */ enum asn_strtol_result_e asn_strtol_lim(const char *str, const char **end, long *lp) { int sign = 1; long l; const long upper_boundary = LONG_MAX / 10; long last_digit_max = LONG_MAX % 10; if(str >= *end) return ASN_STRTOL_ERROR_INVAL; switch(*str) { case '-': last_digit_max++; sign = -1; /* FALL THROUGH */ case '+': str++; if(str >= *end) { *end = str; return ASN_STRTOL_EXPECT_MORE; } } for(l = 0; str < (*end); str++) { switch(*str) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { int d = *str - '0'; if(l < upper_boundary) { l = l * 10 + d; } else if(l == upper_boundary) { if(d <= last_digit_max) { if(sign > 0) { l = l * 10 + d; } else { sign = 1; l = -l * 10 - d; } } else { *end = str; return ASN_STRTOL_ERROR_RANGE; } } else { *end = str; return ASN_STRTOL_ERROR_RANGE; } } continue; default: *end = str; *lp = sign * l; return ASN_STRTOL_EXTRA_DATA; } } *end = str; *lp = sign * l; return ASN_STRTOL_OK; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/INTEGER.h000066400000000000000000000056351524544274600256060ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _INTEGER_H_ #define _INTEGER_H_ #include #include #ifdef __cplusplus extern "C" { #endif typedef ASN__PRIMITIVE_TYPE_t INTEGER_t; extern asn_TYPE_descriptor_t asn_DEF_INTEGER; /* Map with to integer value association */ typedef struct asn_INTEGER_enum_map_s { long nat_value; /* associated native integer value */ size_t enum_len; /* strlen("tag") */ const char *enum_name; /* "tag" */ } asn_INTEGER_enum_map_t; /* This type describes an enumeration for INTEGER and ENUMERATED types */ typedef const struct asn_INTEGER_specifics_s { const asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ const unsigned int *enum2value; /* "tag" => N; sorted by tag */ int map_count; /* Elements in either map */ int extension; /* This map is extensible */ int strict_enumeration; /* Enumeration set is fixed */ int field_width; /* Size of native integer */ int field_unsigned; /* Signed=0, unsigned=1 */ } asn_INTEGER_specifics_t; asn_struct_print_f INTEGER_print; ber_type_decoder_f INTEGER_decode_ber; der_type_encoder_f INTEGER_encode_der; xer_type_decoder_f INTEGER_decode_xer; xer_type_encoder_f INTEGER_encode_xer; per_type_decoder_f INTEGER_decode_uper; per_type_encoder_f INTEGER_encode_uper; /*********************************** * Some handy conversion routines. * ***********************************/ /* * Returns 0 if it was possible to convert, -1 otherwise. * -1/EINVAL: Mandatory argument missing * -1/ERANGE: Value encoded is out of range for long representation * -1/ENOMEM: Memory allocation failed (in asn_long2INTEGER()). */ int asn_INTEGER2long(const INTEGER_t *i, long *l); int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); int asn_long2INTEGER(INTEGER_t *i, long l); int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); /* A a reified version of strtol(3) with nicer error reporting. */ enum asn_strtol_result_e { ASN_STRTOL_ERROR_RANGE = -3, /* Input outside of numeric range for long type */ ASN_STRTOL_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */ ASN_STRTOL_EXPECT_MORE = -1, /* More data expected (e.g. "+") */ ASN_STRTOL_OK = 0, /* Conversion succeded, number ends at (*end) */ ASN_STRTOL_EXTRA_DATA = 1 /* Conversion succeded, but the string has extra stuff */ }; enum asn_strtol_result_e asn_strtol_lim(const char *str, const char **end, long *l); /* The asn_strtol is going to be DEPRECATED soon */ enum asn_strtol_result_e asn_strtol(const char *str, const char *end, long *l); /* * Convert the integer value into the corresponding enumeration map entry. */ const asn_INTEGER_enum_map_t *INTEGER_map_value2enum(asn_INTEGER_specifics_t *specs, long value); #ifdef __cplusplus } #endif #endif /* _INTEGER_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/NativeEnumerated.c000066400000000000000000000134421524544274600277370ustar00rootroot00000000000000/*- * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Read the NativeInteger.h for the explanation wrt. differences between * INTEGER and NativeInteger. * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this * implementation deals with the standard (machine-specific) representation * of them instead of using the platform-independent buffer. */ #include #include /* * NativeEnumerated basic type description. */ static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { "ENUMERATED", /* The ASN.1 type is still ENUMERATED */ "ENUMERATED", NativeInteger_free, NativeInteger_print, asn_generic_no_constraint, NativeInteger_decode_ber, NativeInteger_encode_der, NativeInteger_decode_xer, NativeEnumerated_encode_xer, NativeEnumerated_decode_uper, NativeEnumerated_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_NativeEnumerated_tags, sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), asn_DEF_NativeEnumerated_tags, /* Same as above */ sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; asn_enc_rval_t NativeEnumerated_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; const long *native = (const long *)sptr; const asn_INTEGER_enum_map_t *el; (void)ilevel; (void)flags; if(!native) ASN__ENCODE_FAILED; el = INTEGER_map_value2enum(specs, *native); if(el) { size_t srcsize = el->enum_len + 5; char *src = (char *)alloca(srcsize); er.encoded = snprintf(src, srcsize, "<%s/>", el->enum_name); assert(er.encoded > 0 && (size_t)er.encoded < srcsize); if(cb(src, er.encoded, app_key) < 0) ASN__ENCODE_FAILED; ASN__ENCODED_OK(er); } else { ASN_DEBUG("ASN.1 forbids dealing with " "unknown value of ENUMERATED type"); ASN__ENCODE_FAILED; } } asn_dec_rval_t NativeEnumerated_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics; asn_dec_rval_t rval = { RC_OK, 0 }; long *native = (long *)*sptr; asn_per_constraint_t *ct; long value; (void)opt_codec_ctx; if(constraints) ct = &constraints->value; else if(td->per_constraints) ct = &td->per_constraints->value; else ASN__DECODE_FAILED; /* Mandatory! */ if(!specs) ASN__DECODE_FAILED; if(!native) { native = (long *)(*sptr = CALLOC(1, sizeof(*native))); if(!native) ASN__DECODE_FAILED; } ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); if(ct->flags & APC_EXTENSIBLE) { int inext = per_get_few_bits(pd, 1); if(inext < 0) ASN__DECODE_STARVED; if(inext) ct = 0; } if(ct && ct->range_bits >= 0) { value = per_get_few_bits(pd, ct->range_bits); if(value < 0) ASN__DECODE_STARVED; if(value >= (specs->extension ? specs->extension - 1 : specs->map_count)) ASN__DECODE_FAILED; } else { if(!specs->extension) ASN__DECODE_FAILED; /* * X.691, #10.6: normally small non-negative whole number; */ value = uper_get_nsnnwn(pd); if(value < 0) ASN__DECODE_STARVED; value += specs->extension - 1; if(value >= specs->map_count) ASN__DECODE_FAILED; } *native = specs->value2enum[value].nat_value; ASN_DEBUG("Decoded %s = %ld", td->name, *native); return rval; } static int NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { const asn_INTEGER_enum_map_t *a = ap; const asn_INTEGER_enum_map_t *b = bp; if(a->nat_value == b->nat_value) return 0; if(a->nat_value < b->nat_value) return -1; return 1; } asn_enc_rval_t NativeEnumerated_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; long native, value; asn_per_constraint_t *ct; int inext = 0; asn_INTEGER_enum_map_t key; const asn_INTEGER_enum_map_t *kf; if(!sptr) ASN__ENCODE_FAILED; if(!specs) ASN__ENCODE_FAILED; if(constraints) ct = &constraints->value; else if(td->per_constraints) ct = &td->per_constraints->value; else ASN__ENCODE_FAILED; /* Mandatory! */ ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); er.encoded = 0; native = *(long *)sptr; if(native < 0) ASN__ENCODE_FAILED; key.nat_value = native; kf = bsearch(&key, specs->value2enum, specs->map_count, sizeof(key), NativeEnumerated__compar_value2enum); if(!kf) { ASN_DEBUG("No element corresponds to %ld", native); ASN__ENCODE_FAILED; } value = kf - specs->value2enum; if(ct->range_bits >= 0) { int cmpWith = specs->extension ? specs->extension - 1 : specs->map_count; if(value >= cmpWith) inext = 1; } if(ct->flags & APC_EXTENSIBLE) { if(per_put_few_bits(po, inext, 1)) ASN__ENCODE_FAILED; if(inext) ct = 0; } else if(inext) { ASN__ENCODE_FAILED; } if(ct && ct->range_bits >= 0) { if(per_put_few_bits(po, value, ct->range_bits)) ASN__ENCODE_FAILED; ASN__ENCODED_OK(er); } if(!specs->extension) ASN__ENCODE_FAILED; /* * X.691, #10.6: normally small non-negative whole number; */ ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", value, specs->extension, inext, value - (inext ? (specs->extension - 1) : 0)); if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) ASN__ENCODE_FAILED; ASN__ENCODED_OK(er); } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/NativeEnumerated.h000066400000000000000000000016011524544274600277360ustar00rootroot00000000000000/*- * Copyright (c) 2004, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * This type differs from the standard ENUMERATED in that it is modelled using * the fixed machine type (long, int, short), so it can hold only values of * limited length. There is no type (i.e., NativeEnumerated_t, any integer type * will do). * This type may be used when integer range is limited by subtype constraints. */ #ifndef _NativeEnumerated_H_ #define _NativeEnumerated_H_ #include #ifdef __cplusplus extern "C" { #endif extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated; xer_type_encoder_f NativeEnumerated_encode_xer; per_type_decoder_f NativeEnumerated_decode_uper; per_type_encoder_f NativeEnumerated_encode_uper; #ifdef __cplusplus } #endif #endif /* _NativeEnumerated_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/NativeInteger.c000066400000000000000000000211131524544274600272350ustar00rootroot00000000000000/*- * Copyright (c) 2004, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Read the NativeInteger.h for the explanation wrt. differences between * INTEGER and NativeInteger. * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this * implementation deals with the standard (machine-specific) representation * of them instead of using the platform-independent buffer. */ #include #include /* * NativeInteger basic type description. */ static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_NativeInteger = { "INTEGER", /* The ASN.1 type is still INTEGER */ "INTEGER", NativeInteger_free, NativeInteger_print, asn_generic_no_constraint, NativeInteger_decode_ber, NativeInteger_encode_der, NativeInteger_decode_xer, NativeInteger_encode_xer, NativeInteger_decode_uper, /* Unaligned PER decoder */ NativeInteger_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_NativeInteger_tags, sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), asn_DEF_NativeInteger_tags, /* Same as above */ sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ 0 /* No specifics */ }; /* * Decode INTEGER type. */ asn_dec_rval_t NativeInteger_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **nint_ptr, const void *buf_ptr, size_t size, int tag_mode) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; long *native = (long *)*nint_ptr; asn_dec_rval_t rval; ber_tlv_len_t length; /* * If the structure is not there, allocate it. */ if(native == NULL) { native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); if(native == NULL) { rval.code = RC_FAIL; rval.consumed = 0; return rval; } } ASN_DEBUG("Decoding %s as INTEGER (tm=%d)", td->name, tag_mode); /* * Check tags. */ rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, tag_mode, 0, &length, 0); if(rval.code != RC_OK) return rval; ASN_DEBUG("%s length is %d bytes", td->name, (int)length); /* * Make sure we have this length. */ buf_ptr = ((const char *)buf_ptr) + rval.consumed; size -= rval.consumed; if(length > (ber_tlv_len_t)size) { rval.code = RC_WMORE; rval.consumed = 0; return rval; } /* * ASN.1 encoded INTEGER: buf_ptr, length * Fill the native, at the same time checking for overflow. * If overflow occured, return with RC_FAIL. */ { INTEGER_t tmp; union { const void *constbuf; void *nonconstbuf; } unconst_buf; long l; unconst_buf.constbuf = buf_ptr; tmp.buf = (uint8_t *)unconst_buf.nonconstbuf; tmp.size = length; if((specs&&specs->field_unsigned) ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */ : asn_INTEGER2long(&tmp, &l)) { rval.code = RC_FAIL; rval.consumed = 0; return rval; } *native = l; } rval.code = RC_OK; rval.consumed += length; ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)", (long)rval.consumed, (long)length, td->name, (long)*native); return rval; } /* * Encode the NativeInteger using the standard INTEGER type DER encoder. */ asn_enc_rval_t NativeInteger_encode_der(asn_TYPE_descriptor_t *sd, void *ptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { unsigned long native = *(unsigned long *)ptr; /* Disable sign ext. */ asn_enc_rval_t erval; INTEGER_t tmp; #ifdef WORDS_BIGENDIAN /* Opportunistic optimization */ tmp.buf = (uint8_t *)&native; tmp.size = sizeof(native); #else /* Works even if WORDS_BIGENDIAN is not set where should've been */ uint8_t buf[sizeof(native)]; uint8_t *p; /* Prepare a fake INTEGER */ for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8) *p = (uint8_t)native; tmp.buf = buf; tmp.size = sizeof(buf); #endif /* WORDS_BIGENDIAN */ /* Encode fake INTEGER */ erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key); if(erval.encoded == -1) { assert(erval.structure_ptr == &tmp); erval.structure_ptr = ptr; } return erval; } /* * Decode the chunk of XML text encoding INTEGER. */ asn_dec_rval_t NativeInteger_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_dec_rval_t rval; INTEGER_t st; void *st_ptr = (void *)&st; long *native = (long *)*sptr; if(!native) { native = (long *)(*sptr = CALLOC(1, sizeof(*native))); if(!native) ASN__DECODE_FAILED; } memset(&st, 0, sizeof(st)); rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, opt_mname, buf_ptr, size); if(rval.code == RC_OK) { long l; if((specs&&specs->field_unsigned) ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */ : asn_INTEGER2long(&st, &l)) { rval.code = RC_FAIL; rval.consumed = 0; } else { *native = l; } } else { /* * Cannot restart from the middle; * there is no place to save state in the native type. * Request a continuation from the very beginning. */ rval.consumed = 0; } ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st); return rval; } asn_enc_rval_t NativeInteger_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; char scratch[32]; /* Enough for 64-bit int */ asn_enc_rval_t er; const long *native = (const long *)sptr; (void)ilevel; (void)flags; if(!native) ASN__ENCODE_FAILED; er.encoded = snprintf(scratch, sizeof(scratch), (specs && specs->field_unsigned) ? "%lu" : "%ld", *native); if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch) || cb(scratch, er.encoded, app_key) < 0) ASN__ENCODE_FAILED; ASN__ENCODED_OK(er); } asn_dec_rval_t NativeInteger_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_dec_rval_t rval; long *native = (long *)*sptr; INTEGER_t tmpint; void *tmpintptr = &tmpint; (void)opt_codec_ctx; ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name); if(!native) { native = (long *)(*sptr = CALLOC(1, sizeof(*native))); if(!native) ASN__DECODE_FAILED; } memset(&tmpint, 0, sizeof tmpint); rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints, &tmpintptr, pd); if(rval.code == RC_OK) { if((specs&&specs->field_unsigned) ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) : asn_INTEGER2long(&tmpint, native)) rval.code = RC_FAIL; else ASN_DEBUG("NativeInteger %s got value %ld", td->name, *native); } ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); return rval; } asn_enc_rval_t NativeInteger_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; long native; INTEGER_t tmpint; if(!sptr) ASN__ENCODE_FAILED; native = *(long *)sptr; ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native); memset(&tmpint, 0, sizeof(tmpint)); if((specs&&specs->field_unsigned) ? asn_ulong2INTEGER(&tmpint, native) : asn_long2INTEGER(&tmpint, native)) ASN__ENCODE_FAILED; er = INTEGER_encode_uper(td, constraints, &tmpint, po); ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); return er; } /* * INTEGER specific human-readable output. */ int NativeInteger_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; const long *native = (const long *)sptr; char scratch[32]; /* Enough for 64-bit int */ int ret; (void)td; /* Unused argument */ (void)ilevel; /* Unused argument */ if(native) { ret = snprintf(scratch, sizeof(scratch), (specs && specs->field_unsigned) ? "%lu" : "%ld", *native); assert(ret > 0 && (size_t)ret < sizeof(scratch)); return (cb(scratch, ret, app_key) < 0) ? -1 : 0; } else { return (cb("", 8, app_key) < 0) ? -1 : 0; } } void NativeInteger_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { if(!td || !ptr) return; ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)", td->name, contents_only, ptr); if(!contents_only) { FREEMEM(ptr); } } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/NativeInteger.h000066400000000000000000000021041524544274600272410ustar00rootroot00000000000000/*- * Copyright (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * This type differs from the standard INTEGER in that it is modelled using * the fixed machine type (long, int, short), so it can hold only values of * limited length. There is no type (i.e., NativeInteger_t, any integer type * will do). * This type may be used when integer range is limited by subtype constraints. */ #ifndef _NativeInteger_H_ #define _NativeInteger_H_ #include #include #ifdef __cplusplus extern "C" { #endif extern asn_TYPE_descriptor_t asn_DEF_NativeInteger; asn_struct_free_f NativeInteger_free; asn_struct_print_f NativeInteger_print; ber_type_decoder_f NativeInteger_decode_ber; der_type_encoder_f NativeInteger_encode_der; xer_type_decoder_f NativeInteger_decode_xer; xer_type_encoder_f NativeInteger_encode_xer; per_type_decoder_f NativeInteger_decode_uper; per_type_encoder_f NativeInteger_encode_uper; #ifdef __cplusplus } #endif #endif /* _NativeInteger_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/OCTET_STRING.c000066400000000000000000001333131524544274600264430ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* for .bits_unused member */ #include /* * OCTET STRING basic type description. */ static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) }; static const asn_OCTET_STRING_specifics_t asn_DEF_OCTET_STRING_specs = { sizeof(OCTET_STRING_t), offsetof(OCTET_STRING_t, _asn_ctx), ASN_OSUBV_STR }; static const asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { { APC_CONSTRAINED, 8, 8, 0, 255 }, { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, 0, 0 }; asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = { "OCTET STRING", /* Canonical name */ "OCTET_STRING", /* XML tag name */ OCTET_STRING_free, OCTET_STRING_print, /* non-ascii stuff, generally */ asn_generic_no_constraint, OCTET_STRING_decode_ber, OCTET_STRING_encode_der, OCTET_STRING_decode_xer_hex, OCTET_STRING_encode_xer, OCTET_STRING_decode_uper, /* Unaligned PER decoder */ OCTET_STRING_encode_uper, /* Unaligned PER encoder */ 0, /* Use generic outmost tag fetcher */ asn_DEF_OCTET_STRING_tags, sizeof(asn_DEF_OCTET_STRING_tags) / sizeof(asn_DEF_OCTET_STRING_tags[0]), asn_DEF_OCTET_STRING_tags, /* Same as above */ sizeof(asn_DEF_OCTET_STRING_tags) / sizeof(asn_DEF_OCTET_STRING_tags[0]), 0, /* No PER visible constraints */ 0, 0, /* No members */ &asn_DEF_OCTET_STRING_specs }; #undef _CH_PHASE #undef NEXT_PHASE #undef PREV_PHASE #define _CH_PHASE(ctx, inc) do { \ if(ctx->phase == 0) \ ctx->context = 0; \ ctx->phase += inc; \ } while(0) #define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1) #define PREV_PHASE(ctx) _CH_PHASE(ctx, -1) #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = (num_bytes); \ buf_ptr = ((const char *)buf_ptr) + num; \ size -= num; \ consumed_myself += num; \ } while(0) #undef RETURN #define RETURN(_code) do { \ asn_dec_rval_t tmprval; \ tmprval.code = _code; \ tmprval.consumed = consumed_myself; \ return tmprval; \ } while(0) #undef APPEND #define APPEND(bufptr, bufsize) do { \ size_t _bs = (bufsize); /* Append size */ \ size_t _ns = ctx->context; /* Allocated now */ \ size_t _es = st->size + _bs; /* Expected size */ \ /* int is really a typeof(st->size): */ \ if((int)_es < 0) RETURN(RC_FAIL); \ if(_ns <= _es) { \ void *ptr; \ /* Be nice and round to the memory allocator */ \ do { _ns = _ns ? _ns << 1 : 16; } \ while(_ns <= _es); \ /* int is really a typeof(st->size): */ \ if((int)_ns < 0) RETURN(RC_FAIL); \ ptr = REALLOC(st->buf, _ns); \ if(ptr) { \ st->buf = (uint8_t *)ptr; \ ctx->context = _ns; \ } else { \ RETURN(RC_FAIL); \ } \ ASN_DEBUG("Reallocating into %ld", (long)_ns); \ } \ memcpy(st->buf + st->size, bufptr, _bs); \ /* Convenient nul-termination */ \ st->buf[_es] = '\0'; \ st->size = _es; \ } while(0) /* * The main reason why ASN.1 is still alive is that too much time and effort * is necessary for learning it more or less adequately, thus creating a gut * necessity to demonstrate that aquired skill everywhere afterwards. * No, I am not going to explain what the following stuff is. */ struct _stack_el { ber_tlv_len_t left; /* What's left to read (or -1) */ ber_tlv_len_t got; /* What was actually processed */ int cont_level; /* Depth of subcontainment */ int want_nulls; /* Want null "end of content" octets? */ int bits_chopped; /* Flag in BIT STRING mode */ ber_tlv_tag_t tag; /* For debugging purposes */ struct _stack_el *prev; struct _stack_el *next; }; struct _stack { struct _stack_el *tail; struct _stack_el *cur_ptr; }; static struct _stack_el * OS__add_stack_el(struct _stack *st) { struct _stack_el *nel; /* * Reuse the old stack frame or allocate a new one. */ if(st->cur_ptr && st->cur_ptr->next) { nel = st->cur_ptr->next; nel->bits_chopped = 0; nel->got = 0; /* Retain the nel->cont_level, it's correct. */ } else { nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el)); if(nel == NULL) return NULL; if(st->tail) { /* Increase a subcontainment depth */ nel->cont_level = st->tail->cont_level + 1; st->tail->next = nel; } nel->prev = st->tail; st->tail = nel; } st->cur_ptr = nel; return nel; } static struct _stack * _new_stack() { return (struct _stack *)CALLOC(1, sizeof(struct _stack)); } /* * Decode OCTET STRING type. */ asn_dec_rval_t OCTET_STRING_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buf_ptr, size_t size, int tag_mode) { asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; BIT_STRING_t *st = (BIT_STRING_t *)*sptr; asn_dec_rval_t rval; asn_struct_ctx_t *ctx; ssize_t consumed_myself = 0; struct _stack *stck; /* Expectations stack structure */ struct _stack_el *sel = 0; /* Stack element */ int tlv_constr; enum asn_OS_Subvariant type_variant = specs->subvariant; ASN_DEBUG("Decoding %s as %s (frame %ld)", td->name, (type_variant == ASN_OSUBV_STR) ? "OCTET STRING" : "OS-SpecialCase", (long)size); /* * Create the string if does not exist. */ if(st == NULL) { st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); if(st == NULL) RETURN(RC_FAIL); } /* Restore parsing context */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); switch(ctx->phase) { case 0: /* * Check tags. */ rval = ber_check_tags(opt_codec_ctx, td, ctx, buf_ptr, size, tag_mode, -1, &ctx->left, &tlv_constr); if(rval.code != RC_OK) return rval; if(tlv_constr) { /* * Complex operation, requires stack of expectations. */ ctx->ptr = _new_stack(); if(ctx->ptr) { stck = (struct _stack *)ctx->ptr; } else { RETURN(RC_FAIL); } } else { /* * Jump into stackless primitive decoding. */ _CH_PHASE(ctx, 3); if(type_variant == ASN_OSUBV_ANY && tag_mode != 1) APPEND(buf_ptr, rval.consumed); ADVANCE(rval.consumed); goto phase3; } NEXT_PHASE(ctx); /* Fall through */ case 1: phase1: /* * Fill the stack with expectations. */ stck = (struct _stack *)ctx->ptr; sel = stck->cur_ptr; do { ber_tlv_tag_t tlv_tag; ber_tlv_len_t tlv_len; ber_tlv_tag_t expected_tag; ssize_t tl, ll, tlvl; /* This one works even if (sel->left == -1) */ ssize_t Left = ((!sel||(size_t)sel->left >= size) ?(ssize_t)size:sel->left); ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", sel, (long)(sel?sel->left:0), (long)(sel?sel->want_nulls:0), (long)(sel?sel->got:0) ); if(sel && sel->left <= 0 && sel->want_nulls == 0) { if(sel->prev) { struct _stack_el *prev = sel->prev; if(prev->left != -1) { if(prev->left < sel->got) RETURN(RC_FAIL); prev->left -= sel->got; } prev->got += sel->got; sel = stck->cur_ptr = prev; if(!sel) break; tlv_constr = 1; continue; } else { sel = stck->cur_ptr = 0; break; /* Nothing to wait */ } } tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag); ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld", (long)size, (long)Left, sel?"":"!", (long)(sel?sel->left:0), (long)(sel?sel->want_nulls:0), (long)tl); switch(tl) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr); ll = ber_fetch_length(tlv_constr, (const char *)buf_ptr + tl,Left - tl,&tlv_len); ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld", ber_tlv_tag_string(tlv_tag), tlv_constr, (long)Left, (long)tl, (long)tlv_len, (long)ll); switch(ll) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } if(sel && sel->want_nulls && ((const uint8_t *)buf_ptr)[0] == 0 && ((const uint8_t *)buf_ptr)[1] == 0) { ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls); if(type_variant == ASN_OSUBV_ANY && (tag_mode != 1 || sel->cont_level)) APPEND("\0\0", 2); ADVANCE(2); sel->got += 2; if(sel->left != -1) { sel->left -= 2; /* assert(sel->left >= 2) */ } sel->want_nulls--; if(sel->want_nulls == 0) { /* Move to the next expectation */ sel->left = 0; tlv_constr = 1; } continue; } /* * Set up expected tags, * depending on ASN.1 type being decoded. */ switch(type_variant) { case ASN_OSUBV_BIT: /* X.690: 8.6.4.1, NOTE 2 */ /* Fall through */ case ASN_OSUBV_STR: default: if(sel) { int level = sel->cont_level; if(level < td->all_tags_count) { expected_tag = td->all_tags[level]; break; } else if(td->all_tags_count) { expected_tag = td->all_tags [td->all_tags_count - 1]; break; } /* else, Fall through */ } /* Fall through */ case ASN_OSUBV_ANY: expected_tag = tlv_tag; break; } if(tlv_tag != expected_tag) { char buf[2][32]; ber_tlv_tag_snprint(tlv_tag, buf[0], sizeof(buf[0])); ber_tlv_tag_snprint(td->tags[td->tags_count-1], buf[1], sizeof(buf[1])); ASN_DEBUG("Tag does not match expectation: %s != %s", buf[0], buf[1]); RETURN(RC_FAIL); } tlvl = tl + ll; /* Combined length of T and L encoding */ if((tlv_len + tlvl) < 0) { /* tlv_len value is too big */ ASN_DEBUG("TLV encoding + length (%ld) is too big", (long)tlv_len); RETURN(RC_FAIL); } /* * Append a new expectation. */ sel = OS__add_stack_el(stck); if(!sel) RETURN(RC_FAIL); sel->tag = tlv_tag; sel->want_nulls = (tlv_len==-1); if(sel->prev && sel->prev->left != -1) { /* Check that the parent frame is big enough */ if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len)) RETURN(RC_FAIL); if(tlv_len == -1) sel->left = sel->prev->left - tlvl; else sel->left = tlv_len; } else { sel->left = tlv_len; } if(type_variant == ASN_OSUBV_ANY && (tag_mode != 1 || sel->cont_level)) APPEND(buf_ptr, tlvl); sel->got += tlvl; ADVANCE(tlvl); ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%d", (long)sel->got, (long)sel->left, sel->want_nulls, sel->cont_level); } while(tlv_constr); if(sel == NULL) { /* Finished operation, "phase out" */ ASN_DEBUG("Phase out"); _CH_PHASE(ctx, +3); break; } NEXT_PHASE(ctx); /* Fall through */ case 2: stck = (struct _stack *)ctx->ptr; sel = stck->cur_ptr; ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", (long)sel->left, (long)size, (long)sel->got, sel->want_nulls); { ber_tlv_len_t len; assert(sel->left >= 0); len = ((ber_tlv_len_t)size < sel->left) ? (ber_tlv_len_t)size : sel->left; if(len > 0) { if(type_variant == ASN_OSUBV_BIT && sel->bits_chopped == 0) { /* Put the unused-bits-octet away */ st->bits_unused = *(const uint8_t *)buf_ptr; APPEND(((const char *)buf_ptr+1), (len - 1)); sel->bits_chopped = 1; } else { APPEND(buf_ptr, len); } ADVANCE(len); sel->left -= len; sel->got += len; } if(sel->left) { ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n", (long)sel->left, (long)size, sel->want_nulls); RETURN(RC_WMORE); } PREV_PHASE(ctx); goto phase1; } break; case 3: phase3: /* * Primitive form, no stack required. */ assert(ctx->left >= 0); if(size < (size_t)ctx->left) { if(!size) RETURN(RC_WMORE); if(type_variant == ASN_OSUBV_BIT && !ctx->context) { st->bits_unused = *(const uint8_t *)buf_ptr; ctx->left--; ADVANCE(1); } APPEND(buf_ptr, size); assert(ctx->context > 0); ctx->left -= size; ADVANCE(size); RETURN(RC_WMORE); } else { if(type_variant == ASN_OSUBV_BIT && !ctx->context && ctx->left) { st->bits_unused = *(const uint8_t *)buf_ptr; ctx->left--; ADVANCE(1); } APPEND(buf_ptr, ctx->left); ADVANCE(ctx->left); ctx->left = 0; NEXT_PHASE(ctx); } break; } if(sel) { ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld", sel->prev, sel->want_nulls, (long)sel->left, (long)sel->got, (long)size); if(sel->prev || sel->want_nulls > 1 || sel->left > 0) { RETURN(RC_WMORE); } } /* * BIT STRING-specific processing. */ if(type_variant == ASN_OSUBV_BIT && st->size) { /* Finalize BIT STRING: zero out unused bits. */ st->buf[st->size-1] &= 0xff << st->bits_unused; } ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld", (long)consumed_myself, td->name, (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "", (long)st->size); RETURN(RC_OK); } /* * Encode OCTET STRING type using DER. */ asn_enc_rval_t OCTET_STRING_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; BIT_STRING_t *st = (BIT_STRING_t *)sptr; enum asn_OS_Subvariant type_variant = specs->subvariant; int fix_last_byte = 0; ASN_DEBUG("%s %s as OCTET STRING", cb?"Estimating":"Encoding", td->name); /* * Write tags. */ if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) { er.encoded = der_write_tags(td, (type_variant == ASN_OSUBV_BIT) + st->size, tag_mode, type_variant == ASN_OSUBV_ANY, tag, cb, app_key); if(er.encoded == -1) { er.failed_type = td; er.structure_ptr = sptr; return er; } } else { /* Disallow: [] IMPLICIT ANY */ assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1); er.encoded = 0; } if(!cb) { er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size; ASN__ENCODED_OK(er); } /* * Prepare to deal with the last octet of BIT STRING. */ if(type_variant == ASN_OSUBV_BIT) { uint8_t b = st->bits_unused & 0x07; if(b && st->size) fix_last_byte = 1; ASN__CALLBACK(&b, 1); er.encoded++; } /* Invoke callback for the main part of the buffer */ ASN__CALLBACK(st->buf, st->size - fix_last_byte); /* The last octet should be stripped off the unused bits */ if(fix_last_byte) { uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused); ASN__CALLBACK(&b, 1); } er.encoded += st->size; ASN__ENCODED_OK(er); cb_failed: ASN__ENCODE_FAILED; } asn_enc_rval_t OCTET_STRING_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { const char * const h2c = "0123456789ABCDEF"; const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; asn_enc_rval_t er; char scratch[16 * 3 + 4]; char *p = scratch; uint8_t *buf; uint8_t *end; size_t i; if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; er.encoded = 0; /* * Dump the contents of the buffer in hexadecimal. */ buf = st->buf; end = buf + st->size; if(flags & XER_F_CANONICAL) { char *scend = scratch + (sizeof(scratch) - 2); for(; buf < end; buf++) { if(p >= scend) { ASN__CALLBACK(scratch, p - scratch); er.encoded += p - scratch; p = scratch; } *p++ = h2c[(*buf >> 4) & 0x0F]; *p++ = h2c[*buf & 0x0F]; } ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ er.encoded += p - scratch; } else { for(i = 0; buf < end; buf++, i++) { if(!(i % 16) && (i || st->size > 16)) { ASN__CALLBACK(scratch, p-scratch); er.encoded += (p-scratch); p = scratch; ASN__TEXT_INDENT(1, ilevel); } *p++ = h2c[(*buf >> 4) & 0x0F]; *p++ = h2c[*buf & 0x0F]; *p++ = 0x20; } if(p - scratch) { p--; /* Remove the tail space */ ASN__CALLBACK(scratch, p-scratch); /* Dump the rest */ er.encoded += p - scratch; if(st->size > 16) ASN__TEXT_INDENT(1, ilevel-1); } } ASN__ENCODED_OK(er); cb_failed: ASN__ENCODE_FAILED; } static const struct OCTET_STRING__xer_escape_table_s { const char *string; int size; } OCTET_STRING__xer_escape_table[] = { #define OSXET(s) { s, sizeof(s) - 1 } OSXET("\074\156\165\154\057\076"), /* */ OSXET("\074\163\157\150\057\076"), /* */ OSXET("\074\163\164\170\057\076"), /* */ OSXET("\074\145\164\170\057\076"), /* */ OSXET("\074\145\157\164\057\076"), /* */ OSXET("\074\145\156\161\057\076"), /* */ OSXET("\074\141\143\153\057\076"), /* */ OSXET("\074\142\145\154\057\076"), /* */ OSXET("\074\142\163\057\076"), /* */ OSXET("\011"), /* \t */ OSXET("\012"), /* \n */ OSXET("\074\166\164\057\076"), /* */ OSXET("\074\146\146\057\076"), /* */ OSXET("\015"), /* \r */ OSXET("\074\163\157\057\076"), /* */ OSXET("\074\163\151\057\076"), /* */ OSXET("\074\144\154\145\057\076"), /* */ OSXET("\074\144\143\061\057\076"), /* */ OSXET("\074\144\143\062\057\076"), /* */ OSXET("\074\144\143\063\057\076"), /* */ OSXET("\074\144\143\064\057\076"), /* */ OSXET("\074\156\141\153\057\076"), /* */ OSXET("\074\163\171\156\057\076"), /* */ OSXET("\074\145\164\142\057\076"), /* */ OSXET("\074\143\141\156\057\076"), /* */ OSXET("\074\145\155\057\076"), /* */ OSXET("\074\163\165\142\057\076"), /* */ OSXET("\074\145\163\143\057\076"), /* */ OSXET("\074\151\163\064\057\076"), /* */ OSXET("\074\151\163\063\057\076"), /* */ OSXET("\074\151\163\062\057\076"), /* */ OSXET("\074\151\163\061\057\076"), /* */ { 0, 0 }, /* " " */ { 0, 0 }, /* ! */ { 0, 0 }, /* \" */ { 0, 0 }, /* # */ { 0, 0 }, /* $ */ { 0, 0 }, /* % */ OSXET("\046\141\155\160\073"), /* & */ { 0, 0 }, /* ' */ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */ {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */ {0,0},{0,0},{0,0},{0,0}, /* 89:; */ OSXET("\046\154\164\073"), /* < */ { 0, 0 }, /* = */ OSXET("\046\147\164\073"), /* > */ }; static int OS__check_escaped_control_char(const void *buf, int size) { size_t i; /* * Inefficient algorithm which translates the escape sequences * defined above into characters. Returns -1 if not found. * TODO: replace by a faster algorithm (bsearch(), hash or * nested table lookups). */ for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { const struct OCTET_STRING__xer_escape_table_s *el; el = &OCTET_STRING__xer_escape_table[i]; if(el->size == size && memcmp(buf, el->string, size) == 0) return i; } return -1; } static int OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) { /* * This might be one of the escape sequences * for control characters. Check it out. * #11.15.5 */ int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size); if(control_char >= 0) { OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr; void *p = REALLOC(st->buf, st->size + 2); if(p) { st->buf = (uint8_t *)p; st->buf[st->size++] = control_char; st->buf[st->size] = '\0'; /* nul-termination */ return 0; } } return -1; /* No, it's not */ } asn_enc_rval_t OCTET_STRING_encode_xer_utf8(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; asn_enc_rval_t er; uint8_t *buf, *end; uint8_t *ss; /* Sequence start */ ssize_t encoded_len = 0; (void)ilevel; /* Unused argument */ (void)flags; /* Unused argument */ if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; buf = st->buf; end = buf + st->size; for(ss = buf; buf < end; buf++) { unsigned int ch = *buf; int s_len; /* Special encoding sequence length */ /* * Escape certain characters: X.680/11.15 */ if(ch < sizeof(OCTET_STRING__xer_escape_table) /sizeof(OCTET_STRING__xer_escape_table[0]) && (s_len = OCTET_STRING__xer_escape_table[ch].size)) { if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) || cb(OCTET_STRING__xer_escape_table[ch].string, s_len, app_key) < 0) ASN__ENCODE_FAILED; encoded_len += (buf - ss) + s_len; ss = buf + 1; } } encoded_len += (buf - ss); if((buf - ss) && cb(ss, buf - ss, app_key) < 0) ASN__ENCODE_FAILED; er.encoded = encoded_len; ASN__ENCODED_OK(er); } /* * Convert from hexadecimal format (cstring): "AB CD EF" */ static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; const char *chunk_stop = (const char *)chunk_buf; const char *p = chunk_stop; const char *pend = p + chunk_size; unsigned int clv = 0; int half = 0; /* Half bit */ uint8_t *buf; /* Reallocate buffer according to high cap estimation */ ssize_t _ns = st->size + (chunk_size + 1) / 2; void *nptr = REALLOC(st->buf, _ns + 1); if(!nptr) return -1; st->buf = (uint8_t *)nptr; buf = st->buf + st->size; /* * If something like " a b c " appears here, the " a b":3 will be * converted, and the rest skipped. That is, unless buf_size is greater * than chunk_size, then it'll be equivalent to "ABC0". */ for(; p < pend; p++) { int ch = *(const unsigned char *)p; switch(ch) { case 0x09: case 0x0a: case 0x0c: case 0x0d: case 0x20: /* Ignore whitespace */ continue; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ clv = (clv << 4) + (ch - 0x30); break; case 0x41: case 0x42: case 0x43: /* ABC */ case 0x44: case 0x45: case 0x46: /* DEF */ clv = (clv << 4) + (ch - 0x41 + 10); break; case 0x61: case 0x62: case 0x63: /* abc */ case 0x64: case 0x65: case 0x66: /* def */ clv = (clv << 4) + (ch - 0x61 + 10); break; default: *buf = 0; /* JIC */ return -1; } if(half++) { half = 0; *buf++ = clv; chunk_stop = p + 1; } } /* * Check partial decoding. */ if(half) { if(have_more) { /* * Partial specification is fine, * because no more more PXER_TEXT data is available. */ *buf++ = clv << 4; chunk_stop = p; } } else { chunk_stop = p; } st->size = buf - st->buf; /* Adjust the buffer size */ assert(st->size <= _ns); st->buf[st->size] = 0; /* Courtesy termination */ return (chunk_stop - (const char *)chunk_buf); /* Converted size */ } /* * Convert from binary format: "00101011101" */ static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { BIT_STRING_t *st = (BIT_STRING_t *)sptr; const char *p = (const char *)chunk_buf; const char *pend = p + chunk_size; int bits_unused = st->bits_unused & 0x7; uint8_t *buf; /* Reallocate buffer according to high cap estimation */ ssize_t _ns = st->size + (chunk_size + 7) / 8; void *nptr = REALLOC(st->buf, _ns + 1); if(!nptr) return -1; st->buf = (uint8_t *)nptr; buf = st->buf + st->size; (void)have_more; if(bits_unused == 0) bits_unused = 8; else if(st->size) buf--; /* * Convert series of 0 and 1 into the octet string. */ for(; p < pend; p++) { int ch = *(const unsigned char *)p; switch(ch) { case 0x09: case 0x0a: case 0x0c: case 0x0d: case 0x20: /* Ignore whitespace */ break; case 0x30: case 0x31: if(bits_unused-- <= 0) { *++buf = 0; /* Clean the cell */ bits_unused = 7; } *buf |= (ch&1) << bits_unused; break; default: st->bits_unused = bits_unused; return -1; } } if(bits_unused == 8) { st->size = buf - st->buf; st->bits_unused = 0; } else { st->size = buf - st->buf + 1; st->bits_unused = bits_unused; } assert(st->size <= _ns); st->buf[st->size] = 0; /* Courtesy termination */ return chunk_size; /* Converted in full */ } /* * Something like strtod(), but with stricter rules. */ static int OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) { int32_t val = 0; const char *p; for(p = buf; p < end; p++) { int ch = *p; /* Strange huge value */ if((val * base + base) < 0) return -1; switch(ch) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ val = val * base + (ch - 0x30); break; case 0x41: case 0x42: case 0x43: /* ABC */ case 0x44: case 0x45: case 0x46: /* DEF */ val = val * base + (ch - 0x41 + 10); break; case 0x61: case 0x62: case 0x63: /* abc */ case 0x64: case 0x65: case 0x66: /* def */ val = val * base + (ch - 0x61 + 10); break; case 0x3b: /* ';' */ *ret_value = val; return (p - buf) + 1; default: return -1; /* Character set error */ } } *ret_value = -1; return (p - buf); } /* * Convert from the plain UTF-8 format, expanding entity references: "2 < 3" */ static ssize_t OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; const char *p = (const char *)chunk_buf; const char *pend = p + chunk_size; uint8_t *buf; /* Reallocate buffer */ ssize_t _ns = st->size + chunk_size; void *nptr = REALLOC(st->buf, _ns + 1); if(!nptr) return -1; st->buf = (uint8_t *)nptr; buf = st->buf + st->size; /* * Convert series of 0 and 1 into the octet string. */ for(; p < pend; p++) { int ch = *(const unsigned char *)p; int len; /* Length of the rest of the chunk */ if(ch != 0x26 /* '&' */) { *buf++ = ch; continue; /* That was easy... */ } /* * Process entity reference. */ len = chunk_size - (p - (const char *)chunk_buf); if(len == 1 /* "&" */) goto want_more; if(p[1] == 0x23 /* '#' */) { const char *pval; /* Pointer to start of digits */ int32_t val = 0; /* Entity reference value */ int base; if(len == 2 /* "&#" */) goto want_more; if(p[2] == 0x78 /* 'x' */) pval = p + 3, base = 16; else pval = p + 2, base = 10; len = OS__strtoent(base, pval, p + len, &val); if(len == -1) { /* Invalid charset. Just copy verbatim. */ *buf++ = ch; continue; } if(!len || pval[len-1] != 0x3b) goto want_more; assert(val > 0); p += (pval - p) + len - 1; /* Advance past entref */ if(val < 0x80) { *buf++ = (char)val; } else if(val < 0x800) { *buf++ = 0xc0 | ((val >> 6)); *buf++ = 0x80 | ((val & 0x3f)); } else if(val < 0x10000) { *buf++ = 0xe0 | ((val >> 12)); *buf++ = 0x80 | ((val >> 6) & 0x3f); *buf++ = 0x80 | ((val & 0x3f)); } else if(val < 0x200000) { *buf++ = 0xf0 | ((val >> 18)); *buf++ = 0x80 | ((val >> 12) & 0x3f); *buf++ = 0x80 | ((val >> 6) & 0x3f); *buf++ = 0x80 | ((val & 0x3f)); } else if(val < 0x4000000) { *buf++ = 0xf8 | ((val >> 24)); *buf++ = 0x80 | ((val >> 18) & 0x3f); *buf++ = 0x80 | ((val >> 12) & 0x3f); *buf++ = 0x80 | ((val >> 6) & 0x3f); *buf++ = 0x80 | ((val & 0x3f)); } else { *buf++ = 0xfc | ((val >> 30) & 0x1); *buf++ = 0x80 | ((val >> 24) & 0x3f); *buf++ = 0x80 | ((val >> 18) & 0x3f); *buf++ = 0x80 | ((val >> 12) & 0x3f); *buf++ = 0x80 | ((val >> 6) & 0x3f); *buf++ = 0x80 | ((val & 0x3f)); } } else { /* * Ugly, limited parsing of & > < */ char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len); if(!sc) goto want_more; if((sc - p) == 4 && p[1] == 0x61 /* 'a' */ && p[2] == 0x6d /* 'm' */ && p[3] == 0x70 /* 'p' */) { *buf++ = 0x26; p = sc; continue; } if((sc - p) == 3) { if(p[1] == 0x6c) { *buf = 0x3c; /* '<' */ } else if(p[1] == 0x67) { *buf = 0x3e; /* '>' */ } else { /* Unsupported entity reference */ *buf++ = ch; continue; } if(p[2] != 0x74) { /* Unsupported entity reference */ *buf++ = ch; continue; } buf++; p = sc; continue; } /* Unsupported entity reference */ *buf++ = ch; } continue; want_more: if(have_more) { /* * We know that no more data (of the same type) * is coming. Copy the rest verbatim. */ *buf++ = ch; continue; } chunk_size = (p - (const char *)chunk_buf); /* Processing stalled: need more data */ break; } st->size = buf - st->buf; assert(st->size <= _ns); st->buf[st->size] = 0; /* Courtesy termination */ return chunk_size; /* Converted in full */ } /* * Decode OCTET STRING from the XML element's body. */ static asn_dec_rval_t OCTET_STRING__decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size, int (*opt_unexpected_tag_decoder) (void *struct_ptr, const void *chunk_buf, size_t chunk_size), ssize_t (*body_receiver) (void *struct_ptr, const void *chunk_buf, size_t chunk_size, int have_more) ) { OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; asn_struct_ctx_t *ctx; /* Per-structure parser context */ asn_dec_rval_t rval; /* Return value from the decoder */ int st_allocated; /* * Create the string if does not exist. */ if(!st) { st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); *sptr = (void *)st; if(!st) goto sta_failed; st_allocated = 1; } else { st_allocated = 0; } if(!st->buf) { /* This is separate from above section */ st->buf = (uint8_t *)CALLOC(1, 1); if(!st->buf) { if(st_allocated) { *sptr = 0; goto stb_failed; } else { goto sta_failed; } } } /* Restore parsing context */ ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); stb_failed: FREEMEM(st); sta_failed: rval.code = RC_FAIL; rval.consumed = 0; return rval; } /* * Decode OCTET STRING from the hexadecimal data. */ asn_dec_rval_t OCTET_STRING_decode_xer_hex(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal); } /* * Decode OCTET STRING from the binary (0/1) data. */ asn_dec_rval_t OCTET_STRING_decode_xer_binary(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, buf_ptr, size, 0, OCTET_STRING__convert_binary); } /* * Decode OCTET STRING from the string (ASCII/UTF-8) data. */ asn_dec_rval_t OCTET_STRING_decode_xer_utf8(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, const void *buf_ptr, size_t size) { return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, buf_ptr, size, OCTET_STRING__handle_control_chars, OCTET_STRING__convert_entrefs); } static int OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf, size_t units, unsigned int bpc, unsigned int unit_bits, long lb, long ub, asn_per_constraints_t *pc) { uint8_t *end = buf + units * bpc; ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d", (int)units, lb, ub, unit_bits); /* X.691: 27.5.4 */ if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { /* Decode without translation */ lb = 0; } else if(pc && pc->code2value) { if(unit_bits > 16) return 1; /* FATAL: can't have constrained * UniversalString with more than * 16 million code points */ for(; buf < end; buf += bpc) { int value; int code = per_get_few_bits(po, unit_bits); if(code < 0) return -1; /* WMORE */ value = pc->code2value(code); if(value < 0) { ASN_DEBUG("Code %d (0x%02x) is" " not in map (%ld..%ld)", code, code, lb, ub); return 1; /* FATAL */ } switch(bpc) { case 1: *buf = value; break; case 2: buf[0] = value >> 8; buf[1] = value; break; case 4: buf[0] = value >> 24; buf[1] = value >> 16; buf[2] = value >> 8; buf[3] = value; break; } } return 0; } /* Shortcut the no-op copying to the aligned structure */ if(lb == 0 && (unit_bits == 8 * bpc)) { return per_get_many_bits(po, buf, 0, unit_bits * units); } for(; buf < end; buf += bpc) { int code = per_get_few_bits(po, unit_bits); int ch = code + lb; if(code < 0) return -1; /* WMORE */ if(ch > ub) { ASN_DEBUG("Code %d is out of range (%ld..%ld)", ch, lb, ub); return 1; /* FATAL */ } switch(bpc) { case 1: *buf = ch; break; case 2: buf[0] = ch >> 8; buf[1] = ch; break; case 4: buf[0] = ch >> 24; buf[1] = ch >> 16; buf[2] = ch >> 8; buf[3] = ch; break; } } return 0; } static int OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf, size_t units, unsigned int bpc, unsigned int unit_bits, long lb, long ub, asn_per_constraints_t *pc) { const uint8_t *end = buf + units * bpc; ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", (int)units, lb, ub, unit_bits, bpc); /* X.691: 27.5.4 */ if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { /* Encode as is */ lb = 0; } else if(pc && pc->value2code) { for(; buf < end; buf += bpc) { int code; uint32_t value; switch(bpc) { case 1: value = *(const uint8_t *)buf; break; case 2: value = (buf[0] << 8) | buf[1]; break; case 4: value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; break; default: return -1; } code = pc->value2code(value); if(code < 0) { ASN_DEBUG("Character %d (0x%02x) is" " not in map (%ld..%ld)", *buf, *buf, lb, ub); return -1; } if(per_put_few_bits(po, code, unit_bits)) return -1; } } /* Shortcut the no-op copying to the aligned structure */ if(lb == 0 && (unit_bits == 8 * bpc)) { return per_put_many_bits(po, buf, unit_bits * units); } for(ub -= lb; buf < end; buf += bpc) { int ch; uint32_t value; switch(bpc) { case 1: value = *(const uint8_t *)buf; break; case 2: value = (buf[0] << 8) | buf[1]; break; case 4: value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; break; default: return -1; } ch = value - lb; if(ch < 0 || ch > ub) { ASN_DEBUG("Character %d (0x%02x)" " is out of range (%ld..%ld)", *buf, *buf, lb, ub + lb); return -1; } if(per_put_few_bits(po, ch, unit_bits)) return -1; } return 0; } asn_dec_rval_t OCTET_STRING_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; asn_per_constraints_t *pc = constraints ? constraints : td->per_constraints; asn_per_constraint_t *cval; asn_per_constraint_t *csiz; asn_dec_rval_t rval = { RC_OK, 0 }; BIT_STRING_t *st = (BIT_STRING_t *)*sptr; ssize_t consumed_myself = 0; int repeat; enum { OS__BPC_BIT = 0, OS__BPC_CHAR = 1, OS__BPC_U16 = 2, OS__BPC_U32 = 4 } bpc; /* Bytes per character */ unsigned int unit_bits; unsigned int canonical_unit_bits; (void)opt_codec_ctx; if(pc) { cval = &pc->value; csiz = &pc->size; } else { cval = &asn_DEF_OCTET_STRING_constraints.value; csiz = &asn_DEF_OCTET_STRING_constraints.size; } switch(specs->subvariant) { default: case ASN_OSUBV_ANY: ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); RETURN(RC_FAIL); case ASN_OSUBV_BIT: canonical_unit_bits = unit_bits = 1; bpc = OS__BPC_BIT; break; case ASN_OSUBV_STR: canonical_unit_bits = unit_bits = 8; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_CHAR; break; case ASN_OSUBV_U16: canonical_unit_bits = unit_bits = 16; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_U16; break; case ASN_OSUBV_U32: canonical_unit_bits = unit_bits = 32; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_U32; break; } /* * Allocate the string. */ if(!st) { st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); if(!st) RETURN(RC_FAIL); } ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); if(csiz->flags & APC_EXTENSIBLE) { int inext = per_get_few_bits(pd, 1); if(inext < 0) RETURN(RC_WMORE); if(inext) { csiz = &asn_DEF_OCTET_STRING_constraints.size; cval = &asn_DEF_OCTET_STRING_constraints.value; unit_bits = canonical_unit_bits; } } if(csiz->effective_bits >= 0) { FREEMEM(st->buf); if(bpc) { st->size = csiz->upper_bound * bpc; } else { st->size = (csiz->upper_bound + 7) >> 3; } st->buf = (uint8_t *)MALLOC(st->size + 1); if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } } /* X.691, #16.5: zero-length encoding */ /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ if(csiz->effective_bits == 0) { int ret; if(bpc) { ASN_DEBUG("Encoding OCTET STRING size %ld", csiz->upper_bound); ret = OCTET_STRING_per_get_characters(pd, st->buf, csiz->upper_bound, bpc, unit_bits, cval->lower_bound, cval->upper_bound, pc); if(ret > 0) RETURN(RC_FAIL); } else { ASN_DEBUG("Encoding BIT STRING size %ld", csiz->upper_bound); ret = per_get_many_bits(pd, st->buf, 0, unit_bits * csiz->upper_bound); } if(ret < 0) RETURN(RC_WMORE); consumed_myself += unit_bits * csiz->upper_bound; st->buf[st->size] = 0; if(bpc == 0) { int ubs = (csiz->upper_bound & 0x7); st->bits_unused = ubs ? 8 - ubs : 0; } RETURN(RC_OK); } st->size = 0; do { ssize_t raw_len; ssize_t len_bytes; ssize_t len_bits; void *p; int ret; /* Get the PER length */ raw_len = uper_get_length(pd, csiz->effective_bits, &repeat); if(raw_len < 0) RETURN(RC_WMORE); raw_len += csiz->lower_bound; ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", (long)csiz->effective_bits, (long)raw_len, repeat ? "repeat" : "once", td->name); if(bpc) { len_bytes = raw_len * bpc; len_bits = len_bytes * unit_bits; } else { len_bits = raw_len; len_bytes = (len_bits + 7) >> 3; if(len_bits & 0x7) st->bits_unused = 8 - (len_bits & 0x7); /* len_bits be multiple of 16K if repeat is set */ } p = REALLOC(st->buf, st->size + len_bytes + 1); if(!p) RETURN(RC_FAIL); st->buf = (uint8_t *)p; if(bpc) { ret = OCTET_STRING_per_get_characters(pd, &st->buf[st->size], raw_len, bpc, unit_bits, cval->lower_bound, cval->upper_bound, pc); if(ret > 0) RETURN(RC_FAIL); } else { ret = per_get_many_bits(pd, &st->buf[st->size], 0, len_bits); } if(ret < 0) RETURN(RC_WMORE); st->size += len_bytes; } while(repeat); st->buf[st->size] = 0; /* nul-terminate */ return rval; } asn_enc_rval_t OCTET_STRING_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; asn_per_constraints_t *pc = constraints ? constraints : td->per_constraints; asn_per_constraint_t *cval; asn_per_constraint_t *csiz; const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; asn_enc_rval_t er = { 0, 0, 0 }; int inext = 0; /* Lies not within extension root */ unsigned int unit_bits; unsigned int canonical_unit_bits; unsigned int sizeinunits; const uint8_t *buf; int ret; enum { OS__BPC_BIT = 0, OS__BPC_CHAR = 1, OS__BPC_U16 = 2, OS__BPC_U32 = 4 } bpc; /* Bytes per character */ int ct_extensible; if(!st || (!st->buf && st->size)) ASN__ENCODE_FAILED; if(pc) { cval = &pc->value; csiz = &pc->size; } else { cval = &asn_DEF_OCTET_STRING_constraints.value; csiz = &asn_DEF_OCTET_STRING_constraints.size; } ct_extensible = csiz->flags & APC_EXTENSIBLE; switch(specs->subvariant) { default: case ASN_OSUBV_ANY: ASN__ENCODE_FAILED; case ASN_OSUBV_BIT: canonical_unit_bits = unit_bits = 1; bpc = OS__BPC_BIT; sizeinunits = st->size * 8 - (st->bits_unused & 0x07); ASN_DEBUG("BIT STRING of %d bytes, %d bits unused", sizeinunits, st->bits_unused); break; case ASN_OSUBV_STR: canonical_unit_bits = unit_bits = 8; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_CHAR; sizeinunits = st->size; break; case ASN_OSUBV_U16: canonical_unit_bits = unit_bits = 16; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_U16; sizeinunits = st->size / 2; break; case ASN_OSUBV_U32: canonical_unit_bits = unit_bits = 32; if(cval->flags & APC_CONSTRAINED) unit_bits = cval->range_bits; bpc = OS__BPC_U32; sizeinunits = st->size / 4; break; } ASN_DEBUG("Encoding %s into %d units of %d bits" " (%ld..%ld, effective %d)%s", td->name, sizeinunits, unit_bits, csiz->lower_bound, csiz->upper_bound, csiz->effective_bits, ct_extensible ? " EXT" : ""); /* Figure out whether size lies within PER visible constraint */ if(csiz->effective_bits >= 0) { if((int)sizeinunits < csiz->lower_bound || (int)sizeinunits > csiz->upper_bound) { if(ct_extensible) { cval = &asn_DEF_OCTET_STRING_constraints.value; csiz = &asn_DEF_OCTET_STRING_constraints.size; unit_bits = canonical_unit_bits; inext = 1; } else ASN__ENCODE_FAILED; } } else { inext = 0; } if(ct_extensible) { /* Declare whether length is [not] within extension root */ if(per_put_few_bits(po, inext, 1)) ASN__ENCODE_FAILED; } /* X.691, #16.5: zero-length encoding */ /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ if(csiz->effective_bits >= 0) { ASN_DEBUG("Encoding %d bytes (%ld), length in %d bits", st->size, sizeinunits - csiz->lower_bound, csiz->effective_bits); ret = per_put_few_bits(po, sizeinunits - csiz->lower_bound, csiz->effective_bits); if(ret) ASN__ENCODE_FAILED; if(bpc) { ret = OCTET_STRING_per_put_characters(po, st->buf, sizeinunits, bpc, unit_bits, cval->lower_bound, cval->upper_bound, pc); } else { ret = per_put_many_bits(po, st->buf, sizeinunits * unit_bits); } if(ret) ASN__ENCODE_FAILED; ASN__ENCODED_OK(er); } ASN_DEBUG("Encoding %d bytes", st->size); if(sizeinunits == 0) { if(uper_put_length(po, 0)) ASN__ENCODE_FAILED; ASN__ENCODED_OK(er); } buf = st->buf; while(sizeinunits) { ssize_t maySave = uper_put_length(po, sizeinunits); if(maySave < 0) ASN__ENCODE_FAILED; ASN_DEBUG("Encoding %ld of %ld", (long)maySave, (long)sizeinunits); if(bpc) { ret = OCTET_STRING_per_put_characters(po, buf, maySave, bpc, unit_bits, cval->lower_bound, cval->upper_bound, pc); } else { ret = per_put_many_bits(po, buf, maySave * unit_bits); } if(ret) ASN__ENCODE_FAILED; if(bpc) buf += maySave * bpc; else buf += maySave >> 3; sizeinunits -= maySave; assert(!(maySave & 0x07) || !sizeinunits); } ASN__ENCODED_OK(er); } int OCTET_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const char * const h2c = "0123456789ABCDEF"; const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; char scratch[16 * 3 + 4]; char *p = scratch; uint8_t *buf; uint8_t *end; size_t i; (void)td; /* Unused argument */ if(!st || (!st->buf && st->size)) return (cb("", 8, app_key) < 0) ? -1 : 0; /* * Dump the contents of the buffer in hexadecimal. */ buf = st->buf; end = buf + st->size; for(i = 0; buf < end; buf++, i++) { if(!(i % 16) && (i || st->size > 16)) { if(cb(scratch, p - scratch, app_key) < 0) return -1; _i_INDENT(1); p = scratch; } *p++ = h2c[(*buf >> 4) & 0x0F]; *p++ = h2c[*buf & 0x0F]; *p++ = 0x20; } if(p > scratch) { p--; /* Remove the tail space */ if(cb(scratch, p - scratch, app_key) < 0) return -1; } return 0; } int OCTET_STRING_print_utf8(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; (void)td; /* Unused argument */ (void)ilevel; /* Unused argument */ if(st && (st->buf || !st->size)) { return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; } else { return (cb("", 8, app_key) < 0) ? -1 : 0; } } void OCTET_STRING_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) { OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; asn_OCTET_STRING_specifics_t *specs; asn_struct_ctx_t *ctx; struct _stack *stck; if(!td || !st) return; specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); ASN_DEBUG("Freeing %s as OCTET STRING", td->name); if(st->buf) { FREEMEM(st->buf); st->buf = 0; } /* * Remove decode-time stack. */ stck = (struct _stack *)ctx->ptr; if(stck) { while(stck->tail) { struct _stack_el *sel = stck->tail; stck->tail = sel->prev; FREEMEM(sel); } FREEMEM(stck); } if(!contents_only) { FREEMEM(st); } } /* * Conversion routines. */ int OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) { void *buf; if(st == 0 || (str == 0 && len)) { errno = EINVAL; return -1; } /* * Clear the OCTET STRING. */ if(str == NULL) { FREEMEM(st->buf); st->buf = 0; st->size = 0; return 0; } /* Determine the original string size, if not explicitly given */ if(len < 0) len = strlen(str); /* Allocate and fill the memory */ buf = MALLOC(len + 1); if(buf == NULL) return -1; memcpy(buf, str, len); ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */ FREEMEM(st->buf); st->buf = (uint8_t *)buf; st->size = len; return 0; } OCTET_STRING_t * OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td, const char *str, int len) { asn_OCTET_STRING_specifics_t *specs = td->specifics ? (asn_OCTET_STRING_specifics_t *)td->specifics : &asn_DEF_OCTET_STRING_specs; OCTET_STRING_t *st; st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); if(st && str && OCTET_STRING_fromBuf(st, str, len)) { FREEMEM(st); st = NULL; } return st; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/OCTET_STRING.h000066400000000000000000000054111524544274600264450ustar00rootroot00000000000000/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _OCTET_STRING_H_ #define _OCTET_STRING_H_ #include #ifdef __cplusplus extern "C" { #endif typedef struct OCTET_STRING { uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */ int size; /* Size of the buffer */ asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ } OCTET_STRING_t; extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING; asn_struct_free_f OCTET_STRING_free; asn_struct_print_f OCTET_STRING_print; asn_struct_print_f OCTET_STRING_print_utf8; ber_type_decoder_f OCTET_STRING_decode_ber; der_type_encoder_f OCTET_STRING_encode_der; xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */ xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */ xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */ xer_type_encoder_f OCTET_STRING_encode_xer; xer_type_encoder_f OCTET_STRING_encode_xer_utf8; per_type_decoder_f OCTET_STRING_decode_uper; per_type_encoder_f OCTET_STRING_encode_uper; /****************************** * Handy conversion routines. * ******************************/ /* * This function clears the previous value of the OCTET STRING (if any) * and then allocates a new memory with the specified content (str/size). * If size = -1, the size of the original string will be determined * using strlen(str). * If str equals to NULL, the function will silently clear the * current contents of the OCTET STRING. * Returns 0 if it was possible to perform operation, -1 otherwise. */ int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size); /* Handy conversion from the C string into the OCTET STRING. */ #define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1) /* * Allocate and fill the new OCTET STRING and return a pointer to the newly * allocated object. NULL is permitted in str: the function will just allocate * empty OCTET STRING. */ OCTET_STRING_t *OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td, const char *str, int size); /**************************** * Internally useful stuff. * ****************************/ typedef const struct asn_OCTET_STRING_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the structure */ int ctx_offset; /* Offset of the asn_struct_ctx_t member */ enum asn_OS_Subvariant { ASN_OSUBV_ANY, /* The open type (ANY) */ ASN_OSUBV_BIT, /* BIT STRING */ ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */ ASN_OSUBV_U16, /* 16-bit character (BMPString) */ ASN_OSUBV_U32 /* 32-bit character (UniversalString) */ } subvariant; } asn_OCTET_STRING_specifics_t; #ifdef __cplusplus } #endif #endif /* _OCTET_STRING_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/PDU.c000066400000000000000000000110241524544274600251210ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #include "PDU.h" static asn_per_constraints_t asn_PER_type_b_constr_3 GCC_NOTUSED = { { APC_CONSTRAINED, 3, 3, 0, 4 } /* (0..4) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; static asn_TYPE_member_t asn_MBR_b_3[] = { { ATF_NOFLAGS, 0, offsetof(struct PDU__b, choice.a), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_A, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "a" }, { ATF_NOFLAGS, 0, offsetof(struct PDU__b, choice.b), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_B, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "b" }, { ATF_NOFLAGS, 0, offsetof(struct PDU__b, choice.c), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_C, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "c" }, { ATF_NOFLAGS, 0, offsetof(struct PDU__b, choice.d), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_D, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "d" }, { ATF_NOFLAGS, 0, offsetof(struct PDU__b, choice.e), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_E, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "e" }, }; static const asn_TYPE_tag2member_t asn_MAP_b_tag2el_3[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* b */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* c */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* d */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* e */ }; static asn_CHOICE_specifics_t asn_SPC_b_specs_3 = { sizeof(struct PDU__b), offsetof(struct PDU__b, _asn_ctx), offsetof(struct PDU__b, present), sizeof(((struct PDU__b *)0)->present), asn_MAP_b_tag2el_3, 5, /* Count of tags in the map */ 0, -1 /* Extensions start */ }; static /* Use -fall-defs-global to expose */ asn_TYPE_descriptor_t asn_DEF_b_3 = { "b", "b", CHOICE_free, CHOICE_print, CHOICE_constraint, CHOICE_decode_ber, CHOICE_encode_der, CHOICE_decode_xer, CHOICE_encode_xer, CHOICE_decode_uper, CHOICE_encode_uper, CHOICE_outmost_tag, 0, /* No effective tags (pointer) */ 0, /* No effective tags (count) */ 0, /* No tags (pointer) */ 0, /* No tags (count) */ &asn_PER_type_b_constr_3, asn_MBR_b_3, 5, /* Elements count */ &asn_SPC_b_specs_3 /* Additional specs */ }; static asn_TYPE_member_t asn_MBR_PDU_1[] = { { ATF_NOFLAGS, 0, offsetof(struct PDU, a), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_F, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "a" }, { ATF_NOFLAGS, 0, offsetof(struct PDU, b), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), +1, /* EXPLICIT tag at current level */ &asn_DEF_b_3, 0, /* Defer constraints checking to the member type */ 0, /* No PER visible constraints */ 0, "b" }, }; static const ber_tlv_tag_t asn_DEF_PDU_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_PDU_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* b */ }; static asn_SEQUENCE_specifics_t asn_SPC_PDU_specs_1 = { sizeof(struct PDU), offsetof(struct PDU, _asn_ctx), asn_MAP_PDU_tag2el_1, 2, /* Count of tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ -1, /* Start extensions */ -1 /* Stop extensions */ }; asn_TYPE_descriptor_t asn_DEF_PDU = { "PDU", "PDU", SEQUENCE_free, SEQUENCE_print, SEQUENCE_constraint, SEQUENCE_decode_ber, SEQUENCE_encode_der, SEQUENCE_decode_xer, SEQUENCE_encode_xer, SEQUENCE_decode_uper, SEQUENCE_encode_uper, 0, /* Use generic outmost tag fetcher */ asn_DEF_PDU_tags_1, sizeof(asn_DEF_PDU_tags_1) /sizeof(asn_DEF_PDU_tags_1[0]), /* 1 */ asn_DEF_PDU_tags_1, /* Same as above */ sizeof(asn_DEF_PDU_tags_1) /sizeof(asn_DEF_PDU_tags_1[0]), /* 1 */ 0, /* No PER visible constraints */ asn_MBR_PDU_1, 2, /* Elements count */ &asn_SPC_PDU_specs_1 /* Additional specs */ }; asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/PDU.h000066400000000000000000000021661524544274600251350ustar00rootroot00000000000000/* * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) * From ASN.1 module "MyProtocol" * found in "../../my_protocol.asn" * `asn1c -fcompound-names -fincludes-quoted -gen-PER` */ #ifndef _PDU_H_ #define _PDU_H_ #include "asn_application.h" /* Including external dependencies */ #include "F.h" #include "A.h" #include "B.h" #include "C.h" #include "D.h" #include "E.h" #include "constr_CHOICE.h" #include "constr_SEQUENCE.h" #ifdef __cplusplus extern "C" { #endif /* Dependencies */ typedef enum PDU__b_PR { PDU__b_PR_NOTHING, /* No components present */ PDU__b_PR_a, PDU__b_PR_b, PDU__b_PR_c, PDU__b_PR_d, PDU__b_PR_e } PDU__b_PR; /* PDU */ typedef struct PDU { F_t a; struct PDU__b { PDU__b_PR present; union PDU__b_u { A_t a; B_t b; C_t c; D_t d; E_t e; } choice; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } b; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } PDU_t; /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_PDU; #ifdef __cplusplus } #endif #endif /* _PDU_H_ */ #include "asn_internal.h" asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/asn_SEQUENCE_OF.c000066400000000000000000000015601524544274600271320ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include typedef A_SEQUENCE_OF(void) asn_sequence; void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { asn_sequence *as = (asn_sequence *)asn_sequence_of_x; if(as) { void *ptr; int n; if(number < 0 || number >= as->count) return; /* Nothing to delete */ if(_do_free && as->free) { ptr = as->array[number]; } else { ptr = 0; } /* * Shift all elements to the left to hide the gap. */ --as->count; for(n = number; n < as->count; n++) as->array[n] = as->array[n+1]; /* * Invoke the third-party function only when the state * of the parent structure is consistent. */ if(ptr) as->free(ptr); } } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/asn_SEQUENCE_OF.h000066400000000000000000000027351524544274600271440ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef ASN_SEQUENCE_OF_H #define ASN_SEQUENCE_OF_H #include #ifdef __cplusplus extern "C" { #endif /* * SEQUENCE OF is the same as SET OF with a tiny difference: * the delete operation preserves the initial order of elements * and thus MAY operate in non-constant time. */ #define A_SEQUENCE_OF(type) A_SET_OF(type) #define ASN_SEQUENCE_ADD(headptr, ptr) \ asn_sequence_add((headptr), (ptr)) /*********************************************** * Implementation of the SEQUENCE OF structure. */ #define asn_sequence_add asn_set_add #define asn_sequence_empty asn_set_empty /* * Delete the element from the set by its number (base 0). * This is NOT a constant-time operation. * The order of elements is preserved. * If _do_free is given AND the (*free) is initialized, the element * will be freed using the custom (*free) function as well. */ void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free); /* * Cope with different conversions requirements to/from void in C and C++. * This is mostly useful for support library. */ typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_; #define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr)) #define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr)) #ifdef __cplusplus } #endif #endif /* ASN_SEQUENCE_OF_H */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/asn_SET_OF.c000066400000000000000000000032521524544274600263550ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Add another element into the set. */ int asn_set_add(void *asn_set_of_x, void *ptr) { asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); if(as == 0 || ptr == 0) { errno = EINVAL; /* Invalid arguments */ return -1; } /* * Make sure there's enough space to insert an element. */ if(as->count == as->size) { int _newsize = as->size ? (as->size << 1) : 4; void *_new_arr; _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0])); if(_new_arr) { as->array = (void **)_new_arr; as->size = _newsize; } else { /* ENOMEM */ return -1; } } as->array[as->count++] = ptr; return 0; } void asn_set_del(void *asn_set_of_x, int number, int _do_free) { asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); if(as) { void *ptr; if(number < 0 || number >= as->count) return; if(_do_free && as->free) { ptr = as->array[number]; } else { ptr = 0; } as->array[number] = as->array[--as->count]; /* * Invoke the third-party function only when the state * of the parent structure is consistent. */ if(ptr) as->free(ptr); } } /* * Free the contents of the set, do not free the set itself. */ void asn_set_empty(void *asn_set_of_x) { asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); if(as) { if(as->array) { if(as->free) { while(as->count--) as->free(as->array[as->count]); } FREEMEM(as->array); as->array = 0; } as->count = 0; as->size = 0; } } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/asn_SET_OF.h000066400000000000000000000032331524544274600263610ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef ASN_SET_OF_H #define ASN_SET_OF_H #ifdef __cplusplus extern "C" { #endif #define A_SET_OF(type) \ struct { \ type **array; \ int count; /* Meaningful size */ \ int size; /* Allocated size */ \ void (*free)(type *); \ } #define ASN_SET_ADD(headptr, ptr) \ asn_set_add((headptr), (ptr)) /******************************************* * Implementation of the SET OF structure. */ /* * Add another structure into the set by its pointer. * RETURN VALUES: * 0 for success and -1/errno for failure. */ int asn_set_add(void *asn_set_of_x, void *ptr); /* * Delete the element from the set by its number (base 0). * This is a constant-time operation. The order of elements before the * deleted ones is guaranteed, the order of elements after the deleted * one is NOT guaranteed. * If _do_free is given AND the (*free) is initialized, the element * will be freed using the custom (*free) function as well. */ void asn_set_del(void *asn_set_of_x, int number, int _do_free); /* * Empty the contents of the set. Will free the elements, if (*free) is given. * Will NOT free the set itself. */ void asn_set_empty(void *asn_set_of_x); /* * Cope with different conversions requirements to/from void in C and C++. * This is mostly useful for support library. */ typedef A_SET_OF(void) asn_anonymous_set_; #define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr)) #define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr)) #ifdef __cplusplus } #endif #endif /* ASN_SET_OF_H */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/asn_application.h000066400000000000000000000027101524544274600276440ustar00rootroot00000000000000/*- * Copyright (c) 2004, 2006 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Application-level ASN.1 callbacks. */ #ifndef ASN_APPLICATION_H #define ASN_APPLICATION_H #include "asn_system.h" /* for platform-dependent types */ #include "asn_codecs.h" /* for ASN.1 codecs specifics */ #ifdef __cplusplus extern "C" { #endif /* * Generic type of an application-defined callback to return various * types of data to the application. * EXPECTED RETURN VALUES: * -1: Failed to consume bytes. Abort the mission. * Non-negative return values indicate success, and ignored. */ typedef int (asn_app_consume_bytes_f)(const void *buffer, size_t size, void *application_specific_key); /* * A callback of this type is called whenever constraint validation fails * on some ASN.1 type. See "constraints.h" for more details on constraint * validation. * This callback specifies a descriptor of the ASN.1 type which failed * the constraint check, as well as human readable message on what * particular constraint has failed. */ typedef void (asn_app_constraint_failed_f)(void *application_specific_key, struct asn_TYPE_descriptor_s *type_descriptor_which_failed, const void *structure_which_failed_ptr, const char *error_message_format, ...) GCC_PRINTFLIKE(4, 5); #ifdef __cplusplus } #endif #include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */ #endif /* ASN_APPLICATION_H */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/asn_codecs.h000066400000000000000000000065631524544274600266130ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef ASN_CODECS_H #define ASN_CODECS_H #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * This structure defines a set of parameters that may be passed * to every ASN.1 encoder or decoder function. * WARNING: if max_stack_size member is set, and you are calling the * function pointers of the asn_TYPE_descriptor_t directly, * this structure must be ALLOCATED ON THE STACK! * If you can't always satisfy this requirement, use ber_decode(), * xer_decode() and uper_decode() functions instead. */ typedef struct asn_codec_ctx_s { /* * Limit the decoder routines to use no (much) more stack than a given * number of bytes. Most of decoders are stack-based, and this * would protect against stack overflows if the number of nested * encodings is high. * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based, * and are safe from this kind of overflow. * A value from getrlimit(RLIMIT_STACK) may be used to initialize * this variable. Be careful in multithreaded environments, as the * stack size is rather limited. */ size_t max_stack_size; /* 0 disables stack bounds checking */ } asn_codec_ctx_t; /* * Type of the return value of the encoding functions (der_encode, xer_encode). */ typedef struct asn_enc_rval_s { /* * Number of bytes encoded. * -1 indicates failure to encode the structure. * In this case, the members below this one are meaningful. */ ssize_t encoded; /* * Members meaningful when (encoded == -1), for post mortem analysis. */ /* Type which cannot be encoded */ struct asn_TYPE_descriptor_s *failed_type; /* Pointer to the structure of that type */ void *structure_ptr; } asn_enc_rval_t; #define ASN__ENCODE_FAILED do { \ asn_enc_rval_t tmp_error; \ tmp_error.encoded = -1; \ tmp_error.failed_type = td; \ tmp_error.structure_ptr = sptr; \ ASN_DEBUG("Failed to encode element %s", td ? td->name : ""); \ return tmp_error; \ } while(0) #define ASN__ENCODED_OK(rval) do { \ rval.structure_ptr = 0; \ rval.failed_type = 0; \ return rval; \ } while(0) /* * Type of the return value of the decoding functions (ber_decode, xer_decode) * * Please note that the number of consumed bytes is ALWAYS meaningful, * even if code==RC_FAIL. This is to indicate the number of successfully * decoded bytes, hence providing a possibility to fail with more diagnostics * (i.e., print the offending remainder of the buffer). */ enum asn_dec_rval_code_e { RC_OK, /* Decoded successfully */ RC_WMORE, /* More data expected, call again */ RC_FAIL /* Failure to decode data */ }; typedef struct asn_dec_rval_s { enum asn_dec_rval_code_e code; /* Result code */ size_t consumed; /* Number of bytes consumed */ } asn_dec_rval_t; #define ASN__DECODE_FAILED do { \ asn_dec_rval_t tmp_error; \ tmp_error.code = RC_FAIL; \ tmp_error.consumed = 0; \ ASN_DEBUG("Failed to decode element %s", td ? td->name : ""); \ return tmp_error; \ } while(0) #define ASN__DECODE_STARVED do { \ asn_dec_rval_t tmp_error; \ tmp_error.code = RC_WMORE; \ tmp_error.consumed = 0; \ return tmp_error; \ } while(0) #ifdef __cplusplus } #endif #endif /* ASN_CODECS_H */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/asn_codecs_prim.c000066400000000000000000000164341524544274600276330ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Decode an always-primitive type. */ asn_dec_rval_t ber_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buf_ptr, size_t size, int tag_mode) { ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; asn_dec_rval_t rval; ber_tlv_len_t length = 0; /* =0 to avoid [incorrect] warning. */ /* * If the structure is not there, allocate it. */ if(st == NULL) { st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st)); if(st == NULL) ASN__DECODE_FAILED; *sptr = (void *)st; } ASN_DEBUG("Decoding %s as plain primitive (tm=%d)", td->name, tag_mode); /* * Check tags and extract value length. */ rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, tag_mode, 0, &length, 0); if(rval.code != RC_OK) return rval; ASN_DEBUG("%s length is %d bytes", td->name, (int)length); /* * Make sure we have this length. */ buf_ptr = ((const char *)buf_ptr) + rval.consumed; size -= rval.consumed; if(length > (ber_tlv_len_t)size) { rval.code = RC_WMORE; rval.consumed = 0; return rval; } st->size = (int)length; /* The following better be optimized away. */ if(sizeof(st->size) != sizeof(length) && (ber_tlv_len_t)st->size != length) { st->size = 0; ASN__DECODE_FAILED; } st->buf = (uint8_t *)MALLOC(length + 1); if(!st->buf) { st->size = 0; ASN__DECODE_FAILED; } memcpy(st->buf, buf_ptr, length); st->buf[length] = '\0'; /* Just in case */ rval.code = RC_OK; rval.consumed += length; ASN_DEBUG("Took %ld/%ld bytes to encode %s", (long)rval.consumed, (long)length, td->name); return rval; } /* * Encode an always-primitive type using DER. */ asn_enc_rval_t der_encode_primitive(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t erval; ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; ASN_DEBUG("%s %s as a primitive type (tm=%d)", cb?"Encoding":"Estimating", td->name, tag_mode); erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag, cb, app_key); ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded); if(erval.encoded == -1) { erval.failed_type = td; erval.structure_ptr = sptr; return erval; } if(cb && st->buf) { if(cb(st->buf, st->size, app_key) < 0) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = sptr; return erval; } } else { assert(st->buf || st->size == 0); } erval.encoded += st->size; ASN__ENCODED_OK(erval); } void ASN__PRIMITIVE_TYPE_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) { ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; if(!td || !sptr) return; ASN_DEBUG("Freeing %s as a primitive type", td->name); if(st->buf) FREEMEM(st->buf); if(!contents_only) FREEMEM(st); } /* * Local internal type passed around as an argument. */ struct xdp_arg_s { asn_TYPE_descriptor_t *type_descriptor; void *struct_key; xer_primitive_body_decoder_f *prim_body_decoder; int decoded_something; int want_more; }; /* * Since some kinds of primitive values can be encoded using value-specific * tags (, , etc), the primitive decoder must * be supplied with such tags to parse them as needed. */ static int xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { struct xdp_arg_s *arg = (struct xdp_arg_s *)key; enum xer_pbd_rval bret; /* * The chunk_buf is guaranteed to start at '<'. */ assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c); /* * Decoding was performed once already. Prohibit doing it again. */ if(arg->decoded_something) return -1; bret = arg->prim_body_decoder(arg->type_descriptor, arg->struct_key, chunk_buf, chunk_size); switch(bret) { case XPBD_SYSTEM_FAILURE: case XPBD_DECODER_LIMIT: case XPBD_BROKEN_ENCODING: break; case XPBD_BODY_CONSUMED: /* Tag decoded successfully */ arg->decoded_something = 1; /* Fall through */ case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ return 0; } return -1; } static ssize_t xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { struct xdp_arg_s *arg = (struct xdp_arg_s *)key; enum xer_pbd_rval bret; size_t lead_wsp_size; if(arg->decoded_something) { if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) { /* * Example: * "123 " * ^- chunk_buf position. */ return chunk_size; } /* * Decoding was done once already. Prohibit doing it again. */ return -1; } if(!have_more) { /* * If we've received something like "1", we can't really * tell whether it is really `1` or `123`, until we know * that there is no more data coming. * The have_more argument will be set to 1 once something * like this is available to the caller of this callback: * "1want_more = 1; return -1; } lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size); chunk_buf = (const char *)chunk_buf + lead_wsp_size; chunk_size -= lead_wsp_size; bret = arg->prim_body_decoder(arg->type_descriptor, arg->struct_key, chunk_buf, chunk_size); switch(bret) { case XPBD_SYSTEM_FAILURE: case XPBD_DECODER_LIMIT: case XPBD_BROKEN_ENCODING: break; case XPBD_BODY_CONSUMED: /* Tag decoded successfully */ arg->decoded_something = 1; /* Fall through */ case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ return lead_wsp_size + chunk_size; } return -1; } asn_dec_rval_t xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, xer_primitive_body_decoder_f *prim_body_decoder ) { const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; asn_struct_ctx_t s_ctx; struct xdp_arg_s s_arg; asn_dec_rval_t rc; /* * Create the structure if does not exist. */ if(!*sptr) { *sptr = CALLOC(1, struct_size); if(!*sptr) ASN__DECODE_FAILED; } memset(&s_ctx, 0, sizeof(s_ctx)); s_arg.type_descriptor = td; s_arg.struct_key = *sptr; s_arg.prim_body_decoder = prim_body_decoder; s_arg.decoded_something = 0; s_arg.want_more = 0; rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, xml_tag, buf_ptr, size, xer_decode__unexpected_tag, xer_decode__primitive_body); switch(rc.code) { case RC_OK: if(!s_arg.decoded_something) { char ch; ASN_DEBUG("Primitive body is not recognized, " "supplying empty one"); /* * Decoding opportunity has come and gone. * Where's the result? * Try to feed with empty body, see if it eats it. */ if(prim_body_decoder(s_arg.type_descriptor, s_arg.struct_key, &ch, 0) != XPBD_BODY_CONSUMED) { /* * This decoder does not like empty stuff. */ ASN__DECODE_FAILED; } } break; case RC_WMORE: /* * Redo the whole thing later. * We don't have a context to save intermediate parsing state. */ rc.consumed = 0; break; case RC_FAIL: rc.consumed = 0; if(s_arg.want_more) rc.code = RC_WMORE; else ASN__DECODE_FAILED; break; } return rc; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/asn_codecs_prim.h000066400000000000000000000031351524544274600276320ustar00rootroot00000000000000/*- * Copyright (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef ASN_CODECS_PRIM_H #define ASN_CODECS_PRIM_H #include #ifdef __cplusplus extern "C" { #endif typedef struct ASN__PRIMITIVE_TYPE_s { uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ int size; /* Size of the buffer */ } ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ asn_struct_free_f ASN__PRIMITIVE_TYPE_free; ber_type_decoder_f ber_decode_primitive; der_type_encoder_f der_encode_primitive; /* * A callback specification for the xer_decode_primitive() function below. */ enum xer_pbd_rval { XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ XPBD_BODY_CONSUMED /* Body is recognized and consumed */ }; typedef enum xer_pbd_rval (xer_primitive_body_decoder_f) (asn_TYPE_descriptor_t *td, void *struct_ptr, const void *chunk_buf, size_t chunk_size); /* * Specific function to decode simple primitive types. * Also see xer_decode_general() in xer_decoder.h */ asn_dec_rval_t xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, size_t struct_size, const char *opt_mname, const void *buf_ptr, size_t size, xer_primitive_body_decoder_f *prim_body_decoder ); #ifdef __cplusplus } #endif #endif /* ASN_CODECS_PRIM_H */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/asn_internal.h000066400000000000000000000101211524544274600271500ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004, 2005, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Declarations internally useful for the ASN.1 support code. */ #ifndef ASN_INTERNAL_H #define ASN_INTERNAL_H #include "asn_application.h" /* Application-visible API */ #ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ #include /* for assert() macro */ #endif #ifdef __cplusplus extern "C" { #endif /* Environment version might be used to avoid running with the old library */ #define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */ int get_asn1c_environment_version(void); /* Run-time version */ #define CALLOC(nmemb, size) calloc(nmemb, size) #define MALLOC(size) malloc(size) #define REALLOC(oldptr, size) realloc(oldptr, size) #define FREEMEM(ptr) free(ptr) #define asn_debug_indent 0 #define ASN_DEBUG_INDENT_ADD(i) do{}while(0) /* * A macro for debugging the ASN.1 internals. * You may enable or override it. */ #ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */ #if EMIT_ASN_DEBUG == 1 /* And it was asked to emit this code... */ #ifdef __GNUC__ #ifdef ASN_THREAD_SAFE /* Thread safety requires sacrifice in output indentation: * Retain empty definition of ASN_DEBUG_INDENT_ADD. */ #else /* !ASN_THREAD_SAFE */ #undef ASN_DEBUG_INDENT_ADD #undef asn_debug_indent int asn_debug_indent; #define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0) #endif /* ASN_THREAD_SAFE */ #define ASN_DEBUG(fmt, args...) do { \ int adi = asn_debug_indent; \ while(adi--) fprintf(stderr, " "); \ fprintf(stderr, fmt, ##args); \ fprintf(stderr, " (%s:%d)\n", \ __FILE__, __LINE__); \ } while(0) #else /* !__GNUC__ */ void ASN_DEBUG_f(const char *fmt, ...); #define ASN_DEBUG ASN_DEBUG_f #endif /* __GNUC__ */ #else /* EMIT_ASN_DEBUG != 1 */ static void ASN_DEBUG(const char *fmt, ...) { (void)fmt; } #endif /* EMIT_ASN_DEBUG */ #endif /* ASN_DEBUG */ /* * Invoke the application-supplied callback and fail, if something is wrong. */ #define ASN__E_cbc(buf, size) (cb((buf), (size), app_key) < 0) #define ASN__E_CALLBACK(foo) do { \ if(foo) goto cb_failed; \ } while(0) #define ASN__CALLBACK(buf, size) \ ASN__E_CALLBACK(ASN__E_cbc(buf, size)) #define ASN__CALLBACK2(buf1, size1, buf2, size2) \ ASN__E_CALLBACK(ASN__E_cbc(buf1, size1) || ASN__E_cbc(buf2, size2)) #define ASN__CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \ ASN__E_CALLBACK(ASN__E_cbc(buf1, size1) \ || ASN__E_cbc(buf2, size2) \ || ASN__E_cbc(buf3, size3)) #define ASN__TEXT_INDENT(nl, level) do { \ int tmp_level = (level); \ int tmp_nl = ((nl) != 0); \ int tmp_i; \ if(tmp_nl) ASN__CALLBACK("\n", 1); \ if(tmp_level < 0) tmp_level = 0; \ for(tmp_i = 0; tmp_i < tmp_level; tmp_i++) \ ASN__CALLBACK(" ", 4); \ er.encoded += tmp_nl + 4 * tmp_level; \ } while(0) #define _i_INDENT(nl) do { \ int tmp_i; \ if((nl) && cb("\n", 1, app_key) < 0) \ return -1; \ for(tmp_i = 0; tmp_i < ilevel; tmp_i++) \ if(cb(" ", 4, app_key) < 0) \ return -1; \ } while(0) /* * Check stack against overflow, if limit is set. */ #define ASN__DEFAULT_STACK_MAX (30000) static int __attribute__((unused)) ASN__STACK_OVERFLOW_CHECK(asn_codec_ctx_t *ctx) { if(ctx && ctx->max_stack_size) { /* ctx MUST be allocated on the stack */ ptrdiff_t usedstack = ((char *)ctx - (char *)&ctx); if(usedstack > 0) usedstack = -usedstack; /* grows up! */ /* double negative required to avoid int wrap-around */ if(usedstack < -(ptrdiff_t)ctx->max_stack_size) { ASN_DEBUG("Stack limit %ld reached", (long)ctx->max_stack_size); return -1; } } return 0; } #ifdef __cplusplus } #endif #endif /* ASN_INTERNAL_H */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/asn_system.h000066400000000000000000000066731524544274600267010ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * Miscellaneous system-dependent types. */ #ifndef ASN_SYSTEM_H #define ASN_SYSTEM_H #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifndef _BSD_SOURCE #define _BSD_SOURCE /* for snprintf() on some linux systems */ #endif #include /* For snprintf(3) */ #include /* For *alloc(3) */ #include /* For memcpy(3) */ #include /* For size_t */ #include /* For LONG_MAX */ #include /* For va_start */ #include /* for offsetof and ptrdiff_t */ #ifdef HAVE_ALLOCA_H #include /* For alloca(3) */ #endif #ifdef _WIN32 #include #define snprintf _snprintf #define vsnprintf _vsnprintf /* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ #define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ | (((l) << 8) & 0xff0000) \ | (((l) >> 8) & 0xff00) \ | ((l >> 24) & 0xff)) #ifdef _MSC_VER /* MSVS.Net */ #ifndef __cplusplus #define inline __inline #endif #ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */ #define ssize_t SSIZE_T typedef char int8_t; typedef short int16_t; typedef int int32_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #endif /* ASSUMESTDTYPES */ #define WIN32_LEAN_AND_MEAN #include #include #define isnan _isnan #define finite _finite #define copysign _copysign #define ilogb _logb #else /* !_MSC_VER */ #include #endif /* _MSC_VER */ #else /* !_WIN32 */ #if defined(__vxworks) #include #else /* !defined(__vxworks) */ #include /* C99 specifies this file */ /* * 1. Earlier FreeBSD version didn't have , * but was present. * 2. Sun Solaris requires for alloca(3), * but does not have . */ #if (!defined(__FreeBSD__) || !defined(_SYS_INTTYPES_H_)) #if defined(sun) #include /* For alloca(3) */ #include /* for finite(3) */ #elif defined(__hpux) #ifdef __GNUC__ #include /* For alloca(3) */ #else /* !__GNUC__ */ #define inline #endif /* __GNUC__ */ #else #include /* SUSv2+ and C99 specify this file, for uintXX_t */ #endif /* defined(sun) */ #endif #include /* for ntohl() */ #define sys_ntohl(foo) ntohl(foo) #endif /* defined(__vxworks) */ #endif /* _WIN32 */ #if __GNUC__ >= 3 #ifndef GCC_PRINTFLIKE #define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) #endif #ifndef GCC_NOTUSED #define GCC_NOTUSED __attribute__((unused)) #endif #else #ifndef GCC_PRINTFLIKE #define GCC_PRINTFLIKE(fmt,var) /* nothing */ #endif #ifndef GCC_NOTUSED #define GCC_NOTUSED #endif #endif /* Figure out if thread safety is requested */ #if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT)) #define ASN_THREAD_SAFE #endif /* Thread safety */ #ifndef offsetof /* If not defined by */ #define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) #endif /* offsetof */ #ifndef MIN /* Suitable for comparing primitive types (integers) */ #if defined(__GNUC__) #define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ ((_a)<(_b)?(_a):(_b)); }) #else /* !__GNUC__ */ #define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ #endif /* __GNUC__ */ #endif /* MIN */ #endif /* ASN_SYSTEM_H */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/ber_decoder.c000066400000000000000000000167671524544274600267510ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ ptr = ((const char *)ptr) + num; \ size -= num; \ consumed_myself += num; \ } while(0) #undef RETURN #define RETURN(_code) do { \ asn_dec_rval_t rval; \ rval.code = _code; \ if(opt_ctx) opt_ctx->step = step; /* Save context */ \ if(_code == RC_OK || opt_ctx) \ rval.consumed = consumed_myself; \ else \ rval.consumed = 0; /* Context-free */ \ return rval; \ } while(0) /* * The BER decoder of any type. */ asn_dec_rval_t ber_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *type_descriptor, void **struct_ptr, const void *ptr, size_t size) { asn_codec_ctx_t s_codec_ctx; /* * Stack checker requires that the codec context * must be allocated on the stack. */ if(opt_codec_ctx) { if(opt_codec_ctx->max_stack_size) { s_codec_ctx = *opt_codec_ctx; opt_codec_ctx = &s_codec_ctx; } } else { /* If context is not given, be security-conscious anyway */ memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; opt_codec_ctx = &s_codec_ctx; } /* * Invoke type-specific decoder. */ return type_descriptor->ber_decoder(opt_codec_ctx, type_descriptor, struct_ptr, /* Pointer to the destination structure */ ptr, size, /* Buffer and its size */ 0 /* Default tag mode is 0 */ ); } /* * Check the set of >> tags matches the definition. */ asn_dec_rval_t ber_check_tags(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx, const void *ptr, size_t size, int tag_mode, int last_tag_form, ber_tlv_len_t *last_length, int *opt_tlv_form) { ssize_t consumed_myself = 0; ssize_t tag_len; ssize_t len_len; ber_tlv_tag_t tlv_tag; ber_tlv_len_t tlv_len; ber_tlv_len_t limit_len = -1; int expect_00_terminators = 0; int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */ int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */ int tagno; /* * Make sure we didn't exceed the maximum stack size. */ if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) RETURN(RC_FAIL); /* * So what does all this implicit skip stuff mean? * Imagine two types, * A ::= [5] IMPLICIT T * B ::= [2] EXPLICIT T * Where T is defined as * T ::= [4] IMPLICIT SEQUENCE { ... } * * Let's say, we are starting to decode type A, given the * following TLV stream: <5> <0>. What does this mean? * It means that the type A contains type T which is, * in turn, empty. * Remember though, that we are still in A. We cannot * just pass control to the type T decoder. Why? Because * the type T decoder expects <4> <0>, not <5> <0>. * So, we must make sure we are going to receive <5> while * still in A, then pass control to the T decoder, indicating * that the tag <4> was implicitly skipped. The decoder of T * hence will be prepared to treat <4> as valid tag, and decode * it appropriately. */ tagno = step /* Continuing where left previously */ + (tag_mode==1?-1:0) ; ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", td->name, (long)size, tag_mode, step, tagno); /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */ if(tag_mode == 0 && tagno == td->tags_count) { /* * This must be the _untagged_ ANY type, * which outermost tag isn't known in advance. * Fetch the tag and length separately. */ tag_len = ber_fetch_tag(ptr, size, &tlv_tag); switch(tag_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } tlv_constr = BER_TLV_CONSTRUCTED(ptr); len_len = ber_fetch_length(tlv_constr, (const char *)ptr + tag_len, size - tag_len, &tlv_len); switch(len_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } ASN_DEBUG("Advancing %ld in ANY case", (long)(tag_len + len_len)); ADVANCE(tag_len + len_len); } else { assert(tagno < td->tags_count); /* At least one loop */ } for((void)tagno; tagno < td->tags_count; tagno++, step++) { /* * Fetch and process T from TLV. */ tag_len = ber_fetch_tag(ptr, size, &tlv_tag); ASN_DEBUG("Fetching tag from {%p,%ld}: " "len %ld, step %d, tagno %d got %s", ptr, (long)size, (long)tag_len, step, tagno, ber_tlv_tag_string(tlv_tag)); switch(tag_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } tlv_constr = BER_TLV_CONSTRUCTED(ptr); /* * If {I}, don't check anything. * If {I,B,C}, check B and C unless we're at I. */ if(tag_mode != 0 && step == 0) { /* * We don't expect tag to match here. * It's just because we don't know how the tag * is supposed to look like. */ } else { assert(tagno >= 0); /* Guaranteed by the code above */ if(tlv_tag != td->tags[tagno]) { /* * Unexpected tag. Too bad. */ ASN_DEBUG("Expected: %s, " "expectation failed (tn=%d, tm=%d)", ber_tlv_tag_string(td->tags[tagno]), tagno, tag_mode ); RETURN(RC_FAIL); } } /* * Attention: if there are more tags expected, * ensure that the current tag is presented * in constructed form (it contains other tags!). * If this one is the last one, check that the tag form * matches the one given in descriptor. */ if(tagno < (td->tags_count - 1)) { if(tlv_constr == 0) { ASN_DEBUG("tlv_constr = %d, expfail", tlv_constr); RETURN(RC_FAIL); } } else { if(last_tag_form != tlv_constr && last_tag_form != -1) { ASN_DEBUG("last_tag_form %d != %d", last_tag_form, tlv_constr); RETURN(RC_FAIL); } } /* * Fetch and process L from TLV. */ len_len = ber_fetch_length(tlv_constr, (const char *)ptr + tag_len, size - tag_len, &tlv_len); ASN_DEBUG("Fetching len = %ld", (long)len_len); switch(len_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); } /* * FIXME * As of today, the chain of tags * must either contain several indefinite length TLVs, * or several definite length ones. * No mixing is allowed. */ if(tlv_len == -1) { /* * Indefinite length. */ if(limit_len == -1) { expect_00_terminators++; } else { ASN_DEBUG("Unexpected indefinite length " "in a chain of definite lengths"); RETURN(RC_FAIL); } ADVANCE(tag_len + len_len); continue; } else { if(expect_00_terminators) { ASN_DEBUG("Unexpected definite length " "in a chain of indefinite lengths"); RETURN(RC_FAIL); } } /* * Check that multiple TLVs specify ever decreasing length, * which is consistent. */ if(limit_len == -1) { limit_len = tlv_len + tag_len + len_len; if(limit_len < 0) { /* Too great tlv_len value? */ RETURN(RC_FAIL); } } else if(limit_len != tlv_len + tag_len + len_len) { /* * Inner TLV specifies length which is inconsistent * with the outer TLV's length value. */ ASN_DEBUG("Outer TLV is %ld and inner is %ld", (long)limit_len, (long)tlv_len); RETURN(RC_FAIL); } ADVANCE(tag_len + len_len); limit_len -= (tag_len + len_len); if((ssize_t)size > limit_len) { /* * Make sure that we won't consume more bytes * from the parent frame than the inferred limit. */ size = limit_len; } } if(opt_tlv_form) *opt_tlv_form = tlv_constr; if(expect_00_terminators) *last_length = -expect_00_terminators; else *last_length = tlv_len; RETURN(RC_OK); } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/ber_decoder.h000066400000000000000000000037771524544274600267530ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BER_DECODER_H_ #define _BER_DECODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ struct asn_codec_ctx_s; /* Forward declaration */ /* * The BER decoder of any type. * This function may be invoked directly from the application. * The der_encode() function (der_encoder.h) is an opposite to ber_decode(). */ asn_dec_rval_t ber_decode(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size /* Size of that buffer */ ); /* * Type of generic function which decodes the byte stream into the structure. */ typedef asn_dec_rval_t (ber_type_decoder_f)( struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, const void *buf_ptr, size_t size, int tag_mode); /******************************* * INTERNALLY USEFUL FUNCTIONS * *******************************/ /* * Check that all tags correspond to the type definition (as given in head). * On return, last_length would contain either a non-negative length of the * value part of the last TLV, or the negative number of expected * "end of content" sequences. The number may only be negative if the * head->last_tag_form is non-zero. */ asn_dec_rval_t ber_check_tags( struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */ struct asn_TYPE_descriptor_s *type_descriptor, asn_struct_ctx_t *opt_ctx, /* saved decoding context */ const void *ptr, size_t size, int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ int last_tag_form, /* {-1,0:1}: any, primitive, constr */ ber_tlv_len_t *last_length, int *opt_tlv_form /* optional tag form */ ); #ifdef __cplusplus } #endif #endif /* _BER_DECODER_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/ber_tlv_length.c000066400000000000000000000073101524544274600274720ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, ber_tlv_len_t *len_r) { const uint8_t *buf = (const uint8_t *)bufptr; unsigned oct; if(size == 0) return 0; /* Want more */ oct = *(const uint8_t *)buf; if((oct & 0x80) == 0) { /* * Short definite length. */ *len_r = oct; /* & 0x7F */ return 1; } else { ber_tlv_len_t len; size_t skipped; if(_is_constructed && oct == 0x80) { *len_r = -1; /* Indefinite length */ return 1; } if(oct == 0xff) { /* Reserved in standard for future use. */ return -1; } oct &= 0x7F; /* Leave only the 7 LS bits */ for(len = 0, buf++, skipped = 1; oct && (++skipped <= size); buf++, oct--) { len = (len << 8) | *buf; if(len < 0 || (len >> ((8 * sizeof(len)) - 8) && oct > 1)) { /* * Too large length value. */ return -1; } } if(oct == 0) { ber_tlv_len_t lenplusepsilon = (size_t)len + 1024; /* * Here length may be very close or equal to 2G. * However, the arithmetics used in some decoders * may add some (small) quantities to the length, * to check the resulting value against some limits. * This may result in integer wrap-around, which * we try to avoid by checking it earlier here. */ if(lenplusepsilon < 0) { /* Too large length value */ return -1; } *len_r = len; return skipped; } return 0; /* Want more */ } } ssize_t ber_skip_length(asn_codec_ctx_t *opt_codec_ctx, int _is_constructed, const void *ptr, size_t size) { ber_tlv_len_t vlen; /* Length of V in TLV */ ssize_t tl; /* Length of L in TLV */ ssize_t ll; /* Length of L in TLV */ size_t skip; /* * Make sure we didn't exceed the maximum stack size. */ if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) return -1; /* * Determine the size of L in TLV. */ ll = ber_fetch_length(_is_constructed, ptr, size, &vlen); if(ll <= 0) return ll; /* * Definite length. */ if(vlen >= 0) { skip = ll + vlen; if(skip > size) return 0; /* Want more */ return skip; } /* * Indefinite length! */ ASN_DEBUG("Skipping indefinite length"); for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) { ber_tlv_tag_t tag; /* Fetch the tag */ tl = ber_fetch_tag(ptr, size, &tag); if(tl <= 0) return tl; ll = ber_skip_length(opt_codec_ctx, BER_TLV_CONSTRUCTED(ptr), ((const char *)ptr) + tl, size - tl); if(ll <= 0) return ll; skip += tl + ll; /* * This may be the end of the indefinite length structure, * two consecutive 0 octets. * Check if it is true. */ if(((const uint8_t *)ptr)[0] == 0 && ((const uint8_t *)ptr)[1] == 0) return skip; ptr = ((const char *)ptr) + tl + ll; size -= tl + ll; } /* UNREACHABLE */ } size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) { size_t required_size; /* Size of len encoding */ uint8_t *buf = (uint8_t *)bufp; uint8_t *end; size_t i; if(len <= 127) { /* Encoded in 1 octet */ if(size) *buf = (uint8_t)len; return 1; } /* * Compute the size of the subsequent bytes. */ for(required_size = 1, i = 8; i < 8 * sizeof(len); i += 8) { if(len >> i) required_size++; else break; } if(size <= required_size) return required_size + 1; *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */ /* * Produce the len encoding, space permitting. */ end = buf + required_size; for(i -= 8; buf < end; i -= 8, buf++) *buf = (uint8_t)(len >> i); return required_size + 1; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/ber_tlv_length.h000066400000000000000000000027751524544274600275110ustar00rootroot00000000000000/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BER_TLV_LENGTH_H_ #define _BER_TLV_LENGTH_H_ #ifdef __cplusplus extern "C" { #endif typedef ssize_t ber_tlv_len_t; /* * This function tries to fetch the length of the BER TLV value and place it * in *len_r. * RETURN VALUES: * 0: More data expected than bufptr contains. * -1: Fatal error deciphering length. * >0: Number of bytes used from bufptr. * On return with >0, len_r is constrained as -1..MAX, where -1 mean * that the value is of indefinite length. */ ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, ber_tlv_len_t *len_r); /* * This function expects bufptr to be positioned over L in TLV. * It returns number of bytes occupied by L and V together, suitable * for skipping. The function properly handles indefinite length. * RETURN VALUES: * Standard {-1,0,>0} convention. */ ssize_t ber_skip_length( struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */ int _is_constructed, const void *bufptr, size_t size); /* * This function serializes the length (L from TLV) in DER format. * It always returns number of bytes necessary to represent the length, * it is a caller's responsibility to check the return value * against the supplied buffer's size. */ size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size); #ifdef __cplusplus } #endif #endif /* _BER_TLV_LENGTH_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/ber_tlv_tag.c000066400000000000000000000061561524544274600267730ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include ssize_t ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { ber_tlv_tag_t val; ber_tlv_tag_t tclass; size_t skipped; if(size == 0) return 0; val = *(const uint8_t *)ptr; tclass = (val >> 6); if((val &= 0x1F) != 0x1F) { /* * Simple form: everything encoded in a single octet. * Tag Class is encoded using two least significant bits. */ *tag_r = (val << 2) | tclass; return 1; } /* * Each octet contains 7 bits of useful information. * The MSB is 0 if it is the last octet of the tag. */ for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; skipped <= size; ptr = ((const char *)ptr) + 1, skipped++) { unsigned int oct = *(const uint8_t *)ptr; if(oct & 0x80) { val = (val << 7) | (oct & 0x7F); /* * Make sure there are at least 9 bits spare * at the MS side of a value. */ if(val >> ((8 * sizeof(val)) - 9)) { /* * We would not be able to accomodate * any more tag bits. */ return -1; } } else { val = (val << 7) | oct; *tag_r = (val << 2) | tclass; return skipped; } } return 0; /* Want more */ } ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { char buf[sizeof("[APPLICATION ]") + 32]; ssize_t ret; ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf)); if(ret >= (ssize_t)sizeof(buf) || ret < 2) { errno = EPERM; return -1; } return fwrite(buf, 1, ret, f); } ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) { char *type = 0; int ret; switch(tag & 0x3) { case ASN_TAG_CLASS_UNIVERSAL: type = "UNIVERSAL "; break; case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION "; break; case ASN_TAG_CLASS_CONTEXT: type = ""; break; case ASN_TAG_CLASS_PRIVATE: type = "PRIVATE "; break; } ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2); if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */ return ret; } char * ber_tlv_tag_string(ber_tlv_tag_t tag) { static char buf[sizeof("[APPLICATION ]") + 32]; (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf)); return buf; } size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) { int tclass = BER_TAG_CLASS(tag); ber_tlv_tag_t tval = BER_TAG_VALUE(tag); uint8_t *buf = (uint8_t *)bufp; uint8_t *end; size_t required_size; size_t i; if(tval <= 30) { /* Encoded in 1 octet */ if(size) buf[0] = (tclass << 6) | tval; return 1; } else if(size) { *buf++ = (tclass << 6) | 0x1F; size--; } /* * Compute the size of the subsequent bytes. */ for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) { if(tval >> i) required_size++; else break; } if(size < required_size) return required_size + 1; /* * Fill in the buffer, space permitting. */ end = buf + required_size - 1; for(i -= 7; buf < end; i -= 7, buf++) *buf = 0x80 | ((tval >> i) & 0x7F); *buf = (tval & 0x7F); /* Last octet without high bit */ return required_size + 1; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/ber_tlv_tag.h000066400000000000000000000034541524544274600267760ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _BER_TLV_TAG_H_ #define _BER_TLV_TAG_H_ #ifdef __cplusplus extern "C" { #endif enum asn_tag_class { ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */ ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */ ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */ ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */ }; typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */ /* * Tag class is encoded together with tag value for optimization purposes. */ #define BER_TAG_CLASS(tag) ((tag) & 0x3) #define BER_TAG_VALUE(tag) ((tag) >> 2) #define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0) #define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2)) /* * Several functions for printing the TAG in the canonical form * (i.e. "[PRIVATE 0]"). * Return values correspond to their libc counterparts (if any). */ ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen); ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *); char *ber_tlv_tag_string(ber_tlv_tag_t tag); /* * This function tries to fetch the tag from the input stream. * RETURN VALUES: * 0: More data expected than bufptr contains. * -1: Fatal error deciphering tag. * >0: Number of bytes used from bufptr. tag_r will contain the tag. */ ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r); /* * This function serializes the tag (T from TLV) in BER format. * It always returns number of bytes necessary to represent the tag, * it is a caller's responsibility to check the return value * against the supplied buffer's size. */ size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size); #ifdef __cplusplus } #endif #endif /* _BER_TLV_TAG_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/constr_CHOICE.c000066400000000000000000000700621524544274600270220ustar00rootroot00000000000000/* * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Number of bytes left for this structure. * (ctx->left) indicates the number of bytes _transferred_ for the structure. * (size) contains the number of bytes in the buffer passed. */ #define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) /* * If the subprocessor function returns with an indication that it wants * more data, it may well be a fatal decoding problem, because the * size is constrained by the 's L, even if the buffer size allows * reading more data. * For example, consider the buffer containing the following TLVs: * ... * The TLV length clearly indicates that one byte is expected in V, but * if the V processor returns with "want more data" even if the buffer * contains way more data than the V processor have seen. */ #define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) /* * This macro "eats" the part of the buffer which is definitely "consumed", * i.e. was correctly converted into local representation or rightfully skipped. */ #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ ptr = ((const char *)ptr) + num;\ size -= num; \ if(ctx->left >= 0) \ ctx->left -= num; \ consumed_myself += num; \ } while(0) /* * Switch to the next phase of parsing. */ #undef NEXT_PHASE #define NEXT_PHASE(ctx) do { \ ctx->phase++; \ ctx->step = 0; \ } while(0) /* * Return a standardized complex structure. */ #undef RETURN #define RETURN(_code) do { \ rval.code = _code; \ rval.consumed = consumed_myself;\ return rval; \ } while(0) /* * See the definitions. */ static int _fetch_present_idx(const void *struct_ptr, int off, int size); static void _set_present_idx(void *sptr, int offset, int size, int pres); /* * Tags are canonically sorted in the tag to member table. */ static int _search4tag(const void *ap, const void *bp) { const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; int a_class = BER_TAG_CLASS(a->el_tag); int b_class = BER_TAG_CLASS(b->el_tag); if(a_class == b_class) { ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); if(a_value == b_value) return 0; else if(a_value < b_value) return -1; else return 1; } else if(a_class < b_class) { return -1; } else { return 1; } } /* * The decoder of the CHOICE type. */ asn_dec_rval_t CHOICE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const void *ptr, size_t size, int tag_mode) { /* * Bring closer parts of structure description. */ asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; asn_TYPE_member_t *elements = td->elements; /* * Parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ ber_tlv_tag_t tlv_tag; /* T from TLV */ ssize_t tag_len; /* Length of TLV's T */ asn_dec_rval_t rval; /* Return code from subparsers */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ ASN_DEBUG("Decoding %s as CHOICE", td->name); /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) { RETURN(RC_FAIL); } } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Start to parse where left previously */ switch(ctx->phase) { case 0: /* * PHASE 0. * Check that the set of tags associated with given structure * perfectly fits our expectations. */ if(tag_mode || td->tags_count) { rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, tag_mode, -1, &ctx->left, 0); if(rval.code != RC_OK) { ASN_DEBUG("%s tagging check failed: %d", td->name, rval.code); return rval; } if(ctx->left >= 0) { /* ?Substracted below! */ ctx->left += rval.consumed; } ADVANCE(rval.consumed); } else { ctx->left = -1; } NEXT_PHASE(ctx); ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", (long)ctx->left, (long)size); /* Fall through */ case 1: /* * Fetch the T from TLV. */ tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len); switch(tag_len) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } do { const asn_TYPE_tag2member_t *t2m; asn_TYPE_tag2member_t key; key.el_tag = tlv_tag; t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, specs->tag2el, specs->tag2el_count, sizeof(specs->tag2el[0]), _search4tag); if(t2m) { /* * Found the element corresponding to the tag. */ NEXT_PHASE(ctx); ctx->step = t2m->el_no; break; } else if(specs->ext_start == -1) { ASN_DEBUG("Unexpected tag %s " "in non-extensible CHOICE %s", ber_tlv_tag_string(tlv_tag), td->name); RETURN(RC_FAIL); } else { /* Skip this tag */ ssize_t skip; ASN_DEBUG("Skipping unknown tag %s", ber_tlv_tag_string(tlv_tag)); skip = ber_skip_length(opt_codec_ctx, BER_TLV_CONSTRUCTED(ptr), (const char *)ptr + tag_len, LEFT - tag_len); switch(skip) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } ADVANCE(skip + tag_len); RETURN(RC_OK); } } while(0); case 2: /* * PHASE 2. * Read in the element. */ do { asn_TYPE_member_t *elm;/* CHOICE's element */ void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ elm = &elements[ctx->step]; /* * Compute the position of the member inside a structure, * and also a type of containment (it may be contained * as pointer or using inline inclusion). */ if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { /* * A pointer to a pointer * holding the start of the structure */ memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } /* Set presence to be able to free it properly at any time */ _set_present_idx(st, specs->pres_offset, specs->pres_size, ctx->step + 1); /* * Invoke the member fetch routine according to member's type */ rval = elm->type->ber_decoder(opt_codec_ctx, elm->type, memb_ptr2, ptr, LEFT, elm->tag_mode); switch(rval.code) { case RC_OK: break; case RC_WMORE: /* More data expected */ if(!SIZE_VIOLATION) { ADVANCE(rval.consumed); RETURN(RC_WMORE); } RETURN(RC_FAIL); case RC_FAIL: /* Fatal error */ RETURN(rval.code); } /* switch(rval) */ ADVANCE(rval.consumed); } while(0); NEXT_PHASE(ctx); /* Fall through */ case 3: ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d", td->name, (long)ctx->left, (long)size, tag_mode, td->tags_count); if(ctx->left > 0) { /* * The type must be fully decoded * by the CHOICE member-specific decoder. */ RETURN(RC_FAIL); } if(ctx->left == -1 && !(tag_mode || td->tags_count)) { /* * This is an untagged CHOICE. * It doesn't contain nothing * except for the member itself, including all its tags. * The decoding is completed. */ NEXT_PHASE(ctx); break; } /* * Read in the "end of data chunks"'s. */ while(ctx->left < 0) { ssize_t tl; tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); switch(tl) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } /* * Expected <0><0>... */ if(((const uint8_t *)ptr)[0] == 0) { if(LEFT < 2) { if(SIZE_VIOLATION) RETURN(RC_FAIL); else RETURN(RC_WMORE); } else if(((const uint8_t *)ptr)[1] == 0) { /* * Correctly finished with <0><0>. */ ADVANCE(2); ctx->left++; continue; } } else { ASN_DEBUG("Unexpected continuation in %s", td->name); RETURN(RC_FAIL); } /* UNREACHABLE */ } NEXT_PHASE(ctx); case 4: /* No meaningful work here */ break; } RETURN(RC_OK); } asn_enc_rval_t CHOICE_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; asn_TYPE_member_t *elm; /* CHOICE element */ asn_enc_rval_t erval; void *memb_ptr; size_t computed_size = 0; int present; if(!sptr) ASN__ENCODE_FAILED; ASN_DEBUG("%s %s as CHOICE", cb?"Encoding":"Estimating", td->name); present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); /* * If the structure was not initialized, it cannot be encoded: * can't deduce what to encode in the choice type. */ if(present <= 0 || present > td->elements_count) { if(present == 0 && td->elements_count == 0) { /* The CHOICE is empty?! */ erval.encoded = 0; ASN__ENCODED_OK(erval); } ASN__ENCODE_FAILED; } /* * Seek over the present member of the structure. */ elm = &td->elements[present-1]; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(memb_ptr == 0) { if(elm->optional) { erval.encoded = 0; ASN__ENCODED_OK(erval); } /* Mandatory element absent */ ASN__ENCODE_FAILED; } } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } /* * If the CHOICE itself is tagged EXPLICIT: * T ::= [2] EXPLICIT CHOICE { ... } * Then emit the appropriate tags. */ if(tag_mode == 1 || td->tags_count) { /* * For this, we need to pre-compute the member. */ ssize_t ret; /* Encode member with its tag */ erval = elm->type->der_encoder(elm->type, memb_ptr, elm->tag_mode, elm->tag, 0, 0); if(erval.encoded == -1) return erval; /* Encode CHOICE with parent or my own tag */ ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag, cb, app_key); if(ret == -1) ASN__ENCODE_FAILED; computed_size += ret; } /* * Encode the single underlying member. */ erval = elm->type->der_encoder(elm->type, memb_ptr, elm->tag_mode, elm->tag, cb, app_key); if(erval.encoded == -1) return erval; ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)", (long)erval.encoded, (long)computed_size); erval.encoded += computed_size; return erval; } ber_tlv_tag_t CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; assert(tag_mode == 0); (void)tag_mode; assert(tag == 0); (void)tag; /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); if(present > 0 || present <= td->elements_count) { const asn_TYPE_member_t *elm = &td->elements[present-1]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *) ((const char *)ptr + elm->memb_offset); } else { memb_ptr = (const void *) ((const char *)ptr + elm->memb_offset); } return asn_TYPE_outmost_tag(elm->type, memb_ptr, elm->tag_mode, elm->tag); } else { return (ber_tlv_tag_t)-1; } } int CHOICE_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; if(!sptr) { ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); if(present > 0 && present <= td->elements_count) { asn_TYPE_member_t *elm = &td->elements[present-1]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) return 0; ASN__CTFAIL(app_key, td, sptr, "%s: mandatory CHOICE element %s absent (%s:%d)", td->name, elm->name, __FILE__, __LINE__); return -1; } } else { memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); } if(elm->memb_constraints) { return elm->memb_constraints(elm->type, memb_ptr, ctfailcb, app_key); } else { int ret = elm->type->check_constraints(elm->type, memb_ptr, ctfailcb, app_key); /* * Cannot inherit it eralier: * need to make sure we get the updated version. */ elm->memb_constraints = elm->type->check_constraints; return ret; } } else { ASN__CTFAIL(app_key, td, sptr, "%s: no CHOICE element given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } } #undef XER_ADVANCE #define XER_ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ buf_ptr = (const void *)(((const char *)buf_ptr) + num); \ size -= num; \ consumed_myself += num; \ } while(0) /* * Decode the XER (XML) data. */ asn_dec_rval_t CHOICE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const char *opt_mname, const void *buf_ptr, size_t size) { /* * Bring closer parts of structure description. */ asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; /* * Parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ asn_dec_rval_t rval; /* Return value of a decoder */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ int edx; /* Element index */ /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) RETURN(RC_FAIL); } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); if(ctx->phase == 0 && !*xml_tag) ctx->phase = 1; /* Skip the outer tag checking phase */ /* * Phases of XER/XML processing: * Phase 0: Check that the opening tag matches our expectations. * Phase 1: Processing body and reacting on closing tag. * Phase 2: Processing inner type. * Phase 3: Only waiting for closing tag. * Phase 4: Skipping unknown extensions. * Phase 5: PHASED OUT */ for(edx = ctx->step; ctx->phase <= 4;) { pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ asn_TYPE_member_t *elm; /* * Go inside the member. */ if(ctx->phase == 2) { asn_dec_rval_t tmprval; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ elm = &td->elements[edx]; if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } /* Start/Continue decoding the inner member */ tmprval = elm->type->xer_decoder(opt_codec_ctx, elm->type, memb_ptr2, elm->name, buf_ptr, size); XER_ADVANCE(tmprval.consumed); ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d", elm->type->name, tmprval.code); if(tmprval.code != RC_OK) RETURN(tmprval.code); assert(_fetch_present_idx(st, specs->pres_offset, specs->pres_size) == 0); /* Record what we've got */ _set_present_idx(st, specs->pres_offset, specs->pres_size, edx + 1); ctx->phase = 3; /* Fall through */ } /* No need to wait for closing tag; special mode. */ if(ctx->phase == 3 && !*xml_tag) { ctx->phase = 5; /* Phase out */ RETURN(RC_OK); } /* * Get the next part of the XML stream. */ ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); if(ch_size == -1) { RETURN(RC_FAIL); } else { switch(ch_type) { case PXER_WMORE: RETURN(RC_WMORE); case PXER_COMMENT: /* Got XML comment */ case PXER_TEXT: /* Ignore free-standing text */ XER_ADVANCE(ch_size); /* Skip silently */ continue; case PXER_TAG: break; /* Check the rest down there */ } } tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d", ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', xml_tag, tcv); /* Skip the extensions section */ if(ctx->phase == 4) { ASN_DEBUG("skip_unknown(%d, %ld)", tcv, (long)ctx->left); switch(xer_skip_unknown(tcv, &ctx->left)) { case -1: ctx->phase = 5; RETURN(RC_FAIL); continue; case 1: ctx->phase = 3; /* Fall through */ case 0: XER_ADVANCE(ch_size); continue; case 2: ctx->phase = 3; break; } } switch(tcv) { case XCT_BOTH: break; /* No CHOICE? */ case XCT_CLOSING: if(ctx->phase != 3) break; XER_ADVANCE(ch_size); ctx->phase = 5; /* Phase out */ RETURN(RC_OK); case XCT_OPENING: if(ctx->phase == 0) { XER_ADVANCE(ch_size); ctx->phase = 1; /* Processing body phase */ continue; } /* Fall through */ case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: if(ctx->phase != 1) break; /* Really unexpected */ /* * Search which inner member corresponds to this tag. */ for(edx = 0; edx < td->elements_count; edx++) { elm = &td->elements[edx]; tcv = xer_check_tag(buf_ptr,ch_size,elm->name); switch(tcv) { case XCT_BOTH: case XCT_OPENING: /* * Process this member. */ ctx->step = edx; ctx->phase = 2; break; case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: continue; default: edx = td->elements_count; break; /* Phase out */ } break; } if(edx != td->elements_count) continue; /* It is expected extension */ if(specs->ext_start != -1) { ASN_DEBUG("Got anticipated extension"); /* * Check for (XCT_BOTH or XCT_UNKNOWN_BO) * By using a mask. Only record a pure * tags. */ if(tcv & XCT_CLOSING) { /* Found without body */ ctx->phase = 3; /* Terminating */ } else { ctx->left = 1; ctx->phase = 4; /* Skip ...'s */ } XER_ADVANCE(ch_size); continue; } /* Fall through */ default: break; } ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]" " (ph=%d, tag=%s)", ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', td->name, ctx->phase, xml_tag); break; } ctx->phase = 5; /* Phase out, just in case */ RETURN(RC_FAIL); } asn_enc_rval_t CHOICE_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_CHOICE_specifics_t *specs=(asn_CHOICE_specifics_t *)td->specifics; asn_enc_rval_t er; int present; if(!sptr) ASN__ENCODE_FAILED; /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); if(present <= 0 || present > td->elements_count) { ASN__ENCODE_FAILED; } else { asn_enc_rval_t tmper; asn_TYPE_member_t *elm = &td->elements[present-1]; void *memb_ptr; const char *mname = elm->name; unsigned int mlen = strlen(mname); if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) ASN__ENCODE_FAILED; } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } er.encoded = 0; if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel); ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); tmper = elm->type->xer_encoder(elm->type, memb_ptr, ilevel + 1, flags, cb, app_key); if(tmper.encoded == -1) return tmper; ASN__CALLBACK3("", 1); er.encoded += 5 + (2 * mlen) + tmper.encoded; } if(!(flags & XER_F_CANONICAL)) ASN__TEXT_INDENT(1, ilevel - 1); ASN__ENCODED_OK(er); cb_failed: ASN__ENCODE_FAILED; } asn_dec_rval_t CHOICE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; asn_dec_rval_t rv; asn_per_constraint_t *ct; asn_TYPE_member_t *elm; /* CHOICE's element */ void *memb_ptr; void **memb_ptr2; void *st = *sptr; int value; if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) ASN__DECODE_FAILED; /* * Create the target structure if it is not present already. */ if(!st) { st = *sptr = CALLOC(1, specs->struct_size); if(!st) ASN__DECODE_FAILED; } if(constraints) ct = &constraints->value; else if(td->per_constraints) ct = &td->per_constraints->value; else ct = 0; if(ct && ct->flags & APC_EXTENSIBLE) { value = per_get_few_bits(pd, 1); if(value < 0) ASN__DECODE_STARVED; if(value) ct = 0; /* Not restricted */ } if(ct && ct->range_bits >= 0) { value = per_get_few_bits(pd, ct->range_bits); if(value < 0) ASN__DECODE_STARVED; ASN_DEBUG("CHOICE %s got index %d in range %d", td->name, value, ct->range_bits); if(value > ct->upper_bound) ASN__DECODE_FAILED; } else { if(specs->ext_start == -1) ASN__DECODE_FAILED; value = uper_get_nsnnwn(pd); if(value < 0) ASN__DECODE_STARVED; value += specs->ext_start; if(value >= td->elements_count) ASN__DECODE_FAILED; } /* Adjust if canonical order is different from natural order */ if(specs->canonical_order) value = specs->canonical_order[value]; /* Set presence to be able to free it later */ _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); elm = &td->elements[value]; if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); if(ct && ct->range_bits >= 0) { rv = elm->type->uper_decoder(opt_codec_ctx, elm->type, elm->per_constraints, memb_ptr2, pd); } else { rv = uper_open_type_get(opt_codec_ctx, elm->type, elm->per_constraints, memb_ptr2, pd); } if(rv.code != RC_OK) ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", elm->name, td->name, rv.code); return rv; } asn_enc_rval_t CHOICE_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; asn_TYPE_member_t *elm; /* CHOICE's element */ asn_per_constraint_t *ct; void *memb_ptr; int present; int present_enc; if(!sptr) ASN__ENCODE_FAILED; ASN_DEBUG("Encoding %s as CHOICE", td->name); if(constraints) ct = &constraints->value; else if(td->per_constraints) ct = &td->per_constraints->value; else ct = 0; present = _fetch_present_idx(sptr, specs->pres_offset, specs->pres_size); /* * If the structure was not initialized properly, it cannot be encoded: * can't deduce what to encode in the choice type. */ if(present <= 0 || present > td->elements_count) ASN__ENCODE_FAILED; else present--; ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); /* Adjust if canonical order is different from natural order */ if(specs->canonical_order) present_enc = specs->canonical_order[present]; else present_enc = present; if(ct && ct->range_bits >= 0) { if(present_enc < ct->lower_bound || present_enc > ct->upper_bound) { if(ct->flags & APC_EXTENSIBLE) { if(per_put_few_bits(po, 1, 1)) ASN__ENCODE_FAILED; } else { ASN__ENCODE_FAILED; } ct = 0; } } if(ct && ct->flags & APC_EXTENSIBLE) if(per_put_few_bits(po, 0, 1)) ASN__ENCODE_FAILED; elm = &td->elements[present]; if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) ASN__ENCODE_FAILED; } else { memb_ptr = (char *)sptr + elm->memb_offset; } if(ct && ct->range_bits >= 0) { if(per_put_few_bits(po, present_enc, ct->range_bits)) ASN__ENCODE_FAILED; return elm->type->uper_encoder(elm->type, elm->per_constraints, memb_ptr, po); } else { asn_enc_rval_t rval; if(specs->ext_start == -1) ASN__ENCODE_FAILED; if(uper_put_nsnnwn(po, present_enc - specs->ext_start)) ASN__ENCODE_FAILED; if(uper_open_type_put(elm->type, elm->per_constraints, memb_ptr, po)) ASN__ENCODE_FAILED; rval.encoded = 0; ASN__ENCODED_OK(rval); } } int CHOICE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); /* * Print that element. */ if(present > 0 && present <= td->elements_count) { asn_TYPE_member_t *elm = &td->elements[present-1]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0; } else { memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); } /* Print member's name and stuff */ if(0) { if(cb(elm->name, strlen(elm->name), app_key) < 0 || cb(": ", 2, app_key) < 0) return -1; } return elm->type->print_struct(elm->type, memb_ptr, ilevel, cb, app_key); } else { return (cb("", 8, app_key) < 0) ? -1 : 0; } } void CHOICE_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; if(!td || !ptr) return; ASN_DEBUG("Freeing %s as CHOICE", td->name); /* * Figure out which CHOICE element is encoded. */ present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); /* * Free that element. */ if(present > 0 && present <= td->elements_count) { asn_TYPE_member_t *elm = &td->elements[present-1]; void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)ptr + elm->memb_offset); if(memb_ptr) ASN_STRUCT_FREE(*elm->type, memb_ptr); } else { memb_ptr = (void *)((char *)ptr + elm->memb_offset); ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); } } if(!contents_only) { FREEMEM(ptr); } } /* * The following functions functions offer protection against -fshort-enums, * compatible with little- and big-endian machines. * If assertion is triggered, either disable -fshort-enums, or add an entry * here with the ->pres_size of your target stracture. * Unless the target structure is packed, the ".present" member * is guaranteed to be aligned properly. ASN.1 compiler itself does not * produce packed code. */ static int _fetch_present_idx(const void *struct_ptr, int pres_offset, int pres_size) { const void *present_ptr; int present; present_ptr = ((const char *)struct_ptr) + pres_offset; switch(pres_size) { case sizeof(int): present = *(const int *)present_ptr; break; case sizeof(short): present = *(const short *)present_ptr; break; case sizeof(char): present = *(const char *)present_ptr; break; default: /* ANSI C mandates enum to be equivalent to integer */ assert(pres_size != sizeof(int)); return 0; /* If not aborted, pass back safe value */ } return present; } static void _set_present_idx(void *struct_ptr, int pres_offset, int pres_size, int present) { void *present_ptr; present_ptr = ((char *)struct_ptr) + pres_offset; switch(pres_size) { case sizeof(int): *(int *)present_ptr = present; break; case sizeof(short): *(short *)present_ptr = present; break; case sizeof(char): *(char *)present_ptr = present; break; default: /* ANSI C mandates enum to be equivalent to integer */ assert(pres_size != sizeof(int)); } } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/constr_CHOICE.h000066400000000000000000000026021524544274600270220ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_CHOICE_H_ #define _CONSTR_CHOICE_H_ #include #ifdef __cplusplus extern "C" { #endif typedef const struct asn_CHOICE_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the target structure. */ int ctx_offset; /* Offset of the asn_codec_ctx_t member */ int pres_offset; /* Identifier of the present member */ int pres_size; /* Size of the identifier (enum) */ /* * Tags to members mapping table. */ const asn_TYPE_tag2member_t *tag2el; int tag2el_count; /* Canonical ordering of CHOICE elements, for PER */ int *canonical_order; /* * Extensions-related stuff. */ int ext_start; /* First member of extensions, or -1 */ } asn_CHOICE_specifics_t; /* * A set specialized functions dealing with the CHOICE type. */ asn_struct_free_f CHOICE_free; asn_struct_print_f CHOICE_print; asn_constr_check_f CHOICE_constraint; ber_type_decoder_f CHOICE_decode_ber; der_type_encoder_f CHOICE_encode_der; xer_type_decoder_f CHOICE_decode_xer; xer_type_encoder_f CHOICE_encode_xer; per_type_decoder_f CHOICE_decode_uper; per_type_encoder_f CHOICE_encode_uper; asn_outmost_tag_f CHOICE_outmost_tag; #ifdef __cplusplus } #endif #endif /* _CONSTR_CHOICE_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/constr_SEQUENCE.c000066400000000000000000001073721524544274600273050ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Number of bytes left for this structure. * (ctx->left) indicates the number of bytes _transferred_ for the structure. * (size) contains the number of bytes in the buffer passed. */ #define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) /* * If the subprocessor function returns with an indication that it wants * more data, it may well be a fatal decoding problem, because the * size is constrained by the 's L, even if the buffer size allows * reading more data. * For example, consider the buffer containing the following TLVs: * ... * The TLV length clearly indicates that one byte is expected in V, but * if the V processor returns with "want more data" even if the buffer * contains way more data than the V processor have seen. */ #define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) /* * This macro "eats" the part of the buffer which is definitely "consumed", * i.e. was correctly converted into local representation or rightfully skipped. */ #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ ptr = ((const char *)ptr) + num; \ size -= num; \ if(ctx->left >= 0) \ ctx->left -= num; \ consumed_myself += num; \ } while(0) /* * Switch to the next phase of parsing. */ #undef NEXT_PHASE #undef PHASE_OUT #define NEXT_PHASE(ctx) do { \ ctx->phase++; \ ctx->step = 0; \ } while(0) #define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) /* * Return a standardized complex structure. */ #undef RETURN #define RETURN(_code) do { \ rval.code = _code; \ rval.consumed = consumed_myself;\ return rval; \ } while(0) /* * Check whether we are inside the extensions group. */ #define IN_EXTENSION_GROUP(specs, memb_idx) \ ( ((memb_idx) > (specs)->ext_after) \ &&((memb_idx) < (specs)->ext_before)) /* * Tags are canonically sorted in the tag2element map. */ static int _t2e_cmp(const void *ap, const void *bp) { const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; int a_class = BER_TAG_CLASS(a->el_tag); int b_class = BER_TAG_CLASS(b->el_tag); if(a_class == b_class) { ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); if(a_value == b_value) { if(a->el_no > b->el_no) return 1; /* * Important: we do not check * for a->el_no <= b->el_no! */ return 0; } else if(a_value < b_value) return -1; else return 1; } else if(a_class < b_class) { return -1; } else { return 1; } } /* * The decoder of the SEQUENCE type. */ asn_dec_rval_t SEQUENCE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const void *ptr, size_t size, int tag_mode) { /* * Bring closer parts of structure description. */ asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; asn_TYPE_member_t *elements = td->elements; /* * Parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ ber_tlv_tag_t tlv_tag; /* T from TLV */ asn_dec_rval_t rval; /* Return code from subparsers */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ int edx; /* SEQUENCE element's index */ ASN_DEBUG("Decoding %s as SEQUENCE", td->name); /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) { RETURN(RC_FAIL); } } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Start to parse where left previously */ switch(ctx->phase) { case 0: /* * PHASE 0. * Check that the set of tags associated with given structure * perfectly fits our expectations. */ rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, tag_mode, 1, &ctx->left, 0); if(rval.code != RC_OK) { ASN_DEBUG("%s tagging check failed: %d", td->name, rval.code); return rval; } if(ctx->left >= 0) ctx->left += rval.consumed; /* ?Substracted below! */ ADVANCE(rval.consumed); NEXT_PHASE(ctx); ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", (long)ctx->left, (long)size); /* Fall through */ case 1: /* * PHASE 1. * From the place where we've left it previously, * try to decode the next member from the list of * this structure's elements. * (ctx->step) stores the member being processed * between invocations and the microphase {0,1} of parsing * that member: * step = ( * 2 + ). */ for(edx = (ctx->step >> 1); edx < td->elements_count; edx++, ctx->step = (ctx->step & ~1) + 2) { void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ ssize_t tag_len; /* Length of TLV's T */ int opt_edx_end; /* Next non-optional element */ int use_bsearch; int n; if(ctx->step & 1) goto microphase2; /* * MICROPHASE 1: Synchronize decoding. */ ASN_DEBUG("In %s SEQUENCE left %d, edx=%d flags=%d" " opt=%d ec=%d", td->name, (int)ctx->left, edx, elements[edx].flags, elements[edx].optional, td->elements_count); if(ctx->left == 0 /* No more stuff is expected */ && ( /* Explicit OPTIONAL specification reaches the end */ (edx + elements[edx].optional == td->elements_count) || /* All extensions are optional */ (IN_EXTENSION_GROUP(specs, edx) && specs->ext_before > td->elements_count) ) ) { ASN_DEBUG("End of SEQUENCE %s", td->name); /* * Found the legitimate end of the structure. */ PHASE_OUT(ctx); RETURN(RC_OK); } /* * Fetch the T from TLV. */ tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); ASN_DEBUG("Current tag in %s SEQUENCE for element %d " "(%s) is %s encoded in %d bytes, of frame %ld", td->name, edx, elements[edx].name, ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); switch(tag_len) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { if(LEFT < 2) { if(SIZE_VIOLATION) RETURN(RC_FAIL); else RETURN(RC_WMORE); } else if(((const uint8_t *)ptr)[1] == 0) { ASN_DEBUG("edx = %d, opt = %d, ec=%d", edx, elements[edx].optional, td->elements_count); if((edx + elements[edx].optional == td->elements_count) || (IN_EXTENSION_GROUP(specs, edx) && specs->ext_before > td->elements_count)) { /* * Yeah, baby! Found the terminator * of the indefinite length structure. */ /* * Proceed to the canonical * finalization function. * No advancing is necessary. */ goto phase3; } } } /* * Find the next available type with this tag. */ use_bsearch = 0; opt_edx_end = edx + elements[edx].optional + 1; if(opt_edx_end > td->elements_count) opt_edx_end = td->elements_count; /* Cap */ else if(opt_edx_end - edx > 8) { /* Limit the scope of linear search... */ opt_edx_end = edx + 8; use_bsearch = 1; /* ... and resort to bsearch() */ } for(n = edx; n < opt_edx_end; n++) { if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) { /* * Found element corresponding to the tag * being looked at. * Reposition over the right element. */ edx = n; ctx->step = 1 + 2 * edx; /* Remember! */ goto microphase2; } else if(elements[n].flags & ATF_OPEN_TYPE) { /* * This is the ANY type, which may bear * any flag whatsoever. */ edx = n; ctx->step = 1 + 2 * edx; /* Remember! */ goto microphase2; } else if(elements[n].tag == (ber_tlv_tag_t)-1) { use_bsearch = 1; break; } } if(use_bsearch) { /* * Resort to a binary search over * sorted array of tags. */ const asn_TYPE_tag2member_t *t2m; asn_TYPE_tag2member_t key; key.el_tag = tlv_tag; key.el_no = edx; t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, specs->tag2el, specs->tag2el_count, sizeof(specs->tag2el[0]), _t2e_cmp); if(t2m) { const asn_TYPE_tag2member_t *best = 0; const asn_TYPE_tag2member_t *t2m_f, *t2m_l; int edx_max = edx + elements[edx].optional; /* * Rewind to the first element with that tag, * `cause bsearch() does not guarantee order. */ t2m_f = t2m + t2m->toff_first; t2m_l = t2m + t2m->toff_last; for(t2m = t2m_f; t2m <= t2m_l; t2m++) { if(t2m->el_no > edx_max) break; if(t2m->el_no < edx) continue; best = t2m; } if(best) { edx = best->el_no; ctx->step = 1 + 2 * edx; goto microphase2; } } n = opt_edx_end; } if(n == opt_edx_end) { /* * If tag is unknown, it may be either * an unknown (thus, incorrect) tag, * or an extension (...), * or an end of the indefinite-length structure. */ if(!IN_EXTENSION_GROUP(specs, edx + elements[edx].optional)) { ASN_DEBUG("Unexpected tag %s (at %d)", ber_tlv_tag_string(tlv_tag), edx); ASN_DEBUG("Expected tag %s (%s)%s", ber_tlv_tag_string(elements[edx].tag), elements[edx].name, elements[edx].optional ?" or alternatives":""); RETURN(RC_FAIL); } else { /* Skip this tag */ ssize_t skip; edx += elements[edx].optional; ASN_DEBUG("Skipping unexpected %s (at %d)", ber_tlv_tag_string(tlv_tag), edx); skip = ber_skip_length(opt_codec_ctx, BER_TLV_CONSTRUCTED(ptr), (const char *)ptr + tag_len, LEFT - tag_len); ASN_DEBUG("Skip length %d in %s", (int)skip, td->name); switch(skip) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } ADVANCE(skip + tag_len); ctx->step -= 2; edx--; continue; /* Try again with the next tag */ } } /* * MICROPHASE 2: Invoke the member-specific decoder. */ ctx->step |= 1; /* Confirm entering next microphase */ microphase2: ASN_DEBUG("Inside SEQUENCE %s MF2", td->name); /* * Compute the position of the member inside a structure, * and also a type of containment (it may be contained * as pointer or using inline inclusion). */ if(elements[edx].flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); } else { /* * A pointer to a pointer * holding the start of the structure */ memb_ptr = (char *)st + elements[edx].memb_offset; memb_ptr2 = &memb_ptr; } /* * Invoke the member fetch routine according to member's type */ rval = elements[edx].type->ber_decoder(opt_codec_ctx, elements[edx].type, memb_ptr2, ptr, LEFT, elements[edx].tag_mode); ASN_DEBUG("In %s SEQUENCE decoded %d %s of %d " "in %d bytes rval.code %d, size=%d", td->name, edx, elements[edx].type->name, (int)LEFT, (int)rval.consumed, rval.code, (int)size); switch(rval.code) { case RC_OK: break; case RC_WMORE: /* More data expected */ if(!SIZE_VIOLATION) { ADVANCE(rval.consumed); RETURN(RC_WMORE); } ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)", (long)ctx->left, (long)size); /* Fall through */ case RC_FAIL: /* Fatal error */ RETURN(RC_FAIL); } /* switch(rval) */ ADVANCE(rval.consumed); } /* for(all structure members) */ phase3: ctx->phase = 3; case 3: /* 00 and other tags expected */ case 4: /* only 00's expected */ ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld", td->name, (long)ctx->left, (long)size); /* * Skip everything until the end of the SEQUENCE. */ while(ctx->left) { ssize_t tl, ll; tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); switch(tl) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } /* * If expected <0><0>... */ if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { if(LEFT < 2) { if(SIZE_VIOLATION) RETURN(RC_FAIL); else RETURN(RC_WMORE); } else if(((const uint8_t *)ptr)[1] == 0) { /* * Correctly finished with <0><0>. */ ADVANCE(2); ctx->left++; ctx->phase = 4; continue; } } if(!IN_EXTENSION_GROUP(specs, td->elements_count) || ctx->phase == 4) { ASN_DEBUG("Unexpected continuation " "of a non-extensible type " "%s (SEQUENCE): %s", td->name, ber_tlv_tag_string(tlv_tag)); RETURN(RC_FAIL); } ll = ber_skip_length(opt_codec_ctx, BER_TLV_CONSTRUCTED(ptr), (const char *)ptr + tl, LEFT - tl); switch(ll) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } ADVANCE(tl + ll); } PHASE_OUT(ctx); } RETURN(RC_OK); } /* * The DER encoder of the SEQUENCE type. */ asn_enc_rval_t SEQUENCE_encode_der(asn_TYPE_descriptor_t *td, void *sptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { size_t computed_size = 0; asn_enc_rval_t erval; ssize_t ret; int edx; ASN_DEBUG("%s %s as SEQUENCE", cb?"Encoding":"Estimating", td->name); /* * Gather the length of the underlying members sequence. */ for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) continue; /* Mandatory element is missing */ ASN__ENCODE_FAILED; } } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } erval = elm->type->der_encoder(elm->type, memb_ptr, elm->tag_mode, elm->tag, 0, 0); if(erval.encoded == -1) return erval; computed_size += erval.encoded; ASN_DEBUG("Member %d %s estimated %ld bytes", edx, elm->name, (long)erval.encoded); } /* * Encode the TLV for the sequence itself. */ ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size); if(ret == -1) ASN__ENCODE_FAILED; erval.encoded = computed_size + ret; if(!cb) ASN__ENCODED_OK(erval); /* * Encode all members. */ for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; asn_enc_rval_t tmperval; void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) continue; } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } tmperval = elm->type->der_encoder(elm->type, memb_ptr, elm->tag_mode, elm->tag, cb, app_key); if(tmperval.encoded == -1) return tmperval; computed_size -= tmperval.encoded; ASN_DEBUG("Member %d %s of SEQUENCE %s encoded in %ld bytes", edx, elm->name, td->name, (long)tmperval.encoded); } if(computed_size != 0) /* * Encoded size is not equal to the computed size. */ ASN__ENCODE_FAILED; ASN__ENCODED_OK(erval); } #undef XER_ADVANCE #define XER_ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ buf_ptr = ((const char *)buf_ptr) + num;\ size -= num; \ consumed_myself += num; \ } while(0) /* * Decode the XER (XML) data. */ asn_dec_rval_t SEQUENCE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const char *opt_mname, const void *buf_ptr, size_t size) { /* * Bring closer parts of structure description. */ asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; asn_TYPE_member_t *elements = td->elements; const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; /* * ... and parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ asn_dec_rval_t rval; /* Return value from a decoder */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ int edx; /* Element index */ int edx_end; /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) RETURN(RC_FAIL); } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Phases of XER/XML processing: * Phase 0: Check that the opening tag matches our expectations. * Phase 1: Processing body and reacting on closing tag. * Phase 2: Processing inner type. * Phase 3: Skipping unknown extensions. * Phase 4: PHASED OUT */ for(edx = ctx->step; ctx->phase <= 3;) { pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ asn_TYPE_member_t *elm; int n; /* * Go inside the inner member of a sequence. */ if(ctx->phase == 2) { asn_dec_rval_t tmprval; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ elm = &td->elements[edx]; if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } /* Invoke the inner type decoder, m.b. multiple times */ tmprval = elm->type->xer_decoder(opt_codec_ctx, elm->type, memb_ptr2, elm->name, buf_ptr, size); XER_ADVANCE(tmprval.consumed); if(tmprval.code != RC_OK) RETURN(tmprval.code); ctx->phase = 1; /* Back to body processing */ ctx->step = ++edx; ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d", ctx->phase, ctx->step); /* Fall through */ } /* * Get the next part of the XML stream. */ ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); if(ch_size == -1) { RETURN(RC_FAIL); } else { switch(ch_type) { case PXER_WMORE: RETURN(RC_WMORE); case PXER_COMMENT: /* Got XML comment */ case PXER_TEXT: /* Ignore free-standing text */ XER_ADVANCE(ch_size); /* Skip silently */ continue; case PXER_TAG: break; /* Check the rest down there */ } } tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]", tcv, ctx->phase, xml_tag); /* Skip the extensions section */ if(ctx->phase == 3) { switch(xer_skip_unknown(tcv, &ctx->left)) { case -1: ctx->phase = 4; RETURN(RC_FAIL); case 0: XER_ADVANCE(ch_size); continue; case 1: XER_ADVANCE(ch_size); ctx->phase = 1; continue; case 2: ctx->phase = 1; break; } } switch(tcv) { case XCT_CLOSING: if(ctx->phase == 0) break; ctx->phase = 0; /* Fall through */ case XCT_BOTH: if(ctx->phase == 0) { if(edx >= td->elements_count || /* Explicit OPTIONAL specs reaches the end */ (edx + elements[edx].optional == td->elements_count) || /* All extensions are optional */ (IN_EXTENSION_GROUP(specs, edx) && specs->ext_before > td->elements_count) ) { XER_ADVANCE(ch_size); ctx->phase = 4; /* Phase out */ RETURN(RC_OK); } else { ASN_DEBUG("Premature end of XER SEQUENCE"); RETURN(RC_FAIL); } } /* Fall through */ case XCT_OPENING: if(ctx->phase == 0) { XER_ADVANCE(ch_size); ctx->phase = 1; /* Processing body phase */ continue; } /* Fall through */ case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%d", tcv, ctx->phase, edx); if(ctx->phase != 1) { break; /* Really unexpected */ } if(edx < td->elements_count) { /* * Search which member corresponds to this tag. */ edx_end = edx + elements[edx].optional + 1; if(edx_end > td->elements_count) edx_end = td->elements_count; for(n = edx; n < edx_end; n++) { elm = &td->elements[n]; tcv = xer_check_tag(buf_ptr, ch_size, elm->name); switch(tcv) { case XCT_BOTH: case XCT_OPENING: /* * Process this member. */ ctx->step = edx = n; ctx->phase = 2; break; case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: continue; default: n = edx_end; break; /* Phase out */ } break; } if(n != edx_end) continue; } else { ASN_DEBUG("Out of defined members: %d/%d", edx, td->elements_count); } /* It is expected extension */ if(IN_EXTENSION_GROUP(specs, edx + (edx < td->elements_count ? elements[edx].optional : 0))) { ASN_DEBUG("Got anticipated extension at %d", edx); /* * Check for (XCT_BOTH or XCT_UNKNOWN_BO) * By using a mask. Only record a pure * tags. */ if(tcv & XCT_CLOSING) { /* Found without body */ } else { ctx->left = 1; ctx->phase = 3; /* Skip ...'s */ } XER_ADVANCE(ch_size); continue; } /* Fall through */ default: break; } ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]", size>0?((const char *)buf_ptr)[0]:'.', size>1?((const char *)buf_ptr)[1]:'.', size>2?((const char *)buf_ptr)[2]:'.', size>3?((const char *)buf_ptr)[3]:'.', size>4?((const char *)buf_ptr)[4]:'.', size>5?((const char *)buf_ptr)[5]:'.'); break; } ctx->phase = 4; /* "Phase out" on hard failure */ RETURN(RC_FAIL); } asn_enc_rval_t SEQUENCE_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; int xcan = (flags & XER_F_CANONICAL); int edx; if(!sptr) ASN__ENCODE_FAILED; er.encoded = 0; for(edx = 0; edx < td->elements_count; edx++) { asn_enc_rval_t tmper; asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; const char *mname = elm->name; unsigned int mlen = strlen(mname); if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) continue; /* Mandatory element is missing */ ASN__ENCODE_FAILED; } } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); } if(!xcan) ASN__TEXT_INDENT(1, ilevel); ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); /* Print the member itself */ tmper = elm->type->xer_encoder(elm->type, memb_ptr, ilevel + 1, flags, cb, app_key); if(tmper.encoded == -1) return tmper; ASN__CALLBACK3("", 1); er.encoded += 5 + (2 * mlen) + tmper.encoded; } if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); ASN__ENCODED_OK(er); cb_failed: ASN__ENCODE_FAILED; } int SEQUENCE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { int edx; int ret; if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; /* Dump preamble */ if(cb(td->name, strlen(td->name), app_key) < 0 || cb(" ::= {", 6, app_key) < 0) return -1; for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) continue; /* Print line */ /* Fall through */ } } else { memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); } /* Indentation */ _i_INDENT(1); /* Print the member's name and stuff */ if(cb(elm->name, strlen(elm->name), app_key) < 0 || cb(": ", 2, app_key) < 0) return -1; /* Print the member itself */ ret = elm->type->print_struct(elm->type, memb_ptr, ilevel + 1, cb, app_key); if(ret) return ret; } ilevel--; _i_INDENT(1); return (cb("}", 1, app_key) < 0) ? -1 : 0; } void SEQUENCE_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) { int edx; if(!td || !sptr) return; ASN_DEBUG("Freeing %s as SEQUENCE", td->name); for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(void **)((char *)sptr + elm->memb_offset); if(memb_ptr) ASN_STRUCT_FREE(*elm->type, memb_ptr); } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); } } if(!contents_only) { FREEMEM(sptr); } } int SEQUENCE_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { int edx; if(!sptr) { ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } /* * Iterate over structure members and check their validity. */ for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); if(!memb_ptr) { if(elm->optional) continue; ASN__CTFAIL(app_key, td, sptr, "%s: mandatory element %s absent (%s:%d)", td->name, elm->name, __FILE__, __LINE__); return -1; } } else { memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); } if(elm->memb_constraints) { int ret = elm->memb_constraints(elm->type, memb_ptr, ctfailcb, app_key); if(ret) return ret; } else { int ret = elm->type->check_constraints(elm->type, memb_ptr, ctfailcb, app_key); if(ret) return ret; /* * Cannot inherit it earlier: * need to make sure we get the updated version. */ elm->memb_constraints = elm->type->check_constraints; } } return 0; } asn_dec_rval_t SEQUENCE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; void *st = *sptr; /* Target structure. */ int extpresent; /* Extension additions are present */ uint8_t *opres; /* Presence of optional root members */ asn_per_data_t opmd; asn_dec_rval_t rv; int edx; (void)constraints; if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) ASN__DECODE_FAILED; if(!st) { st = *sptr = CALLOC(1, specs->struct_size); if(!st) ASN__DECODE_FAILED; } ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name); /* Handle extensions */ if(specs->ext_before >= 0) { extpresent = per_get_few_bits(pd, 1); if(extpresent < 0) ASN__DECODE_STARVED; } else { extpresent = 0; } /* Prepare a place and read-in the presence bitmap */ memset(&opmd, 0, sizeof(opmd)); if(specs->roms_count) { opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); if(!opres) ASN__DECODE_FAILED; /* Get the presence map */ if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { FREEMEM(opres); ASN__DECODE_STARVED; } opmd.buffer = opres; opmd.nbits = specs->roms_count; ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", td->name, specs->roms_count, *opres); } else { opres = 0; } /* * Get the sequence ROOT elements. */ for(edx = 0; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ if(IN_EXTENSION_GROUP(specs, edx)) continue; /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; } /* Deal with optionality */ if(elm->optional) { int present = per_get_few_bits(&opmd, 1); ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", td->name, elm->name, present, (int)opmd.nboff, (int)opmd.nbits); if(present == 0) { /* This element is not present */ if(elm->default_value) { /* Fill-in DEFAULT */ if(elm->default_value(1, memb_ptr2)) { FREEMEM(opres); ASN__DECODE_FAILED; } ASN_DEBUG("Filled-in default"); } /* The member is just not present */ continue; } /* Fall through */ } /* Fetch the member from the stream */ ASN_DEBUG("Decoding member %s in %s", elm->name, td->name); rv = elm->type->uper_decoder(opt_codec_ctx, elm->type, elm->per_constraints, memb_ptr2, pd); if(rv.code != RC_OK) { ASN_DEBUG("Failed decode %s in %s", elm->name, td->name); FREEMEM(opres); return rv; } } /* Optionality map is not needed anymore */ FREEMEM(opres); /* * Deal with extensions. */ if(extpresent) { ssize_t bmlength; uint8_t *epres; /* Presence of extension members */ asn_per_data_t epmd; bmlength = uper_get_nslength(pd); if(bmlength < 0) ASN__DECODE_STARVED; ASN_DEBUG("Extensions %ld present in %s", (long)bmlength, td->name); epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); if(!epres) ASN__DECODE_STARVED; /* Get the extensions map */ if(per_get_many_bits(pd, epres, 0, bmlength)) { FREEMEM(epres); ASN__DECODE_STARVED; } memset(&epmd, 0, sizeof(epmd)); epmd.buffer = epres; epmd.nbits = bmlength; ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", td->name, (long)bmlength, *epres); /* Go over extensions and read them in */ for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ int present; if(!IN_EXTENSION_GROUP(specs, edx)) { ASN_DEBUG("%d is not extension", edx); continue; } /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)st + elm->memb_offset); } else { memb_ptr = (void *)((char *)st + elm->memb_offset); memb_ptr2 = &memb_ptr; } present = per_get_few_bits(&epmd, 1); if(present <= 0) { if(present < 0) break; /* No more extensions */ continue; } ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); rv = uper_open_type_get(opt_codec_ctx, elm->type, elm->per_constraints, memb_ptr2, pd); if(rv.code != RC_OK) { FREEMEM(epres); return rv; } } /* Skip over overflow extensions which aren't present * in this system's version of the protocol */ for(;;) { ASN_DEBUG("Getting overflow extensions"); switch(per_get_few_bits(&epmd, 1)) { case -1: break; case 0: continue; default: if(uper_open_type_skip(opt_codec_ctx, pd)) { FREEMEM(epres); ASN__DECODE_STARVED; } } break; } FREEMEM(epres); } /* Fill DEFAULT members in extensions */ for(edx = specs->roms_count; edx < specs->roms_count + specs->aoms_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void **memb_ptr2; /* Pointer to member pointer */ if(!elm->default_value) continue; /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)st + elm->memb_offset); if(*memb_ptr2) continue; } else { continue; /* Extensions are all optionals */ } /* Set default value */ if(elm->default_value(1, memb_ptr2)) { ASN__DECODE_FAILED; } } rv.consumed = 0; rv.code = RC_OK; return rv; } static int SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr, asn_per_outp_t *po1, asn_per_outp_t *po2) { asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; int exts_present = 0; int exts_count = 0; int edx; if(specs->ext_before < 0) return 0; /* Find out which extensions are present */ for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ int present; if(!IN_EXTENSION_GROUP(specs, edx)) { ASN_DEBUG("%s (@%d) is not extension", elm->type->name, edx); continue; } /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); present = (*memb_ptr2 != 0); } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); memb_ptr2 = &memb_ptr; present = 1; } ASN_DEBUG("checking %s (@%d) present => %d", elm->type->name, edx, present); exts_count++; exts_present += present; /* Encode as presence marker */ if(po1 && per_put_few_bits(po1, present, 1)) return -1; /* Encode as open type field */ if(po2 && present && uper_open_type_put(elm->type, elm->per_constraints, *memb_ptr2, po2)) return -1; } return exts_present ? exts_count : 0; } asn_enc_rval_t SEQUENCE_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; asn_enc_rval_t er; int n_extensions; int edx; int i; (void)constraints; if(!sptr) ASN__ENCODE_FAILED; er.encoded = 0; ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name); /* * X.691#18.1 Whether structure is extensible * and whether to encode extensions */ if(specs->ext_before >= 0) { n_extensions = SEQUENCE_handle_extensions(td, sptr, 0, 0); per_put_few_bits(po, n_extensions ? 1 : 0, 1); } else { n_extensions = 0; /* There are no extensions to encode */ } /* Encode a presence bitmap */ for(i = 0; i < specs->roms_count; i++) { asn_TYPE_member_t *elm; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ int present; edx = specs->oms[i]; elm = &td->elements[edx]; /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); present = (*memb_ptr2 != 0); } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); memb_ptr2 = &memb_ptr; present = 1; } /* Eliminate default values */ if(present && elm->default_value && elm->default_value(0, memb_ptr2) == 1) present = 0; ASN_DEBUG("Element %s %s %s->%s is %s", elm->flags & ATF_POINTER ? "ptr" : "inline", elm->default_value ? "def" : "wtv", td->name, elm->name, present ? "present" : "absent"); if(per_put_few_bits(po, present, 1)) ASN__ENCODE_FAILED; } /* * Encode the sequence ROOT elements. */ ASN_DEBUG("ext_after = %d, ec = %d, eb = %d", specs->ext_after, td->elements_count, specs->ext_before); for(edx = 0; edx < ((specs->ext_after < 0) ? td->elements_count : specs->ext_before - 1); edx++) { asn_TYPE_member_t *elm = &td->elements[edx]; void *memb_ptr; /* Pointer to the member */ void **memb_ptr2; /* Pointer to that pointer */ if(IN_EXTENSION_GROUP(specs, edx)) continue; ASN_DEBUG("About to encode %s", elm->type->name); /* Fetch the pointer to this member */ if(elm->flags & ATF_POINTER) { memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); if(!*memb_ptr2) { ASN_DEBUG("Element %s %d not present", elm->name, edx); if(elm->optional) continue; /* Mandatory element is missing */ ASN__ENCODE_FAILED; } } else { memb_ptr = (void *)((char *)sptr + elm->memb_offset); memb_ptr2 = &memb_ptr; } /* Eliminate default values */ if(elm->default_value && elm->default_value(0, memb_ptr2) == 1) continue; ASN_DEBUG("Encoding %s->%s", td->name, elm->name); er = elm->type->uper_encoder(elm->type, elm->per_constraints, *memb_ptr2, po); if(er.encoded == -1) return er; } /* No extensions to encode */ if(!n_extensions) ASN__ENCODED_OK(er); ASN_DEBUG("Length of %d bit-map", n_extensions); /* #18.8. Write down the presence bit-map length. */ if(uper_put_nslength(po, n_extensions)) ASN__ENCODE_FAILED; ASN_DEBUG("Bit-map of %d elements", n_extensions); /* #18.7. Encoding the extensions presence bit-map. */ /* TODO: act upon NOTE in #18.7 for canonical PER */ if(SEQUENCE_handle_extensions(td, sptr, po, 0) != n_extensions) ASN__ENCODE_FAILED; ASN_DEBUG("Writing %d extensions", n_extensions); /* #18.9. Encode extensions as open type fields. */ if(SEQUENCE_handle_extensions(td, sptr, 0, po) != n_extensions) ASN__ENCODE_FAILED; ASN__ENCODED_OK(er); } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/constr_SEQUENCE.h000066400000000000000000000030061524544274600272770ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_SEQUENCE_H_ #define _CONSTR_SEQUENCE_H_ #include #ifdef __cplusplus extern "C" { #endif typedef const struct asn_SEQUENCE_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the target structure. */ int ctx_offset; /* Offset of the asn_struct_ctx_t member */ /* * Tags to members mapping table (sorted). */ const asn_TYPE_tag2member_t *tag2el; int tag2el_count; /* * Optional members of the extensions root (roms) or additions (aoms). * Meaningful for PER. */ const int *oms; /* Optional MemberS */ int roms_count; /* Root optional members count */ int aoms_count; /* Additions optional members count */ /* * Description of an extensions group. */ int ext_after; /* Extensions start after this member */ int ext_before; /* Extensions stop before this member */ } asn_SEQUENCE_specifics_t; /* * A set specialized functions dealing with the SEQUENCE type. */ asn_struct_free_f SEQUENCE_free; asn_struct_print_f SEQUENCE_print; asn_constr_check_f SEQUENCE_constraint; ber_type_decoder_f SEQUENCE_decode_ber; der_type_encoder_f SEQUENCE_encode_der; xer_type_decoder_f SEQUENCE_decode_xer; xer_type_encoder_f SEQUENCE_encode_xer; per_type_decoder_f SEQUENCE_decode_uper; per_type_encoder_f SEQUENCE_encode_uper; #ifdef __cplusplus } #endif #endif /* _CONSTR_SEQUENCE_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/constr_SEQUENCE_OF.c000066400000000000000000000123771524544274600276710ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * The DER encoder of the SEQUENCE OF type. */ asn_enc_rval_t SEQUENCE_OF_encode_der(asn_TYPE_descriptor_t *td, void *ptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_TYPE_member_t *elm = td->elements; asn_anonymous_sequence_ *list = _A_SEQUENCE_FROM_VOID(ptr); size_t computed_size = 0; ssize_t encoding_size = 0; asn_enc_rval_t erval; int edx; ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name); /* * Gather the length of the underlying members sequence. */ for(edx = 0; edx < list->count; edx++) { void *memb_ptr = list->array[edx]; if(!memb_ptr) continue; erval = elm->type->der_encoder(elm->type, memb_ptr, 0, elm->tag, 0, 0); if(erval.encoded == -1) return erval; computed_size += erval.encoded; } /* * Encode the TLV for the sequence itself. */ encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); if(encoding_size == -1) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } computed_size += encoding_size; if(!cb) { erval.encoded = computed_size; ASN__ENCODED_OK(erval); } ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name); /* * Encode all members. */ for(edx = 0; edx < list->count; edx++) { void *memb_ptr = list->array[edx]; if(!memb_ptr) continue; erval = elm->type->der_encoder(elm->type, memb_ptr, 0, elm->tag, cb, app_key); if(erval.encoded == -1) return erval; encoding_size += erval.encoded; } if(computed_size != (size_t)encoding_size) { /* * Encoded size is not equal to the computed size. */ erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; } else { erval.encoded = computed_size; erval.structure_ptr = 0; erval.failed_type = 0; } return erval; } asn_enc_rval_t SEQUENCE_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *elm = td->elements; asn_anonymous_sequence_ *list = _A_SEQUENCE_FROM_VOID(sptr); const char *mname = specs->as_XMLValueList ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); unsigned int mlen = mname ? strlen(mname) : 0; int xcan = (flags & XER_F_CANONICAL); int i; if(!sptr) ASN__ENCODE_FAILED; er.encoded = 0; for(i = 0; i < list->count; i++) { asn_enc_rval_t tmper; void *memb_ptr = list->array[i]; if(!memb_ptr) continue; if(mname) { if(!xcan) ASN__TEXT_INDENT(1, ilevel); ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); } tmper = elm->type->xer_encoder(elm->type, memb_ptr, ilevel + 1, flags, cb, app_key); if(tmper.encoded == -1) return tmper; if(tmper.encoded == 0 && specs->as_XMLValueList) { const char *name = elm->type->xml_tag; size_t len = strlen(name); if(!xcan) ASN__TEXT_INDENT(1, ilevel + 1); ASN__CALLBACK3("<", 1, name, len, "/>", 2); } if(mname) { ASN__CALLBACK3("", 1); er.encoded += 5; } er.encoded += (2 * mlen) + tmper.encoded; } if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); ASN__ENCODED_OK(er); cb_failed: ASN__ENCODE_FAILED; } asn_enc_rval_t SEQUENCE_OF_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { asn_anonymous_sequence_ *list; asn_per_constraint_t *ct; asn_enc_rval_t er; asn_TYPE_member_t *elm = td->elements; int seq; if(!sptr) ASN__ENCODE_FAILED; list = _A_SEQUENCE_FROM_VOID(sptr); er.encoded = 0; ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); if(constraints) ct = &constraints->size; else if(td->per_constraints) ct = &td->per_constraints->size; else ct = 0; /* If extensible constraint, check if size is in root */ if(ct) { int not_in_root = (list->count < ct->lower_bound || list->count > ct->upper_bound); ASN_DEBUG("lb %ld ub %ld %s", ct->lower_bound, ct->upper_bound, ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); if(ct->flags & APC_EXTENSIBLE) { /* Declare whether size is in extension root */ if(per_put_few_bits(po, not_in_root, 1)) ASN__ENCODE_FAILED; if(not_in_root) ct = 0; } else if(not_in_root && ct->effective_bits >= 0) ASN__ENCODE_FAILED; } if(ct && ct->effective_bits >= 0) { /* X.691, #19.5: No length determinant */ if(per_put_few_bits(po, list->count - ct->lower_bound, ct->effective_bits)) ASN__ENCODE_FAILED; } for(seq = -1; seq < list->count;) { ssize_t mayEncode; if(seq < 0) seq = 0; if(ct && ct->effective_bits >= 0) { mayEncode = list->count; } else { mayEncode = uper_put_length(po, list->count - seq); if(mayEncode < 0) ASN__ENCODE_FAILED; } while(mayEncode--) { void *memb_ptr = list->array[seq++]; if(!memb_ptr) ASN__ENCODE_FAILED; er = elm->type->uper_encoder(elm->type, elm->per_constraints, memb_ptr, po); if(er.encoded == -1) ASN__ENCODE_FAILED; } } ASN__ENCODED_OK(er); } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/constr_SEQUENCE_OF.h000066400000000000000000000016421524544274600276670ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_SEQUENCE_OF_H_ #define _CONSTR_SEQUENCE_OF_H_ #include #include /* Implemented using SET OF */ #ifdef __cplusplus extern "C" { #endif /* * A set specialized functions dealing with the SEQUENCE OF type. * Generally implemented using SET OF. */ #define SEQUENCE_OF_free SET_OF_free #define SEQUENCE_OF_print SET_OF_print #define SEQUENCE_OF_constraint SET_OF_constraint #define SEQUENCE_OF_decode_ber SET_OF_decode_ber #define SEQUENCE_OF_decode_xer SET_OF_decode_xer #define SEQUENCE_OF_decode_uper SET_OF_decode_uper der_type_encoder_f SEQUENCE_OF_encode_der; xer_type_encoder_f SEQUENCE_OF_encode_xer; per_type_encoder_f SEQUENCE_OF_encode_uper; #ifdef __cplusplus } #endif #endif /* _CONSTR_SET_OF_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/constr_SET_OF.c000066400000000000000000000560451524544274600271140ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Number of bytes left for this structure. * (ctx->left) indicates the number of bytes _transferred_ for the structure. * (size) contains the number of bytes in the buffer passed. */ #define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) /* * If the subprocessor function returns with an indication that it wants * more data, it may well be a fatal decoding problem, because the * size is constrained by the 's L, even if the buffer size allows * reading more data. * For example, consider the buffer containing the following TLVs: * ... * The TLV length clearly indicates that one byte is expected in V, but * if the V processor returns with "want more data" even if the buffer * contains way more data than the V processor have seen. */ #define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) /* * This macro "eats" the part of the buffer which is definitely "consumed", * i.e. was correctly converted into local representation or rightfully skipped. */ #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ ptr = ((const char *)ptr) + num;\ size -= num; \ if(ctx->left >= 0) \ ctx->left -= num; \ consumed_myself += num; \ } while(0) /* * Switch to the next phase of parsing. */ #undef NEXT_PHASE #undef PHASE_OUT #define NEXT_PHASE(ctx) do { \ ctx->phase++; \ ctx->step = 0; \ } while(0) #define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) /* * Return a standardized complex structure. */ #undef RETURN #define RETURN(_code) do { \ rval.code = _code; \ rval.consumed = consumed_myself;\ return rval; \ } while(0) /* * The decoder of the SET OF type. */ asn_dec_rval_t SET_OF_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const void *ptr, size_t size, int tag_mode) { /* * Bring closer parts of structure description. */ asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *elm = td->elements; /* Single one */ /* * Parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ ber_tlv_tag_t tlv_tag; /* T from TLV */ asn_dec_rval_t rval; /* Return code from subparsers */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ ASN_DEBUG("Decoding %s as SET OF", td->name); /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) { RETURN(RC_FAIL); } } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Start to parse where left previously */ switch(ctx->phase) { case 0: /* * PHASE 0. * Check that the set of tags associated with given structure * perfectly fits our expectations. */ rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, tag_mode, 1, &ctx->left, 0); if(rval.code != RC_OK) { ASN_DEBUG("%s tagging check failed: %d", td->name, rval.code); return rval; } if(ctx->left >= 0) ctx->left += rval.consumed; /* ?Substracted below! */ ADVANCE(rval.consumed); ASN_DEBUG("Structure consumes %ld bytes, " "buffer %ld", (long)ctx->left, (long)size); NEXT_PHASE(ctx); /* Fall through */ case 1: /* * PHASE 1. * From the place where we've left it previously, * try to decode the next item. */ for(;; ctx->step = 0) { ssize_t tag_len; /* Length of TLV's T */ if(ctx->step & 1) goto microphase2; /* * MICROPHASE 1: Synchronize decoding. */ if(ctx->left == 0) { ASN_DEBUG("End of SET OF %s", td->name); /* * No more things to decode. * Exit out of here. */ PHASE_OUT(ctx); RETURN(RC_OK); } /* * Fetch the T from TLV. */ tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); switch(tag_len) { case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); /* Fall through */ case -1: RETURN(RC_FAIL); } if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { if(LEFT < 2) { if(SIZE_VIOLATION) RETURN(RC_FAIL); else RETURN(RC_WMORE); } else if(((const uint8_t *)ptr)[1] == 0) { /* * Found the terminator of the * indefinite length structure. */ break; } } /* Outmost tag may be unknown and cannot be fetched/compared */ if(elm->tag != (ber_tlv_tag_t)-1) { if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) { /* * The new list member of expected type has arrived. */ } else { ASN_DEBUG("Unexpected tag %s fixed SET OF %s", ber_tlv_tag_string(tlv_tag), td->name); ASN_DEBUG("%s SET OF has tag %s", td->name, ber_tlv_tag_string(elm->tag)); RETURN(RC_FAIL); } } /* * MICROPHASE 2: Invoke the member-specific decoder. */ ctx->step |= 1; /* Confirm entering next microphase */ microphase2: /* * Invoke the member fetch routine according to member's type */ rval = elm->type->ber_decoder(opt_codec_ctx, elm->type, &ctx->ptr, ptr, LEFT, 0); ASN_DEBUG("In %s SET OF %s code %d consumed %d", td->name, elm->type->name, rval.code, (int)rval.consumed); switch(rval.code) { case RC_OK: { asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); if(ASN_SET_ADD(list, ctx->ptr) != 0) RETURN(RC_FAIL); else ctx->ptr = 0; } break; case RC_WMORE: /* More data expected */ if(!SIZE_VIOLATION) { ADVANCE(rval.consumed); RETURN(RC_WMORE); } /* Fall through */ case RC_FAIL: /* Fatal error */ ASN_STRUCT_FREE(*elm->type, ctx->ptr); ctx->ptr = 0; RETURN(RC_FAIL); } /* switch(rval) */ ADVANCE(rval.consumed); } /* for(all list members) */ NEXT_PHASE(ctx); case 2: /* * Read in all "end of content" TLVs. */ while(ctx->left < 0) { if(LEFT < 2) { if(LEFT > 0 && ((const char *)ptr)[0] != 0) { /* Unexpected tag */ RETURN(RC_FAIL); } else { RETURN(RC_WMORE); } } if(((const char *)ptr)[0] == 0 && ((const char *)ptr)[1] == 0) { ADVANCE(2); ctx->left++; } else { RETURN(RC_FAIL); } } PHASE_OUT(ctx); } RETURN(RC_OK); } /* * Internally visible buffer holding a single encoded element. */ struct _el_buffer { uint8_t *buf; size_t length; size_t size; }; /* Append bytes to the above structure */ static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) { struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr; if(el_buf->length + size > el_buf->size) return -1; memcpy(el_buf->buf + el_buf->length, buffer, size); el_buf->length += size; return 0; } static int _el_buf_cmp(const void *ap, const void *bp) { const struct _el_buffer *a = (const struct _el_buffer *)ap; const struct _el_buffer *b = (const struct _el_buffer *)bp; int ret; size_t common_len; if(a->length < b->length) common_len = a->length; else common_len = b->length; ret = memcmp(a->buf, b->buf, common_len); if(ret == 0) { if(a->length < b->length) ret = -1; else if(a->length > b->length) ret = 1; } return ret; } /* * The DER encoder of the SET OF type. */ asn_enc_rval_t SET_OF_encode_der(asn_TYPE_descriptor_t *td, void *ptr, int tag_mode, ber_tlv_tag_t tag, asn_app_consume_bytes_f *cb, void *app_key) { asn_TYPE_member_t *elm = td->elements; asn_TYPE_descriptor_t *elm_type = elm->type; der_type_encoder_f *der_encoder = elm_type->der_encoder; asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); size_t computed_size = 0; ssize_t encoding_size = 0; struct _el_buffer *encoded_els; ssize_t eels_count = 0; size_t max_encoded_len = 1; asn_enc_rval_t erval; int ret; int edx; ASN_DEBUG("Estimating size for SET OF %s", td->name); /* * Gather the length of the underlying members sequence. */ for(edx = 0; edx < list->count; edx++) { void *memb_ptr = list->array[edx]; if(!memb_ptr) continue; erval = der_encoder(elm_type, memb_ptr, 0, elm->tag, 0, 0); if(erval.encoded == -1) return erval; computed_size += erval.encoded; /* Compute maximum encoding's size */ if(max_encoded_len < (size_t)erval.encoded) max_encoded_len = erval.encoded; } /* * Encode the TLV for the sequence itself. */ encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); if(encoding_size == -1) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } computed_size += encoding_size; if(!cb || list->count == 0) { erval.encoded = computed_size; ASN__ENCODED_OK(erval); } /* * DER mandates dynamic sorting of the SET OF elements * according to their encodings. Build an array of the * encoded elements. */ encoded_els = (struct _el_buffer *)MALLOC( list->count * sizeof(encoded_els[0])); if(encoded_els == NULL) { erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } ASN_DEBUG("Encoding members of %s SET OF", td->name); /* * Encode all members. */ for(edx = 0; edx < list->count; edx++) { void *memb_ptr = list->array[edx]; struct _el_buffer *encoded_el = &encoded_els[eels_count]; if(!memb_ptr) continue; /* * Prepare space for encoding. */ encoded_el->buf = (uint8_t *)MALLOC(max_encoded_len); if(encoded_el->buf) { encoded_el->length = 0; encoded_el->size = max_encoded_len; } else { for(edx--; edx >= 0; edx--) FREEMEM(encoded_els[edx].buf); FREEMEM(encoded_els); erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; return erval; } /* * Encode the member into the prepared space. */ erval = der_encoder(elm_type, memb_ptr, 0, elm->tag, _el_addbytes, encoded_el); if(erval.encoded == -1) { for(; edx >= 0; edx--) FREEMEM(encoded_els[edx].buf); FREEMEM(encoded_els); return erval; } encoding_size += erval.encoded; eels_count++; } /* * Sort the encoded elements according to their encoding. */ qsort(encoded_els, eels_count, sizeof(encoded_els[0]), _el_buf_cmp); /* * Report encoded elements to the application. * Dispose of temporary sorted members table. */ ret = 0; for(edx = 0; edx < eels_count; edx++) { struct _el_buffer *encoded_el = &encoded_els[edx]; /* Report encoded chunks to the application */ if(ret == 0 && cb(encoded_el->buf, encoded_el->length, app_key) < 0) ret = -1; FREEMEM(encoded_el->buf); } FREEMEM(encoded_els); if(ret || computed_size != (size_t)encoding_size) { /* * Standard callback failed, or * encoded size is not equal to the computed size. */ erval.encoded = -1; erval.failed_type = td; erval.structure_ptr = ptr; } else { erval.encoded = computed_size; } ASN__ENCODED_OK(erval); } #undef XER_ADVANCE #define XER_ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ buf_ptr = ((const char *)buf_ptr) + num;\ size -= num; \ consumed_myself += num; \ } while(0) /* * Decode the XER (XML) data. */ asn_dec_rval_t SET_OF_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const char *opt_mname, const void *buf_ptr, size_t size) { /* * Bring closer parts of structure description. */ asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *element = td->elements; const char *elm_tag; const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; /* * ... and parts of the structure being constructed. */ void *st = *struct_ptr; /* Target structure. */ asn_struct_ctx_t *ctx; /* Decoder context */ asn_dec_rval_t rval; /* Return value from a decoder */ ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ /* * Create the target structure if it is not present already. */ if(st == 0) { st = *struct_ptr = CALLOC(1, specs->struct_size); if(st == 0) RETURN(RC_FAIL); } /* Which tag is expected for the downstream */ if(specs->as_XMLValueList) { elm_tag = (specs->as_XMLValueList == 1) ? 0 : ""; } else { elm_tag = (*element->name) ? element->name : element->type->xml_tag; } /* * Restore parsing context. */ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); /* * Phases of XER/XML processing: * Phase 0: Check that the opening tag matches our expectations. * Phase 1: Processing body and reacting on closing tag. * Phase 2: Processing inner type. */ for(; ctx->phase <= 2;) { pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ /* * Go inside the inner member of a set. */ if(ctx->phase == 2) { asn_dec_rval_t tmprval; /* Invoke the inner type decoder, m.b. multiple times */ ASN_DEBUG("XER/SET OF element [%s]", elm_tag); tmprval = element->type->xer_decoder(opt_codec_ctx, element->type, &ctx->ptr, elm_tag, buf_ptr, size); if(tmprval.code == RC_OK) { asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); if(ASN_SET_ADD(list, ctx->ptr) != 0) RETURN(RC_FAIL); ctx->ptr = 0; XER_ADVANCE(tmprval.consumed); } else { XER_ADVANCE(tmprval.consumed); RETURN(tmprval.code); } ctx->phase = 1; /* Back to body processing */ ASN_DEBUG("XER/SET OF phase => %d", ctx->phase); /* Fall through */ } /* * Get the next part of the XML stream. */ ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); if(ch_size == -1) { RETURN(RC_FAIL); } else { switch(ch_type) { case PXER_WMORE: RETURN(RC_WMORE); case PXER_COMMENT: /* Got XML comment */ case PXER_TEXT: /* Ignore free-standing text */ XER_ADVANCE(ch_size); /* Skip silently */ continue; case PXER_TAG: break; /* Check the rest down there */ } } tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s", tcv, ctx->phase, xml_tag); switch(tcv) { case XCT_CLOSING: if(ctx->phase == 0) break; ctx->phase = 0; /* Fall through */ case XCT_BOTH: if(ctx->phase == 0) { /* No more things to decode */ XER_ADVANCE(ch_size); ctx->phase = 3; /* Phase out */ RETURN(RC_OK); } /* Fall through */ case XCT_OPENING: if(ctx->phase == 0) { XER_ADVANCE(ch_size); ctx->phase = 1; /* Processing body phase */ continue; } /* Fall through */ case XCT_UNKNOWN_OP: case XCT_UNKNOWN_BO: ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); if(ctx->phase == 1) { /* * Process a single possible member. */ ctx->phase = 2; continue; } /* Fall through */ default: break; } ASN_DEBUG("Unexpected XML tag in SET OF"); break; } ctx->phase = 3; /* "Phase out" on hard failure */ RETURN(RC_FAIL); } typedef struct xer_tmp_enc_s { void *buffer; size_t offset; size_t size; } xer_tmp_enc_t; static int SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) { xer_tmp_enc_t *t = (xer_tmp_enc_t *)key; if(t->offset + size >= t->size) { size_t newsize = (t->size << 2) + size; void *p = REALLOC(t->buffer, newsize); if(!p) return -1; t->buffer = p; t->size = newsize; } memcpy((char *)t->buffer + t->offset, buffer, size); t->offset += size; return 0; } static int SET_OF_xer_order(const void *aptr, const void *bptr) { const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr; const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr; size_t minlen = a->offset; int ret; if(b->offset < minlen) minlen = b->offset; /* Well-formed UTF-8 has this nice lexicographical property... */ ret = memcmp(a->buffer, b->buffer, minlen); if(ret != 0) return ret; if(a->offset == b->offset) return 0; if(a->offset == minlen) return -1; return 1; } asn_enc_rval_t SET_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er; asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *elm = td->elements; asn_anonymous_set_ *list = _A_SET_FROM_VOID(sptr); const char *mname = specs->as_XMLValueList ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); size_t mlen = mname ? strlen(mname) : 0; int xcan = (flags & XER_F_CANONICAL); xer_tmp_enc_t *encs = 0; size_t encs_count = 0; void *original_app_key = app_key; asn_app_consume_bytes_f *original_cb = cb; int i; if(!sptr) ASN__ENCODE_FAILED; if(xcan) { encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0])); if(!encs) ASN__ENCODE_FAILED; cb = SET_OF_encode_xer_callback; } er.encoded = 0; for(i = 0; i < list->count; i++) { asn_enc_rval_t tmper; void *memb_ptr = list->array[i]; if(!memb_ptr) continue; if(encs) { memset(&encs[encs_count], 0, sizeof(encs[0])); app_key = &encs[encs_count]; encs_count++; } if(mname) { if(!xcan) ASN__TEXT_INDENT(1, ilevel); ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); } if(!xcan && specs->as_XMLValueList == 1) ASN__TEXT_INDENT(1, ilevel + 1); tmper = elm->type->xer_encoder(elm->type, memb_ptr, ilevel + (specs->as_XMLValueList != 2), flags, cb, app_key); if(tmper.encoded == -1) { td = tmper.failed_type; sptr = tmper.structure_ptr; goto cb_failed; } if(tmper.encoded == 0 && specs->as_XMLValueList) { const char *name = elm->type->xml_tag; size_t len = strlen(name); ASN__CALLBACK3("<", 1, name, len, "/>", 2); } if(mname) { ASN__CALLBACK3("", 1); er.encoded += 5; } er.encoded += (2 * mlen) + tmper.encoded; } if(!xcan) ASN__TEXT_INDENT(1, ilevel - 1); if(encs) { xer_tmp_enc_t *enc = encs; xer_tmp_enc_t *end = encs + encs_count; ssize_t control_size = 0; cb = original_cb; app_key = original_app_key; qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order); for(; enc < end; enc++) { ASN__CALLBACK(enc->buffer, enc->offset); FREEMEM(enc->buffer); enc->buffer = 0; control_size += enc->offset; } assert(control_size == er.encoded); } goto cleanup; cb_failed: er.encoded = -1; er.failed_type = td; er.structure_ptr = sptr; cleanup: if(encs) { while(encs_count-- > 0) { if(encs[encs_count].buffer) FREEMEM(encs[encs_count].buffer); } FREEMEM(encs); } ASN__ENCODED_OK(er); } int SET_OF_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { asn_TYPE_member_t *elm = td->elements; const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); int ret; int i; if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; /* Dump preamble */ if(cb(td->name, strlen(td->name), app_key) < 0 || cb(" ::= {", 6, app_key) < 0) return -1; for(i = 0; i < list->count; i++) { const void *memb_ptr = list->array[i]; if(!memb_ptr) continue; _i_INDENT(1); ret = elm->type->print_struct(elm->type, memb_ptr, ilevel + 1, cb, app_key); if(ret) return ret; } ilevel--; _i_INDENT(1); return (cb("}", 1, app_key) < 0) ? -1 : 0; } void SET_OF_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { if(td && ptr) { asn_SET_OF_specifics_t *specs; asn_TYPE_member_t *elm = td->elements; asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); asn_struct_ctx_t *ctx; /* Decoder context */ int i; /* * Could not use set_of_empty() because of (*free) * incompatibility. */ for(i = 0; i < list->count; i++) { void *memb_ptr = list->array[i]; if(memb_ptr) ASN_STRUCT_FREE(*elm->type, memb_ptr); } list->count = 0; /* No meaningful elements left */ asn_set_empty(list); /* Remove (list->array) */ specs = (asn_SET_OF_specifics_t *)td->specifics; ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); if(ctx->ptr) { ASN_STRUCT_FREE(*elm->type, ctx->ptr); ctx->ptr = 0; } if(!contents_only) { FREEMEM(ptr); } } } int SET_OF_constraint(asn_TYPE_descriptor_t *td, const void *sptr, asn_app_constraint_failed_f *ctfailcb, void *app_key) { asn_TYPE_member_t *elm = td->elements; asn_constr_check_f *constr; const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); int i; if(!sptr) { ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name, __FILE__, __LINE__); return -1; } constr = elm->memb_constraints; if(!constr) constr = elm->type->check_constraints; /* * Iterate over the members of an array. * Validate each in turn, until one fails. */ for(i = 0; i < list->count; i++) { const void *memb_ptr = list->array[i]; int ret; if(!memb_ptr) continue; ret = constr(elm->type, memb_ptr, ctfailcb, app_key); if(ret) return ret; } /* * Cannot inherit it eralier: * need to make sure we get the updated version. */ if(!elm->memb_constraints) elm->memb_constraints = elm->type->check_constraints; return 0; } asn_dec_rval_t SET_OF_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *elm = td->elements; /* Single one */ void *st = *sptr; asn_anonymous_set_ *list; asn_per_constraint_t *ct; int repeat = 0; ssize_t nelems; if(ASN__STACK_OVERFLOW_CHECK(opt_codec_ctx)) ASN__DECODE_FAILED; /* * Create the target structure if it is not present already. */ if(!st) { st = *sptr = CALLOC(1, specs->struct_size); if(!st) ASN__DECODE_FAILED; } list = _A_SET_FROM_VOID(st); /* Figure out which constraints to use */ if(constraints) ct = &constraints->size; else if(td->per_constraints) ct = &td->per_constraints->size; else ct = 0; if(ct && ct->flags & APC_EXTENSIBLE) { int value = per_get_few_bits(pd, 1); if(value < 0) ASN__DECODE_STARVED; if(value) ct = 0; /* Not restricted! */ } if(ct && ct->effective_bits >= 0) { /* X.691, #19.5: No length determinant */ nelems = per_get_few_bits(pd, ct->effective_bits); ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", (long)nelems, ct->lower_bound, td->name); if(nelems < 0) ASN__DECODE_STARVED; nelems += ct->lower_bound; } else { nelems = -1; } do { int i; if(nelems < 0) { nelems = uper_get_length(pd, ct ? ct->effective_bits : -1, &repeat); ASN_DEBUG("Got to decode %d elements (eff %d)", (int)nelems, (int)(ct ? ct->effective_bits : -1)); if(nelems < 0) ASN__DECODE_STARVED; } for(i = 0; i < nelems; i++) { void *ptr = 0; ASN_DEBUG("SET OF %s decoding", elm->type->name); rv = elm->type->uper_decoder(opt_codec_ctx, elm->type, elm->per_constraints, &ptr, pd); ASN_DEBUG("%s SET OF %s decoded %d, %p", td->name, elm->type->name, rv.code, ptr); if(rv.code == RC_OK) { if(ASN_SET_ADD(list, ptr) == 0) continue; ASN_DEBUG("Failed to add element into %s", td->name); /* Fall through */ rv.code = RC_FAIL; } else { ASN_DEBUG("Failed decoding %s of %s (SET OF)", elm->type->name, td->name); } if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); return rv; } nelems = -1; /* Allow uper_get_length() */ } while(repeat); ASN_DEBUG("Decoded %s as SET OF", td->name); rv.code = RC_OK; rv.consumed = 0; return rv; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/constr_SET_OF.h000066400000000000000000000020541524544274600271100ustar00rootroot00000000000000/*- * Copyright (c) 2003 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_SET_OF_H_ #define _CONSTR_SET_OF_H_ #include #ifdef __cplusplus extern "C" { #endif typedef const struct asn_SET_OF_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the target structure. */ int ctx_offset; /* Offset of the asn_struct_ctx_t member */ /* XER-specific stuff */ int as_XMLValueList; /* The member type must be encoded like this */ } asn_SET_OF_specifics_t; /* * A set specialized functions dealing with the SET OF type. */ asn_struct_free_f SET_OF_free; asn_struct_print_f SET_OF_print; asn_constr_check_f SET_OF_constraint; ber_type_decoder_f SET_OF_decode_ber; der_type_encoder_f SET_OF_encode_der; xer_type_decoder_f SET_OF_decode_xer; xer_type_encoder_f SET_OF_encode_xer; per_type_decoder_f SET_OF_decode_uper; per_type_encoder_f SET_OF_encode_uper; #ifdef __cplusplus } #endif #endif /* _CONSTR_SET_OF_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/constr_TYPE.c000066400000000000000000000033501524544274600266450ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * Version of the ASN.1 infrastructure shipped with compiler. */ int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; } static asn_app_consume_bytes_f _print2fp; /* * Return the outmost tag of the type. */ ber_tlv_tag_t asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { if(tag_mode) return tag; if(type_descriptor->tags_count) return type_descriptor->tags[0]; return type_descriptor->outmost_tag(type_descriptor, struct_ptr, 0, 0); } /* * Print the target language's structure in human readable form. */ int asn_fprint(FILE *stream, asn_TYPE_descriptor_t *td, const void *struct_ptr) { if(!stream) stream = stdout; if(!td || !struct_ptr) { errno = EINVAL; return -1; } /* Invoke type-specific printer */ if(td->print_struct(td, struct_ptr, 1, _print2fp, stream)) return -1; /* Terminate the output */ if(_print2fp("\n", 1, stream)) return -1; return fflush(stream); } /* Dump the data into the specified stdio stream */ static int _print2fp(const void *buffer, size_t size, void *app_key) { FILE *stream = (FILE *)app_key; if(fwrite(buffer, 1, size, stream) != size) return -1; return 0; } /* * Some compilers do not support variable args macros. * This function is a replacement of ASN_DEBUG() macro. */ void ASN_DEBUG_f(const char *fmt, ...); void ASN_DEBUG_f(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vfprintf(stderr, fmt, ap); fprintf(stderr, "\n"); va_end(ap); } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/constr_TYPE.h000066400000000000000000000151331524544274600266540ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004, 2005, 2006 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ /* * This file contains the declaration structure called "ASN.1 Type Definition", * which holds all information necessary for encoding and decoding routines. * This structure even contains pointer to these encoding and decoding routines * for each defined ASN.1 type. */ #ifndef _CONSTR_TYPE_H_ #define _CONSTR_TYPE_H_ #include #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ struct asn_TYPE_member_s; /* Forward declaration */ /* * This type provides the context information for various ASN.1 routines, * primarily ones doing decoding. A member _asn_ctx of this type must be * included into certain target language's structures, such as compound types. */ typedef struct asn_struct_ctx_s { short phase; /* Decoding phase */ short step; /* Elementary step of a phase */ int context; /* Other context information */ void *ptr; /* Decoder-specific stuff (stack elements) */ ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */ } asn_struct_ctx_t; #include /* Basic Encoding Rules decoder */ #include /* Distinguished Encoding Rules encoder */ #include /* Decoder of XER (XML, text) */ #include /* Encoder into XER (XML, text) */ #include /* Packet Encoding Rules decoder */ #include /* Packet Encoding Rules encoder */ #include /* Subtype constraints support */ /* * Free the structure according to its specification. * If (free_contents_only) is set, the wrapper structure itself (struct_ptr) * will not be freed. (It may be useful in case the structure is allocated * statically or arranged on the stack, yet its elements are allocated * dynamically.) */ typedef void (asn_struct_free_f)( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, int free_contents_only); #define ASN_STRUCT_FREE(asn_DEF, ptr) (asn_DEF).free_struct(&(asn_DEF),ptr,0) #define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \ (asn_DEF).free_struct(&(asn_DEF),ptr,1) /* * Print the structure according to its specification. */ typedef int (asn_struct_print_f)( struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, int level, /* Indentation level */ asn_app_consume_bytes_f *callback, void *app_key); /* * Return the outmost tag of the type. * If the type is untagged CHOICE, the dynamic operation is performed. * NOTE: This function pointer type is only useful internally. * Do not use it in your application. */ typedef ber_tlv_tag_t (asn_outmost_tag_f)( const struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); /* The instance of the above function type; used internally. */ asn_outmost_tag_f asn_TYPE_outmost_tag; /* * The definitive description of the destination language's structure. */ typedef struct asn_TYPE_descriptor_s { const char *name; /* A name of the ASN.1 type. "" in some cases. */ const char *xml_tag; /* Name used in XML tag */ /* * Generalized functions for dealing with the specific type. * May be directly invoked by applications. */ asn_struct_free_f *free_struct; /* Free the structure */ asn_struct_print_f *print_struct; /* Human readable output */ asn_constr_check_f *check_constraints; /* Constraints validator */ ber_type_decoder_f *ber_decoder; /* Generic BER decoder */ der_type_encoder_f *der_encoder; /* Canonical DER encoder */ xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ /*********************************************************************** * Internally useful members. Not to be used by applications directly. * **********************************************************************/ /* * Tags that are expected to occur. */ asn_outmost_tag_f *outmost_tag; /* */ const ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ int tags_count; /* Number of tags which are expected */ const ber_tlv_tag_t *all_tags; /* Every tag for BER/containment */ int all_tags_count; /* Number of tags */ asn_per_constraints_t *per_constraints; /* PER compiled constraints */ /* * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE). */ struct asn_TYPE_member_s *elements; int elements_count; /* * Additional information describing the type, used by appropriate * functions above. */ const void *specifics; } asn_TYPE_descriptor_t; /* * This type describes an element of the constructed type, * i.e. SEQUENCE, SET, CHOICE, etc. */ enum asn_TYPE_flags_e { ATF_NOFLAGS, ATF_POINTER = 0x01, /* Represented by the pointer */ ATF_OPEN_TYPE = 0x02 /* ANY type, without meaningful tag */ }; typedef struct asn_TYPE_member_s { enum asn_TYPE_flags_e flags; /* Element's presentation flags */ int optional; /* Following optional members, including current */ int memb_offset; /* Offset of the element */ ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ asn_TYPE_descriptor_t *type; /* Member type descriptor */ asn_constr_check_f *memb_constraints; /* Constraints validator */ asn_per_constraints_t *per_constraints; /* PER compiled constraints */ int (*default_value)(int setval, void **sptr); /* DEFAULT */ const char *name; /* ASN.1 identifier of the element */ } asn_TYPE_member_t; /* * BER tag to element number mapping. */ typedef struct asn_TYPE_tag2member_s { ber_tlv_tag_t el_tag; /* Outmost tag of the member */ int el_no; /* Index of the associated member, base 0 */ int toff_first; /* First occurence of the el_tag, relative */ int toff_last; /* Last occurence of the el_tag, relatvie */ } asn_TYPE_tag2member_t; /* * This function is a wrapper around (td)->print_struct, which prints out * the contents of the target language's structure (struct_ptr) into the * file pointer (stream) in human readable form. * RETURN VALUES: * 0: The structure is printed. * -1: Problem dumping the structure. * (See also xer_fprint() in xer_encoder.h) */ int asn_fprint(FILE *stream, /* Destination stream descriptor */ asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */ const void *struct_ptr); /* Structure to be printed */ #ifdef __cplusplus } #endif #endif /* _CONSTR_TYPE_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/constraints.c000066400000000000000000000042571524544274600270520ustar00rootroot00000000000000#include "asn_internal.h" #include "constraints.h" int asn_generic_no_constraint(asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, asn_app_constraint_failed_f *cb, void *key) { (void)type_descriptor; /* Unused argument */ (void)struct_ptr; /* Unused argument */ (void)cb; /* Unused argument */ (void)key; /* Unused argument */ /* Nothing to check */ return 0; } int asn_generic_unknown_constraint(asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, asn_app_constraint_failed_f *cb, void *key) { (void)type_descriptor; /* Unused argument */ (void)struct_ptr; /* Unused argument */ (void)cb; /* Unused argument */ (void)key; /* Unused argument */ /* Unknown how to check */ return 0; } struct errbufDesc { asn_TYPE_descriptor_t *failed_type; const void *failed_struct_ptr; char *errbuf; size_t errlen; }; static void _asn_i_ctfailcb(void *key, asn_TYPE_descriptor_t *td, const void *sptr, const char *fmt, ...) { struct errbufDesc *arg = key; va_list ap; ssize_t vlen; ssize_t maxlen; arg->failed_type = td; arg->failed_struct_ptr = sptr; maxlen = arg->errlen; if(maxlen <= 0) return; va_start(ap, fmt); vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap); va_end(ap); if(vlen >= maxlen) { arg->errbuf[maxlen-1] = '\0'; /* Ensuring libc correctness */ arg->errlen = maxlen - 1; /* Not counting termination */ return; } else if(vlen >= 0) { arg->errbuf[vlen] = '\0'; /* Ensuring libc correctness */ arg->errlen = vlen; /* Not counting termination */ } else { /* * The libc on this system is broken. */ vlen = sizeof("") - 1; maxlen--; arg->errlen = vlen < maxlen ? vlen : maxlen; memcpy(arg->errbuf, "", arg->errlen); arg->errbuf[arg->errlen] = 0; } return; } int asn_check_constraints(asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, char *errbuf, size_t *errlen) { struct errbufDesc arg; int ret; arg.failed_type = 0; arg.failed_struct_ptr = 0; arg.errbuf = errbuf; arg.errlen = errlen ? *errlen : 0; ret = type_descriptor->check_constraints(type_descriptor, struct_ptr, _asn_i_ctfailcb, &arg); if(ret == -1 && errlen) *errlen = arg.errlen; return ret; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/constraints.h000066400000000000000000000036511524544274600270540ustar00rootroot00000000000000/*- * Copyright (c) 2004, 2006 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef ASN1_CONSTRAINTS_VALIDATOR_H #define ASN1_CONSTRAINTS_VALIDATOR_H #include /* Platform-dependent types */ #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * Validate the structure according to the ASN.1 constraints. * If errbuf and errlen are given, they shall be pointing to the appropriate * buffer space and its length before calling this function. Alternatively, * they could be passed as NULL's. If constraints validation fails, * errlen will contain the actual number of bytes taken from the errbuf * to encode an error message (properly 0-terminated). * * RETURN VALUES: * This function returns 0 in case all ASN.1 constraints are met * and -1 if one or more constraints were failed. */ int asn_check_constraints(struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, /* Target language's structure */ char *errbuf, /* Returned error description */ size_t *errlen /* Length of the error description */ ); /* * Generic type for constraint checking callback, * associated with every type descriptor. */ typedef int (asn_constr_check_f)( struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, asn_app_constraint_failed_f *optional_callback, /* Log the error */ void *optional_app_key /* Opaque key passed to a callback */ ); /******************************* * INTERNALLY USEFUL FUNCTIONS * *******************************/ asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */ asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */ /* * Invoke the callback with a complete error message. */ #define ASN__CTFAIL if(ctfailcb) ctfailcb #ifdef __cplusplus } #endif #endif /* ASN1_CONSTRAINTS_VALIDATOR_H */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/der_encoder.c000066400000000000000000000117521524544274600267520ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, asn_app_consume_bytes_f *cb, void *app_key, int constructed); /* * The DER encoder of any type. */ asn_enc_rval_t der_encode(asn_TYPE_descriptor_t *type_descriptor, void *struct_ptr, asn_app_consume_bytes_f *consume_bytes, void *app_key) { ASN_DEBUG("DER encoder invoked for %s", type_descriptor->name); /* * Invoke type-specific encoder. */ return type_descriptor->der_encoder(type_descriptor, struct_ptr, /* Pointer to the destination structure */ 0, 0, consume_bytes, app_key); } /* * Argument type and callback necessary for der_encode_to_buffer(). */ typedef struct enc_to_buf_arg { void *buffer; size_t left; } enc_to_buf_arg; static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { enc_to_buf_arg *arg = (enc_to_buf_arg *)key; if(arg->left < size) return -1; /* Data exceeds the available buffer size */ memcpy(arg->buffer, buffer, size); arg->buffer = ((char *)arg->buffer) + size; arg->left -= size; return 0; } /* * A variant of the der_encode() which encodes the data into the provided buffer */ asn_enc_rval_t der_encode_to_buffer(asn_TYPE_descriptor_t *type_descriptor, void *struct_ptr, void *buffer, size_t buffer_size) { enc_to_buf_arg arg; asn_enc_rval_t ec; arg.buffer = buffer; arg.left = buffer_size; ec = type_descriptor->der_encoder(type_descriptor, struct_ptr, /* Pointer to the destination structure */ 0, 0, encode_to_buffer_cb, &arg); if(ec.encoded != -1) { assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); /* Return the encoded contents size */ } return ec; } /* * Write out leading TL[v] sequence according to the type definition. */ ssize_t der_write_tags(asn_TYPE_descriptor_t *sd, size_t struct_length, int tag_mode, int last_tag_form, ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ asn_app_consume_bytes_f *cb, void *app_key) { const ber_tlv_tag_t *tags; /* Copy of tags stream */ int tags_count; /* Number of tags */ size_t overall_length; ssize_t *lens; int i; ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", sd->name, tag_mode, sd->tags_count, ber_tlv_tag_string(tag), tag_mode ?(sd->tags_count+1 -((tag_mode == -1) && sd->tags_count)) :sd->tags_count ); if(tag_mode) { /* * Instead of doing shaman dance like we do in ber_check_tags(), * allocate a small array on the stack * and initialize it appropriately. */ int stag_offset; ber_tlv_tag_t *tags_buf; tags_buf = (ber_tlv_tag_t *)alloca((sd->tags_count + 1) * sizeof(ber_tlv_tag_t)); if(!tags_buf) { /* Can fail on !x86 */ errno = ENOMEM; return -1; } tags_count = sd->tags_count + 1 /* EXPLICIT or IMPLICIT tag is given */ - ((tag_mode == -1) && sd->tags_count); /* Copy tags over */ tags_buf[0] = tag; stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); for(i = 1; i < tags_count; i++) tags_buf[i] = sd->tags[i + stag_offset]; tags = tags_buf; } else { tags = sd->tags; tags_count = sd->tags_count; } /* No tags to write */ if(tags_count == 0) return 0; lens = (ssize_t *)alloca(tags_count * sizeof(lens[0])); if(!lens) { errno = ENOMEM; return -1; } /* * Array of tags is initialized. * Now, compute the size of the TLV pairs, from right to left. */ overall_length = struct_length; for(i = tags_count - 1; i >= 0; --i) { lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0); if(lens[i] == -1) return -1; overall_length += lens[i]; lens[i] = overall_length - lens[i]; } if(!cb) return overall_length - struct_length; ASN_DEBUG("%s %s TL sequence (%d elements)", cb?"Encoding":"Estimating", sd->name, tags_count); /* * Encode the TL sequence for real. */ for(i = 0; i < tags_count; i++) { ssize_t len; int _constr; /* Check if this tag happens to be constructed */ _constr = (last_tag_form || i < (tags_count - 1)); len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); if(len == -1) return -1; } return overall_length - struct_length; } static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, asn_app_consume_bytes_f *cb, void *app_key, int constructed) { uint8_t buf[32]; size_t size = 0; int buf_size = cb?sizeof(buf):0; ssize_t tmp; /* Serialize tag (T from TLV) into possibly zero-length buffer */ tmp = ber_tlv_tag_serialize(tag, buf, buf_size); if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1; size += tmp; /* Serialize length (L from TLV) into possibly zero-length buffer */ tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0); if(tmp == -1) return -1; size += tmp; if(size > sizeof(buf)) return -1; /* * If callback is specified, invoke it, and check its return value. */ if(cb) { if(constructed) *buf |= 0x20; if(cb(buf, size, app_key) < 0) return -1; } return size; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/der_encoder.h000066400000000000000000000036311524544274600267540ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _DER_ENCODER_H_ #define _DER_ENCODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * The DER encoder of any type. May be invoked by the application. * The ber_decode() function (ber_decoder.h) is an opposite of der_encode(). */ asn_enc_rval_t der_encode(struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ asn_app_consume_bytes_f *consume_bytes_cb, void *app_key /* Arbitrary callback argument */ ); /* A variant of der_encode() which encodes data into the pre-allocated buffer */ asn_enc_rval_t der_encode_to_buffer( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ void *buffer, /* Pre-allocated buffer */ size_t buffer_size /* Initial buffer size (maximum) */ ); /* * Type of the generic DER encoder. */ typedef asn_enc_rval_t (der_type_encoder_f)( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ void *app_key /* Arbitrary callback argument */ ); /******************************* * INTERNALLY USEFUL FUNCTIONS * *******************************/ /* * Write out leading TL[v] sequence according to the type definition. */ ssize_t der_write_tags( struct asn_TYPE_descriptor_s *type_descriptor, size_t struct_length, int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ int last_tag_form, /* {0,!0}: prim, constructed */ ber_tlv_tag_t tag, asn_app_consume_bytes_f *consume_bytes_cb, void *app_key ); #ifdef __cplusplus } #endif #endif /* _DER_ENCODER_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/per_decoder.c000066400000000000000000000047761524544274600267640ustar00rootroot00000000000000#include #include #include /* * Decode a "Production of a complete encoding", X.691#10.1. * The complete encoding contains at least one byte, and is an integral * multiple of 8 bytes. */ asn_dec_rval_t uper_decode_complete(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, size_t size) { asn_dec_rval_t rval; rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); if(rval.consumed) { /* * We've always given 8-aligned data, * so convert bits to integral bytes. */ rval.consumed += 7; rval.consumed >>= 3; } else if(rval.code == RC_OK) { if(size) { if(((const uint8_t *)buffer)[0] == 0) { rval.consumed = 1; /* 1 byte */ } else { ASN_DEBUG("Expecting single zeroed byte"); rval.code = RC_FAIL; } } else { /* Must contain at least 8 bits. */ rval.code = RC_WMORE; } } return rval; } asn_dec_rval_t uper_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, size_t size, int skip_bits, int unused_bits) { asn_codec_ctx_t s_codec_ctx; asn_dec_rval_t rval; asn_per_data_t pd; if(skip_bits < 0 || skip_bits > 7 || unused_bits < 0 || unused_bits > 7 || (unused_bits > 0 && !size)) ASN__DECODE_FAILED; /* * Stack checker requires that the codec context * must be allocated on the stack. */ if(opt_codec_ctx) { if(opt_codec_ctx->max_stack_size) { s_codec_ctx = *opt_codec_ctx; opt_codec_ctx = &s_codec_ctx; } } else { /* If context is not given, be security-conscious anyway */ memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; opt_codec_ctx = &s_codec_ctx; } /* Fill in the position indicator */ memset(&pd, 0, sizeof(pd)); pd.buffer = (const uint8_t *)buffer; pd.nboff = skip_bits; pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ if(pd.nboff > pd.nbits) ASN__DECODE_FAILED; /* * Invoke type-specific decoder. */ if(!td->uper_decoder) ASN__DECODE_FAILED; /* PER is not compiled in */ rval = td->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd); if(rval.code == RC_OK) { /* Return the number of consumed bits */ rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + pd.nboff - skip_bits; ASN_DEBUG("PER decoding consumed %ld, counted %ld", (long)rval.consumed, (long)pd.moved); assert(rval.consumed == pd.moved); } else { /* PER codec is not a restartable */ rval.consumed = 0; } return rval; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/per_decoder.h000066400000000000000000000033001524544274600267470ustar00rootroot00000000000000/*- * Copyright (c) 2005, 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _PER_DECODER_H_ #define _PER_DECODER_H_ #include #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * Unaligned PER decoder of a "complete encoding" as per X.691#10.1. * On success, this call always returns (.consumed >= 1), as per X.691#10.1.3. */ asn_dec_rval_t uper_decode_complete(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size /* Size of data buffer */ ); /* * Unaligned PER decoder of any ASN.1 type. May be invoked by the application. * WARNING: This call returns the number of BITS read from the stream. Beware. */ asn_dec_rval_t uper_decode(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size, /* Size of data buffer */ int skip_bits, /* Number of unused leading bits, 0..7 */ int unused_bits /* Number of unused tailing bits, 0..7 */ ); /* * Type of the type-specific PER decoder function. */ typedef asn_dec_rval_t (per_type_decoder_f)(asn_codec_ctx_t *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, asn_per_constraints_t *constraints, void **struct_ptr, asn_per_data_t *per_data ); #ifdef __cplusplus } #endif #endif /* _PER_DECODER_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/per_encoder.c000066400000000000000000000071651524544274600267710ustar00rootroot00000000000000#include #include #include static asn_enc_rval_t uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *, void *sptr, asn_app_consume_bytes_f *cb, void *app_key); asn_enc_rval_t uper_encode(asn_TYPE_descriptor_t *td, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { return uper_encode_internal(td, 0, sptr, cb, app_key); } /* * Argument type and callback necessary for uper_encode_to_buffer(). */ typedef struct enc_to_buf_arg { void *buffer; size_t left; } enc_to_buf_arg; static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { enc_to_buf_arg *arg = (enc_to_buf_arg *)key; if(arg->left < size) return -1; /* Data exceeds the available buffer size */ memcpy(arg->buffer, buffer, size); arg->buffer = ((char *)arg->buffer) + size; arg->left -= size; return 0; } asn_enc_rval_t uper_encode_to_buffer(asn_TYPE_descriptor_t *td, void *sptr, void *buffer, size_t buffer_size) { enc_to_buf_arg key; key.buffer = buffer; key.left = buffer_size; if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name); return uper_encode_internal(td, 0, sptr, encode_to_buffer_cb, &key); } typedef struct enc_dyn_arg { void *buffer; size_t length; size_t allocated; } enc_dyn_arg; static int encode_dyn_cb(const void *buffer, size_t size, void *key) { enc_dyn_arg *arg = key; if(arg->length + size >= arg->allocated) { void *p; arg->allocated = arg->allocated ? (arg->allocated << 2) : size; p = REALLOC(arg->buffer, arg->allocated); if(!p) { FREEMEM(arg->buffer); memset(arg, 0, sizeof(*arg)); return -1; } arg->buffer = p; } memcpy(((char *)arg->buffer) + arg->length, buffer, size); arg->length += size; return 0; } ssize_t uper_encode_to_new_buffer(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, void **buffer_r) { asn_enc_rval_t er; enc_dyn_arg key; memset(&key, 0, sizeof(key)); er = uper_encode_internal(td, constraints, sptr, encode_dyn_cb, &key); switch(er.encoded) { case -1: FREEMEM(key.buffer); return -1; case 0: FREEMEM(key.buffer); key.buffer = MALLOC(1); if(key.buffer) { *(char *)key.buffer = '\0'; *buffer_r = key.buffer; return 1; } else { return -1; } default: *buffer_r = key.buffer; ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); return ((er.encoded + 7) >> 3); } } /* * Internally useful functions. */ /* Flush partially filled buffer */ static int _uper_encode_flush_outp(asn_per_outp_t *po) { uint8_t *buf; if(po->nboff == 0 && po->buffer == po->tmpspace) return 0; buf = po->buffer + (po->nboff >> 3); /* Make sure we account for the last, partially filled */ if(po->nboff & 0x07) { buf[0] &= 0xff << (8 - (po->nboff & 0x07)); buf++; } return po->outper(po->tmpspace, buf - po->tmpspace, po->op_key); } static asn_enc_rval_t uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { asn_per_outp_t po; asn_enc_rval_t er; /* * Invoke type-specific encoder. */ if(!td || !td->uper_encoder) ASN__ENCODE_FAILED; /* PER is not compiled in */ po.buffer = po.tmpspace; po.nboff = 0; po.nbits = 8 * sizeof(po.tmpspace); po.outper = cb; po.op_key = app_key; po.flushed_bytes = 0; er = td->uper_encoder(td, constraints, sptr, &po); if(er.encoded != -1) { size_t bits_to_flush; bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; /* Set number of bits encoded to a firm value */ er.encoded = (po.flushed_bytes << 3) + bits_to_flush; if(_uper_encode_flush_outp(&po)) ASN__ENCODE_FAILED; } return er; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/per_encoder.h000066400000000000000000000041771524544274600267760ustar00rootroot00000000000000/*- * Copyright (c) 2006, 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _PER_ENCODER_H_ #define _PER_ENCODER_H_ #include #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * Unaligned PER encoder of any ASN.1 type. May be invoked by the application. * WARNING: This function returns the number of encoded bits in the .encoded * field of the return value. Use the following formula to convert to bytes: * bytes = ((.encoded + 7) / 8) */ asn_enc_rval_t uper_encode(struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ void *app_key /* Arbitrary callback argument */ ); /* * A variant of uper_encode() which encodes data into the existing buffer * WARNING: This function returns the number of encoded bits in the .encoded * field of the return value. */ asn_enc_rval_t uper_encode_to_buffer( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ void *buffer, /* Pre-allocated buffer */ size_t buffer_size /* Initial buffer size (max) */ ); /* * A variant of uper_encode_to_buffer() which allocates buffer itself. * Returns the number of bytes in the buffer or -1 in case of failure. * WARNING: This function produces a "Production of the complete encoding", * with length of at least one octet. Contrast this to precise bit-packing * encoding of uper_encode() and uper_encode_to_buffer(). */ ssize_t uper_encode_to_new_buffer( struct asn_TYPE_descriptor_s *type_descriptor, asn_per_constraints_t *constraints, void *struct_ptr, /* Structure to be encoded */ void **buffer_r /* Buffer allocated and returned */ ); /* * Type of the generic PER encoder function. */ typedef asn_enc_rval_t (per_type_encoder_f)( struct asn_TYPE_descriptor_s *type_descriptor, asn_per_constraints_t *constraints, void *struct_ptr, asn_per_outp_t *per_output ); #ifdef __cplusplus } #endif #endif /* _PER_ENCODER_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/per_opentype.c000066400000000000000000000225361524544274600272140ustar00rootroot00000000000000/* * Copyright (c) 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include #include typedef struct uper_ugot_key { asn_per_data_t oldpd; /* Old per data source */ size_t unclaimed; size_t ot_moved; /* Number of bits moved by OT processing */ int repeat; } uper_ugot_key; static int uper_ugot_refill(asn_per_data_t *pd); static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); static asn_dec_rval_t uper_sot_suck(asn_codec_ctx_t *, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd); /* * Encode an "open type field". * #10.1, #10.2 */ int uper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { void *buf; void *bptr; ssize_t size; size_t toGo; ASN_DEBUG("Open type put %s ...", td->name); size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); if(size <= 0) return -1; for(bptr = buf, toGo = size; toGo;) { ssize_t maySave = uper_put_length(po, toGo); ASN_DEBUG("Prepending length %d to %s and allowing to save %d", (int)size, td->name, (int)maySave); if(maySave < 0) break; if(per_put_many_bits(po, bptr, maySave * 8)) break; bptr = (char *)bptr + maySave; toGo -= maySave; } FREEMEM(buf); if(toGo) return -1; ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)", td->name, (long)size); return 0; } static asn_dec_rval_t uper_open_type_get_simple(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; ssize_t chunk_bytes; int repeat; uint8_t *buf = 0; size_t bufLen = 0; size_t bufSize = 0; asn_per_data_t spd; size_t padding; ASN__STACK_OVERFLOW_CHECK(ctx); ASN_DEBUG("Getting open type %s...", td->name); do { chunk_bytes = uper_get_length(pd, -1, &repeat); if(chunk_bytes < 0) { FREEMEM(buf); ASN__DECODE_STARVED; } if(bufLen + chunk_bytes > bufSize) { void *ptr; bufSize = chunk_bytes + (bufSize << 2); ptr = REALLOC(buf, bufSize); if(!ptr) { FREEMEM(buf); ASN__DECODE_FAILED; } buf = ptr; } if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { FREEMEM(buf); ASN__DECODE_STARVED; } bufLen += chunk_bytes; } while(repeat); ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, (long)bufLen); memset(&spd, 0, sizeof(spd)); spd.buffer = buf; spd.nbits = bufLen << 3; ASN_DEBUG_INDENT_ADD(+4); rv = td->uper_decoder(ctx, td, constraints, sptr, &spd); ASN_DEBUG_INDENT_ADD(-4); if(rv.code == RC_OK) { /* Check padding validity */ padding = spd.nbits - spd.nboff; if ((padding < 8 || /* X.691#10.1.3 */ (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && per_get_few_bits(&spd, padding) == 0) { /* Everything is cool */ FREEMEM(buf); return rv; } FREEMEM(buf); if(padding >= 8) { ASN_DEBUG("Too large padding %d in open type", (int)padding); ASN__DECODE_FAILED; } else { ASN_DEBUG("Non-zero padding"); ASN__DECODE_FAILED; } } else { FREEMEM(buf); /* rv.code could be RC_WMORE, nonsense in this context */ rv.code = RC_FAIL; /* Noone would give us more */ } return rv; } static asn_dec_rval_t GCC_NOTUSED uper_open_type_get_complex(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { uper_ugot_key arg; asn_dec_rval_t rv; ssize_t padding; ASN__STACK_OVERFLOW_CHECK(ctx); ASN_DEBUG("Getting open type %s from %s", td->name, per_data_string(pd)); arg.oldpd = *pd; arg.unclaimed = 0; arg.ot_moved = 0; arg.repeat = 1; pd->refill = uper_ugot_refill; pd->refill_key = &arg; pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ pd->moved = 0; /* This now counts the open type size in bits */ ASN_DEBUG_INDENT_ADD(+4); rv = td->uper_decoder(ctx, td, constraints, sptr, pd); ASN_DEBUG_INDENT_ADD(-4); #define UPDRESTOREPD do { \ /* buffer and nboff are valid, preserve them. */ \ pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved); \ pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved); \ pd->refill = arg.oldpd.refill; \ pd->refill_key = arg.oldpd.refill_key; \ } while(0) if(rv.code != RC_OK) { UPDRESTOREPD; return rv; } ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name, per_data_string(pd), per_data_string(&arg.oldpd), (int)arg.unclaimed, (int)arg.repeat); padding = pd->moved % 8; if(padding) { int32_t pvalue; if(padding > 7) { ASN_DEBUG("Too large padding %d in open type", (int)padding); rv.code = RC_FAIL; UPDRESTOREPD; return rv; } padding = 8 - padding; ASN_DEBUG("Getting padding of %d bits", (int)padding); pvalue = per_get_few_bits(pd, padding); switch(pvalue) { case -1: ASN_DEBUG("Padding skip failed"); UPDRESTOREPD; ASN__DECODE_STARVED; case 0: break; default: ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", (int)padding, (int)pvalue); UPDRESTOREPD; ASN__DECODE_FAILED; } } if(pd->nboff != pd->nbits) { ASN_DEBUG("Open type %s overhead pd%s old%s", td->name, per_data_string(pd), per_data_string(&arg.oldpd)); if(1) { UPDRESTOREPD; ASN__DECODE_FAILED; } else { arg.unclaimed += pd->nbits - pd->nboff; } } /* Adjust pd back so it points to original data */ UPDRESTOREPD; /* Skip data not consumed by the decoder */ if(arg.unclaimed) { ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed); switch(per_skip_bits(pd, arg.unclaimed)) { case -1: ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed); ASN__DECODE_STARVED; case 0: ASN_DEBUG("Got claim of %d", (int)arg.unclaimed); break; default: /* Padding must be blank */ ASN_DEBUG("Non-blank unconsumed padding"); ASN__DECODE_FAILED; } arg.unclaimed = 0; } if(arg.repeat) { ASN_DEBUG("Not consumed the whole thing"); rv.code = RC_FAIL; return rv; } return rv; } asn_dec_rval_t uper_open_type_get(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); } int uper_open_type_skip(asn_codec_ctx_t *ctx, asn_per_data_t *pd) { asn_TYPE_descriptor_t s_td; asn_dec_rval_t rv; s_td.name = ""; s_td.uper_decoder = uper_sot_suck; rv = uper_open_type_get(ctx, &s_td, 0, 0, pd); if(rv.code != RC_OK) return -1; else return 0; } /* * Internal functions. */ static asn_dec_rval_t uper_sot_suck(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv; (void)ctx; (void)td; (void)constraints; (void)sptr; while(per_get_few_bits(pd, 24) >= 0); rv.code = RC_OK; rv.consumed = pd->moved; return rv; } static int uper_ugot_refill(asn_per_data_t *pd) { uper_ugot_key *arg = pd->refill_key; ssize_t next_chunk_bytes, next_chunk_bits; ssize_t avail; asn_per_data_t *oldpd = &arg->oldpd; ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld", (long)pd->moved, (long)oldpd->moved); /* Advance our position to where pd is */ oldpd->buffer = pd->buffer; oldpd->nboff = pd->nboff; oldpd->nbits -= pd->moved - arg->ot_moved; oldpd->moved += pd->moved - arg->ot_moved; arg->ot_moved = pd->moved; if(arg->unclaimed) { /* Refill the container */ if(per_get_few_bits(oldpd, 1)) return -1; if(oldpd->nboff == 0) { assert(0); return -1; } pd->buffer = oldpd->buffer; pd->nboff = oldpd->nboff - 1; pd->nbits = oldpd->nbits; ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)", (long)pd->moved); return 0; } if(!arg->repeat) { ASN_DEBUG("Want more but refill doesn't have it"); return -1; } next_chunk_bytes = uper_get_length(oldpd, -1, &arg->repeat); ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld", (long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat); if(next_chunk_bytes < 0) return -1; if(next_chunk_bytes == 0) { pd->refill = 0; /* No more refills, naturally */ assert(!arg->repeat); /* Implementation guarantee */ } next_chunk_bits = next_chunk_bytes << 3; avail = oldpd->nbits - oldpd->nboff; if(avail >= next_chunk_bits) { pd->nbits = oldpd->nboff + next_chunk_bits; arg->unclaimed = 0; ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)", (long)next_chunk_bits, (long)oldpd->moved, (long)oldpd->nboff, (long)oldpd->nbits, (long)(oldpd->nbits - oldpd->nboff)); } else { pd->nbits = oldpd->nbits; arg->unclaimed = next_chunk_bits - avail; ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld", (long)avail, (long)next_chunk_bits, (long)arg->unclaimed); } pd->buffer = oldpd->buffer; pd->nboff = oldpd->nboff; ASN_DEBUG("Refilled pd%s old%s", per_data_string(pd), per_data_string(oldpd)); return 0; } static int per_skip_bits(asn_per_data_t *pd, int skip_nbits) { int hasNonZeroBits = 0; while(skip_nbits > 0) { int skip; /* per_get_few_bits() is more efficient when nbits <= 24 */ if(skip_nbits < 24) skip = skip_nbits; else skip = 24; skip_nbits -= skip; switch(per_get_few_bits(pd, skip)) { case -1: return -1; /* Starving */ case 0: continue; /* Skipped empty space */ default: hasNonZeroBits = 1; continue; } } return hasNonZeroBits; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/per_opentype.h000066400000000000000000000012321524544274600272070ustar00rootroot00000000000000/* * Copyright (c) 2007 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _PER_OPENTYPE_H_ #define _PER_OPENTYPE_H_ #ifdef __cplusplus extern "C" { #endif asn_dec_rval_t uper_open_type_get(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd); int uper_open_type_skip(asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd); int uper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po); #ifdef __cplusplus } #endif #endif /* _PER_OPENTYPE_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/per_support.c000066400000000000000000000262331524544274600270630ustar00rootroot00000000000000/* * Copyright (c) 2005-2014 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include char * per_data_string(asn_per_data_t *pd) { static char buf[2][32]; static int n; n = (n+1) % 2; snprintf(buf[n], sizeof(buf[n]), "{m=%ld span %+ld[%d..%d] (%d)}", (long)pd->moved, (((long)pd->buffer) & 0xf), (int)pd->nboff, (int)pd->nbits, (int)(pd->nbits - pd->nboff)); return buf[n]; } void per_get_undo(asn_per_data_t *pd, int nbits) { if((ssize_t)pd->nboff < nbits) { assert((ssize_t)pd->nboff < nbits); } else { pd->nboff -= nbits; pd->moved -= nbits; } } /* * Extract a small number of bits (<= 31) from the specified PER data pointer. */ int32_t per_get_few_bits(asn_per_data_t *pd, int nbits) { size_t off; /* Next after last bit offset */ ssize_t nleft; /* Number of bits left in this stream */ uint32_t accum; const uint8_t *buf; if(nbits < 0) return -1; nleft = pd->nbits - pd->nboff; if(nbits > nleft) { int32_t tailv, vhead; if(!pd->refill || nbits > 31) return -1; /* Accumulate unused bytes before refill */ ASN_DEBUG("Obtain the rest %d bits (want %d)", (int)nleft, (int)nbits); tailv = per_get_few_bits(pd, nleft); if(tailv < 0) return -1; /* Refill (replace pd contents with new data) */ if(pd->refill(pd)) return -1; nbits -= nleft; vhead = per_get_few_bits(pd, nbits); /* Combine the rest of previous pd with the head of new one */ tailv = (tailv << nbits) | vhead; /* Could == -1 */ return tailv; } /* * Normalize position indicator. */ if(pd->nboff >= 8) { pd->buffer += (pd->nboff >> 3); pd->nbits -= (pd->nboff & ~0x07); pd->nboff &= 0x07; } pd->moved += nbits; pd->nboff += nbits; off = pd->nboff; buf = pd->buffer; /* * Extract specified number of bits. */ if(off <= 8) accum = nbits ? (buf[0]) >> (8 - off) : 0; else if(off <= 16) accum = ((buf[0] << 8) + buf[1]) >> (16 - off); else if(off <= 24) accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off); else if(off <= 31) accum = ((buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + (buf[3])) >> (32 - off); else if(nbits <= 31) { asn_per_data_t tpd = *pd; /* Here are we with our 31-bits limit plus 1..7 bits offset. */ per_get_undo(&tpd, nbits); /* The number of available bits in the stream allow * for the following operations to take place without * invoking the ->refill() function */ accum = per_get_few_bits(&tpd, nbits - 24) << 24; accum |= per_get_few_bits(&tpd, 24); } else { per_get_undo(pd, nbits); return -1; } accum &= (((uint32_t)1 << nbits) - 1); ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]", (int)nbits, (int)nleft, (int)pd->moved, (((long)pd->buffer) & 0xf), (int)pd->nboff, (int)pd->nbits, ((pd->buffer != NULL)?pd->buffer[0]:0), (int)(pd->nbits - pd->nboff), (int)accum); return accum; } /* * Extract a large number of bits from the specified PER data pointer. */ int per_get_many_bits(asn_per_data_t *pd, uint8_t *dst, int alright, int nbits) { int32_t value; if(alright && (nbits & 7)) { /* Perform right alignment of a first few bits */ value = per_get_few_bits(pd, nbits & 0x07); if(value < 0) return -1; *dst++ = value; /* value is already right-aligned */ nbits &= ~7; } while(nbits) { if(nbits >= 24) { value = per_get_few_bits(pd, 24); if(value < 0) return -1; *(dst++) = value >> 16; *(dst++) = value >> 8; *(dst++) = value; nbits -= 24; } else { value = per_get_few_bits(pd, nbits); if(value < 0) return -1; if(nbits & 7) { /* implies left alignment */ value <<= 8 - (nbits & 7), nbits += 8 - (nbits & 7); if(nbits > 24) *dst++ = value >> 24; } if(nbits > 16) *dst++ = value >> 16; if(nbits > 8) *dst++ = value >> 8; *dst++ = value; break; } } return 0; } /* * Get the length "n" from the stream. */ ssize_t uper_get_length(asn_per_data_t *pd, int ebits, int *repeat) { ssize_t value; *repeat = 0; if(ebits >= 0) return per_get_few_bits(pd, ebits); value = per_get_few_bits(pd, 8); if(value < 0) return -1; if((value & 128) == 0) /* #10.9.3.6 */ return (value & 0x7F); if((value & 64) == 0) { /* #10.9.3.7 */ value = ((value & 63) << 8) | per_get_few_bits(pd, 8); if(value < 0) return -1; return value; } value &= 63; /* this is "m" from X.691, #10.9.3.8 */ if(value < 1 || value > 4) return -1; *repeat = 1; return (16384 * value); } /* * Get the normally small length "n". * This procedure used to decode length of extensions bit-maps * for SET and SEQUENCE types. */ ssize_t uper_get_nslength(asn_per_data_t *pd) { ssize_t length; ASN_DEBUG("Getting normally small length"); if(per_get_few_bits(pd, 1) == 0) { length = per_get_few_bits(pd, 6) + 1; if(length <= 0) return -1; ASN_DEBUG("l=%d", (int)length); return length; } else { int repeat; length = uper_get_length(pd, -1, &repeat); if(length >= 0 && !repeat) return length; return -1; /* Error, or do not support >16K extensions */ } } /* * Get the normally small non-negative whole number. * X.691, #10.6 */ ssize_t uper_get_nsnnwn(asn_per_data_t *pd) { ssize_t value; value = per_get_few_bits(pd, 7); if(value & 64) { /* implicit (value < 0) */ value &= 63; value <<= 2; value |= per_get_few_bits(pd, 2); if(value & 128) /* implicit (value < 0) */ return -1; if(value == 0) return 0; if(value >= 3) return -1; value = per_get_few_bits(pd, 8 * value); return value; } return value; } /* * X.691-11/2008, #11.6 * Encoding of a normally small non-negative whole number */ int uper_put_nsnnwn(asn_per_outp_t *po, int n) { int bytes; if(n <= 63) { if(n < 0) return -1; return per_put_few_bits(po, n, 7); } if(n < 256) bytes = 1; else if(n < 65536) bytes = 2; else if(n < 256 * 65536) bytes = 3; else return -1; /* This is not a "normally small" value */ if(per_put_few_bits(po, bytes, 8)) return -1; return per_put_few_bits(po, n, 8 * bytes); } /* X.691-2008/11, #11.5.6 -> #11.3 */ int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) { unsigned long lhalf; /* Lower half of the number*/ long half; if(nbits <= 31) { half = per_get_few_bits(pd, nbits); if(half < 0) return -1; *out_value = half; return 0; } if((size_t)nbits > 8 * sizeof(*out_value)) return -1; /* RANGE */ half = per_get_few_bits(pd, 31); if(half < 0) return -1; if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31)) return -1; *out_value = ((unsigned long)half << (nbits - 31)) | lhalf; return 0; } /* X.691-2008/11, #11.5.6 -> #11.3 */ int uper_put_constrained_whole_number_s(asn_per_outp_t *po, long v, int nbits) { /* * Assume signed number can be safely coerced into * unsigned of the same range. * The following testing code will likely be optimized out * by compiler if it is true. */ unsigned long uvalue1 = ULONG_MAX; long svalue = uvalue1; unsigned long uvalue2 = svalue; assert(uvalue1 == uvalue2); return uper_put_constrained_whole_number_u(po, v, nbits); } int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits) { if(nbits <= 31) { return per_put_few_bits(po, v, nbits); } else { /* Put higher portion first, followed by lower 31-bit */ if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31)) return -1; return per_put_few_bits(po, v, 31); } } /* * Put a small number of bits (<= 31). */ int per_put_few_bits(asn_per_outp_t *po, uint32_t bits, int obits) { size_t off; /* Next after last bit offset */ size_t omsk; /* Existing last byte meaningful bits mask */ uint8_t *buf; if(obits <= 0 || obits >= 32) return obits ? -1 : 0; ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", obits, (int)bits, po->buffer, (int)po->nboff); /* * Normalize position indicator. */ if(po->nboff >= 8) { po->buffer += (po->nboff >> 3); po->nbits -= (po->nboff & ~0x07); po->nboff &= 0x07; } /* * Flush whole-bytes output, if necessary. */ if(po->nboff + obits > po->nbits) { int complete_bytes = (po->buffer - po->tmpspace); ASN_DEBUG("[PER output %ld complete + %ld]", (long)complete_bytes, (long)po->flushed_bytes); if(po->outper(po->tmpspace, complete_bytes, po->op_key) < 0) return -1; if(po->nboff) po->tmpspace[0] = po->buffer[0]; po->buffer = po->tmpspace; po->nbits = 8 * sizeof(po->tmpspace); po->flushed_bytes += complete_bytes; } /* * Now, due to sizeof(tmpspace), we are guaranteed large enough space. */ buf = po->buffer; omsk = ~((1 << (8 - po->nboff)) - 1); off = (po->nboff + obits); /* Clear data of debris before meaningful bits */ bits &= (((uint32_t)1 << obits) - 1); ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, (int)bits, (int)bits, (int)po->nboff, (int)off, buf[0], (int)(omsk&0xff), (int)(buf[0] & omsk)); if(off <= 8) /* Completely within 1 byte */ po->nboff = off, bits <<= (8 - off), buf[0] = (buf[0] & omsk) | bits; else if(off <= 16) po->nboff = off, bits <<= (16 - off), buf[0] = (buf[0] & omsk) | (bits >> 8), buf[1] = bits; else if(off <= 24) po->nboff = off, bits <<= (24 - off), buf[0] = (buf[0] & omsk) | (bits >> 16), buf[1] = bits >> 8, buf[2] = bits; else if(off <= 31) po->nboff = off, bits <<= (32 - off), buf[0] = (buf[0] & omsk) | (bits >> 24), buf[1] = bits >> 16, buf[2] = bits >> 8, buf[3] = bits; else { per_put_few_bits(po, bits >> (obits - 24), 24); per_put_few_bits(po, bits, obits - 24); } ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]", (int)bits, (int)bits, buf[0], (long)(po->buffer - po->tmpspace)); return 0; } /* * Output a large number of bits. */ int per_put_many_bits(asn_per_outp_t *po, const uint8_t *src, int nbits) { while(nbits) { uint32_t value; if(nbits >= 24) { value = (src[0] << 16) | (src[1] << 8) | src[2]; src += 3; nbits -= 24; if(per_put_few_bits(po, value, 24)) return -1; } else { value = src[0]; if(nbits > 8) value = (value << 8) | src[1]; if(nbits > 16) value = (value << 8) | src[2]; if(nbits & 0x07) value >>= (8 - (nbits & 0x07)); if(per_put_few_bits(po, value, nbits)) return -1; break; } } return 0; } /* * Put the length "n" (or part of it) into the stream. */ ssize_t uper_put_length(asn_per_outp_t *po, size_t length) { if(length <= 127) /* #10.9.3.6 */ return per_put_few_bits(po, length, 8) ? -1 : (ssize_t)length; else if(length < 16384) /* #10.9.3.7 */ return per_put_few_bits(po, length|0x8000, 16) ? -1 : (ssize_t)length; length >>= 14; if(length > 4) length = 4; return per_put_few_bits(po, 0xC0 | length, 8) ? -1 : (ssize_t)(length << 14); } /* * Put the normally small length "n" into the stream. * This procedure used to encode length of extensions bit-maps * for SET and SEQUENCE types. */ int uper_put_nslength(asn_per_outp_t *po, size_t length) { if(length <= 64) { /* #10.9.3.4 */ if(length == 0) return -1; return per_put_few_bits(po, length-1, 7) ? -1 : 0; } else { if(uper_put_length(po, length) != (ssize_t)length) { /* This might happen in case of >16K extensions */ return -1; } } return 0; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/per_support.h000066400000000000000000000102571524544274600270670ustar00rootroot00000000000000/* * Copyright (c) 2005-2014 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _PER_SUPPORT_H_ #define _PER_SUPPORT_H_ #include /* Platform-specific types */ #ifdef __cplusplus extern "C" { #endif /* * Pre-computed PER constraints. */ typedef const struct asn_per_constraint_s { enum asn_per_constraint_flags { APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ APC_CONSTRAINED = 0x2, /* Fully constrained */ APC_EXTENSIBLE = 0x4 /* May have extension */ } flags; int range_bits; /* Full number of bits in the range */ int effective_bits; /* Effective bits */ long lower_bound; /* "lb" value */ long upper_bound; /* "ub" value */ } asn_per_constraint_t; typedef const struct asn_per_constraints_s { struct asn_per_constraint_s value; struct asn_per_constraint_s size; int (*value2code)(unsigned int value); int (*code2value)(unsigned int code); } asn_per_constraints_t; /* * This structure describes a position inside an incoming PER bit stream. */ typedef struct asn_per_data_s { const uint8_t *buffer; /* Pointer to the octet stream */ size_t nboff; /* Bit offset to the meaningful bit */ size_t nbits; /* Number of bits in the stream */ size_t moved; /* Number of bits moved through this bit stream */ int (*refill)(struct asn_per_data_s *); void *refill_key; } asn_per_data_t; /* * Extract a small number of bits (<= 31) from the specified PER data pointer. * This function returns -1 if the specified number of bits could not be * extracted due to EOD or other conditions. */ int32_t per_get_few_bits(asn_per_data_t *per_data, int get_nbits); /* Undo the immediately preceeding "get_few_bits" operation */ void per_get_undo(asn_per_data_t *per_data, int get_nbits); /* * Extract a large number of bits from the specified PER data pointer. * This function returns -1 if the specified number of bits could not be * extracted due to EOD or other conditions. */ int per_get_many_bits(asn_per_data_t *pd, uint8_t *dst, int right_align, int get_nbits); /* * Get the length "n" from the Unaligned PER stream. */ ssize_t uper_get_length(asn_per_data_t *pd, int effective_bound_bits, int *repeat); /* * Get the normally small length "n". */ ssize_t uper_get_nslength(asn_per_data_t *pd); /* * Get the normally small non-negative whole number. */ ssize_t uper_get_nsnnwn(asn_per_data_t *pd); /* X.691-2008/11, #11.5.6 */ int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits); /* Non-thread-safe debugging function, don't use it */ char *per_data_string(asn_per_data_t *pd); /* * This structure supports forming PER output. */ typedef struct asn_per_outp_s { uint8_t *buffer; /* Pointer into the (tmpspace) */ size_t nboff; /* Bit offset to the meaningful bit */ size_t nbits; /* Number of bits left in (tmpspace) */ uint8_t tmpspace[32]; /* Preliminary storage to hold data */ int (*outper)(const void *data, size_t size, void *op_key); void *op_key; /* Key for (outper) data callback */ size_t flushed_bytes; /* Bytes already flushed through (outper) */ } asn_per_outp_t; /* Output a small number of bits (<= 31) */ int per_put_few_bits(asn_per_outp_t *per_data, uint32_t bits, int obits); /* Output a large number of bits */ int per_put_many_bits(asn_per_outp_t *po, const uint8_t *src, int put_nbits); /* X.691-2008/11, #11.5 */ int uper_put_constrained_whole_number_s(asn_per_outp_t *po, long v, int nbits); int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits); /* * Put the length "n" to the Unaligned PER stream. * This function returns the number of units which may be flushed * in the next units saving iteration. */ ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length); /* * Put the normally small length "n" to the Unaligned PER stream. * Returns 0 or -1. */ int uper_put_nslength(asn_per_outp_t *po, size_t length); /* * Put the normally small non-negative whole number. */ int uper_put_nsnnwn(asn_per_outp_t *po, int n); #ifdef __cplusplus } #endif #endif /* _PER_SUPPORT_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/xer_decoder.c000066400000000000000000000212051524544274600267560ustar00rootroot00000000000000/* * Copyright (c) 2004, 2005 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* XER/XML parsing support */ /* * Decode the XER encoding of a given type. */ asn_dec_rval_t xer_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **struct_ptr, const void *buffer, size_t size) { asn_codec_ctx_t s_codec_ctx; /* * Stack checker requires that the codec context * must be allocated on the stack. */ if(opt_codec_ctx) { if(opt_codec_ctx->max_stack_size) { s_codec_ctx = *opt_codec_ctx; opt_codec_ctx = &s_codec_ctx; } } else { /* If context is not given, be security-conscious anyway */ memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); s_codec_ctx.max_stack_size = ASN__DEFAULT_STACK_MAX; opt_codec_ctx = &s_codec_ctx; } /* * Invoke type-specific decoder. */ return td->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size); } struct xer__cb_arg { pxml_chunk_type_e chunk_type; size_t chunk_size; const void *chunk_buf; int callback_not_invoked; }; static int xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) { struct xer__cb_arg *arg = (struct xer__cb_arg *)key; arg->chunk_type = type; arg->chunk_size = _chunk_size; arg->chunk_buf = _chunk_data; arg->callback_not_invoked = 0; return -1; /* Terminate the XML parsing */ } /* * Fetch the next token from the XER/XML stream. */ ssize_t xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) { struct xer__cb_arg arg; int new_stateContext = *stateContext; ssize_t ret; arg.callback_not_invoked = 1; ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg); if(ret < 0) return -1; if(arg.callback_not_invoked) { assert(ret == 0); /* No data was consumed */ *ch_type = PXER_WMORE; return 0; /* Try again with more data */ } else { assert(arg.chunk_size); assert(arg.chunk_buf == buffer); } /* * Translate the XML chunk types into more convenient ones. */ switch(arg.chunk_type) { case PXML_TEXT: *ch_type = PXER_TEXT; break; case PXML_TAG: *ch_type = PXER_WMORE; return 0; /* Want more */ case PXML_TAG_END: *ch_type = PXER_TAG; break; case PXML_COMMENT: case PXML_COMMENT_END: *ch_type = PXER_COMMENT; break; } *stateContext = new_stateContext; return arg.chunk_size; } #define CSLASH 0x2f /* '/' */ #define LANGLE 0x3c /* '<' */ #define RANGLE 0x3e /* '>' */ xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { const char *buf = (const char *)buf_ptr; const char *end; xer_check_tag_e ct = XCT_OPENING; if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { if(size >= 2) ASN_DEBUG("Broken XML tag: \"%c...%c\"", buf[0], buf[size - 1]); return XCT_BROKEN; } /* * Determine the tag class. */ if(buf[1] == CSLASH) { buf += 2; /* advance past "" */ ct = XCT_CLOSING; if(size > 0 && buf[size-1] == CSLASH) return XCT_BROKEN; /* */ } else { buf++; /* advance past "<" */ size -= 2; /* strip "<" and ">" */ if(size > 0 && buf[size-1] == CSLASH) { ct = XCT_BOTH; size--; /* One more, for "/" */ } } /* Sometimes we don't care about the tag */ if(!need_tag || !*need_tag) return (xer_check_tag_e)(XCT__UNK__MASK | ct); /* * Determine the tag name. */ for(end = buf + size; buf < end; buf++, need_tag++) { int b = *buf, n = *need_tag; if(b != n) { if(n == 0) { switch(b) { case 0x09: case 0x0a: case 0x0c: case 0x0d: case 0x20: /* "": whitespace is normal */ return ct; } } return (xer_check_tag_e)(XCT__UNK__MASK | ct); } if(b == 0) return XCT_BROKEN; /* Embedded 0 in buf?! */ } if(*need_tag) return (xer_check_tag_e)(XCT__UNK__MASK | ct); return ct; } #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = (num_bytes); \ buf_ptr = ((const char *)buf_ptr) + num; \ size -= num; \ consumed_myself += num; \ } while(0) #undef RETURN #define RETURN(_code) do { \ rval.code = _code; \ rval.consumed = consumed_myself; \ if(rval.code != RC_OK) \ ASN_DEBUG("Failed with %d", rval.code); \ return rval; \ } while(0) #define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \ ssize_t converted_size = body_receiver \ (struct_key, chunk_buf, chunk_size, \ (size_t)chunk_size < size); \ if(converted_size == -1) RETURN(RC_FAIL); \ if(converted_size == 0 \ && size == (size_t)chunk_size) \ RETURN(RC_WMORE); \ chunk_size = converted_size; \ } while(0) #define XER_GOT_EMPTY() do { \ if(body_receiver(struct_key, 0, 0, size > 0) == -1) \ RETURN(RC_FAIL); \ } while(0) /* * Generalized function for decoding the primitive values. */ asn_dec_rval_t xer_decode_general(asn_codec_ctx_t *opt_codec_ctx, asn_struct_ctx_t *ctx, /* Type decoder context */ void *struct_key, const char *xml_tag, /* Expected XML tag */ const void *buf_ptr, size_t size, int (*opt_unexpected_tag_decoder) (void *struct_key, const void *chunk_buf, size_t chunk_size), ssize_t (*body_receiver) (void *struct_key, const void *chunk_buf, size_t chunk_size, int have_more) ) { asn_dec_rval_t rval; ssize_t consumed_myself = 0; (void)opt_codec_ctx; /* * Phases of XER/XML processing: * Phase 0: Check that the opening tag matches our expectations. * Phase 1: Processing body and reacting on closing tag. */ if(ctx->phase > 1) RETURN(RC_FAIL); for(;;) { pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ /* * Get the next part of the XML stream. */ ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); if(ch_size == -1) { RETURN(RC_FAIL); } else { switch(ch_type) { case PXER_WMORE: RETURN(RC_WMORE); case PXER_COMMENT: /* Got XML comment */ ADVANCE(ch_size); /* Skip silently */ continue; case PXER_TEXT: if(ctx->phase == 0) { /* * We have to ignore whitespace here, * but in order to be forward compatible * with EXTENDED-XER (EMBED-VALUES, #25) * any text is just ignored here. */ } else { XER_GOT_BODY(buf_ptr, ch_size, size); } ADVANCE(ch_size); continue; case PXER_TAG: break; /* Check the rest down there */ } } assert(ch_type == PXER_TAG && size); tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); /* * Phase 0: * Expecting the opening tag * for the type being processed. * Phase 1: * Waiting for the closing XML tag. */ switch(tcv) { case XCT_BOTH: if(ctx->phase) break; /* Finished decoding of an empty element */ XER_GOT_EMPTY(); ADVANCE(ch_size); ctx->phase = 2; /* Phase out */ RETURN(RC_OK); case XCT_OPENING: if(ctx->phase) break; ADVANCE(ch_size); ctx->phase = 1; /* Processing body phase */ continue; case XCT_CLOSING: if(!ctx->phase) break; ADVANCE(ch_size); ctx->phase = 2; /* Phase out */ RETURN(RC_OK); case XCT_UNKNOWN_BO: /* * Certain tags in the body may be expected. */ if(opt_unexpected_tag_decoder && opt_unexpected_tag_decoder(struct_key, buf_ptr, ch_size) >= 0) { /* Tag's processed fine */ ADVANCE(ch_size); if(!ctx->phase) { /* We are not expecting * the closing tag anymore. */ ctx->phase = 2; /* Phase out */ RETURN(RC_OK); } continue; } /* Fall through */ default: break; /* Unexpected tag */ } ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); break; /* Dark and mysterious things have just happened */ } RETURN(RC_FAIL); } size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { const char *p = (const char *)chunk_buf; const char *pend = p + chunk_size; for(; p < pend; p++) { switch(*p) { /* X.693, #8.1.4 * HORISONTAL TAB (9) * LINE FEED (10) * CARRIAGE RETURN (13) * SPACE (32) */ case 0x09: case 0x0a: case 0x0d: case 0x20: continue; default: break; } break; } return (p - (const char *)chunk_buf); } /* * This is a vastly simplified, non-validating XML tree skipper. */ int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) { assert(*depth > 0); switch(tcv) { case XCT_BOTH: case XCT_UNKNOWN_BO: /* These negate each other. */ return 0; case XCT_OPENING: case XCT_UNKNOWN_OP: ++(*depth); return 0; case XCT_CLOSING: case XCT_UNKNOWN_CL: if(--(*depth) == 0) return (tcv == XCT_CLOSING) ? 2 : 1; return 0; default: return -1; } } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/xer_decoder.h000066400000000000000000000065201524544274600267660ustar00rootroot00000000000000/*- * Copyright (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _XER_DECODER_H_ #define _XER_DECODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* * The XER decoder of any ASN.1 type. May be invoked by the application. */ asn_dec_rval_t xer_decode(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ size_t size /* Size of data buffer */ ); /* * Type of the type-specific XER decoder function. */ typedef asn_dec_rval_t (xer_type_decoder_f)(asn_codec_ctx_t *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, void **struct_ptr, const char *opt_mname, /* Member name */ const void *buf_ptr, size_t size ); /******************************* * INTERNALLY USEFUL FUNCTIONS * *******************************/ /* * Generalized function for decoding the primitive values. * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8 * and others. This function should not be used by applications, as its API * is subject to changes. */ asn_dec_rval_t xer_decode_general(asn_codec_ctx_t *opt_codec_ctx, asn_struct_ctx_t *ctx, /* Type decoder context */ void *struct_key, /* Treated as opaque pointer */ const char *xml_tag, /* Expected XML tag name */ const void *buf_ptr, size_t size, int (*opt_unexpected_tag_decoder) (void *struct_key, const void *chunk_buf, size_t chunk_size), ssize_t (*body_receiver) (void *struct_key, const void *chunk_buf, size_t chunk_size, int have_more) ); /* * Fetch the next XER (XML) token from the stream. * The function returns the number of bytes occupied by the chunk type, * returned in the _ch_type. The _ch_type is only set (and valid) when * the return value is >= 0. */ typedef enum pxer_chunk_type { PXER_WMORE, /* Chunk type is not clear, more data expected. */ PXER_TAG, /* Complete XER tag */ PXER_TEXT, /* Plain text between XER tags */ PXER_COMMENT /* A comment, may be part of */ } pxer_chunk_type_e; ssize_t xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *_ch_type); /* * This function checks the buffer against the tag name is expected to occur. */ typedef enum xer_check_tag { XCT_BROKEN = 0, /* The tag is broken */ XCT_OPENING = 1, /* This is the tag */ XCT_CLOSING = 2, /* This is the tag */ XCT_BOTH = 3, /* This is the tag */ XCT__UNK__MASK = 4, /* Mask of everything unexpected */ XCT_UNKNOWN_OP = 5, /* Unexpected tag */ XCT_UNKNOWN_CL = 6, /* Unexpected tag */ XCT_UNKNOWN_BO = 7 /* Unexpected tag */ } xer_check_tag_e; xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, const char *need_tag); /* * Get the number of bytes consisting entirely of XER whitespace characters. * RETURN VALUES: * >=0: Number of whitespace characters in the string. */ size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size); /* * Skip the series of anticipated extensions. */ int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth); #ifdef __cplusplus } #endif #endif /* _XER_DECODER_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/xer_encoder.c000066400000000000000000000030051524544274600267660ustar00rootroot00000000000000/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* * The XER encoder of any type. May be invoked by the application. */ asn_enc_rval_t xer_encode(asn_TYPE_descriptor_t *td, void *sptr, enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *cb, void *app_key) { asn_enc_rval_t er, tmper; const char *mname; size_t mlen; int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2; if(!td || !sptr) goto cb_failed; mname = td->xml_tag; mlen = strlen(mname); ASN__CALLBACK3("<", 1, mname, mlen, ">", 1); tmper = td->xer_encoder(td, sptr, 1, xer_flags, cb, app_key); if(tmper.encoded == -1) return tmper; ASN__CALLBACK3("\n", xcan); er.encoded = 4 + xcan + (2 * mlen) + tmper.encoded; ASN__ENCODED_OK(er); cb_failed: ASN__ENCODE_FAILED; } /* * This is a helper function for xer_fprint, which directs all incoming data * into the provided file descriptor. */ static int xer__print2fp(const void *buffer, size_t size, void *app_key) { FILE *stream = (FILE *)app_key; if(fwrite(buffer, 1, size, stream) != size) return -1; return 0; } int xer_fprint(FILE *stream, asn_TYPE_descriptor_t *td, void *sptr) { asn_enc_rval_t er; if(!stream) stream = stdout; if(!td || !sptr) return -1; er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream); if(er.encoded == -1) return -1; return fflush(stream); } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/xer_encoder.h000066400000000000000000000032411524544274600267750ustar00rootroot00000000000000/*- * Copyright (c) 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _XER_ENCODER_H_ #define _XER_ENCODER_H_ #include #ifdef __cplusplus extern "C" { #endif struct asn_TYPE_descriptor_s; /* Forward declaration */ /* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */ enum xer_encoder_flags_e { /* Mode of encoding */ XER_F_BASIC = 0x01, /* BASIC-XER (pretty-printing) */ XER_F_CANONICAL = 0x02 /* Canonical XER (strict rules) */ }; /* * The XER encoder of any type. May be invoked by the application. */ asn_enc_rval_t xer_encode(struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *consume_bytes_cb, void *app_key /* Arbitrary callback argument */ ); /* * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) * output into the chosen file pointer. * RETURN VALUES: * 0: The structure is printed. * -1: Problem printing the structure. * WARNING: No sensible errno value is returned. */ int xer_fprint(FILE *stream, struct asn_TYPE_descriptor_s *td, void *sptr); /* * Type of the generic XER encoder. */ typedef asn_enc_rval_t (xer_type_encoder_f)( struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ int ilevel, /* Level of indentation */ enum xer_encoder_flags_e xer_flags, asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ void *app_key /* Arbitrary callback argument */ ); #ifdef __cplusplus } #endif #endif /* _XER_ENCODER_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/xer_support.c000066400000000000000000000126401524544274600270700ustar00rootroot00000000000000/* * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. * Copyright (c) 2003, 2004, 2005 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include /* Parser states */ typedef enum { ST_TEXT, ST_TAG_START, ST_TAG_BODY, ST_TAG_QUOTE_WAIT, ST_TAG_QUOTED_STRING, ST_TAG_UNQUOTED_STRING, ST_COMMENT_WAIT_DASH1, /* ""[0] */ ST_COMMENT_CLO_RT /* "-->"[1] */ } pstate_e; static const int _charclass[256] = { 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0, /* 01234567 89 */ 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* ABCDEFG HIJKLMNO */ 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0, /* PQRSTUVW XYZ */ 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* abcdefg hijklmno */ 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0 /* pqrstuvw xyz */ }; #define WHITESPACE(c) (_charclass[(unsigned char)(c)] == 1) #define ALNUM(c) (_charclass[(unsigned char)(c)] >= 2) #define ALPHA(c) (_charclass[(unsigned char)(c)] == 3) /* Aliases for characters, ASCII/UTF-8 */ #define EXCLAM 0x21 /* '!' */ #define CQUOTE 0x22 /* '"' */ #define CDASH 0x2d /* '-' */ #define CSLASH 0x2f /* '/' */ #define LANGLE 0x3c /* '<' */ #define CEQUAL 0x3d /* '=' */ #define RANGLE 0x3e /* '>' */ #define CQUEST 0x3f /* '?' */ /* Invoke token callback */ #define TOKEN_CB_CALL(type, _ns, _current_too, _final) do { \ int _ret; \ pstate_e ns = _ns; \ ssize_t _sz = (p - chunk_start) + _current_too; \ if (!_sz) { \ /* Shortcut */ \ state = _ns; \ break; \ } \ _ret = cb(type, chunk_start, _sz, key); \ if(_ret < _sz) { \ if(_current_too && _ret == -1) \ state = ns; \ goto finish; \ } \ chunk_start = p + _current_too; \ state = ns; \ } while(0) #define TOKEN_CB(_type, _ns, _current_too) \ TOKEN_CB_CALL(_type, _ns, _current_too, 0) #define PXML_TAG_FINAL_CHUNK_TYPE PXML_TAG_END #define PXML_COMMENT_FINAL_CHUNK_TYPE PXML_COMMENT_END #define TOKEN_CB_FINAL(_type, _ns, _current_too) \ TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1) /* * Parser itself */ ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) { pstate_e state = (pstate_e)*stateContext; const char *chunk_start = (const char *)xmlbuf; const char *p = chunk_start; const char *end = p + size; for(; p < end; p++) { int C = *(const unsigned char *)p; switch(state) { case ST_TEXT: /* * Initial state: we're in the middle of some text, * or just have started. */ if (C == LANGLE) /* We're now in the tag, probably */ TOKEN_CB(PXML_TEXT, ST_TAG_START, 0); break; case ST_TAG_START: if (ALPHA(C) || (C == CSLASH)) state = ST_TAG_BODY; else if (C == EXCLAM) state = ST_COMMENT_WAIT_DASH1; else /* * Not characters and not whitespace. * Must be something like "3 < 4". */ TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */ break; case ST_TAG_BODY: switch(C) { case RANGLE: /* End of the tag */ TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); break; case LANGLE: /* * The previous tag wasn't completed, but still * recognized as valid. (Mozilla-compatible) */ TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0); break; case CEQUAL: state = ST_TAG_QUOTE_WAIT; break; } break; case ST_TAG_QUOTE_WAIT: /* * State after the equal sign ("=") in the tag. */ switch(C) { case CQUOTE: state = ST_TAG_QUOTED_STRING; break; case RANGLE: /* End of the tag */ TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); break; default: if(!WHITESPACE(C)) /* Unquoted string value */ state = ST_TAG_UNQUOTED_STRING; } break; case ST_TAG_QUOTED_STRING: /* * Tag attribute's string value in quotes. */ if(C == CQUOTE) { /* Return back to the tag state */ state = ST_TAG_BODY; } break; case ST_TAG_UNQUOTED_STRING: if(C == RANGLE) { /* End of the tag */ TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); } else if(WHITESPACE(C)) { /* Return back to the tag state */ state = ST_TAG_BODY; } break; case ST_COMMENT_WAIT_DASH1: if(C == CDASH) { state = ST_COMMENT_WAIT_DASH2; } else { /* Some ordinary tag. */ state = ST_TAG_BODY; } break; case ST_COMMENT_WAIT_DASH2: if(C == CDASH) { /* Seen "<--" */ state = ST_COMMENT; } else { /* Some ordinary tag */ state = ST_TAG_BODY; } break; case ST_COMMENT: if(C == CDASH) { state = ST_COMMENT_CLO_DASH2; } break; case ST_COMMENT_CLO_DASH2: if(C == CDASH) { state = ST_COMMENT_CLO_RT; } else { /* This is not an end of a comment */ state = ST_COMMENT; } break; case ST_COMMENT_CLO_RT: if(C == RANGLE) { TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1); } else if(C == CDASH) { /* Maintain current state, still waiting for '>' */ } else { state = ST_COMMENT; } break; } /* switch(*ptr) */ } /* for() */ /* * Flush the partially processed chunk, state permitting. */ if(p - chunk_start) { switch (state) { case ST_COMMENT: TOKEN_CB(PXML_COMMENT, state, 0); break; case ST_TEXT: TOKEN_CB(PXML_TEXT, state, 0); break; default: break; /* a no-op */ } } finish: *stateContext = (int)state; return chunk_start - (const char *)xmlbuf; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/generated/xer_support.h000066400000000000000000000034241524544274600270750ustar00rootroot00000000000000/* * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _XER_SUPPORT_H_ #define _XER_SUPPORT_H_ #include /* Platform-specific types */ #ifdef __cplusplus extern "C" { #endif /* * Types of data transferred to the application. */ typedef enum { PXML_TEXT, /* Plain text between XML tags. */ PXML_TAG, /* A tag, starting with '<'. */ PXML_COMMENT, /* An XML comment, including "". */ /* * The following chunk types are reported if the chunk * terminates the specified XML element. */ PXML_TAG_END, /* Tag ended */ PXML_COMMENT_END /* Comment ended */ } pxml_chunk_type_e; /* * Callback function that is called by the parser when parsed data is * available. The _opaque is the pointer to a field containing opaque user * data specified in pxml_create() call. The chunk type is _type and the text * data is the piece of buffer identified by _bufid (as supplied to * pxml_feed() call) starting at offset _offset and of _size bytes size. * The chunk is NOT '\0'-terminated. */ typedef int (pxml_callback_f)(pxml_chunk_type_e _type, const void *_chunk_data, size_t _chunk_size, void *_key); /* * Parse the given buffer as it were a chunk of XML data. * Invoke the specified callback each time the meaninful data is found. * This function returns number of bytes consumed from the bufer. * It will always be lesser than or equal to the specified _size. * The next invocation of this function must account the difference. */ ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size, pxml_callback_f *cb, void *_key); #ifdef __cplusplus } #endif #endif /* _XER_SUPPORT_H_ */ asn1tools-0.169.0/examples/benchmarks/c_source/asn1c/main.c000066400000000000000000000060031524544274600234600ustar00rootroot00000000000000#include #include #include #include #include #include "PDU.h" static void *alloc(size_t size) { void *buf_p; buf_p = calloc(1, size); assert(buf_p != NULL); return (buf_p); } int main(int argc, const char *argv[]) { int i; int res; asn_enc_rval_t encrv; asn_dec_rval_t decrv; uint8_t encoded[40]; PDU_t *decoded_p; B_t *b_p; D_t *d_p; decoded_p = alloc(sizeof(*decoded_p)); decoded_p->a = 12345678; decoded_p->b.present = PDU__b_PR_a; /* First element. */ b_p = alloc(sizeof(*b_p)); b_p->present = B_PR_a; b_p->choice.a.a = alloc(sizeof(*b_p->choice.a.a)); b_p->choice.a.a->c = 0; b_p->choice.a.b = 4294967295; b_p->choice.a.c.present = C__c_PR_a; d_p = alloc(sizeof(*d_p)); res = OCTET_STRING_fromBuf(d_p, "\x00\x01\x02", 3); assert(res == 0); res = ASN_SEQUENCE_ADD(&b_p->choice.a.c.choice.a, d_p); assert(res == 0); d_p = alloc(sizeof(*d_p)); res = OCTET_STRING_fromBuf(d_p, "\x00\x01\x02\x03", 4); assert(res == 0); res = ASN_SEQUENCE_ADD(&b_p->choice.a.c.choice.a, d_p); assert(res == 0); d_p = alloc(sizeof(*d_p)); res = OCTET_STRING_fromBuf(d_p, "\x00\x01\x02\x03\x04", 5); assert(res == 0); res = ASN_SEQUENCE_ADD(&b_p->choice.a.c.choice.a, d_p); assert(res == 0); b_p->choice.a.d.a = 1; res = ASN_SEQUENCE_ADD(&decoded_p->b.choice.a, b_p); assert(res == 0); /* Second element. */ b_p = alloc(sizeof(*b_p)); b_p->present = B_PR_b; res = OCTET_STRING_fromBuf( &b_p->choice.b, "\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a", 16); assert(res == 0); res = ASN_SEQUENCE_ADD(&decoded_p->b.choice.a, b_p); assert(res == 0); for (i = 0; i < atoi(argv[1]); i++) { /* Encode the PDU. */ encrv = uper_encode_to_buffer(&asn_DEF_PDU, decoded_p, &encoded[0], sizeof(encoded)); assert((encrv.encoded + 7) / 8 == sizeof(encoded)); assert(memcmp(&encoded[0], "\x80\xbc\x61\x4e\x02\x0f\xff\xff\xff\xf1\x00\x00\x81\x18" "\x00\x08\x10\x1a\x00\x00\x81\x01\x82\x7e\xb4\xb4\xb4\xb4" "\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4", sizeof(encoded)) == 0); ASN_STRUCT_FREE(asn_DEF_PDU, decoded_p); /* Decode the PDU. */ decoded_p = NULL; decrv = uper_decode_complete(NULL, &asn_DEF_PDU, (void **)&decoded_p, &encoded[0], sizeof(encoded)); assert(decrv.consumed == sizeof(encoded)); /* Just a sanity check that decoding was performed. */ assert(decoded_p->a == 12345678); } ASN_STRUCT_FREE(asn_DEF_PDU, decoded_p); return (0); } asn1tools-0.169.0/examples/benchmarks/c_source/asn1scc/000077500000000000000000000000001524544274600227175ustar00rootroot00000000000000asn1tools-0.169.0/examples/benchmarks/c_source/asn1scc/Makefile000066400000000000000000000010211524544274600243510ustar00rootroot00000000000000all: gcc $(CFLAGS) $(OPT_SIZE) generated/*.c main.c -o main size main readelf -s -W main | sort -k3 -n valgrind $(MASSIF_FLAGS) --massif-out-file=main.massif ./main 1 ms_print main.massif time ./main $(ENCODE_DECODE_ITERATIONS) gcc $(CFLAGS) $(OPT_SPEED) generated/*.c main.c -o main time ./main $(ENCODE_DECODE_ITERATIONS) # Execute in asn1scc docker image. generate: rm -rf generated mkdir -p generated cd generated && \ mono /usr/local/share/asn1scc/asn1.exe -c -uPER ../my_protocol.asn include ../common.mk asn1tools-0.169.0/examples/benchmarks/c_source/asn1scc/generated/000077500000000000000000000000001524544274600246555ustar00rootroot00000000000000asn1tools-0.169.0/examples/benchmarks/c_source/asn1scc/generated/acn.c000066400000000000000000000775701524544274600256020ustar00rootroot00000000000000#include #include #include #include #include "asn1crt.h" static byte masks[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; static flag RequiresReverse(void) { short int word = 0x0001; char *b = (char *) &word; return b[0] == 1; } void Acn_AlignToNextByte(BitStream* pBitStrm) { if (pBitStrm->currentBit != 0) { pBitStrm->currentBit=0; pBitStrm->currentByte++; CHECK_BIT_STREAM(pBitStrm); } } void Acn_AlignToNextWord(BitStream* pBitStrm) { Acn_AlignToNextByte(pBitStrm); pBitStrm->currentByte+=pBitStrm->currentByte%2; CHECK_BIT_STREAM(pBitStrm); } void Acn_AlignToNextDWord(BitStream* pBitStrm) { Acn_AlignToNextByte(pBitStrm); pBitStrm->currentByte+=pBitStrm->currentByte%4; CHECK_BIT_STREAM(pBitStrm); } /*ACN Integer functions*/ void Acn_Enc_Int_PositiveInteger_ConstSize(BitStream* pBitStrm, asn1SccUint intVal, int encodedSizeInBits) { int nBits = 0; if (encodedSizeInBits==0) return; /* Get number of bits*/ nBits = GetNumberOfBitsForNonNegativeInteger(intVal); /* put required zeros*/ BitStream_AppendNBitZero(pBitStrm, encodedSizeInBits-nBits); /*Encode number */ BitStream_EncodeNonNegativeInteger(pBitStrm, intVal); CHECK_BIT_STREAM(pBitStrm); } void Acn_Enc_Int_PositiveInteger_ConstSize_8(BitStream* pBitStrm, asn1SccUint intVal) { BitStream_AppendByte0(pBitStrm, (byte)intVal); CHECK_BIT_STREAM(pBitStrm); } static void Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_B(BitStream* pBitStrm, asn1SccUint intVal, int size) { int i=0; asn1SccUint tmp = intVal; asn1SccUint mask = 0xFF; mask <<= (size-1)*8; for (i=0; i>((size-i-1)*8)); BitStream_AppendByte0(pBitStrm, ByteToEncode); mask>>=8; } CHECK_BIT_STREAM(pBitStrm); } void Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_16(BitStream* pBitStrm, asn1SccUint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_B(pBitStrm, intVal, 2); } void Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_32(BitStream* pBitStrm, asn1SccUint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_B(pBitStrm, intVal, 4); } void Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_64(BitStream* pBitStrm, asn1SccUint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_B(pBitStrm, intVal, 8); } static void Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_N(BitStream* pBitStrm, asn1SccUint intVal, int size) { int i=0; asn1SccUint tmp = intVal; for (i=0; i>=8; } CHECK_BIT_STREAM(pBitStrm); } void Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_16(BitStream* pBitStrm, asn1SccUint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_N(pBitStrm, intVal, 2); } void Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_32(BitStream* pBitStrm, asn1SccUint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_N(pBitStrm, intVal, 4); } void Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_64(BitStream* pBitStrm, asn1SccUint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_N(pBitStrm, intVal, 8); } flag Acn_Dec_Int_PositiveInteger_ConstSize(BitStream* pBitStrm, asn1SccUint* pIntVal, int encodedSizeInBits) { asn1SccUint tmp=0; if (BitStream_DecodeNonNegativeInteger(pBitStrm, &tmp, encodedSizeInBits)) { *pIntVal = tmp; return TRUE; } return FALSE; } flag Acn_Dec_Int_PositiveInteger_ConstSize_8(BitStream* pBitStrm, asn1SccUint* pIntVal) { byte v=0; if (!BitStream_ReadByte(pBitStrm, &v)) return FALSE; *pIntVal = v; return TRUE; } static flag Acn_Dec_Int_PositiveInteger_ConstSize_big_endian_N(BitStream* pBitStrm, asn1SccUint* pIntVal, int SizeInBytes) { int i; asn1SccUint ret = 0; *pIntVal = 0; for(i=0; i> ((sizeof(asn1SccUint)-1)*8)); BitStream_AppendByte0(pBitStrm, ByteToEncode); val <<= 8; } } int GetLengthInBytesOfUInt(asn1SccUint64 v); void Acn_Enc_Int_PositiveInteger_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccUint intVal) { asn1SccUint val = intVal; byte nBytes = (byte)GetLengthInBytesOfUInt(val); /* encode length */ BitStream_AppendByte0(pBitStrm, nBytes); /* Encode integer data*/ Encode_UnsignedInteger(pBitStrm, val, nBytes); CHECK_BIT_STREAM(pBitStrm); } flag Acn_Dec_Int_PositiveInteger_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccUint* pIntVal) { byte nBytes; int i; asn1SccUint v=0; if (!BitStream_ReadByte(pBitStrm, &nBytes)) return FALSE; for(i=0;i=0) { BitStream_AppendNBitZero(pBitStrm,encodedSizeInBits-GetNumberOfBitsForNonNegativeInteger((asn1SccUint)intVal)); BitStream_EncodeNonNegativeInteger(pBitStrm, (asn1SccUint) intVal); } else { BitStream_AppendNBitOne(pBitStrm,encodedSizeInBits-GetNumberOfBitsForNonNegativeInteger((asn1SccUint)(-intVal-1))); BitStream_EncodeNonNegativeIntegerNeg(pBitStrm, (asn1SccUint)(-intVal-1), 1); } CHECK_BIT_STREAM(pBitStrm); } void Acn_Enc_Int_TwosComplement_ConstSize_8(BitStream* pBitStrm, asn1SccSint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_8(pBitStrm, int2uint(intVal)); } void Acn_Enc_Int_TwosComplement_ConstSize_big_endian_16(BitStream* pBitStrm, asn1SccSint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_16(pBitStrm, int2uint(intVal)); } void Acn_Enc_Int_TwosComplement_ConstSize_big_endian_32(BitStream* pBitStrm, asn1SccSint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_32(pBitStrm, int2uint(intVal)); } void Acn_Enc_Int_TwosComplement_ConstSize_big_endian_64(BitStream* pBitStrm, asn1SccSint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_64(pBitStrm, int2uint(intVal)); } void Acn_Enc_Int_TwosComplement_ConstSize_little_endian_16(BitStream* pBitStrm, asn1SccSint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_16(pBitStrm, int2uint(intVal)); } void Acn_Enc_Int_TwosComplement_ConstSize_little_endian_32(BitStream* pBitStrm, asn1SccSint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_32(pBitStrm, int2uint(intVal)); } void Acn_Enc_Int_TwosComplement_ConstSize_little_endian_64(BitStream* pBitStrm, asn1SccSint intVal) { Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_64(pBitStrm, int2uint(intVal)); } flag Acn_Dec_Int_TwosComplement_ConstSize(BitStream* pBitStrm, asn1SccSint* pIntVal, int encodedSizeInBits) { int i; flag valIsNegative=FALSE; int nBytes = encodedSizeInBits/8; int rstBits = encodedSizeInBits % 8; byte b=0; *pIntVal = 0; for(i=0;i0x7F; if (valIsNegative) *pIntVal=-1; } *pIntVal = (*pIntVal<<8) | b; } if (rstBits>0) { if (!BitStream_ReadPartialByte(pBitStrm, &b,(byte)rstBits)) return FALSE; if (nBytes == 0) { valIsNegative = b & masks[8-rstBits]; if (valIsNegative) *pIntVal=-1; } *pIntVal = (*pIntVal<0) { v = MAX_INT; isNegative = 1; } v = (v<<8) | b; } if (isNegative) { *pIntVal = -((asn1SccSint)(~v)) - 1; } else { *pIntVal = (asn1SccSint)v; } return TRUE; } //return values is in nibbles static int Acn_Get_Int_Size_BCD(asn1SccUint intVal) { int ret=0; while(intVal>0) { intVal/=10; ret++; } return ret; } void Acn_Enc_Int_BCD_ConstSize(BitStream* pBitStrm, asn1SccUint intVal, int encodedSizeInNibbles) { int i = 0; int totalNibbles = 0; char tmp[100]; memset(tmp, 0x0, sizeof(tmp)); assert(100 >= encodedSizeInNibbles); while (intVal>0) { tmp[totalNibbles++] = (char)(intVal % 10); intVal /= 10; } assert(encodedSizeInNibbles >= totalNibbles); for (i = encodedSizeInNibbles - 1; i >= 0; i--) { BitStream_AppendPartialByte(pBitStrm, (byte)tmp[i], 4, 0); } CHECK_BIT_STREAM(pBitStrm); } flag Acn_Dec_Int_BCD_ConstSize(BitStream* pBitStrm, asn1SccUint* pIntVal, int encodedSizeInNibbles) { byte digit; asn1SccUint ret = 0; while (encodedSizeInNibbles>0) { if (!BitStream_ReadPartialByte(pBitStrm, &digit, 4)) return FALSE; ret *= 10; ret += digit; encodedSizeInNibbles--; } *pIntVal = ret; return TRUE; } void Acn_Enc_Int_BCD_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccUint intVal) { int nNibbles = Acn_Get_Int_Size_BCD(intVal); /* encode length */ BitStream_AppendByte0(pBitStrm,(byte)nNibbles); /* Encode Number */ Acn_Enc_Int_BCD_ConstSize(pBitStrm, intVal, nNibbles); CHECK_BIT_STREAM(pBitStrm); } flag Acn_Dec_Int_BCD_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccUint* pIntVal) { byte nNibbles=0; if (BitStream_ReadByte(pBitStrm, &nNibbles)) return Acn_Dec_Int_BCD_ConstSize(pBitStrm, pIntVal, nNibbles); return FALSE; } //encoding puts an 'F' at the end void Acn_Enc_Int_BCD_VarSize_NullTerminated(BitStream* pBitStrm, asn1SccUint intVal) { int nNibbles = Acn_Get_Int_Size_BCD(intVal); /* Encode Number */ Acn_Enc_Int_BCD_ConstSize(pBitStrm, intVal, nNibbles); BitStream_AppendPartialByte(pBitStrm,0xF,4,0); CHECK_BIT_STREAM(pBitStrm); } flag Acn_Dec_Int_BCD_VarSize_NullTerminated(BitStream* pBitStrm, asn1SccUint* pIntVal) { byte digit; asn1SccUint ret = 0; for (;;) { if (!BitStream_ReadPartialByte(pBitStrm, &digit, 4)) return FALSE; if (digit>9) break; ret *= 10; ret += digit; } *pIntVal = ret; return TRUE; } void Acn_Enc_UInt_ASCII_ConstSize(BitStream* pBitStrm, asn1SccUint intVal, int encodedSizeInBytes) { int i = 0; int totalNibbles = 0; char tmp[100]; memset(tmp, 0x0, sizeof(tmp)); assert(100 >= encodedSizeInBytes); while (intVal>0) { tmp[totalNibbles++] = (char)(intVal % 10); intVal /= 10; } assert(encodedSizeInBytes >= totalNibbles); for (i = encodedSizeInBytes - 1; i >= 0; i--) { BitStream_AppendByte0(pBitStrm, (byte)(tmp[i] + '0')); } CHECK_BIT_STREAM(pBitStrm); } void Acn_Enc_SInt_ASCII_ConstSize(BitStream* pBitStrm, asn1SccSint intVal, int encodedSizeInBytes) { if (intVal<0) { intVal = -intVal; BitStream_AppendByte0(pBitStrm, '-'); } else { BitStream_AppendByte0(pBitStrm, '+'); } encodedSizeInBytes--; assert(intVal >= 0); Acn_Enc_UInt_ASCII_ConstSize(pBitStrm, intVal, encodedSizeInBytes); } flag Acn_Dec_UInt_ASCII_ConstSize(BitStream* pBitStrm, asn1SccUint* pIntVal, int encodedSizeInBytes) { byte digit; asn1SccUint ret = 0; while (encodedSizeInBytes>0) { if (!BitStream_ReadByte(pBitStrm, &digit)) return FALSE; ASSERT_OR_RETURN_FALSE(digit >= '0' && digit <= '9'); digit = (byte)((int)digit - '0'); ret *= 10; ret += digit; encodedSizeInBytes--; } *pIntVal = ret; return TRUE; } flag Acn_Dec_SInt_ASCII_ConstSize(BitStream* pBitStrm, asn1SccSint* pIntVal, int encodedSizeInBytes) { byte digit; asn1SccUint ret = 0; int sign = 1; if (!BitStream_ReadByte(pBitStrm, &digit)) return FALSE; if (digit == '+') sign = 1; else if (digit == '-') sign = -1; else { ASSERT_OR_RETURN_FALSE(0); } encodedSizeInBytes--; if (!Acn_Dec_UInt_ASCII_ConstSize(pBitStrm, &ret, encodedSizeInBytes)) { return false; } *pIntVal = (asn1SccSint)ret; *pIntVal = sign*(*pIntVal); return TRUE; } //return values is in bytes static int Acn_Get_Int_Size_ASCII(asn1SccSint intVal) { #if WORD_SIZE==8 //the number of digits plus one character for the sign '+' or '-' if (intVal == (-9223372036854775807 - 1)) return 20; #endif if (intVal<0) return Acn_Get_Int_Size_BCD(-intVal) +1; return Acn_Get_Int_Size_BCD(intVal) +1; } void Acn_Enc_UInt_ASCII_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccUint intVal) { byte nChars = (byte)Acn_Get_Int_Size_BCD(intVal); /* encode length */ BitStream_AppendByte0(pBitStrm, nChars); /* Encode Number */ Acn_Enc_UInt_ASCII_ConstSize(pBitStrm, intVal, nChars); CHECK_BIT_STREAM(pBitStrm); } void Acn_Enc_SInt_ASCII_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccSint intVal) { byte nChars = (byte)Acn_Get_Int_Size_ASCII(intVal); /* encode length */ BitStream_AppendByte0(pBitStrm, nChars); /* Encode Number */ Acn_Enc_SInt_ASCII_ConstSize(pBitStrm, intVal, nChars); CHECK_BIT_STREAM(pBitStrm); } flag Acn_Dec_UInt_ASCII_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccUint* pIntVal) { byte nChars = 0; if (BitStream_ReadByte(pBitStrm, &nChars)) return Acn_Dec_UInt_ASCII_ConstSize(pBitStrm, pIntVal, nChars); return FALSE; } flag Acn_Dec_SInt_ASCII_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccSint* pIntVal) { byte nChars=0; if (BitStream_ReadByte(pBitStrm, &nChars)) return Acn_Dec_SInt_ASCII_ConstSize(pBitStrm, pIntVal, nChars); return FALSE; } void Acn_Enc_UInt_ASCII_VarSize_NullTerminated(BitStream* pBitStrm, asn1SccUint intVal) { int nChars = Acn_Get_Int_Size_BCD(intVal); /* Encode Number */ Acn_Enc_UInt_ASCII_ConstSize(pBitStrm, intVal, nChars); BitStream_AppendByte0(pBitStrm, 0x0); CHECK_BIT_STREAM(pBitStrm); } void Acn_Enc_SInt_ASCII_VarSize_NullTerminated(BitStream* pBitStrm, asn1SccSint intVal) { int nChars = Acn_Get_Int_Size_ASCII(intVal); /* Encode Number */ Acn_Enc_SInt_ASCII_ConstSize(pBitStrm, intVal, nChars); BitStream_AppendByte0(pBitStrm,0x0); CHECK_BIT_STREAM(pBitStrm); } flag Acn_Dec_UInt_ASCII_VarSize_NullTerminated(BitStream* pBitStrm, asn1SccUint* pIntVal) { byte digit; asn1SccUint ret = 0; for (;;) { if (!BitStream_ReadByte(pBitStrm, &digit)) return FALSE; if (digit == 0x0) break; digit = (byte)((int)digit - '0'); ret *= 10; ret += digit; } *pIntVal = ret; return TRUE; } flag Acn_Dec_Int_ASCII_VarSize_NullTerminated(BitStream* pBitStrm, asn1SccSint* pIntVal) { byte digit; asn1SccUint ret = 0; flag isNegative = FALSE; if (!BitStream_ReadByte(pBitStrm, &digit)) return FALSE; ASSERT_OR_RETURN_FALSE(digit == '-' || digit == '+'); if (digit == '-') isNegative = TRUE; if (!Acn_Dec_UInt_ASCII_VarSize_NullTerminated(pBitStrm, &ret)) return false; *pIntVal = (asn1SccSint)ret; if (isNegative) *pIntVal = -(*pIntVal); return TRUE; } /* Boolean Decode */ flag BitStream_ReadBitPattern(BitStream* pBitStrm, const byte* patternToRead, int nBitsToRead, flag* pBoolValue) { int nBytesToRead = nBitsToRead/8; int nRemainingBitsToRead = nBitsToRead%8; byte curByte; int i=0; *pBoolValue = TRUE; for(i=0;i 0) { if (!BitStream_ReadPartialByte(pBitStrm, &curByte, (byte)nRemainingBitsToRead)) return FALSE; if (curByte != patternToRead[nBytesToRead]>>(8-nRemainingBitsToRead)) *pBoolValue = FALSE; } return TRUE; } /*Real encoding functions*/ typedef union _float_tag { float f; byte b[sizeof(float)]; } _float; typedef union _double_tag { double f; byte b[sizeof(double)]; } _double; #define Acn_enc_real_big_endian(type) \ int i; \ _##type dat1; \ dat1.f = (type)realValue; \ if (!RequiresReverse()) { \ for(i=0;i<(int)sizeof(dat1);i++) \ BitStream_AppendByte0(pBitStrm,dat1.b[i]); \ } else { \ for(i=(int)(sizeof(dat1)-1);i>=0;i--) \ BitStream_AppendByte0(pBitStrm,dat1.b[i]); \ } \ #define Acn_dec_real_big_endian(type) \ int i; \ _##type dat1; \ dat1.f=0.0; \ if (!RequiresReverse()) { \ for(i=0;i<(int)sizeof(dat1);i++) { \ if (!BitStream_ReadByte(pBitStrm, &dat1.b[i])) \ return FALSE; \ } \ } else { \ for(i=(int)(sizeof(dat1)-1);i>=0;i--) { \ if (!BitStream_ReadByte(pBitStrm, &dat1.b[i])) \ return FALSE; \ } \ } \ *pRealValue = dat1.f; \ return TRUE; \ void Acn_Enc_Real_IEEE754_32_big_endian(BitStream* pBitStrm, double realValue) { Acn_enc_real_big_endian(float) } flag Acn_Dec_Real_IEEE754_32_big_endian(BitStream* pBitStrm, double* pRealValue) { Acn_dec_real_big_endian(float) } void Acn_Enc_Real_IEEE754_64_big_endian(BitStream* pBitStrm, double realValue) { Acn_enc_real_big_endian(double) } flag Acn_Dec_Real_IEEE754_64_big_endian(BitStream* pBitStrm, double* pRealValue) { Acn_dec_real_big_endian(double) } #define Acn_enc_real_little_endian(type) \ int i; \ _##type dat1; \ dat1.f = (type)realValue; \ if (RequiresReverse()) { \ for(i=0;i<(int)sizeof(dat1);i++) \ BitStream_AppendByte0(pBitStrm,dat1.b[i]); \ } else { \ for(i=(int)(sizeof(dat1)-1);i>=0;i--) \ BitStream_AppendByte0(pBitStrm,dat1.b[i]); \ } \ #define Acn_dec_real_little_endian(type) \ int i; \ _##type dat1; \ dat1.f=0.0; \ if (RequiresReverse()) { \ for(i=0;i<(int)sizeof(dat1);i++) { \ if (!BitStream_ReadByte(pBitStrm, &dat1.b[i])) \ return FALSE; \ } \ } else { \ for(i=(int)(sizeof(dat1)-1);i>=0;i--) { \ if (!BitStream_ReadByte(pBitStrm, &dat1.b[i])) \ return FALSE; \ } \ } \ *pRealValue = dat1.f; \ return TRUE; \ void Acn_Enc_Real_IEEE754_32_little_endian(BitStream* pBitStrm, double realValue) { Acn_enc_real_little_endian(float) } flag Acn_Dec_Real_IEEE754_32_little_endian(BitStream* pBitStrm, double* pRealValue) { Acn_dec_real_little_endian(float) } void Acn_Enc_Real_IEEE754_64_little_endian(BitStream* pBitStrm, double realValue) { Acn_enc_real_little_endian(double) } flag Acn_Dec_Real_IEEE754_64_little_endian(BitStream* pBitStrm, double* pRealValue) { Acn_dec_real_little_endian(double) } /* String functions*/ void Acn_Enc_String_Ascii_FixSize(BitStream* pBitStrm, asn1SccSint max, const char* strVal) { asn1SccSint i = 0; while (i #include #include #include #include #include "asn1crt.h" #ifndef INFINITY #ifdef __GNUC__ #define INFINITY (__builtin_inf()) #endif #endif static byte masks[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; static byte masksb[] = { 0x0, 0x1, 0x3, 0x7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF }; static asn1SccUint32 masks2[] = { 0x0, 0xFF, 0xFF00, 0xFF0000, 0xFF000000 }; /***********************************************************************************************/ /* Bit Stream Functions */ /***********************************************************************************************/ void BitStream_Init(BitStream* pBitStrm, byte* buf, long count) { pBitStrm->count = count; pBitStrm->buf = buf; memset(pBitStrm->buf,0x0,(size_t)count); pBitStrm->currentByte = 0; pBitStrm->currentBit=0; } void BitStream_AttachBuffer(BitStream* pBitStrm, unsigned char* buf, long count) { pBitStrm->count = count; pBitStrm->buf = buf; pBitStrm->currentByte = 0; pBitStrm->currentBit=0; } asn1SccSint BitStream_GetLength(BitStream* pBitStrm) { int ret = pBitStrm->currentByte; if (pBitStrm->currentBit) ret++; return ret; } void BitStream_AppendBitOne(BitStream* pBitStrm) { pBitStrm->buf[pBitStrm->currentByte] |= masks[pBitStrm->currentBit]; if (pBitStrm->currentBit<7) pBitStrm->currentBit++; else { pBitStrm->currentBit=0; pBitStrm->currentByte++; } assert(pBitStrm->currentByte*8+pBitStrm->currentBit<=pBitStrm->count*8); } void BitStream_AppendBitZero(BitStream* pBitStrm) { if (pBitStrm->currentBit<7) pBitStrm->currentBit++; else { pBitStrm->currentBit=0; pBitStrm->currentByte++; } assert(pBitStrm->currentByte*8+pBitStrm->currentBit<=pBitStrm->count*8); } void BitStream_AppendNBitZero(BitStream* pBitStrm, int nbits) { int totalBits = pBitStrm->currentBit + nbits; pBitStrm->currentBit = totalBits % 8; pBitStrm->currentByte += totalBits / 8; } void BitStream_AppendNBitOne(BitStream* pBitStrm, int nbits) { int i; while(nbits>=8) { BitStream_AppendByte(pBitStrm, 0xFF, FALSE); nbits-=8; } for(i=0; i=8) { BitStream_AppendByte(pBitStrm, srcBuffer[i], FALSE); nbits-=8; i++; } if (nbits > 0) { lastByte = (byte)(srcBuffer[i]>>(8-nbits)); BitStream_AppendPartialByte(pBitStrm, lastByte, (byte)nbits, FALSE); } } void BitStream_AppendBit(BitStream* pBitStrm, flag v) { if (v) pBitStrm->buf[pBitStrm->currentByte] |= masks[pBitStrm->currentBit]; if (pBitStrm->currentBit<7) pBitStrm->currentBit++; else { pBitStrm->currentBit=0; pBitStrm->currentByte++; } assert(pBitStrm->currentByte*8+pBitStrm->currentBit<=pBitStrm->count*8); } flag BitStream_ReadBit(BitStream* pBitStrm, flag* v) { *v = pBitStrm->buf[pBitStrm->currentByte] & masks[pBitStrm->currentBit]; if (pBitStrm->currentBit<7) pBitStrm->currentBit++; else { pBitStrm->currentBit=0; pBitStrm->currentByte++; } return pBitStrm->currentByte*8+pBitStrm->currentBit<=pBitStrm->count*8; } void BitStream_AppendByte(BitStream* pBitStrm, byte v, flag negate) { int cb = pBitStrm->currentBit; int ncb = 8 - cb; if (negate) v=(byte)~v; pBitStrm->buf[pBitStrm->currentByte++] |= (byte)(v >> cb); assert(pBitStrm->currentByte*8+pBitStrm->currentBit<=pBitStrm->count*8); if (cb) pBitStrm->buf[pBitStrm->currentByte] |= (byte)(v << ncb); } void BitStream_AppendByte0(BitStream* pBitStrm, byte v) { int cb = pBitStrm->currentBit; int ncb = 8 - cb; pBitStrm->buf[pBitStrm->currentByte++] |= (byte)(v >> cb); assert(pBitStrm->currentByte*8+pBitStrm->currentBit<=pBitStrm->count*8); if (cb) pBitStrm->buf[pBitStrm->currentByte] |= (byte)(v << ncb); } flag BitStream_ReadByte(BitStream* pBitStrm, byte* v) { int cb = pBitStrm->currentBit; int ncb = 8 - pBitStrm->currentBit; *v= (byte)(pBitStrm->buf[pBitStrm->currentByte++] << cb); if (cb) { *v |= (byte)(pBitStrm->buf[pBitStrm->currentByte] >> ncb); } return pBitStrm->currentByte*8+pBitStrm->currentBit<=pBitStrm->count*8; } flag BitStream_ReadBits(BitStream* pBitStrm, byte* BuffToWrite, int nbits) { int i=0; while (nbits >= 8) { if (!BitStream_ReadByte(pBitStrm, &BuffToWrite[i])) return FALSE; nbits-=8; i++; } if (nbits > 0) { if (!BitStream_ReadPartialByte(pBitStrm, &BuffToWrite[i], (byte)nbits)) return FALSE; BuffToWrite[i] = (byte)(BuffToWrite[i] << (8 - nbits)); } return TRUE; } /* nbits 1..7*/ void BitStream_AppendPartialByte(BitStream* pBitStrm, byte v, byte nbits, flag negate) { int cb = pBitStrm->currentBit; int totalBits = cb+nbits; int totalBitsForNextByte; if (negate) v=masksb[nbits]& ((byte)~v); if (totalBits<=8) { pBitStrm->buf[pBitStrm->currentByte] |= (byte)(v <<(8 -totalBits)); pBitStrm->currentBit+=nbits; if (pBitStrm->currentBit==8) { pBitStrm->currentBit=0; pBitStrm->currentByte++; } } else { totalBitsForNextByte = totalBits - 8; pBitStrm->buf[pBitStrm->currentByte++] |= (byte)(v >> totalBitsForNextByte); pBitStrm->buf[pBitStrm->currentByte] |= (byte)(v << (8 - totalBitsForNextByte)); pBitStrm->currentBit = totalBitsForNextByte; } assert(pBitStrm->currentByte*8+pBitStrm->currentBit<=pBitStrm->count*8); } /* nbits 1..7*/ flag BitStream_ReadPartialByte(BitStream* pBitStrm, byte *v, byte nbits) { int cb = pBitStrm->currentBit; int totalBits = cb+nbits; int totalBitsForNextByte; if (totalBits<=8) { *v = (byte)((pBitStrm->buf[pBitStrm->currentByte] >> (8 -totalBits)) & masksb[nbits]); pBitStrm->currentBit+=nbits; if (pBitStrm->currentBit==8) { pBitStrm->currentBit=0; pBitStrm->currentByte++; } } else { totalBitsForNextByte = totalBits - 8; *v = (byte)(pBitStrm->buf[pBitStrm->currentByte++] << totalBitsForNextByte); *v |= (byte)(pBitStrm->buf[pBitStrm->currentByte] >> (8 - totalBitsForNextByte)); *v &= masksb[nbits]; pBitStrm->currentBit = totalBitsForNextByte; } return pBitStrm->currentByte*8+pBitStrm->currentBit<=pBitStrm->count*8; } /***********************************************************************************************/ /***********************************************************************************************/ /***********************************************************************************************/ /***********************************************************************************************/ /* Integer Functions */ /***********************************************************************************************/ /***********************************************************************************************/ /***********************************************************************************************/ /***********************************************************************************************/ static void BitStream_EncodeNonNegativeInteger32Neg(BitStream* pBitStrm, asn1SccUint32 v, flag negate) { int cc; asn1SccUint32 curMask; int pbits; if (v==0) return; if (v<0x100) { cc = 8; curMask = 0x80; } else if (v<0x10000) { cc = 16; curMask = 0x8000; } else if (v<0x1000000) { cc = 24; curMask = 0x800000; } else { cc = 32; curMask = 0x80000000; } while( (v & curMask)==0 ) { curMask >>=1; cc--; } pbits = cc % 8; if (pbits) { cc-=pbits; BitStream_AppendPartialByte(pBitStrm,(byte)(v>>cc), (byte)pbits, negate); } while (cc) { asn1SccUint32 t1 = v & masks2[cc>>3]; cc-=8; BitStream_AppendByte(pBitStrm, (byte)(t1 >>cc), negate); } } static flag BitStream_DecodeNonNegativeInteger32Neg(BitStream* pBitStrm, asn1SccUint32* v, int nBits) { byte b; *v = 0; while(nBits>=8) { *v<<=8; if (!BitStream_ReadByte(pBitStrm, &b)) return FALSE; *v|= b; nBits -=8; } if (nBits) { *v<<=nBits; if (!BitStream_ReadPartialByte(pBitStrm, &b, (byte)nBits)) return FALSE; *v|=b; } return TRUE; } void BitStream_EncodeNonNegativeInteger(BitStream* pBitStrm, asn1SccUint v) { #if WORD_SIZE==8 if (v<0x100000000LL) BitStream_EncodeNonNegativeInteger32Neg(pBitStrm, (asn1SccUint32)v, 0); else { asn1SccUint32 hi = (asn1SccUint32)(v>>32); asn1SccUint32 lo = (asn1SccUint32)v; int nBits; BitStream_EncodeNonNegativeInteger32Neg(pBitStrm, hi, 0); nBits = GetNumberOfBitsForNonNegativeInteger(lo); BitStream_AppendNBitZero(pBitStrm, 32-nBits); BitStream_EncodeNonNegativeInteger32Neg(pBitStrm, lo, 0); } #else BitStream_EncodeNonNegativeInteger32Neg(pBitStrm, v, 0); #endif } flag BitStream_DecodeNonNegativeInteger(BitStream* pBitStrm, asn1SccUint* v, int nBits) { #if WORD_SIZE==8 asn1SccUint32 hi=0; asn1SccUint32 lo=0; flag ret; if (nBits<=32) { ret = BitStream_DecodeNonNegativeInteger32Neg(pBitStrm, &lo, nBits); *v = lo; return ret; } ret = BitStream_DecodeNonNegativeInteger32Neg(pBitStrm, &hi, 32) && BitStream_DecodeNonNegativeInteger32Neg(pBitStrm, &lo, nBits-32); *v = hi; *v <<=nBits-32; *v |= lo; return ret; #else return BitStream_DecodeNonNegativeInteger32Neg(pBitStrm, v, nBits); #endif } void BitStream_EncodeNonNegativeIntegerNeg(BitStream* pBitStrm, asn1SccUint v, flag negate) { #if WORD_SIZE==8 if (v<0x100000000LL) BitStream_EncodeNonNegativeInteger32Neg(pBitStrm, (asn1SccUint32)v, negate); else { int nBits; asn1SccUint32 hi = (asn1SccUint32)(v>>32); asn1SccUint32 lo = (asn1SccUint32)v; BitStream_EncodeNonNegativeInteger32Neg(pBitStrm, hi, negate); /*bug !!!!*/ if (negate) lo = ~lo; nBits = GetNumberOfBitsForNonNegativeInteger(lo); BitStream_AppendNBitZero(pBitStrm, 32-nBits); BitStream_EncodeNonNegativeInteger32Neg(pBitStrm, lo, 0); } #else BitStream_EncodeNonNegativeInteger32Neg(pBitStrm, v, negate); #endif } static int GetNumberOfBitsForNonNegativeInteger32(asn1SccUint32 v) { int ret=0; if (v<0x100) { ret = 0; } else if (v<0x10000) { ret = 8; v >>= 8; } else if (v<0x1000000) { ret = 16; v >>= 16; } else { ret = 24; v >>= 24; } while( v>0 ) { v >>= 1; ret++; } return ret; } int GetNumberOfBitsForNonNegativeInteger(asn1SccUint v) { #if WORD_SIZE==8 if (v<0x100000000LL) return GetNumberOfBitsForNonNegativeInteger32((asn1SccUint32)v); else { asn1SccUint32 hi = (asn1SccUint32)(v>>32); return 32 + GetNumberOfBitsForNonNegativeInteger32(hi); } #else return GetNumberOfBitsForNonNegativeInteger32(v); #endif } int GetLengthInBytesOfUInt(asn1SccUint64 v); int GetLengthInBytesOfUInt(asn1SccUint64 v) { int ret=0; asn1SccUint32 v32 = (asn1SccUint32)v; #if WORD_SIZE==8 if (v>0xFFFFFFFF) { ret = 4; v32 = (asn1SccUint32)(v>>32); } #endif if (v32<0x100) return ret+1; if (v32<0x10000) return ret+2; if (v32<0x1000000) return ret+3; return ret+4; } static int GetLengthSIntHelper(asn1SccUint v) { int ret=0; asn1SccUint32 v32 = (asn1SccUint32)v; #if WORD_SIZE==8 if (v>0x7FFFFFFF) { ret = 4; v32 = (asn1SccUint32)(v>>32); } #endif if (v32<=0x7F) return ret+1; if (v32<=0x7FFF) return ret+2; if (v32<=0x7FFFFF) return ret+3; return ret+4; } int GetLengthInBytesOfSInt(asn1SccSint v); /* prototype to disable warnings*/ int GetLengthInBytesOfSInt(asn1SccSint v) { if (v >= 0) return GetLengthSIntHelper((asn1SccUint)v); return GetLengthSIntHelper((asn1SccUint)(-v - 1)); } void BitStream_EncodeConstraintWholeNumber(BitStream* pBitStrm, asn1SccSint v, asn1SccSint min, asn1SccSint max) { int nRangeBits; int nBits; asn1SccUint range; assert(min<=max); range = (asn1SccUint)(max-min); if(!range) return; nRangeBits = GetNumberOfBitsForNonNegativeInteger(range); nBits = GetNumberOfBitsForNonNegativeInteger((asn1SccUint)(v-min)); BitStream_AppendNBitZero(pBitStrm, nRangeBits-nBits); BitStream_EncodeNonNegativeInteger(pBitStrm,(asn1SccUint)(v-min)); } void BitStream_EncodeConstraintPosWholeNumber(BitStream* pBitStrm, asn1SccUint v, asn1SccUint min, asn1SccUint max) { int nRangeBits; int nBits; asn1SccUint range; assert(min <= v); assert(v <= max); range = (asn1SccUint)(max - min); if (!range) return; nRangeBits = GetNumberOfBitsForNonNegativeInteger(range); nBits = GetNumberOfBitsForNonNegativeInteger(v - min); BitStream_AppendNBitZero(pBitStrm, nRangeBits - nBits); BitStream_EncodeNonNegativeInteger(pBitStrm, v - min); } flag BitStream_DecodeConstraintWholeNumber(BitStream* pBitStrm, asn1SccSint* v, asn1SccSint min, asn1SccSint max) { asn1SccUint uv; int nRangeBits; asn1SccUint range = (asn1SccUint)(max-min); ASSERT_OR_RETURN_FALSE(min<=max); *v=0; if(!range) { *v = min; return TRUE; } nRangeBits = GetNumberOfBitsForNonNegativeInteger(range); if (BitStream_DecodeNonNegativeInteger(pBitStrm, &uv, nRangeBits)) { *v = ((asn1SccSint)uv)+min; return TRUE; } return FALSE; } flag BitStream_DecodeConstraintPosWholeNumber(BitStream* pBitStrm, asn1SccUint* v, asn1SccUint min, asn1SccUint max) { asn1SccUint uv; int nRangeBits; asn1SccUint range = max - min; ASSERT_OR_RETURN_FALSE(min <= max); *v = 0; if (!range) { *v = min; return TRUE; } nRangeBits = GetNumberOfBitsForNonNegativeInteger(range); if (BitStream_DecodeNonNegativeInteger(pBitStrm, &uv, nRangeBits)) { *v = uv + min; return TRUE; } return FALSE; } void BitStream_EncodeSemiConstraintWholeNumber(BitStream* pBitStrm, asn1SccSint v, asn1SccSint min) { int nBytes; assert(v>=min); nBytes = GetLengthInBytesOfUInt((asn1SccUint)(v - min)); /* encode length */ BitStream_EncodeConstraintWholeNumber(pBitStrm, nBytes, 0, 255); /*8 bits, first bit is always 0*/ /* put required zeros*/ BitStream_AppendNBitZero(pBitStrm,nBytes*8-GetNumberOfBitsForNonNegativeInteger((asn1SccUint)(v-min))); /*Encode number */ BitStream_EncodeNonNegativeInteger(pBitStrm,(asn1SccUint)(v-min)); } void BitStream_EncodeSemiConstraintPosWholeNumber(BitStream* pBitStrm, asn1SccUint v, asn1SccUint min) { int nBytes; assert(v >= min); nBytes = GetLengthInBytesOfUInt(v - min); /* encode length */ BitStream_EncodeConstraintWholeNumber(pBitStrm, nBytes, 0, 255); /*8 bits, first bit is always 0*/ /* put required zeros*/ BitStream_AppendNBitZero(pBitStrm, nBytes * 8 - GetNumberOfBitsForNonNegativeInteger(v - min)); /*Encode number */ BitStream_EncodeNonNegativeInteger(pBitStrm, (v - min)); } flag BitStream_DecodeSemiConstraintWholeNumber(BitStream* pBitStrm, asn1SccSint* v, asn1SccSint min) { asn1SccSint nBytes; int i; *v=0; if (!BitStream_DecodeConstraintWholeNumber(pBitStrm, &nBytes, 0, 255)) return FALSE; for(i=0;i=0) { BitStream_AppendNBitZero(pBitStrm,nBytes*8-GetNumberOfBitsForNonNegativeInteger((asn1SccUint)v)); BitStream_EncodeNonNegativeInteger(pBitStrm,(asn1SccUint)(v)); } else { BitStream_AppendNBitOne(pBitStrm,nBytes*8-GetNumberOfBitsForNonNegativeInteger((asn1SccUint)(-v-1))); BitStream_EncodeNonNegativeIntegerNeg(pBitStrm, (asn1SccUint)(-v-1), 1); } } flag BitStream_DecodeUnConstraintWholeNumber(BitStream* pBitStrm, asn1SccSint* v) { asn1SccSint nBytes; int i; flag valIsNegative=FALSE; *v=0; if (!BitStream_DecodeConstraintWholeNumber(pBitStrm, &nBytes, 0, 255)) return FALSE; for(i=0;i0x7F; if (valIsNegative) *v=-1; } *v = (*v<<8) | b; } return TRUE; } /* Bynary encoding will be used REAL = M*B^E where M = S*N*2^F ENCODING is done within three parts part 1 is 1 byte header part 2 is 1 or more byte for exponent part 3 is 3 or more byte for mantissa (N) First byte S :0-->+, S:1-->-1 Base will be always be 2 (implied by 6th and 5th bit which are zero) ab: F (0..3) cd:00 --> 1 byte for exponent as 2's complement cd:01 --> 2 byte for exponent as 2's complement cd:10 --> 3 byte for exponent as 2's complement cd:11 --> 1 byte for encoding the length of the exponent, then the expoent 8 7 6 5 4 3 2 1 +-+-+-+-+-+-+-+-+ |1|S|0|0|a|b|c|d| +-+-+-+-+-+-+-+-+ */ void BitStream_EncodeReal(BitStream* pBitStrm, double v) { byte header=0x80; int nExpLen; int nManLen; int exponent; asn1SccUint64 mantissa; if (v==0.0) { BitStream_EncodeConstraintWholeNumber(pBitStrm, 0, 0, 0xFF); return; } if (v == INFINITY ) { BitStream_EncodeConstraintWholeNumber(pBitStrm, 1, 0, 0xFF); BitStream_EncodeConstraintWholeNumber(pBitStrm, 0x40, 0, 0xFF); return; } if (v == -INFINITY) { BitStream_EncodeConstraintWholeNumber(pBitStrm, 1, 0, 0xFF); BitStream_EncodeConstraintWholeNumber(pBitStrm, 0x41, 0, 0xFF); return; } if (v < 0) { header |= 0x40; v=-v; } CalculateMantissaAndExponent(v, &exponent, &mantissa); nExpLen = GetLengthInBytesOfSInt(exponent); nManLen = GetLengthInBytesOfUInt(mantissa); assert(nExpLen<=3); if (nExpLen == 2) header |= 1; else if (nExpLen == 3) header |= 2; /* encode length */ BitStream_EncodeConstraintWholeNumber(pBitStrm, 1+nExpLen+nManLen, 0, 0xFF); /* encode header */ BitStream_EncodeConstraintWholeNumber(pBitStrm, header, 0, 0xFF); /* encode exponent */ if (exponent>=0) { BitStream_AppendNBitZero(pBitStrm,nExpLen*8-GetNumberOfBitsForNonNegativeInteger((asn1SccUint)exponent)); BitStream_EncodeNonNegativeInteger(pBitStrm,(asn1SccUint)exponent); } else { BitStream_AppendNBitOne(pBitStrm,nExpLen*8-GetNumberOfBitsForNonNegativeInteger((asn1SccUint)(-exponent-1))); BitStream_EncodeNonNegativeIntegerNeg(pBitStrm,(asn1SccUint)(-exponent-1), 1); } /* encode mantissa */ BitStream_AppendNBitZero(pBitStrm,nManLen*8-GetNumberOfBitsForNonNegativeInteger((asn1SccUint)(mantissa))); BitStream_EncodeNonNegativeInteger(pBitStrm,mantissa); } flag DecodeRealAsBinaryEncoding(BitStream* pBitStrm, int length, byte header, double* v); flag BitStream_DecodeReal(BitStream* pBitStrm, double* v) { byte header; byte length; if (!BitStream_ReadByte(pBitStrm, &length)) return FALSE; if (length == 0) { *v=0.0; return TRUE; } if (!BitStream_ReadByte(pBitStrm, &header)) return FALSE; if (header==0x40) { *v = INFINITY; return TRUE; } if (header==0x41) { *v = -INFINITY; return TRUE; } return DecodeRealAsBinaryEncoding(pBitStrm, length-1, header, v); } flag DecodeRealAsBinaryEncoding(BitStream* pBitStrm, int length, byte header, double* v) { int sign=1; /*int base=2;*/ int F; unsigned factor=1; int expLen; int exponent = 0; int expFactor = 1; asn1SccUint N=0; int i; if (header & 0x40) sign = -1; if (header & 0x10) { /*base = 8;*/ expFactor = 3; } else if (header & 0x20) { /*base = 16;*/ expFactor = 4; } F= (header & 0x0C)>>2; factor<<=F; expLen = (header & 0x03) + 1; if (expLen>length) return FALSE; for(i=0;i0x7F) exponent=-1; } exponent = exponent<<8 | b; } length-=expLen; for(i=0;icount = count; pStrm->buf = buf; memset(pStrm->buf,0x0,(size_t)count); pStrm->currentByte = 0; pStrm->EncodeWhiteSpace = FALSE; } void ByteStream_AttachBuffer(ByteStream* pStrm, unsigned char* buf, long count) { pStrm->count = count; pStrm->buf = buf; pStrm->currentByte = 0; } asn1SccSint ByteStream_GetLength(ByteStream* pStrm) { return pStrm->currentByte; } #if WORD_SIZE==8 const asn1SccUint64 ber_aux[] = { 0xFF, 0xFF00, 0xFF0000, 0xFF000000, 0xFF00000000ULL, 0xFF0000000000ULL, 0xFF000000000000ULL, 0xFF00000000000000ULL }; #else const asn1SccUint32 ber_aux[] = { 0xFF, 0xFF00, 0xFF0000, 0xFF000000 }; #endif asn1SccUint int2uint(asn1SccSint v) { asn1SccUint ret = 0; if (v < 0) { ret = (asn1SccUint)(-v - 1); ret = ~ret; } else { ret = (asn1SccUint)v; }; return ret; } asn1SccSint uint2int(asn1SccUint v, int uintSizeInBytes) { int i; asn1SccUint tmp = 0x80; flag bIsNegative = (v & (tmp << ((uintSizeInBytes - 1) * 8)))>0; if (!bIsNegative) return (asn1SccSint)v; for (i = WORD_SIZE - 1; i >= uintSizeInBytes; i--) v |= ber_aux[i]; return -(asn1SccSint)(~v) - 1; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1scc/generated/asn1crt.h000066400000000000000000000470241524544274600264100ustar00rootroot00000000000000#ifndef ASN1SCC_ASN1CRT_H_ #define ASN1SCC_ASN1CRT_H_ #if (!defined(_MSC_VER) || _MSC_VER >= 1800) # ifndef SWIG # include # endif #else typedef unsigned char bool; #define true 1 #define false 0 #endif #ifdef __cplusplus extern "C" { #endif #ifndef NULL #define NULL 0 #endif #ifndef TRUE #define TRUE true #endif #ifndef FALSE #define FALSE false #endif #ifndef WORD_SIZE #define WORD_SIZE 8 #endif typedef int asn1SccSint32; typedef unsigned int asn1SccUint32; typedef unsigned char byte; typedef long long asn1SccSint64; typedef unsigned long long asn1SccUint64; #if WORD_SIZE==8 typedef asn1SccUint64 asn1SccUint; typedef asn1SccSint64 asn1SccSint; #else typedef asn1SccUint32 asn1SccUint; typedef asn1SccSint32 asn1SccSint; #endif #ifdef _MSC_VER # ifndef INFINITY # define INFINITY (DBL_MAX+DBL_MAX) # endif # ifndef NAN # define NAN (INFINITY-INFINITY) # endif #endif typedef bool flag; typedef char NullType; typedef struct { byte* buf; long count; long currentByte; /* Next available bit for writting. Possible vallues 0..7, 0 is most significant bit of current byte*/ int currentBit; } BitStream; typedef struct { byte* buf; long count; long currentByte; flag EncodeWhiteSpace; } ByteStream; typedef struct { int TokenID; char Value[100]; } Token; typedef struct { char Name[50]; char Value[100]; } XmlAttribute; typedef struct { XmlAttribute attrs[20]; int nCount; } XmlAttributeArray; #define ERR_INSUFFICIENT_DATA 101 #define ERR_INCORRECT_PER_STREAM 102 #define ERR_INVALID_CHOICE_ALTERNATIVE 103 #define ERR_INVALID_ENUM_VALUE 104 #define ERR_INVALID_XML_FILE 200 #define ERR_INVALID_BER_FILE 201 #define ERR_BER_LENGTH_MISMATCH 202 /* Bit strean functions */ void BitStream_Init(BitStream* pBitStrm, unsigned char* buf, long count); void BitStream_AttachBuffer(BitStream* pBitStrm, unsigned char* buf, long count); void BitStream_AppendBit(BitStream* pBitStrm, flag v); void BitStream_AppendBits(BitStream* pBitStrm, const byte* srcBuffer, int nBitsToWrite); void BitStream_AppendByte(BitStream* pBitStrm, byte v, flag negate); void BitStream_AppendByte0(BitStream* pBitStrm, byte v); void ByteStream_Init(ByteStream* pStrm, byte* buf, long count); void ByteStream_AttachBuffer(ByteStream* pStrm, unsigned char* buf, long count); asn1SccSint ByteStream_GetLength(ByteStream* pStrm); asn1SccSint BitStream_GetLength(BitStream* pBitStrm); void BitStream_AppendBitOne(BitStream* pBitStrm); void BitStream_AppendBitZero(BitStream* pBitStrm); flag BitStream_ReadBit(BitStream* pBitStrm, flag* v); flag BitStream_ReadBits(BitStream* pBitStrm, byte* BuffToWrite, int nBitsToRead); flag BitStream_ReadByte(BitStream* pBitStrm, byte* v); /* Integer functions */ void BitStream_EncodeUnConstraintWholeNumber(BitStream* pBitStrm, asn1SccSint v); void BitStream_EncodeSemiConstraintWholeNumber(BitStream* pBitStrm, asn1SccSint v, asn1SccSint min); void BitStream_EncodeSemiConstraintPosWholeNumber(BitStream* pBitStrm, asn1SccUint v, asn1SccUint min); void BitStream_EncodeConstraintWholeNumber(BitStream* pBitStrm, asn1SccSint v, asn1SccSint min, asn1SccSint max); void BitStream_EncodeConstraintPosWholeNumber(BitStream* pBitStrm, asn1SccUint v, asn1SccUint min, asn1SccUint max); flag BitStream_DecodeUnConstraintWholeNumber(BitStream* pBitStrm, asn1SccSint* v); flag BitStream_DecodeSemiConstraintWholeNumber(BitStream* pBitStrm, asn1SccSint* v, asn1SccSint min); flag BitStream_DecodeSemiConstraintPosWholeNumber(BitStream* pBitStrm, asn1SccUint* v, asn1SccUint min); flag BitStream_DecodeConstraintWholeNumber(BitStream* pBitStrm, asn1SccSint* v, asn1SccSint min, asn1SccSint max); flag BitStream_DecodeConstraintPosWholeNumber(BitStream* pBitStrm, asn1SccUint* v, asn1SccUint min, asn1SccUint max); void BitStream_EncodeReal(BitStream* pBitStrm, double v); flag BitStream_DecodeReal(BitStream* pBitStrm, double* v); void CalculateMantissaAndExponent(double d, int* exp, asn1SccUint64* mantissa); double GetDoubleByMantissaAndExp(asn1SccUint mantissa, int exp); int GetNumberOfBitsForNonNegativeInteger(asn1SccUint v); int GetCharIndex(char ch, byte allowedCharSet[], int setLen); /* db ,ad8888ba, 888b 88 88888888888 88 d88b d8"' `"8b 8888b 88 88 ,d "" d8'`8b d8' 88 `8b 88 88 88 d8' `8b 88 88 `8b 88 88aaaaa 88 88 8b,dPPYba, ,adPPYba, MM88MMM 88 ,adPPYba, 8b,dPPYba, ,adPPYba, d8YaaaaY8b 88 88 `8b 88 88""""" 88 88 88P' `"8a a8" "" 88 88 a8" "8a 88P' `"8a I8[ "" d8""""""""8b Y8, 88 `8b 88 88 88 88 88 88 8b 88 88 8b d8 88 88 `"Y8ba, d8' `8b Y8a. .a8P 88 `8888 88 "8a, ,a88 88 88 "8a, ,aa 88, 88 "8a, ,a8" 88 88 aa ]8I d8' `8b `"Y8888Y"' 88 `888 88 `"YbbdP'Y8 88 88 `"Ybbd8"' "Y888 88 `"YbbdP"' 88 88 `"YbbdP" */ void Acn_AlignToNextByte(BitStream* pBitStrm); void Acn_AlignToNextWord(BitStream* pBitStrm); void Acn_AlignToNextDWord(BitStream* pBitStrm); /*ACN Integer functions*/ void Acn_Enc_Int_PositiveInteger_ConstSize(BitStream* pBitStrm, asn1SccUint intVal, int encodedSizeInBits); void Acn_Enc_Int_PositiveInteger_ConstSize_8(BitStream* pBitStrm, asn1SccUint intVal); void Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_16(BitStream* pBitStrm, asn1SccUint intVal); void Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_32(BitStream* pBitStrm, asn1SccUint intVal); void Acn_Enc_Int_PositiveInteger_ConstSize_big_endian_64(BitStream* pBitStrm, asn1SccUint intVal); void Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_16(BitStream* pBitStrm, asn1SccUint intVal); void Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_32(BitStream* pBitStrm, asn1SccUint intVal); void Acn_Enc_Int_PositiveInteger_ConstSize_little_endian_64(BitStream* pBitStrm, asn1SccUint intVal); void Acn_Enc_Int_PositiveInteger_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccUint intVal); void Acn_Enc_Int_TwosComplement_ConstSize(BitStream* pBitStrm, asn1SccSint intVal, int encodedSizeInBits); void Acn_Enc_Int_TwosComplement_ConstSize_8(BitStream* pBitStrm, asn1SccSint intVal); void Acn_Enc_Int_TwosComplement_ConstSize_big_endian_16(BitStream* pBitStrm, asn1SccSint intVal); void Acn_Enc_Int_TwosComplement_ConstSize_big_endian_32(BitStream* pBitStrm, asn1SccSint intVal); void Acn_Enc_Int_TwosComplement_ConstSize_big_endian_64(BitStream* pBitStrm, asn1SccSint intVal); void Acn_Enc_Int_TwosComplement_ConstSize_little_endian_16(BitStream* pBitStrm, asn1SccSint intVal); void Acn_Enc_Int_TwosComplement_ConstSize_little_endian_32(BitStream* pBitStrm, asn1SccSint intVal); void Acn_Enc_Int_TwosComplement_ConstSize_little_endian_64(BitStream* pBitStrm, asn1SccSint intVal); void Acn_Enc_Int_TwosComplement_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccSint intVal); void Acn_Enc_Int_BCD_ConstSize(BitStream* pBitStrm, asn1SccUint intVal, int encodedSizeInNibbles); void Acn_Enc_Int_BCD_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccUint intVal); void Acn_Enc_Int_BCD_VarSize_NullTerminated(BitStream* pBitStrm, asn1SccUint intVal); /*encoding ends when 'F' is reached*/ void Acn_Enc_SInt_ASCII_ConstSize(BitStream* pBitStrm, asn1SccSint intVal, int encodedSizeInBytes); void Acn_Enc_SInt_ASCII_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccSint intVal); void Acn_Enc_SInt_ASCII_VarSize_NullTerminated(BitStream* pBitStrm, asn1SccSint intVal); /*encoding ends when 0x0 is reached*/ void Acn_Enc_UInt_ASCII_ConstSize(BitStream* pBitStrm, asn1SccUint intVal, int encodedSizeInBytes); void Acn_Enc_UInt_ASCII_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccUint intVal); void Acn_Enc_UInt_ASCII_VarSize_NullTerminated(BitStream* pBitStrm, asn1SccUint intVal); /*encoding ends when 0x0 is reached*/ /*ACN Decode Integer functions*/ flag Acn_Dec_Int_PositiveInteger_ConstSize(BitStream* pBitStrm, asn1SccUint* pIntVal, int encodedSizeInBits); flag Acn_Dec_Int_PositiveInteger_ConstSize_8(BitStream* pBitStrm, asn1SccUint* pIntVal); flag Acn_Dec_Int_PositiveInteger_ConstSize_big_endian_16(BitStream* pBitStrm, asn1SccUint* pIntVal); flag Acn_Dec_Int_PositiveInteger_ConstSize_big_endian_32(BitStream* pBitStrm, asn1SccUint* pIntVal); flag Acn_Dec_Int_PositiveInteger_ConstSize_big_endian_64(BitStream* pBitStrm, asn1SccUint* pIntVal); flag Acn_Dec_Int_PositiveInteger_ConstSize_little_endian_16(BitStream* pBitStrm, asn1SccUint* pIntVal); flag Acn_Dec_Int_PositiveInteger_ConstSize_little_endian_32(BitStream* pBitStrm, asn1SccUint* pIntVal); flag Acn_Dec_Int_PositiveInteger_ConstSize_little_endian_64(BitStream* pBitStrm, asn1SccUint* pIntVal); flag Acn_Dec_Int_PositiveInteger_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccUint* pIntVal); flag Acn_Dec_Int_TwosComplement_ConstSize(BitStream* pBitStrm, asn1SccSint* pIntVal, int encodedSizeInBits); flag Acn_Dec_Int_TwosComplement_ConstSize_8(BitStream* pBitStrm, asn1SccSint* pIntVal); flag Acn_Dec_Int_TwosComplement_ConstSize_big_endian_16(BitStream* pBitStrm, asn1SccSint* pIntVal); flag Acn_Dec_Int_TwosComplement_ConstSize_big_endian_32(BitStream* pBitStrm, asn1SccSint* pIntVal); flag Acn_Dec_Int_TwosComplement_ConstSize_big_endian_64(BitStream* pBitStrm, asn1SccSint* pIntVal); flag Acn_Dec_Int_TwosComplement_ConstSize_little_endian_16(BitStream* pBitStrm, asn1SccSint* pIntVal); flag Acn_Dec_Int_TwosComplement_ConstSize_little_endian_32(BitStream* pBitStrm, asn1SccSint* pIntVal); flag Acn_Dec_Int_TwosComplement_ConstSize_little_endian_64(BitStream* pBitStrm, asn1SccSint* pIntVal); flag Acn_Dec_Int_TwosComplement_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccSint* pIntVal); flag Acn_Dec_Int_BCD_ConstSize(BitStream* pBitStrm, asn1SccUint* pIntVal, int encodedSizeInNibbles); flag Acn_Dec_Int_BCD_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccUint* pIntVal); /*encoding ends when 'F' is reached*/ flag Acn_Dec_Int_BCD_VarSize_NullTerminated(BitStream* pBitStrm, asn1SccUint* pIntVal); flag Acn_Dec_SInt_ASCII_ConstSize(BitStream* pBitStrm, asn1SccSint* pIntVal, int encodedSizeInBytes); flag Acn_Dec_SInt_ASCII_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccSint* pIntVal); flag Acn_Dec_SInt_ASCII_VarSize_NullTerminated(BitStream* pBitStrm, asn1SccSint* pIntVal); flag Acn_Dec_UInt_ASCII_ConstSize(BitStream* pBitStrm, asn1SccUint* pIntVal, int encodedSizeInBytes); flag Acn_Dec_UInt_ASCII_VarSize_LengthEmbedded(BitStream* pBitStrm, asn1SccUint* pIntVal); flag Acn_Dec_UInt_ASCII_VarSize_NullTerminated(BitStream* pBitStrm, asn1SccUint* pIntVal); /*flag Acn_Dec_Int_ASCII_NullTerminated_FormattedInteger(BitStream* pBitStrm, const char* format, asn1SccSint* pIntVal);*/ /* Boolean Decode */ flag BitStream_ReadBitPattern(BitStream* pBitStrm, const byte* patternToRead, int nBitsToRead, flag* pBoolValue); /*Real encoding functions*/ void Acn_Enc_Real_IEEE754_32_big_endian(BitStream* pBitStrm, double realValue); void Acn_Enc_Real_IEEE754_64_big_endian(BitStream* pBitStrm, double realValue); void Acn_Enc_Real_IEEE754_32_little_endian(BitStream* pBitStrm, double realValue); void Acn_Enc_Real_IEEE754_64_little_endian(BitStream* pBitStrm, double realValue); flag Acn_Dec_Real_IEEE754_32_big_endian(BitStream* pBitStrm, double* pRealValue); flag Acn_Dec_Real_IEEE754_64_big_endian(BitStream* pBitStrm, double* pRealValue); flag Acn_Dec_Real_IEEE754_32_little_endian(BitStream* pBitStrm, double* pRealValue); flag Acn_Dec_Real_IEEE754_64_little_endian(BitStream* pBitStrm, double* pRealValue); /*String functions*/ void Acn_Enc_String_Ascii_FixSize (BitStream* pBitStrm, asn1SccSint max, const char* strVal); void Acn_Enc_String_Ascii_Null_Teminated (BitStream* pBitStrm, asn1SccSint max, char null_character, const char* strVal); void Acn_Enc_String_Ascii_External_Field_Determinant (BitStream* pBitStrm, asn1SccSint max, const char* strVal); void Acn_Enc_String_Ascii_Internal_Field_Determinant (BitStream* pBitStrm, asn1SccSint max, asn1SccSint min, const char* strVal); void Acn_Enc_String_CharIndex_FixSize (BitStream* pBitStrm, asn1SccSint max, byte allowedCharSet[], int charSetSize, const char* strVal); void Acn_Enc_String_CharIndex_External_Field_Determinant(BitStream* pBitStrm, asn1SccSint max, byte allowedCharSet[], int charSetSize, const char* strVal); void Acn_Enc_String_CharIndex_Internal_Field_Determinant(BitStream* pBitStrm, asn1SccSint max, byte allowedCharSet[], int charSetSize, asn1SccSint min, const char* strVal); flag Acn_Dec_String_Ascii_FixSize (BitStream* pBitStrm, asn1SccSint max, char* strVal); flag Acn_Dec_String_Ascii_Null_Teminated (BitStream* pBitStrm, asn1SccSint max, char null_character, char* strVal); flag Acn_Dec_String_Ascii_External_Field_Determinant (BitStream* pBitStrm, asn1SccSint max, asn1SccSint extSizeDeterminatFld, char* strVal); flag Acn_Dec_String_Ascii_Internal_Field_Determinant (BitStream* pBitStrm, asn1SccSint max, asn1SccSint min, char* strVal); flag Acn_Dec_String_CharIndex_FixSize (BitStream* pBitStrm, asn1SccSint max, byte allowedCharSet[], int charSetSize, char* strVal); flag Acn_Dec_String_CharIndex_External_Field_Determinant(BitStream* pBitStrm, asn1SccSint max, byte allowedCharSet[], int charSetSize, asn1SccSint extSizeDeterminatFld, char* strVal); flag Acn_Dec_String_CharIndex_Internal_Field_Determinant(BitStream* pBitStrm, asn1SccSint max, byte allowedCharSet[], int charSetSize, asn1SccSint min, char* strVal); /* Length Determinant functions*/ void Acn_Enc_Length(BitStream* pBitStrm, asn1SccUint lengthValue, int lengthSizeInBits); flag Acn_Dec_Length(BitStream* pBitStrm, asn1SccUint* pLengthValue, int lengthSizeInBits); void BitStream_AppendNBitZero(BitStream* pBitStrm, int nbits); void BitStream_EncodeNonNegativeInteger(BitStream* pBitStrm, asn1SccUint v); void BitStream_AppendNBitOne(BitStream* pBitStrm, int nbits); void BitStream_EncodeNonNegativeIntegerNeg(BitStream* pBitStrm, asn1SccUint v, flag negate); flag BitStream_DecodeNonNegativeInteger(BitStream* pBitStrm, asn1SccUint* v, int nBits); flag BitStream_ReadPartialByte(BitStream* pBitStrm, byte *v, byte nbits); void BitStream_AppendPartialByte(BitStream* pBitStrm, byte v, byte nbits, flag negate); void Xer_EncodeXmlHeader(ByteStream* pByteStrm, const char* xmlHeader); flag Xer_EncodeComment(ByteStream* pByteStrm, const char* comment, int *pErrCode); flag Xer_EncodeInteger(ByteStream* pByteStrm, const char* elementTag, asn1SccSint value, int *pErrCode, int level); flag Xer_EncodeBoolean(ByteStream* pByteStrm, const char* elementTag, flag value, int *pErrCode, int level); flag Xer_EncodeEnumerated(ByteStream* pByteStrm, const char* elementTag, const char* value, int *pErrCode, int level); flag Xer_EncodeReal(ByteStream* pByteStrm, const char* elementTag, double value, int *pErrCode, int level); flag Xer_EncodeString(ByteStream* pByteStrm, const char* elementTag, const char* value, int *pErrCode, int level); flag Xer_EncodeOctetString(ByteStream* pByteStrm, const char* elementTag, const byte value[], int nCount, int *pErrCode, int level); flag Xer_EncodeBitString(ByteStream* pByteStrm, const char* elementTag, const byte value[], int nCount, int *pErrCode, int level); flag Xer_DecodeInteger(ByteStream* pByteStrm, const char* elementTag, asn1SccSint* value, int *pErrCode); flag Xer_DecodeBoolean(ByteStream* pByteStrm, const char* elementTag, flag* value, int *pErrCode); flag Xer_DecodeEnumerated(ByteStream* pByteStrm, const char* elementTag, char* value, int *pErrCode); flag Xer_DecodeReal(ByteStream* pByteStrm, const char* elementTag, double* value, int *pErrCode); flag Xer_DecodeString(ByteStream* pByteStrm, const char* elementTag, char* value, int *pErrCode); flag Xer_DecodeOctetString(ByteStream* pByteStrm, const char* elementTag, byte value[], long* nCount, int *pErrCode); flag Xer_DecodeBitString(ByteStream* pByteStrm, const char* elementTag, byte value[], long* nCount, int *pErrCode); flag Xer_EncodeComplexElementStart(ByteStream* pByteStrm, const char* elementTag, XmlAttributeArray* pAttrs, int *pErrCode, int level); flag Xer_EncodeComplexElementEnd(ByteStream* pByteStrm, const char* elementTag, int *pErrCode, int level); flag Xer_DecodeComplexElementStart(ByteStream* pByteStrm, const char* elementTag, XmlAttributeArray* pAttrs, int *pErrCode); flag Xer_DecodeComplexElementEnd(ByteStream* pByteStrm, const char* elementTag, int *pErrCode); flag Xer_NextEndElementIs(ByteStream* pByteStrm, const char* elementTag); flag Xer_NextStartElementIs(ByteStream* pByteStrm, const char* elementTag); flag Xer_LA_NextElementTag(ByteStream* pByteStrm, char* elementTag); flag LoadXmlFile(const char* fileName, ByteStream* pStrm, int* nBytesLoaded); typedef asn1SccUint BerTag; flag BerEncodeTag(ByteStream* pByteStrm, BerTag tag, int *pErrCode); flag BerDecodeTag(ByteStream* pByteStrm, BerTag tag, int *pErrCode); flag BerEncodeLengthStart(ByteStream* pByteStrm, int *pErrCode); flag BerEncodeLengthEnd(ByteStream* pByteStrm, int *pErrCode); flag BerDecodeLength(ByteStream* pByteStrm, int* value, int *pErrCode); flag BerDecodeTwoZeroes(ByteStream* pByteStrm, int *pErrCode); flag BerEncodeInteger(ByteStream* pByteStrm, BerTag tag, asn1SccSint value, int *pErrCode); flag BerDecodeInteger(ByteStream* pByteStrm, BerTag tag, asn1SccSint *value, int *pErrCode); flag BerEncodeBoolean(ByteStream* pByteStrm, BerTag tag, flag value, int *pErrCode); flag BerDecodeBoolean(ByteStream* pByteStrm, BerTag tag, flag *value, int *pErrCode); flag BerEncodeReal(ByteStream* pByteStrm, BerTag tag, double value, int *pErrCode); flag BerDecodeReal(ByteStream* pByteStrm, BerTag tag, double *value, int *pErrCode); flag BerEncodeIA5String(ByteStream* pByteStrm, BerTag tag, const char* value, int length, int *pErrCode); flag BerDecodeIA5String(ByteStream* pByteStrm, BerTag tag, char* value, int maxLength, int *pErrCode); flag BerEncodeNull(ByteStream* pByteStrm, BerTag tag, int *pErrCode); flag BerDecodeNull(ByteStream* pByteStrm, BerTag tag, int *pErrCode); flag BerEncodeBitString(ByteStream* pByteStrm, BerTag tag, const byte* value, int bitCount, int *pErrCode); flag BerDecodeBitString(ByteStream* pByteStrm, BerTag tag, byte* value, int *bitCount, int maxBitCount, int *pErrCode); flag BerEncodeOctetString(ByteStream* pByteStrm, BerTag tag, const byte* value, int octCount, int *pErrCode); flag BerDecodeOctetString(ByteStream* pByteStrm, BerTag tag, byte* value, int *octCount, int maxOctCount, int *pErrCode); flag NextTagMatches(ByteStream* pByteStrm, BerTag tag); int GetStrmPos(ByteStream* pByteStrm); flag LA_Next_Two_Bytes_00(ByteStream* pByteStrm); asn1SccSint milbus_encode(asn1SccSint val); asn1SccSint milbus_decode(asn1SccSint val); #if WORD_SIZE==8 extern const asn1SccUint64 ber_aux[]; #else extern const asn1SccUint32 ber_aux[]; #endif asn1SccUint int2uint(asn1SccSint v); asn1SccSint uint2int(asn1SccUint v, int uintSizeInBytes); #define CHECK_BIT_STREAM(pBitStrm) assert((pBitStrm)->currentByte*8+(pBitStrm)->currentBit<=(pBitStrm)->count*8) #ifdef _MSC_VER #pragma warning( disable : 4127) #endif #define ASSERT_OR_RETURN_FALSE(_Expression) do { assert(_Expression); if (!(_Expression)) return FALSE;} while(0) #ifdef __cplusplus } #endif #endif asn1tools-0.169.0/examples/benchmarks/c_source/asn1scc/generated/my_protocol.c000066400000000000000000000636661524544274600274100ustar00rootroot00000000000000/* Code automatically generated by asn1scc tool */ #include #include #include #include "my_protocol.h" #if !defined(_MSC_VER) || _MSC_VER >= 1800 void D_Initialize(D* pVal) { *pVal = (D) {1, { 0x00 } }; } #endif flag D_IsConstraintValid(const D* pVal, int* pErrCode) { flag ret = TRUE; *pErrCode=0; (void)pVal; ret = (1 <= pVal->nCount && pVal->nCount <= 16); *pErrCode = ret ? 0 : ERR_D; return ret; } flag D_Encode(const D* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; int i1=0; ret = bCheckConstraints ? D_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { BitStream_EncodeConstraintWholeNumber(pBitStrm, pVal->nCount, 1, 16); for(i1=0; (i1 < (int)pVal->nCount) && ret; i1++) { BitStream_AppendByte0(pBitStrm, pVal->arr[i1]); } } return ret; } flag D_Decode(D* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; asn1SccSint nCount; int i1=0; ret = BitStream_DecodeConstraintWholeNumber(pBitStrm, &nCount, 1, 16); *pErrCode = ret ? 0 : 268435457; pVal->nCount = (long)nCount; for(i1=0; (i1 < (int)pVal->nCount) && ret; i1++) { ret = BitStream_ReadByte(pBitStrm, &pVal->arr[i1]); *pErrCode = ret ? 0 : 268435458; } return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void C_c_a_Initialize(C_c_a* pVal) { *pVal = (C_c_a) { .arr = { {1, { 0x00 } } } }; } #endif flag C_c_a_IsConstraintValid(const C_c_a* pVal, int* pErrCode) { flag ret = TRUE; int i1=0; *pErrCode=0; (void)pVal; ret = TRUE; *pErrCode = 0; i1 = 0; while (ret && (i1< 3)) { ret = D_IsConstraintValid(&pVal->arr[i1], pErrCode); i1 = i1+1; } return ret; } flag C_c_a_Encode(const C_c_a* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; int i1=0; ret = bCheckConstraints ? C_c_a_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { for(i1=0; (i1 < (int)3) && ret; i1++) { ret = D_Encode(&pVal->arr[i1], pBitStrm, pErrCode, FALSE); } } return ret; } flag C_c_a_Decode(C_c_a* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; int i1=0; for(i1=0; (i1 < (int)3) && ret; i1++) { ret = D_Decode(&pVal->arr[i1], pBitStrm, pErrCode); } return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void E_Initialize(E* pVal) { *pVal = (E) FALSE; } #endif flag E_IsConstraintValid(const E* pVal, int* pErrCode) { flag ret = TRUE; *pErrCode=0; (void)pVal; ret = TRUE; *pErrCode = 0; return ret; } flag E_Encode(const E* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; ret = bCheckConstraints ? E_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { BitStream_AppendBit(pBitStrm,*pVal); } return ret; } flag E_Decode(E* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; ret = BitStream_ReadBit(pBitStrm, pVal); *pErrCode = ret ? 0 : 268435459; return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void C_d_Initialize(C_d* pVal) { *pVal = (C_d) { .a = FALSE }; } #endif flag C_d_IsConstraintValid(const C_d* pVal, int* pErrCode) { flag ret = TRUE; *pErrCode=0; (void)pVal; ret = E_IsConstraintValid(&pVal->a, pErrCode); return ret; } flag C_d_Encode(const C_d* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; ret = bCheckConstraints ? C_d_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { /*Encode a */ ret = E_Encode(&pVal->a, pBitStrm, pErrCode, FALSE); } return ret; } flag C_d_Decode(C_d* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; /*Decode a */ ret = E_Decode(&pVal->a, pBitStrm, pErrCode); return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void C_c_Initialize(C_c* pVal) { *pVal = (C_c) { .kind = C_c_a_PRESENT, .u = { .a = { .arr = { {1, { 0x00 } } } }} }; } #endif flag C_c_IsConstraintValid(const C_c* pVal, int* pErrCode) { flag ret = TRUE; *pErrCode=0; (void)pVal; switch (pVal->kind) { case C_c_a_PRESENT : ret = C_c_a_IsConstraintValid(&pVal->u.a, pErrCode); break; case C_c_b_PRESENT : ret = E_IsConstraintValid(&pVal->u.b, pErrCode); break; default: *pErrCode = 805306369; //COVERAGE_IGNORE ret = FALSE; //COVERAGE_IGNORE } return ret; } flag C_c_Encode(const C_c* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; ret = bCheckConstraints ? C_c_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { switch(pVal->kind) { case C_c_a_PRESENT: BitStream_EncodeConstraintWholeNumber(pBitStrm, 0, 0, 1); ret = C_c_a_Encode(&pVal->u.a, pBitStrm, pErrCode, FALSE); break; case C_c_b_PRESENT: BitStream_EncodeConstraintWholeNumber(pBitStrm, 1, 0, 1); ret = E_Encode(&pVal->u.b, pBitStrm, pErrCode, FALSE); break; default: *pErrCode = 805306370; //COVERAGE_IGNORE ret = FALSE; //COVERAGE_IGNORE } } return ret; } flag C_c_Decode(C_c* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; asn1SccSint nChoiceIndex; ret = BitStream_DecodeConstraintWholeNumber(pBitStrm, &nChoiceIndex, 0, 1); *pErrCode = ret ? 0 : 268435460; if (ret) { switch(nChoiceIndex) { case 0: pVal->kind = C_c_a_PRESENT; ret = C_c_a_Decode(&pVal->u.a, pBitStrm, pErrCode); break; case 1: pVal->kind = C_c_b_PRESENT; ret = E_Decode(&pVal->u.b, pBitStrm, pErrCode); break; default: *pErrCode = 805306371; //COVERAGE_IGNORE ret = FALSE; //COVERAGE_IGNORE } } return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void F_Initialize(F* pVal) { *pVal = (F) -2147483648LL; } #endif flag F_IsConstraintValid(const F* pVal, int* pErrCode) { flag ret = TRUE; *pErrCode=0; (void)pVal; ret = (-2147483648LL <= *pVal && *pVal <= 2147483647LL); *pErrCode = ret ? 0 : ERR_F; return ret; } flag F_Encode(const F* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; ret = bCheckConstraints ? F_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { BitStream_EncodeConstraintWholeNumber(pBitStrm, *pVal, -2147483648LL, 2147483647LL); } return ret; } flag F_Decode(F* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; ret = BitStream_DecodeConstraintWholeNumber(pBitStrm, pVal, -2147483648LL, 2147483647LL); *pErrCode = ret ? 0 : 268435461; return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void C_a_a_Initialize(C_a_a* pVal) { *pVal = (C_a_a) { .nCount = 0, .arr = { } }; } #endif flag C_a_a_IsConstraintValid(const C_a_a* pVal, int* pErrCode) { flag ret = TRUE; int i1=0; *pErrCode=0; (void)pVal; ret = (0 <= pVal->nCount && pVal->nCount <= 5); *pErrCode = ret ? 0 : ERR_C_a_a; i1 = 0; while (ret && (i1< pVal->nCount)) { ret = F_IsConstraintValid(&pVal->arr[i1], pErrCode); i1 = i1+1; } return ret; } flag C_a_a_Encode(const C_a_a* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; int i1=0; ret = bCheckConstraints ? C_a_a_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { BitStream_EncodeConstraintWholeNumber(pBitStrm, pVal->nCount, 0, 5); for(i1=0; (i1 < (int)pVal->nCount) && ret; i1++) { ret = F_Encode(&pVal->arr[i1], pBitStrm, pErrCode, FALSE); } } return ret; } flag C_a_a_Decode(C_a_a* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; asn1SccSint nCount; int i1=0; ret = BitStream_DecodeConstraintWholeNumber(pBitStrm, &nCount, 0, 5); *pErrCode = ret ? 0 : 268435462; pVal->nCount = (long)nCount; for(i1=0; (i1 < (int)pVal->nCount) && ret; i1++) { ret = F_Decode(&pVal->arr[i1], pBitStrm, pErrCode); } return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void G_Initialize(G* pVal) { *pVal = (G) 0; } #endif flag G_IsConstraintValid(const G* pVal, int* pErrCode) { flag ret = TRUE; *pErrCode=0; (void)pVal; ret = (*pVal <= 4294967295LL); *pErrCode = ret ? 0 : ERR_G; return ret; } flag G_Encode(const G* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; ret = bCheckConstraints ? G_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { BitStream_EncodeConstraintPosWholeNumber(pBitStrm, *pVal, 0, 4294967295LL); } return ret; } flag G_Decode(G* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; ret = BitStream_DecodeConstraintPosWholeNumber(pBitStrm, pVal, 0, 4294967295LL); *pErrCode = ret ? 0 : 268435463; return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void C_a_c_Initialize(C_a_c* pVal) { *pVal = (C_a_c) -40; } #endif flag C_a_c_IsConstraintValid(const C_a_c* pVal, int* pErrCode) { flag ret = TRUE; *pErrCode=0; (void)pVal; ret = (-40 <= *pVal && *pVal <= 40); *pErrCode = ret ? 0 : ERR_C_a_c; return ret; } flag C_a_c_Encode(const C_a_c* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; ret = bCheckConstraints ? C_a_c_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { BitStream_EncodeConstraintWholeNumber(pBitStrm, *pVal, -40, 40); } return ret; } flag C_a_c_Decode(C_a_c* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; ret = BitStream_DecodeConstraintWholeNumber(pBitStrm, pVal, -40, 40); *pErrCode = ret ? 0 : 268435464; return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void C_a_Initialize(C_a* pVal) { *pVal = (C_a) { .a = { .nCount = 0, .arr = { } }, .b = FALSE, .c = 0, .exist = { .b = 1, .c = 1 } }; } #endif flag C_a_IsConstraintValid(const C_a* pVal, int* pErrCode) { flag ret = TRUE; *pErrCode=0; (void)pVal; ret = C_a_a_IsConstraintValid(&pVal->a, pErrCode); if (ret) { if (pVal->exist.b==1) { ret = TRUE; *pErrCode = 0; } if (ret) { if (pVal->exist.c==1) { ret = C_a_c_IsConstraintValid(&pVal->c, pErrCode); } } } return ret; } flag C_a_Encode(const C_a* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; ret = bCheckConstraints ? C_a_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { BitStream_AppendBit(pBitStrm,pVal->exist.b); if (ret) { BitStream_AppendBit(pBitStrm,pVal->exist.c); if (ret) { /*Encode a */ ret = C_a_a_Encode(&pVal->a, pBitStrm, pErrCode, FALSE); if (ret) { /*Encode b */ if (pVal->exist.b) { BitStream_AppendBit(pBitStrm,pVal->b); } if (ret) { /*Encode c */ if (pVal->exist.c) { ret = C_a_c_Encode(&pVal->c, pBitStrm, pErrCode, FALSE); } } } } } } return ret; } flag C_a_Decode(C_a* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; unsigned char C_abitMask[1]; /* Decode Bit Mask for optional and default fields*/ ret = BitStream_ReadBits(pBitStrm, C_abitMask, 2); *pErrCode = ret ? 0 : 268435465; if (ret) { if (ret) { if (ret) { /*Decode a */ ret = C_a_a_Decode(&pVal->a, pBitStrm, pErrCode); if (ret) { /*Decode b */ pVal->exist.b = 0; if ((C_abitMask[0] & 0x80) != 0 ) { pVal->exist.b = 1; ret = BitStream_ReadBit(pBitStrm, &pVal->b); *pErrCode = ret ? 0 : 268435466; } if (ret) { /*Decode c */ { static C_a_c defValue = 0; pVal->exist.c = 1; pVal->c = defValue; if ((C_abitMask[0] & 0x40) != 0 ) { ret = C_a_c_Decode(&pVal->c, pBitStrm, pErrCode); } } } } } } } return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void C_Initialize(C* pVal) { *pVal = (C) { .a = { .a = { .nCount = 0, .arr = { } }, .b = FALSE, .c = 0, .exist = { .b = 1, .c = 1 } }, .b = 0, .c = { .kind = C_c_a_PRESENT, .u = { .a = { .arr = { {1, { 0x00 } } } }} }, .d = { .a = FALSE }, .exist = { .a = 1 } }; } #endif flag C_IsConstraintValid(const C* pVal, int* pErrCode) { flag ret = TRUE; *pErrCode=0; (void)pVal; if (pVal->exist.a==1) { ret = C_a_IsConstraintValid(&pVal->a, pErrCode); } if (ret) { ret = G_IsConstraintValid(&pVal->b, pErrCode); if (ret) { ret = C_c_IsConstraintValid(&pVal->c, pErrCode); if (ret) { ret = C_d_IsConstraintValid(&pVal->d, pErrCode); } } } return ret; } flag C_Encode(const C* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; ret = bCheckConstraints ? C_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { BitStream_AppendBit(pBitStrm,pVal->exist.a); if (ret) { /*Encode a */ if (pVal->exist.a) { ret = C_a_Encode(&pVal->a, pBitStrm, pErrCode, FALSE); } if (ret) { /*Encode b */ ret = G_Encode(&pVal->b, pBitStrm, pErrCode, FALSE); if (ret) { /*Encode c */ ret = C_c_Encode(&pVal->c, pBitStrm, pErrCode, FALSE); if (ret) { /*Encode d */ ret = C_d_Encode(&pVal->d, pBitStrm, pErrCode, FALSE); } } } } } return ret; } flag C_Decode(C* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; unsigned char CbitMask[1]; /* Decode Bit Mask for optional and default fields*/ ret = BitStream_ReadBits(pBitStrm, CbitMask, 1); *pErrCode = ret ? 0 : 268435467; if (ret) { if (ret) { /*Decode a */ pVal->exist.a = 0; if ((CbitMask[0] & 0x80) != 0 ) { pVal->exist.a = 1; ret = C_a_Decode(&pVal->a, pBitStrm, pErrCode); } if (ret) { /*Decode b */ ret = G_Decode(&pVal->b, pBitStrm, pErrCode); if (ret) { /*Decode c */ ret = C_c_Decode(&pVal->c, pBitStrm, pErrCode); if (ret) { /*Decode d */ ret = C_d_Decode(&pVal->d, pBitStrm, pErrCode); } } } } } return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void B_Initialize(B* pVal) { *pVal = (B) { .kind = B_a_PRESENT, .u = { .a = { .a = { .a = { .nCount = 0, .arr = { } }, .b = FALSE, .c = 0, .exist = { .b = 1, .c = 1 } }, .b = 0, .c = { .kind = C_c_a_PRESENT, .u = { .a = { .arr = { {1, { 0x00 } } } }} }, .d = { .a = FALSE }, .exist = { .a = 1 } }} }; } #endif flag B_IsConstraintValid(const B* pVal, int* pErrCode) { flag ret = TRUE; *pErrCode=0; (void)pVal; switch (pVal->kind) { case B_a_PRESENT : ret = C_IsConstraintValid(&pVal->u.a, pErrCode); break; case B_b_PRESENT : ret = D_IsConstraintValid(&pVal->u.b, pErrCode); break; default: *pErrCode = 805306372; //COVERAGE_IGNORE ret = FALSE; //COVERAGE_IGNORE } return ret; } flag B_Encode(const B* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; ret = bCheckConstraints ? B_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { switch(pVal->kind) { case B_a_PRESENT: BitStream_EncodeConstraintWholeNumber(pBitStrm, 0, 0, 1); ret = C_Encode(&pVal->u.a, pBitStrm, pErrCode, FALSE); break; case B_b_PRESENT: BitStream_EncodeConstraintWholeNumber(pBitStrm, 1, 0, 1); ret = D_Encode(&pVal->u.b, pBitStrm, pErrCode, FALSE); break; default: *pErrCode = 805306373; //COVERAGE_IGNORE ret = FALSE; //COVERAGE_IGNORE } } return ret; } flag B_Decode(B* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; asn1SccSint nChoiceIndex; ret = BitStream_DecodeConstraintWholeNumber(pBitStrm, &nChoiceIndex, 0, 1); *pErrCode = ret ? 0 : 268435468; if (ret) { switch(nChoiceIndex) { case 0: pVal->kind = B_a_PRESENT; ret = C_Decode(&pVal->u.a, pBitStrm, pErrCode); break; case 1: pVal->kind = B_b_PRESENT; ret = D_Decode(&pVal->u.b, pBitStrm, pErrCode); break; default: *pErrCode = 805306374; //COVERAGE_IGNORE ret = FALSE; //COVERAGE_IGNORE } } return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void A_Initialize(A* pVal) { *pVal = (A) { .nCount = 1, .arr = { { .kind = B_a_PRESENT, .u = { .a = { .a = { .a = { .nCount = 0, .arr = { } }, .b = FALSE, .c = 0, .exist = { .b = 1, .c = 1 } }, .b = 0, .c = { .kind = C_c_a_PRESENT, .u = { .a = { .arr = { {1, { 0x00 } } } }} }, .d = { .a = FALSE }, .exist = { .a = 1 } }} } } }; } #endif flag A_IsConstraintValid(const A* pVal, int* pErrCode) { flag ret = TRUE; int i1=0; *pErrCode=0; (void)pVal; ret = (2 <= pVal->nCount && pVal->nCount <= 5); *pErrCode = ret ? 0 : ERR_A; i1 = 0; while (ret && (i1< pVal->nCount)) { ret = B_IsConstraintValid(&pVal->arr[i1], pErrCode); i1 = i1+1; } return ret; } flag A_Encode(const A* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; int i1=0; ret = bCheckConstraints ? A_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { BitStream_EncodeConstraintWholeNumber(pBitStrm, pVal->nCount, 2, 5); for(i1=0; (i1 < (int)pVal->nCount) && ret; i1++) { ret = B_Encode(&pVal->arr[i1], pBitStrm, pErrCode, FALSE); } } return ret; } flag A_Decode(A* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; asn1SccSint nCount; int i1=0; ret = BitStream_DecodeConstraintWholeNumber(pBitStrm, &nCount, 2, 5); *pErrCode = ret ? 0 : 268435469; pVal->nCount = (long)nCount; for(i1=0; (i1 < (int)pVal->nCount) && ret; i1++) { ret = B_Decode(&pVal->arr[i1], pBitStrm, pErrCode); } return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void PDU_b_Initialize(PDU_b* pVal) { *pVal = (PDU_b) { .kind = PDU_b_a_PRESENT, .u = { .a = { .nCount = 1, .arr = { { .kind = B_a_PRESENT, .u = { .a = { .a = { .a = { .nCount = 0, .arr = { } }, .b = FALSE, .c = 0, .exist = { .b = 1, .c = 1 } }, .b = 0, .c = { .kind = C_c_a_PRESENT, .u = { .a = { .arr = { {1, { 0x00 } } } }} }, .d = { .a = FALSE }, .exist = { .a = 1 } }} } } }} }; } #endif flag PDU_b_IsConstraintValid(const PDU_b* pVal, int* pErrCode) { flag ret = TRUE; *pErrCode=0; (void)pVal; switch (pVal->kind) { case PDU_b_a_PRESENT : ret = A_IsConstraintValid(&pVal->u.a, pErrCode); break; case PDU_b_b_PRESENT : ret = B_IsConstraintValid(&pVal->u.b, pErrCode); break; case c_PRESENT : ret = C_IsConstraintValid(&pVal->u.c, pErrCode); break; case d_PRESENT : ret = D_IsConstraintValid(&pVal->u.d, pErrCode); break; case e_PRESENT : ret = E_IsConstraintValid(&pVal->u.e, pErrCode); break; default: *pErrCode = 805306375; //COVERAGE_IGNORE ret = FALSE; //COVERAGE_IGNORE } return ret; } flag PDU_b_Encode(const PDU_b* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; ret = bCheckConstraints ? PDU_b_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { switch(pVal->kind) { case PDU_b_a_PRESENT: BitStream_EncodeConstraintWholeNumber(pBitStrm, 0, 0, 4); ret = A_Encode(&pVal->u.a, pBitStrm, pErrCode, FALSE); break; case PDU_b_b_PRESENT: BitStream_EncodeConstraintWholeNumber(pBitStrm, 1, 0, 4); ret = B_Encode(&pVal->u.b, pBitStrm, pErrCode, FALSE); break; case c_PRESENT: BitStream_EncodeConstraintWholeNumber(pBitStrm, 2, 0, 4); ret = C_Encode(&pVal->u.c, pBitStrm, pErrCode, FALSE); break; case d_PRESENT: BitStream_EncodeConstraintWholeNumber(pBitStrm, 3, 0, 4); ret = D_Encode(&pVal->u.d, pBitStrm, pErrCode, FALSE); break; case e_PRESENT: BitStream_EncodeConstraintWholeNumber(pBitStrm, 4, 0, 4); ret = E_Encode(&pVal->u.e, pBitStrm, pErrCode, FALSE); break; default: *pErrCode = 805306376; //COVERAGE_IGNORE ret = FALSE; //COVERAGE_IGNORE } } return ret; } flag PDU_b_Decode(PDU_b* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; asn1SccSint nChoiceIndex; ret = BitStream_DecodeConstraintWholeNumber(pBitStrm, &nChoiceIndex, 0, 4); *pErrCode = ret ? 0 : 268435470; if (ret) { switch(nChoiceIndex) { case 0: pVal->kind = PDU_b_a_PRESENT; ret = A_Decode(&pVal->u.a, pBitStrm, pErrCode); break; case 1: pVal->kind = PDU_b_b_PRESENT; ret = B_Decode(&pVal->u.b, pBitStrm, pErrCode); break; case 2: pVal->kind = c_PRESENT; ret = C_Decode(&pVal->u.c, pBitStrm, pErrCode); break; case 3: pVal->kind = d_PRESENT; ret = D_Decode(&pVal->u.d, pBitStrm, pErrCode); break; case 4: pVal->kind = e_PRESENT; ret = E_Decode(&pVal->u.e, pBitStrm, pErrCode); break; default: *pErrCode = 805306377; //COVERAGE_IGNORE ret = FALSE; //COVERAGE_IGNORE } } return ret; } #if !defined(_MSC_VER) || _MSC_VER >= 1800 void PDU_Initialize(PDU* pVal) { *pVal = (PDU) { .a = -2147483648LL, .b = { .kind = PDU_b_a_PRESENT, .u = { .a = { .nCount = 1, .arr = { { .kind = B_a_PRESENT, .u = { .a = { .a = { .a = { .nCount = 0, .arr = { } }, .b = FALSE, .c = 0, .exist = { .b = 1, .c = 1 } }, .b = 0, .c = { .kind = C_c_a_PRESENT, .u = { .a = { .arr = { {1, { 0x00 } } } }} }, .d = { .a = FALSE }, .exist = { .a = 1 } }} } } }} } }; } #endif flag PDU_IsConstraintValid(const PDU* pVal, int* pErrCode) { flag ret = TRUE; *pErrCode=0; (void)pVal; ret = F_IsConstraintValid(&pVal->a, pErrCode); if (ret) { ret = PDU_b_IsConstraintValid(&pVal->b, pErrCode); } return ret; } flag PDU_Encode(const PDU* pVal, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints) { flag ret = TRUE; ret = bCheckConstraints ? PDU_IsConstraintValid(pVal, pErrCode) : TRUE ; if (ret) { /*Encode a */ ret = F_Encode(&pVal->a, pBitStrm, pErrCode, FALSE); if (ret) { /*Encode b */ ret = PDU_b_Encode(&pVal->b, pBitStrm, pErrCode, FALSE); } } return ret; } flag PDU_Decode(PDU* pVal, BitStream* pBitStrm, int* pErrCode) { flag ret = TRUE; /*Decode a */ ret = F_Decode(&pVal->a, pBitStrm, pErrCode); if (ret) { /*Decode b */ ret = PDU_b_Decode(&pVal->b, pBitStrm, pErrCode); } return ret; } asn1tools-0.169.0/examples/benchmarks/c_source/asn1scc/generated/my_protocol.h000066400000000000000000000241621524544274600274010ustar00rootroot00000000000000#ifndef GENERATED_ASN1SCC_MY_PROTOCOL_H #define GENERATED_ASN1SCC_MY_PROTOCOL_H /* Code automatically generated by asn1scc tool */ #include "asn1crt.h" #ifdef __cplusplus extern "C" { #endif typedef struct { int nCount; byte arr[16]; } D; #define D_REQUIRED_BYTES_FOR_ENCODING 17 #define D_REQUIRED_BITS_FOR_ENCODING 132 #define D_REQUIRED_BYTES_FOR_ACN_ENCODING 17 #define D_REQUIRED_BITS_FOR_ACN_ENCODING 132 #define D_REQUIRED_BYTES_FOR_XER_ENCODING 39 void D_Initialize(D* pVal); flag D_IsConstraintValid(const D* val, int* pErrCode); #ifndef ERR_D #define ERR_D 1001 /*(SIZE(1 .. 16))*/ #endif typedef struct { D arr[3]; } C_c_a; #define C_c_a_REQUIRED_BYTES_FOR_ENCODING 50 #define C_c_a_REQUIRED_BITS_FOR_ENCODING 396 #define C_c_a_REQUIRED_BYTES_FOR_ACN_ENCODING 50 #define C_c_a_REQUIRED_BITS_FOR_ACN_ENCODING 396 #define C_c_a_REQUIRED_BYTES_FOR_XER_ENCODING 132 void C_c_a_Initialize(C_c_a* pVal); flag C_c_a_IsConstraintValid(const C_c_a* val, int* pErrCode); #ifndef ERR_C_c_a #define ERR_C_c_a 1002 /*(SIZE(3))*/ #endif typedef flag E; #define E_REQUIRED_BYTES_FOR_ENCODING 1 #define E_REQUIRED_BITS_FOR_ENCODING 1 #define E_REQUIRED_BYTES_FOR_ACN_ENCODING 1 #define E_REQUIRED_BITS_FOR_ACN_ENCODING 1 #define E_REQUIRED_BYTES_FOR_XER_ENCODING 20 void E_Initialize(E* pVal); flag E_IsConstraintValid(const E* val, int* pErrCode); typedef struct { E a; } C_d; #define C_d_REQUIRED_BYTES_FOR_ENCODING 1 #define C_d_REQUIRED_BITS_FOR_ENCODING 1 #define C_d_REQUIRED_BYTES_FOR_ACN_ENCODING 1 #define C_d_REQUIRED_BITS_FOR_ACN_ENCODING 1 #define C_d_REQUIRED_BYTES_FOR_XER_ENCODING 31 void C_d_Initialize(C_d* pVal); flag C_d_IsConstraintValid(const C_d* val, int* pErrCode); typedef struct { enum { C_c_NONE, C_c_a_PRESENT, C_c_b_PRESENT } kind; union { C_c_a a; E b; } u; } C_c; #define C_c_REQUIRED_BYTES_FOR_ENCODING 50 #define C_c_REQUIRED_BITS_FOR_ENCODING 398 #define C_c_REQUIRED_BYTES_FOR_ACN_ENCODING 50 #define C_c_REQUIRED_BITS_FOR_ACN_ENCODING 398 #define C_c_REQUIRED_BYTES_FOR_XER_ENCODING 135 void C_c_Initialize(C_c* pVal); flag C_c_IsConstraintValid(const C_c* val, int* pErrCode); #ifndef ERR_C_c_unknown_choice_index #define ERR_C_c_unknown_choice_index 1003 /**/ #endif typedef asn1SccSint F; #define F_REQUIRED_BYTES_FOR_ENCODING 4 #define F_REQUIRED_BITS_FOR_ENCODING 32 #define F_REQUIRED_BYTES_FOR_ACN_ENCODING 4 #define F_REQUIRED_BITS_FOR_ACN_ENCODING 32 #define F_REQUIRED_BYTES_FOR_XER_ENCODING 27 void F_Initialize(F* pVal); flag F_IsConstraintValid(const F* val, int* pErrCode); #ifndef ERR_F #define ERR_F 1004 /*(-2147483648 .. 2147483647)*/ #endif typedef struct { int nCount; F arr[5]; } C_a_a; #define C_a_a_REQUIRED_BYTES_FOR_ENCODING 21 #define C_a_a_REQUIRED_BITS_FOR_ENCODING 163 #define C_a_a_REQUIRED_BYTES_FOR_ACN_ENCODING 21 #define C_a_a_REQUIRED_BITS_FOR_ACN_ENCODING 163 #define C_a_a_REQUIRED_BYTES_FOR_XER_ENCODING 150 void C_a_a_Initialize(C_a_a* pVal); flag C_a_a_IsConstraintValid(const C_a_a* val, int* pErrCode); #ifndef ERR_C_a_a #define ERR_C_a_a 1005 /*(SIZE(0 .. 5))*/ #endif typedef asn1SccUint G; #define G_REQUIRED_BYTES_FOR_ENCODING 4 #define G_REQUIRED_BITS_FOR_ENCODING 32 #define G_REQUIRED_BYTES_FOR_ACN_ENCODING 4 #define G_REQUIRED_BITS_FOR_ACN_ENCODING 32 #define G_REQUIRED_BYTES_FOR_XER_ENCODING 27 void G_Initialize(G* pVal); flag G_IsConstraintValid(const G* val, int* pErrCode); #ifndef ERR_G #define ERR_G 1006 /*(0 .. 4294967295)*/ #endif typedef asn1SccSint C_a_c; #define C_a_c_REQUIRED_BYTES_FOR_ENCODING 1 #define C_a_c_REQUIRED_BITS_FOR_ENCODING 7 #define C_a_c_REQUIRED_BYTES_FOR_ACN_ENCODING 1 #define C_a_c_REQUIRED_BITS_FOR_ACN_ENCODING 7 #define C_a_c_REQUIRED_BYTES_FOR_XER_ENCODING 35 void C_a_c_Initialize(C_a_c* pVal); flag C_a_c_IsConstraintValid(const C_a_c* val, int* pErrCode); #ifndef ERR_C_a_c #define ERR_C_a_c 1007 /*(-40 .. 40)*/ #endif typedef struct { C_a_a a; flag b; C_a_c c; struct { unsigned int b:1; unsigned int c:1; } exist; } C_a; #define C_a_REQUIRED_BYTES_FOR_ENCODING 22 #define C_a_REQUIRED_BITS_FOR_ENCODING 173 #define C_a_REQUIRED_BYTES_FOR_ACN_ENCODING 22 #define C_a_REQUIRED_BITS_FOR_ACN_ENCODING 173 #define C_a_REQUIRED_BYTES_FOR_XER_ENCODING 200 void C_a_Initialize(C_a* pVal); flag C_a_IsConstraintValid(const C_a* val, int* pErrCode); typedef struct { C_a a; G b; C_c c; C_d d; struct { unsigned int a:1; } exist; } C; #define C_REQUIRED_BYTES_FOR_ENCODING 76 #define C_REQUIRED_BITS_FOR_ENCODING 605 #define C_REQUIRED_BYTES_FOR_ACN_ENCODING 76 #define C_REQUIRED_BITS_FOR_ACN_ENCODING 605 #define C_REQUIRED_BYTES_FOR_XER_ENCODING 388 void C_Initialize(C* pVal); flag C_IsConstraintValid(const C* val, int* pErrCode); typedef struct { enum { B_NONE, B_a_PRESENT, B_b_PRESENT } kind; union { C a; D b; } u; } B; #define B_REQUIRED_BYTES_FOR_ENCODING 76 #define B_REQUIRED_BITS_FOR_ENCODING 607 #define B_REQUIRED_BYTES_FOR_ACN_ENCODING 76 #define B_REQUIRED_BITS_FOR_ACN_ENCODING 607 #define B_REQUIRED_BYTES_FOR_XER_ENCODING 395 void B_Initialize(B* pVal); flag B_IsConstraintValid(const B* val, int* pErrCode); #ifndef ERR_B_unknown_choice_index #define ERR_B_unknown_choice_index 1008 /**/ #endif typedef struct { int nCount; B arr[5]; } A; #define A_REQUIRED_BYTES_FOR_ENCODING 380 #define A_REQUIRED_BITS_FOR_ENCODING 3037 #define A_REQUIRED_BYTES_FOR_ACN_ENCODING 380 #define A_REQUIRED_BITS_FOR_ACN_ENCODING 3037 #define A_REQUIRED_BYTES_FOR_XER_ENCODING 1972 void A_Initialize(A* pVal); flag A_IsConstraintValid(const A* val, int* pErrCode); #ifndef ERR_A #define ERR_A 1009 /*(SIZE(2 .. 5))*/ #endif typedef struct { enum { PDU_b_NONE, PDU_b_a_PRESENT, PDU_b_b_PRESENT, c_PRESENT, d_PRESENT, e_PRESENT } kind; union { A a; B b; C c; D d; E e; } u; } PDU_b; #define PDU_b_REQUIRED_BYTES_FOR_ENCODING 380 #define PDU_b_REQUIRED_BITS_FOR_ENCODING 3040 #define PDU_b_REQUIRED_BYTES_FOR_ACN_ENCODING 380 #define PDU_b_REQUIRED_BITS_FOR_ACN_ENCODING 3040 #define PDU_b_REQUIRED_BYTES_FOR_XER_ENCODING 1987 void PDU_b_Initialize(PDU_b* pVal); flag PDU_b_IsConstraintValid(const PDU_b* val, int* pErrCode); #ifndef ERR_PDU_b_unknown_choice_index #define ERR_PDU_b_unknown_choice_index 1010 /**/ #endif typedef struct { F a; PDU_b b; } PDU; #define PDU_REQUIRED_BYTES_FOR_ENCODING 384 #define PDU_REQUIRED_BITS_FOR_ENCODING 3072 #define PDU_REQUIRED_BYTES_FOR_ACN_ENCODING 384 #define PDU_REQUIRED_BITS_FOR_ACN_ENCODING 3072 #define PDU_REQUIRED_BYTES_FOR_XER_ENCODING 2017 void PDU_Initialize(PDU* pVal); flag PDU_IsConstraintValid(const PDU* val, int* pErrCode); /* ================= Encoding/Decoding function prototypes ================= * These functions are placed at the end of the file to make sure all types * have been declared first, in case of parameterized ACN encodings * ========================================================================= */ flag D_Encode(const D* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag D_Decode(D* pVal, BitStream* pBitStrm, int* pErrCode); flag C_c_a_Encode(const C_c_a* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag C_c_a_Decode(C_c_a* pVal, BitStream* pBitStrm, int* pErrCode); flag E_Encode(const E* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag E_Decode(E* pVal, BitStream* pBitStrm, int* pErrCode); flag C_d_Encode(const C_d* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag C_d_Decode(C_d* pVal, BitStream* pBitStrm, int* pErrCode); flag C_c_Encode(const C_c* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag C_c_Decode(C_c* pVal, BitStream* pBitStrm, int* pErrCode); flag F_Encode(const F* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag F_Decode(F* pVal, BitStream* pBitStrm, int* pErrCode); flag C_a_a_Encode(const C_a_a* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag C_a_a_Decode(C_a_a* pVal, BitStream* pBitStrm, int* pErrCode); flag G_Encode(const G* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag G_Decode(G* pVal, BitStream* pBitStrm, int* pErrCode); flag C_a_c_Encode(const C_a_c* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag C_a_c_Decode(C_a_c* pVal, BitStream* pBitStrm, int* pErrCode); flag C_a_Encode(const C_a* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag C_a_Decode(C_a* pVal, BitStream* pBitStrm, int* pErrCode); flag C_Encode(const C* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag C_Decode(C* pVal, BitStream* pBitStrm, int* pErrCode); flag B_Encode(const B* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag B_Decode(B* pVal, BitStream* pBitStrm, int* pErrCode); flag A_Encode(const A* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag A_Decode(A* pVal, BitStream* pBitStrm, int* pErrCode); flag PDU_b_Encode(const PDU_b* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag PDU_b_Decode(PDU_b* pVal, BitStream* pBitStrm, int* pErrCode); flag PDU_Encode(const PDU* val, BitStream* pBitStrm, int* pErrCode, flag bCheckConstraints); flag PDU_Decode(PDU* pVal, BitStream* pBitStrm, int* pErrCode); #ifdef __cplusplus } #define CHOICE_C_c_a_PRESENT C_c::C_c_a_PRESENT #define CHOICE_C_c_b_PRESENT C_c::C_c_b_PRESENT #define CHOICE_B_a_PRESENT B::B_a_PRESENT #define CHOICE_B_b_PRESENT B::B_b_PRESENT #define CHOICE_PDU_b_a_PRESENT PDU_b::PDU_b_a_PRESENT #define CHOICE_PDU_b_b_PRESENT PDU_b::PDU_b_b_PRESENT #define CHOICE_c_PRESENT PDU_b::c_PRESENT #define CHOICE_d_PRESENT PDU_b::d_PRESENT #define CHOICE_e_PRESENT PDU_b::e_PRESENT #endif #endif asn1tools-0.169.0/examples/benchmarks/c_source/asn1scc/generated/real.c000066400000000000000000001372721524544274600257600ustar00rootroot00000000000000#include #include #include #include "asn1crt.h" #ifndef FREXP_UNSUPPORTED #define ExpoBitMask 0x7FF0000000000000ULL #define MantBitMask 0x000FFFFFFFFFFFFFULL #define MantBitMask2 0xFFE0000000000000ULL void CalculateMantissaAndExponent(double d, int* exponent, asn1SccUint64* mantissa) { union { double in; asn1SccUint64 out; } double2uint; asn1SccUint64 ll = 0; double2uint.in = d; ll = double2uint.out; *exponent = 0; *mantissa = 0; *exponent = (int)(((ll & ExpoBitMask)>>52) - 1023 - 52); *mantissa = ll & MantBitMask; (*mantissa) |= 0x0010000000000000ULL; } double GetDoubleByMantissaAndExp(asn1SccUint mantissa, int exponent) { union { double ret; asn1SccUint64 u64; } u; asn1SccUint64 ll = 0; asn1SccUint64 exponent2 = 0; if (mantissa == 0) return 0.0; while ( (mantissa & MantBitMask2)>0) { mantissa>>=1; exponent += 1; } while ( (mantissa & 0x0010000000000000ULL) == 0) { mantissa<<=1; exponent += -1; } exponent2 = exponent + 1023 + 52; ll |= mantissa & MantBitMask; ll |= (exponent2<<52); u.u64 = ll; return u.ret; } #else #define MAX_MANTISSA 4503599627370496 double pospow2[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296, 8589934592, 17179869184, 34359738368, 68719476736, 137438953472, 274877906944, 549755813888, 1099511627776, 2199023255552, 4398046511104, 8796093022208, 17592186044416, 35184372088832, 70368744177664, 140737488355328, 281474976710656, 562949953421312, 1.12589990684262E+15, 2.25179981368525E+15, 4.5035996273705E+15, 9.00719925474099E+15, 1.8014398509482E+16, 3.6028797018964E+16, 7.20575940379279E+16, 1.44115188075856E+17, 2.88230376151712E+17, 5.76460752303423E+17, 1.15292150460685E+18, 2.30584300921369E+18, 4.61168601842739E+18, 9.22337203685478E+18, 1.84467440737096E+19, 3.68934881474191E+19, 7.37869762948382E+19, 1.47573952589676E+20, 2.95147905179353E+20, 5.90295810358706E+20, 1.18059162071741E+21, 2.36118324143482E+21, 4.72236648286965E+21, 9.44473296573929E+21, 1.88894659314786E+22, 3.77789318629572E+22, 7.55578637259143E+22, 1.51115727451829E+23, 3.02231454903657E+23, 6.04462909807315E+23, 1.20892581961463E+24, 2.41785163922926E+24, 4.83570327845852E+24, 9.67140655691703E+24, 1.93428131138341E+25, 3.86856262276681E+25, 7.73712524553363E+25, 1.54742504910673E+26, 3.09485009821345E+26, 6.1897001964269E+26, 1.23794003928538E+27, 2.47588007857076E+27, 4.95176015714152E+27, 9.90352031428304E+27, 1.98070406285661E+28, 3.96140812571322E+28, 7.92281625142643E+28, 1.58456325028529E+29, 3.16912650057057E+29, 6.33825300114115E+29, 1.26765060022823E+30, 2.53530120045646E+30, 5.07060240091292E+30, 1.01412048018258E+31, 2.02824096036517E+31, 4.05648192073033E+31, 8.11296384146067E+31, 1.62259276829213E+32, 3.24518553658427E+32, 6.49037107316853E+32, 1.29807421463371E+33, 2.59614842926741E+33, 5.19229685853483E+33, 1.03845937170697E+34, 2.07691874341393E+34, 4.15383748682786E+34, 8.30767497365572E+34, 1.66153499473114E+35, 3.32306998946229E+35, 6.64613997892458E+35, 1.32922799578492E+36, 2.65845599156983E+36, 5.31691198313966E+36, 1.06338239662793E+37, 2.12676479325587E+37, 4.25352958651173E+37, 8.50705917302346E+37, 1.70141183460469E+38, 3.40282366920938E+38, 6.80564733841877E+38, 1.36112946768375E+39, 2.72225893536751E+39, 5.44451787073502E+39, 1.088903574147E+40, 2.17780714829401E+40, 4.35561429658801E+40, 8.71122859317602E+40, 1.7422457186352E+41, 3.48449143727041E+41, 6.96898287454082E+41, 1.39379657490816E+42, 2.78759314981633E+42, 5.57518629963266E+42, 1.11503725992653E+43, 2.23007451985306E+43, 4.46014903970612E+43, 8.92029807941225E+43, 1.78405961588245E+44, 3.5681192317649E+44, 7.1362384635298E+44, 1.42724769270596E+45, 2.85449538541192E+45, 5.70899077082384E+45, 1.14179815416477E+46, 2.28359630832954E+46, 4.56719261665907E+46, 9.13438523331814E+46, 1.82687704666363E+47, 3.65375409332726E+47, 7.30750818665451E+47, 1.4615016373309E+48, 2.92300327466181E+48, 5.84600654932361E+48, 1.16920130986472E+49, 2.33840261972944E+49, 4.67680523945889E+49, 9.35361047891778E+49, 1.87072209578356E+50, 3.74144419156711E+50, 7.48288838313422E+50, 1.49657767662684E+51, 2.99315535325369E+51, 5.98631070650738E+51, 1.19726214130148E+52, 2.39452428260295E+52, 4.7890485652059E+52, 9.57809713041181E+52, 1.91561942608236E+53, 3.83123885216472E+53, 7.66247770432944E+53, 1.53249554086589E+54, 3.06499108173178E+54, 6.12998216346356E+54, 1.22599643269271E+55, 2.45199286538542E+55, 4.90398573077084E+55, 9.80797146154169E+55, 1.96159429230834E+56, 3.92318858461668E+56, 7.84637716923335E+56, 1.56927543384667E+57, 3.13855086769334E+57, 6.27710173538668E+57, 1.25542034707734E+58, 2.51084069415467E+58, 5.02168138830934E+58, 1.00433627766187E+59, 2.00867255532374E+59, 4.01734511064748E+59, 8.03469022129495E+59, 1.60693804425899E+60, 3.21387608851798E+60, 6.42775217703596E+60, 1.28555043540719E+61, 2.57110087081438E+61, 5.14220174162877E+61, 1.02844034832575E+62, 2.05688069665151E+62, 4.11376139330302E+62, 8.22752278660603E+62, 1.64550455732121E+63, 3.29100911464241E+63, 6.58201822928482E+63, 1.31640364585696E+64, 2.63280729171393E+64, 5.26561458342786E+64, 1.05312291668557E+65, 2.10624583337114E+65, 4.21249166674229E+65, 8.42498333348457E+65, 1.68499666669692E+66, 3.36999333339383E+66, 6.73998666678766E+66, 1.34799733335753E+67, 2.69599466671506E+67, 5.39198933343013E+67, 1.07839786668603E+68, 2.15679573337205E+68, 4.3135914667441E+68, 8.6271829334882E+68, 1.72543658669764E+69, 3.45087317339528E+69, 6.90174634679056E+69, 1.38034926935811E+70, 2.76069853871623E+70, 5.52139707743245E+70, 1.10427941548649E+71, 2.20855883097298E+71, 4.41711766194596E+71, 8.83423532389192E+71, 1.76684706477838E+72, 3.53369412955677E+72, 7.06738825911354E+72, 1.41347765182271E+73, 2.82695530364541E+73, 5.65391060729083E+73, 1.13078212145817E+74, 2.26156424291633E+74, 4.52312848583266E+74, 9.04625697166533E+74, 1.80925139433307E+75, 3.61850278866613E+75, 7.23700557733226E+75, 1.44740111546645E+76, 2.8948022309329E+76, 5.78960446186581E+76, 1.15792089237316E+77, 2.31584178474632E+77, 4.63168356949265E+77, 9.2633671389853E+77, 1.85267342779706E+78, 3.70534685559412E+78, 7.41069371118824E+78, 1.48213874223765E+79, 2.96427748447529E+79, 5.92855496895059E+79, 1.18571099379012E+80, 2.37142198758024E+80, 4.74284397516047E+80, 9.48568795032094E+80, 1.89713759006419E+81, 3.79427518012838E+81, 7.58855036025675E+81, 1.51771007205135E+82, 3.0354201441027E+82, 6.0708402882054E+82, 1.21416805764108E+83, 2.42833611528216E+83, 4.85667223056432E+83, 9.71334446112865E+83, 1.94266889222573E+84, 3.88533778445146E+84, 7.77067556890292E+84, 1.55413511378058E+85, 3.10827022756117E+85, 6.21654045512233E+85, 1.24330809102447E+86, 2.48661618204893E+86, 4.97323236409787E+86, 9.94646472819573E+86, 1.98929294563915E+87, 3.97858589127829E+87, 7.95717178255659E+87, 1.59143435651132E+88, 3.18286871302263E+88, 6.36573742604527E+88, 1.27314748520905E+89, 2.54629497041811E+89, 5.09258994083622E+89, 1.01851798816724E+90, 2.03703597633449E+90, 4.07407195266897E+90, 8.14814390533794E+90, 1.62962878106759E+91, 3.25925756213518E+91, 6.51851512427036E+91, 1.30370302485407E+92, 2.60740604970814E+92, 5.21481209941628E+92, 1.04296241988326E+93, 2.08592483976651E+93, 4.17184967953303E+93, 8.34369935906606E+93, 1.66873987181321E+94, 3.33747974362642E+94, 6.67495948725284E+94, 1.33499189745057E+95, 2.66998379490114E+95, 5.33996758980228E+95, 1.06799351796046E+96, 2.13598703592091E+96, 4.27197407184182E+96, 8.54394814368364E+96, 1.70878962873673E+97, 3.41757925747346E+97, 6.83515851494691E+97, 1.36703170298938E+98, 2.73406340597876E+98, 5.46812681195753E+98, 1.09362536239151E+99, 2.18725072478301E+99, 4.37450144956602E+99, 8.74900289913205E+99, 1.74980057982641E+100, 3.49960115965282E+100, 6.99920231930564E+100, 1.39984046386113E+101, 2.79968092772226E+101, 5.59936185544451E+101, 1.1198723710889E+102, 2.2397447421778E+102, 4.47948948435561E+102, 8.95897896871122E+102, 1.79179579374224E+103, 3.58359158748449E+103, 7.16718317496897E+103, 1.43343663499379E+104, 2.86687326998759E+104, 5.73374653997518E+104, 1.14674930799504E+105, 2.29349861599007E+105, 4.58699723198014E+105, 9.17399446396029E+105, 1.83479889279206E+106, 3.66959778558411E+106, 7.33919557116823E+106, 1.46783911423365E+107, 2.93567822846729E+107, 5.87135645693458E+107, 1.17427129138692E+108, 2.34854258277383E+108, 4.69708516554767E+108, 9.39417033109533E+108, 1.87883406621907E+109, 3.75766813243813E+109, 7.51533626487627E+109, 1.50306725297525E+110, 3.00613450595051E+110, 6.01226901190101E+110, 1.2024538023802E+111, 2.40490760476041E+111, 4.80981520952081E+111, 9.61963041904162E+111, 1.92392608380832E+112, 3.84785216761665E+112, 7.6957043352333E+112, 1.53914086704666E+113, 3.07828173409332E+113, 6.15656346818664E+113, 1.23131269363733E+114, 2.46262538727466E+114, 4.92525077454931E+114, 9.85050154909862E+114, 1.97010030981972E+115, 3.94020061963945E+115, 7.8804012392789E+115, 1.57608024785578E+116, 3.15216049571156E+116, 6.30432099142312E+116, 1.26086419828462E+117, 2.52172839656925E+117, 5.04345679313849E+117, 1.0086913586277E+118, 2.0173827172554E+118, 4.03476543451079E+118, 8.06953086902159E+118, 1.61390617380432E+119, 3.22781234760864E+119, 6.45562469521727E+119, 1.29112493904345E+120, 2.58224987808691E+120, 5.16449975617382E+120, 1.03289995123476E+121, 2.06579990246953E+121, 4.13159980493905E+121, 8.26319960987811E+121, 1.65263992197562E+122, 3.30527984395124E+122, 6.61055968790249E+122, 1.3221119375805E+123, 2.64422387516099E+123, 5.28844775032199E+123, 1.0576895500644E+124, 2.1153791001288E+124, 4.23075820025759E+124, 8.46151640051518E+124, 1.69230328010304E+125, 3.38460656020607E+125, 6.76921312041215E+125, 1.35384262408243E+126, 2.70768524816486E+126, 5.41537049632972E+126, 1.08307409926594E+127, 2.16614819853189E+127, 4.33229639706377E+127, 8.66459279412755E+127, 1.73291855882551E+128, 3.46583711765102E+128, 6.93167423530204E+128, 1.38633484706041E+129, 2.77266969412081E+129, 5.54533938824163E+129, 1.10906787764833E+130, 2.21813575529665E+130, 4.4362715105933E+130, 8.87254302118661E+130, 1.77450860423732E+131, 3.54901720847464E+131, 7.09803441694929E+131, 1.41960688338986E+132, 2.83921376677971E+132, 5.67842753355943E+132, 1.13568550671189E+133, 2.27137101342377E+133, 4.54274202684754E+133, 9.08548405369509E+133, 1.81709681073902E+134, 3.63419362147803E+134, 7.26838724295607E+134, 1.45367744859121E+135, 2.90735489718243E+135, 5.81470979436486E+135, 1.16294195887297E+136, 2.32588391774594E+136, 4.65176783549188E+136, 9.30353567098377E+136, 1.86070713419675E+137, 3.72141426839351E+137, 7.44282853678701E+137, 1.4885657073574E+138, 2.97713141471481E+138, 5.95426282942961E+138, 1.19085256588592E+139, 2.38170513177184E+139, 4.76341026354369E+139, 9.52682052708738E+139, 1.90536410541748E+140, 3.81072821083495E+140, 7.6214564216699E+140, 1.52429128433398E+141, 3.04858256866796E+141, 6.09716513733592E+141, 1.21943302746718E+142, 2.43886605493437E+142, 4.87773210986874E+142, 9.75546421973748E+142, 1.9510928439475E+143, 3.90218568789499E+143, 7.80437137578998E+143, 1.560874275158E+144, 3.12174855031599E+144, 6.24349710063198E+144, 1.2486994201264E+145, 2.49739884025279E+145, 4.99479768050559E+145, 9.98959536101118E+145, 1.99791907220224E+146, 3.99583814440447E+146, 7.99167628880894E+146, 1.59833525776179E+147, 3.19667051552358E+147, 6.39334103104715E+147, 1.27866820620943E+148, 2.55733641241886E+148, 5.11467282483772E+148, 1.02293456496754E+149, 2.04586912993509E+149, 4.09173825987018E+149, 8.18347651974035E+149, 1.63669530394807E+150, 3.27339060789614E+150, 6.54678121579228E+150, 1.30935624315846E+151, 2.61871248631691E+151, 5.23742497263383E+151, 1.04748499452677E+152, 2.09496998905353E+152, 4.18993997810706E+152, 8.37987995621412E+152, 1.67597599124282E+153, 3.35195198248565E+153, 6.7039039649713E+153, 1.34078079299426E+154, 2.68156158598852E+154, 5.36312317197704E+154, 1.07262463439541E+155, 2.14524926879082E+155, 4.29049853758163E+155, 8.58099707516326E+155, 1.71619941503265E+156, 3.4323988300653E+156, 6.86479766013061E+156, 1.37295953202612E+157, 2.74591906405224E+157, 5.49183812810449E+157, 1.0983676256209E+158, 2.1967352512418E+158, 4.39347050248359E+158, 8.78694100496718E+158, 1.75738820099344E+159, 3.51477640198687E+159, 7.02955280397374E+159, 1.40591056079475E+160, 2.8118211215895E+160, 5.623642243179E+160, 1.1247284486358E+161, 2.2494568972716E+161, 4.4989137945432E+161, 8.99782758908639E+161, 1.79956551781728E+162, 3.59913103563456E+162, 7.19826207126911E+162, 1.43965241425382E+163, 2.87930482850765E+163, 5.75860965701529E+163, 1.15172193140306E+164, 2.30344386280612E+164, 4.60688772561223E+164, 9.21377545122447E+164, 1.84275509024489E+165, 3.68551018048979E+165, 7.37102036097957E+165, 1.47420407219591E+166, 2.94840814439183E+166, 5.89681628878366E+166, 1.17936325775673E+167, 2.35872651551346E+167, 4.71745303102693E+167, 9.43490606205385E+167, 1.88698121241077E+168, 3.77396242482154E+168, 7.54792484964308E+168, 1.50958496992862E+169, 3.01916993985723E+169, 6.03833987971447E+169, 1.20766797594289E+170, 2.41533595188579E+170, 4.83067190377157E+170, 9.66134380754315E+170, 1.93226876150863E+171, 3.86453752301726E+171, 7.72907504603452E+171, 1.5458150092069E+172, 3.09163001841381E+172, 6.18326003682761E+172, 1.23665200736552E+173, 2.47330401473105E+173, 4.94660802946209E+173, 9.89321605892418E+173, 1.97864321178484E+174, 3.95728642356967E+174, 7.91457284713935E+174, 1.58291456942787E+175, 3.16582913885574E+175, 6.33165827771148E+175, 1.2663316555423E+176, 2.53266331108459E+176, 5.06532662216918E+176, 1.01306532443384E+177, 2.02613064886767E+177, 4.05226129773534E+177, 8.10452259547069E+177, 1.62090451909414E+178, 3.24180903818828E+178, 6.48361807637655E+178, 1.29672361527531E+179, 2.59344723055062E+179, 5.18689446110124E+179, 1.03737889222025E+180, 2.0747577844405E+180, 4.14951556888099E+180, 8.29903113776199E+180, 1.6598062275524E+181, 3.31961245510479E+181, 6.63922491020959E+181, 1.32784498204192E+182, 2.65568996408384E+182, 5.31137992816767E+182, 1.06227598563353E+183, 2.12455197126707E+183, 4.24910394253414E+183, 8.49820788506827E+183, 1.69964157701365E+184, 3.39928315402731E+184, 6.79856630805462E+184, 1.35971326161092E+185, 2.71942652322185E+185, 5.4388530464437E+185, 1.08777060928874E+186, 2.17554121857748E+186, 4.35108243715496E+186, 8.70216487430991E+186, 1.74043297486198E+187, 3.48086594972396E+187, 6.96173189944793E+187, 1.39234637988959E+188, 2.78469275977917E+188, 5.56938551955834E+188, 1.11387710391167E+189, 2.22775420782334E+189, 4.45550841564668E+189, 8.91101683129335E+189, 1.78220336625867E+190, 3.56440673251734E+190, 7.12881346503468E+190, 1.42576269300694E+191, 2.85152538601387E+191, 5.70305077202774E+191, 1.14061015440555E+192, 2.2812203088111E+192, 4.5624406176222E+192, 9.12488123524439E+192, 1.82497624704888E+193, 3.64995249409776E+193, 7.29990498819551E+193, 1.4599809976391E+194, 2.9199619952782E+194, 5.83992399055641E+194, 1.16798479811128E+195, 2.33596959622256E+195, 4.67193919244513E+195, 9.34387838489026E+195, 1.86877567697805E+196, 3.7375513539561E+196, 7.4751027079122E+196, 1.49502054158244E+197, 2.99004108316488E+197, 5.98008216632976E+197, 1.19601643326595E+198, 2.39203286653191E+198, 4.78406573306381E+198, 9.56813146612762E+198, 1.91362629322552E+199, 3.82725258645105E+199, 7.6545051729021E+199, 1.53090103458042E+200, 3.06180206916084E+200, 6.12360413832168E+200, 1.22472082766434E+201, 2.44944165532867E+201, 4.89888331065734E+201, 9.79776662131468E+201, 1.95955332426294E+202, 3.91910664852587E+202, 7.83821329705175E+202, 1.56764265941035E+203, 3.1352853188207E+203, 6.2705706376414E+203, 1.25411412752828E+204, 2.50822825505656E+204, 5.01645651011312E+204, 1.00329130202262E+205, 2.00658260404525E+205, 4.01316520809049E+205, 8.02633041618099E+205, 1.6052660832362E+206, 3.2105321664724E+206, 6.42106433294479E+206, 1.28421286658896E+207, 2.56842573317792E+207, 5.13685146635583E+207, 1.02737029327117E+208, 2.05474058654233E+208, 4.10948117308467E+208, 8.21896234616933E+208, 1.64379246923387E+209, 3.28758493846773E+209, 6.57516987693547E+209, 1.31503397538709E+210, 2.63006795077419E+210, 5.26013590154837E+210, 1.05202718030967E+211, 2.10405436061935E+211, 4.2081087212387E+211, 8.4162174424774E+211, 1.68324348849548E+212, 3.36648697699096E+212, 6.73297395398192E+212, 1.34659479079638E+213, 2.69318958159277E+213, 5.38637916318553E+213, 1.07727583263711E+214, 2.15455166527421E+214, 4.30910333054843E+214, 8.61820666109686E+214, 1.72364133221937E+215, 3.44728266443874E+215, 6.89456532887748E+215, 1.3789130657755E+216, 2.75782613155099E+216, 5.51565226310199E+216, 1.1031304526204E+217, 2.20626090524079E+217, 4.41252181048159E+217, 8.82504362096318E+217, 1.76500872419264E+218, 3.53001744838527E+218, 7.06003489677054E+218, 1.41200697935411E+219, 2.82401395870822E+219, 5.64802791741644E+219, 1.12960558348329E+220, 2.25921116696657E+220, 4.51842233393315E+220, 9.0368446678663E+220, 1.80736893357326E+221, 3.61473786714652E+221, 7.22947573429304E+221, 1.44589514685861E+222, 2.89179029371721E+222, 5.78358058743443E+222, 1.15671611748689E+223, 2.31343223497377E+223, 4.62686446994754E+223, 9.25372893989509E+223, 1.85074578797902E+224, 3.70149157595803E+224, 7.40298315191607E+224, 1.48059663038321E+225, 2.96119326076643E+225, 5.92238652153286E+225, 1.18447730430657E+226, 2.36895460861314E+226, 4.73790921722628E+226, 9.47581843445257E+226, 1.89516368689051E+227, 3.79032737378103E+227, 7.58065474756206E+227, 1.51613094951241E+228, 3.03226189902482E+228, 6.06452379804964E+228, 1.21290475960993E+229, 2.42580951921986E+229, 4.85161903843972E+229, 9.70323807687943E+229, 1.94064761537589E+230, 3.88129523075177E+230, 7.76259046150354E+230, 1.55251809230071E+231, 3.10503618460142E+231, 6.21007236920284E+231, 1.24201447384057E+232, 2.48402894768113E+232, 4.96805789536227E+232, 9.93611579072454E+232, 1.98722315814491E+233, 3.97444631628981E+233, 7.94889263257963E+233, 1.58977852651593E+234, 3.17955705303185E+234, 6.3591141060637E+234, 1.27182282121274E+235, 2.54364564242548E+235, 5.08729128485096E+235, 1.01745825697019E+236, 2.03491651394039E+236, 4.06983302788077E+236, 8.13966605576154E+236, 1.62793321115231E+237, 3.25586642230462E+237, 6.51173284460923E+237, 1.30234656892185E+238, 2.60469313784369E+238, 5.20938627568739E+238, 1.04187725513748E+239, 2.08375451027495E+239, 4.16750902054991E+239, 8.33501804109982E+239, 1.66700360821996E+240, 3.33400721643993E+240, 6.66801443287985E+240, 1.33360288657597E+241, 2.66720577315194E+241, 5.33441154630388E+241, 1.06688230926078E+242, 2.13376461852155E+242, 4.26752923704311E+242, 8.53505847408621E+242, 1.70701169481724E+243, 3.41402338963449E+243, 6.82804677926897E+243, 1.36560935585379E+244, 2.73121871170759E+244, 5.46243742341518E+244, 1.09248748468304E+245, 2.18497496936607E+245, 4.36994993873214E+245, 8.73989987746428E+245, 1.74797997549286E+246, 3.49595995098571E+246, 6.99191990197143E+246, 1.39838398039429E+247, 2.79676796078857E+247, 5.59353592157714E+247, 1.11870718431543E+248, 2.23741436863086E+248, 4.47482873726171E+248, 8.94965747452343E+248, 1.78993149490469E+249, 3.57986298980937E+249, 7.15972597961874E+249, 1.43194519592375E+250, 2.8638903918475E+250, 5.72778078369499E+250, 1.145556156739E+251, 2.291112313478E+251, 4.58222462695599E+251, 9.16444925391199E+251, 1.8328898507824E+252, 3.6657797015648E+252, 7.33155940312959E+252, 1.46631188062592E+253, 2.93262376125184E+253, 5.86524752250367E+253, 1.17304950450073E+254, 2.34609900900147E+254, 4.69219801800294E+254, 9.38439603600588E+254, 1.87687920720118E+255, 3.75375841440235E+255, 7.5075168288047E+255, 1.50150336576094E+256, 3.00300673152188E+256, 6.00601346304376E+256, 1.20120269260875E+257, 2.4024053852175E+257, 4.80481077043501E+257, 9.60962154087002E+257, 1.921924308174E+258, 3.84384861634801E+258, 7.68769723269601E+258, 1.5375394465392E+259, 3.07507889307841E+259, 6.15015778615681E+259, 1.23003155723136E+260, 2.46006311446272E+260, 4.92012622892545E+260, 9.8402524578509E+260, 1.96805049157018E+261, 3.93610098314036E+261, 7.87220196628072E+261, 1.57444039325614E+262, 3.14888078651229E+262, 6.29776157302457E+262, 1.25955231460491E+263, 2.51910462920983E+263, 5.03820925841966E+263, 1.00764185168393E+264, 2.01528370336786E+264, 4.03056740673573E+264, 8.06113481347145E+264, 1.61222696269429E+265, 3.22445392538858E+265, 6.44890785077716E+265, 1.28978157015543E+266, 2.57956314031087E+266, 5.15912628062173E+266, 1.03182525612435E+267, 2.06365051224869E+267, 4.12730102449738E+267, 8.25460204899477E+267, 1.65092040979895E+268, 3.30184081959791E+268, 6.60368163919582E+268, 1.32073632783916E+269, 2.64147265567833E+269, 5.28294531135665E+269, 1.05658906227133E+270, 2.11317812454266E+270, 4.22635624908532E+270, 8.45271249817064E+270, 1.69054249963413E+271, 3.38108499926826E+271, 6.76216999853652E+271, 1.3524339997073E+272, 2.70486799941461E+272, 5.40973599882921E+272, 1.08194719976584E+273, 2.16389439953168E+273, 4.32778879906337E+273, 8.65557759812674E+273, 1.73111551962535E+274, 3.4622310392507E+274, 6.92446207850139E+274, 1.38489241570028E+275, 2.76978483140056E+275, 5.53956966280111E+275, 1.10791393256022E+276, 2.21582786512045E+276, 4.43165573024089E+276, 8.86331146048178E+276, 1.77266229209636E+277, 3.54532458419271E+277, 7.09064916838542E+277, 1.41812983367708E+278, 2.83625966735417E+278, 5.67251933470834E+278, 1.13450386694167E+279, 2.26900773388334E+279, 4.53801546776667E+279, 9.07603093553334E+279, 1.81520618710667E+280, 3.63041237421334E+280, 7.26082474842668E+280, 1.45216494968534E+281, 2.90432989937067E+281, 5.80865979874134E+281, 1.16173195974827E+282, 2.32346391949654E+282, 4.64692783899307E+282, 9.29385567798614E+282, 1.85877113559723E+283, 3.71754227119446E+283, 7.43508454238892E+283, 1.48701690847778E+284, 2.97403381695557E+284, 5.94806763391113E+284, 1.18961352678223E+285, 2.37922705356445E+285, 4.75845410712891E+285, 9.51690821425781E+285, 1.90338164285156E+286, 3.80676328570312E+286, 7.61352657140625E+286, 1.52270531428125E+287, 3.0454106285625E+287, 6.090821257125E+287, 1.218164251425E+288, 2.43632850285E+288, 4.8726570057E+288, 9.7453140114E+288, 1.94906280228E+289, 3.89812560456E+289, 7.79625120912E+289, 1.559250241824E+290, 3.118500483648E+290, 6.237000967296E+290, 1.2474001934592E+291, 2.4948003869184E+291, 4.9896007738368E+291, 9.9792015476736E+291, 1.99584030953472E+292, 3.99168061906944E+292, 7.98336123813888E+292, 1.59667224762778E+293, 3.19334449525555E+293, 6.3866889905111E+293, 1.27733779810222E+294, 2.55467559620444E+294, 5.10935119240888E+294, 1.02187023848178E+295, 2.04374047696355E+295, 4.08748095392711E+295, 8.17496190785421E+295, 1.63499238157084E+296, 3.26998476314168E+296, 6.53996952628337E+296, 1.30799390525667E+297, 2.61598781051335E+297, 5.2319756210267E+297, 1.04639512420534E+298, 2.09279024841068E+298, 4.18558049682136E+298, 8.37116099364271E+298, 1.67423219872854E+299, 3.34846439745709E+299, 6.69692879491417E+299, 1.33938575898283E+300, 2.67877151796567E+300, 5.35754303593134E+300, 1.07150860718627E+301, 2.14301721437253E+301, 4.28603442874507E+301, 8.57206885749014E+301, 1.71441377149803E+302, 3.42882754299606E+302, 6.85765508599211E+302, 1.37153101719842E+303, 2.74306203439684E+303, 5.48612406879369E+303, 1.09722481375874E+304, 2.19444962751748E+304, 4.38889925503495E+304, 8.7777985100699E+304, 1.75555970201398E+305, 3.51111940402796E+305, 7.02223880805592E+305, 1.40444776161118E+306, 2.80889552322237E+306, 5.61779104644474E+306, 1.12355820928895E+307, 2.24711641857789E+307, 4.49423283715579E+307 }; double negpow2[] = { 1, 0.5, 0.25, 0.125, 0.0625, 0.03125, 0.015625, 0.0078125, 0.00390625, 0.001953125, 0.0009765625, 0.00048828125, 0.000244140625, 0.0001220703125, 6.103515625E-05, 3.0517578125E-05, 1.52587890625E-05, 7.62939453125E-06, 3.814697265625E-06, 1.9073486328125E-06, 9.5367431640625E-07, 4.76837158203125E-07, 2.38418579101563E-07, 1.19209289550781E-07, 5.96046447753906E-08, 2.98023223876953E-08, 1.49011611938477E-08, 7.45058059692383E-09, 3.72529029846191E-09, 1.86264514923096E-09, 9.31322574615479E-10, 4.65661287307739E-10, 2.3283064365387E-10, 1.16415321826935E-10, 5.82076609134674E-11, 2.91038304567337E-11, 1.45519152283669E-11, 7.27595761418343E-12, 3.63797880709171E-12, 1.81898940354586E-12, 9.09494701772928E-13, 4.54747350886464E-13, 2.27373675443232E-13, 1.13686837721616E-13, 5.6843418860808E-14, 2.8421709430404E-14, 1.4210854715202E-14, 7.105427357601E-15, 3.5527136788005E-15, 1.77635683940025E-15, 8.88178419700125E-16, 4.44089209850063E-16, 2.22044604925031E-16, 1.11022302462516E-16, 5.55111512312578E-17, 2.77555756156289E-17, 1.38777878078145E-17, 6.93889390390723E-18, 3.46944695195361E-18, 1.73472347597681E-18, 8.67361737988404E-19, 4.33680868994202E-19, 2.16840434497101E-19, 1.0842021724855E-19, 5.42101086242752E-20, 2.71050543121376E-20, 1.35525271560688E-20, 6.7762635780344E-21, 3.3881317890172E-21, 1.6940658945086E-21, 8.470329472543E-22, 4.2351647362715E-22, 2.11758236813575E-22, 1.05879118406788E-22, 5.29395592033938E-23, 2.64697796016969E-23, 1.32348898008484E-23, 6.61744490042422E-24, 3.30872245021211E-24, 1.65436122510606E-24, 8.27180612553028E-25, 4.13590306276514E-25, 2.06795153138257E-25, 1.03397576569128E-25, 5.16987882845642E-26, 2.58493941422821E-26, 1.29246970711411E-26, 6.46234853557053E-27, 3.23117426778526E-27, 1.61558713389263E-27, 8.07793566946316E-28, 4.03896783473158E-28, 2.01948391736579E-28, 1.0097419586829E-28, 5.04870979341448E-29, 2.52435489670724E-29, 1.26217744835362E-29, 6.31088724176809E-30, 3.15544362088405E-30, 1.57772181044202E-30, 7.88860905221012E-31, 3.94430452610506E-31, 1.97215226305253E-31, 9.86076131526265E-32, 4.93038065763132E-32, 2.46519032881566E-32, 1.23259516440783E-32, 6.16297582203915E-33, 3.08148791101958E-33, 1.54074395550979E-33, 7.70371977754894E-34, 3.85185988877447E-34, 1.92592994438724E-34, 9.62964972193618E-35, 4.81482486096809E-35, 2.40741243048404E-35, 1.20370621524202E-35, 6.01853107621011E-36, 3.00926553810506E-36, 1.50463276905253E-36, 7.52316384526264E-37, 3.76158192263132E-37, 1.88079096131566E-37, 9.4039548065783E-38, 4.70197740328915E-38, 2.35098870164458E-38, 1.17549435082229E-38, 5.87747175411144E-39, 2.93873587705572E-39, 1.46936793852786E-39, 7.3468396926393E-40, 3.67341984631965E-40, 1.83670992315982E-40, 9.18354961579912E-41, 4.59177480789956E-41, 2.29588740394978E-41, 1.14794370197489E-41, 5.73971850987445E-42, 2.86985925493723E-42, 1.43492962746861E-42, 7.17464813734306E-43, 3.58732406867153E-43, 1.79366203433577E-43, 8.96831017167883E-44, 4.48415508583941E-44, 2.24207754291971E-44, 1.12103877145985E-44, 5.60519385729927E-45, 2.80259692864963E-45, 1.40129846432482E-45, 7.00649232162409E-46, 3.50324616081204E-46, 1.75162308040602E-46, 8.75811540203011E-47, 4.37905770101505E-47, 2.18952885050753E-47, 1.09476442525376E-47, 5.47382212626882E-48, 2.73691106313441E-48, 1.3684555315672E-48, 6.84227765783602E-49, 3.42113882891801E-49, 1.71056941445901E-49, 8.55284707229503E-50, 4.27642353614751E-50, 2.13821176807376E-50, 1.06910588403688E-50, 5.34552942018439E-51, 2.6727647100922E-51, 1.3363823550461E-51, 6.68191177523049E-52, 3.34095588761524E-52, 1.67047794380762E-52, 8.35238971903811E-53, 4.17619485951906E-53, 2.08809742975953E-53, 1.04404871487976E-53, 5.22024357439882E-54, 2.61012178719941E-54, 1.3050608935997E-54, 6.52530446799852E-55, 3.26265223399926E-55, 1.63132611699963E-55, 8.15663058499816E-56, 4.07831529249908E-56, 2.03915764624954E-56, 1.01957882312477E-56, 5.09789411562385E-57, 2.54894705781192E-57, 1.27447352890596E-57, 6.37236764452981E-58, 3.1861838222649E-58, 1.59309191113245E-58, 7.96545955566226E-59, 3.98272977783113E-59, 1.99136488891557E-59, 9.95682444457783E-60, 4.97841222228891E-60, 2.48920611114446E-60, 1.24460305557223E-60, 6.22301527786114E-61, 3.11150763893057E-61, 1.55575381946529E-61, 7.77876909732643E-62, 3.88938454866321E-62, 1.94469227433161E-62, 9.72346137165803E-63, 4.86173068582902E-63, 2.43086534291451E-63, 1.21543267145725E-63, 6.07716335728627E-64, 3.03858167864314E-64, 1.51929083932157E-64, 7.59645419660784E-65, 3.79822709830392E-65, 1.89911354915196E-65, 9.4955677457598E-66, 4.7477838728799E-66, 2.37389193643995E-66, 1.18694596821997E-66, 5.93472984109987E-67, 2.96736492054994E-67, 1.48368246027497E-67, 7.41841230137484E-68, 3.70920615068742E-68, 1.85460307534371E-68, 9.27301537671855E-69, 4.63650768835928E-69, 2.31825384417964E-69, 1.15912692208982E-69, 5.7956346104491E-70, 2.89781730522455E-70, 1.44890865261227E-70, 7.24454326306137E-71, 3.62227163153068E-71, 1.81113581576534E-71, 9.05567907882671E-72, 4.52783953941336E-72, 2.26391976970668E-72, 1.13195988485334E-72, 5.6597994242667E-73, 2.82989971213335E-73, 1.41494985606667E-73, 7.07474928033337E-74, 3.53737464016668E-74, 1.76868732008334E-74, 8.84343660041671E-75, 4.42171830020836E-75, 2.21085915010418E-75, 1.10542957505209E-75, 5.52714787526044E-76, 2.76357393763022E-76, 1.38178696881511E-76, 6.90893484407556E-77, 3.45446742203778E-77, 1.72723371101889E-77, 8.63616855509444E-78, 4.31808427754722E-78, 2.15904213877361E-78, 1.07952106938681E-78, 5.39760534693403E-79, 2.69880267346701E-79, 1.34940133673351E-79, 6.74700668366753E-80, 3.37350334183377E-80, 1.68675167091688E-80, 8.43375835458442E-81, 4.21687917729221E-81, 2.1084395886461E-81, 1.05421979432305E-81, 5.27109897161526E-82, 2.63554948580763E-82, 1.31777474290382E-82, 6.58887371451908E-83, 3.29443685725954E-83, 1.64721842862977E-83, 8.23609214314885E-84, 4.11804607157442E-84, 2.05902303578721E-84, 1.02951151789361E-84, 5.14755758946803E-85, 2.57377879473401E-85, 1.28688939736701E-85, 6.43444698683504E-86, 3.21722349341752E-86, 1.60861174670876E-86, 8.0430587335438E-87, 4.0215293667719E-87, 2.01076468338595E-87, 1.00538234169297E-87, 5.02691170846487E-88, 2.51345585423244E-88, 1.25672792711622E-88, 6.28363963558109E-89, 3.14181981779055E-89, 1.57090990889527E-89, 7.85454954447636E-90, 3.92727477223818E-90, 1.96363738611909E-90, 9.81818693059545E-91, 4.90909346529773E-91, 2.45454673264886E-91, 1.22727336632443E-91, 6.13636683162216E-92, 3.06818341581108E-92, 1.53409170790554E-92, 7.6704585395277E-93, 3.83522926976385E-93, 1.91761463488192E-93, 9.58807317440962E-94, 4.79403658720481E-94, 2.39701829360241E-94, 1.1985091468012E-94, 5.99254573400601E-95, 2.99627286700301E-95, 1.4981364335015E-95, 7.49068216750752E-96, 3.74534108375376E-96, 1.87267054187688E-96, 9.3633527093844E-97, 4.6816763546922E-97, 2.3408381773461E-97, 1.17041908867305E-97, 5.85209544336525E-98, 2.92604772168262E-98, 1.46302386084131E-98, 7.31511930420656E-99, 3.65755965210328E-99, 1.82877982605164E-99, 9.1438991302582E-100, 4.5719495651291E-100, 2.28597478256455E-100, 1.14298739128227E-100, 5.71493695641137E-101, 2.85746847820569E-101, 1.42873423910284E-101, 7.14367119551422E-102, 3.57183559775711E-102, 1.78591779887855E-102, 8.92958899439277E-103, 4.46479449719639E-103, 2.23239724859819E-103, 1.1161986242991E-103, 5.58099312149548E-104, 2.79049656074774E-104, 1.39524828037387E-104, 6.97624140186935E-105, 3.48812070093468E-105, 1.74406035046734E-105, 8.72030175233669E-106, 4.36015087616835E-106, 2.18007543808417E-106, 1.09003771904209E-106, 5.45018859521043E-107, 2.72509429760522E-107, 1.36254714880261E-107, 6.81273574401304E-108, 3.40636787200652E-108, 1.70318393600326E-108, 8.5159196800163E-109, 4.25795984000815E-109, 2.12897992000408E-109, 1.06448996000204E-109, 5.32244980001019E-110, 2.66122490000509E-110, 1.33061245000255E-110, 6.65306225001274E-111, 3.32653112500637E-111, 1.66326556250318E-111, 8.31632781251592E-112, 4.15816390625796E-112, 2.07908195312898E-112, 1.03954097656449E-112, 5.19770488282245E-113, 2.59885244141122E-113, 1.29942622070561E-113, 6.49713110352806E-114, 3.24856555176403E-114, 1.62428277588202E-114, 8.12141387941008E-115, 4.06070693970504E-115, 2.03035346985252E-115, 1.01517673492626E-115, 5.0758836746313E-116, 2.53794183731565E-116, 1.26897091865782E-116, 6.34485459328912E-117, 3.17242729664456E-117, 1.58621364832228E-117, 7.9310682416114E-118, 3.9655341208057E-118, 1.98276706040285E-118, 9.91383530201425E-119, 4.95691765100713E-119, 2.47845882550356E-119, 1.23922941275178E-119, 6.19614706375891E-120, 3.09807353187945E-120, 1.54903676593973E-120, 7.74518382969864E-121, 3.87259191484932E-121, 1.93629595742466E-121, 9.6814797871233E-122, 4.84073989356165E-122, 2.42036994678082E-122, 1.21018497339041E-122, 6.05092486695206E-123, 3.02546243347603E-123, 1.51273121673802E-123, 7.56365608369007E-124, 3.78182804184504E-124, 1.89091402092252E-124, 9.45457010461259E-125, 4.7272850523063E-125, 2.36364252615315E-125, 1.18182126307657E-125, 5.90910631538287E-126, 2.95455315769144E-126, 1.47727657884572E-126, 7.38638289422859E-127, 3.69319144711429E-127, 1.84659572355715E-127, 9.23297861778574E-128, 4.61648930889287E-128, 2.30824465444643E-128, 1.15412232722322E-128, 5.77061163611608E-129, 2.88530581805804E-129, 1.44265290902902E-129, 7.21326454514511E-130, 3.60663227257255E-130, 1.80331613628628E-130, 9.01658068143138E-131, 4.50829034071569E-131, 2.25414517035785E-131, 1.12707258517892E-131, 5.63536292589461E-132, 2.81768146294731E-132, 1.40884073147365E-132, 7.04420365736827E-133, 3.52210182868413E-133, 1.76105091434207E-133, 8.80525457171033E-134, 4.40262728585517E-134, 2.20131364292758E-134, 1.10065682146379E-134, 5.50328410731896E-135, 2.75164205365948E-135, 1.37582102682974E-135, 6.8791051341487E-136, 3.43955256707435E-136, 1.71977628353717E-136, 8.59888141768587E-137, 4.29944070884294E-137, 2.14972035442147E-137, 1.07486017721073E-137, 5.37430088605367E-138, 2.68715044302684E-138, 1.34357522151342E-138, 6.71787610756709E-139, 3.35893805378354E-139, 1.67946902689177E-139, 8.39734513445886E-140, 4.19867256722943E-140, 2.09933628361472E-140, 1.04966814180736E-140, 5.24834070903679E-141, 2.62417035451839E-141, 1.3120851772592E-141, 6.56042588629599E-142, 3.28021294314799E-142, 1.640106471574E-142, 8.20053235786998E-143, 4.10026617893499E-143, 2.0501330894675E-143, 1.02506654473375E-143, 5.12533272366874E-144, 2.56266636183437E-144, 1.28133318091718E-144, 6.40666590458592E-145, 3.20333295229296E-145, 1.60166647614648E-145, 8.0083323807324E-146, 4.0041661903662E-146, 2.0020830951831E-146, 1.00104154759155E-146, 5.00520773795775E-147, 2.50260386897888E-147, 1.25130193448944E-147, 6.25650967244719E-148, 3.1282548362236E-148, 1.5641274181118E-148, 7.82063709055899E-149, 3.91031854527949E-149, 1.95515927263975E-149, 9.77579636319874E-150, 4.88789818159937E-150, 2.44394909079968E-150, 1.22197454539984E-150, 6.10987272699921E-151, 3.0549363634996E-151, 1.5274681817498E-151, 7.63734090874901E-152, 3.81867045437451E-152, 1.90933522718725E-152, 9.54667613593626E-153, 4.77333806796813E-153, 2.38666903398407E-153, 1.19333451699203E-153, 5.96667258496017E-154, 2.98333629248008E-154, 1.49166814624004E-154, 7.45834073120021E-155, 3.7291703656001E-155, 1.86458518280005E-155, 9.32292591400026E-156, 4.66146295700013E-156, 2.33073147850006E-156, 1.16536573925003E-156, 5.82682869625016E-157, 2.91341434812508E-157, 1.45670717406254E-157, 7.2835358703127E-158, 3.64176793515635E-158, 1.82088396757818E-158, 9.10441983789088E-159, 4.55220991894544E-159, 2.27610495947272E-159, 1.13805247973636E-159, 5.6902623986818E-160, 2.8451311993409E-160, 1.42256559967045E-160, 7.11282799835225E-161, 3.55641399917612E-161, 1.77820699958806E-161, 8.89103499794031E-162, 4.44551749897016E-162, 2.22275874948508E-162, 1.11137937474254E-162, 5.55689687371269E-163, 2.77844843685635E-163, 1.38922421842817E-163, 6.94612109214087E-164, 3.47306054607043E-164, 1.73653027303522E-164, 8.68265136517608E-165, 4.34132568258804E-165, 2.17066284129402E-165, 1.08533142064701E-165, 5.42665710323505E-166, 2.71332855161753E-166, 1.35666427580876E-166, 6.78332137904382E-167, 3.39166068952191E-167, 1.69583034476095E-167, 8.47915172380477E-168, 4.23957586190238E-168, 2.11978793095119E-168, 1.0598939654756E-168, 5.29946982737798E-169, 2.64973491368899E-169, 1.3248674568445E-169, 6.62433728422248E-170, 3.31216864211124E-170, 1.65608432105562E-170, 8.2804216052781E-171, 4.14021080263905E-171, 2.07010540131952E-171, 1.03505270065976E-171, 5.17526350329881E-172, 2.5876317516494E-172, 1.2938158758247E-172, 6.46907937912351E-173, 3.23453968956176E-173, 1.61726984478088E-173, 8.08634922390439E-174, 4.04317461195219E-174, 2.0215873059761E-174, 1.01079365298805E-174, 5.05396826494024E-175, 2.52698413247012E-175, 1.26349206623506E-175, 6.3174603311753E-176, 3.15873016558765E-176, 1.57936508279383E-176, 7.89682541396913E-177, 3.94841270698457E-177, 1.97420635349228E-177, 9.87103176746141E-178, 4.93551588373071E-178, 2.46775794186535E-178, 1.23387897093268E-178, 6.16939485466338E-179, 3.08469742733169E-179, 1.54234871366585E-179, 7.71174356832923E-180, 3.85587178416461E-180, 1.92793589208231E-180, 9.63967946041154E-181, 4.81983973020577E-181, 2.40991986510288E-181, 1.20495993255144E-181, 6.02479966275721E-182, 3.01239983137861E-182, 1.5061999156893E-182, 7.53099957844651E-183, 3.76549978922326E-183, 1.88274989461163E-183, 9.41374947305814E-184, 4.70687473652907E-184, 2.35343736826454E-184, 1.17671868413227E-184, 5.88359342066134E-185, 2.94179671033067E-185, 1.47089835516533E-185, 7.35449177582667E-186, 3.67724588791334E-186, 1.83862294395667E-186, 9.19311471978334E-187, 4.59655735989167E-187, 2.29827867994584E-187, 1.14913933997292E-187, 5.74569669986459E-188, 2.87284834993229E-188, 1.43642417496615E-188, 7.18212087483074E-189, 3.59106043741537E-189, 1.79553021870768E-189, 8.97765109353842E-190, 4.48882554676921E-190, 2.2444127733846E-190, 1.1222063866923E-190, 5.61103193346151E-191, 2.80551596673076E-191, 1.40275798336538E-191, 7.01378991682689E-192, 3.50689495841344E-192, 1.75344747920672E-192, 8.76723739603361E-193, 4.38361869801681E-193, 2.1918093490084E-193, 1.0959046745042E-193, 5.47952337252101E-194, 2.7397616862605E-194, 1.36988084313025E-194, 6.84940421565126E-195, 3.42470210782563E-195, 1.71235105391281E-195, 8.56175526956407E-196, 4.28087763478204E-196, 2.14043881739102E-196, 1.07021940869551E-196, 5.35109704347755E-197, 2.67554852173877E-197, 1.33777426086939E-197, 6.68887130434693E-198, 3.34443565217347E-198, 1.67221782608673E-198, 8.36108913043367E-199, 4.18054456521683E-199, 2.09027228260842E-199, 1.04513614130421E-199, 5.22568070652104E-200, 2.61284035326052E-200, 1.30642017663026E-200, 6.5321008831513E-201, 3.26605044157565E-201, 1.63302522078783E-201, 8.16512610393913E-202, 4.08256305196956E-202, 2.04128152598478E-202, 1.02064076299239E-202, 5.10320381496195E-203, 2.55160190748098E-203, 1.27580095374049E-203, 6.37900476870244E-204, 3.18950238435122E-204, 1.59475119217561E-204, 7.97375596087805E-205, 3.98687798043903E-205, 1.99343899021951E-205, 9.96719495109757E-206, 4.98359747554878E-206, 2.49179873777439E-206, 1.2458993688872E-206, 6.22949684443598E-207, 3.11474842221799E-207, 1.55737421110899E-207, 7.78687105554497E-208, 3.89343552777249E-208, 1.94671776388624E-208, 9.73358881943122E-209, 4.86679440971561E-209, 2.4333972048578E-209, 1.2166986024289E-209, 6.08349301214451E-210, 3.04174650607226E-210, 1.52087325303613E-210, 7.60436626518064E-211, 3.80218313259032E-211, 1.90109156629516E-211, 9.5054578314758E-212, 4.7527289157379E-212, 2.37636445786895E-212, 1.18818222893447E-212, 5.94091114467237E-213, 2.97045557233619E-213, 1.48522778616809E-213, 7.42613893084047E-214, 3.71306946542023E-214, 1.85653473271012E-214, 9.28267366355059E-215, 4.64133683177529E-215, 2.32066841588765E-215, 1.16033420794382E-215, 5.80167103971912E-216, 2.90083551985956E-216, 1.45041775992978E-216, 7.25208879964889E-217, 3.62604439982445E-217, 1.81302219991222E-217, 9.06511099956112E-218, 4.53255549978056E-218, 2.26627774989028E-218, 1.13313887494514E-218, 5.6656943747257E-219, 2.83284718736285E-219, 1.41642359368142E-219, 7.08211796840712E-220, 3.54105898420356E-220, 1.77052949210178E-220, 8.8526474605089E-221, 4.42632373025445E-221, 2.21316186512723E-221, 1.10658093256361E-221, 5.53290466281807E-222, 2.76645233140903E-222, 1.38322616570452E-222, 6.91613082852258E-223, 3.45806541426129E-223, 1.72903270713065E-223, 8.64516353565323E-224, 4.32258176782661E-224, 2.16129088391331E-224, 1.08064544195665E-224, 5.40322720978327E-225, 2.70161360489163E-225, 1.35080680244582E-225, 6.75403401222908E-226, 3.37701700611454E-226, 1.68850850305727E-226, 8.44254251528635E-227, 4.22127125764318E-227, 2.11063562882159E-227, 1.05531781441079E-227, 5.27658907205397E-228, 2.63829453602699E-228, 1.31914726801349E-228, 6.59573634006746E-229, 3.29786817003373E-229, 1.64893408501687E-229, 8.24467042508433E-230, 4.12233521254217E-230, 2.06116760627108E-230, 1.03058380313554E-230, 5.15291901567771E-231, 2.57645950783885E-231, 1.28822975391943E-231, 6.44114876959713E-232, 3.22057438479857E-232, 1.61028719239928E-232, 8.05143596199642E-233, 4.02571798099821E-233, 2.0128589904991E-233, 1.00642949524955E-233, 5.03214747624776E-234, 2.51607373812388E-234, 1.25803686906194E-234, 6.2901843453097E-235, 3.14509217265485E-235, 1.57254608632743E-235, 7.86273043163713E-236, 3.93136521581856E-236, 1.96568260790928E-236, 9.82841303954641E-237, 4.9142065197732E-237, 2.4571032598866E-237, 1.2285516299433E-237, 6.1427581497165E-238, 3.07137907485825E-238, 1.53568953742913E-238, 7.67844768714563E-239, 3.83922384357282E-239, 1.91961192178641E-239, 9.59805960893204E-240, 4.79902980446602E-240, 2.39951490223301E-240, 1.1997574511165E-240, 5.99878725558252E-241, 2.99939362779126E-241, 1.49969681389563E-241, 7.49848406947815E-242, 3.74924203473908E-242, 1.87462101736954E-242, 9.37310508684769E-243, 4.68655254342385E-243, 2.34327627171192E-243, 1.17163813585596E-243, 5.85819067927981E-244, 2.9290953396399E-244, 1.46454766981995E-244, 7.32273834909976E-245, 3.66136917454988E-245, 1.83068458727494E-245, 9.1534229363747E-246, 4.57671146818735E-246, 2.28835573409368E-246, 1.14417786704684E-246, 5.72088933523419E-247, 2.86044466761709E-247, 1.43022233380855E-247, 7.15111166904273E-248, 3.57555583452137E-248, 1.78777791726068E-248, 8.93888958630342E-249, 4.46944479315171E-249, 2.23472239657585E-249, 1.11736119828793E-249, 5.58680599143964E-250, 2.79340299571982E-250, 1.39670149785991E-250, 6.98350748929955E-251, 3.49175374464977E-251, 1.74587687232489E-251, 8.72938436162443E-252, 4.36469218081222E-252, 2.18234609040611E-252, 1.09117304520305E-252, 5.45586522601527E-253, 2.72793261300764E-253, 1.36396630650382E-253, 6.81983153251909E-254, 3.40991576625954E-254, 1.70495788312977E-254, 8.52478941564886E-255, 4.26239470782443E-255, 2.13119735391221E-255, 1.06559867695611E-255, 5.32799338478054E-256, 2.66399669239027E-256, 1.33199834619513E-256, 6.65999173097567E-257, 3.32999586548784E-257, 1.66499793274392E-257, 8.32498966371959E-258, 4.16249483185979E-258, 2.0812474159299E-258, 1.04062370796495E-258, 5.20311853982474E-259, 2.60155926991237E-259, 1.30077963495619E-259, 6.50389817478093E-260, 3.25194908739046E-260, 1.62597454369523E-260, 8.12987271847616E-261, 4.06493635923808E-261, 2.03246817961904E-261, 1.01623408980952E-261, 5.0811704490476E-262, 2.5405852245238E-262, 1.2702926122619E-262, 6.3514630613095E-263, 3.17573153065475E-263, 1.58786576532738E-263, 7.93932882663688E-264, 3.96966441331844E-264, 1.98483220665922E-264, 9.9241610332961E-265, 4.96208051664805E-265, 2.48104025832402E-265, 1.24052012916201E-265, 6.20260064581006E-266, 3.10130032290503E-266, 1.55065016145251E-266, 7.75325080726257E-267, 3.87662540363129E-267, 1.93831270181564E-267, 9.69156350907822E-268, 4.84578175453911E-268, 2.42289087726955E-268, 1.21144543863478E-268, 6.05722719317389E-269, 3.02861359658694E-269, 1.51430679829347E-269, 7.57153399146736E-270, 3.78576699573368E-270, 1.89288349786684E-270, 9.4644174893342E-271, 4.7322087446671E-271, 2.36610437233355E-271, 1.18305218616677E-271, 5.91526093083387E-272, 2.95763046541694E-272, 1.47881523270847E-272, 7.39407616354234E-273, 3.69703808177117E-273, 1.84851904088559E-273, 9.24259520442793E-274, 4.62129760221396E-274, 2.31064880110698E-274, 1.15532440055349E-274, 5.77662200276745E-275, 2.88831100138373E-275, 1.44415550069186E-275, 7.22077750345932E-276, 3.61038875172966E-276, 1.80519437586483E-276, 9.02597187932415E-277, 4.51298593966207E-277, 2.25649296983104E-277, 1.12824648491552E-277, 5.64123242457759E-278, 2.8206162122888E-278, 1.4103081061444E-278, 7.05154053072199E-279, 3.525770265361E-279, 1.7628851326805E-279, 8.81442566340249E-280, 4.40721283170124E-280, 2.20360641585062E-280, 1.10180320792531E-280, 5.50901603962656E-281, 2.75450801981328E-281, 1.37725400990664E-281, 6.88627004953319E-282, 3.4431350247666E-282, 1.7215675123833E-282, 8.60783756191649E-283, 4.30391878095825E-283, 2.15195939047912E-283, 1.07597969523956E-283, 5.37989847619781E-284, 2.6899492380989E-284, 1.34497461904945E-284, 6.72487309524726E-285, 3.36243654762363E-285, 1.68121827381181E-285, 8.40609136905907E-286, 4.20304568452954E-286, 2.10152284226477E-286, 1.05076142113238E-286, 5.25380710566192E-287, 2.62690355283096E-287, 1.31345177641548E-287, 6.5672588820774E-288, 3.2836294410387E-288, 1.64181472051935E-288, 8.20907360259675E-289, 4.10453680129838E-289, 2.05226840064919E-289, 1.02613420032459E-289, 5.13067100162297E-290, 2.56533550081149E-290, 1.28266775040574E-290, 6.41333875202871E-291, 3.20666937601436E-291, 1.60333468800718E-291, 8.01667344003589E-292, 4.00833672001795E-292, 2.00416836000897E-292, 1.00208418000449E-292, 5.01042090002243E-293, 2.50521045001122E-293, 1.25260522500561E-293, 6.26302612502804E-294, 3.13151306251402E-294, 1.56575653125701E-294, 7.82878265628505E-295, 3.91439132814253E-295, 1.95719566407126E-295, 9.78597832035631E-296, 4.89298916017816E-296, 2.44649458008908E-296, 1.22324729004454E-296, 6.1162364502227E-297, 3.05811822511135E-297, 1.52905911255567E-297, 7.64529556277837E-298, 3.82264778138918E-298, 1.91132389069459E-298, 9.55661945347296E-299, 4.77830972673648E-299, 2.38915486336824E-299, 1.19457743168412E-299, 5.9728871584206E-300, 2.9864435792103E-300, 1.49322178960515E-300, 7.46610894802575E-301, 3.73305447401288E-301, 1.86652723700644E-301, 9.33263618503219E-302, 4.66631809251609E-302, 2.33315904625805E-302, 1.16657952312902E-302, 5.83289761564512E-303, 2.91644880782256E-303, 1.45822440391128E-303, 7.2911220195564E-304, 3.6455610097782E-304, 1.8227805048891E-304, 9.1139025244455E-305, 4.55695126222275E-305, 2.27847563111137E-305, 1.13923781555569E-305, 5.69618907777844E-306, 2.84809453888922E-306, 1.42404726944461E-306, 7.12023634722304E-307, 3.56011817361152E-307, 1.78005908680576E-307, 8.90029543402881E-308, 4.4501477170144E-308, 2.2250738585072E-308 }; //int GetNumberOfBitsForNonNegativeInteger(asn1SccUint v) int mylog2(double v) { if (v<2) { v=1.0/v; return -GetNumberOfBitsForNonNegativeInteger((asn1SccUint)v); } return GetNumberOfBitsForNonNegativeInteger((asn1SccUint)v); } double log2(double v) { return log(v)/log(2.0); } double mypow2(int exp) { asn1SccUint ret=1; if (exp>=0) { /* while(exp) { ret<<=1; exp--; }*/ return pospow2[exp]; } else { exp = -exp; /* while(exp) { ret<<=1; exp--; } return 1.0/(double)ret;*/ return negpow2[exp]; } } double pow2(double v) { return pow(2.0, v); } double myReal(asn1SccUint* mantissa, int exp) { return (*mantissa) * mypow2(exp); // return (*mantissa) * pow2(exp); } void CalculateMantissaAndExponent(double d, int* exp, asn1SccUint64* mantissa) { double error; double dmantissa; int nCount=100; assert(d>0.0); /* Let mantissa be 1 then exponent is the logarithm of the input value. However, since we need the exponent to be stored in an INT we get the Floor Floor return the largest integer less than or equal to the specified double-precision floating-point number */ *exp = mylog2(d); /* Since exponent was 'Floored' mantissa is not 1 anymore but the following value now mantissa has a value in the range [1..base) */ dmantissa = d/mypow2(*exp); *mantissa = (asn1SccUint64)dmantissa; error = fabs((double)(d-myReal(mantissa,*exp)))/d; while ( (*mantissa <= MAX_MANTISSA) && (error > DBL_EPSILON) && nCount--) { dmantissa *=2; *mantissa = (asn1SccUint64)dmantissa; (*exp)--; error = fabs((double)(d-myReal(mantissa,*exp)))/d; } } #endif asn1tools-0.169.0/examples/benchmarks/c_source/asn1scc/main.c000066400000000000000000000054211524544274600240110ustar00rootroot00000000000000#include #include #include #include #include #include #include #include "my_protocol.h" int main(int argc, const char *argv[]) { int i; bool ok; int res; uint8_t encoded[40]; PDU decoded; BitStream bit_stream; decoded.a = 12345678; decoded.b.kind = PDU_b_a_PRESENT; decoded.b.u.a.nCount = 2; /* First element. */ decoded.b.u.a.arr[0].kind = B_a_PRESENT; decoded.b.u.a.arr[0].u.a.exist.a = 1; decoded.b.u.a.arr[0].u.a.a.a.nCount = 0; decoded.b.u.a.arr[0].u.a.a.exist.b = 0; decoded.b.u.a.arr[0].u.a.a.exist.c = 0; decoded.b.u.a.arr[0].u.a.a.c = 0; decoded.b.u.a.arr[0].u.a.b = 4294967295; decoded.b.u.a.arr[0].u.a.c.kind = C_c_a_PRESENT; decoded.b.u.a.arr[0].u.a.c.u.a.arr[0].nCount = 3; memcpy(&decoded.b.u.a.arr[0].u.a.c.u.a.arr[0].arr[0], "\x00\x01\x02", 3); decoded.b.u.a.arr[0].u.a.c.u.a.arr[1].nCount = 4; memcpy(&decoded.b.u.a.arr[0].u.a.c.u.a.arr[1].arr[0], "\x00\x01\x02\x03", 4); decoded.b.u.a.arr[0].u.a.c.u.a.arr[2].nCount = 5; memcpy(&decoded.b.u.a.arr[0].u.a.c.u.a.arr[2].arr[0], "\x00\x01\x02\x03\x04", 5); decoded.b.u.a.arr[0].u.a.d.a = true; /* Second element. */ decoded.b.u.a.arr[1].kind = B_b_PRESENT; decoded.b.u.a.arr[1].u.b.nCount = 16; memcpy(&decoded.b.u.a.arr[1].u.b.arr[0], "\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a", 16); for (i = 0; i < atoi(argv[1]); i++) { /* Encode the PDU. */ BitStream_Init(&bit_stream, &encoded[0], sizeof(encoded)); ok = PDU_Encode(&decoded, &bit_stream, &res, false); assert(ok); BitStream_GetLength(&bit_stream); assert(BitStream_GetLength(&bit_stream) == sizeof(encoded)); assert(memcmp(&encoded[0], "\x80\xbc\x61\x4e\x02\x0f\xff\xff\xff\xf1\x00\x00\x81\x18" "\x00\x08\x10\x1a\x00\x00\x81\x01\x82\x7e\xb4\xb4\xb4\xb4" "\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4", sizeof(encoded)) == 0); /* Decode the PDU. */ memset(&decoded, 0, sizeof(decoded)); BitStream_AttachBuffer(&bit_stream, &encoded[0], sizeof(encoded)); ok = PDU_Decode(&decoded, &bit_stream, &res); assert(ok); /* Just a sanity check that decoding was performed. */ assert(decoded.a == 12345678); /* c exists after decoding. Clear before next encoding, even if c is the default value. */ decoded.b.u.a.arr[0].u.a.a.exist.c = 0; } return (0); } asn1tools-0.169.0/examples/benchmarks/c_source/asn1tools/000077500000000000000000000000001524544274600233075ustar00rootroot00000000000000asn1tools-0.169.0/examples/benchmarks/c_source/asn1tools/Makefile000066400000000000000000000011151524544274600247450ustar00rootroot00000000000000all: gcc $(CFLAGS) $(OPT_SIZE) generated/*.c main.c -o main size main readelf -s -W main | sort -k3 -n valgrind $(MASSIF_FLAGS) --massif-out-file=main.massif ./main 1 ms_print main.massif time ./main $(ENCODE_DECODE_ITERATIONS) gcc $(CFLAGS) $(OPT_SPEED) generated/*.c main.c -o main time ./main $(ENCODE_DECODE_ITERATIONS) generate: rm -rf generated mkdir -p generated cd generated && \ env PYTHONPATH=../../../../.. \ python3 -m asn1tools generate_c_source \ --namespace uper --codec uper \ ../../my_protocol.asn include ../common.mk asn1tools-0.169.0/examples/benchmarks/c_source/asn1tools/generated/000077500000000000000000000000001524544274600252455ustar00rootroot00000000000000asn1tools-0.169.0/examples/benchmarks/c_source/asn1tools/generated/uper.c000066400000000000000000000517161524544274600263760ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.145.2 Thu Jan 24 08:14:06 2019. */ #include #include "uper.h" struct encoder_t { uint8_t *buf_p; ssize_t size; ssize_t pos; }; struct decoder_t { const uint8_t *buf_p; ssize_t size; ssize_t pos; }; static void encoder_init(struct encoder_t *self_p, uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (8 * (ssize_t)size); self_p->pos = 0; } static ssize_t encoder_get_result(struct encoder_t *self_p) { if (self_p->size >= 0) { return ((self_p->pos + 7) / 8); } else { return (self_p->pos); } } static void encoder_abort(struct encoder_t *self_p, ssize_t error) { if (self_p->size >= 0) { self_p->size = -error; self_p->pos = -error; } } static ssize_t encoder_alloc(struct encoder_t *self_p, size_t size) { ssize_t pos; if (self_p->pos + (ssize_t)size <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -ENOMEM; encoder_abort(self_p, ENOMEM); } return (pos); } static void encoder_append_bit(struct encoder_t *self_p, int value) { ssize_t pos; pos = encoder_alloc(self_p, 1); if (pos < 0) { return; } if ((pos % 8) == 0) { self_p->buf_p[pos / 8] = 0; } self_p->buf_p[pos / 8] |= (value << (7 - (pos % 8))); } static void encoder_append_bytes(struct encoder_t *self_p, const uint8_t *buf_p, size_t size) { size_t i; ssize_t pos; size_t byte_pos; size_t pos_in_byte; pos = encoder_alloc(self_p, 8 * size); if (pos < 0) { return; } byte_pos = ((size_t)pos / 8); pos_in_byte = ((size_t)pos % 8); if (pos_in_byte == 0) { memcpy(&self_p->buf_p[byte_pos], buf_p, size); } else { for (i = 0; i < size; i++) { self_p->buf_p[byte_pos + i] |= (buf_p[i] >> pos_in_byte); self_p->buf_p[byte_pos + i + 1] = (buf_p[i] << (8 - pos_in_byte)); } } } static void encoder_append_uint32(struct encoder_t *self_p, uint32_t value) { uint8_t buf[4]; buf[0] = (value >> 24); buf[1] = (value >> 16); buf[2] = (value >> 8); buf[3] = value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); } static void encoder_append_int32(struct encoder_t *self_p, int32_t value) { value += 2147483648; encoder_append_uint32(self_p, (uint32_t)value); } static void encoder_append_bool(struct encoder_t *self_p, bool value) { encoder_append_bit(self_p, value ? 1 : 0); } static void encoder_append_non_negative_binary_integer(struct encoder_t *self_p, uint64_t value, size_t size) { size_t i; for (i = 0; i < size; i++) { encoder_append_bit(self_p, (value >> (size - i - 1)) & 1); } } static void decoder_init(struct decoder_t *self_p, const uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (8 * (ssize_t)size); self_p->pos = 0; } static ssize_t decoder_get_result(struct decoder_t *self_p) { if (self_p->size >= 0) { return ((self_p->pos + 7) / 8); } else { return (self_p->pos); } } static void decoder_abort(struct decoder_t *self_p, ssize_t error) { if (self_p->size >= 0) { self_p->size = -error; self_p->pos = -error; } } static ssize_t decoder_free(struct decoder_t *self_p, size_t size) { ssize_t pos; if (self_p->pos + (ssize_t)size <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -EOUTOFDATA; decoder_abort(self_p, EOUTOFDATA); } return (pos); } static int decoder_read_bit(struct decoder_t *self_p) { ssize_t pos; int value; pos = decoder_free(self_p, 1); if (pos >= 0) { value = ((self_p->buf_p[pos / 8] >> (7 - (pos % 8))) & 1); } else { value = 0; } return (value); } static void decoder_read_bytes(struct decoder_t *self_p, uint8_t *buf_p, size_t size) { size_t i; ssize_t pos; size_t byte_pos; size_t pos_in_byte; pos = decoder_free(self_p, 8 * size); if (pos < 0) { return; } byte_pos = ((size_t)pos / 8); pos_in_byte = ((size_t)pos % 8); if (pos_in_byte == 0) { memcpy(buf_p, &self_p->buf_p[byte_pos], size); } else { for (i = 0; i < size; i++) { buf_p[i] = (self_p->buf_p[byte_pos + i] << pos_in_byte); buf_p[i] |= (self_p->buf_p[byte_pos + i + 1] >> (8 - pos_in_byte)); } } } static uint32_t decoder_read_uint32(struct decoder_t *self_p) { uint8_t buf[4]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]); } static int32_t decoder_read_int32(struct decoder_t *self_p) { int32_t value; value = (int32_t)decoder_read_uint32(self_p); value -= 2147483648; return (value); } static bool decoder_read_bool(struct decoder_t *self_p) { return (decoder_read_bit(self_p) != 0); } static uint64_t decoder_read_non_negative_binary_integer(struct decoder_t *self_p, size_t size) { size_t i; uint64_t value; value = 0; for (i = 0; i < size; i++) { value <<= 1; value |= (uint64_t)decoder_read_bit(self_p); } return (value); } static void uper_my_protocol_d_encode_inner( struct encoder_t *encoder_p, const struct uper_my_protocol_d_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, src_p->length - 1u, 4); encoder_append_bytes(encoder_p, &src_p->buf[0], src_p->length); } static void uper_my_protocol_d_decode_inner( struct decoder_t *decoder_p, struct uper_my_protocol_d_t *dst_p) { dst_p->length = decoder_read_non_negative_binary_integer( decoder_p, 4); dst_p->length += 1; decoder_read_bytes(decoder_p, &dst_p->buf[0], dst_p->length); } static void uper_my_protocol_c_encode_inner( struct encoder_t *encoder_p, const struct uper_my_protocol_c_t *src_p) { uint8_t i; uint8_t i_2; encoder_append_bool(encoder_p, src_p->is_a_present); if (src_p->is_a_present) { encoder_append_bool(encoder_p, src_p->a.is_b_present); encoder_append_bool(encoder_p, src_p->a.c != 0); encoder_append_non_negative_binary_integer( encoder_p, src_p->a.a.length - 0u, 3); for (i = 0; i < src_p->a.a.length; i++) { encoder_append_int32(encoder_p, src_p->a.a.elements[i]); } if (src_p->a.is_b_present) { encoder_append_bool(encoder_p, src_p->a.b); } if (src_p->a.c != 0) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->a.c - -40), 7); } } encoder_append_uint32(encoder_p, src_p->b); switch (src_p->c.choice) { case uper_my_protocol_c_c_choice_a_e: encoder_append_non_negative_binary_integer(encoder_p, 0, 1); for (i_2 = 0; i_2 < 3; i_2++) { uper_my_protocol_d_encode_inner(encoder_p, &src_p->c.value.a.elements[i_2]); } break; case uper_my_protocol_c_c_choice_b_e: encoder_append_non_negative_binary_integer(encoder_p, 1, 1); encoder_append_bool(encoder_p, src_p->c.value.b); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } encoder_append_bool(encoder_p, src_p->d.a); } static void uper_my_protocol_c_decode_inner( struct decoder_t *decoder_p, struct uper_my_protocol_c_t *dst_p) { bool is_present; uint8_t i; uint8_t choice; uint8_t i_2; dst_p->is_a_present = decoder_read_bool(decoder_p); if (dst_p->is_a_present) { dst_p->a.is_b_present = decoder_read_bool(decoder_p); is_present = decoder_read_bool(decoder_p); dst_p->a.a.length = decoder_read_non_negative_binary_integer( decoder_p, 3); dst_p->a.a.length += 0; if (dst_p->a.a.length > 5) { decoder_abort(decoder_p, EBADLENGTH); return; } for (i = 0; i < dst_p->a.a.length; i++) { dst_p->a.a.elements[i] = decoder_read_int32(decoder_p); } if (dst_p->a.is_b_present) { dst_p->a.b = decoder_read_bool(decoder_p); } if (is_present) { dst_p->a.c = decoder_read_non_negative_binary_integer( decoder_p, 7); dst_p->a.c += -40; } else { dst_p->a.c = 0; } } dst_p->b = decoder_read_uint32(decoder_p); choice = decoder_read_non_negative_binary_integer(decoder_p, 1); switch (choice) { case 0: dst_p->c.choice = uper_my_protocol_c_c_choice_a_e; for (i_2 = 0; i_2 < 3; i_2++) { uper_my_protocol_d_decode_inner(decoder_p, &dst_p->c.value.a.elements[i_2]); } break; case 1: dst_p->c.choice = uper_my_protocol_c_c_choice_b_e; dst_p->c.value.b = decoder_read_bool(decoder_p); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } dst_p->d.a = decoder_read_bool(decoder_p); } static void uper_my_protocol_b_encode_inner( struct encoder_t *encoder_p, const struct uper_my_protocol_b_t *src_p) { switch (src_p->choice) { case uper_my_protocol_b_choice_a_e: encoder_append_non_negative_binary_integer(encoder_p, 0, 1); uper_my_protocol_c_encode_inner(encoder_p, &src_p->value.a); break; case uper_my_protocol_b_choice_b_e: encoder_append_non_negative_binary_integer(encoder_p, 1, 1); uper_my_protocol_d_encode_inner(encoder_p, &src_p->value.b); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } static void uper_my_protocol_b_decode_inner( struct decoder_t *decoder_p, struct uper_my_protocol_b_t *dst_p) { uint8_t choice; choice = decoder_read_non_negative_binary_integer(decoder_p, 1); switch (choice) { case 0: dst_p->choice = uper_my_protocol_b_choice_a_e; uper_my_protocol_c_decode_inner(decoder_p, &dst_p->value.a); break; case 1: dst_p->choice = uper_my_protocol_b_choice_b_e; uper_my_protocol_d_decode_inner(decoder_p, &dst_p->value.b); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } static void uper_my_protocol_a_encode_inner( struct encoder_t *encoder_p, const struct uper_my_protocol_a_t *src_p) { uint8_t i; encoder_append_non_negative_binary_integer( encoder_p, src_p->length - 2u, 2); for (i = 0; i < src_p->length; i++) { uper_my_protocol_b_encode_inner(encoder_p, &src_p->elements[i]); } } static void uper_my_protocol_a_decode_inner( struct decoder_t *decoder_p, struct uper_my_protocol_a_t *dst_p) { uint8_t i; dst_p->length = decoder_read_non_negative_binary_integer( decoder_p, 2); dst_p->length += 2; for (i = 0; i < dst_p->length; i++) { uper_my_protocol_b_decode_inner(decoder_p, &dst_p->elements[i]); } } static void uper_my_protocol_e_encode_inner( struct encoder_t *encoder_p, const struct uper_my_protocol_e_t *src_p) { encoder_append_bool(encoder_p, src_p->value); } static void uper_my_protocol_e_decode_inner( struct decoder_t *decoder_p, struct uper_my_protocol_e_t *dst_p) { dst_p->value = decoder_read_bool(decoder_p); } static void uper_my_protocol_f_encode_inner( struct encoder_t *encoder_p, const struct uper_my_protocol_f_t *src_p) { encoder_append_int32(encoder_p, src_p->value); } static void uper_my_protocol_f_decode_inner( struct decoder_t *decoder_p, struct uper_my_protocol_f_t *dst_p) { dst_p->value = decoder_read_int32(decoder_p); } static void uper_my_protocol_g_encode_inner( struct encoder_t *encoder_p, const struct uper_my_protocol_g_t *src_p) { encoder_append_uint32(encoder_p, src_p->value); } static void uper_my_protocol_g_decode_inner( struct decoder_t *decoder_p, struct uper_my_protocol_g_t *dst_p) { dst_p->value = decoder_read_uint32(decoder_p); } static void uper_my_protocol_pdu_encode_inner( struct encoder_t *encoder_p, const struct uper_my_protocol_pdu_t *src_p) { encoder_append_int32(encoder_p, src_p->a); switch (src_p->b.choice) { case uper_my_protocol_pdu_b_choice_a_e: encoder_append_non_negative_binary_integer(encoder_p, 0, 3); uper_my_protocol_a_encode_inner(encoder_p, &src_p->b.value.a); break; case uper_my_protocol_pdu_b_choice_b_e: encoder_append_non_negative_binary_integer(encoder_p, 1, 3); uper_my_protocol_b_encode_inner(encoder_p, &src_p->b.value.b); break; case uper_my_protocol_pdu_b_choice_c_e: encoder_append_non_negative_binary_integer(encoder_p, 2, 3); uper_my_protocol_c_encode_inner(encoder_p, &src_p->b.value.c); break; case uper_my_protocol_pdu_b_choice_d_e: encoder_append_non_negative_binary_integer(encoder_p, 3, 3); uper_my_protocol_d_encode_inner(encoder_p, &src_p->b.value.d); break; case uper_my_protocol_pdu_b_choice_e_e: encoder_append_non_negative_binary_integer(encoder_p, 4, 3); encoder_append_bool(encoder_p, src_p->b.value.e); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } static void uper_my_protocol_pdu_decode_inner( struct decoder_t *decoder_p, struct uper_my_protocol_pdu_t *dst_p) { uint8_t choice; dst_p->a = decoder_read_int32(decoder_p); choice = decoder_read_non_negative_binary_integer(decoder_p, 3); switch (choice) { case 0: dst_p->b.choice = uper_my_protocol_pdu_b_choice_a_e; uper_my_protocol_a_decode_inner(decoder_p, &dst_p->b.value.a); break; case 1: dst_p->b.choice = uper_my_protocol_pdu_b_choice_b_e; uper_my_protocol_b_decode_inner(decoder_p, &dst_p->b.value.b); break; case 2: dst_p->b.choice = uper_my_protocol_pdu_b_choice_c_e; uper_my_protocol_c_decode_inner(decoder_p, &dst_p->b.value.c); break; case 3: dst_p->b.choice = uper_my_protocol_pdu_b_choice_d_e; uper_my_protocol_d_decode_inner(decoder_p, &dst_p->b.value.d); break; case 4: dst_p->b.choice = uper_my_protocol_pdu_b_choice_e_e; dst_p->b.value.e = decoder_read_bool(decoder_p); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } ssize_t uper_my_protocol_d_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_d_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_my_protocol_d_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_my_protocol_d_decode( struct uper_my_protocol_d_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_my_protocol_d_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_my_protocol_c_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_c_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_my_protocol_c_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_my_protocol_c_decode( struct uper_my_protocol_c_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_my_protocol_c_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_my_protocol_b_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_b_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_my_protocol_b_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_my_protocol_b_decode( struct uper_my_protocol_b_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_my_protocol_b_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_my_protocol_a_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_a_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_my_protocol_a_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_my_protocol_a_decode( struct uper_my_protocol_a_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_my_protocol_a_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_my_protocol_e_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_e_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_my_protocol_e_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_my_protocol_e_decode( struct uper_my_protocol_e_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_my_protocol_e_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_my_protocol_f_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_f_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_my_protocol_f_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_my_protocol_f_decode( struct uper_my_protocol_f_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_my_protocol_f_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_my_protocol_g_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_g_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_my_protocol_g_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_my_protocol_g_decode( struct uper_my_protocol_g_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_my_protocol_g_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_my_protocol_pdu_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_pdu_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_my_protocol_pdu_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_my_protocol_pdu_decode( struct uper_my_protocol_pdu_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_my_protocol_pdu_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } asn1tools-0.169.0/examples/benchmarks/c_source/asn1tools/generated/uper.h000066400000000000000000000222361524544274600263760ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.145.2 Thu Jan 24 08:14:06 2019. */ #ifndef UPER_H #define UPER_H #include #include #include #ifndef ENOMEM # define ENOMEM 12 #endif #ifndef EINVAL # define EINVAL 22 #endif #ifndef EOUTOFDATA # define EOUTOFDATA 500 #endif #ifndef EBADCHOICE # define EBADCHOICE 501 #endif #ifndef EBADLENGTH # define EBADLENGTH 502 #endif #ifndef EBADENUM # define EBADENUM 503 #endif /** * Type D in module MyProtocol. */ struct uper_my_protocol_d_t { uint8_t length; uint8_t buf[16]; }; /** * Type C in module MyProtocol. */ enum uper_my_protocol_c_c_choice_e { uper_my_protocol_c_c_choice_a_e, uper_my_protocol_c_c_choice_b_e }; struct uper_my_protocol_c_t { bool is_a_present; struct { struct { uint8_t length; int32_t elements[5]; } a; bool is_b_present; bool b; int8_t c; } a; uint32_t b; struct { enum uper_my_protocol_c_c_choice_e choice; union { struct { struct uper_my_protocol_d_t elements[3]; } a; bool b; } value; } c; struct { bool a; } d; }; /** * Type B in module MyProtocol. */ enum uper_my_protocol_b_choice_e { uper_my_protocol_b_choice_a_e, uper_my_protocol_b_choice_b_e }; struct uper_my_protocol_b_t { enum uper_my_protocol_b_choice_e choice; union { struct uper_my_protocol_c_t a; struct uper_my_protocol_d_t b; } value; }; /** * Type A in module MyProtocol. */ struct uper_my_protocol_a_t { uint8_t length; struct uper_my_protocol_b_t elements[5]; }; /** * Type E in module MyProtocol. */ struct uper_my_protocol_e_t { bool value; }; /** * Type F in module MyProtocol. */ struct uper_my_protocol_f_t { int32_t value; }; /** * Type G in module MyProtocol. */ struct uper_my_protocol_g_t { uint32_t value; }; /** * Type PDU in module MyProtocol. */ enum uper_my_protocol_pdu_b_choice_e { uper_my_protocol_pdu_b_choice_a_e, uper_my_protocol_pdu_b_choice_b_e, uper_my_protocol_pdu_b_choice_c_e, uper_my_protocol_pdu_b_choice_d_e, uper_my_protocol_pdu_b_choice_e_e }; struct uper_my_protocol_pdu_t { int32_t a; struct { enum uper_my_protocol_pdu_b_choice_e choice; union { struct uper_my_protocol_a_t a; struct uper_my_protocol_b_t b; struct uper_my_protocol_c_t c; struct uper_my_protocol_d_t d; bool e; } value; } b; }; /** * Encode type D defined in module MyProtocol. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_my_protocol_d_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_d_t *src_p); /** * Decode type D defined in module MyProtocol. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_my_protocol_d_decode( struct uper_my_protocol_d_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type C defined in module MyProtocol. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_my_protocol_c_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_c_t *src_p); /** * Decode type C defined in module MyProtocol. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_my_protocol_c_decode( struct uper_my_protocol_c_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type B defined in module MyProtocol. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_my_protocol_b_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_b_t *src_p); /** * Decode type B defined in module MyProtocol. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_my_protocol_b_decode( struct uper_my_protocol_b_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type A defined in module MyProtocol. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_my_protocol_a_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_a_t *src_p); /** * Decode type A defined in module MyProtocol. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_my_protocol_a_decode( struct uper_my_protocol_a_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type E defined in module MyProtocol. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_my_protocol_e_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_e_t *src_p); /** * Decode type E defined in module MyProtocol. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_my_protocol_e_decode( struct uper_my_protocol_e_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type F defined in module MyProtocol. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_my_protocol_f_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_f_t *src_p); /** * Decode type F defined in module MyProtocol. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_my_protocol_f_decode( struct uper_my_protocol_f_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type G defined in module MyProtocol. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_my_protocol_g_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_g_t *src_p); /** * Decode type G defined in module MyProtocol. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_my_protocol_g_decode( struct uper_my_protocol_g_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type PDU defined in module MyProtocol. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_my_protocol_pdu_encode( uint8_t *dst_p, size_t size, const struct uper_my_protocol_pdu_t *src_p); /** * Decode type PDU defined in module MyProtocol. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_my_protocol_pdu_decode( struct uper_my_protocol_pdu_t *dst_p, const uint8_t *src_p, size_t size); #endif asn1tools-0.169.0/examples/benchmarks/c_source/asn1tools/main.c000066400000000000000000000054671524544274600244130ustar00rootroot00000000000000#include #include #include #include #include #include #include #include "uper.h" int main(int argc, const char *argv[]) { int i; int res; uint8_t encoded[40]; struct uper_my_protocol_pdu_t decoded; decoded.a = 12345678; decoded.b.choice = uper_my_protocol_pdu_b_choice_a_e; decoded.b.value.a.length = 2; /* First element. */ decoded.b.value.a.elements[0].choice = uper_my_protocol_b_choice_a_e; decoded.b.value.a.elements[0].value.a.is_a_present = true; decoded.b.value.a.elements[0].value.a.a.a.length = 0; decoded.b.value.a.elements[0].value.a.a.is_b_present = false; decoded.b.value.a.elements[0].value.a.a.c = 0; decoded.b.value.a.elements[0].value.a.b = 4294967295; decoded.b.value.a.elements[0].value.a.c.choice = uper_my_protocol_c_c_choice_a_e; decoded.b.value.a.elements[0].value.a.c.value.a.elements[0].length = 3; memcpy(&decoded.b.value.a.elements[0].value.a.c.value.a.elements[0].buf[0], "\x00\x01\x02", 3); decoded.b.value.a.elements[0].value.a.c.value.a.elements[1].length = 4; memcpy(&decoded.b.value.a.elements[0].value.a.c.value.a.elements[1].buf[0], "\x00\x01\x02\x03", 4); decoded.b.value.a.elements[0].value.a.c.value.a.elements[2].length = 5; memcpy(&decoded.b.value.a.elements[0].value.a.c.value.a.elements[2].buf[0], "\x00\x01\x02\x03\x04", 5); decoded.b.value.a.elements[0].value.a.d.a = true; /* Second element. */ decoded.b.value.a.elements[1].choice = uper_my_protocol_b_choice_b_e; decoded.b.value.a.elements[1].value.b.length = 16; memcpy(&decoded.b.value.a.elements[1].value.b.buf[0], "\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a\x5a", 16); for (i = 0; i < atoi(argv[1]); i++) { /* Encode the PDU. */ res = uper_my_protocol_pdu_encode(&encoded[0], sizeof(encoded), &decoded); assert(res == sizeof(encoded)); assert(memcmp(&encoded[0], "\x80\xbc\x61\x4e\x02\x0f\xff\xff\xff\xf1\x00\x00\x81\x18" "\x00\x08\x10\x1a\x00\x00\x81\x01\x82\x7e\xb4\xb4\xb4\xb4" "\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4\xb4", sizeof(encoded)) == 0); /* Decode the PDU. */ memset(&decoded, 0, sizeof(decoded)); res = uper_my_protocol_pdu_decode(&decoded, &encoded[0], sizeof(encoded)); assert(res == sizeof(encoded)); /* Just a sanity check that decoding was performed. */ assert(decoded.a == 12345678); } return (0); } asn1tools-0.169.0/examples/benchmarks/c_source/common.mk000066400000000000000000000004211524544274600232020ustar00rootroot00000000000000SHELL = /usr/bin/env bash CFLAGS = \ -Igenerated \ -ffunction-sections \ -fdata-sections \ -Wl,--gc-sections OPT_SIZE = -Os OPT_SPEED = -O3 ENCODE_DECODE_ITERATIONS = 1000000 MASSIF_FLAGS = --tool=massif --time-unit=B --stacks=yes --detailed-freq=100 asn1tools-0.169.0/examples/benchmarks/c_source/my_protocol.asn000066400000000000000000000011661524544274600244410ustar00rootroot00000000000000MyProtocol DEFINITIONS AUTOMATIC TAGS ::= BEGIN PDU ::= SEQUENCE { a F, b CHOICE { a A, b B, c C, d D, e E } } A ::= SEQUENCE (SIZE(2..5)) OF B B ::= CHOICE { a C, b D } C ::= SEQUENCE { a SEQUENCE { a SEQUENCE (SIZE(0..5)) OF F, b BOOLEAN OPTIONAL, c INTEGER (-40..40) DEFAULT 0 } OPTIONAL, b G, c CHOICE { a SEQUENCE (SIZE(3)) OF D, b E }, d SEQUENCE { a E } } D ::= OCTET STRING (SIZE(1..16)) E ::= BOOLEAN F ::= INTEGER (-2147483648..2147483647) G ::= INTEGER (0..4294967295) END asn1tools-0.169.0/examples/benchmarks/codecs.py000077500000000000000000000073311524544274600214030ustar00rootroot00000000000000#!/usr/bin/env python """A performance example comparing the performance of all codecs. Example execution: $ ./codecs.py Starting encoding and decoding of a message 3000 times. This may take a few seconds. Encoding the message 3000 times took: CODEC SECONDS jer 0.113198 ber 0.173475 der 0.176935 oer 0.226752 uper 0.326678 per 0.350619 xer 0.476867 Decoding the message 3000 times took: CODEC SECONDS jer 0.166447 ber 0.277560 xer 0.308562 der 0.309008 oer 0.311870 uper 0.383907 per 0.396227 $ """ from __future__ import print_function from datetime import datetime import timeit import asn1tools ITERATIONS = 3000 def encode_decode(codec): spec = asn1tools.compile_string( 'Ber DEFINITIONS ::= BEGIN ' ' A ::= SEQUENCE { ' ' a BOOLEAN, ' ' b INTEGER, ' # ' c REAL, ' ' d NULL, ' ' e BIT STRING, ' ' f OCTET STRING, ' ' g OBJECT IDENTIFIER, ' ' h ENUMERATED {a, b}, ' ' i SEQUENCE {}, ' ' j SEQUENCE OF NULL, ' ' k SET {}, ' ' l SET OF NULL, ' ' m CHOICE {a NULL}, ' ' n UTF8String, ' ' o UTCTime, ' ' p GeneralizedTime ' '} ' 'END', codec) decoded = { 'a': True, 'b': 12345678, # 'c': 3.14159, 'd': None, 'e': (b'\x11\x22\x33\x44\x55\x66\x77', 55), 'f': 10 * b'x11\x22\x33\x44\x55\x66\x77', 'g': '1.4.123.4325.23.1.44.22222', 'h': 'b', 'i': {}, 'j': 5 * [None], 'k': {}, 'l': 5 * [None], 'm': ('a', None), 'n': 40 * 'a', 'o': datetime(2018, 6, 13, 11, 1, 59), 'p': datetime(2018, 6, 13, 11, 1, 58, 5000) } try: encoded = spec.encode('A', decoded) except: return float('inf'), float('inf') def encode(): spec.encode('A', decoded) def decode(): spec.decode('A', encoded) encode_time = timeit.timeit(encode, number=ITERATIONS) decode_time = timeit.timeit(decode, number=ITERATIONS) return encode_time, decode_time print('Starting encoding and decoding of a message {} times. This may ' 'take a few seconds.'.format(ITERATIONS)) ber_encode_time, ber_decode_time = encode_decode('ber') der_encode_time, der_decode_time = encode_decode('der') jer_encode_time, jer_decode_time = encode_decode('jer') oer_encode_time, oer_decode_time = encode_decode('oer') per_encode_time, per_decode_time = encode_decode('per') uper_encode_time, uper_decode_time = encode_decode('uper') xer_encode_time, xer_decode_time = encode_decode('xer') # Encode comparison output. measurements = [ ('ber', ber_encode_time), ('der', der_encode_time), ('jer', jer_encode_time), ('oer', oer_encode_time), ('per', per_encode_time), ('uper', uper_encode_time), ('xer', xer_encode_time) ] measurements = sorted(measurements, key=lambda m: m[1]) print() print('Encoding the message {} times took:'.format(ITERATIONS)) print() print('CODEC SECONDS') for package, seconds in measurements: print('{:10s} {:f}'.format(package, seconds)) # Decode comparison output. measurements = [ ('ber', ber_decode_time), ('der', der_decode_time), ('jer', jer_decode_time), ('oer', oer_decode_time), ('per', per_decode_time), ('uper', uper_decode_time), ('xer', xer_decode_time) ] measurements = sorted(measurements, key=lambda m: m[1]) print() print('Decoding the message {} times took:'.format(ITERATIONS)) print() print('CODEC SECONDS') for package, seconds in measurements: print('{:10s} {:f}'.format(package, seconds)) asn1tools-0.169.0/examples/benchmarks/compile_methods.py000077500000000000000000000111161524544274600233120ustar00rootroot00000000000000#!/usr/bin/env python3 """A performance example comparing the compile time and storage size of three compile methods; pickle, compile string and compile dictionary. Example execution: $ ./compile_methods.py Parsing and compiling '/home/erik/asn1tools/tests/files/3gpp/rrc_8_6_0.asn' from file... done. Using cached compilation... done. Parsing and compiling '/home/erik/asn1tools/tests/files/3gpp/rrc_8_6_0.asn'... done. Compiling RRC_8_6_0 dictionary... done. Unpickling compiled object... done. METHOD TIME STORAGE-SIZE unpickle 0.01985 546.72 KB compile-cached-file 0.04645 679.65 KB compile-dict 0.11395 175.03 KB compile-string 1.00467 122.59 KB compile-file 1.13757 122.59 KB $ """ from __future__ import print_function import shutil import os import timeit import pickle import asn1tools from humanfriendly import format_size SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) RRC_8_6_0_ASN_PATH = os.path.realpath(os.path.join(SCRIPT_DIR, '..', '..', 'tests', 'files', '3gpp', 'rrc_8_6_0.asn')) ITERATIONS = 1 CACHE_DIR = os.path.join(SCRIPT_DIR, 'compile_methods_cache') def method_compile_file(): print("Parsing and compiling '{}' from file... ".format(RRC_8_6_0_ASN_PATH), end='', flush=True) def compile_file(): asn1tools.compile_files(RRC_8_6_0_ASN_PATH) time = timeit.timeit(compile_file, number=ITERATIONS) print('done.') with open(RRC_8_6_0_ASN_PATH, 'rb') as fin: string = fin.read() return round(time, 5), len(string) def method_compile_cached_file(): print("Using cached compilation... ", end='', flush=True) asn1tools.compile_files(RRC_8_6_0_ASN_PATH, cache_dir=CACHE_DIR) def compile_file(): asn1tools.compile_files(RRC_8_6_0_ASN_PATH, cache_dir=CACHE_DIR) time = timeit.timeit(compile_file, number=ITERATIONS) print('done.') def dir_size(path): total = 0 for entry in os.scandir(path): if entry.is_file(): total += entry.stat().st_size elif entry.is_dir(): total += dir_size(entry.path) return total return round(time, 5), dir_size(CACHE_DIR) def method_compile_string(): with open(RRC_8_6_0_ASN_PATH, 'r') as fin: string = fin.read() print("Parsing and compiling '{}'... ".format(RRC_8_6_0_ASN_PATH), end='', flush=True) def compile_string(): asn1tools.compile_string(string) time = timeit.timeit(compile_string, number=ITERATIONS) print('done.') return round(time, 5), len(string) def method_compile_dict(): dictionary = asn1tools.parse_files(RRC_8_6_0_ASN_PATH) print("Compiling RRC_8_6_0 dictionary... ", end='', flush=True) def compile_dict(): asn1tools.compile_dict(dictionary) time = timeit.timeit(compile_dict, number=ITERATIONS) print('done.') return round(time, 5), len(str(dictionary)) def method_unpickle(): pickled = pickle.dumps(asn1tools.compile_files(RRC_8_6_0_ASN_PATH)) print("Unpickling compiled object... ", end='', flush=True) def unpickle(): pickle.loads(pickled) time = timeit.timeit(unpickle, number=ITERATIONS) print('done.') return round(time, 5), len(pickled) print() if os.path.exists(CACHE_DIR): print('Removing {}... '.format(CACHE_DIR), end='', flush=True) shutil.rmtree(CACHE_DIR) print('done.') compile_file_stats = method_compile_file() compile_cached_file_stats = method_compile_cached_file() compile_string_stats = method_compile_string() compile_dict_stats = method_compile_dict() unpickle_stats = method_unpickle() # Comparison output. measurements = [ ('compile-file', *compile_file_stats), ('compile-cached-file', *compile_cached_file_stats), ('compile-string', *compile_string_stats), ('compile-dict', *compile_dict_stats), ('unpickle', *unpickle_stats) ] measurements = sorted(measurements, key=lambda m: m[1]) print() print('METHOD TIME STORAGE-SIZE') for name, execution_time, size in measurements: print('{:20} {:>9} {:>13}'.format(name, execution_time, format_size(size))) asn1tools-0.169.0/examples/benchmarks/packages/000077500000000000000000000000001524544274600213405ustar00rootroot00000000000000asn1tools-0.169.0/examples/benchmarks/packages/ber.py000077500000000000000000000273301524544274600224720ustar00rootroot00000000000000#!/usr/bin/env python """A performance example comparing the BER encoding and decoding performance of five ASN.1 Python packages. This file is based on https://gist.github.com/philmayers/67b9300d8fb7282481a1a6af5ed45818. Example execution: $ ./ber.py Starting encoding and decoding of a message 3000 times. This may take a few seconds. Encoding the message 3000 times took: PACKAGE SECONDS asn1tools 0.443244 pycrate 1.634455 libsnmp inf pyasn1 inf asn1crypto inf Decoding the message 3000 times took: PACKAGE SECONDS asn1tools 0.388221 libsnmp 0.590784 asn1crypto 1.336428 pyasn1 4.108154 pycrate 4.342234 $ """ from __future__ import print_function import os import timeit import asn1tools SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) SNMP_V1_ASN_PATHS = [ os.path.join(SCRIPT_DIR, '..', '..', '..', 'tests', 'files', 'ietf', filename) for filename in ['rfc1155.asn', 'rfc1157.asn']] DECODED_MESSAGE_ASN1TOOLS = { "version": 0, "community": b'public', "data": ( "set-request", { "request-id": 60, "error-status": 0, "error-index": 0, "variable-bindings": [ { "name": "1.3.6.1.4.1.253.8.51.10.2.1.7.10.14130101", "value": ( "simple", ( "string", (b'\x31\x37\x32\x2e\x33\x31' b'\x2e\x31\x39\x2e\x37\x33') ) ) }, { "name": "1.3.6.1.4.1.253.8.51.10.2.1.5.10.14130400", "value": ( "simple", ( "number", 2 ) ) }, { "name": "1.3.6.1.4.1.253.8.51.10.2.1.7.10.14130102", "value": ( "simple", ( "string", (b'\x32\x35\x35\x2e\x32\x35' b'\x35\x2e\x32\x35\x35\x2e' b'\x30') ) ) }, { "name": "1.3.6.1.4.1.253.8.51.10.2.1.7.10.14130104", "value": ( "simple", ( "string", (b'\x31\x37\x32\x2e\x33\x31' b'\x2e\x31\x39\x2e\x32') ) ) } ] } ) } DECODED_MESSAGE_PYCRATE = { 'version': 0, 'community': b'public', 'data': ( 'set-request', { 'request-id': 60, 'error-status': 0, 'error-index': 0, 'variable-bindings': [ { 'name': (1, 3, 6, 1, 4, 1, 253, 8, 51, 10, 2, 1, 7, 10, 14130101), 'value': ( 'simple', ( 'string', b'172.31.19.73' ) ) }, { 'name': (1, 3, 6, 1, 4, 1, 253, 8, 51, 10, 2, 1, 5, 10, 14130400), 'value': ( 'simple', ( 'number', 2 ) ) }, { 'name': (1, 3, 6, 1, 4, 1, 253, 8, 51, 10, 2, 1, 7, 10, 14130102), 'value': ( 'simple', ( 'string', b'255.255.255.0' ) ) }, { 'name': (1, 3, 6, 1, 4, 1, 253, 8, 51, 10, 2, 1, 7, 10, 14130104), 'value': ( 'simple', ( 'string', b'172.31.19.2' ) ) } ] } ) } ENCODED_MESSAGE = ( b'0\x81\x9f\x02\x01\x00\x04\x06public\xa3\x81\x91\x02' b'\x01<\x02\x01\x00\x02\x01\x000\x81\x850"\x06\x12+\x06' b'\x01\x04\x01\x81}\x083\n\x02\x01\x07\n\x86\xde\xb75' b'\x04\x0c172.31.19.730\x17\x06\x12+\x06\x01\x04\x01\x81' b'}\x083\n\x02\x01\x05\n\x86\xde\xb9`\x02\x01\x020#\x06' b'\x12+\x06\x01\x04\x01\x81}\x083\n\x02\x01\x07\n\x86\xde' b'\xb76\x04\r255.255.255.00!\x06\x12+\x06\x01\x04\x01\x81' b'}\x083\n\x02\x01\x07\n\x86\xde\xb78\x04\x0b172.31.19.2' ) ITERATIONS = 3000 def asn1tools_encode_decode(): snmp_v1 = asn1tools.compile_files(SNMP_V1_ASN_PATHS) def encode(): snmp_v1.encode('Message', DECODED_MESSAGE_ASN1TOOLS, check_types=False) def decode(): snmp_v1.decode('Message', ENCODED_MESSAGE) encode_time = timeit.timeit(encode, number=ITERATIONS) decode_time = timeit.timeit(decode, number=ITERATIONS) return encode_time, decode_time def libsnmp_encode_decode(): try: import libsnmp.rfc1905 as libsnmp_rfc1905 def decode(): libsnmp_rfc1905.Message().decode(ENCODED_MESSAGE) encode_time = float('inf') decode_time = timeit.timeit(decode, number=ITERATIONS) except ImportError: encode_time = float('inf') decode_time = float('inf') print('Unable to import libsnmp.') except SyntaxError: encode_time = float('inf') decode_time = float('inf') print('Syntax error in libsnmp.') except Exception as e: encode_time = float('inf') decode_time = float('inf') print('Unable to use libsnmp: {}'.format(e)) return encode_time, decode_time def pyasn1_encode_decode(): try: from pysnmp.proto import api from pyasn1.codec.ber import decoder try: # pysnmp 7 and later. snmp_v1 = api.PROTOCOL_MODULES[api.SNMP_VERSION_1].Message() except AttributeError: snmp_v1 = api.protoModules[api.protoVersion1].Message() def decode(): decoder.decode(ENCODED_MESSAGE, asn1Spec=snmp_v1) encode_time = float('inf') decode_time = timeit.timeit(decode, number=ITERATIONS) except ImportError: encode_time = float('inf') decode_time = float('inf') print('Unable to import pyasn1.') return encode_time, decode_time def asn1crypto_encode_decode(): try: from asn1crypto.core import (Sequence, SequenceOf, Choice, Integer, ObjectIdentifier, OctetString) class ErrorStatus(Integer): _map = { 0: 'noError', 1: 'tooBig', 2: 'noSuchName', 3: 'badValue', 4: 'readOnly', 5: 'genErr' } class IpAddress(OctetString): class_ = 1 tag = 0 class Counter(Integer): class_ = 1 tag = 1 class Gauge(Integer): class_ = 1 tag = 2 class TimeTicks(Integer): class_ = 1 tag = 3 class Opaque(OctetString): class_ = 1 tag = 4 class VarBindChoice(Choice): _alternatives = [ ('number', Integer), ('string', OctetString), ('object', ObjectIdentifier), ('address', IpAddress), ('counter', Counter), ('gauge', Gauge), ('ticks', TimeTicks), ('arbitrary', Opaque) ] class VarBind(Sequence): _fields = [ ('name', ObjectIdentifier), ('value', VarBindChoice), ] class VarBindList(SequenceOf): _child_spec = VarBind class PDU(Sequence): _fields = [ ('request-id', Integer), ('error-status', ErrorStatus), ('error-index', Integer), ('variable-bindings', VarBindList), ] class PDUs(Choice): _alternatives = [ ('get-pdu', PDU, {'tag_type': 'implicit', 'tag': 0}), ('getnext-pdu', PDU, {'tag_type': 'implicit', 'tag': 1}), ('response-pdu', PDU, {'tag_type': 'implicit', 'tag': 2}), ('set-pdu', PDU, {'tag_type': 'implicit', 'tag': 3}), ] class Message(Sequence): _fields = [ ('version', Integer), ('community', OctetString), ('pdu', PDUs), ] def decode(): Message.load(ENCODED_MESSAGE).native encode_time = float('inf') decode_time = timeit.timeit(decode, number=ITERATIONS) except ImportError: encode_time = float('inf') decode_time = float('inf') print('Unable to import asn1crypto.') return encode_time, decode_time def pycrate_encode_decode(): try: import rfc1155_1157_pycrate snmp_v1 = rfc1155_1157_pycrate.RFC1157_SNMP.Message snmp_v1._SAFE_INIT = False snmp_v1._SAFE_VAL = False snmp_v1._SAFE_BND = False snmp_v1._SAFE_BNDTAB = False def encode(): snmp_v1.set_val(DECODED_MESSAGE_PYCRATE) snmp_v1.to_ber() def decode(): snmp_v1.from_ber(ENCODED_MESSAGE) snmp_v1() encode_time = timeit.timeit(encode, number=ITERATIONS) decode_time = timeit.timeit(decode, number=ITERATIONS) except ImportError: encode_time = float('inf') decode_time = float('inf') print('Unable to import pycrate.') except Exception as e: encode_time = float('inf') decode_time = float('inf') print('pycrate error:', str(e)) return encode_time, decode_time print('Starting encoding and decoding of a message {} times. This may ' 'take a few seconds.'.format(ITERATIONS)) asn1tools_encode_time, asn1tools_decode_time = asn1tools_encode_decode() libsnmp_encode_time, libsnmp_decode_time = libsnmp_encode_decode() pyasn1_encode_time, pyasn1_decode_time = pyasn1_encode_decode() asn1crypto_encode_time, asn1crypto_decode_time = asn1crypto_encode_decode() pycrate_encode_time, pycrate_decode_time = pycrate_encode_decode() # Encode comparison output. measurements = [ ('asn1tools', asn1tools_encode_time), ('libsnmp', libsnmp_encode_time), ('pyasn1', pyasn1_encode_time), ('asn1crypto', asn1crypto_encode_time), ('pycrate', pycrate_encode_time) ] measurements = sorted(measurements, key=lambda m: m[1]) print() print('Encoding the message {} times took:'.format(ITERATIONS)) print() print('PACKAGE SECONDS') for package, seconds in measurements: print('{:12s} {:f}'.format(package, seconds)) # Decode comparison output. measurements = [ ('asn1tools', asn1tools_decode_time), ('libsnmp', libsnmp_decode_time), ('pyasn1', pyasn1_decode_time), ('asn1crypto', asn1crypto_decode_time), ('pycrate', pycrate_decode_time) ] measurements = sorted(measurements, key=lambda m: m[1]) print() print('Decoding the message {} times took:'.format(ITERATIONS)) print() print('PACKAGE SECONDS') for package, seconds in measurements: print('{:12s} {:f}'.format(package, seconds)) asn1tools-0.169.0/examples/benchmarks/packages/rfc1155_1157_pycrate.py000066400000000000000000000316331524544274600252120ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Code automatically generated by pycrate_asn1c from pycrate_asn1rt.utils import * from pycrate_asn1rt.err import * from pycrate_asn1rt.glob import make_GLOBAL, GLOBAL from pycrate_asn1rt.dictobj import ASN1Dict from pycrate_asn1rt.refobj import * from pycrate_asn1rt.setobj import * from pycrate_asn1rt.asnobj_basic import * from pycrate_asn1rt.asnobj_str import * from pycrate_asn1rt.asnobj_construct import * from pycrate_asn1rt.asnobj_class import * from pycrate_asn1rt.asnobj_ext import * from pycrate_asn1rt.init import init_modules class RFC1155_SMI: _name_ = 'RFC1155-SMI' _oid_ = [] _obj_ = [ 'internet', 'directory', 'mgmt', 'experimental', 'private', 'enterprises', 'ObjectName', 'ObjectSyntax', 'SimpleSyntax', 'ApplicationSyntax', 'NetworkAddress', 'IpAddress', 'Counter', 'Gauge', 'TimeTicks', 'Opaque', ] _type_ = [ 'ObjectName', 'ObjectSyntax', 'SimpleSyntax', 'ApplicationSyntax', 'NetworkAddress', 'IpAddress', 'Counter', 'Gauge', 'TimeTicks', 'Opaque', ] _set_ = [ ] _val_ = [ 'internet', 'directory', 'mgmt', 'experimental', 'private', 'enterprises', ] _class_ = [ ] _param_ = [ ] #-----< internet >-----# internet = OID(name='internet', mode=MODE_VALUE) internet._val = (1, 3, 6, 1) #-----< directory >-----# directory = OID(name='directory', mode=MODE_VALUE) directory._val = (1, 3, 6, 1, 1) #-----< mgmt >-----# mgmt = OID(name='mgmt', mode=MODE_VALUE) mgmt._val = (1, 3, 6, 1, 2) #-----< experimental >-----# experimental = OID(name='experimental', mode=MODE_VALUE) experimental._val = (1, 3, 6, 1, 3) #-----< private >-----# private = OID(name='private', mode=MODE_VALUE) private._val = (1, 3, 6, 1, 4) #-----< enterprises >-----# enterprises = OID(name='enterprises', mode=MODE_VALUE) enterprises._val = (1, 3, 6, 1, 4, 1) #-----< ObjectName >-----# ObjectName = OID(name='ObjectName', mode=MODE_TYPE) #-----< ObjectSyntax >-----# ObjectSyntax = CHOICE(name='ObjectSyntax', mode=MODE_TYPE) _ObjectSyntax_simple = CHOICE(name='simple', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1155-SMI', 'SimpleSyntax'))) _ObjectSyntax_application_wide = CHOICE(name='application-wide', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1155-SMI', 'ApplicationSyntax'))) ObjectSyntax._cont = ASN1Dict([ ('simple', _ObjectSyntax_simple), ('application-wide', _ObjectSyntax_application_wide), ]) ObjectSyntax._ext = None #-----< SimpleSyntax >-----# SimpleSyntax = CHOICE(name='SimpleSyntax', mode=MODE_TYPE) _SimpleSyntax_number = INT(name='number', mode=MODE_TYPE) _SimpleSyntax_string = OCT_STR(name='string', mode=MODE_TYPE) _SimpleSyntax_object = OID(name='object', mode=MODE_TYPE) _SimpleSyntax_empty = NULL(name='empty', mode=MODE_TYPE) SimpleSyntax._cont = ASN1Dict([ ('number', _SimpleSyntax_number), ('string', _SimpleSyntax_string), ('object', _SimpleSyntax_object), ('empty', _SimpleSyntax_empty), ]) SimpleSyntax._ext = None #-----< ApplicationSyntax >-----# ApplicationSyntax = CHOICE(name='ApplicationSyntax', mode=MODE_TYPE) _ApplicationSyntax_address = CHOICE(name='address', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1155-SMI', 'NetworkAddress'))) _ApplicationSyntax_counter = INT(name='counter', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1155-SMI', 'Counter'))) _ApplicationSyntax_gauge = INT(name='gauge', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1155-SMI', 'Gauge'))) _ApplicationSyntax_ticks = INT(name='ticks', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1155-SMI', 'TimeTicks'))) _ApplicationSyntax_arbitrary = OCT_STR(name='arbitrary', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1155-SMI', 'Opaque'))) ApplicationSyntax._cont = ASN1Dict([ ('address', _ApplicationSyntax_address), ('counter', _ApplicationSyntax_counter), ('gauge', _ApplicationSyntax_gauge), ('ticks', _ApplicationSyntax_ticks), ('arbitrary', _ApplicationSyntax_arbitrary), ]) ApplicationSyntax._ext = None #-----< NetworkAddress >-----# NetworkAddress = CHOICE(name='NetworkAddress', mode=MODE_TYPE) _NetworkAddress_internet = OCT_STR(name='internet', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1155-SMI', 'IpAddress'))) NetworkAddress._cont = ASN1Dict([ ('internet', _NetworkAddress_internet), ]) NetworkAddress._ext = None #-----< IpAddress >-----# IpAddress = OCT_STR(name='IpAddress', mode=MODE_TYPE, tag=(0, TAG_APPLICATION, TAG_IMPLICIT)) IpAddress._const_sz = ASN1Set(rv=[4], rr=[], ev=None, er=[]) #-----< Counter >-----# Counter = INT(name='Counter', mode=MODE_TYPE, tag=(1, TAG_APPLICATION, TAG_IMPLICIT)) Counter._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=4294967295)], ev=None, er=[]) #-----< Gauge >-----# Gauge = INT(name='Gauge', mode=MODE_TYPE, tag=(2, TAG_APPLICATION, TAG_IMPLICIT)) Gauge._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=4294967295)], ev=None, er=[]) #-----< TimeTicks >-----# TimeTicks = INT(name='TimeTicks', mode=MODE_TYPE, tag=(3, TAG_APPLICATION, TAG_IMPLICIT)) TimeTicks._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=4294967295)], ev=None, er=[]) #-----< Opaque >-----# Opaque = OCT_STR(name='Opaque', mode=MODE_TYPE, tag=(4, TAG_APPLICATION, TAG_IMPLICIT)) _all_ = [ internet, directory, mgmt, experimental, private, enterprises, ObjectName, _ObjectSyntax_simple, _ObjectSyntax_application_wide, ObjectSyntax, _SimpleSyntax_number, _SimpleSyntax_string, _SimpleSyntax_object, _SimpleSyntax_empty, SimpleSyntax, _ApplicationSyntax_address, _ApplicationSyntax_counter, _ApplicationSyntax_gauge, _ApplicationSyntax_ticks, _ApplicationSyntax_arbitrary, ApplicationSyntax, _NetworkAddress_internet, NetworkAddress, IpAddress, Counter, Gauge, TimeTicks, Opaque, ] class RFC1157_SNMP: _name_ = 'RFC1157-SNMP' _oid_ = [] _obj_ = [ 'Message', 'PDUs', 'GetRequest-PDU', 'GetNextRequest-PDU', 'GetResponse-PDU', 'SetRequest-PDU', 'PDU', 'Trap-PDU', 'VarBind', 'VarBindList', ] _type_ = [ 'Message', 'PDUs', 'GetRequest-PDU', 'GetNextRequest-PDU', 'GetResponse-PDU', 'SetRequest-PDU', 'PDU', 'Trap-PDU', 'VarBind', 'VarBindList', ] _set_ = [ ] _val_ = [ ] _class_ = [ ] _param_ = [ ] #-----< Message >-----# Message = SEQ(name='Message', mode=MODE_TYPE) _Message_version = INT(name='version', mode=MODE_TYPE) _Message_version._cont = ASN1Dict([('version-1', 0)]) _Message_community = OCT_STR(name='community', mode=MODE_TYPE) _Message_data = CHOICE(name='data', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1157-SNMP', 'PDUs'))) Message._cont = ASN1Dict([ ('version', _Message_version), ('community', _Message_community), ('data', _Message_data), ]) Message._ext = None #-----< PDUs >-----# PDUs = CHOICE(name='PDUs', mode=MODE_TYPE) _PDUs_get_request = SEQ(name='get-request', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1157-SNMP', 'GetRequest-PDU'))) _PDUs_get_next_request = SEQ(name='get-next-request', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1157-SNMP', 'GetNextRequest-PDU'))) _PDUs_get_response = SEQ(name='get-response', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1157-SNMP', 'GetResponse-PDU'))) _PDUs_set_request = SEQ(name='set-request', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1157-SNMP', 'SetRequest-PDU'))) _PDUs_trap = SEQ(name='trap', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1157-SNMP', 'Trap-PDU'))) PDUs._cont = ASN1Dict([ ('get-request', _PDUs_get_request), ('get-next-request', _PDUs_get_next_request), ('get-response', _PDUs_get_response), ('set-request', _PDUs_set_request), ('trap', _PDUs_trap), ]) PDUs._ext = None #-----< GetRequest-PDU >-----# GetRequest_PDU = SEQ(name='GetRequest-PDU', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('RFC1157-SNMP', 'PDU'))) #-----< GetNextRequest-PDU >-----# GetNextRequest_PDU = SEQ(name='GetNextRequest-PDU', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('RFC1157-SNMP', 'PDU'))) #-----< GetResponse-PDU >-----# GetResponse_PDU = SEQ(name='GetResponse-PDU', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('RFC1157-SNMP', 'PDU'))) #-----< SetRequest-PDU >-----# SetRequest_PDU = SEQ(name='SetRequest-PDU', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('RFC1157-SNMP', 'PDU'))) #-----< PDU >-----# PDU = SEQ(name='PDU', mode=MODE_TYPE) _PDU_request_id = INT(name='request-id', mode=MODE_TYPE) _PDU_error_status = INT(name='error-status', mode=MODE_TYPE) _PDU_error_status._cont = ASN1Dict([('noError', 0), ('tooBig', 1), ('noSuchName', 2), ('badValue', 3), ('readOnly', 4), ('genErr', 5)]) _PDU_error_index = INT(name='error-index', mode=MODE_TYPE) _PDU_variable_bindings = SEQ_OF(name='variable-bindings', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1157-SNMP', 'VarBindList'))) PDU._cont = ASN1Dict([ ('request-id', _PDU_request_id), ('error-status', _PDU_error_status), ('error-index', _PDU_error_index), ('variable-bindings', _PDU_variable_bindings), ]) PDU._ext = None #-----< Trap-PDU >-----# Trap_PDU = SEQ(name='Trap-PDU', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _Trap_PDU_enterprise = OID(name='enterprise', mode=MODE_TYPE) _Trap_PDU_agent_addr = CHOICE(name='agent-addr', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1155-SMI', 'NetworkAddress'))) _Trap_PDU_generic_trap = INT(name='generic-trap', mode=MODE_TYPE) _Trap_PDU_generic_trap._cont = ASN1Dict([('coldStart', 0), ('warmStart', 1), ('linkDown', 2), ('linkUp', 3), ('authenticationFailure', 4), ('egpNeighborLoss', 5), ('enterpriseSpecific', 6)]) _Trap_PDU_specific_trap = INT(name='specific-trap', mode=MODE_TYPE) _Trap_PDU_time_stamp = INT(name='time-stamp', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1155-SMI', 'TimeTicks'))) _Trap_PDU_variable_bindings = SEQ_OF(name='variable-bindings', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1157-SNMP', 'VarBindList'))) Trap_PDU._cont = ASN1Dict([ ('enterprise', _Trap_PDU_enterprise), ('agent-addr', _Trap_PDU_agent_addr), ('generic-trap', _Trap_PDU_generic_trap), ('specific-trap', _Trap_PDU_specific_trap), ('time-stamp', _Trap_PDU_time_stamp), ('variable-bindings', _Trap_PDU_variable_bindings), ]) Trap_PDU._ext = None #-----< VarBind >-----# VarBind = SEQ(name='VarBind', mode=MODE_TYPE) _VarBind_name = OID(name='name', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1155-SMI', 'ObjectName'))) _VarBind_value = CHOICE(name='value', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1155-SMI', 'ObjectSyntax'))) VarBind._cont = ASN1Dict([ ('name', _VarBind_name), ('value', _VarBind_value), ]) VarBind._ext = None #-----< VarBindList >-----# VarBindList = SEQ_OF(name='VarBindList', mode=MODE_TYPE) _VarBindList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('RFC1157-SNMP', 'VarBind'))) VarBindList._cont = _VarBindList__item_ _all_ = [ _Message_version, _Message_community, _Message_data, Message, _PDUs_get_request, _PDUs_get_next_request, _PDUs_get_response, _PDUs_set_request, _PDUs_trap, PDUs, GetRequest_PDU, GetNextRequest_PDU, GetResponse_PDU, SetRequest_PDU, _PDU_request_id, _PDU_error_status, _PDU_error_index, _PDU_variable_bindings, PDU, _Trap_PDU_enterprise, _Trap_PDU_agent_addr, _Trap_PDU_generic_trap, _Trap_PDU_specific_trap, _Trap_PDU_time_stamp, _Trap_PDU_variable_bindings, Trap_PDU, _VarBind_name, _VarBind_value, VarBind, _VarBindList__item_, VarBindList, ] init_modules(RFC1155_SMI, RFC1157_SNMP) asn1tools-0.169.0/examples/benchmarks/packages/rrc_8_6_0_pycrate.py000066400000000000000000022014421524544274600251270ustar00rootroot00000000000000# -*- coding: UTF-8 -*- # Code automatically generated by pycrate_asn1c from pycrate_asn1rt.utils import * from pycrate_asn1rt.err import * from pycrate_asn1rt.glob import make_GLOBAL, GLOBAL from pycrate_asn1rt.dictobj import ASN1Dict from pycrate_asn1rt.refobj import * from pycrate_asn1rt.setobj import * from pycrate_asn1rt.asnobj_basic import * from pycrate_asn1rt.asnobj_str import * from pycrate_asn1rt.asnobj_construct import * from pycrate_asn1rt.asnobj_class import * from pycrate_asn1rt.asnobj_ext import * from pycrate_asn1rt.init import init_modules class EUTRA_RRC_Definitions: _name_ = 'EUTRA-RRC-Definitions' _oid_ = [] _obj_ = [ 'BCCH-BCH-Message', 'BCCH-BCH-MessageType', 'BCCH-DL-SCH-Message', 'BCCH-DL-SCH-MessageType', 'PCCH-Message', 'PCCH-MessageType', 'DL-CCCH-Message', 'DL-CCCH-MessageType', 'DL-DCCH-Message', 'DL-DCCH-MessageType', 'UL-CCCH-Message', 'UL-CCCH-MessageType', 'UL-DCCH-Message', 'UL-DCCH-MessageType', 'CounterCheck', 'CounterCheck-r8-IEs', 'DRB-CountMSB-InfoList', 'DRB-CountMSB-Info', 'CounterCheckResponse', 'CounterCheckResponse-r8-IEs', 'DRB-CountInfoList', 'DRB-CountInfo', 'CSFBParametersRequestCDMA2000', 'CSFBParametersRequestCDMA2000-r8-IEs', 'CSFBParametersResponseCDMA2000', 'CSFBParametersResponseCDMA2000-r8-IEs', 'DLInformationTransfer', 'DLInformationTransfer-r8-IEs', 'HandoverFromEUTRAPreparationRequest', 'HandoverFromEUTRAPreparationRequest-r8-IEs', 'MasterInformationBlock', 'MeasurementReport', 'MeasurementReport-r8-IEs', 'MobilityFromEUTRACommand', 'MobilityFromEUTRACommand-r8-IEs', 'Handover', 'CellChangeOrder', 'SI-OrPSI-GERAN', 'SystemInfoListGERAN', 'Paging', 'PagingRecordList', 'PagingRecord', 'PagingUE-Identity', 'IMSI', 'IMSI-Digit', 'RRCConnectionReconfiguration', 'RRCConnectionReconfiguration-r8-IEs', 'SecurityConfigHO', 'RRCConnectionReconfigurationComplete', 'RRCConnectionReconfigurationComplete-r8-IEs', 'RRCConnectionReestablishment', 'RRCConnectionReestablishment-r8-IEs', 'RRCConnectionReestablishmentComplete', 'RRCConnectionReestablishmentComplete-r8-IEs', 'RRCConnectionReestablishmentReject', 'RRCConnectionReestablishmentReject-r8-IEs', 'RRCConnectionReestablishmentRequest', 'RRCConnectionReestablishmentRequest-r8-IEs', 'ReestabUE-Identity', 'ReestablishmentCause', 'RRCConnectionReject', 'RRCConnectionReject-r8-IEs', 'RRCConnectionRelease', 'RRCConnectionRelease-r8-IEs', 'ReleaseCause', 'RedirectedCarrierInfo', 'IdleModeMobilityControlInfo', 'FreqPriorityListEUTRA', 'FreqPriorityEUTRA', 'FreqsPriorityListGERAN', 'FreqsPriorityGERAN', 'FreqPriorityListUTRA-FDD', 'FreqPriorityUTRA-FDD', 'FreqPriorityListUTRA-TDD', 'FreqPriorityUTRA-TDD', 'BandClassPriorityListHRPD', 'BandClassPriorityHRPD', 'BandClassPriorityList1XRTT', 'BandClassPriority1XRTT', 'RRCConnectionRequest', 'RRCConnectionRequest-r8-IEs', 'InitialUE-Identity', 'EstablishmentCause', 'RRCConnectionSetup', 'RRCConnectionSetup-r8-IEs', 'RRCConnectionSetupComplete', 'RRCConnectionSetupComplete-r8-IEs', 'RegisteredMME', 'SecurityModeCommand', 'SecurityModeCommand-r8-IEs', 'SecurityConfigSMC', 'SecurityModeComplete', 'SecurityModeComplete-r8-IEs', 'SecurityModeFailure', 'SecurityModeFailure-r8-IEs', 'SystemInformation', 'SystemInformation-r8-IEs', 'SystemInformationBlockType1', 'PLMN-IdentityList', 'PLMN-IdentityInfo', 'SchedulingInfoList', 'SchedulingInfo', 'SIB-MappingInfo', 'SIB-Type', 'UECapabilityEnquiry', 'UECapabilityEnquiry-r8-IEs', 'UE-CapabilityRequest', 'UECapabilityInformation', 'UECapabilityInformation-r8-IEs', 'ULHandoverPreparationTransfer', 'ULHandoverPreparationTransfer-r8-IEs', 'ULInformationTransfer', 'ULInformationTransfer-r8-IEs', 'SystemInformationBlockType2', 'AC-BarringConfig', 'MBSFN-SubframeConfigList', 'MBSFN-SubframeConfig', 'SystemInformationBlockType3', 'SystemInformationBlockType4', 'IntraFreqNeighCellList', 'IntraFreqNeighCellInfo', 'IntraFreqBlackCellList', 'SystemInformationBlockType5', 'InterFreqCarrierFreqList', 'InterFreqCarrierFreqInfo', 'InterFreqNeighCellList', 'InterFreqNeighCellInfo', 'InterFreqBlackCellList', 'SystemInformationBlockType6', 'CarrierFreqListUTRA-FDD', 'CarrierFreqUTRA-FDD', 'CarrierFreqListUTRA-TDD', 'CarrierFreqUTRA-TDD', 'SystemInformationBlockType7', 'CarrierFreqsInfoListGERAN', 'CarrierFreqsInfoGERAN', 'SystemInformationBlockType8', 'CellReselectionParametersCDMA2000', 'NeighCellListCDMA2000', 'NeighCellCDMA2000', 'NeighCellsPerBandclassListCDMA2000', 'NeighCellsPerBandclassCDMA2000', 'PhysCellIdListCDMA2000', 'BandClassListCDMA2000', 'BandClassInfoCDMA2000', 'SystemInformationBlockType9', 'SystemInformationBlockType10', 'SystemInformationBlockType11', 'AntennaInfoCommon', 'AntennaInfoDedicated', 'CQI-ReportConfig', 'CQI-ReportPeriodic', 'DRB-Identity', 'LogicalChannelConfig', 'MAC-MainConfig', 'DRX-Config', 'PDCP-Config', 'PDSCH-ConfigCommon', 'PDSCH-ConfigDedicated', 'PHICH-Config', 'PhysicalConfigDedicated', 'P-Max', 'PRACH-ConfigSIB', 'PRACH-Config', 'PRACH-ConfigInfo', 'PresenceAntennaPort1', 'PUCCH-ConfigCommon', 'PUCCH-ConfigDedicated', 'PUSCH-ConfigCommon', 'PUSCH-ConfigDedicated', 'UL-ReferenceSignalsPUSCH', 'RACH-ConfigCommon', 'RACH-ConfigDedicated', 'RadioResourceConfigCommonSIB', 'RadioResourceConfigCommon', 'BCCH-Config', 'PCCH-Config', 'UL-CyclicPrefixLength', 'RadioResourceConfigDedicated', 'SRB-ToAddModList', 'SRB-ToAddMod', 'DRB-ToAddModList', 'DRB-ToAddMod', 'DRB-ToReleaseList', 'RLC-Config', 'UL-AM-RLC', 'DL-AM-RLC', 'UL-UM-RLC', 'DL-UM-RLC', 'SN-FieldLength', 'T-PollRetransmit', 'PollPDU', 'PollByte', 'T-Reordering', 'T-StatusProhibit', 'SchedulingRequestConfig', 'SoundingRS-UL-ConfigCommon', 'SoundingRS-UL-ConfigDedicated', 'SPS-Config', 'SPS-ConfigDL', 'SPS-ConfigUL', 'N1-PUCCH-AN-PersistentList', 'TDD-Config', 'TimeAlignmentTimer', 'TPC-PDCCH-Config', 'TPC-Index', 'UplinkPowerControlCommon', 'UplinkPowerControlDedicated', 'DeltaFList-PUCCH', 'NextHopChainingCount', 'SecurityAlgorithmConfig', 'ShortMAC-I', 'AdditionalSpectrumEmission', 'ARFCN-ValueCDMA2000', 'ARFCN-ValueEUTRA', 'ARFCN-ValueGERAN', 'ARFCN-ValueUTRA', 'BandclassCDMA2000', 'BandIndicatorGERAN', 'CarrierFreqCDMA2000', 'CarrierFreqGERAN', 'CarrierFreqsGERAN', 'ExplicitListOfARFCNs', 'CDMA2000-Type', 'CellIdentity', 'CellIndexList', 'CellIndex', 'CellReselectionPriority', 'CSFB-RegistrationParam1XRTT', 'CellGlobalIdEUTRA', 'CellGlobalIdUTRA', 'CellGlobalIdGERAN', 'CellGlobalIdCDMA2000', 'MobilityControlInfo', 'CarrierBandwidthEUTRA', 'CarrierFreqEUTRA', 'MobilityParametersCDMA2000', 'MobilityStateParameters', 'PhysCellId', 'PhysCellIdRange', 'PhysCellIdCDMA2000', 'PhysCellIdGERAN', 'PhysCellIdUTRA-FDD', 'PhysCellIdUTRA-TDD', 'PLMN-Identity', 'MCC', 'MNC', 'MCC-MNC-Digit', 'PreRegistrationInfoHRPD', 'SecondaryPreRegistrationZoneIdListHRPD', 'PreRegistrationZoneIdHRPD', 'Q-RxLevMin', 'Q-OffsetRange', 'Q-OffsetRangeInterRAT', 'ReselectionThreshold', 'SpeedStateScaleFactors', 'SystemTimeInfoCDMA2000', 'TrackingAreaCode', 'T-Reselection', 'AllowedMeasBandwidth', 'Hysteresis', 'MeasConfig', 'MeasIdToRemoveList', 'MeasObjectToRemoveList', 'ReportConfigToRemoveList', 'MeasGapConfig', 'MeasId', 'MeasIdToAddModList', 'MeasIdToAddMod', 'MeasObjectCDMA2000', 'CellsToAddModListCDMA2000', 'CellsToAddModCDMA2000', 'MeasObjectEUTRA', 'CellsToAddModList', 'CellsToAddMod', 'BlackCellsToAddModList', 'BlackCellsToAddMod', 'MeasObjectGERAN', 'MeasObjectId', 'MeasObjectToAddModList', 'MeasObjectToAddMod', 'MeasObjectUTRA', 'CellsToAddModListUTRA-FDD', 'CellsToAddModUTRA-FDD', 'CellsToAddModListUTRA-TDD', 'CellsToAddModUTRA-TDD', 'MeasResults', 'MeasResultListEUTRA', 'MeasResultEUTRA', 'MeasResultListUTRA', 'MeasResultUTRA', 'MeasResultListGERAN', 'MeasResultGERAN', 'MeasResultsCDMA2000', 'MeasResultListCDMA2000', 'MeasResultCDMA2000', 'PLMN-IdentityList2', 'QuantityConfig', 'QuantityConfigEUTRA', 'QuantityConfigUTRA', 'QuantityConfigGERAN', 'QuantityConfigCDMA2000', 'ReportConfigEUTRA', 'ThresholdEUTRA', 'ReportConfigId', 'ReportConfigInterRAT', 'ThresholdUTRA', 'ThresholdGERAN', 'ThresholdCDMA2000', 'ReportConfigToAddModList', 'ReportConfigToAddMod', 'ReportInterval', 'RSRP-Range', 'RSRQ-Range', 'TimeToTrigger', 'C-RNTI', 'DedicatedInfoCDMA2000', 'DedicatedInfoNAS', 'FilterCoefficient', 'MMEC', 'NeighCellConfig', 'RAND-CDMA2000', 'RAT-Type', 'RRC-TransactionIdentifier', 'S-TMSI', 'UE-CapabilityRAT-ContainerList', 'UE-CapabilityRAT-Container', 'UE-EUTRA-Capability', 'AccessStratumRelease', 'PDCP-Parameters', 'PhyLayerParameters', 'RF-Parameters', 'SupportedBandListEUTRA', 'SupportedBandEUTRA', 'MeasParameters', 'BandListEUTRA', 'BandInfoEUTRA', 'InterFreqBandList', 'InterFreqBandInfo', 'InterRAT-BandList', 'InterRAT-BandInfo', 'IRAT-ParametersUTRA-FDD', 'SupportedBandListUTRA-FDD', 'SupportedBandUTRA-FDD', 'IRAT-ParametersUTRA-TDD128', 'SupportedBandListUTRA-TDD128', 'SupportedBandUTRA-TDD128', 'IRAT-ParametersUTRA-TDD384', 'SupportedBandListUTRA-TDD384', 'SupportedBandUTRA-TDD384', 'IRAT-ParametersUTRA-TDD768', 'SupportedBandListUTRA-TDD768', 'SupportedBandUTRA-TDD768', 'IRAT-ParametersGERAN', 'SupportedBandListGERAN', 'SupportedBandGERAN', 'IRAT-ParametersCDMA2000-HRPD', 'SupportedBandListHRPD', 'IRAT-ParametersCDMA2000-1XRTT', 'SupportedBandList1XRTT', 'UE-TimersAndConstants', 'maxBands', 'maxCDMA-BandClass', 'maxCellBlack', 'maxCellInter', 'maxCellIntra', 'maxCellMeas', 'maxCellReport', 'maxDRB', 'maxEARFCN', 'maxFreq', 'maxGERAN-SI', 'maxGNFG', 'maxMBSFN-Allocations', 'maxMCS-1', 'maxMeasId', 'maxObjectId', 'maxPageRec', 'maxPNOffset', 'maxRAT-Capabilities', 'maxReportConfigId', 'maxSIB', 'maxSIB-1', 'maxSI-Message', 'maxUTRA-FDD-Carrier', 'maxUTRA-TDD-Carrier', ] _type_ = [ 'BCCH-BCH-Message', 'BCCH-BCH-MessageType', 'BCCH-DL-SCH-Message', 'BCCH-DL-SCH-MessageType', 'PCCH-Message', 'PCCH-MessageType', 'DL-CCCH-Message', 'DL-CCCH-MessageType', 'DL-DCCH-Message', 'DL-DCCH-MessageType', 'UL-CCCH-Message', 'UL-CCCH-MessageType', 'UL-DCCH-Message', 'UL-DCCH-MessageType', 'CounterCheck', 'CounterCheck-r8-IEs', 'DRB-CountMSB-InfoList', 'DRB-CountMSB-Info', 'CounterCheckResponse', 'CounterCheckResponse-r8-IEs', 'DRB-CountInfoList', 'DRB-CountInfo', 'CSFBParametersRequestCDMA2000', 'CSFBParametersRequestCDMA2000-r8-IEs', 'CSFBParametersResponseCDMA2000', 'CSFBParametersResponseCDMA2000-r8-IEs', 'DLInformationTransfer', 'DLInformationTransfer-r8-IEs', 'HandoverFromEUTRAPreparationRequest', 'HandoverFromEUTRAPreparationRequest-r8-IEs', 'MasterInformationBlock', 'MeasurementReport', 'MeasurementReport-r8-IEs', 'MobilityFromEUTRACommand', 'MobilityFromEUTRACommand-r8-IEs', 'Handover', 'CellChangeOrder', 'SI-OrPSI-GERAN', 'SystemInfoListGERAN', 'Paging', 'PagingRecordList', 'PagingRecord', 'PagingUE-Identity', 'IMSI', 'IMSI-Digit', 'RRCConnectionReconfiguration', 'RRCConnectionReconfiguration-r8-IEs', 'SecurityConfigHO', 'RRCConnectionReconfigurationComplete', 'RRCConnectionReconfigurationComplete-r8-IEs', 'RRCConnectionReestablishment', 'RRCConnectionReestablishment-r8-IEs', 'RRCConnectionReestablishmentComplete', 'RRCConnectionReestablishmentComplete-r8-IEs', 'RRCConnectionReestablishmentReject', 'RRCConnectionReestablishmentReject-r8-IEs', 'RRCConnectionReestablishmentRequest', 'RRCConnectionReestablishmentRequest-r8-IEs', 'ReestabUE-Identity', 'ReestablishmentCause', 'RRCConnectionReject', 'RRCConnectionReject-r8-IEs', 'RRCConnectionRelease', 'RRCConnectionRelease-r8-IEs', 'ReleaseCause', 'RedirectedCarrierInfo', 'IdleModeMobilityControlInfo', 'FreqPriorityListEUTRA', 'FreqPriorityEUTRA', 'FreqsPriorityListGERAN', 'FreqsPriorityGERAN', 'FreqPriorityListUTRA-FDD', 'FreqPriorityUTRA-FDD', 'FreqPriorityListUTRA-TDD', 'FreqPriorityUTRA-TDD', 'BandClassPriorityListHRPD', 'BandClassPriorityHRPD', 'BandClassPriorityList1XRTT', 'BandClassPriority1XRTT', 'RRCConnectionRequest', 'RRCConnectionRequest-r8-IEs', 'InitialUE-Identity', 'EstablishmentCause', 'RRCConnectionSetup', 'RRCConnectionSetup-r8-IEs', 'RRCConnectionSetupComplete', 'RRCConnectionSetupComplete-r8-IEs', 'RegisteredMME', 'SecurityModeCommand', 'SecurityModeCommand-r8-IEs', 'SecurityConfigSMC', 'SecurityModeComplete', 'SecurityModeComplete-r8-IEs', 'SecurityModeFailure', 'SecurityModeFailure-r8-IEs', 'SystemInformation', 'SystemInformation-r8-IEs', 'SystemInformationBlockType1', 'PLMN-IdentityList', 'PLMN-IdentityInfo', 'SchedulingInfoList', 'SchedulingInfo', 'SIB-MappingInfo', 'SIB-Type', 'UECapabilityEnquiry', 'UECapabilityEnquiry-r8-IEs', 'UE-CapabilityRequest', 'UECapabilityInformation', 'UECapabilityInformation-r8-IEs', 'ULHandoverPreparationTransfer', 'ULHandoverPreparationTransfer-r8-IEs', 'ULInformationTransfer', 'ULInformationTransfer-r8-IEs', 'SystemInformationBlockType2', 'AC-BarringConfig', 'MBSFN-SubframeConfigList', 'MBSFN-SubframeConfig', 'SystemInformationBlockType3', 'SystemInformationBlockType4', 'IntraFreqNeighCellList', 'IntraFreqNeighCellInfo', 'IntraFreqBlackCellList', 'SystemInformationBlockType5', 'InterFreqCarrierFreqList', 'InterFreqCarrierFreqInfo', 'InterFreqNeighCellList', 'InterFreqNeighCellInfo', 'InterFreqBlackCellList', 'SystemInformationBlockType6', 'CarrierFreqListUTRA-FDD', 'CarrierFreqUTRA-FDD', 'CarrierFreqListUTRA-TDD', 'CarrierFreqUTRA-TDD', 'SystemInformationBlockType7', 'CarrierFreqsInfoListGERAN', 'CarrierFreqsInfoGERAN', 'SystemInformationBlockType8', 'CellReselectionParametersCDMA2000', 'NeighCellListCDMA2000', 'NeighCellCDMA2000', 'NeighCellsPerBandclassListCDMA2000', 'NeighCellsPerBandclassCDMA2000', 'PhysCellIdListCDMA2000', 'BandClassListCDMA2000', 'BandClassInfoCDMA2000', 'SystemInformationBlockType9', 'SystemInformationBlockType10', 'SystemInformationBlockType11', 'AntennaInfoCommon', 'AntennaInfoDedicated', 'CQI-ReportConfig', 'CQI-ReportPeriodic', 'DRB-Identity', 'LogicalChannelConfig', 'MAC-MainConfig', 'DRX-Config', 'PDCP-Config', 'PDSCH-ConfigCommon', 'PDSCH-ConfigDedicated', 'PHICH-Config', 'PhysicalConfigDedicated', 'P-Max', 'PRACH-ConfigSIB', 'PRACH-Config', 'PRACH-ConfigInfo', 'PresenceAntennaPort1', 'PUCCH-ConfigCommon', 'PUCCH-ConfigDedicated', 'PUSCH-ConfigCommon', 'PUSCH-ConfigDedicated', 'UL-ReferenceSignalsPUSCH', 'RACH-ConfigCommon', 'RACH-ConfigDedicated', 'RadioResourceConfigCommonSIB', 'RadioResourceConfigCommon', 'BCCH-Config', 'PCCH-Config', 'UL-CyclicPrefixLength', 'RadioResourceConfigDedicated', 'SRB-ToAddModList', 'SRB-ToAddMod', 'DRB-ToAddModList', 'DRB-ToAddMod', 'DRB-ToReleaseList', 'RLC-Config', 'UL-AM-RLC', 'DL-AM-RLC', 'UL-UM-RLC', 'DL-UM-RLC', 'SN-FieldLength', 'T-PollRetransmit', 'PollPDU', 'PollByte', 'T-Reordering', 'T-StatusProhibit', 'SchedulingRequestConfig', 'SoundingRS-UL-ConfigCommon', 'SoundingRS-UL-ConfigDedicated', 'SPS-Config', 'SPS-ConfigDL', 'SPS-ConfigUL', 'N1-PUCCH-AN-PersistentList', 'TDD-Config', 'TimeAlignmentTimer', 'TPC-PDCCH-Config', 'TPC-Index', 'UplinkPowerControlCommon', 'UplinkPowerControlDedicated', 'DeltaFList-PUCCH', 'NextHopChainingCount', 'SecurityAlgorithmConfig', 'ShortMAC-I', 'AdditionalSpectrumEmission', 'ARFCN-ValueCDMA2000', 'ARFCN-ValueEUTRA', 'ARFCN-ValueGERAN', 'ARFCN-ValueUTRA', 'BandclassCDMA2000', 'BandIndicatorGERAN', 'CarrierFreqCDMA2000', 'CarrierFreqGERAN', 'CarrierFreqsGERAN', 'ExplicitListOfARFCNs', 'CDMA2000-Type', 'CellIdentity', 'CellIndexList', 'CellIndex', 'CellReselectionPriority', 'CSFB-RegistrationParam1XRTT', 'CellGlobalIdEUTRA', 'CellGlobalIdUTRA', 'CellGlobalIdGERAN', 'CellGlobalIdCDMA2000', 'MobilityControlInfo', 'CarrierBandwidthEUTRA', 'CarrierFreqEUTRA', 'MobilityParametersCDMA2000', 'MobilityStateParameters', 'PhysCellId', 'PhysCellIdRange', 'PhysCellIdCDMA2000', 'PhysCellIdGERAN', 'PhysCellIdUTRA-FDD', 'PhysCellIdUTRA-TDD', 'PLMN-Identity', 'MCC', 'MNC', 'MCC-MNC-Digit', 'PreRegistrationInfoHRPD', 'SecondaryPreRegistrationZoneIdListHRPD', 'PreRegistrationZoneIdHRPD', 'Q-RxLevMin', 'Q-OffsetRange', 'Q-OffsetRangeInterRAT', 'ReselectionThreshold', 'SpeedStateScaleFactors', 'SystemTimeInfoCDMA2000', 'TrackingAreaCode', 'T-Reselection', 'AllowedMeasBandwidth', 'Hysteresis', 'MeasConfig', 'MeasIdToRemoveList', 'MeasObjectToRemoveList', 'ReportConfigToRemoveList', 'MeasGapConfig', 'MeasId', 'MeasIdToAddModList', 'MeasIdToAddMod', 'MeasObjectCDMA2000', 'CellsToAddModListCDMA2000', 'CellsToAddModCDMA2000', 'MeasObjectEUTRA', 'CellsToAddModList', 'CellsToAddMod', 'BlackCellsToAddModList', 'BlackCellsToAddMod', 'MeasObjectGERAN', 'MeasObjectId', 'MeasObjectToAddModList', 'MeasObjectToAddMod', 'MeasObjectUTRA', 'CellsToAddModListUTRA-FDD', 'CellsToAddModUTRA-FDD', 'CellsToAddModListUTRA-TDD', 'CellsToAddModUTRA-TDD', 'MeasResults', 'MeasResultListEUTRA', 'MeasResultEUTRA', 'MeasResultListUTRA', 'MeasResultUTRA', 'MeasResultListGERAN', 'MeasResultGERAN', 'MeasResultsCDMA2000', 'MeasResultListCDMA2000', 'MeasResultCDMA2000', 'PLMN-IdentityList2', 'QuantityConfig', 'QuantityConfigEUTRA', 'QuantityConfigUTRA', 'QuantityConfigGERAN', 'QuantityConfigCDMA2000', 'ReportConfigEUTRA', 'ThresholdEUTRA', 'ReportConfigId', 'ReportConfigInterRAT', 'ThresholdUTRA', 'ThresholdGERAN', 'ThresholdCDMA2000', 'ReportConfigToAddModList', 'ReportConfigToAddMod', 'ReportInterval', 'RSRP-Range', 'RSRQ-Range', 'TimeToTrigger', 'C-RNTI', 'DedicatedInfoCDMA2000', 'DedicatedInfoNAS', 'FilterCoefficient', 'MMEC', 'NeighCellConfig', 'RAND-CDMA2000', 'RAT-Type', 'RRC-TransactionIdentifier', 'S-TMSI', 'UE-CapabilityRAT-ContainerList', 'UE-CapabilityRAT-Container', 'UE-EUTRA-Capability', 'AccessStratumRelease', 'PDCP-Parameters', 'PhyLayerParameters', 'RF-Parameters', 'SupportedBandListEUTRA', 'SupportedBandEUTRA', 'MeasParameters', 'BandListEUTRA', 'BandInfoEUTRA', 'InterFreqBandList', 'InterFreqBandInfo', 'InterRAT-BandList', 'InterRAT-BandInfo', 'IRAT-ParametersUTRA-FDD', 'SupportedBandListUTRA-FDD', 'SupportedBandUTRA-FDD', 'IRAT-ParametersUTRA-TDD128', 'SupportedBandListUTRA-TDD128', 'SupportedBandUTRA-TDD128', 'IRAT-ParametersUTRA-TDD384', 'SupportedBandListUTRA-TDD384', 'SupportedBandUTRA-TDD384', 'IRAT-ParametersUTRA-TDD768', 'SupportedBandListUTRA-TDD768', 'SupportedBandUTRA-TDD768', 'IRAT-ParametersGERAN', 'SupportedBandListGERAN', 'SupportedBandGERAN', 'IRAT-ParametersCDMA2000-HRPD', 'SupportedBandListHRPD', 'IRAT-ParametersCDMA2000-1XRTT', 'SupportedBandList1XRTT', 'UE-TimersAndConstants', ] _set_ = [ ] _val_ = [ 'maxBands', 'maxCDMA-BandClass', 'maxCellBlack', 'maxCellInter', 'maxCellIntra', 'maxCellMeas', 'maxCellReport', 'maxDRB', 'maxEARFCN', 'maxFreq', 'maxGERAN-SI', 'maxGNFG', 'maxMBSFN-Allocations', 'maxMCS-1', 'maxMeasId', 'maxObjectId', 'maxPageRec', 'maxPNOffset', 'maxRAT-Capabilities', 'maxReportConfigId', 'maxSIB', 'maxSIB-1', 'maxSI-Message', 'maxUTRA-FDD-Carrier', 'maxUTRA-TDD-Carrier', ] _class_ = [ ] _param_ = [ ] #-----< BCCH-BCH-Message >-----# BCCH_BCH_Message = SEQ(name='BCCH-BCH-Message', mode=MODE_TYPE) _BCCH_BCH_Message_message = SEQ(name='message', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BCCH-BCH-MessageType'))) BCCH_BCH_Message._cont = ASN1Dict([ ('message', _BCCH_BCH_Message_message), ]) BCCH_BCH_Message._ext = None #-----< BCCH-BCH-MessageType >-----# BCCH_BCH_MessageType = SEQ(name='BCCH-BCH-MessageType', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MasterInformationBlock'))) #-----< BCCH-DL-SCH-Message >-----# BCCH_DL_SCH_Message = SEQ(name='BCCH-DL-SCH-Message', mode=MODE_TYPE) _BCCH_DL_SCH_Message_message = CHOICE(name='message', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BCCH-DL-SCH-MessageType'))) BCCH_DL_SCH_Message._cont = ASN1Dict([ ('message', _BCCH_DL_SCH_Message_message), ]) BCCH_DL_SCH_Message._ext = None #-----< BCCH-DL-SCH-MessageType >-----# BCCH_DL_SCH_MessageType = CHOICE(name='BCCH-DL-SCH-MessageType', mode=MODE_TYPE) _BCCH_DL_SCH_MessageType_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __BCCH_DL_SCH_MessageType_c1_systemInformation = SEQ(name='systemInformation', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformation'))) __BCCH_DL_SCH_MessageType_c1_systemInformationBlockType1 = SEQ(name='systemInformationBlockType1', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType1'))) _BCCH_DL_SCH_MessageType_c1._cont = ASN1Dict([ ('systemInformation', __BCCH_DL_SCH_MessageType_c1_systemInformation), ('systemInformationBlockType1', __BCCH_DL_SCH_MessageType_c1_systemInformationBlockType1), ]) _BCCH_DL_SCH_MessageType_c1._ext = None _BCCH_DL_SCH_MessageType_messageClassExtension = SEQ(name='messageClassExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _BCCH_DL_SCH_MessageType_messageClassExtension._cont = ASN1Dict([ ]) _BCCH_DL_SCH_MessageType_messageClassExtension._ext = None BCCH_DL_SCH_MessageType._cont = ASN1Dict([ ('c1', _BCCH_DL_SCH_MessageType_c1), ('messageClassExtension', _BCCH_DL_SCH_MessageType_messageClassExtension), ]) BCCH_DL_SCH_MessageType._ext = None #-----< PCCH-Message >-----# PCCH_Message = SEQ(name='PCCH-Message', mode=MODE_TYPE) _PCCH_Message_message = CHOICE(name='message', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PCCH-MessageType'))) PCCH_Message._cont = ASN1Dict([ ('message', _PCCH_Message_message), ]) PCCH_Message._ext = None #-----< PCCH-MessageType >-----# PCCH_MessageType = CHOICE(name='PCCH-MessageType', mode=MODE_TYPE) _PCCH_MessageType_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __PCCH_MessageType_c1_paging = SEQ(name='paging', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Paging'))) _PCCH_MessageType_c1._cont = ASN1Dict([ ('paging', __PCCH_MessageType_c1_paging), ]) _PCCH_MessageType_c1._ext = None _PCCH_MessageType_messageClassExtension = SEQ(name='messageClassExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PCCH_MessageType_messageClassExtension._cont = ASN1Dict([ ]) _PCCH_MessageType_messageClassExtension._ext = None PCCH_MessageType._cont = ASN1Dict([ ('c1', _PCCH_MessageType_c1), ('messageClassExtension', _PCCH_MessageType_messageClassExtension), ]) PCCH_MessageType._ext = None #-----< DL-CCCH-Message >-----# DL_CCCH_Message = SEQ(name='DL-CCCH-Message', mode=MODE_TYPE) _DL_CCCH_Message_message = CHOICE(name='message', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DL-CCCH-MessageType'))) DL_CCCH_Message._cont = ASN1Dict([ ('message', _DL_CCCH_Message_message), ]) DL_CCCH_Message._ext = None #-----< DL-CCCH-MessageType >-----# DL_CCCH_MessageType = CHOICE(name='DL-CCCH-MessageType', mode=MODE_TYPE) _DL_CCCH_MessageType_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __DL_CCCH_MessageType_c1_rrcConnectionReestablishment = SEQ(name='rrcConnectionReestablishment', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReestablishment'))) __DL_CCCH_MessageType_c1_rrcConnectionReestablishmentReject = SEQ(name='rrcConnectionReestablishmentReject', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReestablishmentReject'))) __DL_CCCH_MessageType_c1_rrcConnectionReject = SEQ(name='rrcConnectionReject', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReject'))) __DL_CCCH_MessageType_c1_rrcConnectionSetup = SEQ(name='rrcConnectionSetup', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionSetup'))) _DL_CCCH_MessageType_c1._cont = ASN1Dict([ ('rrcConnectionReestablishment', __DL_CCCH_MessageType_c1_rrcConnectionReestablishment), ('rrcConnectionReestablishmentReject', __DL_CCCH_MessageType_c1_rrcConnectionReestablishmentReject), ('rrcConnectionReject', __DL_CCCH_MessageType_c1_rrcConnectionReject), ('rrcConnectionSetup', __DL_CCCH_MessageType_c1_rrcConnectionSetup), ]) _DL_CCCH_MessageType_c1._ext = None _DL_CCCH_MessageType_messageClassExtension = SEQ(name='messageClassExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DL_CCCH_MessageType_messageClassExtension._cont = ASN1Dict([ ]) _DL_CCCH_MessageType_messageClassExtension._ext = None DL_CCCH_MessageType._cont = ASN1Dict([ ('c1', _DL_CCCH_MessageType_c1), ('messageClassExtension', _DL_CCCH_MessageType_messageClassExtension), ]) DL_CCCH_MessageType._ext = None #-----< DL-DCCH-Message >-----# DL_DCCH_Message = SEQ(name='DL-DCCH-Message', mode=MODE_TYPE) _DL_DCCH_Message_message = CHOICE(name='message', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DL-DCCH-MessageType'))) DL_DCCH_Message._cont = ASN1Dict([ ('message', _DL_DCCH_Message_message), ]) DL_DCCH_Message._ext = None #-----< DL-DCCH-MessageType >-----# DL_DCCH_MessageType = CHOICE(name='DL-DCCH-MessageType', mode=MODE_TYPE) _DL_DCCH_MessageType_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __DL_DCCH_MessageType_c1_csfbParametersResponseCDMA2000 = SEQ(name='csfbParametersResponseCDMA2000', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CSFBParametersResponseCDMA2000'))) __DL_DCCH_MessageType_c1_dlInformationTransfer = SEQ(name='dlInformationTransfer', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DLInformationTransfer'))) __DL_DCCH_MessageType_c1_handoverFromEUTRAPreparationRequest = SEQ(name='handoverFromEUTRAPreparationRequest', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'HandoverFromEUTRAPreparationRequest'))) __DL_DCCH_MessageType_c1_mobilityFromEUTRACommand = SEQ(name='mobilityFromEUTRACommand', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MobilityFromEUTRACommand'))) __DL_DCCH_MessageType_c1_rrcConnectionReconfiguration = SEQ(name='rrcConnectionReconfiguration', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReconfiguration'))) __DL_DCCH_MessageType_c1_rrcConnectionRelease = SEQ(name='rrcConnectionRelease', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionRelease'))) __DL_DCCH_MessageType_c1_securityModeCommand = SEQ(name='securityModeCommand', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecurityModeCommand'))) __DL_DCCH_MessageType_c1_ueCapabilityEnquiry = SEQ(name='ueCapabilityEnquiry', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UECapabilityEnquiry'))) __DL_DCCH_MessageType_c1_counterCheck = SEQ(name='counterCheck', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CounterCheck'))) __DL_DCCH_MessageType_c1_spare7 = NULL(name='spare7', mode=MODE_TYPE, tag=(9, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __DL_DCCH_MessageType_c1_spare6 = NULL(name='spare6', mode=MODE_TYPE, tag=(10, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __DL_DCCH_MessageType_c1_spare5 = NULL(name='spare5', mode=MODE_TYPE, tag=(11, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __DL_DCCH_MessageType_c1_spare4 = NULL(name='spare4', mode=MODE_TYPE, tag=(12, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __DL_DCCH_MessageType_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(13, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __DL_DCCH_MessageType_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(14, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __DL_DCCH_MessageType_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(15, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DL_DCCH_MessageType_c1._cont = ASN1Dict([ ('csfbParametersResponseCDMA2000', __DL_DCCH_MessageType_c1_csfbParametersResponseCDMA2000), ('dlInformationTransfer', __DL_DCCH_MessageType_c1_dlInformationTransfer), ('handoverFromEUTRAPreparationRequest', __DL_DCCH_MessageType_c1_handoverFromEUTRAPreparationRequest), ('mobilityFromEUTRACommand', __DL_DCCH_MessageType_c1_mobilityFromEUTRACommand), ('rrcConnectionReconfiguration', __DL_DCCH_MessageType_c1_rrcConnectionReconfiguration), ('rrcConnectionRelease', __DL_DCCH_MessageType_c1_rrcConnectionRelease), ('securityModeCommand', __DL_DCCH_MessageType_c1_securityModeCommand), ('ueCapabilityEnquiry', __DL_DCCH_MessageType_c1_ueCapabilityEnquiry), ('counterCheck', __DL_DCCH_MessageType_c1_counterCheck), ('spare7', __DL_DCCH_MessageType_c1_spare7), ('spare6', __DL_DCCH_MessageType_c1_spare6), ('spare5', __DL_DCCH_MessageType_c1_spare5), ('spare4', __DL_DCCH_MessageType_c1_spare4), ('spare3', __DL_DCCH_MessageType_c1_spare3), ('spare2', __DL_DCCH_MessageType_c1_spare2), ('spare1', __DL_DCCH_MessageType_c1_spare1), ]) _DL_DCCH_MessageType_c1._ext = None _DL_DCCH_MessageType_messageClassExtension = SEQ(name='messageClassExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DL_DCCH_MessageType_messageClassExtension._cont = ASN1Dict([ ]) _DL_DCCH_MessageType_messageClassExtension._ext = None DL_DCCH_MessageType._cont = ASN1Dict([ ('c1', _DL_DCCH_MessageType_c1), ('messageClassExtension', _DL_DCCH_MessageType_messageClassExtension), ]) DL_DCCH_MessageType._ext = None #-----< UL-CCCH-Message >-----# UL_CCCH_Message = SEQ(name='UL-CCCH-Message', mode=MODE_TYPE) _UL_CCCH_Message_message = CHOICE(name='message', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UL-CCCH-MessageType'))) UL_CCCH_Message._cont = ASN1Dict([ ('message', _UL_CCCH_Message_message), ]) UL_CCCH_Message._ext = None #-----< UL-CCCH-MessageType >-----# UL_CCCH_MessageType = CHOICE(name='UL-CCCH-MessageType', mode=MODE_TYPE) _UL_CCCH_MessageType_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __UL_CCCH_MessageType_c1_rrcConnectionReestablishmentRequest = SEQ(name='rrcConnectionReestablishmentRequest', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReestablishmentRequest'))) __UL_CCCH_MessageType_c1_rrcConnectionRequest = SEQ(name='rrcConnectionRequest', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionRequest'))) _UL_CCCH_MessageType_c1._cont = ASN1Dict([ ('rrcConnectionReestablishmentRequest', __UL_CCCH_MessageType_c1_rrcConnectionReestablishmentRequest), ('rrcConnectionRequest', __UL_CCCH_MessageType_c1_rrcConnectionRequest), ]) _UL_CCCH_MessageType_c1._ext = None _UL_CCCH_MessageType_messageClassExtension = SEQ(name='messageClassExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UL_CCCH_MessageType_messageClassExtension._cont = ASN1Dict([ ]) _UL_CCCH_MessageType_messageClassExtension._ext = None UL_CCCH_MessageType._cont = ASN1Dict([ ('c1', _UL_CCCH_MessageType_c1), ('messageClassExtension', _UL_CCCH_MessageType_messageClassExtension), ]) UL_CCCH_MessageType._ext = None #-----< UL-DCCH-Message >-----# UL_DCCH_Message = SEQ(name='UL-DCCH-Message', mode=MODE_TYPE) _UL_DCCH_Message_message = CHOICE(name='message', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UL-DCCH-MessageType'))) UL_DCCH_Message._cont = ASN1Dict([ ('message', _UL_DCCH_Message_message), ]) UL_DCCH_Message._ext = None #-----< UL-DCCH-MessageType >-----# UL_DCCH_MessageType = CHOICE(name='UL-DCCH-MessageType', mode=MODE_TYPE) _UL_DCCH_MessageType_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __UL_DCCH_MessageType_c1_csfbParametersRequestCDMA2000 = SEQ(name='csfbParametersRequestCDMA2000', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CSFBParametersRequestCDMA2000'))) __UL_DCCH_MessageType_c1_measurementReport = SEQ(name='measurementReport', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasurementReport'))) __UL_DCCH_MessageType_c1_rrcConnectionReconfigurationComplete = SEQ(name='rrcConnectionReconfigurationComplete', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReconfigurationComplete'))) __UL_DCCH_MessageType_c1_rrcConnectionReestablishmentComplete = SEQ(name='rrcConnectionReestablishmentComplete', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReestablishmentComplete'))) __UL_DCCH_MessageType_c1_rrcConnectionSetupComplete = SEQ(name='rrcConnectionSetupComplete', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionSetupComplete'))) __UL_DCCH_MessageType_c1_securityModeComplete = SEQ(name='securityModeComplete', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecurityModeComplete'))) __UL_DCCH_MessageType_c1_securityModeFailure = SEQ(name='securityModeFailure', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecurityModeFailure'))) __UL_DCCH_MessageType_c1_ueCapabilityInformation = SEQ(name='ueCapabilityInformation', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UECapabilityInformation'))) __UL_DCCH_MessageType_c1_ulHandoverPreparationTransfer = SEQ(name='ulHandoverPreparationTransfer', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ULHandoverPreparationTransfer'))) __UL_DCCH_MessageType_c1_ulInformationTransfer = SEQ(name='ulInformationTransfer', mode=MODE_TYPE, tag=(9, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ULInformationTransfer'))) __UL_DCCH_MessageType_c1_counterCheckResponse = SEQ(name='counterCheckResponse', mode=MODE_TYPE, tag=(10, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CounterCheckResponse'))) __UL_DCCH_MessageType_c1_spare5 = NULL(name='spare5', mode=MODE_TYPE, tag=(11, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __UL_DCCH_MessageType_c1_spare4 = NULL(name='spare4', mode=MODE_TYPE, tag=(12, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __UL_DCCH_MessageType_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(13, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __UL_DCCH_MessageType_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(14, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __UL_DCCH_MessageType_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(15, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UL_DCCH_MessageType_c1._cont = ASN1Dict([ ('csfbParametersRequestCDMA2000', __UL_DCCH_MessageType_c1_csfbParametersRequestCDMA2000), ('measurementReport', __UL_DCCH_MessageType_c1_measurementReport), ('rrcConnectionReconfigurationComplete', __UL_DCCH_MessageType_c1_rrcConnectionReconfigurationComplete), ('rrcConnectionReestablishmentComplete', __UL_DCCH_MessageType_c1_rrcConnectionReestablishmentComplete), ('rrcConnectionSetupComplete', __UL_DCCH_MessageType_c1_rrcConnectionSetupComplete), ('securityModeComplete', __UL_DCCH_MessageType_c1_securityModeComplete), ('securityModeFailure', __UL_DCCH_MessageType_c1_securityModeFailure), ('ueCapabilityInformation', __UL_DCCH_MessageType_c1_ueCapabilityInformation), ('ulHandoverPreparationTransfer', __UL_DCCH_MessageType_c1_ulHandoverPreparationTransfer), ('ulInformationTransfer', __UL_DCCH_MessageType_c1_ulInformationTransfer), ('counterCheckResponse', __UL_DCCH_MessageType_c1_counterCheckResponse), ('spare5', __UL_DCCH_MessageType_c1_spare5), ('spare4', __UL_DCCH_MessageType_c1_spare4), ('spare3', __UL_DCCH_MessageType_c1_spare3), ('spare2', __UL_DCCH_MessageType_c1_spare2), ('spare1', __UL_DCCH_MessageType_c1_spare1), ]) _UL_DCCH_MessageType_c1._ext = None _UL_DCCH_MessageType_messageClassExtension = SEQ(name='messageClassExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UL_DCCH_MessageType_messageClassExtension._cont = ASN1Dict([ ]) _UL_DCCH_MessageType_messageClassExtension._ext = None UL_DCCH_MessageType._cont = ASN1Dict([ ('c1', _UL_DCCH_MessageType_c1), ('messageClassExtension', _UL_DCCH_MessageType_messageClassExtension), ]) UL_DCCH_MessageType._ext = None #-----< CounterCheck >-----# CounterCheck = SEQ(name='CounterCheck', mode=MODE_TYPE) _CounterCheck_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _CounterCheck_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __CounterCheck_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___CounterCheck_criticalExtensions_c1_counterCheck_r8 = SEQ(name='counterCheck-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CounterCheck-r8-IEs'))) ___CounterCheck_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___CounterCheck_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___CounterCheck_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __CounterCheck_criticalExtensions_c1._cont = ASN1Dict([ ('counterCheck-r8', ___CounterCheck_criticalExtensions_c1_counterCheck_r8), ('spare3', ___CounterCheck_criticalExtensions_c1_spare3), ('spare2', ___CounterCheck_criticalExtensions_c1_spare2), ('spare1', ___CounterCheck_criticalExtensions_c1_spare1), ]) __CounterCheck_criticalExtensions_c1._ext = None __CounterCheck_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __CounterCheck_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __CounterCheck_criticalExtensions_criticalExtensionsFuture._ext = None _CounterCheck_criticalExtensions._cont = ASN1Dict([ ('c1', __CounterCheck_criticalExtensions_c1), ('criticalExtensionsFuture', __CounterCheck_criticalExtensions_criticalExtensionsFuture), ]) _CounterCheck_criticalExtensions._ext = None CounterCheck._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _CounterCheck_rrc_TransactionIdentifier), ('criticalExtensions', _CounterCheck_criticalExtensions), ]) CounterCheck._ext = None #-----< CounterCheck-r8-IEs >-----# CounterCheck_r8_IEs = SEQ(name='CounterCheck-r8-IEs', mode=MODE_TYPE) _CounterCheck_r8_IEs_drb_CountMSB_InfoList = SEQ_OF(name='drb-CountMSB-InfoList', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DRB-CountMSB-InfoList'))) _CounterCheck_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _CounterCheck_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _CounterCheck_r8_IEs_nonCriticalExtension._ext = None CounterCheck_r8_IEs._cont = ASN1Dict([ ('drb-CountMSB-InfoList', _CounterCheck_r8_IEs_drb_CountMSB_InfoList), ('nonCriticalExtension', _CounterCheck_r8_IEs_nonCriticalExtension), ]) CounterCheck_r8_IEs._ext = None #-----< DRB-CountMSB-InfoList >-----# DRB_CountMSB_InfoList = SEQ_OF(name='DRB-CountMSB-InfoList', mode=MODE_TYPE) _DRB_CountMSB_InfoList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DRB-CountMSB-Info'))) DRB_CountMSB_InfoList._cont = _DRB_CountMSB_InfoList__item_ DRB_CountMSB_InfoList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=11)], ev=None, er=[]) #-----< DRB-CountMSB-Info >-----# DRB_CountMSB_Info = SEQ(name='DRB-CountMSB-Info', mode=MODE_TYPE) _DRB_CountMSB_Info_drb_Identity = INT(name='drb-Identity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DRB-Identity'))) _DRB_CountMSB_Info_countMSB_Uplink = INT(name='countMSB-Uplink', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DRB_CountMSB_Info_countMSB_Uplink._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=33554431)], ev=None, er=[]) _DRB_CountMSB_Info_countMSB_Downlink = INT(name='countMSB-Downlink', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DRB_CountMSB_Info_countMSB_Downlink._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=33554431)], ev=None, er=[]) DRB_CountMSB_Info._cont = ASN1Dict([ ('drb-Identity', _DRB_CountMSB_Info_drb_Identity), ('countMSB-Uplink', _DRB_CountMSB_Info_countMSB_Uplink), ('countMSB-Downlink', _DRB_CountMSB_Info_countMSB_Downlink), ]) DRB_CountMSB_Info._ext = None #-----< CounterCheckResponse >-----# CounterCheckResponse = SEQ(name='CounterCheckResponse', mode=MODE_TYPE) _CounterCheckResponse_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _CounterCheckResponse_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __CounterCheckResponse_criticalExtensions_counterCheckResponse_r8 = SEQ(name='counterCheckResponse-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CounterCheckResponse-r8-IEs'))) __CounterCheckResponse_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __CounterCheckResponse_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __CounterCheckResponse_criticalExtensions_criticalExtensionsFuture._ext = None _CounterCheckResponse_criticalExtensions._cont = ASN1Dict([ ('counterCheckResponse-r8', __CounterCheckResponse_criticalExtensions_counterCheckResponse_r8), ('criticalExtensionsFuture', __CounterCheckResponse_criticalExtensions_criticalExtensionsFuture), ]) _CounterCheckResponse_criticalExtensions._ext = None CounterCheckResponse._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _CounterCheckResponse_rrc_TransactionIdentifier), ('criticalExtensions', _CounterCheckResponse_criticalExtensions), ]) CounterCheckResponse._ext = None #-----< CounterCheckResponse-r8-IEs >-----# CounterCheckResponse_r8_IEs = SEQ(name='CounterCheckResponse-r8-IEs', mode=MODE_TYPE) _CounterCheckResponse_r8_IEs_drb_CountInfoList = SEQ_OF(name='drb-CountInfoList', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DRB-CountInfoList'))) _CounterCheckResponse_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _CounterCheckResponse_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _CounterCheckResponse_r8_IEs_nonCriticalExtension._ext = None CounterCheckResponse_r8_IEs._cont = ASN1Dict([ ('drb-CountInfoList', _CounterCheckResponse_r8_IEs_drb_CountInfoList), ('nonCriticalExtension', _CounterCheckResponse_r8_IEs_nonCriticalExtension), ]) CounterCheckResponse_r8_IEs._ext = None #-----< DRB-CountInfoList >-----# DRB_CountInfoList = SEQ_OF(name='DRB-CountInfoList', mode=MODE_TYPE) _DRB_CountInfoList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DRB-CountInfo'))) DRB_CountInfoList._cont = _DRB_CountInfoList__item_ DRB_CountInfoList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=11)], ev=None, er=[]) #-----< DRB-CountInfo >-----# DRB_CountInfo = SEQ(name='DRB-CountInfo', mode=MODE_TYPE) _DRB_CountInfo_drb_Identity = INT(name='drb-Identity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DRB-Identity'))) _DRB_CountInfo_count_Uplink = INT(name='count-Uplink', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DRB_CountInfo_count_Uplink._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=4294967295)], ev=None, er=[]) _DRB_CountInfo_count_Downlink = INT(name='count-Downlink', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DRB_CountInfo_count_Downlink._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=4294967295)], ev=None, er=[]) DRB_CountInfo._cont = ASN1Dict([ ('drb-Identity', _DRB_CountInfo_drb_Identity), ('count-Uplink', _DRB_CountInfo_count_Uplink), ('count-Downlink', _DRB_CountInfo_count_Downlink), ]) DRB_CountInfo._ext = None #-----< CSFBParametersRequestCDMA2000 >-----# CSFBParametersRequestCDMA2000 = SEQ(name='CSFBParametersRequestCDMA2000', mode=MODE_TYPE) _CSFBParametersRequestCDMA2000_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __CSFBParametersRequestCDMA2000_criticalExtensions_csfbParametersRequestCDMA2000_r8 = SEQ(name='csfbParametersRequestCDMA2000-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CSFBParametersRequestCDMA2000-r8-IEs'))) __CSFBParametersRequestCDMA2000_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __CSFBParametersRequestCDMA2000_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __CSFBParametersRequestCDMA2000_criticalExtensions_criticalExtensionsFuture._ext = None _CSFBParametersRequestCDMA2000_criticalExtensions._cont = ASN1Dict([ ('csfbParametersRequestCDMA2000-r8', __CSFBParametersRequestCDMA2000_criticalExtensions_csfbParametersRequestCDMA2000_r8), ('criticalExtensionsFuture', __CSFBParametersRequestCDMA2000_criticalExtensions_criticalExtensionsFuture), ]) _CSFBParametersRequestCDMA2000_criticalExtensions._ext = None CSFBParametersRequestCDMA2000._cont = ASN1Dict([ ('criticalExtensions', _CSFBParametersRequestCDMA2000_criticalExtensions), ]) CSFBParametersRequestCDMA2000._ext = None #-----< CSFBParametersRequestCDMA2000-r8-IEs >-----# CSFBParametersRequestCDMA2000_r8_IEs = SEQ(name='CSFBParametersRequestCDMA2000-r8-IEs', mode=MODE_TYPE) _CSFBParametersRequestCDMA2000_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _CSFBParametersRequestCDMA2000_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _CSFBParametersRequestCDMA2000_r8_IEs_nonCriticalExtension._ext = None CSFBParametersRequestCDMA2000_r8_IEs._cont = ASN1Dict([ ('nonCriticalExtension', _CSFBParametersRequestCDMA2000_r8_IEs_nonCriticalExtension), ]) CSFBParametersRequestCDMA2000_r8_IEs._ext = None #-----< CSFBParametersResponseCDMA2000 >-----# CSFBParametersResponseCDMA2000 = SEQ(name='CSFBParametersResponseCDMA2000', mode=MODE_TYPE) _CSFBParametersResponseCDMA2000_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _CSFBParametersResponseCDMA2000_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __CSFBParametersResponseCDMA2000_criticalExtensions_csfbParametersResponseCDMA2000_r8 = SEQ(name='csfbParametersResponseCDMA2000-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CSFBParametersResponseCDMA2000-r8-IEs'))) __CSFBParametersResponseCDMA2000_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __CSFBParametersResponseCDMA2000_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __CSFBParametersResponseCDMA2000_criticalExtensions_criticalExtensionsFuture._ext = None _CSFBParametersResponseCDMA2000_criticalExtensions._cont = ASN1Dict([ ('csfbParametersResponseCDMA2000-r8', __CSFBParametersResponseCDMA2000_criticalExtensions_csfbParametersResponseCDMA2000_r8), ('criticalExtensionsFuture', __CSFBParametersResponseCDMA2000_criticalExtensions_criticalExtensionsFuture), ]) _CSFBParametersResponseCDMA2000_criticalExtensions._ext = None CSFBParametersResponseCDMA2000._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _CSFBParametersResponseCDMA2000_rrc_TransactionIdentifier), ('criticalExtensions', _CSFBParametersResponseCDMA2000_criticalExtensions), ]) CSFBParametersResponseCDMA2000._ext = None #-----< CSFBParametersResponseCDMA2000-r8-IEs >-----# CSFBParametersResponseCDMA2000_r8_IEs = SEQ(name='CSFBParametersResponseCDMA2000-r8-IEs', mode=MODE_TYPE) _CSFBParametersResponseCDMA2000_r8_IEs_rand = BIT_STR(name='rand', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RAND-CDMA2000'))) _CSFBParametersResponseCDMA2000_r8_IEs_mobilityParameters = OCT_STR(name='mobilityParameters', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MobilityParametersCDMA2000'))) _CSFBParametersResponseCDMA2000_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _CSFBParametersResponseCDMA2000_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _CSFBParametersResponseCDMA2000_r8_IEs_nonCriticalExtension._ext = None CSFBParametersResponseCDMA2000_r8_IEs._cont = ASN1Dict([ ('rand', _CSFBParametersResponseCDMA2000_r8_IEs_rand), ('mobilityParameters', _CSFBParametersResponseCDMA2000_r8_IEs_mobilityParameters), ('nonCriticalExtension', _CSFBParametersResponseCDMA2000_r8_IEs_nonCriticalExtension), ]) CSFBParametersResponseCDMA2000_r8_IEs._ext = None #-----< DLInformationTransfer >-----# DLInformationTransfer = SEQ(name='DLInformationTransfer', mode=MODE_TYPE) _DLInformationTransfer_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _DLInformationTransfer_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __DLInformationTransfer_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___DLInformationTransfer_criticalExtensions_c1_dlInformationTransfer_r8 = SEQ(name='dlInformationTransfer-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DLInformationTransfer-r8-IEs'))) ___DLInformationTransfer_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DLInformationTransfer_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DLInformationTransfer_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __DLInformationTransfer_criticalExtensions_c1._cont = ASN1Dict([ ('dlInformationTransfer-r8', ___DLInformationTransfer_criticalExtensions_c1_dlInformationTransfer_r8), ('spare3', ___DLInformationTransfer_criticalExtensions_c1_spare3), ('spare2', ___DLInformationTransfer_criticalExtensions_c1_spare2), ('spare1', ___DLInformationTransfer_criticalExtensions_c1_spare1), ]) __DLInformationTransfer_criticalExtensions_c1._ext = None __DLInformationTransfer_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __DLInformationTransfer_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __DLInformationTransfer_criticalExtensions_criticalExtensionsFuture._ext = None _DLInformationTransfer_criticalExtensions._cont = ASN1Dict([ ('c1', __DLInformationTransfer_criticalExtensions_c1), ('criticalExtensionsFuture', __DLInformationTransfer_criticalExtensions_criticalExtensionsFuture), ]) _DLInformationTransfer_criticalExtensions._ext = None DLInformationTransfer._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _DLInformationTransfer_rrc_TransactionIdentifier), ('criticalExtensions', _DLInformationTransfer_criticalExtensions), ]) DLInformationTransfer._ext = None #-----< DLInformationTransfer-r8-IEs >-----# DLInformationTransfer_r8_IEs = SEQ(name='DLInformationTransfer-r8-IEs', mode=MODE_TYPE) _DLInformationTransfer_r8_IEs_dedicatedInfoType = CHOICE(name='dedicatedInfoType', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __DLInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoNAS = OCT_STR(name='dedicatedInfoNAS', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DedicatedInfoNAS'))) __DLInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoCDMA2000_1XRTT = OCT_STR(name='dedicatedInfoCDMA2000-1XRTT', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DedicatedInfoCDMA2000'))) __DLInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoCDMA2000_HRPD = OCT_STR(name='dedicatedInfoCDMA2000-HRPD', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DedicatedInfoCDMA2000'))) _DLInformationTransfer_r8_IEs_dedicatedInfoType._cont = ASN1Dict([ ('dedicatedInfoNAS', __DLInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoNAS), ('dedicatedInfoCDMA2000-1XRTT', __DLInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoCDMA2000_1XRTT), ('dedicatedInfoCDMA2000-HRPD', __DLInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoCDMA2000_HRPD), ]) _DLInformationTransfer_r8_IEs_dedicatedInfoType._ext = None _DLInformationTransfer_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _DLInformationTransfer_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _DLInformationTransfer_r8_IEs_nonCriticalExtension._ext = None DLInformationTransfer_r8_IEs._cont = ASN1Dict([ ('dedicatedInfoType', _DLInformationTransfer_r8_IEs_dedicatedInfoType), ('nonCriticalExtension', _DLInformationTransfer_r8_IEs_nonCriticalExtension), ]) DLInformationTransfer_r8_IEs._ext = None #-----< HandoverFromEUTRAPreparationRequest >-----# HandoverFromEUTRAPreparationRequest = SEQ(name='HandoverFromEUTRAPreparationRequest', mode=MODE_TYPE) _HandoverFromEUTRAPreparationRequest_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _HandoverFromEUTRAPreparationRequest_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __HandoverFromEUTRAPreparationRequest_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___HandoverFromEUTRAPreparationRequest_criticalExtensions_c1_handoverFromEUTRAPreparationRequest_r8 = SEQ(name='handoverFromEUTRAPreparationRequest-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'HandoverFromEUTRAPreparationRequest-r8-IEs'))) ___HandoverFromEUTRAPreparationRequest_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverFromEUTRAPreparationRequest_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverFromEUTRAPreparationRequest_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __HandoverFromEUTRAPreparationRequest_criticalExtensions_c1._cont = ASN1Dict([ ('handoverFromEUTRAPreparationRequest-r8', ___HandoverFromEUTRAPreparationRequest_criticalExtensions_c1_handoverFromEUTRAPreparationRequest_r8), ('spare3', ___HandoverFromEUTRAPreparationRequest_criticalExtensions_c1_spare3), ('spare2', ___HandoverFromEUTRAPreparationRequest_criticalExtensions_c1_spare2), ('spare1', ___HandoverFromEUTRAPreparationRequest_criticalExtensions_c1_spare1), ]) __HandoverFromEUTRAPreparationRequest_criticalExtensions_c1._ext = None __HandoverFromEUTRAPreparationRequest_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __HandoverFromEUTRAPreparationRequest_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __HandoverFromEUTRAPreparationRequest_criticalExtensions_criticalExtensionsFuture._ext = None _HandoverFromEUTRAPreparationRequest_criticalExtensions._cont = ASN1Dict([ ('c1', __HandoverFromEUTRAPreparationRequest_criticalExtensions_c1), ('criticalExtensionsFuture', __HandoverFromEUTRAPreparationRequest_criticalExtensions_criticalExtensionsFuture), ]) _HandoverFromEUTRAPreparationRequest_criticalExtensions._ext = None HandoverFromEUTRAPreparationRequest._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _HandoverFromEUTRAPreparationRequest_rrc_TransactionIdentifier), ('criticalExtensions', _HandoverFromEUTRAPreparationRequest_criticalExtensions), ]) HandoverFromEUTRAPreparationRequest._ext = None #-----< HandoverFromEUTRAPreparationRequest-r8-IEs >-----# HandoverFromEUTRAPreparationRequest_r8_IEs = SEQ(name='HandoverFromEUTRAPreparationRequest-r8-IEs', mode=MODE_TYPE) _HandoverFromEUTRAPreparationRequest_r8_IEs_cdma2000_Type = ENUM(name='cdma2000-Type', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CDMA2000-Type'))) _HandoverFromEUTRAPreparationRequest_r8_IEs_rand = BIT_STR(name='rand', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RAND-CDMA2000')), opt=True) _HandoverFromEUTRAPreparationRequest_r8_IEs_mobilityParameters = OCT_STR(name='mobilityParameters', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MobilityParametersCDMA2000')), opt=True) _HandoverFromEUTRAPreparationRequest_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _HandoverFromEUTRAPreparationRequest_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _HandoverFromEUTRAPreparationRequest_r8_IEs_nonCriticalExtension._ext = None HandoverFromEUTRAPreparationRequest_r8_IEs._cont = ASN1Dict([ ('cdma2000-Type', _HandoverFromEUTRAPreparationRequest_r8_IEs_cdma2000_Type), ('rand', _HandoverFromEUTRAPreparationRequest_r8_IEs_rand), ('mobilityParameters', _HandoverFromEUTRAPreparationRequest_r8_IEs_mobilityParameters), ('nonCriticalExtension', _HandoverFromEUTRAPreparationRequest_r8_IEs_nonCriticalExtension), ]) HandoverFromEUTRAPreparationRequest_r8_IEs._ext = None #-----< MasterInformationBlock >-----# MasterInformationBlock = SEQ(name='MasterInformationBlock', mode=MODE_TYPE) _MasterInformationBlock_dl_Bandwidth = ENUM(name='dl-Bandwidth', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MasterInformationBlock_dl_Bandwidth._cont = ASN1Dict([('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]) _MasterInformationBlock_dl_Bandwidth._ext = None _MasterInformationBlock_phich_Config = SEQ(name='phich-Config', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PHICH-Config'))) _MasterInformationBlock_systemFrameNumber = BIT_STR(name='systemFrameNumber', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MasterInformationBlock_systemFrameNumber._const_sz = ASN1Set(rv=[8], rr=[], ev=None, er=[]) _MasterInformationBlock_spare = BIT_STR(name='spare', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MasterInformationBlock_spare._const_sz = ASN1Set(rv=[10], rr=[], ev=None, er=[]) MasterInformationBlock._cont = ASN1Dict([ ('dl-Bandwidth', _MasterInformationBlock_dl_Bandwidth), ('phich-Config', _MasterInformationBlock_phich_Config), ('systemFrameNumber', _MasterInformationBlock_systemFrameNumber), ('spare', _MasterInformationBlock_spare), ]) MasterInformationBlock._ext = None #-----< MeasurementReport >-----# MeasurementReport = SEQ(name='MeasurementReport', mode=MODE_TYPE) _MeasurementReport_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __MeasurementReport_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___MeasurementReport_criticalExtensions_c1_measurementReport_r8 = SEQ(name='measurementReport-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasurementReport-r8-IEs'))) ___MeasurementReport_criticalExtensions_c1_spare7 = NULL(name='spare7', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MeasurementReport_criticalExtensions_c1_spare6 = NULL(name='spare6', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MeasurementReport_criticalExtensions_c1_spare5 = NULL(name='spare5', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MeasurementReport_criticalExtensions_c1_spare4 = NULL(name='spare4', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MeasurementReport_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MeasurementReport_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MeasurementReport_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MeasurementReport_criticalExtensions_c1._cont = ASN1Dict([ ('measurementReport-r8', ___MeasurementReport_criticalExtensions_c1_measurementReport_r8), ('spare7', ___MeasurementReport_criticalExtensions_c1_spare7), ('spare6', ___MeasurementReport_criticalExtensions_c1_spare6), ('spare5', ___MeasurementReport_criticalExtensions_c1_spare5), ('spare4', ___MeasurementReport_criticalExtensions_c1_spare4), ('spare3', ___MeasurementReport_criticalExtensions_c1_spare3), ('spare2', ___MeasurementReport_criticalExtensions_c1_spare2), ('spare1', ___MeasurementReport_criticalExtensions_c1_spare1), ]) __MeasurementReport_criticalExtensions_c1._ext = None __MeasurementReport_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MeasurementReport_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __MeasurementReport_criticalExtensions_criticalExtensionsFuture._ext = None _MeasurementReport_criticalExtensions._cont = ASN1Dict([ ('c1', __MeasurementReport_criticalExtensions_c1), ('criticalExtensionsFuture', __MeasurementReport_criticalExtensions_criticalExtensionsFuture), ]) _MeasurementReport_criticalExtensions._ext = None MeasurementReport._cont = ASN1Dict([ ('criticalExtensions', _MeasurementReport_criticalExtensions), ]) MeasurementReport._ext = None #-----< MeasurementReport-r8-IEs >-----# MeasurementReport_r8_IEs = SEQ(name='MeasurementReport-r8-IEs', mode=MODE_TYPE) _MeasurementReport_r8_IEs_measResults = SEQ(name='measResults', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasResults'))) _MeasurementReport_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _MeasurementReport_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _MeasurementReport_r8_IEs_nonCriticalExtension._ext = None MeasurementReport_r8_IEs._cont = ASN1Dict([ ('measResults', _MeasurementReport_r8_IEs_measResults), ('nonCriticalExtension', _MeasurementReport_r8_IEs_nonCriticalExtension), ]) MeasurementReport_r8_IEs._ext = None #-----< MobilityFromEUTRACommand >-----# MobilityFromEUTRACommand = SEQ(name='MobilityFromEUTRACommand', mode=MODE_TYPE) _MobilityFromEUTRACommand_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _MobilityFromEUTRACommand_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __MobilityFromEUTRACommand_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___MobilityFromEUTRACommand_criticalExtensions_c1_mobilityFromEUTRACommand_r8 = SEQ(name='mobilityFromEUTRACommand-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MobilityFromEUTRACommand-r8-IEs'))) ___MobilityFromEUTRACommand_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MobilityFromEUTRACommand_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MobilityFromEUTRACommand_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MobilityFromEUTRACommand_criticalExtensions_c1._cont = ASN1Dict([ ('mobilityFromEUTRACommand-r8', ___MobilityFromEUTRACommand_criticalExtensions_c1_mobilityFromEUTRACommand_r8), ('spare3', ___MobilityFromEUTRACommand_criticalExtensions_c1_spare3), ('spare2', ___MobilityFromEUTRACommand_criticalExtensions_c1_spare2), ('spare1', ___MobilityFromEUTRACommand_criticalExtensions_c1_spare1), ]) __MobilityFromEUTRACommand_criticalExtensions_c1._ext = None __MobilityFromEUTRACommand_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MobilityFromEUTRACommand_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __MobilityFromEUTRACommand_criticalExtensions_criticalExtensionsFuture._ext = None _MobilityFromEUTRACommand_criticalExtensions._cont = ASN1Dict([ ('c1', __MobilityFromEUTRACommand_criticalExtensions_c1), ('criticalExtensionsFuture', __MobilityFromEUTRACommand_criticalExtensions_criticalExtensionsFuture), ]) _MobilityFromEUTRACommand_criticalExtensions._ext = None MobilityFromEUTRACommand._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _MobilityFromEUTRACommand_rrc_TransactionIdentifier), ('criticalExtensions', _MobilityFromEUTRACommand_criticalExtensions), ]) MobilityFromEUTRACommand._ext = None #-----< MobilityFromEUTRACommand-r8-IEs >-----# MobilityFromEUTRACommand_r8_IEs = SEQ(name='MobilityFromEUTRACommand-r8-IEs', mode=MODE_TYPE) _MobilityFromEUTRACommand_r8_IEs_cs_FallbackIndicator = BOOL(name='cs-FallbackIndicator', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MobilityFromEUTRACommand_r8_IEs_purpose = CHOICE(name='purpose', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __MobilityFromEUTRACommand_r8_IEs_purpose_handover = SEQ(name='handover', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Handover'))) __MobilityFromEUTRACommand_r8_IEs_purpose_cellChangeOrder = SEQ(name='cellChangeOrder', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellChangeOrder'))) _MobilityFromEUTRACommand_r8_IEs_purpose._cont = ASN1Dict([ ('handover', __MobilityFromEUTRACommand_r8_IEs_purpose_handover), ('cellChangeOrder', __MobilityFromEUTRACommand_r8_IEs_purpose_cellChangeOrder), ]) _MobilityFromEUTRACommand_r8_IEs_purpose._ext = None _MobilityFromEUTRACommand_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _MobilityFromEUTRACommand_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _MobilityFromEUTRACommand_r8_IEs_nonCriticalExtension._ext = None MobilityFromEUTRACommand_r8_IEs._cont = ASN1Dict([ ('cs-FallbackIndicator', _MobilityFromEUTRACommand_r8_IEs_cs_FallbackIndicator), ('purpose', _MobilityFromEUTRACommand_r8_IEs_purpose), ('nonCriticalExtension', _MobilityFromEUTRACommand_r8_IEs_nonCriticalExtension), ]) MobilityFromEUTRACommand_r8_IEs._ext = None #-----< Handover >-----# Handover = SEQ(name='Handover', mode=MODE_TYPE) _Handover_targetRAT_Type = ENUM(name='targetRAT-Type', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _Handover_targetRAT_Type._cont = ASN1Dict([('utra', 0), ('geran', 1), ('cdma2000-1XRTT', 2), ('cdma2000-HRPD', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]) _Handover_targetRAT_Type._ext = [] _Handover_targetRAT_MessageContainer = OCT_STR(name='targetRAT-MessageContainer', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _Handover_nas_SecurityParamFromEUTRA = OCT_STR(name='nas-SecurityParamFromEUTRA', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _Handover_nas_SecurityParamFromEUTRA._const_sz = ASN1Set(rv=[1], rr=[], ev=None, er=[]) _Handover_systemInformation = CHOICE(name='systemInformation', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SI-OrPSI-GERAN')), opt=True) Handover._cont = ASN1Dict([ ('targetRAT-Type', _Handover_targetRAT_Type), ('targetRAT-MessageContainer', _Handover_targetRAT_MessageContainer), ('nas-SecurityParamFromEUTRA', _Handover_nas_SecurityParamFromEUTRA), ('systemInformation', _Handover_systemInformation), ]) Handover._ext = None #-----< CellChangeOrder >-----# CellChangeOrder = SEQ(name='CellChangeOrder', mode=MODE_TYPE) _CellChangeOrder_t304 = ENUM(name='t304', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CellChangeOrder_t304._cont = ASN1Dict([('ms100', 0), ('ms200', 1), ('ms500', 2), ('ms1000', 3), ('ms2000', 4), ('ms4000', 5), ('ms8000', 6), ('spare1', 7)]) _CellChangeOrder_t304._ext = None _CellChangeOrder_targetRAT_Type = CHOICE(name='targetRAT-Type', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __CellChangeOrder_targetRAT_Type_geran = SEQ(name='geran', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___CellChangeOrder_targetRAT_Type_geran_physCellId = SEQ(name='physCellId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdGERAN'))) ___CellChangeOrder_targetRAT_Type_geran_carrierFreq = SEQ(name='carrierFreq', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqGERAN'))) ___CellChangeOrder_targetRAT_Type_geran_networkControlOrder = BIT_STR(name='networkControlOrder', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) ___CellChangeOrder_targetRAT_Type_geran_networkControlOrder._const_sz = ASN1Set(rv=[2], rr=[], ev=None, er=[]) ___CellChangeOrder_targetRAT_Type_geran_systemInformation = CHOICE(name='systemInformation', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SI-OrPSI-GERAN')), opt=True) __CellChangeOrder_targetRAT_Type_geran._cont = ASN1Dict([ ('physCellId', ___CellChangeOrder_targetRAT_Type_geran_physCellId), ('carrierFreq', ___CellChangeOrder_targetRAT_Type_geran_carrierFreq), ('networkControlOrder', ___CellChangeOrder_targetRAT_Type_geran_networkControlOrder), ('systemInformation', ___CellChangeOrder_targetRAT_Type_geran_systemInformation), ]) __CellChangeOrder_targetRAT_Type_geran._ext = None _CellChangeOrder_targetRAT_Type._cont = ASN1Dict([ ('geran', __CellChangeOrder_targetRAT_Type_geran), ]) _CellChangeOrder_targetRAT_Type._ext = [] CellChangeOrder._cont = ASN1Dict([ ('t304', _CellChangeOrder_t304), ('targetRAT-Type', _CellChangeOrder_targetRAT_Type), ]) CellChangeOrder._ext = None #-----< SI-OrPSI-GERAN >-----# SI_OrPSI_GERAN = CHOICE(name='SI-OrPSI-GERAN', mode=MODE_TYPE) _SI_OrPSI_GERAN_si = SEQ_OF(name='si', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInfoListGERAN'))) _SI_OrPSI_GERAN_psi = SEQ_OF(name='psi', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInfoListGERAN'))) SI_OrPSI_GERAN._cont = ASN1Dict([ ('si', _SI_OrPSI_GERAN_si), ('psi', _SI_OrPSI_GERAN_psi), ]) SI_OrPSI_GERAN._ext = None #-----< SystemInfoListGERAN >-----# SystemInfoListGERAN = SEQ_OF(name='SystemInfoListGERAN', mode=MODE_TYPE) _SystemInfoListGERAN__item_ = OCT_STR(name='_item_', mode=MODE_TYPE) _SystemInfoListGERAN__item_._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=23)], ev=None, er=[]) SystemInfoListGERAN._cont = _SystemInfoListGERAN__item_ SystemInfoListGERAN._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=10)], ev=None, er=[]) #-----< Paging >-----# Paging = SEQ(name='Paging', mode=MODE_TYPE) _Paging_pagingRecordList = SEQ_OF(name='pagingRecordList', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PagingRecordList')), opt=True) _Paging_systemInfoModification = ENUM(name='systemInfoModification', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _Paging_systemInfoModification._cont = ASN1Dict([('true', 0)]) _Paging_systemInfoModification._ext = None _Paging_etws_Indication = ENUM(name='etws-Indication', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _Paging_etws_Indication._cont = ASN1Dict([('true', 0)]) _Paging_etws_Indication._ext = None _Paging_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _Paging_nonCriticalExtension._cont = ASN1Dict([ ]) _Paging_nonCriticalExtension._ext = None Paging._cont = ASN1Dict([ ('pagingRecordList', _Paging_pagingRecordList), ('systemInfoModification', _Paging_systemInfoModification), ('etws-Indication', _Paging_etws_Indication), ('nonCriticalExtension', _Paging_nonCriticalExtension), ]) Paging._ext = None #-----< PagingRecordList >-----# PagingRecordList = SEQ_OF(name='PagingRecordList', mode=MODE_TYPE) _PagingRecordList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PagingRecord'))) PagingRecordList._cont = _PagingRecordList__item_ PagingRecordList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< PagingRecord >-----# PagingRecord = SEQ(name='PagingRecord', mode=MODE_TYPE) _PagingRecord_ue_Identity = CHOICE(name='ue-Identity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PagingUE-Identity'))) _PagingRecord_cn_Domain = ENUM(name='cn-Domain', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PagingRecord_cn_Domain._cont = ASN1Dict([('ps', 0), ('cs', 1)]) _PagingRecord_cn_Domain._ext = None PagingRecord._cont = ASN1Dict([ ('ue-Identity', _PagingRecord_ue_Identity), ('cn-Domain', _PagingRecord_cn_Domain), ]) PagingRecord._ext = [] #-----< PagingUE-Identity >-----# PagingUE_Identity = CHOICE(name='PagingUE-Identity', mode=MODE_TYPE) _PagingUE_Identity_s_TMSI = SEQ(name='s-TMSI', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'S-TMSI'))) _PagingUE_Identity_imsi = SEQ_OF(name='imsi', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IMSI'))) PagingUE_Identity._cont = ASN1Dict([ ('s-TMSI', _PagingUE_Identity_s_TMSI), ('imsi', _PagingUE_Identity_imsi), ]) PagingUE_Identity._ext = [] #-----< IMSI >-----# IMSI = SEQ_OF(name='IMSI', mode=MODE_TYPE) _IMSI__item_ = INT(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IMSI-Digit'))) IMSI._cont = _IMSI__item_ IMSI._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=6, ub=21)], ev=None, er=[]) #-----< IMSI-Digit >-----# IMSI_Digit = INT(name='IMSI-Digit', mode=MODE_TYPE) IMSI_Digit._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=9)], ev=None, er=[]) #-----< RRCConnectionReconfiguration >-----# RRCConnectionReconfiguration = SEQ(name='RRCConnectionReconfiguration', mode=MODE_TYPE) _RRCConnectionReconfiguration_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _RRCConnectionReconfiguration_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __RRCConnectionReconfiguration_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___RRCConnectionReconfiguration_criticalExtensions_c1_rrcConnectionReconfiguration_r8 = SEQ(name='rrcConnectionReconfiguration-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReconfiguration-r8-IEs'))) ___RRCConnectionReconfiguration_criticalExtensions_c1_spare7 = NULL(name='spare7', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReconfiguration_criticalExtensions_c1_spare6 = NULL(name='spare6', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReconfiguration_criticalExtensions_c1_spare5 = NULL(name='spare5', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReconfiguration_criticalExtensions_c1_spare4 = NULL(name='spare4', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReconfiguration_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReconfiguration_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReconfiguration_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionReconfiguration_criticalExtensions_c1._cont = ASN1Dict([ ('rrcConnectionReconfiguration-r8', ___RRCConnectionReconfiguration_criticalExtensions_c1_rrcConnectionReconfiguration_r8), ('spare7', ___RRCConnectionReconfiguration_criticalExtensions_c1_spare7), ('spare6', ___RRCConnectionReconfiguration_criticalExtensions_c1_spare6), ('spare5', ___RRCConnectionReconfiguration_criticalExtensions_c1_spare5), ('spare4', ___RRCConnectionReconfiguration_criticalExtensions_c1_spare4), ('spare3', ___RRCConnectionReconfiguration_criticalExtensions_c1_spare3), ('spare2', ___RRCConnectionReconfiguration_criticalExtensions_c1_spare2), ('spare1', ___RRCConnectionReconfiguration_criticalExtensions_c1_spare1), ]) __RRCConnectionReconfiguration_criticalExtensions_c1._ext = None __RRCConnectionReconfiguration_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionReconfiguration_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __RRCConnectionReconfiguration_criticalExtensions_criticalExtensionsFuture._ext = None _RRCConnectionReconfiguration_criticalExtensions._cont = ASN1Dict([ ('c1', __RRCConnectionReconfiguration_criticalExtensions_c1), ('criticalExtensionsFuture', __RRCConnectionReconfiguration_criticalExtensions_criticalExtensionsFuture), ]) _RRCConnectionReconfiguration_criticalExtensions._ext = None RRCConnectionReconfiguration._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _RRCConnectionReconfiguration_rrc_TransactionIdentifier), ('criticalExtensions', _RRCConnectionReconfiguration_criticalExtensions), ]) RRCConnectionReconfiguration._ext = None #-----< RRCConnectionReconfiguration-r8-IEs >-----# RRCConnectionReconfiguration_r8_IEs = SEQ(name='RRCConnectionReconfiguration-r8-IEs', mode=MODE_TYPE) _RRCConnectionReconfiguration_r8_IEs_measConfig = SEQ(name='measConfig', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasConfig')), opt=True) _RRCConnectionReconfiguration_r8_IEs_mobilityControlInfo = SEQ(name='mobilityControlInfo', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MobilityControlInfo')), opt=True) _RRCConnectionReconfiguration_r8_IEs_dedicatedInfoNASList = SEQ_OF(name='dedicatedInfoNASList', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __RRCConnectionReconfiguration_r8_IEs_dedicatedInfoNASList__item_ = OCT_STR(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DedicatedInfoNAS'))) _RRCConnectionReconfiguration_r8_IEs_dedicatedInfoNASList._cont = __RRCConnectionReconfiguration_r8_IEs_dedicatedInfoNASList__item_ _RRCConnectionReconfiguration_r8_IEs_dedicatedInfoNASList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=11)], ev=None, er=[]) _RRCConnectionReconfiguration_r8_IEs_radioResourceConfigDedicated = SEQ(name='radioResourceConfigDedicated', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RadioResourceConfigDedicated')), opt=True) _RRCConnectionReconfiguration_r8_IEs_securityConfigHO = SEQ(name='securityConfigHO', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecurityConfigHO')), opt=True) _RRCConnectionReconfiguration_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _RRCConnectionReconfiguration_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _RRCConnectionReconfiguration_r8_IEs_nonCriticalExtension._ext = None RRCConnectionReconfiguration_r8_IEs._cont = ASN1Dict([ ('measConfig', _RRCConnectionReconfiguration_r8_IEs_measConfig), ('mobilityControlInfo', _RRCConnectionReconfiguration_r8_IEs_mobilityControlInfo), ('dedicatedInfoNASList', _RRCConnectionReconfiguration_r8_IEs_dedicatedInfoNASList), ('radioResourceConfigDedicated', _RRCConnectionReconfiguration_r8_IEs_radioResourceConfigDedicated), ('securityConfigHO', _RRCConnectionReconfiguration_r8_IEs_securityConfigHO), ('nonCriticalExtension', _RRCConnectionReconfiguration_r8_IEs_nonCriticalExtension), ]) RRCConnectionReconfiguration_r8_IEs._ext = None #-----< SecurityConfigHO >-----# SecurityConfigHO = SEQ(name='SecurityConfigHO', mode=MODE_TYPE) _SecurityConfigHO_handoverType = CHOICE(name='handoverType', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __SecurityConfigHO_handoverType_intraLTE = SEQ(name='intraLTE', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___SecurityConfigHO_handoverType_intraLTE_securityAlgorithmConfig = SEQ(name='securityAlgorithmConfig', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecurityAlgorithmConfig')), opt=True) ___SecurityConfigHO_handoverType_intraLTE_keyChangeIndicator = BOOL(name='keyChangeIndicator', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___SecurityConfigHO_handoverType_intraLTE_nextHopChainingCount = INT(name='nextHopChainingCount', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'NextHopChainingCount'))) __SecurityConfigHO_handoverType_intraLTE._cont = ASN1Dict([ ('securityAlgorithmConfig', ___SecurityConfigHO_handoverType_intraLTE_securityAlgorithmConfig), ('keyChangeIndicator', ___SecurityConfigHO_handoverType_intraLTE_keyChangeIndicator), ('nextHopChainingCount', ___SecurityConfigHO_handoverType_intraLTE_nextHopChainingCount), ]) __SecurityConfigHO_handoverType_intraLTE._ext = None __SecurityConfigHO_handoverType_interRAT = SEQ(name='interRAT', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___SecurityConfigHO_handoverType_interRAT_securityAlgorithmConfig = SEQ(name='securityAlgorithmConfig', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecurityAlgorithmConfig'))) ___SecurityConfigHO_handoverType_interRAT_nas_SecurityParamToEUTRA = OCT_STR(name='nas-SecurityParamToEUTRA', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___SecurityConfigHO_handoverType_interRAT_nas_SecurityParamToEUTRA._const_sz = ASN1Set(rv=[6], rr=[], ev=None, er=[]) __SecurityConfigHO_handoverType_interRAT._cont = ASN1Dict([ ('securityAlgorithmConfig', ___SecurityConfigHO_handoverType_interRAT_securityAlgorithmConfig), ('nas-SecurityParamToEUTRA', ___SecurityConfigHO_handoverType_interRAT_nas_SecurityParamToEUTRA), ]) __SecurityConfigHO_handoverType_interRAT._ext = None _SecurityConfigHO_handoverType._cont = ASN1Dict([ ('intraLTE', __SecurityConfigHO_handoverType_intraLTE), ('interRAT', __SecurityConfigHO_handoverType_interRAT), ]) _SecurityConfigHO_handoverType._ext = None SecurityConfigHO._cont = ASN1Dict([ ('handoverType', _SecurityConfigHO_handoverType), ]) SecurityConfigHO._ext = [] #-----< RRCConnectionReconfigurationComplete >-----# RRCConnectionReconfigurationComplete = SEQ(name='RRCConnectionReconfigurationComplete', mode=MODE_TYPE) _RRCConnectionReconfigurationComplete_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _RRCConnectionReconfigurationComplete_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __RRCConnectionReconfigurationComplete_criticalExtensions_rrcConnectionReconfigurationComplete_r8 = SEQ(name='rrcConnectionReconfigurationComplete-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReconfigurationComplete-r8-IEs'))) __RRCConnectionReconfigurationComplete_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionReconfigurationComplete_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __RRCConnectionReconfigurationComplete_criticalExtensions_criticalExtensionsFuture._ext = None _RRCConnectionReconfigurationComplete_criticalExtensions._cont = ASN1Dict([ ('rrcConnectionReconfigurationComplete-r8', __RRCConnectionReconfigurationComplete_criticalExtensions_rrcConnectionReconfigurationComplete_r8), ('criticalExtensionsFuture', __RRCConnectionReconfigurationComplete_criticalExtensions_criticalExtensionsFuture), ]) _RRCConnectionReconfigurationComplete_criticalExtensions._ext = None RRCConnectionReconfigurationComplete._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _RRCConnectionReconfigurationComplete_rrc_TransactionIdentifier), ('criticalExtensions', _RRCConnectionReconfigurationComplete_criticalExtensions), ]) RRCConnectionReconfigurationComplete._ext = None #-----< RRCConnectionReconfigurationComplete-r8-IEs >-----# RRCConnectionReconfigurationComplete_r8_IEs = SEQ(name='RRCConnectionReconfigurationComplete-r8-IEs', mode=MODE_TYPE) _RRCConnectionReconfigurationComplete_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _RRCConnectionReconfigurationComplete_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _RRCConnectionReconfigurationComplete_r8_IEs_nonCriticalExtension._ext = None RRCConnectionReconfigurationComplete_r8_IEs._cont = ASN1Dict([ ('nonCriticalExtension', _RRCConnectionReconfigurationComplete_r8_IEs_nonCriticalExtension), ]) RRCConnectionReconfigurationComplete_r8_IEs._ext = None #-----< RRCConnectionReestablishment >-----# RRCConnectionReestablishment = SEQ(name='RRCConnectionReestablishment', mode=MODE_TYPE) _RRCConnectionReestablishment_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _RRCConnectionReestablishment_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __RRCConnectionReestablishment_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___RRCConnectionReestablishment_criticalExtensions_c1_rrcConnectionReestablishment_r8 = SEQ(name='rrcConnectionReestablishment-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReestablishment-r8-IEs'))) ___RRCConnectionReestablishment_criticalExtensions_c1_spare7 = NULL(name='spare7', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReestablishment_criticalExtensions_c1_spare6 = NULL(name='spare6', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReestablishment_criticalExtensions_c1_spare5 = NULL(name='spare5', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReestablishment_criticalExtensions_c1_spare4 = NULL(name='spare4', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReestablishment_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReestablishment_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReestablishment_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionReestablishment_criticalExtensions_c1._cont = ASN1Dict([ ('rrcConnectionReestablishment-r8', ___RRCConnectionReestablishment_criticalExtensions_c1_rrcConnectionReestablishment_r8), ('spare7', ___RRCConnectionReestablishment_criticalExtensions_c1_spare7), ('spare6', ___RRCConnectionReestablishment_criticalExtensions_c1_spare6), ('spare5', ___RRCConnectionReestablishment_criticalExtensions_c1_spare5), ('spare4', ___RRCConnectionReestablishment_criticalExtensions_c1_spare4), ('spare3', ___RRCConnectionReestablishment_criticalExtensions_c1_spare3), ('spare2', ___RRCConnectionReestablishment_criticalExtensions_c1_spare2), ('spare1', ___RRCConnectionReestablishment_criticalExtensions_c1_spare1), ]) __RRCConnectionReestablishment_criticalExtensions_c1._ext = None __RRCConnectionReestablishment_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionReestablishment_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __RRCConnectionReestablishment_criticalExtensions_criticalExtensionsFuture._ext = None _RRCConnectionReestablishment_criticalExtensions._cont = ASN1Dict([ ('c1', __RRCConnectionReestablishment_criticalExtensions_c1), ('criticalExtensionsFuture', __RRCConnectionReestablishment_criticalExtensions_criticalExtensionsFuture), ]) _RRCConnectionReestablishment_criticalExtensions._ext = None RRCConnectionReestablishment._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _RRCConnectionReestablishment_rrc_TransactionIdentifier), ('criticalExtensions', _RRCConnectionReestablishment_criticalExtensions), ]) RRCConnectionReestablishment._ext = None #-----< RRCConnectionReestablishment-r8-IEs >-----# RRCConnectionReestablishment_r8_IEs = SEQ(name='RRCConnectionReestablishment-r8-IEs', mode=MODE_TYPE) _RRCConnectionReestablishment_r8_IEs_radioResourceConfigDedicated = SEQ(name='radioResourceConfigDedicated', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RadioResourceConfigDedicated'))) _RRCConnectionReestablishment_r8_IEs_nextHopChainingCount = INT(name='nextHopChainingCount', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'NextHopChainingCount'))) _RRCConnectionReestablishment_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _RRCConnectionReestablishment_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _RRCConnectionReestablishment_r8_IEs_nonCriticalExtension._ext = None RRCConnectionReestablishment_r8_IEs._cont = ASN1Dict([ ('radioResourceConfigDedicated', _RRCConnectionReestablishment_r8_IEs_radioResourceConfigDedicated), ('nextHopChainingCount', _RRCConnectionReestablishment_r8_IEs_nextHopChainingCount), ('nonCriticalExtension', _RRCConnectionReestablishment_r8_IEs_nonCriticalExtension), ]) RRCConnectionReestablishment_r8_IEs._ext = None #-----< RRCConnectionReestablishmentComplete >-----# RRCConnectionReestablishmentComplete = SEQ(name='RRCConnectionReestablishmentComplete', mode=MODE_TYPE) _RRCConnectionReestablishmentComplete_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _RRCConnectionReestablishmentComplete_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __RRCConnectionReestablishmentComplete_criticalExtensions_rrcConnectionReestablishmentComplete_r8 = SEQ(name='rrcConnectionReestablishmentComplete-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReestablishmentComplete-r8-IEs'))) __RRCConnectionReestablishmentComplete_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionReestablishmentComplete_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __RRCConnectionReestablishmentComplete_criticalExtensions_criticalExtensionsFuture._ext = None _RRCConnectionReestablishmentComplete_criticalExtensions._cont = ASN1Dict([ ('rrcConnectionReestablishmentComplete-r8', __RRCConnectionReestablishmentComplete_criticalExtensions_rrcConnectionReestablishmentComplete_r8), ('criticalExtensionsFuture', __RRCConnectionReestablishmentComplete_criticalExtensions_criticalExtensionsFuture), ]) _RRCConnectionReestablishmentComplete_criticalExtensions._ext = None RRCConnectionReestablishmentComplete._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _RRCConnectionReestablishmentComplete_rrc_TransactionIdentifier), ('criticalExtensions', _RRCConnectionReestablishmentComplete_criticalExtensions), ]) RRCConnectionReestablishmentComplete._ext = None #-----< RRCConnectionReestablishmentComplete-r8-IEs >-----# RRCConnectionReestablishmentComplete_r8_IEs = SEQ(name='RRCConnectionReestablishmentComplete-r8-IEs', mode=MODE_TYPE) _RRCConnectionReestablishmentComplete_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _RRCConnectionReestablishmentComplete_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _RRCConnectionReestablishmentComplete_r8_IEs_nonCriticalExtension._ext = None RRCConnectionReestablishmentComplete_r8_IEs._cont = ASN1Dict([ ('nonCriticalExtension', _RRCConnectionReestablishmentComplete_r8_IEs_nonCriticalExtension), ]) RRCConnectionReestablishmentComplete_r8_IEs._ext = None #-----< RRCConnectionReestablishmentReject >-----# RRCConnectionReestablishmentReject = SEQ(name='RRCConnectionReestablishmentReject', mode=MODE_TYPE) _RRCConnectionReestablishmentReject_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __RRCConnectionReestablishmentReject_criticalExtensions_rrcConnectionReestablishmentReject_r8 = SEQ(name='rrcConnectionReestablishmentReject-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReestablishmentReject-r8-IEs'))) __RRCConnectionReestablishmentReject_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionReestablishmentReject_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __RRCConnectionReestablishmentReject_criticalExtensions_criticalExtensionsFuture._ext = None _RRCConnectionReestablishmentReject_criticalExtensions._cont = ASN1Dict([ ('rrcConnectionReestablishmentReject-r8', __RRCConnectionReestablishmentReject_criticalExtensions_rrcConnectionReestablishmentReject_r8), ('criticalExtensionsFuture', __RRCConnectionReestablishmentReject_criticalExtensions_criticalExtensionsFuture), ]) _RRCConnectionReestablishmentReject_criticalExtensions._ext = None RRCConnectionReestablishmentReject._cont = ASN1Dict([ ('criticalExtensions', _RRCConnectionReestablishmentReject_criticalExtensions), ]) RRCConnectionReestablishmentReject._ext = None #-----< RRCConnectionReestablishmentReject-r8-IEs >-----# RRCConnectionReestablishmentReject_r8_IEs = SEQ(name='RRCConnectionReestablishmentReject-r8-IEs', mode=MODE_TYPE) _RRCConnectionReestablishmentReject_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _RRCConnectionReestablishmentReject_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _RRCConnectionReestablishmentReject_r8_IEs_nonCriticalExtension._ext = None RRCConnectionReestablishmentReject_r8_IEs._cont = ASN1Dict([ ('nonCriticalExtension', _RRCConnectionReestablishmentReject_r8_IEs_nonCriticalExtension), ]) RRCConnectionReestablishmentReject_r8_IEs._ext = None #-----< RRCConnectionReestablishmentRequest >-----# RRCConnectionReestablishmentRequest = SEQ(name='RRCConnectionReestablishmentRequest', mode=MODE_TYPE) _RRCConnectionReestablishmentRequest_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __RRCConnectionReestablishmentRequest_criticalExtensions_rrcConnectionReestablishmentRequest_r8 = SEQ(name='rrcConnectionReestablishmentRequest-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReestablishmentRequest-r8-IEs'))) __RRCConnectionReestablishmentRequest_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionReestablishmentRequest_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __RRCConnectionReestablishmentRequest_criticalExtensions_criticalExtensionsFuture._ext = None _RRCConnectionReestablishmentRequest_criticalExtensions._cont = ASN1Dict([ ('rrcConnectionReestablishmentRequest-r8', __RRCConnectionReestablishmentRequest_criticalExtensions_rrcConnectionReestablishmentRequest_r8), ('criticalExtensionsFuture', __RRCConnectionReestablishmentRequest_criticalExtensions_criticalExtensionsFuture), ]) _RRCConnectionReestablishmentRequest_criticalExtensions._ext = None RRCConnectionReestablishmentRequest._cont = ASN1Dict([ ('criticalExtensions', _RRCConnectionReestablishmentRequest_criticalExtensions), ]) RRCConnectionReestablishmentRequest._ext = None #-----< RRCConnectionReestablishmentRequest-r8-IEs >-----# RRCConnectionReestablishmentRequest_r8_IEs = SEQ(name='RRCConnectionReestablishmentRequest-r8-IEs', mode=MODE_TYPE) _RRCConnectionReestablishmentRequest_r8_IEs_ue_Identity = SEQ(name='ue-Identity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReestabUE-Identity'))) _RRCConnectionReestablishmentRequest_r8_IEs_reestablishmentCause = ENUM(name='reestablishmentCause', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReestablishmentCause'))) _RRCConnectionReestablishmentRequest_r8_IEs_spare = BIT_STR(name='spare', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _RRCConnectionReestablishmentRequest_r8_IEs_spare._const_sz = ASN1Set(rv=[2], rr=[], ev=None, er=[]) RRCConnectionReestablishmentRequest_r8_IEs._cont = ASN1Dict([ ('ue-Identity', _RRCConnectionReestablishmentRequest_r8_IEs_ue_Identity), ('reestablishmentCause', _RRCConnectionReestablishmentRequest_r8_IEs_reestablishmentCause), ('spare', _RRCConnectionReestablishmentRequest_r8_IEs_spare), ]) RRCConnectionReestablishmentRequest_r8_IEs._ext = None #-----< ReestabUE-Identity >-----# ReestabUE_Identity = SEQ(name='ReestabUE-Identity', mode=MODE_TYPE) _ReestabUE_Identity_c_RNTI = BIT_STR(name='c-RNTI', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'C-RNTI'))) _ReestabUE_Identity_physCellId = INT(name='physCellId', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellId'))) _ReestabUE_Identity_shortMAC_I = BIT_STR(name='shortMAC-I', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ShortMAC-I'))) ReestabUE_Identity._cont = ASN1Dict([ ('c-RNTI', _ReestabUE_Identity_c_RNTI), ('physCellId', _ReestabUE_Identity_physCellId), ('shortMAC-I', _ReestabUE_Identity_shortMAC_I), ]) ReestabUE_Identity._ext = None #-----< ReestablishmentCause >-----# ReestablishmentCause = ENUM(name='ReestablishmentCause', mode=MODE_TYPE) ReestablishmentCause._cont = ASN1Dict([('reconfigurationFailure', 0), ('handoverFailure', 1), ('otherFailure', 2), ('spare1', 3)]) ReestablishmentCause._ext = None #-----< RRCConnectionReject >-----# RRCConnectionReject = SEQ(name='RRCConnectionReject', mode=MODE_TYPE) _RRCConnectionReject_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __RRCConnectionReject_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___RRCConnectionReject_criticalExtensions_c1_rrcConnectionReject_r8 = SEQ(name='rrcConnectionReject-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionReject-r8-IEs'))) ___RRCConnectionReject_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReject_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionReject_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionReject_criticalExtensions_c1._cont = ASN1Dict([ ('rrcConnectionReject-r8', ___RRCConnectionReject_criticalExtensions_c1_rrcConnectionReject_r8), ('spare3', ___RRCConnectionReject_criticalExtensions_c1_spare3), ('spare2', ___RRCConnectionReject_criticalExtensions_c1_spare2), ('spare1', ___RRCConnectionReject_criticalExtensions_c1_spare1), ]) __RRCConnectionReject_criticalExtensions_c1._ext = None __RRCConnectionReject_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionReject_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __RRCConnectionReject_criticalExtensions_criticalExtensionsFuture._ext = None _RRCConnectionReject_criticalExtensions._cont = ASN1Dict([ ('c1', __RRCConnectionReject_criticalExtensions_c1), ('criticalExtensionsFuture', __RRCConnectionReject_criticalExtensions_criticalExtensionsFuture), ]) _RRCConnectionReject_criticalExtensions._ext = None RRCConnectionReject._cont = ASN1Dict([ ('criticalExtensions', _RRCConnectionReject_criticalExtensions), ]) RRCConnectionReject._ext = None #-----< RRCConnectionReject-r8-IEs >-----# RRCConnectionReject_r8_IEs = SEQ(name='RRCConnectionReject-r8-IEs', mode=MODE_TYPE) _RRCConnectionReject_r8_IEs_waitTime = INT(name='waitTime', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _RRCConnectionReject_r8_IEs_waitTime._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) _RRCConnectionReject_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _RRCConnectionReject_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _RRCConnectionReject_r8_IEs_nonCriticalExtension._ext = None RRCConnectionReject_r8_IEs._cont = ASN1Dict([ ('waitTime', _RRCConnectionReject_r8_IEs_waitTime), ('nonCriticalExtension', _RRCConnectionReject_r8_IEs_nonCriticalExtension), ]) RRCConnectionReject_r8_IEs._ext = None #-----< RRCConnectionRelease >-----# RRCConnectionRelease = SEQ(name='RRCConnectionRelease', mode=MODE_TYPE) _RRCConnectionRelease_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _RRCConnectionRelease_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __RRCConnectionRelease_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___RRCConnectionRelease_criticalExtensions_c1_rrcConnectionRelease_r8 = SEQ(name='rrcConnectionRelease-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionRelease-r8-IEs'))) ___RRCConnectionRelease_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionRelease_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionRelease_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionRelease_criticalExtensions_c1._cont = ASN1Dict([ ('rrcConnectionRelease-r8', ___RRCConnectionRelease_criticalExtensions_c1_rrcConnectionRelease_r8), ('spare3', ___RRCConnectionRelease_criticalExtensions_c1_spare3), ('spare2', ___RRCConnectionRelease_criticalExtensions_c1_spare2), ('spare1', ___RRCConnectionRelease_criticalExtensions_c1_spare1), ]) __RRCConnectionRelease_criticalExtensions_c1._ext = None __RRCConnectionRelease_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionRelease_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __RRCConnectionRelease_criticalExtensions_criticalExtensionsFuture._ext = None _RRCConnectionRelease_criticalExtensions._cont = ASN1Dict([ ('c1', __RRCConnectionRelease_criticalExtensions_c1), ('criticalExtensionsFuture', __RRCConnectionRelease_criticalExtensions_criticalExtensionsFuture), ]) _RRCConnectionRelease_criticalExtensions._ext = None RRCConnectionRelease._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _RRCConnectionRelease_rrc_TransactionIdentifier), ('criticalExtensions', _RRCConnectionRelease_criticalExtensions), ]) RRCConnectionRelease._ext = None #-----< RRCConnectionRelease-r8-IEs >-----# RRCConnectionRelease_r8_IEs = SEQ(name='RRCConnectionRelease-r8-IEs', mode=MODE_TYPE) _RRCConnectionRelease_r8_IEs_releaseCause = ENUM(name='releaseCause', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReleaseCause'))) _RRCConnectionRelease_r8_IEs_redirectedCarrierInfo = CHOICE(name='redirectedCarrierInfo', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RedirectedCarrierInfo')), opt=True) _RRCConnectionRelease_r8_IEs_idleModeMobilityControlInfo = SEQ(name='idleModeMobilityControlInfo', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IdleModeMobilityControlInfo')), opt=True) _RRCConnectionRelease_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _RRCConnectionRelease_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _RRCConnectionRelease_r8_IEs_nonCriticalExtension._ext = None RRCConnectionRelease_r8_IEs._cont = ASN1Dict([ ('releaseCause', _RRCConnectionRelease_r8_IEs_releaseCause), ('redirectedCarrierInfo', _RRCConnectionRelease_r8_IEs_redirectedCarrierInfo), ('idleModeMobilityControlInfo', _RRCConnectionRelease_r8_IEs_idleModeMobilityControlInfo), ('nonCriticalExtension', _RRCConnectionRelease_r8_IEs_nonCriticalExtension), ]) RRCConnectionRelease_r8_IEs._ext = None #-----< ReleaseCause >-----# ReleaseCause = ENUM(name='ReleaseCause', mode=MODE_TYPE) ReleaseCause._cont = ASN1Dict([('loadBalancingTAUrequired', 0), ('other', 1), ('spare2', 2), ('spare1', 3)]) ReleaseCause._ext = None #-----< RedirectedCarrierInfo >-----# RedirectedCarrierInfo = CHOICE(name='RedirectedCarrierInfo', mode=MODE_TYPE) _RedirectedCarrierInfo_eutra = INT(name='eutra', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueEUTRA'))) _RedirectedCarrierInfo_geran = SEQ(name='geran', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqsGERAN'))) _RedirectedCarrierInfo_utra_FDD = INT(name='utra-FDD', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueUTRA'))) _RedirectedCarrierInfo_utra_TDD = INT(name='utra-TDD', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueUTRA'))) _RedirectedCarrierInfo_cdma2000_HRPD = SEQ(name='cdma2000-HRPD', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqCDMA2000'))) _RedirectedCarrierInfo_cdma2000_1xRTT = SEQ(name='cdma2000-1xRTT', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqCDMA2000'))) RedirectedCarrierInfo._cont = ASN1Dict([ ('eutra', _RedirectedCarrierInfo_eutra), ('geran', _RedirectedCarrierInfo_geran), ('utra-FDD', _RedirectedCarrierInfo_utra_FDD), ('utra-TDD', _RedirectedCarrierInfo_utra_TDD), ('cdma2000-HRPD', _RedirectedCarrierInfo_cdma2000_HRPD), ('cdma2000-1xRTT', _RedirectedCarrierInfo_cdma2000_1xRTT), ]) RedirectedCarrierInfo._ext = [] #-----< IdleModeMobilityControlInfo >-----# IdleModeMobilityControlInfo = SEQ(name='IdleModeMobilityControlInfo', mode=MODE_TYPE) _IdleModeMobilityControlInfo_freqPriorityListEUTRA = SEQ_OF(name='freqPriorityListEUTRA', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FreqPriorityListEUTRA')), opt=True) _IdleModeMobilityControlInfo_freqPriorityListGERAN = SEQ_OF(name='freqPriorityListGERAN', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FreqsPriorityListGERAN')), opt=True) _IdleModeMobilityControlInfo_freqPriorityListUTRA_FDD = SEQ_OF(name='freqPriorityListUTRA-FDD', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FreqPriorityListUTRA-FDD')), opt=True) _IdleModeMobilityControlInfo_freqPriorityListUTRA_TDD = SEQ_OF(name='freqPriorityListUTRA-TDD', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FreqPriorityListUTRA-TDD')), opt=True) _IdleModeMobilityControlInfo_bandClassPriorityListHRPD = SEQ_OF(name='bandClassPriorityListHRPD', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandClassPriorityListHRPD')), opt=True) _IdleModeMobilityControlInfo_bandClassPriorityList1XRTT = SEQ_OF(name='bandClassPriorityList1XRTT', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandClassPriorityList1XRTT')), opt=True) _IdleModeMobilityControlInfo_t320 = ENUM(name='t320', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _IdleModeMobilityControlInfo_t320._cont = ASN1Dict([('min5', 0), ('min10', 1), ('min20', 2), ('min30', 3), ('min60', 4), ('min120', 5), ('min180', 6), ('spare1', 7)]) _IdleModeMobilityControlInfo_t320._ext = None IdleModeMobilityControlInfo._cont = ASN1Dict([ ('freqPriorityListEUTRA', _IdleModeMobilityControlInfo_freqPriorityListEUTRA), ('freqPriorityListGERAN', _IdleModeMobilityControlInfo_freqPriorityListGERAN), ('freqPriorityListUTRA-FDD', _IdleModeMobilityControlInfo_freqPriorityListUTRA_FDD), ('freqPriorityListUTRA-TDD', _IdleModeMobilityControlInfo_freqPriorityListUTRA_TDD), ('bandClassPriorityListHRPD', _IdleModeMobilityControlInfo_bandClassPriorityListHRPD), ('bandClassPriorityList1XRTT', _IdleModeMobilityControlInfo_bandClassPriorityList1XRTT), ('t320', _IdleModeMobilityControlInfo_t320), ]) IdleModeMobilityControlInfo._ext = [] #-----< FreqPriorityListEUTRA >-----# FreqPriorityListEUTRA = SEQ_OF(name='FreqPriorityListEUTRA', mode=MODE_TYPE) _FreqPriorityListEUTRA__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FreqPriorityEUTRA'))) FreqPriorityListEUTRA._cont = _FreqPriorityListEUTRA__item_ FreqPriorityListEUTRA._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) #-----< FreqPriorityEUTRA >-----# FreqPriorityEUTRA = SEQ(name='FreqPriorityEUTRA', mode=MODE_TYPE) _FreqPriorityEUTRA_carrierFreq = INT(name='carrierFreq', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueEUTRA'))) _FreqPriorityEUTRA_cellReselectionPriority = INT(name='cellReselectionPriority', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionPriority'))) FreqPriorityEUTRA._cont = ASN1Dict([ ('carrierFreq', _FreqPriorityEUTRA_carrierFreq), ('cellReselectionPriority', _FreqPriorityEUTRA_cellReselectionPriority), ]) FreqPriorityEUTRA._ext = None #-----< FreqsPriorityListGERAN >-----# FreqsPriorityListGERAN = SEQ_OF(name='FreqsPriorityListGERAN', mode=MODE_TYPE) _FreqsPriorityListGERAN__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FreqsPriorityGERAN'))) FreqsPriorityListGERAN._cont = _FreqsPriorityListGERAN__item_ FreqsPriorityListGERAN._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< FreqsPriorityGERAN >-----# FreqsPriorityGERAN = SEQ(name='FreqsPriorityGERAN', mode=MODE_TYPE) _FreqsPriorityGERAN_carrierFreqs = SEQ(name='carrierFreqs', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqsGERAN'))) _FreqsPriorityGERAN_cellReselectionPriority = INT(name='cellReselectionPriority', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionPriority'))) FreqsPriorityGERAN._cont = ASN1Dict([ ('carrierFreqs', _FreqsPriorityGERAN_carrierFreqs), ('cellReselectionPriority', _FreqsPriorityGERAN_cellReselectionPriority), ]) FreqsPriorityGERAN._ext = None #-----< FreqPriorityListUTRA-FDD >-----# FreqPriorityListUTRA_FDD = SEQ_OF(name='FreqPriorityListUTRA-FDD', mode=MODE_TYPE) _FreqPriorityListUTRA_FDD__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FreqPriorityUTRA-FDD'))) FreqPriorityListUTRA_FDD._cont = _FreqPriorityListUTRA_FDD__item_ FreqPriorityListUTRA_FDD._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< FreqPriorityUTRA-FDD >-----# FreqPriorityUTRA_FDD = SEQ(name='FreqPriorityUTRA-FDD', mode=MODE_TYPE) _FreqPriorityUTRA_FDD_carrierFreq = INT(name='carrierFreq', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueUTRA'))) _FreqPriorityUTRA_FDD_cellReselectionPriority = INT(name='cellReselectionPriority', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionPriority'))) FreqPriorityUTRA_FDD._cont = ASN1Dict([ ('carrierFreq', _FreqPriorityUTRA_FDD_carrierFreq), ('cellReselectionPriority', _FreqPriorityUTRA_FDD_cellReselectionPriority), ]) FreqPriorityUTRA_FDD._ext = None #-----< FreqPriorityListUTRA-TDD >-----# FreqPriorityListUTRA_TDD = SEQ_OF(name='FreqPriorityListUTRA-TDD', mode=MODE_TYPE) _FreqPriorityListUTRA_TDD__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FreqPriorityUTRA-TDD'))) FreqPriorityListUTRA_TDD._cont = _FreqPriorityListUTRA_TDD__item_ FreqPriorityListUTRA_TDD._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< FreqPriorityUTRA-TDD >-----# FreqPriorityUTRA_TDD = SEQ(name='FreqPriorityUTRA-TDD', mode=MODE_TYPE) _FreqPriorityUTRA_TDD_carrierFreq = INT(name='carrierFreq', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueUTRA'))) _FreqPriorityUTRA_TDD_cellReselectionPriority = INT(name='cellReselectionPriority', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionPriority'))) FreqPriorityUTRA_TDD._cont = ASN1Dict([ ('carrierFreq', _FreqPriorityUTRA_TDD_carrierFreq), ('cellReselectionPriority', _FreqPriorityUTRA_TDD_cellReselectionPriority), ]) FreqPriorityUTRA_TDD._ext = None #-----< BandClassPriorityListHRPD >-----# BandClassPriorityListHRPD = SEQ_OF(name='BandClassPriorityListHRPD', mode=MODE_TYPE) _BandClassPriorityListHRPD__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandClassPriorityHRPD'))) BandClassPriorityListHRPD._cont = _BandClassPriorityListHRPD__item_ BandClassPriorityListHRPD._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< BandClassPriorityHRPD >-----# BandClassPriorityHRPD = SEQ(name='BandClassPriorityHRPD', mode=MODE_TYPE) _BandClassPriorityHRPD_bandClass = ENUM(name='bandClass', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandclassCDMA2000'))) _BandClassPriorityHRPD_cellReselectionPriority = INT(name='cellReselectionPriority', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionPriority'))) BandClassPriorityHRPD._cont = ASN1Dict([ ('bandClass', _BandClassPriorityHRPD_bandClass), ('cellReselectionPriority', _BandClassPriorityHRPD_cellReselectionPriority), ]) BandClassPriorityHRPD._ext = None #-----< BandClassPriorityList1XRTT >-----# BandClassPriorityList1XRTT = SEQ_OF(name='BandClassPriorityList1XRTT', mode=MODE_TYPE) _BandClassPriorityList1XRTT__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandClassPriority1XRTT'))) BandClassPriorityList1XRTT._cont = _BandClassPriorityList1XRTT__item_ BandClassPriorityList1XRTT._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< BandClassPriority1XRTT >-----# BandClassPriority1XRTT = SEQ(name='BandClassPriority1XRTT', mode=MODE_TYPE) _BandClassPriority1XRTT_bandClass = ENUM(name='bandClass', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandclassCDMA2000'))) _BandClassPriority1XRTT_cellReselectionPriority = INT(name='cellReselectionPriority', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionPriority'))) BandClassPriority1XRTT._cont = ASN1Dict([ ('bandClass', _BandClassPriority1XRTT_bandClass), ('cellReselectionPriority', _BandClassPriority1XRTT_cellReselectionPriority), ]) BandClassPriority1XRTT._ext = None #-----< RRCConnectionRequest >-----# RRCConnectionRequest = SEQ(name='RRCConnectionRequest', mode=MODE_TYPE) _RRCConnectionRequest_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __RRCConnectionRequest_criticalExtensions_rrcConnectionRequest_r8 = SEQ(name='rrcConnectionRequest-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionRequest-r8-IEs'))) __RRCConnectionRequest_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionRequest_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __RRCConnectionRequest_criticalExtensions_criticalExtensionsFuture._ext = None _RRCConnectionRequest_criticalExtensions._cont = ASN1Dict([ ('rrcConnectionRequest-r8', __RRCConnectionRequest_criticalExtensions_rrcConnectionRequest_r8), ('criticalExtensionsFuture', __RRCConnectionRequest_criticalExtensions_criticalExtensionsFuture), ]) _RRCConnectionRequest_criticalExtensions._ext = None RRCConnectionRequest._cont = ASN1Dict([ ('criticalExtensions', _RRCConnectionRequest_criticalExtensions), ]) RRCConnectionRequest._ext = None #-----< RRCConnectionRequest-r8-IEs >-----# RRCConnectionRequest_r8_IEs = SEQ(name='RRCConnectionRequest-r8-IEs', mode=MODE_TYPE) _RRCConnectionRequest_r8_IEs_ue_Identity = CHOICE(name='ue-Identity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'InitialUE-Identity'))) _RRCConnectionRequest_r8_IEs_establishmentCause = ENUM(name='establishmentCause', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'EstablishmentCause'))) _RRCConnectionRequest_r8_IEs_spare = BIT_STR(name='spare', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _RRCConnectionRequest_r8_IEs_spare._const_sz = ASN1Set(rv=[1], rr=[], ev=None, er=[]) RRCConnectionRequest_r8_IEs._cont = ASN1Dict([ ('ue-Identity', _RRCConnectionRequest_r8_IEs_ue_Identity), ('establishmentCause', _RRCConnectionRequest_r8_IEs_establishmentCause), ('spare', _RRCConnectionRequest_r8_IEs_spare), ]) RRCConnectionRequest_r8_IEs._ext = None #-----< InitialUE-Identity >-----# InitialUE_Identity = CHOICE(name='InitialUE-Identity', mode=MODE_TYPE) _InitialUE_Identity_s_TMSI = SEQ(name='s-TMSI', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'S-TMSI'))) _InitialUE_Identity_randomValue = BIT_STR(name='randomValue', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _InitialUE_Identity_randomValue._const_sz = ASN1Set(rv=[40], rr=[], ev=None, er=[]) InitialUE_Identity._cont = ASN1Dict([ ('s-TMSI', _InitialUE_Identity_s_TMSI), ('randomValue', _InitialUE_Identity_randomValue), ]) InitialUE_Identity._ext = None #-----< EstablishmentCause >-----# EstablishmentCause = ENUM(name='EstablishmentCause', mode=MODE_TYPE) EstablishmentCause._cont = ASN1Dict([('emergency', 0), ('highPriorityAccess', 1), ('mt-Access', 2), ('mo-Signalling', 3), ('mo-Data', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]) EstablishmentCause._ext = None #-----< RRCConnectionSetup >-----# RRCConnectionSetup = SEQ(name='RRCConnectionSetup', mode=MODE_TYPE) _RRCConnectionSetup_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _RRCConnectionSetup_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __RRCConnectionSetup_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___RRCConnectionSetup_criticalExtensions_c1_rrcConnectionSetup_r8 = SEQ(name='rrcConnectionSetup-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionSetup-r8-IEs'))) ___RRCConnectionSetup_criticalExtensions_c1_spare7 = NULL(name='spare7', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionSetup_criticalExtensions_c1_spare6 = NULL(name='spare6', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionSetup_criticalExtensions_c1_spare5 = NULL(name='spare5', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionSetup_criticalExtensions_c1_spare4 = NULL(name='spare4', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionSetup_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionSetup_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionSetup_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionSetup_criticalExtensions_c1._cont = ASN1Dict([ ('rrcConnectionSetup-r8', ___RRCConnectionSetup_criticalExtensions_c1_rrcConnectionSetup_r8), ('spare7', ___RRCConnectionSetup_criticalExtensions_c1_spare7), ('spare6', ___RRCConnectionSetup_criticalExtensions_c1_spare6), ('spare5', ___RRCConnectionSetup_criticalExtensions_c1_spare5), ('spare4', ___RRCConnectionSetup_criticalExtensions_c1_spare4), ('spare3', ___RRCConnectionSetup_criticalExtensions_c1_spare3), ('spare2', ___RRCConnectionSetup_criticalExtensions_c1_spare2), ('spare1', ___RRCConnectionSetup_criticalExtensions_c1_spare1), ]) __RRCConnectionSetup_criticalExtensions_c1._ext = None __RRCConnectionSetup_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionSetup_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __RRCConnectionSetup_criticalExtensions_criticalExtensionsFuture._ext = None _RRCConnectionSetup_criticalExtensions._cont = ASN1Dict([ ('c1', __RRCConnectionSetup_criticalExtensions_c1), ('criticalExtensionsFuture', __RRCConnectionSetup_criticalExtensions_criticalExtensionsFuture), ]) _RRCConnectionSetup_criticalExtensions._ext = None RRCConnectionSetup._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _RRCConnectionSetup_rrc_TransactionIdentifier), ('criticalExtensions', _RRCConnectionSetup_criticalExtensions), ]) RRCConnectionSetup._ext = None #-----< RRCConnectionSetup-r8-IEs >-----# RRCConnectionSetup_r8_IEs = SEQ(name='RRCConnectionSetup-r8-IEs', mode=MODE_TYPE) _RRCConnectionSetup_r8_IEs_radioResourceConfigDedicated = SEQ(name='radioResourceConfigDedicated', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RadioResourceConfigDedicated'))) _RRCConnectionSetup_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _RRCConnectionSetup_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _RRCConnectionSetup_r8_IEs_nonCriticalExtension._ext = None RRCConnectionSetup_r8_IEs._cont = ASN1Dict([ ('radioResourceConfigDedicated', _RRCConnectionSetup_r8_IEs_radioResourceConfigDedicated), ('nonCriticalExtension', _RRCConnectionSetup_r8_IEs_nonCriticalExtension), ]) RRCConnectionSetup_r8_IEs._ext = None #-----< RRCConnectionSetupComplete >-----# RRCConnectionSetupComplete = SEQ(name='RRCConnectionSetupComplete', mode=MODE_TYPE) _RRCConnectionSetupComplete_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _RRCConnectionSetupComplete_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __RRCConnectionSetupComplete_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___RRCConnectionSetupComplete_criticalExtensions_c1_rrcConnectionSetupComplete_r8 = SEQ(name='rrcConnectionSetupComplete-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRCConnectionSetupComplete-r8-IEs'))) ___RRCConnectionSetupComplete_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionSetupComplete_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RRCConnectionSetupComplete_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionSetupComplete_criticalExtensions_c1._cont = ASN1Dict([ ('rrcConnectionSetupComplete-r8', ___RRCConnectionSetupComplete_criticalExtensions_c1_rrcConnectionSetupComplete_r8), ('spare3', ___RRCConnectionSetupComplete_criticalExtensions_c1_spare3), ('spare2', ___RRCConnectionSetupComplete_criticalExtensions_c1_spare2), ('spare1', ___RRCConnectionSetupComplete_criticalExtensions_c1_spare1), ]) __RRCConnectionSetupComplete_criticalExtensions_c1._ext = None __RRCConnectionSetupComplete_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RRCConnectionSetupComplete_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __RRCConnectionSetupComplete_criticalExtensions_criticalExtensionsFuture._ext = None _RRCConnectionSetupComplete_criticalExtensions._cont = ASN1Dict([ ('c1', __RRCConnectionSetupComplete_criticalExtensions_c1), ('criticalExtensionsFuture', __RRCConnectionSetupComplete_criticalExtensions_criticalExtensionsFuture), ]) _RRCConnectionSetupComplete_criticalExtensions._ext = None RRCConnectionSetupComplete._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _RRCConnectionSetupComplete_rrc_TransactionIdentifier), ('criticalExtensions', _RRCConnectionSetupComplete_criticalExtensions), ]) RRCConnectionSetupComplete._ext = None #-----< RRCConnectionSetupComplete-r8-IEs >-----# RRCConnectionSetupComplete_r8_IEs = SEQ(name='RRCConnectionSetupComplete-r8-IEs', mode=MODE_TYPE) _RRCConnectionSetupComplete_r8_IEs_selectedPLMN_Identity = INT(name='selectedPLMN-Identity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _RRCConnectionSetupComplete_r8_IEs_selectedPLMN_Identity._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=6)], ev=None, er=[]) _RRCConnectionSetupComplete_r8_IEs_registeredMME = SEQ(name='registeredMME', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RegisteredMME')), opt=True) _RRCConnectionSetupComplete_r8_IEs_dedicatedInfoNAS = OCT_STR(name='dedicatedInfoNAS', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DedicatedInfoNAS'))) _RRCConnectionSetupComplete_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _RRCConnectionSetupComplete_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _RRCConnectionSetupComplete_r8_IEs_nonCriticalExtension._ext = None RRCConnectionSetupComplete_r8_IEs._cont = ASN1Dict([ ('selectedPLMN-Identity', _RRCConnectionSetupComplete_r8_IEs_selectedPLMN_Identity), ('registeredMME', _RRCConnectionSetupComplete_r8_IEs_registeredMME), ('dedicatedInfoNAS', _RRCConnectionSetupComplete_r8_IEs_dedicatedInfoNAS), ('nonCriticalExtension', _RRCConnectionSetupComplete_r8_IEs_nonCriticalExtension), ]) RRCConnectionSetupComplete_r8_IEs._ext = None #-----< RegisteredMME >-----# RegisteredMME = SEQ(name='RegisteredMME', mode=MODE_TYPE) _RegisteredMME_plmn_Identity = SEQ(name='plmn-Identity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PLMN-Identity')), opt=True) _RegisteredMME_mmegi = BIT_STR(name='mmegi', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _RegisteredMME_mmegi._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) _RegisteredMME_mmec = BIT_STR(name='mmec', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MMEC'))) RegisteredMME._cont = ASN1Dict([ ('plmn-Identity', _RegisteredMME_plmn_Identity), ('mmegi', _RegisteredMME_mmegi), ('mmec', _RegisteredMME_mmec), ]) RegisteredMME._ext = None #-----< SecurityModeCommand >-----# SecurityModeCommand = SEQ(name='SecurityModeCommand', mode=MODE_TYPE) _SecurityModeCommand_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _SecurityModeCommand_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __SecurityModeCommand_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___SecurityModeCommand_criticalExtensions_c1_securityModeCommand_r8 = SEQ(name='securityModeCommand-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecurityModeCommand-r8-IEs'))) ___SecurityModeCommand_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___SecurityModeCommand_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___SecurityModeCommand_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SecurityModeCommand_criticalExtensions_c1._cont = ASN1Dict([ ('securityModeCommand-r8', ___SecurityModeCommand_criticalExtensions_c1_securityModeCommand_r8), ('spare3', ___SecurityModeCommand_criticalExtensions_c1_spare3), ('spare2', ___SecurityModeCommand_criticalExtensions_c1_spare2), ('spare1', ___SecurityModeCommand_criticalExtensions_c1_spare1), ]) __SecurityModeCommand_criticalExtensions_c1._ext = None __SecurityModeCommand_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SecurityModeCommand_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __SecurityModeCommand_criticalExtensions_criticalExtensionsFuture._ext = None _SecurityModeCommand_criticalExtensions._cont = ASN1Dict([ ('c1', __SecurityModeCommand_criticalExtensions_c1), ('criticalExtensionsFuture', __SecurityModeCommand_criticalExtensions_criticalExtensionsFuture), ]) _SecurityModeCommand_criticalExtensions._ext = None SecurityModeCommand._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _SecurityModeCommand_rrc_TransactionIdentifier), ('criticalExtensions', _SecurityModeCommand_criticalExtensions), ]) SecurityModeCommand._ext = None #-----< SecurityModeCommand-r8-IEs >-----# SecurityModeCommand_r8_IEs = SEQ(name='SecurityModeCommand-r8-IEs', mode=MODE_TYPE) _SecurityModeCommand_r8_IEs_securityConfigSMC = SEQ(name='securityConfigSMC', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecurityConfigSMC'))) _SecurityModeCommand_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _SecurityModeCommand_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _SecurityModeCommand_r8_IEs_nonCriticalExtension._ext = None SecurityModeCommand_r8_IEs._cont = ASN1Dict([ ('securityConfigSMC', _SecurityModeCommand_r8_IEs_securityConfigSMC), ('nonCriticalExtension', _SecurityModeCommand_r8_IEs_nonCriticalExtension), ]) SecurityModeCommand_r8_IEs._ext = None #-----< SecurityConfigSMC >-----# SecurityConfigSMC = SEQ(name='SecurityConfigSMC', mode=MODE_TYPE) _SecurityConfigSMC_securityAlgorithmConfig = SEQ(name='securityAlgorithmConfig', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecurityAlgorithmConfig'))) SecurityConfigSMC._cont = ASN1Dict([ ('securityAlgorithmConfig', _SecurityConfigSMC_securityAlgorithmConfig), ]) SecurityConfigSMC._ext = [] #-----< SecurityModeComplete >-----# SecurityModeComplete = SEQ(name='SecurityModeComplete', mode=MODE_TYPE) _SecurityModeComplete_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _SecurityModeComplete_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __SecurityModeComplete_criticalExtensions_securityModeComplete_r8 = SEQ(name='securityModeComplete-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecurityModeComplete-r8-IEs'))) __SecurityModeComplete_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SecurityModeComplete_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __SecurityModeComplete_criticalExtensions_criticalExtensionsFuture._ext = None _SecurityModeComplete_criticalExtensions._cont = ASN1Dict([ ('securityModeComplete-r8', __SecurityModeComplete_criticalExtensions_securityModeComplete_r8), ('criticalExtensionsFuture', __SecurityModeComplete_criticalExtensions_criticalExtensionsFuture), ]) _SecurityModeComplete_criticalExtensions._ext = None SecurityModeComplete._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _SecurityModeComplete_rrc_TransactionIdentifier), ('criticalExtensions', _SecurityModeComplete_criticalExtensions), ]) SecurityModeComplete._ext = None #-----< SecurityModeComplete-r8-IEs >-----# SecurityModeComplete_r8_IEs = SEQ(name='SecurityModeComplete-r8-IEs', mode=MODE_TYPE) _SecurityModeComplete_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _SecurityModeComplete_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _SecurityModeComplete_r8_IEs_nonCriticalExtension._ext = None SecurityModeComplete_r8_IEs._cont = ASN1Dict([ ('nonCriticalExtension', _SecurityModeComplete_r8_IEs_nonCriticalExtension), ]) SecurityModeComplete_r8_IEs._ext = None #-----< SecurityModeFailure >-----# SecurityModeFailure = SEQ(name='SecurityModeFailure', mode=MODE_TYPE) _SecurityModeFailure_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _SecurityModeFailure_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __SecurityModeFailure_criticalExtensions_securityModeFailure_r8 = SEQ(name='securityModeFailure-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecurityModeFailure-r8-IEs'))) __SecurityModeFailure_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SecurityModeFailure_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __SecurityModeFailure_criticalExtensions_criticalExtensionsFuture._ext = None _SecurityModeFailure_criticalExtensions._cont = ASN1Dict([ ('securityModeFailure-r8', __SecurityModeFailure_criticalExtensions_securityModeFailure_r8), ('criticalExtensionsFuture', __SecurityModeFailure_criticalExtensions_criticalExtensionsFuture), ]) _SecurityModeFailure_criticalExtensions._ext = None SecurityModeFailure._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _SecurityModeFailure_rrc_TransactionIdentifier), ('criticalExtensions', _SecurityModeFailure_criticalExtensions), ]) SecurityModeFailure._ext = None #-----< SecurityModeFailure-r8-IEs >-----# SecurityModeFailure_r8_IEs = SEQ(name='SecurityModeFailure-r8-IEs', mode=MODE_TYPE) _SecurityModeFailure_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _SecurityModeFailure_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _SecurityModeFailure_r8_IEs_nonCriticalExtension._ext = None SecurityModeFailure_r8_IEs._cont = ASN1Dict([ ('nonCriticalExtension', _SecurityModeFailure_r8_IEs_nonCriticalExtension), ]) SecurityModeFailure_r8_IEs._ext = None #-----< SystemInformation >-----# SystemInformation = SEQ(name='SystemInformation', mode=MODE_TYPE) _SystemInformation_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __SystemInformation_criticalExtensions_systemInformation_r8 = SEQ(name='systemInformation-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformation-r8-IEs'))) __SystemInformation_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformation_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __SystemInformation_criticalExtensions_criticalExtensionsFuture._ext = None _SystemInformation_criticalExtensions._cont = ASN1Dict([ ('systemInformation-r8', __SystemInformation_criticalExtensions_systemInformation_r8), ('criticalExtensionsFuture', __SystemInformation_criticalExtensions_criticalExtensionsFuture), ]) _SystemInformation_criticalExtensions._ext = None SystemInformation._cont = ASN1Dict([ ('criticalExtensions', _SystemInformation_criticalExtensions), ]) SystemInformation._ext = None #-----< SystemInformation-r8-IEs >-----# SystemInformation_r8_IEs = SEQ(name='SystemInformation-r8-IEs', mode=MODE_TYPE) _SystemInformation_r8_IEs_sib_TypeAndInfo = SEQ_OF(name='sib-TypeAndInfo', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformation_r8_IEs_sib_TypeAndInfo__item_ = CHOICE(name='_item_', mode=MODE_TYPE) ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib2 = SEQ(name='sib2', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType2'))) ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib3 = SEQ(name='sib3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType3'))) ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib4 = SEQ(name='sib4', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType4'))) ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib5 = SEQ(name='sib5', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType5'))) ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib6 = SEQ(name='sib6', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType6'))) ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib7 = SEQ(name='sib7', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType7'))) ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib8 = SEQ(name='sib8', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType8'))) ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib9 = SEQ(name='sib9', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType9'))) ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib10 = SEQ(name='sib10', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType10'))) ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib11 = SEQ(name='sib11', mode=MODE_TYPE, tag=(9, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType11'))) __SystemInformation_r8_IEs_sib_TypeAndInfo__item_._cont = ASN1Dict([ ('sib2', ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib2), ('sib3', ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib3), ('sib4', ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib4), ('sib5', ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib5), ('sib6', ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib6), ('sib7', ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib7), ('sib8', ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib8), ('sib9', ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib9), ('sib10', ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib10), ('sib11', ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib11), ]) __SystemInformation_r8_IEs_sib_TypeAndInfo__item_._ext = [] _SystemInformation_r8_IEs_sib_TypeAndInfo._cont = __SystemInformation_r8_IEs_sib_TypeAndInfo__item_ _SystemInformation_r8_IEs_sib_TypeAndInfo._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) _SystemInformation_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _SystemInformation_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _SystemInformation_r8_IEs_nonCriticalExtension._ext = None SystemInformation_r8_IEs._cont = ASN1Dict([ ('sib-TypeAndInfo', _SystemInformation_r8_IEs_sib_TypeAndInfo), ('nonCriticalExtension', _SystemInformation_r8_IEs_nonCriticalExtension), ]) SystemInformation_r8_IEs._ext = None #-----< SystemInformationBlockType1 >-----# SystemInformationBlockType1 = SEQ(name='SystemInformationBlockType1', mode=MODE_TYPE) _SystemInformationBlockType1_cellAccessRelatedInfo = SEQ(name='cellAccessRelatedInfo', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformationBlockType1_cellAccessRelatedInfo_plmn_IdentityList = SEQ_OF(name='plmn-IdentityList', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PLMN-IdentityList'))) __SystemInformationBlockType1_cellAccessRelatedInfo_trackingAreaCode = BIT_STR(name='trackingAreaCode', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'TrackingAreaCode'))) __SystemInformationBlockType1_cellAccessRelatedInfo_cellIdentity = BIT_STR(name='cellIdentity', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellIdentity'))) __SystemInformationBlockType1_cellAccessRelatedInfo_cellBarred = ENUM(name='cellBarred', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformationBlockType1_cellAccessRelatedInfo_cellBarred._cont = ASN1Dict([('barred', 0), ('notBarred', 1)]) __SystemInformationBlockType1_cellAccessRelatedInfo_cellBarred._ext = None __SystemInformationBlockType1_cellAccessRelatedInfo_intraFreqReselection = ENUM(name='intraFreqReselection', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformationBlockType1_cellAccessRelatedInfo_intraFreqReselection._cont = ASN1Dict([('allowed', 0), ('notAllowed', 1)]) __SystemInformationBlockType1_cellAccessRelatedInfo_intraFreqReselection._ext = None __SystemInformationBlockType1_cellAccessRelatedInfo_csg_Indication = BOOL(name='csg-Indication', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformationBlockType1_cellAccessRelatedInfo_csg_Identity = BIT_STR(name='csg-Identity', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __SystemInformationBlockType1_cellAccessRelatedInfo_csg_Identity._const_sz = ASN1Set(rv=[27], rr=[], ev=None, er=[]) _SystemInformationBlockType1_cellAccessRelatedInfo._cont = ASN1Dict([ ('plmn-IdentityList', __SystemInformationBlockType1_cellAccessRelatedInfo_plmn_IdentityList), ('trackingAreaCode', __SystemInformationBlockType1_cellAccessRelatedInfo_trackingAreaCode), ('cellIdentity', __SystemInformationBlockType1_cellAccessRelatedInfo_cellIdentity), ('cellBarred', __SystemInformationBlockType1_cellAccessRelatedInfo_cellBarred), ('intraFreqReselection', __SystemInformationBlockType1_cellAccessRelatedInfo_intraFreqReselection), ('csg-Indication', __SystemInformationBlockType1_cellAccessRelatedInfo_csg_Indication), ('csg-Identity', __SystemInformationBlockType1_cellAccessRelatedInfo_csg_Identity), ]) _SystemInformationBlockType1_cellAccessRelatedInfo._ext = None _SystemInformationBlockType1_cellSelectionInfo = SEQ(name='cellSelectionInfo', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformationBlockType1_cellSelectionInfo_q_RxLevMin = INT(name='q-RxLevMin', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Q-RxLevMin'))) __SystemInformationBlockType1_cellSelectionInfo_q_RxLevMinOffset = INT(name='q-RxLevMinOffset', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __SystemInformationBlockType1_cellSelectionInfo_q_RxLevMinOffset._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) _SystemInformationBlockType1_cellSelectionInfo._cont = ASN1Dict([ ('q-RxLevMin', __SystemInformationBlockType1_cellSelectionInfo_q_RxLevMin), ('q-RxLevMinOffset', __SystemInformationBlockType1_cellSelectionInfo_q_RxLevMinOffset), ]) _SystemInformationBlockType1_cellSelectionInfo._ext = None _SystemInformationBlockType1_p_Max = INT(name='p-Max', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'P-Max')), opt=True) _SystemInformationBlockType1_freqBandIndicator = INT(name='freqBandIndicator', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SystemInformationBlockType1_freqBandIndicator._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=64)], ev=None, er=[]) _SystemInformationBlockType1_schedulingInfoList = SEQ_OF(name='schedulingInfoList', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SchedulingInfoList'))) _SystemInformationBlockType1_tdd_Config = SEQ(name='tdd-Config', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'TDD-Config')), opt=True) _SystemInformationBlockType1_si_WindowLength = ENUM(name='si-WindowLength', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SystemInformationBlockType1_si_WindowLength._cont = ASN1Dict([('ms1', 0), ('ms2', 1), ('ms5', 2), ('ms10', 3), ('ms15', 4), ('ms20', 5), ('ms40', 6)]) _SystemInformationBlockType1_si_WindowLength._ext = None _SystemInformationBlockType1_systemInfoValueTag = INT(name='systemInfoValueTag', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SystemInformationBlockType1_systemInfoValueTag._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=31)], ev=None, er=[]) _SystemInformationBlockType1_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _SystemInformationBlockType1_nonCriticalExtension._cont = ASN1Dict([ ]) _SystemInformationBlockType1_nonCriticalExtension._ext = None SystemInformationBlockType1._cont = ASN1Dict([ ('cellAccessRelatedInfo', _SystemInformationBlockType1_cellAccessRelatedInfo), ('cellSelectionInfo', _SystemInformationBlockType1_cellSelectionInfo), ('p-Max', _SystemInformationBlockType1_p_Max), ('freqBandIndicator', _SystemInformationBlockType1_freqBandIndicator), ('schedulingInfoList', _SystemInformationBlockType1_schedulingInfoList), ('tdd-Config', _SystemInformationBlockType1_tdd_Config), ('si-WindowLength', _SystemInformationBlockType1_si_WindowLength), ('systemInfoValueTag', _SystemInformationBlockType1_systemInfoValueTag), ('nonCriticalExtension', _SystemInformationBlockType1_nonCriticalExtension), ]) SystemInformationBlockType1._ext = None #-----< PLMN-IdentityList >-----# PLMN_IdentityList = SEQ_OF(name='PLMN-IdentityList', mode=MODE_TYPE) _PLMN_IdentityList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PLMN-IdentityInfo'))) PLMN_IdentityList._cont = _PLMN_IdentityList__item_ PLMN_IdentityList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=6)], ev=None, er=[]) #-----< PLMN-IdentityInfo >-----# PLMN_IdentityInfo = SEQ(name='PLMN-IdentityInfo', mode=MODE_TYPE) _PLMN_IdentityInfo_plmn_Identity = SEQ(name='plmn-Identity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PLMN-Identity'))) _PLMN_IdentityInfo_cellReservedForOperatorUse = ENUM(name='cellReservedForOperatorUse', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PLMN_IdentityInfo_cellReservedForOperatorUse._cont = ASN1Dict([('reserved', 0), ('notReserved', 1)]) _PLMN_IdentityInfo_cellReservedForOperatorUse._ext = None PLMN_IdentityInfo._cont = ASN1Dict([ ('plmn-Identity', _PLMN_IdentityInfo_plmn_Identity), ('cellReservedForOperatorUse', _PLMN_IdentityInfo_cellReservedForOperatorUse), ]) PLMN_IdentityInfo._ext = None #-----< SchedulingInfoList >-----# SchedulingInfoList = SEQ_OF(name='SchedulingInfoList', mode=MODE_TYPE) _SchedulingInfoList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SchedulingInfo'))) SchedulingInfoList._cont = _SchedulingInfoList__item_ SchedulingInfoList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< SchedulingInfo >-----# SchedulingInfo = SEQ(name='SchedulingInfo', mode=MODE_TYPE) _SchedulingInfo_si_Periodicity = ENUM(name='si-Periodicity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SchedulingInfo_si_Periodicity._cont = ASN1Dict([('rf8', 0), ('rf16', 1), ('rf32', 2), ('rf64', 3), ('rf128', 4), ('rf256', 5), ('rf512', 6)]) _SchedulingInfo_si_Periodicity._ext = None _SchedulingInfo_sib_MappingInfo = SEQ_OF(name='sib-MappingInfo', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SIB-MappingInfo'))) SchedulingInfo._cont = ASN1Dict([ ('si-Periodicity', _SchedulingInfo_si_Periodicity), ('sib-MappingInfo', _SchedulingInfo_sib_MappingInfo), ]) SchedulingInfo._ext = None #-----< SIB-MappingInfo >-----# SIB_MappingInfo = SEQ_OF(name='SIB-MappingInfo', mode=MODE_TYPE) _SIB_MappingInfo__item_ = ENUM(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SIB-Type'))) SIB_MappingInfo._cont = _SIB_MappingInfo__item_ SIB_MappingInfo._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=31)], ev=None, er=[]) #-----< SIB-Type >-----# SIB_Type = ENUM(name='SIB-Type', mode=MODE_TYPE) SIB_Type._cont = ASN1Dict([('sibType3', 0), ('sibType4', 1), ('sibType5', 2), ('sibType6', 3), ('sibType7', 4), ('sibType8', 5), ('sibType9', 6), ('sibType10', 7), ('sibType11', 8), ('spare7', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]) SIB_Type._ext = [] #-----< UECapabilityEnquiry >-----# UECapabilityEnquiry = SEQ(name='UECapabilityEnquiry', mode=MODE_TYPE) _UECapabilityEnquiry_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _UECapabilityEnquiry_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __UECapabilityEnquiry_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___UECapabilityEnquiry_criticalExtensions_c1_ueCapabilityEnquiry_r8 = SEQ(name='ueCapabilityEnquiry-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UECapabilityEnquiry-r8-IEs'))) ___UECapabilityEnquiry_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UECapabilityEnquiry_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UECapabilityEnquiry_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __UECapabilityEnquiry_criticalExtensions_c1._cont = ASN1Dict([ ('ueCapabilityEnquiry-r8', ___UECapabilityEnquiry_criticalExtensions_c1_ueCapabilityEnquiry_r8), ('spare3', ___UECapabilityEnquiry_criticalExtensions_c1_spare3), ('spare2', ___UECapabilityEnquiry_criticalExtensions_c1_spare2), ('spare1', ___UECapabilityEnquiry_criticalExtensions_c1_spare1), ]) __UECapabilityEnquiry_criticalExtensions_c1._ext = None __UECapabilityEnquiry_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __UECapabilityEnquiry_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __UECapabilityEnquiry_criticalExtensions_criticalExtensionsFuture._ext = None _UECapabilityEnquiry_criticalExtensions._cont = ASN1Dict([ ('c1', __UECapabilityEnquiry_criticalExtensions_c1), ('criticalExtensionsFuture', __UECapabilityEnquiry_criticalExtensions_criticalExtensionsFuture), ]) _UECapabilityEnquiry_criticalExtensions._ext = None UECapabilityEnquiry._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _UECapabilityEnquiry_rrc_TransactionIdentifier), ('criticalExtensions', _UECapabilityEnquiry_criticalExtensions), ]) UECapabilityEnquiry._ext = None #-----< UECapabilityEnquiry-r8-IEs >-----# UECapabilityEnquiry_r8_IEs = SEQ(name='UECapabilityEnquiry-r8-IEs', mode=MODE_TYPE) _UECapabilityEnquiry_r8_IEs_ue_CapabilityRequest = SEQ_OF(name='ue-CapabilityRequest', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UE-CapabilityRequest'))) _UECapabilityEnquiry_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _UECapabilityEnquiry_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _UECapabilityEnquiry_r8_IEs_nonCriticalExtension._ext = None UECapabilityEnquiry_r8_IEs._cont = ASN1Dict([ ('ue-CapabilityRequest', _UECapabilityEnquiry_r8_IEs_ue_CapabilityRequest), ('nonCriticalExtension', _UECapabilityEnquiry_r8_IEs_nonCriticalExtension), ]) UECapabilityEnquiry_r8_IEs._ext = None #-----< UE-CapabilityRequest >-----# UE_CapabilityRequest = SEQ_OF(name='UE-CapabilityRequest', mode=MODE_TYPE) _UE_CapabilityRequest__item_ = ENUM(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RAT-Type'))) UE_CapabilityRequest._cont = _UE_CapabilityRequest__item_ UE_CapabilityRequest._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) #-----< UECapabilityInformation >-----# UECapabilityInformation = SEQ(name='UECapabilityInformation', mode=MODE_TYPE) _UECapabilityInformation_rrc_TransactionIdentifier = INT(name='rrc-TransactionIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RRC-TransactionIdentifier'))) _UECapabilityInformation_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __UECapabilityInformation_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___UECapabilityInformation_criticalExtensions_c1_ueCapabilityInformation_r8 = SEQ(name='ueCapabilityInformation-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UECapabilityInformation-r8-IEs'))) ___UECapabilityInformation_criticalExtensions_c1_spare7 = NULL(name='spare7', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UECapabilityInformation_criticalExtensions_c1_spare6 = NULL(name='spare6', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UECapabilityInformation_criticalExtensions_c1_spare5 = NULL(name='spare5', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UECapabilityInformation_criticalExtensions_c1_spare4 = NULL(name='spare4', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UECapabilityInformation_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UECapabilityInformation_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UECapabilityInformation_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __UECapabilityInformation_criticalExtensions_c1._cont = ASN1Dict([ ('ueCapabilityInformation-r8', ___UECapabilityInformation_criticalExtensions_c1_ueCapabilityInformation_r8), ('spare7', ___UECapabilityInformation_criticalExtensions_c1_spare7), ('spare6', ___UECapabilityInformation_criticalExtensions_c1_spare6), ('spare5', ___UECapabilityInformation_criticalExtensions_c1_spare5), ('spare4', ___UECapabilityInformation_criticalExtensions_c1_spare4), ('spare3', ___UECapabilityInformation_criticalExtensions_c1_spare3), ('spare2', ___UECapabilityInformation_criticalExtensions_c1_spare2), ('spare1', ___UECapabilityInformation_criticalExtensions_c1_spare1), ]) __UECapabilityInformation_criticalExtensions_c1._ext = None __UECapabilityInformation_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __UECapabilityInformation_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __UECapabilityInformation_criticalExtensions_criticalExtensionsFuture._ext = None _UECapabilityInformation_criticalExtensions._cont = ASN1Dict([ ('c1', __UECapabilityInformation_criticalExtensions_c1), ('criticalExtensionsFuture', __UECapabilityInformation_criticalExtensions_criticalExtensionsFuture), ]) _UECapabilityInformation_criticalExtensions._ext = None UECapabilityInformation._cont = ASN1Dict([ ('rrc-TransactionIdentifier', _UECapabilityInformation_rrc_TransactionIdentifier), ('criticalExtensions', _UECapabilityInformation_criticalExtensions), ]) UECapabilityInformation._ext = None #-----< UECapabilityInformation-r8-IEs >-----# UECapabilityInformation_r8_IEs = SEQ(name='UECapabilityInformation-r8-IEs', mode=MODE_TYPE) _UECapabilityInformation_r8_IEs_ue_CapabilityRAT_ContainerList = SEQ_OF(name='ue-CapabilityRAT-ContainerList', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UE-CapabilityRAT-ContainerList'))) _UECapabilityInformation_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _UECapabilityInformation_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _UECapabilityInformation_r8_IEs_nonCriticalExtension._ext = None UECapabilityInformation_r8_IEs._cont = ASN1Dict([ ('ue-CapabilityRAT-ContainerList', _UECapabilityInformation_r8_IEs_ue_CapabilityRAT_ContainerList), ('nonCriticalExtension', _UECapabilityInformation_r8_IEs_nonCriticalExtension), ]) UECapabilityInformation_r8_IEs._ext = None #-----< ULHandoverPreparationTransfer >-----# ULHandoverPreparationTransfer = SEQ(name='ULHandoverPreparationTransfer', mode=MODE_TYPE) _ULHandoverPreparationTransfer_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __ULHandoverPreparationTransfer_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___ULHandoverPreparationTransfer_criticalExtensions_c1_ulHandoverPreparationTransfer_r8 = SEQ(name='ulHandoverPreparationTransfer-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ULHandoverPreparationTransfer-r8-IEs'))) ___ULHandoverPreparationTransfer_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___ULHandoverPreparationTransfer_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___ULHandoverPreparationTransfer_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __ULHandoverPreparationTransfer_criticalExtensions_c1._cont = ASN1Dict([ ('ulHandoverPreparationTransfer-r8', ___ULHandoverPreparationTransfer_criticalExtensions_c1_ulHandoverPreparationTransfer_r8), ('spare3', ___ULHandoverPreparationTransfer_criticalExtensions_c1_spare3), ('spare2', ___ULHandoverPreparationTransfer_criticalExtensions_c1_spare2), ('spare1', ___ULHandoverPreparationTransfer_criticalExtensions_c1_spare1), ]) __ULHandoverPreparationTransfer_criticalExtensions_c1._ext = None __ULHandoverPreparationTransfer_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __ULHandoverPreparationTransfer_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __ULHandoverPreparationTransfer_criticalExtensions_criticalExtensionsFuture._ext = None _ULHandoverPreparationTransfer_criticalExtensions._cont = ASN1Dict([ ('c1', __ULHandoverPreparationTransfer_criticalExtensions_c1), ('criticalExtensionsFuture', __ULHandoverPreparationTransfer_criticalExtensions_criticalExtensionsFuture), ]) _ULHandoverPreparationTransfer_criticalExtensions._ext = None ULHandoverPreparationTransfer._cont = ASN1Dict([ ('criticalExtensions', _ULHandoverPreparationTransfer_criticalExtensions), ]) ULHandoverPreparationTransfer._ext = None #-----< ULHandoverPreparationTransfer-r8-IEs >-----# ULHandoverPreparationTransfer_r8_IEs = SEQ(name='ULHandoverPreparationTransfer-r8-IEs', mode=MODE_TYPE) _ULHandoverPreparationTransfer_r8_IEs_cdma2000_Type = ENUM(name='cdma2000-Type', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CDMA2000-Type'))) _ULHandoverPreparationTransfer_r8_IEs_meid = BIT_STR(name='meid', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _ULHandoverPreparationTransfer_r8_IEs_meid._const_sz = ASN1Set(rv=[56], rr=[], ev=None, er=[]) _ULHandoverPreparationTransfer_r8_IEs_dedicatedInfo = OCT_STR(name='dedicatedInfo', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DedicatedInfoCDMA2000'))) _ULHandoverPreparationTransfer_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _ULHandoverPreparationTransfer_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _ULHandoverPreparationTransfer_r8_IEs_nonCriticalExtension._ext = None ULHandoverPreparationTransfer_r8_IEs._cont = ASN1Dict([ ('cdma2000-Type', _ULHandoverPreparationTransfer_r8_IEs_cdma2000_Type), ('meid', _ULHandoverPreparationTransfer_r8_IEs_meid), ('dedicatedInfo', _ULHandoverPreparationTransfer_r8_IEs_dedicatedInfo), ('nonCriticalExtension', _ULHandoverPreparationTransfer_r8_IEs_nonCriticalExtension), ]) ULHandoverPreparationTransfer_r8_IEs._ext = None #-----< ULInformationTransfer >-----# ULInformationTransfer = SEQ(name='ULInformationTransfer', mode=MODE_TYPE) _ULInformationTransfer_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __ULInformationTransfer_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___ULInformationTransfer_criticalExtensions_c1_ulInformationTransfer_r8 = SEQ(name='ulInformationTransfer-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ULInformationTransfer-r8-IEs'))) ___ULInformationTransfer_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___ULInformationTransfer_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___ULInformationTransfer_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __ULInformationTransfer_criticalExtensions_c1._cont = ASN1Dict([ ('ulInformationTransfer-r8', ___ULInformationTransfer_criticalExtensions_c1_ulInformationTransfer_r8), ('spare3', ___ULInformationTransfer_criticalExtensions_c1_spare3), ('spare2', ___ULInformationTransfer_criticalExtensions_c1_spare2), ('spare1', ___ULInformationTransfer_criticalExtensions_c1_spare1), ]) __ULInformationTransfer_criticalExtensions_c1._ext = None __ULInformationTransfer_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __ULInformationTransfer_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __ULInformationTransfer_criticalExtensions_criticalExtensionsFuture._ext = None _ULInformationTransfer_criticalExtensions._cont = ASN1Dict([ ('c1', __ULInformationTransfer_criticalExtensions_c1), ('criticalExtensionsFuture', __ULInformationTransfer_criticalExtensions_criticalExtensionsFuture), ]) _ULInformationTransfer_criticalExtensions._ext = None ULInformationTransfer._cont = ASN1Dict([ ('criticalExtensions', _ULInformationTransfer_criticalExtensions), ]) ULInformationTransfer._ext = None #-----< ULInformationTransfer-r8-IEs >-----# ULInformationTransfer_r8_IEs = SEQ(name='ULInformationTransfer-r8-IEs', mode=MODE_TYPE) _ULInformationTransfer_r8_IEs_dedicatedInfoType = CHOICE(name='dedicatedInfoType', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __ULInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoNAS = OCT_STR(name='dedicatedInfoNAS', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DedicatedInfoNAS'))) __ULInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoCDMA2000_1XRTT = OCT_STR(name='dedicatedInfoCDMA2000-1XRTT', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DedicatedInfoCDMA2000'))) __ULInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoCDMA2000_HRPD = OCT_STR(name='dedicatedInfoCDMA2000-HRPD', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DedicatedInfoCDMA2000'))) _ULInformationTransfer_r8_IEs_dedicatedInfoType._cont = ASN1Dict([ ('dedicatedInfoNAS', __ULInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoNAS), ('dedicatedInfoCDMA2000-1XRTT', __ULInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoCDMA2000_1XRTT), ('dedicatedInfoCDMA2000-HRPD', __ULInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoCDMA2000_HRPD), ]) _ULInformationTransfer_r8_IEs_dedicatedInfoType._ext = None _ULInformationTransfer_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _ULInformationTransfer_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _ULInformationTransfer_r8_IEs_nonCriticalExtension._ext = None ULInformationTransfer_r8_IEs._cont = ASN1Dict([ ('dedicatedInfoType', _ULInformationTransfer_r8_IEs_dedicatedInfoType), ('nonCriticalExtension', _ULInformationTransfer_r8_IEs_nonCriticalExtension), ]) ULInformationTransfer_r8_IEs._ext = None #-----< SystemInformationBlockType2 >-----# SystemInformationBlockType2 = SEQ(name='SystemInformationBlockType2', mode=MODE_TYPE) _SystemInformationBlockType2_ac_BarringInfo = SEQ(name='ac-BarringInfo', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __SystemInformationBlockType2_ac_BarringInfo_ac_BarringForEmergency = BOOL(name='ac-BarringForEmergency', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformationBlockType2_ac_BarringInfo_ac_BarringForMO_Signalling = SEQ(name='ac-BarringForMO-Signalling', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'AC-BarringConfig')), opt=True) __SystemInformationBlockType2_ac_BarringInfo_ac_BarringForMO_Data = SEQ(name='ac-BarringForMO-Data', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'AC-BarringConfig')), opt=True) _SystemInformationBlockType2_ac_BarringInfo._cont = ASN1Dict([ ('ac-BarringForEmergency', __SystemInformationBlockType2_ac_BarringInfo_ac_BarringForEmergency), ('ac-BarringForMO-Signalling', __SystemInformationBlockType2_ac_BarringInfo_ac_BarringForMO_Signalling), ('ac-BarringForMO-Data', __SystemInformationBlockType2_ac_BarringInfo_ac_BarringForMO_Data), ]) _SystemInformationBlockType2_ac_BarringInfo._ext = None _SystemInformationBlockType2_radioResourceConfigCommon = SEQ(name='radioResourceConfigCommon', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RadioResourceConfigCommonSIB'))) _SystemInformationBlockType2_ue_TimersAndConstants = SEQ(name='ue-TimersAndConstants', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UE-TimersAndConstants'))) _SystemInformationBlockType2_freqInfo = SEQ(name='freqInfo', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformationBlockType2_freqInfo_ul_CarrierFreq = INT(name='ul-CarrierFreq', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueEUTRA')), opt=True) __SystemInformationBlockType2_freqInfo_ul_Bandwidth = ENUM(name='ul-Bandwidth', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __SystemInformationBlockType2_freqInfo_ul_Bandwidth._cont = ASN1Dict([('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]) __SystemInformationBlockType2_freqInfo_ul_Bandwidth._ext = None __SystemInformationBlockType2_freqInfo_additionalSpectrumEmission = INT(name='additionalSpectrumEmission', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'AdditionalSpectrumEmission'))) _SystemInformationBlockType2_freqInfo._cont = ASN1Dict([ ('ul-CarrierFreq', __SystemInformationBlockType2_freqInfo_ul_CarrierFreq), ('ul-Bandwidth', __SystemInformationBlockType2_freqInfo_ul_Bandwidth), ('additionalSpectrumEmission', __SystemInformationBlockType2_freqInfo_additionalSpectrumEmission), ]) _SystemInformationBlockType2_freqInfo._ext = None _SystemInformationBlockType2_mbsfn_SubframeConfigList = SEQ_OF(name='mbsfn-SubframeConfigList', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MBSFN-SubframeConfigList')), opt=True) _SystemInformationBlockType2_timeAlignmentTimerCommon = ENUM(name='timeAlignmentTimerCommon', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'TimeAlignmentTimer'))) SystemInformationBlockType2._cont = ASN1Dict([ ('ac-BarringInfo', _SystemInformationBlockType2_ac_BarringInfo), ('radioResourceConfigCommon', _SystemInformationBlockType2_radioResourceConfigCommon), ('ue-TimersAndConstants', _SystemInformationBlockType2_ue_TimersAndConstants), ('freqInfo', _SystemInformationBlockType2_freqInfo), ('mbsfn-SubframeConfigList', _SystemInformationBlockType2_mbsfn_SubframeConfigList), ('timeAlignmentTimerCommon', _SystemInformationBlockType2_timeAlignmentTimerCommon), ]) SystemInformationBlockType2._ext = [] #-----< AC-BarringConfig >-----# AC_BarringConfig = SEQ(name='AC-BarringConfig', mode=MODE_TYPE) _AC_BarringConfig_ac_BarringFactor = ENUM(name='ac-BarringFactor', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _AC_BarringConfig_ac_BarringFactor._cont = ASN1Dict([('p00', 0), ('p05', 1), ('p10', 2), ('p15', 3), ('p20', 4), ('p25', 5), ('p30', 6), ('p40', 7), ('p50', 8), ('p60', 9), ('p70', 10), ('p75', 11), ('p80', 12), ('p85', 13), ('p90', 14), ('p95', 15)]) _AC_BarringConfig_ac_BarringFactor._ext = None _AC_BarringConfig_ac_BarringTime = ENUM(name='ac-BarringTime', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _AC_BarringConfig_ac_BarringTime._cont = ASN1Dict([('s4', 0), ('s8', 1), ('s16', 2), ('s32', 3), ('s64', 4), ('s128', 5), ('s256', 6), ('s512', 7)]) _AC_BarringConfig_ac_BarringTime._ext = None _AC_BarringConfig_ac_BarringForSpecialAC = BIT_STR(name='ac-BarringForSpecialAC', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _AC_BarringConfig_ac_BarringForSpecialAC._const_sz = ASN1Set(rv=[5], rr=[], ev=None, er=[]) AC_BarringConfig._cont = ASN1Dict([ ('ac-BarringFactor', _AC_BarringConfig_ac_BarringFactor), ('ac-BarringTime', _AC_BarringConfig_ac_BarringTime), ('ac-BarringForSpecialAC', _AC_BarringConfig_ac_BarringForSpecialAC), ]) AC_BarringConfig._ext = None #-----< MBSFN-SubframeConfigList >-----# MBSFN_SubframeConfigList = SEQ_OF(name='MBSFN-SubframeConfigList', mode=MODE_TYPE) _MBSFN_SubframeConfigList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MBSFN-SubframeConfig'))) MBSFN_SubframeConfigList._cont = _MBSFN_SubframeConfigList__item_ MBSFN_SubframeConfigList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) #-----< MBSFN-SubframeConfig >-----# MBSFN_SubframeConfig = SEQ(name='MBSFN-SubframeConfig', mode=MODE_TYPE) _MBSFN_SubframeConfig_radioframeAllocationPeriod = ENUM(name='radioframeAllocationPeriod', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MBSFN_SubframeConfig_radioframeAllocationPeriod._cont = ASN1Dict([('n1', 0), ('n2', 1), ('n4', 2), ('n8', 3), ('n16', 4), ('n32', 5)]) _MBSFN_SubframeConfig_radioframeAllocationPeriod._ext = None _MBSFN_SubframeConfig_radioframeAllocationOffset = INT(name='radioframeAllocationOffset', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MBSFN_SubframeConfig_radioframeAllocationOffset._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=7)], ev=None, er=[]) _MBSFN_SubframeConfig_subframeAllocation = CHOICE(name='subframeAllocation', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __MBSFN_SubframeConfig_subframeAllocation_oneFrame = BIT_STR(name='oneFrame', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MBSFN_SubframeConfig_subframeAllocation_oneFrame._const_sz = ASN1Set(rv=[6], rr=[], ev=None, er=[]) __MBSFN_SubframeConfig_subframeAllocation_fourFrames = BIT_STR(name='fourFrames', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MBSFN_SubframeConfig_subframeAllocation_fourFrames._const_sz = ASN1Set(rv=[24], rr=[], ev=None, er=[]) _MBSFN_SubframeConfig_subframeAllocation._cont = ASN1Dict([ ('oneFrame', __MBSFN_SubframeConfig_subframeAllocation_oneFrame), ('fourFrames', __MBSFN_SubframeConfig_subframeAllocation_fourFrames), ]) _MBSFN_SubframeConfig_subframeAllocation._ext = None MBSFN_SubframeConfig._cont = ASN1Dict([ ('radioframeAllocationPeriod', _MBSFN_SubframeConfig_radioframeAllocationPeriod), ('radioframeAllocationOffset', _MBSFN_SubframeConfig_radioframeAllocationOffset), ('subframeAllocation', _MBSFN_SubframeConfig_subframeAllocation), ]) MBSFN_SubframeConfig._ext = None #-----< SystemInformationBlockType3 >-----# SystemInformationBlockType3 = SEQ(name='SystemInformationBlockType3', mode=MODE_TYPE) _SystemInformationBlockType3_cellReselectionInfoCommon = SEQ(name='cellReselectionInfoCommon', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformationBlockType3_cellReselectionInfoCommon_q_Hyst = ENUM(name='q-Hyst', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformationBlockType3_cellReselectionInfoCommon_q_Hyst._cont = ASN1Dict([('dB0', 0), ('dB1', 1), ('dB2', 2), ('dB3', 3), ('dB4', 4), ('dB5', 5), ('dB6', 6), ('dB8', 7), ('dB10', 8), ('dB12', 9), ('dB14', 10), ('dB16', 11), ('dB18', 12), ('dB20', 13), ('dB22', 14), ('dB24', 15)]) __SystemInformationBlockType3_cellReselectionInfoCommon_q_Hyst._ext = None __SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars = SEQ(name='speedStateReselectionPars', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) ___SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_mobilityStateParameters = SEQ(name='mobilityStateParameters', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MobilityStateParameters'))) ___SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF = SEQ(name='q-HystSF', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF_sf_Medium = ENUM(name='sf-Medium', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF_sf_Medium._cont = ASN1Dict([('dB-6', 0), ('dB-4', 1), ('dB-2', 2), ('dB0', 3)]) ____SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF_sf_Medium._ext = None ____SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF_sf_High = ENUM(name='sf-High', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF_sf_High._cont = ASN1Dict([('dB-6', 0), ('dB-4', 1), ('dB-2', 2), ('dB0', 3)]) ____SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF_sf_High._ext = None ___SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF._cont = ASN1Dict([ ('sf-Medium', ____SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF_sf_Medium), ('sf-High', ____SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF_sf_High), ]) ___SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF._ext = None __SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars._cont = ASN1Dict([ ('mobilityStateParameters', ___SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_mobilityStateParameters), ('q-HystSF', ___SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF), ]) __SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars._ext = None _SystemInformationBlockType3_cellReselectionInfoCommon._cont = ASN1Dict([ ('q-Hyst', __SystemInformationBlockType3_cellReselectionInfoCommon_q_Hyst), ('speedStateReselectionPars', __SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars), ]) _SystemInformationBlockType3_cellReselectionInfoCommon._ext = None _SystemInformationBlockType3_cellReselectionServingFreqInfo = SEQ(name='cellReselectionServingFreqInfo', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformationBlockType3_cellReselectionServingFreqInfo_s_NonIntraSearch = INT(name='s-NonIntraSearch', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReselectionThreshold')), opt=True) __SystemInformationBlockType3_cellReselectionServingFreqInfo_threshServingLow = INT(name='threshServingLow', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReselectionThreshold'))) __SystemInformationBlockType3_cellReselectionServingFreqInfo_cellReselectionPriority = INT(name='cellReselectionPriority', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionPriority'))) _SystemInformationBlockType3_cellReselectionServingFreqInfo._cont = ASN1Dict([ ('s-NonIntraSearch', __SystemInformationBlockType3_cellReselectionServingFreqInfo_s_NonIntraSearch), ('threshServingLow', __SystemInformationBlockType3_cellReselectionServingFreqInfo_threshServingLow), ('cellReselectionPriority', __SystemInformationBlockType3_cellReselectionServingFreqInfo_cellReselectionPriority), ]) _SystemInformationBlockType3_cellReselectionServingFreqInfo._ext = None _SystemInformationBlockType3_intraFreqCellReselectionInfo = SEQ(name='intraFreqCellReselectionInfo', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemInformationBlockType3_intraFreqCellReselectionInfo_q_RxLevMin = INT(name='q-RxLevMin', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Q-RxLevMin'))) __SystemInformationBlockType3_intraFreqCellReselectionInfo_p_Max = INT(name='p-Max', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'P-Max')), opt=True) __SystemInformationBlockType3_intraFreqCellReselectionInfo_s_IntraSearch = INT(name='s-IntraSearch', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReselectionThreshold')), opt=True) __SystemInformationBlockType3_intraFreqCellReselectionInfo_allowedMeasBandwidth = ENUM(name='allowedMeasBandwidth', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'AllowedMeasBandwidth')), opt=True) __SystemInformationBlockType3_intraFreqCellReselectionInfo_presenceAntennaPort1 = BOOL(name='presenceAntennaPort1', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PresenceAntennaPort1'))) __SystemInformationBlockType3_intraFreqCellReselectionInfo_neighCellConfig = BIT_STR(name='neighCellConfig', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'NeighCellConfig'))) __SystemInformationBlockType3_intraFreqCellReselectionInfo_t_ReselectionEUTRA = INT(name='t-ReselectionEUTRA', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'T-Reselection'))) __SystemInformationBlockType3_intraFreqCellReselectionInfo_t_ReselectionEUTRA_SF = SEQ(name='t-ReselectionEUTRA-SF', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SpeedStateScaleFactors')), opt=True) _SystemInformationBlockType3_intraFreqCellReselectionInfo._cont = ASN1Dict([ ('q-RxLevMin', __SystemInformationBlockType3_intraFreqCellReselectionInfo_q_RxLevMin), ('p-Max', __SystemInformationBlockType3_intraFreqCellReselectionInfo_p_Max), ('s-IntraSearch', __SystemInformationBlockType3_intraFreqCellReselectionInfo_s_IntraSearch), ('allowedMeasBandwidth', __SystemInformationBlockType3_intraFreqCellReselectionInfo_allowedMeasBandwidth), ('presenceAntennaPort1', __SystemInformationBlockType3_intraFreqCellReselectionInfo_presenceAntennaPort1), ('neighCellConfig', __SystemInformationBlockType3_intraFreqCellReselectionInfo_neighCellConfig), ('t-ReselectionEUTRA', __SystemInformationBlockType3_intraFreqCellReselectionInfo_t_ReselectionEUTRA), ('t-ReselectionEUTRA-SF', __SystemInformationBlockType3_intraFreqCellReselectionInfo_t_ReselectionEUTRA_SF), ]) _SystemInformationBlockType3_intraFreqCellReselectionInfo._ext = None SystemInformationBlockType3._cont = ASN1Dict([ ('cellReselectionInfoCommon', _SystemInformationBlockType3_cellReselectionInfoCommon), ('cellReselectionServingFreqInfo', _SystemInformationBlockType3_cellReselectionServingFreqInfo), ('intraFreqCellReselectionInfo', _SystemInformationBlockType3_intraFreqCellReselectionInfo), ]) SystemInformationBlockType3._ext = [] #-----< SystemInformationBlockType4 >-----# SystemInformationBlockType4 = SEQ(name='SystemInformationBlockType4', mode=MODE_TYPE) _SystemInformationBlockType4_intraFreqNeighCellList = SEQ_OF(name='intraFreqNeighCellList', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IntraFreqNeighCellList')), opt=True) _SystemInformationBlockType4_intraFreqBlackCellList = SEQ_OF(name='intraFreqBlackCellList', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IntraFreqBlackCellList')), opt=True) _SystemInformationBlockType4_csg_PhysCellIdRange = SEQ(name='csg-PhysCellIdRange', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdRange')), opt=True) SystemInformationBlockType4._cont = ASN1Dict([ ('intraFreqNeighCellList', _SystemInformationBlockType4_intraFreqNeighCellList), ('intraFreqBlackCellList', _SystemInformationBlockType4_intraFreqBlackCellList), ('csg-PhysCellIdRange', _SystemInformationBlockType4_csg_PhysCellIdRange), ]) SystemInformationBlockType4._ext = [] #-----< IntraFreqNeighCellList >-----# IntraFreqNeighCellList = SEQ_OF(name='IntraFreqNeighCellList', mode=MODE_TYPE) _IntraFreqNeighCellList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IntraFreqNeighCellInfo'))) IntraFreqNeighCellList._cont = _IntraFreqNeighCellList__item_ IntraFreqNeighCellList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< IntraFreqNeighCellInfo >-----# IntraFreqNeighCellInfo = SEQ(name='IntraFreqNeighCellInfo', mode=MODE_TYPE) _IntraFreqNeighCellInfo_physCellId = INT(name='physCellId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellId'))) _IntraFreqNeighCellInfo_q_OffsetCell = ENUM(name='q-OffsetCell', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Q-OffsetRange'))) IntraFreqNeighCellInfo._cont = ASN1Dict([ ('physCellId', _IntraFreqNeighCellInfo_physCellId), ('q-OffsetCell', _IntraFreqNeighCellInfo_q_OffsetCell), ]) IntraFreqNeighCellInfo._ext = [] #-----< IntraFreqBlackCellList >-----# IntraFreqBlackCellList = SEQ_OF(name='IntraFreqBlackCellList', mode=MODE_TYPE) _IntraFreqBlackCellList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdRange'))) IntraFreqBlackCellList._cont = _IntraFreqBlackCellList__item_ IntraFreqBlackCellList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< SystemInformationBlockType5 >-----# SystemInformationBlockType5 = SEQ(name='SystemInformationBlockType5', mode=MODE_TYPE) _SystemInformationBlockType5_interFreqCarrierFreqList = SEQ_OF(name='interFreqCarrierFreqList', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'InterFreqCarrierFreqList'))) SystemInformationBlockType5._cont = ASN1Dict([ ('interFreqCarrierFreqList', _SystemInformationBlockType5_interFreqCarrierFreqList), ]) SystemInformationBlockType5._ext = [] #-----< InterFreqCarrierFreqList >-----# InterFreqCarrierFreqList = SEQ_OF(name='InterFreqCarrierFreqList', mode=MODE_TYPE) _InterFreqCarrierFreqList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'InterFreqCarrierFreqInfo'))) InterFreqCarrierFreqList._cont = _InterFreqCarrierFreqList__item_ InterFreqCarrierFreqList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) #-----< InterFreqCarrierFreqInfo >-----# InterFreqCarrierFreqInfo = SEQ(name='InterFreqCarrierFreqInfo', mode=MODE_TYPE) _InterFreqCarrierFreqInfo_dl_CarrierFreq = INT(name='dl-CarrierFreq', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueEUTRA'))) _InterFreqCarrierFreqInfo_q_RxLevMin = INT(name='q-RxLevMin', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Q-RxLevMin'))) _InterFreqCarrierFreqInfo_p_Max = INT(name='p-Max', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'P-Max')), opt=True) _InterFreqCarrierFreqInfo_t_ReselectionEUTRA = INT(name='t-ReselectionEUTRA', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'T-Reselection'))) _InterFreqCarrierFreqInfo_t_ReselectionEUTRA_SF = SEQ(name='t-ReselectionEUTRA-SF', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SpeedStateScaleFactors')), opt=True) _InterFreqCarrierFreqInfo_threshX_High = INT(name='threshX-High', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReselectionThreshold'))) _InterFreqCarrierFreqInfo_threshX_Low = INT(name='threshX-Low', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReselectionThreshold'))) _InterFreqCarrierFreqInfo_allowedMeasBandwidth = ENUM(name='allowedMeasBandwidth', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'AllowedMeasBandwidth'))) _InterFreqCarrierFreqInfo_presenceAntennaPort1 = BOOL(name='presenceAntennaPort1', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PresenceAntennaPort1'))) _InterFreqCarrierFreqInfo_cellReselectionPriority = INT(name='cellReselectionPriority', mode=MODE_TYPE, tag=(9, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionPriority')), opt=True) _InterFreqCarrierFreqInfo_neighCellConfig = BIT_STR(name='neighCellConfig', mode=MODE_TYPE, tag=(10, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'NeighCellConfig'))) _InterFreqCarrierFreqInfo_q_OffsetFreq = ENUM(name='q-OffsetFreq', mode=MODE_TYPE, tag=(11, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Q-OffsetRange')), default='dB0') _InterFreqCarrierFreqInfo_interFreqNeighCellList = SEQ_OF(name='interFreqNeighCellList', mode=MODE_TYPE, tag=(12, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'InterFreqNeighCellList')), opt=True) _InterFreqCarrierFreqInfo_interFreqBlackCellList = SEQ_OF(name='interFreqBlackCellList', mode=MODE_TYPE, tag=(13, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'InterFreqBlackCellList')), opt=True) InterFreqCarrierFreqInfo._cont = ASN1Dict([ ('dl-CarrierFreq', _InterFreqCarrierFreqInfo_dl_CarrierFreq), ('q-RxLevMin', _InterFreqCarrierFreqInfo_q_RxLevMin), ('p-Max', _InterFreqCarrierFreqInfo_p_Max), ('t-ReselectionEUTRA', _InterFreqCarrierFreqInfo_t_ReselectionEUTRA), ('t-ReselectionEUTRA-SF', _InterFreqCarrierFreqInfo_t_ReselectionEUTRA_SF), ('threshX-High', _InterFreqCarrierFreqInfo_threshX_High), ('threshX-Low', _InterFreqCarrierFreqInfo_threshX_Low), ('allowedMeasBandwidth', _InterFreqCarrierFreqInfo_allowedMeasBandwidth), ('presenceAntennaPort1', _InterFreqCarrierFreqInfo_presenceAntennaPort1), ('cellReselectionPriority', _InterFreqCarrierFreqInfo_cellReselectionPriority), ('neighCellConfig', _InterFreqCarrierFreqInfo_neighCellConfig), ('q-OffsetFreq', _InterFreqCarrierFreqInfo_q_OffsetFreq), ('interFreqNeighCellList', _InterFreqCarrierFreqInfo_interFreqNeighCellList), ('interFreqBlackCellList', _InterFreqCarrierFreqInfo_interFreqBlackCellList), ]) InterFreqCarrierFreqInfo._ext = [] #-----< InterFreqNeighCellList >-----# InterFreqNeighCellList = SEQ_OF(name='InterFreqNeighCellList', mode=MODE_TYPE) _InterFreqNeighCellList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'InterFreqNeighCellInfo'))) InterFreqNeighCellList._cont = _InterFreqNeighCellList__item_ InterFreqNeighCellList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< InterFreqNeighCellInfo >-----# InterFreqNeighCellInfo = SEQ(name='InterFreqNeighCellInfo', mode=MODE_TYPE) _InterFreqNeighCellInfo_physCellId = INT(name='physCellId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellId'))) _InterFreqNeighCellInfo_q_OffsetCell = ENUM(name='q-OffsetCell', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Q-OffsetRange'))) InterFreqNeighCellInfo._cont = ASN1Dict([ ('physCellId', _InterFreqNeighCellInfo_physCellId), ('q-OffsetCell', _InterFreqNeighCellInfo_q_OffsetCell), ]) InterFreqNeighCellInfo._ext = None #-----< InterFreqBlackCellList >-----# InterFreqBlackCellList = SEQ_OF(name='InterFreqBlackCellList', mode=MODE_TYPE) _InterFreqBlackCellList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdRange'))) InterFreqBlackCellList._cont = _InterFreqBlackCellList__item_ InterFreqBlackCellList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< SystemInformationBlockType6 >-----# SystemInformationBlockType6 = SEQ(name='SystemInformationBlockType6', mode=MODE_TYPE) _SystemInformationBlockType6_carrierFreqListUTRA_FDD = SEQ_OF(name='carrierFreqListUTRA-FDD', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqListUTRA-FDD')), opt=True) _SystemInformationBlockType6_carrierFreqListUTRA_TDD = SEQ_OF(name='carrierFreqListUTRA-TDD', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqListUTRA-TDD')), opt=True) _SystemInformationBlockType6_t_ReselectionUTRA = INT(name='t-ReselectionUTRA', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'T-Reselection'))) _SystemInformationBlockType6_t_ReselectionUTRA_SF = SEQ(name='t-ReselectionUTRA-SF', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SpeedStateScaleFactors')), opt=True) SystemInformationBlockType6._cont = ASN1Dict([ ('carrierFreqListUTRA-FDD', _SystemInformationBlockType6_carrierFreqListUTRA_FDD), ('carrierFreqListUTRA-TDD', _SystemInformationBlockType6_carrierFreqListUTRA_TDD), ('t-ReselectionUTRA', _SystemInformationBlockType6_t_ReselectionUTRA), ('t-ReselectionUTRA-SF', _SystemInformationBlockType6_t_ReselectionUTRA_SF), ]) SystemInformationBlockType6._ext = [] #-----< CarrierFreqListUTRA-FDD >-----# CarrierFreqListUTRA_FDD = SEQ_OF(name='CarrierFreqListUTRA-FDD', mode=MODE_TYPE) _CarrierFreqListUTRA_FDD__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqUTRA-FDD'))) CarrierFreqListUTRA_FDD._cont = _CarrierFreqListUTRA_FDD__item_ CarrierFreqListUTRA_FDD._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< CarrierFreqUTRA-FDD >-----# CarrierFreqUTRA_FDD = SEQ(name='CarrierFreqUTRA-FDD', mode=MODE_TYPE) _CarrierFreqUTRA_FDD_carrierFreq = INT(name='carrierFreq', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueUTRA'))) _CarrierFreqUTRA_FDD_cellReselectionPriority = INT(name='cellReselectionPriority', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionPriority')), opt=True) _CarrierFreqUTRA_FDD_threshX_High = INT(name='threshX-High', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReselectionThreshold'))) _CarrierFreqUTRA_FDD_threshX_Low = INT(name='threshX-Low', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReselectionThreshold'))) _CarrierFreqUTRA_FDD_q_RxLevMin = INT(name='q-RxLevMin', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CarrierFreqUTRA_FDD_q_RxLevMin._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-60, ub=-13)], ev=None, er=[]) _CarrierFreqUTRA_FDD_p_MaxUTRA = INT(name='p-MaxUTRA', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CarrierFreqUTRA_FDD_p_MaxUTRA._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-50, ub=33)], ev=None, er=[]) _CarrierFreqUTRA_FDD_q_QualMin = INT(name='q-QualMin', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CarrierFreqUTRA_FDD_q_QualMin._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-24, ub=0)], ev=None, er=[]) CarrierFreqUTRA_FDD._cont = ASN1Dict([ ('carrierFreq', _CarrierFreqUTRA_FDD_carrierFreq), ('cellReselectionPriority', _CarrierFreqUTRA_FDD_cellReselectionPriority), ('threshX-High', _CarrierFreqUTRA_FDD_threshX_High), ('threshX-Low', _CarrierFreqUTRA_FDD_threshX_Low), ('q-RxLevMin', _CarrierFreqUTRA_FDD_q_RxLevMin), ('p-MaxUTRA', _CarrierFreqUTRA_FDD_p_MaxUTRA), ('q-QualMin', _CarrierFreqUTRA_FDD_q_QualMin), ]) CarrierFreqUTRA_FDD._ext = [] #-----< CarrierFreqListUTRA-TDD >-----# CarrierFreqListUTRA_TDD = SEQ_OF(name='CarrierFreqListUTRA-TDD', mode=MODE_TYPE) _CarrierFreqListUTRA_TDD__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqUTRA-TDD'))) CarrierFreqListUTRA_TDD._cont = _CarrierFreqListUTRA_TDD__item_ CarrierFreqListUTRA_TDD._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< CarrierFreqUTRA-TDD >-----# CarrierFreqUTRA_TDD = SEQ(name='CarrierFreqUTRA-TDD', mode=MODE_TYPE) _CarrierFreqUTRA_TDD_carrierFreq = INT(name='carrierFreq', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueUTRA'))) _CarrierFreqUTRA_TDD_cellReselectionPriority = INT(name='cellReselectionPriority', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionPriority')), opt=True) _CarrierFreqUTRA_TDD_threshX_High = INT(name='threshX-High', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReselectionThreshold'))) _CarrierFreqUTRA_TDD_threshX_Low = INT(name='threshX-Low', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReselectionThreshold'))) _CarrierFreqUTRA_TDD_q_RxLevMin = INT(name='q-RxLevMin', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CarrierFreqUTRA_TDD_q_RxLevMin._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-60, ub=-13)], ev=None, er=[]) _CarrierFreqUTRA_TDD_p_MaxUTRA = INT(name='p-MaxUTRA', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CarrierFreqUTRA_TDD_p_MaxUTRA._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-50, ub=33)], ev=None, er=[]) CarrierFreqUTRA_TDD._cont = ASN1Dict([ ('carrierFreq', _CarrierFreqUTRA_TDD_carrierFreq), ('cellReselectionPriority', _CarrierFreqUTRA_TDD_cellReselectionPriority), ('threshX-High', _CarrierFreqUTRA_TDD_threshX_High), ('threshX-Low', _CarrierFreqUTRA_TDD_threshX_Low), ('q-RxLevMin', _CarrierFreqUTRA_TDD_q_RxLevMin), ('p-MaxUTRA', _CarrierFreqUTRA_TDD_p_MaxUTRA), ]) CarrierFreqUTRA_TDD._ext = [] #-----< SystemInformationBlockType7 >-----# SystemInformationBlockType7 = SEQ(name='SystemInformationBlockType7', mode=MODE_TYPE) _SystemInformationBlockType7_t_ReselectionGERAN = INT(name='t-ReselectionGERAN', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'T-Reselection'))) _SystemInformationBlockType7_t_ReselectionGERAN_SF = SEQ(name='t-ReselectionGERAN-SF', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SpeedStateScaleFactors')), opt=True) _SystemInformationBlockType7_carrierFreqsInfoList = SEQ_OF(name='carrierFreqsInfoList', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqsInfoListGERAN')), opt=True) SystemInformationBlockType7._cont = ASN1Dict([ ('t-ReselectionGERAN', _SystemInformationBlockType7_t_ReselectionGERAN), ('t-ReselectionGERAN-SF', _SystemInformationBlockType7_t_ReselectionGERAN_SF), ('carrierFreqsInfoList', _SystemInformationBlockType7_carrierFreqsInfoList), ]) SystemInformationBlockType7._ext = [] #-----< CarrierFreqsInfoListGERAN >-----# CarrierFreqsInfoListGERAN = SEQ_OF(name='CarrierFreqsInfoListGERAN', mode=MODE_TYPE) _CarrierFreqsInfoListGERAN__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqsInfoGERAN'))) CarrierFreqsInfoListGERAN._cont = _CarrierFreqsInfoListGERAN__item_ CarrierFreqsInfoListGERAN._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< CarrierFreqsInfoGERAN >-----# CarrierFreqsInfoGERAN = SEQ(name='CarrierFreqsInfoGERAN', mode=MODE_TYPE) _CarrierFreqsInfoGERAN_carrierFreqs = SEQ(name='carrierFreqs', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqsGERAN'))) _CarrierFreqsInfoGERAN_commonInfo = SEQ(name='commonInfo', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __CarrierFreqsInfoGERAN_commonInfo_cellReselectionPriority = INT(name='cellReselectionPriority', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionPriority')), opt=True) __CarrierFreqsInfoGERAN_commonInfo_ncc_Permitted = BIT_STR(name='ncc-Permitted', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __CarrierFreqsInfoGERAN_commonInfo_ncc_Permitted._const_sz = ASN1Set(rv=[8], rr=[], ev=None, er=[]) __CarrierFreqsInfoGERAN_commonInfo_q_RxLevMin = INT(name='q-RxLevMin', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __CarrierFreqsInfoGERAN_commonInfo_q_RxLevMin._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=45)], ev=None, er=[]) __CarrierFreqsInfoGERAN_commonInfo_p_MaxGERAN = INT(name='p-MaxGERAN', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __CarrierFreqsInfoGERAN_commonInfo_p_MaxGERAN._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=39)], ev=None, er=[]) __CarrierFreqsInfoGERAN_commonInfo_threshX_High = INT(name='threshX-High', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReselectionThreshold'))) __CarrierFreqsInfoGERAN_commonInfo_threshX_Low = INT(name='threshX-Low', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReselectionThreshold'))) _CarrierFreqsInfoGERAN_commonInfo._cont = ASN1Dict([ ('cellReselectionPriority', __CarrierFreqsInfoGERAN_commonInfo_cellReselectionPriority), ('ncc-Permitted', __CarrierFreqsInfoGERAN_commonInfo_ncc_Permitted), ('q-RxLevMin', __CarrierFreqsInfoGERAN_commonInfo_q_RxLevMin), ('p-MaxGERAN', __CarrierFreqsInfoGERAN_commonInfo_p_MaxGERAN), ('threshX-High', __CarrierFreqsInfoGERAN_commonInfo_threshX_High), ('threshX-Low', __CarrierFreqsInfoGERAN_commonInfo_threshX_Low), ]) _CarrierFreqsInfoGERAN_commonInfo._ext = None CarrierFreqsInfoGERAN._cont = ASN1Dict([ ('carrierFreqs', _CarrierFreqsInfoGERAN_carrierFreqs), ('commonInfo', _CarrierFreqsInfoGERAN_commonInfo), ]) CarrierFreqsInfoGERAN._ext = [] #-----< SystemInformationBlockType8 >-----# SystemInformationBlockType8 = SEQ(name='SystemInformationBlockType8', mode=MODE_TYPE) _SystemInformationBlockType8_systemTimeInfo = SEQ(name='systemTimeInfo', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemTimeInfoCDMA2000')), opt=True) _SystemInformationBlockType8_searchWindowSize = INT(name='searchWindowSize', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _SystemInformationBlockType8_searchWindowSize._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=15)], ev=None, er=[]) _SystemInformationBlockType8_parametersHRPD = SEQ(name='parametersHRPD', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __SystemInformationBlockType8_parametersHRPD_preRegistrationInfoHRPD = SEQ(name='preRegistrationInfoHRPD', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PreRegistrationInfoHRPD'))) __SystemInformationBlockType8_parametersHRPD_cellReselectionParametersHRPD = SEQ(name='cellReselectionParametersHRPD', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionParametersCDMA2000')), opt=True) _SystemInformationBlockType8_parametersHRPD._cont = ASN1Dict([ ('preRegistrationInfoHRPD', __SystemInformationBlockType8_parametersHRPD_preRegistrationInfoHRPD), ('cellReselectionParametersHRPD', __SystemInformationBlockType8_parametersHRPD_cellReselectionParametersHRPD), ]) _SystemInformationBlockType8_parametersHRPD._ext = None _SystemInformationBlockType8_parameters1XRTT = SEQ(name='parameters1XRTT', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __SystemInformationBlockType8_parameters1XRTT_csfb_RegistrationParam1XRTT = SEQ(name='csfb-RegistrationParam1XRTT', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CSFB-RegistrationParam1XRTT')), opt=True) __SystemInformationBlockType8_parameters1XRTT_longCodeState1XRTT = BIT_STR(name='longCodeState1XRTT', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __SystemInformationBlockType8_parameters1XRTT_longCodeState1XRTT._const_sz = ASN1Set(rv=[42], rr=[], ev=None, er=[]) __SystemInformationBlockType8_parameters1XRTT_cellReselectionParameters1XRTT = SEQ(name='cellReselectionParameters1XRTT', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionParametersCDMA2000')), opt=True) _SystemInformationBlockType8_parameters1XRTT._cont = ASN1Dict([ ('csfb-RegistrationParam1XRTT', __SystemInformationBlockType8_parameters1XRTT_csfb_RegistrationParam1XRTT), ('longCodeState1XRTT', __SystemInformationBlockType8_parameters1XRTT_longCodeState1XRTT), ('cellReselectionParameters1XRTT', __SystemInformationBlockType8_parameters1XRTT_cellReselectionParameters1XRTT), ]) _SystemInformationBlockType8_parameters1XRTT._ext = None SystemInformationBlockType8._cont = ASN1Dict([ ('systemTimeInfo', _SystemInformationBlockType8_systemTimeInfo), ('searchWindowSize', _SystemInformationBlockType8_searchWindowSize), ('parametersHRPD', _SystemInformationBlockType8_parametersHRPD), ('parameters1XRTT', _SystemInformationBlockType8_parameters1XRTT), ]) SystemInformationBlockType8._ext = [] #-----< CellReselectionParametersCDMA2000 >-----# CellReselectionParametersCDMA2000 = SEQ(name='CellReselectionParametersCDMA2000', mode=MODE_TYPE) _CellReselectionParametersCDMA2000_bandClassList = SEQ_OF(name='bandClassList', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandClassListCDMA2000'))) _CellReselectionParametersCDMA2000_neighCellList = SEQ_OF(name='neighCellList', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'NeighCellListCDMA2000'))) _CellReselectionParametersCDMA2000_t_ReselectionCDMA2000 = INT(name='t-ReselectionCDMA2000', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'T-Reselection'))) _CellReselectionParametersCDMA2000_t_ReselectionCDMA2000_SF = SEQ(name='t-ReselectionCDMA2000-SF', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SpeedStateScaleFactors')), opt=True) CellReselectionParametersCDMA2000._cont = ASN1Dict([ ('bandClassList', _CellReselectionParametersCDMA2000_bandClassList), ('neighCellList', _CellReselectionParametersCDMA2000_neighCellList), ('t-ReselectionCDMA2000', _CellReselectionParametersCDMA2000_t_ReselectionCDMA2000), ('t-ReselectionCDMA2000-SF', _CellReselectionParametersCDMA2000_t_ReselectionCDMA2000_SF), ]) CellReselectionParametersCDMA2000._ext = None #-----< NeighCellListCDMA2000 >-----# NeighCellListCDMA2000 = SEQ_OF(name='NeighCellListCDMA2000', mode=MODE_TYPE) _NeighCellListCDMA2000__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'NeighCellCDMA2000'))) NeighCellListCDMA2000._cont = _NeighCellListCDMA2000__item_ NeighCellListCDMA2000._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< NeighCellCDMA2000 >-----# NeighCellCDMA2000 = SEQ(name='NeighCellCDMA2000', mode=MODE_TYPE) _NeighCellCDMA2000_bandClass = ENUM(name='bandClass', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandclassCDMA2000'))) _NeighCellCDMA2000_neighCellsPerFreqList = SEQ_OF(name='neighCellsPerFreqList', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'NeighCellsPerBandclassListCDMA2000'))) NeighCellCDMA2000._cont = ASN1Dict([ ('bandClass', _NeighCellCDMA2000_bandClass), ('neighCellsPerFreqList', _NeighCellCDMA2000_neighCellsPerFreqList), ]) NeighCellCDMA2000._ext = None #-----< NeighCellsPerBandclassListCDMA2000 >-----# NeighCellsPerBandclassListCDMA2000 = SEQ_OF(name='NeighCellsPerBandclassListCDMA2000', mode=MODE_TYPE) _NeighCellsPerBandclassListCDMA2000__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'NeighCellsPerBandclassCDMA2000'))) NeighCellsPerBandclassListCDMA2000._cont = _NeighCellsPerBandclassListCDMA2000__item_ NeighCellsPerBandclassListCDMA2000._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< NeighCellsPerBandclassCDMA2000 >-----# NeighCellsPerBandclassCDMA2000 = SEQ(name='NeighCellsPerBandclassCDMA2000', mode=MODE_TYPE) _NeighCellsPerBandclassCDMA2000_arfcn = INT(name='arfcn', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueCDMA2000'))) _NeighCellsPerBandclassCDMA2000_physCellIdList = SEQ_OF(name='physCellIdList', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdListCDMA2000'))) NeighCellsPerBandclassCDMA2000._cont = ASN1Dict([ ('arfcn', _NeighCellsPerBandclassCDMA2000_arfcn), ('physCellIdList', _NeighCellsPerBandclassCDMA2000_physCellIdList), ]) NeighCellsPerBandclassCDMA2000._ext = None #-----< PhysCellIdListCDMA2000 >-----# PhysCellIdListCDMA2000 = SEQ_OF(name='PhysCellIdListCDMA2000', mode=MODE_TYPE) _PhysCellIdListCDMA2000__item_ = INT(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdCDMA2000'))) PhysCellIdListCDMA2000._cont = _PhysCellIdListCDMA2000__item_ PhysCellIdListCDMA2000._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) #-----< BandClassListCDMA2000 >-----# BandClassListCDMA2000 = SEQ_OF(name='BandClassListCDMA2000', mode=MODE_TYPE) _BandClassListCDMA2000__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandClassInfoCDMA2000'))) BandClassListCDMA2000._cont = _BandClassListCDMA2000__item_ BandClassListCDMA2000._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< BandClassInfoCDMA2000 >-----# BandClassInfoCDMA2000 = SEQ(name='BandClassInfoCDMA2000', mode=MODE_TYPE) _BandClassInfoCDMA2000_bandClass = ENUM(name='bandClass', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandclassCDMA2000'))) _BandClassInfoCDMA2000_cellReselectionPriority = INT(name='cellReselectionPriority', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellReselectionPriority')), opt=True) _BandClassInfoCDMA2000_threshX_High = INT(name='threshX-High', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _BandClassInfoCDMA2000_threshX_High._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=63)], ev=None, er=[]) _BandClassInfoCDMA2000_threshX_Low = INT(name='threshX-Low', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _BandClassInfoCDMA2000_threshX_Low._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=63)], ev=None, er=[]) BandClassInfoCDMA2000._cont = ASN1Dict([ ('bandClass', _BandClassInfoCDMA2000_bandClass), ('cellReselectionPriority', _BandClassInfoCDMA2000_cellReselectionPriority), ('threshX-High', _BandClassInfoCDMA2000_threshX_High), ('threshX-Low', _BandClassInfoCDMA2000_threshX_Low), ]) BandClassInfoCDMA2000._ext = [] #-----< SystemInformationBlockType9 >-----# SystemInformationBlockType9 = SEQ(name='SystemInformationBlockType9', mode=MODE_TYPE) _SystemInformationBlockType9_hnb_Name = OCT_STR(name='hnb-Name', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _SystemInformationBlockType9_hnb_Name._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=48)], ev=None, er=[]) SystemInformationBlockType9._cont = ASN1Dict([ ('hnb-Name', _SystemInformationBlockType9_hnb_Name), ]) SystemInformationBlockType9._ext = [] #-----< SystemInformationBlockType10 >-----# SystemInformationBlockType10 = SEQ(name='SystemInformationBlockType10', mode=MODE_TYPE) _SystemInformationBlockType10_messageIdentifier = BIT_STR(name='messageIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SystemInformationBlockType10_messageIdentifier._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) _SystemInformationBlockType10_serialNumber = BIT_STR(name='serialNumber', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SystemInformationBlockType10_serialNumber._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) _SystemInformationBlockType10_warningType = OCT_STR(name='warningType', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SystemInformationBlockType10_warningType._const_sz = ASN1Set(rv=[2], rr=[], ev=None, er=[]) _SystemInformationBlockType10_warningSecurityInfo = OCT_STR(name='warningSecurityInfo', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _SystemInformationBlockType10_warningSecurityInfo._const_sz = ASN1Set(rv=[50], rr=[], ev=None, er=[]) SystemInformationBlockType10._cont = ASN1Dict([ ('messageIdentifier', _SystemInformationBlockType10_messageIdentifier), ('serialNumber', _SystemInformationBlockType10_serialNumber), ('warningType', _SystemInformationBlockType10_warningType), ('warningSecurityInfo', _SystemInformationBlockType10_warningSecurityInfo), ]) SystemInformationBlockType10._ext = [] #-----< SystemInformationBlockType11 >-----# SystemInformationBlockType11 = SEQ(name='SystemInformationBlockType11', mode=MODE_TYPE) _SystemInformationBlockType11_messageIdentifier = BIT_STR(name='messageIdentifier', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SystemInformationBlockType11_messageIdentifier._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) _SystemInformationBlockType11_serialNumber = BIT_STR(name='serialNumber', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SystemInformationBlockType11_serialNumber._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) _SystemInformationBlockType11_warningMessageSegmentType = ENUM(name='warningMessageSegmentType', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SystemInformationBlockType11_warningMessageSegmentType._cont = ASN1Dict([('notLastSegment', 0), ('lastSegment', 1)]) _SystemInformationBlockType11_warningMessageSegmentType._ext = None _SystemInformationBlockType11_warningMessageSegmentNumber = INT(name='warningMessageSegmentNumber', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SystemInformationBlockType11_warningMessageSegmentNumber._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=63)], ev=None, er=[]) _SystemInformationBlockType11_warningMessageSegment = OCT_STR(name='warningMessageSegment', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SystemInformationBlockType11_dataCodingScheme = OCT_STR(name='dataCodingScheme', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _SystemInformationBlockType11_dataCodingScheme._const_sz = ASN1Set(rv=[1], rr=[], ev=None, er=[]) SystemInformationBlockType11._cont = ASN1Dict([ ('messageIdentifier', _SystemInformationBlockType11_messageIdentifier), ('serialNumber', _SystemInformationBlockType11_serialNumber), ('warningMessageSegmentType', _SystemInformationBlockType11_warningMessageSegmentType), ('warningMessageSegmentNumber', _SystemInformationBlockType11_warningMessageSegmentNumber), ('warningMessageSegment', _SystemInformationBlockType11_warningMessageSegment), ('dataCodingScheme', _SystemInformationBlockType11_dataCodingScheme), ]) SystemInformationBlockType11._ext = [] #-----< AntennaInfoCommon >-----# AntennaInfoCommon = SEQ(name='AntennaInfoCommon', mode=MODE_TYPE) _AntennaInfoCommon_antennaPortsCount = ENUM(name='antennaPortsCount', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _AntennaInfoCommon_antennaPortsCount._cont = ASN1Dict([('an1', 0), ('an2', 1), ('an4', 2), ('spare1', 3)]) _AntennaInfoCommon_antennaPortsCount._ext = None AntennaInfoCommon._cont = ASN1Dict([ ('antennaPortsCount', _AntennaInfoCommon_antennaPortsCount), ]) AntennaInfoCommon._ext = None #-----< AntennaInfoDedicated >-----# AntennaInfoDedicated = SEQ(name='AntennaInfoDedicated', mode=MODE_TYPE) _AntennaInfoDedicated_transmissionMode = ENUM(name='transmissionMode', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _AntennaInfoDedicated_transmissionMode._cont = ASN1Dict([('tm1', 0), ('tm2', 1), ('tm3', 2), ('tm4', 3), ('tm5', 4), ('tm6', 5), ('tm7', 6), ('spare1', 7)]) _AntennaInfoDedicated_transmissionMode._ext = None _AntennaInfoDedicated_codebookSubsetRestriction = CHOICE(name='codebookSubsetRestriction', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT), opt=True) __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm3 = BIT_STR(name='n2TxAntenna-tm3', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm3._const_sz = ASN1Set(rv=[2], rr=[], ev=None, er=[]) __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm3 = BIT_STR(name='n4TxAntenna-tm3', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm3._const_sz = ASN1Set(rv=[4], rr=[], ev=None, er=[]) __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm4 = BIT_STR(name='n2TxAntenna-tm4', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm4._const_sz = ASN1Set(rv=[6], rr=[], ev=None, er=[]) __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm4 = BIT_STR(name='n4TxAntenna-tm4', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm4._const_sz = ASN1Set(rv=[64], rr=[], ev=None, er=[]) __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm5 = BIT_STR(name='n2TxAntenna-tm5', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm5._const_sz = ASN1Set(rv=[4], rr=[], ev=None, er=[]) __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm5 = BIT_STR(name='n4TxAntenna-tm5', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm5._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm6 = BIT_STR(name='n2TxAntenna-tm6', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm6._const_sz = ASN1Set(rv=[4], rr=[], ev=None, er=[]) __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm6 = BIT_STR(name='n4TxAntenna-tm6', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm6._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) _AntennaInfoDedicated_codebookSubsetRestriction._cont = ASN1Dict([ ('n2TxAntenna-tm3', __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm3), ('n4TxAntenna-tm3', __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm3), ('n2TxAntenna-tm4', __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm4), ('n4TxAntenna-tm4', __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm4), ('n2TxAntenna-tm5', __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm5), ('n4TxAntenna-tm5', __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm5), ('n2TxAntenna-tm6', __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm6), ('n4TxAntenna-tm6', __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm6), ]) _AntennaInfoDedicated_codebookSubsetRestriction._ext = None _AntennaInfoDedicated_ue_TransmitAntennaSelection = CHOICE(name='ue-TransmitAntennaSelection', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __AntennaInfoDedicated_ue_TransmitAntennaSelection_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __AntennaInfoDedicated_ue_TransmitAntennaSelection_setup = ENUM(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __AntennaInfoDedicated_ue_TransmitAntennaSelection_setup._cont = ASN1Dict([('closedLoop', 0), ('openLoop', 1)]) __AntennaInfoDedicated_ue_TransmitAntennaSelection_setup._ext = None _AntennaInfoDedicated_ue_TransmitAntennaSelection._cont = ASN1Dict([ ('release', __AntennaInfoDedicated_ue_TransmitAntennaSelection_release), ('setup', __AntennaInfoDedicated_ue_TransmitAntennaSelection_setup), ]) _AntennaInfoDedicated_ue_TransmitAntennaSelection._ext = None AntennaInfoDedicated._cont = ASN1Dict([ ('transmissionMode', _AntennaInfoDedicated_transmissionMode), ('codebookSubsetRestriction', _AntennaInfoDedicated_codebookSubsetRestriction), ('ue-TransmitAntennaSelection', _AntennaInfoDedicated_ue_TransmitAntennaSelection), ]) AntennaInfoDedicated._ext = None #-----< CQI-ReportConfig >-----# CQI_ReportConfig = SEQ(name='CQI-ReportConfig', mode=MODE_TYPE) _CQI_ReportConfig_cqi_ReportModeAperiodic = ENUM(name='cqi-ReportModeAperiodic', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _CQI_ReportConfig_cqi_ReportModeAperiodic._cont = ASN1Dict([('rm12', 0), ('rm20', 1), ('rm22', 2), ('rm30', 3), ('rm31', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]) _CQI_ReportConfig_cqi_ReportModeAperiodic._ext = None _CQI_ReportConfig_nomPDSCH_RS_EPRE_Offset = INT(name='nomPDSCH-RS-EPRE-Offset', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CQI_ReportConfig_nomPDSCH_RS_EPRE_Offset._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-1, ub=6)], ev=None, er=[]) _CQI_ReportConfig_cqi_ReportPeriodic = CHOICE(name='cqi-ReportPeriodic', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CQI-ReportPeriodic')), opt=True) CQI_ReportConfig._cont = ASN1Dict([ ('cqi-ReportModeAperiodic', _CQI_ReportConfig_cqi_ReportModeAperiodic), ('nomPDSCH-RS-EPRE-Offset', _CQI_ReportConfig_nomPDSCH_RS_EPRE_Offset), ('cqi-ReportPeriodic', _CQI_ReportConfig_cqi_ReportPeriodic), ]) CQI_ReportConfig._ext = None #-----< CQI-ReportPeriodic >-----# CQI_ReportPeriodic = CHOICE(name='CQI-ReportPeriodic', mode=MODE_TYPE) _CQI_ReportPeriodic_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CQI_ReportPeriodic_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __CQI_ReportPeriodic_setup_cqi_PUCCH_ResourceIndex = INT(name='cqi-PUCCH-ResourceIndex', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __CQI_ReportPeriodic_setup_cqi_PUCCH_ResourceIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=1185)], ev=None, er=[]) __CQI_ReportPeriodic_setup_cqi_pmi_ConfigIndex = INT(name='cqi-pmi-ConfigIndex', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __CQI_ReportPeriodic_setup_cqi_pmi_ConfigIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=1023)], ev=None, er=[]) __CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic = CHOICE(name='cqi-FormatIndicatorPeriodic', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic_widebandCQI = NULL(name='widebandCQI', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic_subbandCQI = SEQ(name='subbandCQI', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic_subbandCQI_k = INT(name='k', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic_subbandCQI_k._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=4)], ev=None, er=[]) ___CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic_subbandCQI._cont = ASN1Dict([ ('k', ____CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic_subbandCQI_k), ]) ___CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic_subbandCQI._ext = None __CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic._cont = ASN1Dict([ ('widebandCQI', ___CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic_widebandCQI), ('subbandCQI', ___CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic_subbandCQI), ]) __CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic._ext = None __CQI_ReportPeriodic_setup_ri_ConfigIndex = INT(name='ri-ConfigIndex', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __CQI_ReportPeriodic_setup_ri_ConfigIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=1023)], ev=None, er=[]) __CQI_ReportPeriodic_setup_simultaneousAckNackAndCQI = BOOL(name='simultaneousAckNackAndCQI', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CQI_ReportPeriodic_setup._cont = ASN1Dict([ ('cqi-PUCCH-ResourceIndex', __CQI_ReportPeriodic_setup_cqi_PUCCH_ResourceIndex), ('cqi-pmi-ConfigIndex', __CQI_ReportPeriodic_setup_cqi_pmi_ConfigIndex), ('cqi-FormatIndicatorPeriodic', __CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic), ('ri-ConfigIndex', __CQI_ReportPeriodic_setup_ri_ConfigIndex), ('simultaneousAckNackAndCQI', __CQI_ReportPeriodic_setup_simultaneousAckNackAndCQI), ]) _CQI_ReportPeriodic_setup._ext = None CQI_ReportPeriodic._cont = ASN1Dict([ ('release', _CQI_ReportPeriodic_release), ('setup', _CQI_ReportPeriodic_setup), ]) CQI_ReportPeriodic._ext = None #-----< DRB-Identity >-----# DRB_Identity = INT(name='DRB-Identity', mode=MODE_TYPE) DRB_Identity._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< LogicalChannelConfig >-----# LogicalChannelConfig = SEQ(name='LogicalChannelConfig', mode=MODE_TYPE) _LogicalChannelConfig_ul_SpecificParameters = SEQ(name='ul-SpecificParameters', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __LogicalChannelConfig_ul_SpecificParameters_priority = INT(name='priority', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __LogicalChannelConfig_ul_SpecificParameters_priority._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) __LogicalChannelConfig_ul_SpecificParameters_prioritisedBitRate = ENUM(name='prioritisedBitRate', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __LogicalChannelConfig_ul_SpecificParameters_prioritisedBitRate._cont = ASN1Dict([('kBps0', 0), ('kBps8', 1), ('kBps16', 2), ('kBps32', 3), ('kBps64', 4), ('kBps128', 5), ('kBps256', 6), ('infinity', 7), ('spare8', 8), ('spare7', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]) __LogicalChannelConfig_ul_SpecificParameters_prioritisedBitRate._ext = None __LogicalChannelConfig_ul_SpecificParameters_bucketSizeDuration = ENUM(name='bucketSizeDuration', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __LogicalChannelConfig_ul_SpecificParameters_bucketSizeDuration._cont = ASN1Dict([('ms50', 0), ('ms100', 1), ('ms150', 2), ('ms300', 3), ('ms500', 4), ('ms1000', 5), ('spare2', 6), ('spare1', 7)]) __LogicalChannelConfig_ul_SpecificParameters_bucketSizeDuration._ext = None __LogicalChannelConfig_ul_SpecificParameters_logicalChannelGroup = INT(name='logicalChannelGroup', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __LogicalChannelConfig_ul_SpecificParameters_logicalChannelGroup._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=3)], ev=None, er=[]) _LogicalChannelConfig_ul_SpecificParameters._cont = ASN1Dict([ ('priority', __LogicalChannelConfig_ul_SpecificParameters_priority), ('prioritisedBitRate', __LogicalChannelConfig_ul_SpecificParameters_prioritisedBitRate), ('bucketSizeDuration', __LogicalChannelConfig_ul_SpecificParameters_bucketSizeDuration), ('logicalChannelGroup', __LogicalChannelConfig_ul_SpecificParameters_logicalChannelGroup), ]) _LogicalChannelConfig_ul_SpecificParameters._ext = None LogicalChannelConfig._cont = ASN1Dict([ ('ul-SpecificParameters', _LogicalChannelConfig_ul_SpecificParameters), ]) LogicalChannelConfig._ext = [] #-----< MAC-MainConfig >-----# MAC_MainConfig = SEQ(name='MAC-MainConfig', mode=MODE_TYPE) _MAC_MainConfig_ul_SCH_Config = SEQ(name='ul-SCH-Config', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __MAC_MainConfig_ul_SCH_Config_maxHARQ_Tx = ENUM(name='maxHARQ-Tx', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __MAC_MainConfig_ul_SCH_Config_maxHARQ_Tx._cont = ASN1Dict([('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n5', 4), ('n6', 5), ('n7', 6), ('n8', 7), ('n10', 8), ('n12', 9), ('n16', 10), ('n20', 11), ('n24', 12), ('n28', 13), ('spare2', 14), ('spare1', 15)]) __MAC_MainConfig_ul_SCH_Config_maxHARQ_Tx._ext = None __MAC_MainConfig_ul_SCH_Config_periodicBSR_Timer = ENUM(name='periodicBSR-Timer', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __MAC_MainConfig_ul_SCH_Config_periodicBSR_Timer._cont = ASN1Dict([('sf5', 0), ('sf10', 1), ('sf16', 2), ('sf20', 3), ('sf32', 4), ('sf40', 5), ('sf64', 6), ('sf80', 7), ('sf128', 8), ('sf160', 9), ('sf320', 10), ('sf640', 11), ('sf1280', 12), ('sf2560', 13), ('infinity', 14), ('spare1', 15)]) __MAC_MainConfig_ul_SCH_Config_periodicBSR_Timer._ext = None __MAC_MainConfig_ul_SCH_Config_retxBSR_Timer = ENUM(name='retxBSR-Timer', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MAC_MainConfig_ul_SCH_Config_retxBSR_Timer._cont = ASN1Dict([('sf320', 0), ('sf640', 1), ('sf1280', 2), ('sf2560', 3), ('sf5120', 4), ('sf10240', 5), ('spare2', 6), ('spare1', 7)]) __MAC_MainConfig_ul_SCH_Config_retxBSR_Timer._ext = None __MAC_MainConfig_ul_SCH_Config_ttiBundling = BOOL(name='ttiBundling', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MAC_MainConfig_ul_SCH_Config._cont = ASN1Dict([ ('maxHARQ-Tx', __MAC_MainConfig_ul_SCH_Config_maxHARQ_Tx), ('periodicBSR-Timer', __MAC_MainConfig_ul_SCH_Config_periodicBSR_Timer), ('retxBSR-Timer', __MAC_MainConfig_ul_SCH_Config_retxBSR_Timer), ('ttiBundling', __MAC_MainConfig_ul_SCH_Config_ttiBundling), ]) _MAC_MainConfig_ul_SCH_Config._ext = None _MAC_MainConfig_drx_Config = CHOICE(name='drx-Config', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DRX-Config')), opt=True) _MAC_MainConfig_timeAlignmentTimerDedicated = ENUM(name='timeAlignmentTimerDedicated', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'TimeAlignmentTimer'))) _MAC_MainConfig_phr_Config = CHOICE(name='phr-Config', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_EXPLICIT), opt=True) __MAC_MainConfig_phr_Config_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MAC_MainConfig_phr_Config_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MAC_MainConfig_phr_Config_setup_periodicPHR_Timer = ENUM(name='periodicPHR-Timer', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MAC_MainConfig_phr_Config_setup_periodicPHR_Timer._cont = ASN1Dict([('sf10', 0), ('sf20', 1), ('sf50', 2), ('sf100', 3), ('sf200', 4), ('sf500', 5), ('sf1000', 6), ('infinity', 7)]) ___MAC_MainConfig_phr_Config_setup_periodicPHR_Timer._ext = None ___MAC_MainConfig_phr_Config_setup_prohibitPHR_Timer = ENUM(name='prohibitPHR-Timer', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MAC_MainConfig_phr_Config_setup_prohibitPHR_Timer._cont = ASN1Dict([('sf0', 0), ('sf10', 1), ('sf20', 2), ('sf50', 3), ('sf100', 4), ('sf200', 5), ('sf500', 6), ('sf1000', 7)]) ___MAC_MainConfig_phr_Config_setup_prohibitPHR_Timer._ext = None ___MAC_MainConfig_phr_Config_setup_dl_PathlossChange = ENUM(name='dl-PathlossChange', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MAC_MainConfig_phr_Config_setup_dl_PathlossChange._cont = ASN1Dict([('dB1', 0), ('dB3', 1), ('dB6', 2), ('infinity', 3)]) ___MAC_MainConfig_phr_Config_setup_dl_PathlossChange._ext = None __MAC_MainConfig_phr_Config_setup._cont = ASN1Dict([ ('periodicPHR-Timer', ___MAC_MainConfig_phr_Config_setup_periodicPHR_Timer), ('prohibitPHR-Timer', ___MAC_MainConfig_phr_Config_setup_prohibitPHR_Timer), ('dl-PathlossChange', ___MAC_MainConfig_phr_Config_setup_dl_PathlossChange), ]) __MAC_MainConfig_phr_Config_setup._ext = None _MAC_MainConfig_phr_Config._cont = ASN1Dict([ ('release', __MAC_MainConfig_phr_Config_release), ('setup', __MAC_MainConfig_phr_Config_setup), ]) _MAC_MainConfig_phr_Config._ext = None MAC_MainConfig._cont = ASN1Dict([ ('ul-SCH-Config', _MAC_MainConfig_ul_SCH_Config), ('drx-Config', _MAC_MainConfig_drx_Config), ('timeAlignmentTimerDedicated', _MAC_MainConfig_timeAlignmentTimerDedicated), ('phr-Config', _MAC_MainConfig_phr_Config), ]) MAC_MainConfig._ext = [] #-----< DRX-Config >-----# DRX_Config = CHOICE(name='DRX-Config', mode=MODE_TYPE) _DRX_Config_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DRX_Config_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __DRX_Config_setup_onDurationTimer = ENUM(name='onDurationTimer', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __DRX_Config_setup_onDurationTimer._cont = ASN1Dict([('psf1', 0), ('psf2', 1), ('psf3', 2), ('psf4', 3), ('psf5', 4), ('psf6', 5), ('psf8', 6), ('psf10', 7), ('psf20', 8), ('psf30', 9), ('psf40', 10), ('psf50', 11), ('psf60', 12), ('psf80', 13), ('psf100', 14), ('psf200', 15)]) __DRX_Config_setup_onDurationTimer._ext = None __DRX_Config_setup_drx_InactivityTimer = ENUM(name='drx-InactivityTimer', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __DRX_Config_setup_drx_InactivityTimer._cont = ASN1Dict([('psf1', 0), ('psf2', 1), ('psf3', 2), ('psf4', 3), ('psf5', 4), ('psf6', 5), ('psf8', 6), ('psf10', 7), ('psf20', 8), ('psf30', 9), ('psf40', 10), ('psf50', 11), ('psf60', 12), ('psf80', 13), ('psf100', 14), ('psf200', 15), ('psf300', 16), ('psf500', 17), ('psf750', 18), ('psf1280', 19), ('psf1920', 20), ('psf2560', 21), ('spare10', 22), ('spare9', 23), ('spare8', 24), ('spare7', 25), ('spare6', 26), ('spare5', 27), ('spare4', 28), ('spare3', 29), ('spare2', 30), ('spare1', 31)]) __DRX_Config_setup_drx_InactivityTimer._ext = None __DRX_Config_setup_drx_RetransmissionTimer = ENUM(name='drx-RetransmissionTimer', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __DRX_Config_setup_drx_RetransmissionTimer._cont = ASN1Dict([('psf1', 0), ('psf2', 1), ('psf4', 2), ('psf6', 3), ('psf8', 4), ('psf16', 5), ('psf24', 6), ('psf33', 7)]) __DRX_Config_setup_drx_RetransmissionTimer._ext = None __DRX_Config_setup_longDRX_CycleStartOffset = CHOICE(name='longDRX-CycleStartOffset', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf10 = INT(name='sf10', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf10._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=9)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf20 = INT(name='sf20', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf20._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=19)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf32 = INT(name='sf32', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf32._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=31)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf40 = INT(name='sf40', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf40._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=39)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf64 = INT(name='sf64', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf64._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=63)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf80 = INT(name='sf80', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf80._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=79)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf128 = INT(name='sf128', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf128._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=127)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf160 = INT(name='sf160', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf160._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=159)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf256 = INT(name='sf256', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf256._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=255)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf320 = INT(name='sf320', mode=MODE_TYPE, tag=(9, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf320._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=319)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf512 = INT(name='sf512', mode=MODE_TYPE, tag=(10, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf512._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=511)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf640 = INT(name='sf640', mode=MODE_TYPE, tag=(11, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf640._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=639)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf1024 = INT(name='sf1024', mode=MODE_TYPE, tag=(12, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf1024._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=1023)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf1280 = INT(name='sf1280', mode=MODE_TYPE, tag=(13, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf1280._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=1279)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf2048 = INT(name='sf2048', mode=MODE_TYPE, tag=(14, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf2048._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=2047)], ev=None, er=[]) ___DRX_Config_setup_longDRX_CycleStartOffset_sf2560 = INT(name='sf2560', mode=MODE_TYPE, tag=(15, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_longDRX_CycleStartOffset_sf2560._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=2559)], ev=None, er=[]) __DRX_Config_setup_longDRX_CycleStartOffset._cont = ASN1Dict([ ('sf10', ___DRX_Config_setup_longDRX_CycleStartOffset_sf10), ('sf20', ___DRX_Config_setup_longDRX_CycleStartOffset_sf20), ('sf32', ___DRX_Config_setup_longDRX_CycleStartOffset_sf32), ('sf40', ___DRX_Config_setup_longDRX_CycleStartOffset_sf40), ('sf64', ___DRX_Config_setup_longDRX_CycleStartOffset_sf64), ('sf80', ___DRX_Config_setup_longDRX_CycleStartOffset_sf80), ('sf128', ___DRX_Config_setup_longDRX_CycleStartOffset_sf128), ('sf160', ___DRX_Config_setup_longDRX_CycleStartOffset_sf160), ('sf256', ___DRX_Config_setup_longDRX_CycleStartOffset_sf256), ('sf320', ___DRX_Config_setup_longDRX_CycleStartOffset_sf320), ('sf512', ___DRX_Config_setup_longDRX_CycleStartOffset_sf512), ('sf640', ___DRX_Config_setup_longDRX_CycleStartOffset_sf640), ('sf1024', ___DRX_Config_setup_longDRX_CycleStartOffset_sf1024), ('sf1280', ___DRX_Config_setup_longDRX_CycleStartOffset_sf1280), ('sf2048', ___DRX_Config_setup_longDRX_CycleStartOffset_sf2048), ('sf2560', ___DRX_Config_setup_longDRX_CycleStartOffset_sf2560), ]) __DRX_Config_setup_longDRX_CycleStartOffset._ext = None __DRX_Config_setup_shortDRX = SEQ(name='shortDRX', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) ___DRX_Config_setup_shortDRX_shortDRX_Cycle = ENUM(name='shortDRX-Cycle', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_shortDRX_shortDRX_Cycle._cont = ASN1Dict([('sf2', 0), ('sf5', 1), ('sf8', 2), ('sf10', 3), ('sf16', 4), ('sf20', 5), ('sf32', 6), ('sf40', 7), ('sf64', 8), ('sf80', 9), ('sf128', 10), ('sf160', 11), ('sf256', 12), ('sf320', 13), ('sf512', 14), ('sf640', 15)]) ___DRX_Config_setup_shortDRX_shortDRX_Cycle._ext = None ___DRX_Config_setup_shortDRX_drxShortCycleTimer = INT(name='drxShortCycleTimer', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___DRX_Config_setup_shortDRX_drxShortCycleTimer._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) __DRX_Config_setup_shortDRX._cont = ASN1Dict([ ('shortDRX-Cycle', ___DRX_Config_setup_shortDRX_shortDRX_Cycle), ('drxShortCycleTimer', ___DRX_Config_setup_shortDRX_drxShortCycleTimer), ]) __DRX_Config_setup_shortDRX._ext = None _DRX_Config_setup._cont = ASN1Dict([ ('onDurationTimer', __DRX_Config_setup_onDurationTimer), ('drx-InactivityTimer', __DRX_Config_setup_drx_InactivityTimer), ('drx-RetransmissionTimer', __DRX_Config_setup_drx_RetransmissionTimer), ('longDRX-CycleStartOffset', __DRX_Config_setup_longDRX_CycleStartOffset), ('shortDRX', __DRX_Config_setup_shortDRX), ]) _DRX_Config_setup._ext = None DRX_Config._cont = ASN1Dict([ ('release', _DRX_Config_release), ('setup', _DRX_Config_setup), ]) DRX_Config._ext = None #-----< PDCP-Config >-----# PDCP_Config = SEQ(name='PDCP-Config', mode=MODE_TYPE) _PDCP_Config_discardTimer = ENUM(name='discardTimer', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _PDCP_Config_discardTimer._cont = ASN1Dict([('ms50', 0), ('ms100', 1), ('ms150', 2), ('ms300', 3), ('ms500', 4), ('ms750', 5), ('ms1500', 6), ('infinity', 7)]) _PDCP_Config_discardTimer._ext = None _PDCP_Config_rlc_AM = SEQ(name='rlc-AM', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __PDCP_Config_rlc_AM_statusReportRequired = BOOL(name='statusReportRequired', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PDCP_Config_rlc_AM._cont = ASN1Dict([ ('statusReportRequired', __PDCP_Config_rlc_AM_statusReportRequired), ]) _PDCP_Config_rlc_AM._ext = None _PDCP_Config_rlc_UM = SEQ(name='rlc-UM', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __PDCP_Config_rlc_UM_pdcp_SN_Size = ENUM(name='pdcp-SN-Size', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PDCP_Config_rlc_UM_pdcp_SN_Size._cont = ASN1Dict([('len7bits', 0), ('len12bits', 1)]) __PDCP_Config_rlc_UM_pdcp_SN_Size._ext = None _PDCP_Config_rlc_UM._cont = ASN1Dict([ ('pdcp-SN-Size', __PDCP_Config_rlc_UM_pdcp_SN_Size), ]) _PDCP_Config_rlc_UM._ext = None _PDCP_Config_headerCompression = CHOICE(name='headerCompression', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __PDCP_Config_headerCompression_notUsed = NULL(name='notUsed', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PDCP_Config_headerCompression_rohc = SEQ(name='rohc', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___PDCP_Config_headerCompression_rohc_maxCID = INT(name='maxCID', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), default=15) ___PDCP_Config_headerCompression_rohc_maxCID._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16383)], ev=None, er=[]) ___PDCP_Config_headerCompression_rohc_profiles = SEQ(name='profiles', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____PDCP_Config_headerCompression_rohc_profiles_profile0x0001 = BOOL(name='profile0x0001', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____PDCP_Config_headerCompression_rohc_profiles_profile0x0002 = BOOL(name='profile0x0002', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____PDCP_Config_headerCompression_rohc_profiles_profile0x0003 = BOOL(name='profile0x0003', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____PDCP_Config_headerCompression_rohc_profiles_profile0x0004 = BOOL(name='profile0x0004', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____PDCP_Config_headerCompression_rohc_profiles_profile0x0006 = BOOL(name='profile0x0006', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____PDCP_Config_headerCompression_rohc_profiles_profile0x0101 = BOOL(name='profile0x0101', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____PDCP_Config_headerCompression_rohc_profiles_profile0x0102 = BOOL(name='profile0x0102', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____PDCP_Config_headerCompression_rohc_profiles_profile0x0103 = BOOL(name='profile0x0103', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____PDCP_Config_headerCompression_rohc_profiles_profile0x0104 = BOOL(name='profile0x0104', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___PDCP_Config_headerCompression_rohc_profiles._cont = ASN1Dict([ ('profile0x0001', ____PDCP_Config_headerCompression_rohc_profiles_profile0x0001), ('profile0x0002', ____PDCP_Config_headerCompression_rohc_profiles_profile0x0002), ('profile0x0003', ____PDCP_Config_headerCompression_rohc_profiles_profile0x0003), ('profile0x0004', ____PDCP_Config_headerCompression_rohc_profiles_profile0x0004), ('profile0x0006', ____PDCP_Config_headerCompression_rohc_profiles_profile0x0006), ('profile0x0101', ____PDCP_Config_headerCompression_rohc_profiles_profile0x0101), ('profile0x0102', ____PDCP_Config_headerCompression_rohc_profiles_profile0x0102), ('profile0x0103', ____PDCP_Config_headerCompression_rohc_profiles_profile0x0103), ('profile0x0104', ____PDCP_Config_headerCompression_rohc_profiles_profile0x0104), ]) ___PDCP_Config_headerCompression_rohc_profiles._ext = None __PDCP_Config_headerCompression_rohc._cont = ASN1Dict([ ('maxCID', ___PDCP_Config_headerCompression_rohc_maxCID), ('profiles', ___PDCP_Config_headerCompression_rohc_profiles), ]) __PDCP_Config_headerCompression_rohc._ext = [] _PDCP_Config_headerCompression._cont = ASN1Dict([ ('notUsed', __PDCP_Config_headerCompression_notUsed), ('rohc', __PDCP_Config_headerCompression_rohc), ]) _PDCP_Config_headerCompression._ext = None PDCP_Config._cont = ASN1Dict([ ('discardTimer', _PDCP_Config_discardTimer), ('rlc-AM', _PDCP_Config_rlc_AM), ('rlc-UM', _PDCP_Config_rlc_UM), ('headerCompression', _PDCP_Config_headerCompression), ]) PDCP_Config._ext = [] #-----< PDSCH-ConfigCommon >-----# PDSCH_ConfigCommon = SEQ(name='PDSCH-ConfigCommon', mode=MODE_TYPE) _PDSCH_ConfigCommon_referenceSignalPower = INT(name='referenceSignalPower', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PDSCH_ConfigCommon_referenceSignalPower._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-60, ub=50)], ev=None, er=[]) _PDSCH_ConfigCommon_p_b = INT(name='p-b', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PDSCH_ConfigCommon_p_b._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=3)], ev=None, er=[]) PDSCH_ConfigCommon._cont = ASN1Dict([ ('referenceSignalPower', _PDSCH_ConfigCommon_referenceSignalPower), ('p-b', _PDSCH_ConfigCommon_p_b), ]) PDSCH_ConfigCommon._ext = None #-----< PDSCH-ConfigDedicated >-----# PDSCH_ConfigDedicated = SEQ(name='PDSCH-ConfigDedicated', mode=MODE_TYPE) _PDSCH_ConfigDedicated_p_a = ENUM(name='p-a', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PDSCH_ConfigDedicated_p_a._cont = ASN1Dict([('dB-6', 0), ('dB-4dot77', 1), ('dB-3', 2), ('dB-1dot77', 3), ('dB0', 4), ('dB1', 5), ('dB2', 6), ('dB3', 7)]) _PDSCH_ConfigDedicated_p_a._ext = None PDSCH_ConfigDedicated._cont = ASN1Dict([ ('p-a', _PDSCH_ConfigDedicated_p_a), ]) PDSCH_ConfigDedicated._ext = None #-----< PHICH-Config >-----# PHICH_Config = SEQ(name='PHICH-Config', mode=MODE_TYPE) _PHICH_Config_phich_Duration = ENUM(name='phich-Duration', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PHICH_Config_phich_Duration._cont = ASN1Dict([('normal', 0), ('extended', 1)]) _PHICH_Config_phich_Duration._ext = None _PHICH_Config_phich_Resource = ENUM(name='phich-Resource', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PHICH_Config_phich_Resource._cont = ASN1Dict([('oneSixth', 0), ('half', 1), ('one', 2), ('two', 3)]) _PHICH_Config_phich_Resource._ext = None PHICH_Config._cont = ASN1Dict([ ('phich-Duration', _PHICH_Config_phich_Duration), ('phich-Resource', _PHICH_Config_phich_Resource), ]) PHICH_Config._ext = None #-----< PhysicalConfigDedicated >-----# PhysicalConfigDedicated = SEQ(name='PhysicalConfigDedicated', mode=MODE_TYPE) _PhysicalConfigDedicated_pdsch_ConfigDedicated = SEQ(name='pdsch-ConfigDedicated', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PDSCH-ConfigDedicated')), opt=True) _PhysicalConfigDedicated_pucch_ConfigDedicated = SEQ(name='pucch-ConfigDedicated', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PUCCH-ConfigDedicated')), opt=True) _PhysicalConfigDedicated_pusch_ConfigDedicated = SEQ(name='pusch-ConfigDedicated', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PUSCH-ConfigDedicated')), opt=True) _PhysicalConfigDedicated_uplinkPowerControlDedicated = SEQ(name='uplinkPowerControlDedicated', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UplinkPowerControlDedicated')), opt=True) _PhysicalConfigDedicated_tpc_PDCCH_ConfigPUCCH = CHOICE(name='tpc-PDCCH-ConfigPUCCH', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'TPC-PDCCH-Config')), opt=True) _PhysicalConfigDedicated_tpc_PDCCH_ConfigPUSCH = CHOICE(name='tpc-PDCCH-ConfigPUSCH', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'TPC-PDCCH-Config')), opt=True) _PhysicalConfigDedicated_cqi_ReportConfig = SEQ(name='cqi-ReportConfig', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CQI-ReportConfig')), opt=True) _PhysicalConfigDedicated_soundingRS_UL_ConfigDedicated = CHOICE(name='soundingRS-UL-ConfigDedicated', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SoundingRS-UL-ConfigDedicated')), opt=True) _PhysicalConfigDedicated_antennaInfo = CHOICE(name='antennaInfo', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_EXPLICIT), opt=True) __PhysicalConfigDedicated_antennaInfo_explicitValue = SEQ(name='explicitValue', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'AntennaInfoDedicated'))) __PhysicalConfigDedicated_antennaInfo_defaultValue = NULL(name='defaultValue', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PhysicalConfigDedicated_antennaInfo._cont = ASN1Dict([ ('explicitValue', __PhysicalConfigDedicated_antennaInfo_explicitValue), ('defaultValue', __PhysicalConfigDedicated_antennaInfo_defaultValue), ]) _PhysicalConfigDedicated_antennaInfo._ext = None _PhysicalConfigDedicated_schedulingRequestConfig = CHOICE(name='schedulingRequestConfig', mode=MODE_TYPE, tag=(9, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SchedulingRequestConfig')), opt=True) PhysicalConfigDedicated._cont = ASN1Dict([ ('pdsch-ConfigDedicated', _PhysicalConfigDedicated_pdsch_ConfigDedicated), ('pucch-ConfigDedicated', _PhysicalConfigDedicated_pucch_ConfigDedicated), ('pusch-ConfigDedicated', _PhysicalConfigDedicated_pusch_ConfigDedicated), ('uplinkPowerControlDedicated', _PhysicalConfigDedicated_uplinkPowerControlDedicated), ('tpc-PDCCH-ConfigPUCCH', _PhysicalConfigDedicated_tpc_PDCCH_ConfigPUCCH), ('tpc-PDCCH-ConfigPUSCH', _PhysicalConfigDedicated_tpc_PDCCH_ConfigPUSCH), ('cqi-ReportConfig', _PhysicalConfigDedicated_cqi_ReportConfig), ('soundingRS-UL-ConfigDedicated', _PhysicalConfigDedicated_soundingRS_UL_ConfigDedicated), ('antennaInfo', _PhysicalConfigDedicated_antennaInfo), ('schedulingRequestConfig', _PhysicalConfigDedicated_schedulingRequestConfig), ]) PhysicalConfigDedicated._ext = [] #-----< P-Max >-----# P_Max = INT(name='P-Max', mode=MODE_TYPE) P_Max._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-30, ub=33)], ev=None, er=[]) #-----< PRACH-ConfigSIB >-----# PRACH_ConfigSIB = SEQ(name='PRACH-ConfigSIB', mode=MODE_TYPE) _PRACH_ConfigSIB_rootSequenceIndex = INT(name='rootSequenceIndex', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PRACH_ConfigSIB_rootSequenceIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=837)], ev=None, er=[]) _PRACH_ConfigSIB_prach_ConfigInfo = SEQ(name='prach-ConfigInfo', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PRACH-ConfigInfo'))) PRACH_ConfigSIB._cont = ASN1Dict([ ('rootSequenceIndex', _PRACH_ConfigSIB_rootSequenceIndex), ('prach-ConfigInfo', _PRACH_ConfigSIB_prach_ConfigInfo), ]) PRACH_ConfigSIB._ext = None #-----< PRACH-Config >-----# PRACH_Config = SEQ(name='PRACH-Config', mode=MODE_TYPE) _PRACH_Config_rootSequenceIndex = INT(name='rootSequenceIndex', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PRACH_Config_rootSequenceIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=837)], ev=None, er=[]) _PRACH_Config_prach_ConfigInfo = SEQ(name='prach-ConfigInfo', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PRACH-ConfigInfo')), opt=True) PRACH_Config._cont = ASN1Dict([ ('rootSequenceIndex', _PRACH_Config_rootSequenceIndex), ('prach-ConfigInfo', _PRACH_Config_prach_ConfigInfo), ]) PRACH_Config._ext = None #-----< PRACH-ConfigInfo >-----# PRACH_ConfigInfo = SEQ(name='PRACH-ConfigInfo', mode=MODE_TYPE) _PRACH_ConfigInfo_prach_ConfigIndex = INT(name='prach-ConfigIndex', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PRACH_ConfigInfo_prach_ConfigIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=63)], ev=None, er=[]) _PRACH_ConfigInfo_highSpeedFlag = BOOL(name='highSpeedFlag', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PRACH_ConfigInfo_zeroCorrelationZoneConfig = INT(name='zeroCorrelationZoneConfig', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PRACH_ConfigInfo_zeroCorrelationZoneConfig._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=15)], ev=None, er=[]) _PRACH_ConfigInfo_prach_FreqOffset = INT(name='prach-FreqOffset', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PRACH_ConfigInfo_prach_FreqOffset._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=94)], ev=None, er=[]) PRACH_ConfigInfo._cont = ASN1Dict([ ('prach-ConfigIndex', _PRACH_ConfigInfo_prach_ConfigIndex), ('highSpeedFlag', _PRACH_ConfigInfo_highSpeedFlag), ('zeroCorrelationZoneConfig', _PRACH_ConfigInfo_zeroCorrelationZoneConfig), ('prach-FreqOffset', _PRACH_ConfigInfo_prach_FreqOffset), ]) PRACH_ConfigInfo._ext = None #-----< PresenceAntennaPort1 >-----# PresenceAntennaPort1 = BOOL(name='PresenceAntennaPort1', mode=MODE_TYPE) #-----< PUCCH-ConfigCommon >-----# PUCCH_ConfigCommon = SEQ(name='PUCCH-ConfigCommon', mode=MODE_TYPE) _PUCCH_ConfigCommon_deltaPUCCH_Shift = ENUM(name='deltaPUCCH-Shift', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PUCCH_ConfigCommon_deltaPUCCH_Shift._cont = ASN1Dict([('ds1', 0), ('ds2', 1), ('ds3', 2)]) _PUCCH_ConfigCommon_deltaPUCCH_Shift._ext = None _PUCCH_ConfigCommon_nRB_CQI = INT(name='nRB-CQI', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PUCCH_ConfigCommon_nRB_CQI._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=98)], ev=None, er=[]) _PUCCH_ConfigCommon_nCS_AN = INT(name='nCS-AN', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PUCCH_ConfigCommon_nCS_AN._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=7)], ev=None, er=[]) _PUCCH_ConfigCommon_n1PUCCH_AN = INT(name='n1PUCCH-AN', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PUCCH_ConfigCommon_n1PUCCH_AN._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=2047)], ev=None, er=[]) PUCCH_ConfigCommon._cont = ASN1Dict([ ('deltaPUCCH-Shift', _PUCCH_ConfigCommon_deltaPUCCH_Shift), ('nRB-CQI', _PUCCH_ConfigCommon_nRB_CQI), ('nCS-AN', _PUCCH_ConfigCommon_nCS_AN), ('n1PUCCH-AN', _PUCCH_ConfigCommon_n1PUCCH_AN), ]) PUCCH_ConfigCommon._ext = None #-----< PUCCH-ConfigDedicated >-----# PUCCH_ConfigDedicated = SEQ(name='PUCCH-ConfigDedicated', mode=MODE_TYPE) _PUCCH_ConfigDedicated_ackNackRepetition = CHOICE(name='ackNackRepetition', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __PUCCH_ConfigDedicated_ackNackRepetition_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PUCCH_ConfigDedicated_ackNackRepetition_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___PUCCH_ConfigDedicated_ackNackRepetition_setup_repetitionFactor = ENUM(name='repetitionFactor', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___PUCCH_ConfigDedicated_ackNackRepetition_setup_repetitionFactor._cont = ASN1Dict([('n2', 0), ('n4', 1), ('n6', 2), ('spare1', 3)]) ___PUCCH_ConfigDedicated_ackNackRepetition_setup_repetitionFactor._ext = None ___PUCCH_ConfigDedicated_ackNackRepetition_setup_n1PUCCH_AN_Rep = INT(name='n1PUCCH-AN-Rep', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___PUCCH_ConfigDedicated_ackNackRepetition_setup_n1PUCCH_AN_Rep._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=2047)], ev=None, er=[]) __PUCCH_ConfigDedicated_ackNackRepetition_setup._cont = ASN1Dict([ ('repetitionFactor', ___PUCCH_ConfigDedicated_ackNackRepetition_setup_repetitionFactor), ('n1PUCCH-AN-Rep', ___PUCCH_ConfigDedicated_ackNackRepetition_setup_n1PUCCH_AN_Rep), ]) __PUCCH_ConfigDedicated_ackNackRepetition_setup._ext = None _PUCCH_ConfigDedicated_ackNackRepetition._cont = ASN1Dict([ ('release', __PUCCH_ConfigDedicated_ackNackRepetition_release), ('setup', __PUCCH_ConfigDedicated_ackNackRepetition_setup), ]) _PUCCH_ConfigDedicated_ackNackRepetition._ext = None _PUCCH_ConfigDedicated_tdd_AckNackFeedbackMode = ENUM(name='tdd-AckNackFeedbackMode', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _PUCCH_ConfigDedicated_tdd_AckNackFeedbackMode._cont = ASN1Dict([('bundling', 0), ('multiplexing', 1)]) _PUCCH_ConfigDedicated_tdd_AckNackFeedbackMode._ext = None PUCCH_ConfigDedicated._cont = ASN1Dict([ ('ackNackRepetition', _PUCCH_ConfigDedicated_ackNackRepetition), ('tdd-AckNackFeedbackMode', _PUCCH_ConfigDedicated_tdd_AckNackFeedbackMode), ]) PUCCH_ConfigDedicated._ext = None #-----< PUSCH-ConfigCommon >-----# PUSCH_ConfigCommon = SEQ(name='PUSCH-ConfigCommon', mode=MODE_TYPE) _PUSCH_ConfigCommon_pusch_ConfigBasic = SEQ(name='pusch-ConfigBasic', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PUSCH_ConfigCommon_pusch_ConfigBasic_n_SB = INT(name='n-SB', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PUSCH_ConfigCommon_pusch_ConfigBasic_n_SB._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=4)], ev=None, er=[]) __PUSCH_ConfigCommon_pusch_ConfigBasic_hoppingMode = ENUM(name='hoppingMode', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PUSCH_ConfigCommon_pusch_ConfigBasic_hoppingMode._cont = ASN1Dict([('interSubFrame', 0), ('intraAndInterSubFrame', 1)]) __PUSCH_ConfigCommon_pusch_ConfigBasic_hoppingMode._ext = None __PUSCH_ConfigCommon_pusch_ConfigBasic_pusch_HoppingOffset = INT(name='pusch-HoppingOffset', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PUSCH_ConfigCommon_pusch_ConfigBasic_pusch_HoppingOffset._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=98)], ev=None, er=[]) __PUSCH_ConfigCommon_pusch_ConfigBasic_enable64QAM = BOOL(name='enable64QAM', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PUSCH_ConfigCommon_pusch_ConfigBasic._cont = ASN1Dict([ ('n-SB', __PUSCH_ConfigCommon_pusch_ConfigBasic_n_SB), ('hoppingMode', __PUSCH_ConfigCommon_pusch_ConfigBasic_hoppingMode), ('pusch-HoppingOffset', __PUSCH_ConfigCommon_pusch_ConfigBasic_pusch_HoppingOffset), ('enable64QAM', __PUSCH_ConfigCommon_pusch_ConfigBasic_enable64QAM), ]) _PUSCH_ConfigCommon_pusch_ConfigBasic._ext = None _PUSCH_ConfigCommon_ul_ReferenceSignalsPUSCH = SEQ(name='ul-ReferenceSignalsPUSCH', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UL-ReferenceSignalsPUSCH'))) PUSCH_ConfigCommon._cont = ASN1Dict([ ('pusch-ConfigBasic', _PUSCH_ConfigCommon_pusch_ConfigBasic), ('ul-ReferenceSignalsPUSCH', _PUSCH_ConfigCommon_ul_ReferenceSignalsPUSCH), ]) PUSCH_ConfigCommon._ext = None #-----< PUSCH-ConfigDedicated >-----# PUSCH_ConfigDedicated = SEQ(name='PUSCH-ConfigDedicated', mode=MODE_TYPE) _PUSCH_ConfigDedicated_betaOffset_ACK_Index = INT(name='betaOffset-ACK-Index', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PUSCH_ConfigDedicated_betaOffset_ACK_Index._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=15)], ev=None, er=[]) _PUSCH_ConfigDedicated_betaOffset_RI_Index = INT(name='betaOffset-RI-Index', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PUSCH_ConfigDedicated_betaOffset_RI_Index._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=15)], ev=None, er=[]) _PUSCH_ConfigDedicated_betaOffset_CQI_Index = INT(name='betaOffset-CQI-Index', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PUSCH_ConfigDedicated_betaOffset_CQI_Index._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=15)], ev=None, er=[]) PUSCH_ConfigDedicated._cont = ASN1Dict([ ('betaOffset-ACK-Index', _PUSCH_ConfigDedicated_betaOffset_ACK_Index), ('betaOffset-RI-Index', _PUSCH_ConfigDedicated_betaOffset_RI_Index), ('betaOffset-CQI-Index', _PUSCH_ConfigDedicated_betaOffset_CQI_Index), ]) PUSCH_ConfigDedicated._ext = None #-----< UL-ReferenceSignalsPUSCH >-----# UL_ReferenceSignalsPUSCH = SEQ(name='UL-ReferenceSignalsPUSCH', mode=MODE_TYPE) _UL_ReferenceSignalsPUSCH_groupHoppingEnabled = BOOL(name='groupHoppingEnabled', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UL_ReferenceSignalsPUSCH_groupAssignmentPUSCH = INT(name='groupAssignmentPUSCH', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UL_ReferenceSignalsPUSCH_groupAssignmentPUSCH._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=29)], ev=None, er=[]) _UL_ReferenceSignalsPUSCH_sequenceHoppingEnabled = BOOL(name='sequenceHoppingEnabled', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UL_ReferenceSignalsPUSCH_cyclicShift = INT(name='cyclicShift', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UL_ReferenceSignalsPUSCH_cyclicShift._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=7)], ev=None, er=[]) UL_ReferenceSignalsPUSCH._cont = ASN1Dict([ ('groupHoppingEnabled', _UL_ReferenceSignalsPUSCH_groupHoppingEnabled), ('groupAssignmentPUSCH', _UL_ReferenceSignalsPUSCH_groupAssignmentPUSCH), ('sequenceHoppingEnabled', _UL_ReferenceSignalsPUSCH_sequenceHoppingEnabled), ('cyclicShift', _UL_ReferenceSignalsPUSCH_cyclicShift), ]) UL_ReferenceSignalsPUSCH._ext = None #-----< RACH-ConfigCommon >-----# RACH_ConfigCommon = SEQ(name='RACH-ConfigCommon', mode=MODE_TYPE) _RACH_ConfigCommon_preambleInfo = SEQ(name='preambleInfo', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RACH_ConfigCommon_preambleInfo_numberOfRA_Preambles = ENUM(name='numberOfRA-Preambles', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RACH_ConfigCommon_preambleInfo_numberOfRA_Preambles._cont = ASN1Dict([('n4', 0), ('n8', 1), ('n12', 2), ('n16', 3), ('n20', 4), ('n24', 5), ('n28', 6), ('n32', 7), ('n36', 8), ('n40', 9), ('n44', 10), ('n48', 11), ('n52', 12), ('n56', 13), ('n60', 14), ('n64', 15)]) __RACH_ConfigCommon_preambleInfo_numberOfRA_Preambles._ext = None __RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig = SEQ(name='preamblesGroupAConfig', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_sizeOfRA_PreamblesGroupA = ENUM(name='sizeOfRA-PreamblesGroupA', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_sizeOfRA_PreamblesGroupA._cont = ASN1Dict([('n4', 0), ('n8', 1), ('n12', 2), ('n16', 3), ('n20', 4), ('n24', 5), ('n28', 6), ('n32', 7), ('n36', 8), ('n40', 9), ('n44', 10), ('n48', 11), ('n52', 12), ('n56', 13), ('n60', 14)]) ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_sizeOfRA_PreamblesGroupA._ext = None ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_messageSizeGroupA = ENUM(name='messageSizeGroupA', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_messageSizeGroupA._cont = ASN1Dict([('b56', 0), ('b144', 1), ('b208', 2), ('b256', 3)]) ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_messageSizeGroupA._ext = None ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_messagePowerOffsetGroupB = ENUM(name='messagePowerOffsetGroupB', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_messagePowerOffsetGroupB._cont = ASN1Dict([('minusinfinity', 0), ('dB0', 1), ('dB5', 2), ('dB8', 3), ('dB10', 4), ('dB12', 5), ('dB15', 6), ('dB18', 7)]) ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_messagePowerOffsetGroupB._ext = None __RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig._cont = ASN1Dict([ ('sizeOfRA-PreamblesGroupA', ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_sizeOfRA_PreamblesGroupA), ('messageSizeGroupA', ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_messageSizeGroupA), ('messagePowerOffsetGroupB', ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_messagePowerOffsetGroupB), ]) __RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig._ext = [] _RACH_ConfigCommon_preambleInfo._cont = ASN1Dict([ ('numberOfRA-Preambles', __RACH_ConfigCommon_preambleInfo_numberOfRA_Preambles), ('preamblesGroupAConfig', __RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig), ]) _RACH_ConfigCommon_preambleInfo._ext = None _RACH_ConfigCommon_powerRampingParameters = SEQ(name='powerRampingParameters', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RACH_ConfigCommon_powerRampingParameters_powerRampingStep = ENUM(name='powerRampingStep', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RACH_ConfigCommon_powerRampingParameters_powerRampingStep._cont = ASN1Dict([('dB0', 0), ('dB2', 1), ('dB4', 2), ('dB6', 3)]) __RACH_ConfigCommon_powerRampingParameters_powerRampingStep._ext = None __RACH_ConfigCommon_powerRampingParameters_preambleInitialReceivedTargetPower = ENUM(name='preambleInitialReceivedTargetPower', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RACH_ConfigCommon_powerRampingParameters_preambleInitialReceivedTargetPower._cont = ASN1Dict([('dBm-120', 0), ('dBm-118', 1), ('dBm-116', 2), ('dBm-114', 3), ('dBm-112', 4), ('dBm-110', 5), ('dBm-108', 6), ('dBm-106', 7), ('dBm-104', 8), ('dBm-102', 9), ('dBm-100', 10), ('dBm-98', 11), ('dBm-96', 12), ('dBm-94', 13), ('dBm-92', 14), ('dBm-90', 15)]) __RACH_ConfigCommon_powerRampingParameters_preambleInitialReceivedTargetPower._ext = None _RACH_ConfigCommon_powerRampingParameters._cont = ASN1Dict([ ('powerRampingStep', __RACH_ConfigCommon_powerRampingParameters_powerRampingStep), ('preambleInitialReceivedTargetPower', __RACH_ConfigCommon_powerRampingParameters_preambleInitialReceivedTargetPower), ]) _RACH_ConfigCommon_powerRampingParameters._ext = None _RACH_ConfigCommon_ra_SupervisionInfo = SEQ(name='ra-SupervisionInfo', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RACH_ConfigCommon_ra_SupervisionInfo_preambleTransMax = ENUM(name='preambleTransMax', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RACH_ConfigCommon_ra_SupervisionInfo_preambleTransMax._cont = ASN1Dict([('n3', 0), ('n4', 1), ('n5', 2), ('n6', 3), ('n7', 4), ('n8', 5), ('n10', 6), ('n20', 7), ('n50', 8), ('n100', 9), ('n200', 10)]) __RACH_ConfigCommon_ra_SupervisionInfo_preambleTransMax._ext = None __RACH_ConfigCommon_ra_SupervisionInfo_ra_ResponseWindowSize = ENUM(name='ra-ResponseWindowSize', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RACH_ConfigCommon_ra_SupervisionInfo_ra_ResponseWindowSize._cont = ASN1Dict([('sf2', 0), ('sf3', 1), ('sf4', 2), ('sf5', 3), ('sf6', 4), ('sf7', 5), ('sf8', 6), ('sf10', 7)]) __RACH_ConfigCommon_ra_SupervisionInfo_ra_ResponseWindowSize._ext = None __RACH_ConfigCommon_ra_SupervisionInfo_mac_ContentionResolutionTimer = ENUM(name='mac-ContentionResolutionTimer', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RACH_ConfigCommon_ra_SupervisionInfo_mac_ContentionResolutionTimer._cont = ASN1Dict([('sf8', 0), ('sf16', 1), ('sf24', 2), ('sf32', 3), ('sf40', 4), ('sf48', 5), ('sf56', 6), ('sf64', 7)]) __RACH_ConfigCommon_ra_SupervisionInfo_mac_ContentionResolutionTimer._ext = None _RACH_ConfigCommon_ra_SupervisionInfo._cont = ASN1Dict([ ('preambleTransMax', __RACH_ConfigCommon_ra_SupervisionInfo_preambleTransMax), ('ra-ResponseWindowSize', __RACH_ConfigCommon_ra_SupervisionInfo_ra_ResponseWindowSize), ('mac-ContentionResolutionTimer', __RACH_ConfigCommon_ra_SupervisionInfo_mac_ContentionResolutionTimer), ]) _RACH_ConfigCommon_ra_SupervisionInfo._ext = None _RACH_ConfigCommon_maxHARQ_Msg3Tx = INT(name='maxHARQ-Msg3Tx', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _RACH_ConfigCommon_maxHARQ_Msg3Tx._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) RACH_ConfigCommon._cont = ASN1Dict([ ('preambleInfo', _RACH_ConfigCommon_preambleInfo), ('powerRampingParameters', _RACH_ConfigCommon_powerRampingParameters), ('ra-SupervisionInfo', _RACH_ConfigCommon_ra_SupervisionInfo), ('maxHARQ-Msg3Tx', _RACH_ConfigCommon_maxHARQ_Msg3Tx), ]) RACH_ConfigCommon._ext = [] #-----< RACH-ConfigDedicated >-----# RACH_ConfigDedicated = SEQ(name='RACH-ConfigDedicated', mode=MODE_TYPE) _RACH_ConfigDedicated_ra_PreambleIndex = INT(name='ra-PreambleIndex', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _RACH_ConfigDedicated_ra_PreambleIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=63)], ev=None, er=[]) _RACH_ConfigDedicated_ra_PRACH_MaskIndex = INT(name='ra-PRACH-MaskIndex', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _RACH_ConfigDedicated_ra_PRACH_MaskIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=15)], ev=None, er=[]) RACH_ConfigDedicated._cont = ASN1Dict([ ('ra-PreambleIndex', _RACH_ConfigDedicated_ra_PreambleIndex), ('ra-PRACH-MaskIndex', _RACH_ConfigDedicated_ra_PRACH_MaskIndex), ]) RACH_ConfigDedicated._ext = None #-----< RadioResourceConfigCommonSIB >-----# RadioResourceConfigCommonSIB = SEQ(name='RadioResourceConfigCommonSIB', mode=MODE_TYPE) _RadioResourceConfigCommonSIB_rach_ConfigCommon = SEQ(name='rach-ConfigCommon', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RACH-ConfigCommon'))) _RadioResourceConfigCommonSIB_bcch_Config = SEQ(name='bcch-Config', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BCCH-Config'))) _RadioResourceConfigCommonSIB_pcch_Config = SEQ(name='pcch-Config', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PCCH-Config'))) _RadioResourceConfigCommonSIB_prach_Config = SEQ(name='prach-Config', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PRACH-ConfigSIB'))) _RadioResourceConfigCommonSIB_pdsch_ConfigCommon = SEQ(name='pdsch-ConfigCommon', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PDSCH-ConfigCommon'))) _RadioResourceConfigCommonSIB_pusch_ConfigCommon = SEQ(name='pusch-ConfigCommon', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PUSCH-ConfigCommon'))) _RadioResourceConfigCommonSIB_pucch_ConfigCommon = SEQ(name='pucch-ConfigCommon', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PUCCH-ConfigCommon'))) _RadioResourceConfigCommonSIB_soundingRS_UL_ConfigCommon = CHOICE(name='soundingRS-UL-ConfigCommon', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SoundingRS-UL-ConfigCommon'))) _RadioResourceConfigCommonSIB_uplinkPowerControlCommon = SEQ(name='uplinkPowerControlCommon', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UplinkPowerControlCommon'))) _RadioResourceConfigCommonSIB_ul_CyclicPrefixLength = ENUM(name='ul-CyclicPrefixLength', mode=MODE_TYPE, tag=(9, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UL-CyclicPrefixLength'))) RadioResourceConfigCommonSIB._cont = ASN1Dict([ ('rach-ConfigCommon', _RadioResourceConfigCommonSIB_rach_ConfigCommon), ('bcch-Config', _RadioResourceConfigCommonSIB_bcch_Config), ('pcch-Config', _RadioResourceConfigCommonSIB_pcch_Config), ('prach-Config', _RadioResourceConfigCommonSIB_prach_Config), ('pdsch-ConfigCommon', _RadioResourceConfigCommonSIB_pdsch_ConfigCommon), ('pusch-ConfigCommon', _RadioResourceConfigCommonSIB_pusch_ConfigCommon), ('pucch-ConfigCommon', _RadioResourceConfigCommonSIB_pucch_ConfigCommon), ('soundingRS-UL-ConfigCommon', _RadioResourceConfigCommonSIB_soundingRS_UL_ConfigCommon), ('uplinkPowerControlCommon', _RadioResourceConfigCommonSIB_uplinkPowerControlCommon), ('ul-CyclicPrefixLength', _RadioResourceConfigCommonSIB_ul_CyclicPrefixLength), ]) RadioResourceConfigCommonSIB._ext = [] #-----< RadioResourceConfigCommon >-----# RadioResourceConfigCommon = SEQ(name='RadioResourceConfigCommon', mode=MODE_TYPE) _RadioResourceConfigCommon_rach_ConfigCommon = SEQ(name='rach-ConfigCommon', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RACH-ConfigCommon')), opt=True) _RadioResourceConfigCommon_prach_Config = SEQ(name='prach-Config', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PRACH-Config'))) _RadioResourceConfigCommon_pdsch_ConfigCommon = SEQ(name='pdsch-ConfigCommon', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PDSCH-ConfigCommon')), opt=True) _RadioResourceConfigCommon_pusch_ConfigCommon = SEQ(name='pusch-ConfigCommon', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PUSCH-ConfigCommon'))) _RadioResourceConfigCommon_phich_Config = SEQ(name='phich-Config', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PHICH-Config')), opt=True) _RadioResourceConfigCommon_pucch_ConfigCommon = SEQ(name='pucch-ConfigCommon', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PUCCH-ConfigCommon')), opt=True) _RadioResourceConfigCommon_soundingRS_UL_ConfigCommon = CHOICE(name='soundingRS-UL-ConfigCommon', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SoundingRS-UL-ConfigCommon')), opt=True) _RadioResourceConfigCommon_uplinkPowerControlCommon = SEQ(name='uplinkPowerControlCommon', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UplinkPowerControlCommon')), opt=True) _RadioResourceConfigCommon_antennaInfoCommon = SEQ(name='antennaInfoCommon', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'AntennaInfoCommon')), opt=True) _RadioResourceConfigCommon_p_Max = INT(name='p-Max', mode=MODE_TYPE, tag=(9, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'P-Max')), opt=True) _RadioResourceConfigCommon_tdd_Config = SEQ(name='tdd-Config', mode=MODE_TYPE, tag=(10, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'TDD-Config')), opt=True) _RadioResourceConfigCommon_ul_CyclicPrefixLength = ENUM(name='ul-CyclicPrefixLength', mode=MODE_TYPE, tag=(11, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UL-CyclicPrefixLength'))) RadioResourceConfigCommon._cont = ASN1Dict([ ('rach-ConfigCommon', _RadioResourceConfigCommon_rach_ConfigCommon), ('prach-Config', _RadioResourceConfigCommon_prach_Config), ('pdsch-ConfigCommon', _RadioResourceConfigCommon_pdsch_ConfigCommon), ('pusch-ConfigCommon', _RadioResourceConfigCommon_pusch_ConfigCommon), ('phich-Config', _RadioResourceConfigCommon_phich_Config), ('pucch-ConfigCommon', _RadioResourceConfigCommon_pucch_ConfigCommon), ('soundingRS-UL-ConfigCommon', _RadioResourceConfigCommon_soundingRS_UL_ConfigCommon), ('uplinkPowerControlCommon', _RadioResourceConfigCommon_uplinkPowerControlCommon), ('antennaInfoCommon', _RadioResourceConfigCommon_antennaInfoCommon), ('p-Max', _RadioResourceConfigCommon_p_Max), ('tdd-Config', _RadioResourceConfigCommon_tdd_Config), ('ul-CyclicPrefixLength', _RadioResourceConfigCommon_ul_CyclicPrefixLength), ]) RadioResourceConfigCommon._ext = [] #-----< BCCH-Config >-----# BCCH_Config = SEQ(name='BCCH-Config', mode=MODE_TYPE) _BCCH_Config_modificationPeriodCoeff = ENUM(name='modificationPeriodCoeff', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _BCCH_Config_modificationPeriodCoeff._cont = ASN1Dict([('n2', 0), ('n4', 1), ('n8', 2), ('n16', 3)]) _BCCH_Config_modificationPeriodCoeff._ext = None BCCH_Config._cont = ASN1Dict([ ('modificationPeriodCoeff', _BCCH_Config_modificationPeriodCoeff), ]) BCCH_Config._ext = None #-----< PCCH-Config >-----# PCCH_Config = SEQ(name='PCCH-Config', mode=MODE_TYPE) _PCCH_Config_defaultPagingCycle = ENUM(name='defaultPagingCycle', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PCCH_Config_defaultPagingCycle._cont = ASN1Dict([('rf32', 0), ('rf64', 1), ('rf128', 2), ('rf256', 3)]) _PCCH_Config_defaultPagingCycle._ext = None _PCCH_Config_nB = ENUM(name='nB', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PCCH_Config_nB._cont = ASN1Dict([('fourT', 0), ('twoT', 1), ('oneT', 2), ('halfT', 3), ('quarterT', 4), ('oneEighthT', 5), ('oneSixteenthT', 6), ('oneThirtySecondT', 7)]) _PCCH_Config_nB._ext = None PCCH_Config._cont = ASN1Dict([ ('defaultPagingCycle', _PCCH_Config_defaultPagingCycle), ('nB', _PCCH_Config_nB), ]) PCCH_Config._ext = None #-----< UL-CyclicPrefixLength >-----# UL_CyclicPrefixLength = ENUM(name='UL-CyclicPrefixLength', mode=MODE_TYPE) UL_CyclicPrefixLength._cont = ASN1Dict([('len1', 0), ('len2', 1)]) UL_CyclicPrefixLength._ext = None #-----< RadioResourceConfigDedicated >-----# RadioResourceConfigDedicated = SEQ(name='RadioResourceConfigDedicated', mode=MODE_TYPE) _RadioResourceConfigDedicated_srb_ToAddModList = SEQ_OF(name='srb-ToAddModList', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SRB-ToAddModList')), opt=True) _RadioResourceConfigDedicated_drb_ToAddModList = SEQ_OF(name='drb-ToAddModList', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DRB-ToAddModList')), opt=True) _RadioResourceConfigDedicated_drb_ToReleaseList = SEQ_OF(name='drb-ToReleaseList', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DRB-ToReleaseList')), opt=True) _RadioResourceConfigDedicated_mac_MainConfig = CHOICE(name='mac-MainConfig', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_EXPLICIT), opt=True) __RadioResourceConfigDedicated_mac_MainConfig_explicitValue = SEQ(name='explicitValue', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MAC-MainConfig'))) __RadioResourceConfigDedicated_mac_MainConfig_defaultValue = NULL(name='defaultValue', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _RadioResourceConfigDedicated_mac_MainConfig._cont = ASN1Dict([ ('explicitValue', __RadioResourceConfigDedicated_mac_MainConfig_explicitValue), ('defaultValue', __RadioResourceConfigDedicated_mac_MainConfig_defaultValue), ]) _RadioResourceConfigDedicated_mac_MainConfig._ext = None _RadioResourceConfigDedicated_sps_Config = SEQ(name='sps-Config', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SPS-Config')), opt=True) _RadioResourceConfigDedicated_physicalConfigDedicated = SEQ(name='physicalConfigDedicated', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysicalConfigDedicated')), opt=True) RadioResourceConfigDedicated._cont = ASN1Dict([ ('srb-ToAddModList', _RadioResourceConfigDedicated_srb_ToAddModList), ('drb-ToAddModList', _RadioResourceConfigDedicated_drb_ToAddModList), ('drb-ToReleaseList', _RadioResourceConfigDedicated_drb_ToReleaseList), ('mac-MainConfig', _RadioResourceConfigDedicated_mac_MainConfig), ('sps-Config', _RadioResourceConfigDedicated_sps_Config), ('physicalConfigDedicated', _RadioResourceConfigDedicated_physicalConfigDedicated), ]) RadioResourceConfigDedicated._ext = [] #-----< SRB-ToAddModList >-----# SRB_ToAddModList = SEQ_OF(name='SRB-ToAddModList', mode=MODE_TYPE) _SRB_ToAddModList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SRB-ToAddMod'))) SRB_ToAddModList._cont = _SRB_ToAddModList__item_ SRB_ToAddModList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=2)], ev=None, er=[]) #-----< SRB-ToAddMod >-----# SRB_ToAddMod = SEQ(name='SRB-ToAddMod', mode=MODE_TYPE) _SRB_ToAddMod_srb_Identity = INT(name='srb-Identity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SRB_ToAddMod_srb_Identity._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=2)], ev=None, er=[]) _SRB_ToAddMod_rlc_Config = CHOICE(name='rlc-Config', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT), opt=True) __SRB_ToAddMod_rlc_Config_explicitValue = CHOICE(name='explicitValue', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RLC-Config'))) __SRB_ToAddMod_rlc_Config_defaultValue = NULL(name='defaultValue', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SRB_ToAddMod_rlc_Config._cont = ASN1Dict([ ('explicitValue', __SRB_ToAddMod_rlc_Config_explicitValue), ('defaultValue', __SRB_ToAddMod_rlc_Config_defaultValue), ]) _SRB_ToAddMod_rlc_Config._ext = None _SRB_ToAddMod_logicalChannelConfig = CHOICE(name='logicalChannelConfig', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_EXPLICIT), opt=True) __SRB_ToAddMod_logicalChannelConfig_explicitValue = SEQ(name='explicitValue', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'LogicalChannelConfig'))) __SRB_ToAddMod_logicalChannelConfig_defaultValue = NULL(name='defaultValue', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SRB_ToAddMod_logicalChannelConfig._cont = ASN1Dict([ ('explicitValue', __SRB_ToAddMod_logicalChannelConfig_explicitValue), ('defaultValue', __SRB_ToAddMod_logicalChannelConfig_defaultValue), ]) _SRB_ToAddMod_logicalChannelConfig._ext = None SRB_ToAddMod._cont = ASN1Dict([ ('srb-Identity', _SRB_ToAddMod_srb_Identity), ('rlc-Config', _SRB_ToAddMod_rlc_Config), ('logicalChannelConfig', _SRB_ToAddMod_logicalChannelConfig), ]) SRB_ToAddMod._ext = [] #-----< DRB-ToAddModList >-----# DRB_ToAddModList = SEQ_OF(name='DRB-ToAddModList', mode=MODE_TYPE) _DRB_ToAddModList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DRB-ToAddMod'))) DRB_ToAddModList._cont = _DRB_ToAddModList__item_ DRB_ToAddModList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=11)], ev=None, er=[]) #-----< DRB-ToAddMod >-----# DRB_ToAddMod = SEQ(name='DRB-ToAddMod', mode=MODE_TYPE) _DRB_ToAddMod_eps_BearerIdentity = INT(name='eps-BearerIdentity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _DRB_ToAddMod_eps_BearerIdentity._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=15)], ev=None, er=[]) _DRB_ToAddMod_drb_Identity = INT(name='drb-Identity', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DRB-Identity'))) _DRB_ToAddMod_pdcp_Config = SEQ(name='pdcp-Config', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PDCP-Config')), opt=True) _DRB_ToAddMod_rlc_Config = CHOICE(name='rlc-Config', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RLC-Config')), opt=True) _DRB_ToAddMod_logicalChannelIdentity = INT(name='logicalChannelIdentity', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _DRB_ToAddMod_logicalChannelIdentity._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=3, ub=10)], ev=None, er=[]) _DRB_ToAddMod_logicalChannelConfig = SEQ(name='logicalChannelConfig', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'LogicalChannelConfig')), opt=True) DRB_ToAddMod._cont = ASN1Dict([ ('eps-BearerIdentity', _DRB_ToAddMod_eps_BearerIdentity), ('drb-Identity', _DRB_ToAddMod_drb_Identity), ('pdcp-Config', _DRB_ToAddMod_pdcp_Config), ('rlc-Config', _DRB_ToAddMod_rlc_Config), ('logicalChannelIdentity', _DRB_ToAddMod_logicalChannelIdentity), ('logicalChannelConfig', _DRB_ToAddMod_logicalChannelConfig), ]) DRB_ToAddMod._ext = [] #-----< DRB-ToReleaseList >-----# DRB_ToReleaseList = SEQ_OF(name='DRB-ToReleaseList', mode=MODE_TYPE) _DRB_ToReleaseList__item_ = INT(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DRB-Identity'))) DRB_ToReleaseList._cont = _DRB_ToReleaseList__item_ DRB_ToReleaseList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=11)], ev=None, er=[]) #-----< RLC-Config >-----# RLC_Config = CHOICE(name='RLC-Config', mode=MODE_TYPE) _RLC_Config_am = SEQ(name='am', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RLC_Config_am_ul_AM_RLC = SEQ(name='ul-AM-RLC', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UL-AM-RLC'))) __RLC_Config_am_dl_AM_RLC = SEQ(name='dl-AM-RLC', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DL-AM-RLC'))) _RLC_Config_am._cont = ASN1Dict([ ('ul-AM-RLC', __RLC_Config_am_ul_AM_RLC), ('dl-AM-RLC', __RLC_Config_am_dl_AM_RLC), ]) _RLC_Config_am._ext = None _RLC_Config_um_Bi_Directional = SEQ(name='um-Bi-Directional', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RLC_Config_um_Bi_Directional_ul_UM_RLC = SEQ(name='ul-UM-RLC', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UL-UM-RLC'))) __RLC_Config_um_Bi_Directional_dl_UM_RLC = SEQ(name='dl-UM-RLC', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DL-UM-RLC'))) _RLC_Config_um_Bi_Directional._cont = ASN1Dict([ ('ul-UM-RLC', __RLC_Config_um_Bi_Directional_ul_UM_RLC), ('dl-UM-RLC', __RLC_Config_um_Bi_Directional_dl_UM_RLC), ]) _RLC_Config_um_Bi_Directional._ext = None _RLC_Config_um_Uni_Directional_UL = SEQ(name='um-Uni-Directional-UL', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RLC_Config_um_Uni_Directional_UL_ul_UM_RLC = SEQ(name='ul-UM-RLC', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UL-UM-RLC'))) _RLC_Config_um_Uni_Directional_UL._cont = ASN1Dict([ ('ul-UM-RLC', __RLC_Config_um_Uni_Directional_UL_ul_UM_RLC), ]) _RLC_Config_um_Uni_Directional_UL._ext = None _RLC_Config_um_Uni_Directional_DL = SEQ(name='um-Uni-Directional-DL', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __RLC_Config_um_Uni_Directional_DL_dl_UM_RLC = SEQ(name='dl-UM-RLC', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DL-UM-RLC'))) _RLC_Config_um_Uni_Directional_DL._cont = ASN1Dict([ ('dl-UM-RLC', __RLC_Config_um_Uni_Directional_DL_dl_UM_RLC), ]) _RLC_Config_um_Uni_Directional_DL._ext = None RLC_Config._cont = ASN1Dict([ ('am', _RLC_Config_am), ('um-Bi-Directional', _RLC_Config_um_Bi_Directional), ('um-Uni-Directional-UL', _RLC_Config_um_Uni_Directional_UL), ('um-Uni-Directional-DL', _RLC_Config_um_Uni_Directional_DL), ]) RLC_Config._ext = [] #-----< UL-AM-RLC >-----# UL_AM_RLC = SEQ(name='UL-AM-RLC', mode=MODE_TYPE) _UL_AM_RLC_t_PollRetransmit = ENUM(name='t-PollRetransmit', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'T-PollRetransmit'))) _UL_AM_RLC_pollPDU = ENUM(name='pollPDU', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PollPDU'))) _UL_AM_RLC_pollByte = ENUM(name='pollByte', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PollByte'))) _UL_AM_RLC_maxRetxThreshold = ENUM(name='maxRetxThreshold', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UL_AM_RLC_maxRetxThreshold._cont = ASN1Dict([('t1', 0), ('t2', 1), ('t3', 2), ('t4', 3), ('t6', 4), ('t8', 5), ('t16', 6), ('t32', 7)]) _UL_AM_RLC_maxRetxThreshold._ext = None UL_AM_RLC._cont = ASN1Dict([ ('t-PollRetransmit', _UL_AM_RLC_t_PollRetransmit), ('pollPDU', _UL_AM_RLC_pollPDU), ('pollByte', _UL_AM_RLC_pollByte), ('maxRetxThreshold', _UL_AM_RLC_maxRetxThreshold), ]) UL_AM_RLC._ext = None #-----< DL-AM-RLC >-----# DL_AM_RLC = SEQ(name='DL-AM-RLC', mode=MODE_TYPE) _DL_AM_RLC_t_Reordering = ENUM(name='t-Reordering', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'T-Reordering'))) _DL_AM_RLC_t_StatusProhibit = ENUM(name='t-StatusProhibit', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'T-StatusProhibit'))) DL_AM_RLC._cont = ASN1Dict([ ('t-Reordering', _DL_AM_RLC_t_Reordering), ('t-StatusProhibit', _DL_AM_RLC_t_StatusProhibit), ]) DL_AM_RLC._ext = None #-----< UL-UM-RLC >-----# UL_UM_RLC = SEQ(name='UL-UM-RLC', mode=MODE_TYPE) _UL_UM_RLC_sn_FieldLength = ENUM(name='sn-FieldLength', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SN-FieldLength'))) UL_UM_RLC._cont = ASN1Dict([ ('sn-FieldLength', _UL_UM_RLC_sn_FieldLength), ]) UL_UM_RLC._ext = None #-----< DL-UM-RLC >-----# DL_UM_RLC = SEQ(name='DL-UM-RLC', mode=MODE_TYPE) _DL_UM_RLC_sn_FieldLength = ENUM(name='sn-FieldLength', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SN-FieldLength'))) _DL_UM_RLC_t_Reordering = ENUM(name='t-Reordering', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'T-Reordering'))) DL_UM_RLC._cont = ASN1Dict([ ('sn-FieldLength', _DL_UM_RLC_sn_FieldLength), ('t-Reordering', _DL_UM_RLC_t_Reordering), ]) DL_UM_RLC._ext = None #-----< SN-FieldLength >-----# SN_FieldLength = ENUM(name='SN-FieldLength', mode=MODE_TYPE) SN_FieldLength._cont = ASN1Dict([('size5', 0), ('size10', 1)]) SN_FieldLength._ext = None #-----< T-PollRetransmit >-----# T_PollRetransmit = ENUM(name='T-PollRetransmit', mode=MODE_TYPE) T_PollRetransmit._cont = ASN1Dict([('ms5', 0), ('ms10', 1), ('ms15', 2), ('ms20', 3), ('ms25', 4), ('ms30', 5), ('ms35', 6), ('ms40', 7), ('ms45', 8), ('ms50', 9), ('ms55', 10), ('ms60', 11), ('ms65', 12), ('ms70', 13), ('ms75', 14), ('ms80', 15), ('ms85', 16), ('ms90', 17), ('ms95', 18), ('ms100', 19), ('ms105', 20), ('ms110', 21), ('ms115', 22), ('ms120', 23), ('ms125', 24), ('ms130', 25), ('ms135', 26), ('ms140', 27), ('ms145', 28), ('ms150', 29), ('ms155', 30), ('ms160', 31), ('ms165', 32), ('ms170', 33), ('ms175', 34), ('ms180', 35), ('ms185', 36), ('ms190', 37), ('ms195', 38), ('ms200', 39), ('ms205', 40), ('ms210', 41), ('ms215', 42), ('ms220', 43), ('ms225', 44), ('ms230', 45), ('ms235', 46), ('ms240', 47), ('ms245', 48), ('ms250', 49), ('ms300', 50), ('ms350', 51), ('ms400', 52), ('ms450', 53), ('ms500', 54), ('spare9', 55), ('spare8', 56), ('spare7', 57), ('spare6', 58), ('spare5', 59), ('spare4', 60), ('spare3', 61), ('spare2', 62), ('spare1', 63)]) T_PollRetransmit._ext = None #-----< PollPDU >-----# PollPDU = ENUM(name='PollPDU', mode=MODE_TYPE) PollPDU._cont = ASN1Dict([('p4', 0), ('p8', 1), ('p16', 2), ('p32', 3), ('p64', 4), ('p128', 5), ('p256', 6), ('pInfinity', 7)]) PollPDU._ext = None #-----< PollByte >-----# PollByte = ENUM(name='PollByte', mode=MODE_TYPE) PollByte._cont = ASN1Dict([('kB25', 0), ('kB50', 1), ('kB75', 2), ('kB100', 3), ('kB125', 4), ('kB250', 5), ('kB375', 6), ('kB500', 7), ('kB750', 8), ('kB1000', 9), ('kB1250', 10), ('kB1500', 11), ('kB2000', 12), ('kB3000', 13), ('kBinfinity', 14), ('spare1', 15)]) PollByte._ext = None #-----< T-Reordering >-----# T_Reordering = ENUM(name='T-Reordering', mode=MODE_TYPE) T_Reordering._cont = ASN1Dict([('ms0', 0), ('ms5', 1), ('ms10', 2), ('ms15', 3), ('ms20', 4), ('ms25', 5), ('ms30', 6), ('ms35', 7), ('ms40', 8), ('ms45', 9), ('ms50', 10), ('ms55', 11), ('ms60', 12), ('ms65', 13), ('ms70', 14), ('ms75', 15), ('ms80', 16), ('ms85', 17), ('ms90', 18), ('ms95', 19), ('ms100', 20), ('ms110', 21), ('ms120', 22), ('ms130', 23), ('ms140', 24), ('ms150', 25), ('ms160', 26), ('ms170', 27), ('ms180', 28), ('ms190', 29), ('ms200', 30), ('spare1', 31)]) T_Reordering._ext = None #-----< T-StatusProhibit >-----# T_StatusProhibit = ENUM(name='T-StatusProhibit', mode=MODE_TYPE) T_StatusProhibit._cont = ASN1Dict([('ms0', 0), ('ms5', 1), ('ms10', 2), ('ms15', 3), ('ms20', 4), ('ms25', 5), ('ms30', 6), ('ms35', 7), ('ms40', 8), ('ms45', 9), ('ms50', 10), ('ms55', 11), ('ms60', 12), ('ms65', 13), ('ms70', 14), ('ms75', 15), ('ms80', 16), ('ms85', 17), ('ms90', 18), ('ms95', 19), ('ms100', 20), ('ms105', 21), ('ms110', 22), ('ms115', 23), ('ms120', 24), ('ms125', 25), ('ms130', 26), ('ms135', 27), ('ms140', 28), ('ms145', 29), ('ms150', 30), ('ms155', 31), ('ms160', 32), ('ms165', 33), ('ms170', 34), ('ms175', 35), ('ms180', 36), ('ms185', 37), ('ms190', 38), ('ms195', 39), ('ms200', 40), ('ms205', 41), ('ms210', 42), ('ms215', 43), ('ms220', 44), ('ms225', 45), ('ms230', 46), ('ms235', 47), ('ms240', 48), ('ms245', 49), ('ms250', 50), ('ms300', 51), ('ms350', 52), ('ms400', 53), ('ms450', 54), ('ms500', 55), ('spare8', 56), ('spare7', 57), ('spare6', 58), ('spare5', 59), ('spare4', 60), ('spare3', 61), ('spare2', 62), ('spare1', 63)]) T_StatusProhibit._ext = None #-----< SchedulingRequestConfig >-----# SchedulingRequestConfig = CHOICE(name='SchedulingRequestConfig', mode=MODE_TYPE) _SchedulingRequestConfig_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SchedulingRequestConfig_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SchedulingRequestConfig_setup_sr_PUCCH_ResourceIndex = INT(name='sr-PUCCH-ResourceIndex', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SchedulingRequestConfig_setup_sr_PUCCH_ResourceIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=2047)], ev=None, er=[]) __SchedulingRequestConfig_setup_sr_ConfigIndex = INT(name='sr-ConfigIndex', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SchedulingRequestConfig_setup_sr_ConfigIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=155)], ev=None, er=[]) __SchedulingRequestConfig_setup_dsr_TransMax = ENUM(name='dsr-TransMax', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SchedulingRequestConfig_setup_dsr_TransMax._cont = ASN1Dict([('n4', 0), ('n8', 1), ('n16', 2), ('n32', 3), ('n64', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]) __SchedulingRequestConfig_setup_dsr_TransMax._ext = None _SchedulingRequestConfig_setup._cont = ASN1Dict([ ('sr-PUCCH-ResourceIndex', __SchedulingRequestConfig_setup_sr_PUCCH_ResourceIndex), ('sr-ConfigIndex', __SchedulingRequestConfig_setup_sr_ConfigIndex), ('dsr-TransMax', __SchedulingRequestConfig_setup_dsr_TransMax), ]) _SchedulingRequestConfig_setup._ext = None SchedulingRequestConfig._cont = ASN1Dict([ ('release', _SchedulingRequestConfig_release), ('setup', _SchedulingRequestConfig_setup), ]) SchedulingRequestConfig._ext = None #-----< SoundingRS-UL-ConfigCommon >-----# SoundingRS_UL_ConfigCommon = CHOICE(name='SoundingRS-UL-ConfigCommon', mode=MODE_TYPE) _SoundingRS_UL_ConfigCommon_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SoundingRS_UL_ConfigCommon_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SoundingRS_UL_ConfigCommon_setup_srs_BandwidthConfig = ENUM(name='srs-BandwidthConfig', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SoundingRS_UL_ConfigCommon_setup_srs_BandwidthConfig._cont = ASN1Dict([('bw0', 0), ('bw1', 1), ('bw2', 2), ('bw3', 3), ('bw4', 4), ('bw5', 5), ('bw6', 6), ('bw7', 7)]) __SoundingRS_UL_ConfigCommon_setup_srs_BandwidthConfig._ext = None __SoundingRS_UL_ConfigCommon_setup_srs_SubframeConfig = ENUM(name='srs-SubframeConfig', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SoundingRS_UL_ConfigCommon_setup_srs_SubframeConfig._cont = ASN1Dict([('sc0', 0), ('sc1', 1), ('sc2', 2), ('sc3', 3), ('sc4', 4), ('sc5', 5), ('sc6', 6), ('sc7', 7), ('sc8', 8), ('sc9', 9), ('sc10', 10), ('sc11', 11), ('sc12', 12), ('sc13', 13), ('sc14', 14), ('sc15', 15)]) __SoundingRS_UL_ConfigCommon_setup_srs_SubframeConfig._ext = None __SoundingRS_UL_ConfigCommon_setup_ackNackSRS_SimultaneousTransmission = BOOL(name='ackNackSRS-SimultaneousTransmission', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SoundingRS_UL_ConfigCommon_setup_srs_MaxUpPts = ENUM(name='srs-MaxUpPts', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __SoundingRS_UL_ConfigCommon_setup_srs_MaxUpPts._cont = ASN1Dict([('true', 0)]) __SoundingRS_UL_ConfigCommon_setup_srs_MaxUpPts._ext = None _SoundingRS_UL_ConfigCommon_setup._cont = ASN1Dict([ ('srs-BandwidthConfig', __SoundingRS_UL_ConfigCommon_setup_srs_BandwidthConfig), ('srs-SubframeConfig', __SoundingRS_UL_ConfigCommon_setup_srs_SubframeConfig), ('ackNackSRS-SimultaneousTransmission', __SoundingRS_UL_ConfigCommon_setup_ackNackSRS_SimultaneousTransmission), ('srs-MaxUpPts', __SoundingRS_UL_ConfigCommon_setup_srs_MaxUpPts), ]) _SoundingRS_UL_ConfigCommon_setup._ext = None SoundingRS_UL_ConfigCommon._cont = ASN1Dict([ ('release', _SoundingRS_UL_ConfigCommon_release), ('setup', _SoundingRS_UL_ConfigCommon_setup), ]) SoundingRS_UL_ConfigCommon._ext = None #-----< SoundingRS-UL-ConfigDedicated >-----# SoundingRS_UL_ConfigDedicated = CHOICE(name='SoundingRS-UL-ConfigDedicated', mode=MODE_TYPE) _SoundingRS_UL_ConfigDedicated_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SoundingRS_UL_ConfigDedicated_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SoundingRS_UL_ConfigDedicated_setup_srs_Bandwidth = ENUM(name='srs-Bandwidth', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SoundingRS_UL_ConfigDedicated_setup_srs_Bandwidth._cont = ASN1Dict([('bw0', 0), ('bw1', 1), ('bw2', 2), ('bw3', 3)]) __SoundingRS_UL_ConfigDedicated_setup_srs_Bandwidth._ext = None __SoundingRS_UL_ConfigDedicated_setup_srs_HoppingBandwidth = ENUM(name='srs-HoppingBandwidth', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SoundingRS_UL_ConfigDedicated_setup_srs_HoppingBandwidth._cont = ASN1Dict([('hbw0', 0), ('hbw1', 1), ('hbw2', 2), ('hbw3', 3)]) __SoundingRS_UL_ConfigDedicated_setup_srs_HoppingBandwidth._ext = None __SoundingRS_UL_ConfigDedicated_setup_freqDomainPosition = INT(name='freqDomainPosition', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SoundingRS_UL_ConfigDedicated_setup_freqDomainPosition._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=23)], ev=None, er=[]) __SoundingRS_UL_ConfigDedicated_setup_duration = BOOL(name='duration', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SoundingRS_UL_ConfigDedicated_setup_srs_ConfigIndex = INT(name='srs-ConfigIndex', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SoundingRS_UL_ConfigDedicated_setup_srs_ConfigIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=1023)], ev=None, er=[]) __SoundingRS_UL_ConfigDedicated_setup_transmissionComb = INT(name='transmissionComb', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SoundingRS_UL_ConfigDedicated_setup_transmissionComb._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=1)], ev=None, er=[]) __SoundingRS_UL_ConfigDedicated_setup_cyclicShift = ENUM(name='cyclicShift', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SoundingRS_UL_ConfigDedicated_setup_cyclicShift._cont = ASN1Dict([('cs0', 0), ('cs1', 1), ('cs2', 2), ('cs3', 3), ('cs4', 4), ('cs5', 5), ('cs6', 6), ('cs7', 7)]) __SoundingRS_UL_ConfigDedicated_setup_cyclicShift._ext = None _SoundingRS_UL_ConfigDedicated_setup._cont = ASN1Dict([ ('srs-Bandwidth', __SoundingRS_UL_ConfigDedicated_setup_srs_Bandwidth), ('srs-HoppingBandwidth', __SoundingRS_UL_ConfigDedicated_setup_srs_HoppingBandwidth), ('freqDomainPosition', __SoundingRS_UL_ConfigDedicated_setup_freqDomainPosition), ('duration', __SoundingRS_UL_ConfigDedicated_setup_duration), ('srs-ConfigIndex', __SoundingRS_UL_ConfigDedicated_setup_srs_ConfigIndex), ('transmissionComb', __SoundingRS_UL_ConfigDedicated_setup_transmissionComb), ('cyclicShift', __SoundingRS_UL_ConfigDedicated_setup_cyclicShift), ]) _SoundingRS_UL_ConfigDedicated_setup._ext = None SoundingRS_UL_ConfigDedicated._cont = ASN1Dict([ ('release', _SoundingRS_UL_ConfigDedicated_release), ('setup', _SoundingRS_UL_ConfigDedicated_setup), ]) SoundingRS_UL_ConfigDedicated._ext = None #-----< SPS-Config >-----# SPS_Config = SEQ(name='SPS-Config', mode=MODE_TYPE) _SPS_Config_semiPersistSchedC_RNTI = BIT_STR(name='semiPersistSchedC-RNTI', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'C-RNTI')), opt=True) _SPS_Config_sps_ConfigDL = CHOICE(name='sps-ConfigDL', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SPS-ConfigDL')), opt=True) _SPS_Config_sps_ConfigUL = CHOICE(name='sps-ConfigUL', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SPS-ConfigUL')), opt=True) SPS_Config._cont = ASN1Dict([ ('semiPersistSchedC-RNTI', _SPS_Config_semiPersistSchedC_RNTI), ('sps-ConfigDL', _SPS_Config_sps_ConfigDL), ('sps-ConfigUL', _SPS_Config_sps_ConfigUL), ]) SPS_Config._ext = None #-----< SPS-ConfigDL >-----# SPS_ConfigDL = CHOICE(name='SPS-ConfigDL', mode=MODE_TYPE) _SPS_ConfigDL_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SPS_ConfigDL_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SPS_ConfigDL_setup_semiPersistSchedIntervalDL = ENUM(name='semiPersistSchedIntervalDL', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SPS_ConfigDL_setup_semiPersistSchedIntervalDL._cont = ASN1Dict([('sf10', 0), ('sf20', 1), ('sf32', 2), ('sf40', 3), ('sf64', 4), ('sf80', 5), ('sf128', 6), ('sf160', 7), ('sf320', 8), ('sf640', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]) __SPS_ConfigDL_setup_semiPersistSchedIntervalDL._ext = None __SPS_ConfigDL_setup_numberOfConfSPS_Processes = INT(name='numberOfConfSPS-Processes', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SPS_ConfigDL_setup_numberOfConfSPS_Processes._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) __SPS_ConfigDL_setup_n1_PUCCH_AN_PersistentList = SEQ_OF(name='n1-PUCCH-AN-PersistentList', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'N1-PUCCH-AN-PersistentList'))) _SPS_ConfigDL_setup._cont = ASN1Dict([ ('semiPersistSchedIntervalDL', __SPS_ConfigDL_setup_semiPersistSchedIntervalDL), ('numberOfConfSPS-Processes', __SPS_ConfigDL_setup_numberOfConfSPS_Processes), ('n1-PUCCH-AN-PersistentList', __SPS_ConfigDL_setup_n1_PUCCH_AN_PersistentList), ]) _SPS_ConfigDL_setup._ext = [] SPS_ConfigDL._cont = ASN1Dict([ ('release', _SPS_ConfigDL_release), ('setup', _SPS_ConfigDL_setup), ]) SPS_ConfigDL._ext = None #-----< SPS-ConfigUL >-----# SPS_ConfigUL = CHOICE(name='SPS-ConfigUL', mode=MODE_TYPE) _SPS_ConfigUL_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SPS_ConfigUL_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SPS_ConfigUL_setup_semiPersistSchedIntervalUL = ENUM(name='semiPersistSchedIntervalUL', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SPS_ConfigUL_setup_semiPersistSchedIntervalUL._cont = ASN1Dict([('sf10', 0), ('sf20', 1), ('sf32', 2), ('sf40', 3), ('sf64', 4), ('sf80', 5), ('sf128', 6), ('sf160', 7), ('sf320', 8), ('sf640', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]) __SPS_ConfigUL_setup_semiPersistSchedIntervalUL._ext = None __SPS_ConfigUL_setup_implicitReleaseAfter = ENUM(name='implicitReleaseAfter', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SPS_ConfigUL_setup_implicitReleaseAfter._cont = ASN1Dict([('e2', 0), ('e3', 1), ('e4', 2), ('e8', 3)]) __SPS_ConfigUL_setup_implicitReleaseAfter._ext = None __SPS_ConfigUL_setup_p0_Persistent = SEQ(name='p0-Persistent', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) ___SPS_ConfigUL_setup_p0_Persistent_p0_NominalPUSCH_Persistent = INT(name='p0-NominalPUSCH-Persistent', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___SPS_ConfigUL_setup_p0_Persistent_p0_NominalPUSCH_Persistent._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-126, ub=24)], ev=None, er=[]) ___SPS_ConfigUL_setup_p0_Persistent_p0_UE_PUSCH_Persistent = INT(name='p0-UE-PUSCH-Persistent', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___SPS_ConfigUL_setup_p0_Persistent_p0_UE_PUSCH_Persistent._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-8, ub=7)], ev=None, er=[]) __SPS_ConfigUL_setup_p0_Persistent._cont = ASN1Dict([ ('p0-NominalPUSCH-Persistent', ___SPS_ConfigUL_setup_p0_Persistent_p0_NominalPUSCH_Persistent), ('p0-UE-PUSCH-Persistent', ___SPS_ConfigUL_setup_p0_Persistent_p0_UE_PUSCH_Persistent), ]) __SPS_ConfigUL_setup_p0_Persistent._ext = None __SPS_ConfigUL_setup_twoIntervalsConfig = ENUM(name='twoIntervalsConfig', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __SPS_ConfigUL_setup_twoIntervalsConfig._cont = ASN1Dict([('true', 0)]) __SPS_ConfigUL_setup_twoIntervalsConfig._ext = None _SPS_ConfigUL_setup._cont = ASN1Dict([ ('semiPersistSchedIntervalUL', __SPS_ConfigUL_setup_semiPersistSchedIntervalUL), ('implicitReleaseAfter', __SPS_ConfigUL_setup_implicitReleaseAfter), ('p0-Persistent', __SPS_ConfigUL_setup_p0_Persistent), ('twoIntervalsConfig', __SPS_ConfigUL_setup_twoIntervalsConfig), ]) _SPS_ConfigUL_setup._ext = [] SPS_ConfigUL._cont = ASN1Dict([ ('release', _SPS_ConfigUL_release), ('setup', _SPS_ConfigUL_setup), ]) SPS_ConfigUL._ext = None #-----< N1-PUCCH-AN-PersistentList >-----# N1_PUCCH_AN_PersistentList = SEQ_OF(name='N1-PUCCH-AN-PersistentList', mode=MODE_TYPE) _N1_PUCCH_AN_PersistentList__item_ = INT(name='_item_', mode=MODE_TYPE) _N1_PUCCH_AN_PersistentList__item_._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=2047)], ev=None, er=[]) N1_PUCCH_AN_PersistentList._cont = _N1_PUCCH_AN_PersistentList__item_ N1_PUCCH_AN_PersistentList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=4)], ev=None, er=[]) #-----< TDD-Config >-----# TDD_Config = SEQ(name='TDD-Config', mode=MODE_TYPE) _TDD_Config_subframeAssignment = ENUM(name='subframeAssignment', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _TDD_Config_subframeAssignment._cont = ASN1Dict([('sa0', 0), ('sa1', 1), ('sa2', 2), ('sa3', 3), ('sa4', 4), ('sa5', 5), ('sa6', 6)]) _TDD_Config_subframeAssignment._ext = None _TDD_Config_specialSubframePatterns = ENUM(name='specialSubframePatterns', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _TDD_Config_specialSubframePatterns._cont = ASN1Dict([('ssp0', 0), ('ssp1', 1), ('ssp2', 2), ('ssp3', 3), ('ssp4', 4), ('ssp5', 5), ('ssp6', 6), ('ssp7', 7), ('ssp8', 8)]) _TDD_Config_specialSubframePatterns._ext = None TDD_Config._cont = ASN1Dict([ ('subframeAssignment', _TDD_Config_subframeAssignment), ('specialSubframePatterns', _TDD_Config_specialSubframePatterns), ]) TDD_Config._ext = None #-----< TimeAlignmentTimer >-----# TimeAlignmentTimer = ENUM(name='TimeAlignmentTimer', mode=MODE_TYPE) TimeAlignmentTimer._cont = ASN1Dict([('sf500', 0), ('sf750', 1), ('sf1280', 2), ('sf1920', 3), ('sf2560', 4), ('sf5120', 5), ('sf10240', 6), ('infinity', 7)]) TimeAlignmentTimer._ext = None #-----< TPC-PDCCH-Config >-----# TPC_PDCCH_Config = CHOICE(name='TPC-PDCCH-Config', mode=MODE_TYPE) _TPC_PDCCH_Config_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _TPC_PDCCH_Config_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __TPC_PDCCH_Config_setup_tpc_RNTI = BIT_STR(name='tpc-RNTI', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __TPC_PDCCH_Config_setup_tpc_RNTI._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) __TPC_PDCCH_Config_setup_tpc_Index = CHOICE(name='tpc-Index', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'TPC-Index'))) _TPC_PDCCH_Config_setup._cont = ASN1Dict([ ('tpc-RNTI', __TPC_PDCCH_Config_setup_tpc_RNTI), ('tpc-Index', __TPC_PDCCH_Config_setup_tpc_Index), ]) _TPC_PDCCH_Config_setup._ext = None TPC_PDCCH_Config._cont = ASN1Dict([ ('release', _TPC_PDCCH_Config_release), ('setup', _TPC_PDCCH_Config_setup), ]) TPC_PDCCH_Config._ext = None #-----< TPC-Index >-----# TPC_Index = CHOICE(name='TPC-Index', mode=MODE_TYPE) _TPC_Index_indexOfFormat3 = INT(name='indexOfFormat3', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _TPC_Index_indexOfFormat3._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=15)], ev=None, er=[]) _TPC_Index_indexOfFormat3A = INT(name='indexOfFormat3A', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _TPC_Index_indexOfFormat3A._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=31)], ev=None, er=[]) TPC_Index._cont = ASN1Dict([ ('indexOfFormat3', _TPC_Index_indexOfFormat3), ('indexOfFormat3A', _TPC_Index_indexOfFormat3A), ]) TPC_Index._ext = None #-----< UplinkPowerControlCommon >-----# UplinkPowerControlCommon = SEQ(name='UplinkPowerControlCommon', mode=MODE_TYPE) _UplinkPowerControlCommon_p0_NominalPUSCH = INT(name='p0-NominalPUSCH', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UplinkPowerControlCommon_p0_NominalPUSCH._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-126, ub=24)], ev=None, er=[]) _UplinkPowerControlCommon_alpha = ENUM(name='alpha', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UplinkPowerControlCommon_alpha._cont = ASN1Dict([('al0', 0), ('al04', 1), ('al05', 2), ('al06', 3), ('al07', 4), ('al08', 5), ('al09', 6), ('al1', 7)]) _UplinkPowerControlCommon_alpha._ext = None _UplinkPowerControlCommon_p0_NominalPUCCH = INT(name='p0-NominalPUCCH', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UplinkPowerControlCommon_p0_NominalPUCCH._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-127, ub=-96)], ev=None, er=[]) _UplinkPowerControlCommon_deltaFList_PUCCH = SEQ(name='deltaFList-PUCCH', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DeltaFList-PUCCH'))) _UplinkPowerControlCommon_deltaPreambleMsg3 = INT(name='deltaPreambleMsg3', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UplinkPowerControlCommon_deltaPreambleMsg3._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-1, ub=6)], ev=None, er=[]) UplinkPowerControlCommon._cont = ASN1Dict([ ('p0-NominalPUSCH', _UplinkPowerControlCommon_p0_NominalPUSCH), ('alpha', _UplinkPowerControlCommon_alpha), ('p0-NominalPUCCH', _UplinkPowerControlCommon_p0_NominalPUCCH), ('deltaFList-PUCCH', _UplinkPowerControlCommon_deltaFList_PUCCH), ('deltaPreambleMsg3', _UplinkPowerControlCommon_deltaPreambleMsg3), ]) UplinkPowerControlCommon._ext = None #-----< UplinkPowerControlDedicated >-----# UplinkPowerControlDedicated = SEQ(name='UplinkPowerControlDedicated', mode=MODE_TYPE) _UplinkPowerControlDedicated_p0_UE_PUSCH = INT(name='p0-UE-PUSCH', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UplinkPowerControlDedicated_p0_UE_PUSCH._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-8, ub=7)], ev=None, er=[]) _UplinkPowerControlDedicated_deltaMCS_Enabled = ENUM(name='deltaMCS-Enabled', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UplinkPowerControlDedicated_deltaMCS_Enabled._cont = ASN1Dict([('en0', 0), ('en1', 1)]) _UplinkPowerControlDedicated_deltaMCS_Enabled._ext = None _UplinkPowerControlDedicated_accumulationEnabled = BOOL(name='accumulationEnabled', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UplinkPowerControlDedicated_p0_UE_PUCCH = INT(name='p0-UE-PUCCH', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UplinkPowerControlDedicated_p0_UE_PUCCH._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-8, ub=7)], ev=None, er=[]) _UplinkPowerControlDedicated_pSRS_Offset = INT(name='pSRS-Offset', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UplinkPowerControlDedicated_pSRS_Offset._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=15)], ev=None, er=[]) _UplinkPowerControlDedicated_filterCoefficient = ENUM(name='filterCoefficient', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FilterCoefficient')), default='fc4') UplinkPowerControlDedicated._cont = ASN1Dict([ ('p0-UE-PUSCH', _UplinkPowerControlDedicated_p0_UE_PUSCH), ('deltaMCS-Enabled', _UplinkPowerControlDedicated_deltaMCS_Enabled), ('accumulationEnabled', _UplinkPowerControlDedicated_accumulationEnabled), ('p0-UE-PUCCH', _UplinkPowerControlDedicated_p0_UE_PUCCH), ('pSRS-Offset', _UplinkPowerControlDedicated_pSRS_Offset), ('filterCoefficient', _UplinkPowerControlDedicated_filterCoefficient), ]) UplinkPowerControlDedicated._ext = None #-----< DeltaFList-PUCCH >-----# DeltaFList_PUCCH = SEQ(name='DeltaFList-PUCCH', mode=MODE_TYPE) _DeltaFList_PUCCH_deltaF_PUCCH_Format1 = ENUM(name='deltaF-PUCCH-Format1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DeltaFList_PUCCH_deltaF_PUCCH_Format1._cont = ASN1Dict([('deltaF-2', 0), ('deltaF0', 1), ('deltaF2', 2)]) _DeltaFList_PUCCH_deltaF_PUCCH_Format1._ext = None _DeltaFList_PUCCH_deltaF_PUCCH_Format1b = ENUM(name='deltaF-PUCCH-Format1b', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DeltaFList_PUCCH_deltaF_PUCCH_Format1b._cont = ASN1Dict([('deltaF1', 0), ('deltaF3', 1), ('deltaF5', 2)]) _DeltaFList_PUCCH_deltaF_PUCCH_Format1b._ext = None _DeltaFList_PUCCH_deltaF_PUCCH_Format2 = ENUM(name='deltaF-PUCCH-Format2', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DeltaFList_PUCCH_deltaF_PUCCH_Format2._cont = ASN1Dict([('deltaF-2', 0), ('deltaF0', 1), ('deltaF1', 2), ('deltaF2', 3)]) _DeltaFList_PUCCH_deltaF_PUCCH_Format2._ext = None _DeltaFList_PUCCH_deltaF_PUCCH_Format2a = ENUM(name='deltaF-PUCCH-Format2a', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DeltaFList_PUCCH_deltaF_PUCCH_Format2a._cont = ASN1Dict([('deltaF-2', 0), ('deltaF0', 1), ('deltaF2', 2)]) _DeltaFList_PUCCH_deltaF_PUCCH_Format2a._ext = None _DeltaFList_PUCCH_deltaF_PUCCH_Format2b = ENUM(name='deltaF-PUCCH-Format2b', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _DeltaFList_PUCCH_deltaF_PUCCH_Format2b._cont = ASN1Dict([('deltaF-2', 0), ('deltaF0', 1), ('deltaF2', 2)]) _DeltaFList_PUCCH_deltaF_PUCCH_Format2b._ext = None DeltaFList_PUCCH._cont = ASN1Dict([ ('deltaF-PUCCH-Format1', _DeltaFList_PUCCH_deltaF_PUCCH_Format1), ('deltaF-PUCCH-Format1b', _DeltaFList_PUCCH_deltaF_PUCCH_Format1b), ('deltaF-PUCCH-Format2', _DeltaFList_PUCCH_deltaF_PUCCH_Format2), ('deltaF-PUCCH-Format2a', _DeltaFList_PUCCH_deltaF_PUCCH_Format2a), ('deltaF-PUCCH-Format2b', _DeltaFList_PUCCH_deltaF_PUCCH_Format2b), ]) DeltaFList_PUCCH._ext = None #-----< NextHopChainingCount >-----# NextHopChainingCount = INT(name='NextHopChainingCount', mode=MODE_TYPE) NextHopChainingCount._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=7)], ev=None, er=[]) #-----< SecurityAlgorithmConfig >-----# SecurityAlgorithmConfig = SEQ(name='SecurityAlgorithmConfig', mode=MODE_TYPE) _SecurityAlgorithmConfig_cipheringAlgorithm = ENUM(name='cipheringAlgorithm', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SecurityAlgorithmConfig_cipheringAlgorithm._cont = ASN1Dict([('eea0', 0), ('eea1', 1), ('eea2', 2), ('spare5', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]) _SecurityAlgorithmConfig_cipheringAlgorithm._ext = [] _SecurityAlgorithmConfig_integrityProtAlgorithm = ENUM(name='integrityProtAlgorithm', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SecurityAlgorithmConfig_integrityProtAlgorithm._cont = ASN1Dict([('reserved', 0), ('eia1', 1), ('eia2', 2), ('spare5', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]) _SecurityAlgorithmConfig_integrityProtAlgorithm._ext = [] SecurityAlgorithmConfig._cont = ASN1Dict([ ('cipheringAlgorithm', _SecurityAlgorithmConfig_cipheringAlgorithm), ('integrityProtAlgorithm', _SecurityAlgorithmConfig_integrityProtAlgorithm), ]) SecurityAlgorithmConfig._ext = None #-----< ShortMAC-I >-----# ShortMAC_I = BIT_STR(name='ShortMAC-I', mode=MODE_TYPE) ShortMAC_I._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) #-----< AdditionalSpectrumEmission >-----# AdditionalSpectrumEmission = INT(name='AdditionalSpectrumEmission', mode=MODE_TYPE) AdditionalSpectrumEmission._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< ARFCN-ValueCDMA2000 >-----# ARFCN_ValueCDMA2000 = INT(name='ARFCN-ValueCDMA2000', mode=MODE_TYPE) ARFCN_ValueCDMA2000._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=2047)], ev=None, er=[]) #-----< ARFCN-ValueEUTRA >-----# ARFCN_ValueEUTRA = INT(name='ARFCN-ValueEUTRA', mode=MODE_TYPE) ARFCN_ValueEUTRA._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=65535)], ev=None, er=[]) #-----< ARFCN-ValueGERAN >-----# ARFCN_ValueGERAN = INT(name='ARFCN-ValueGERAN', mode=MODE_TYPE) ARFCN_ValueGERAN._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=1023)], ev=None, er=[]) #-----< ARFCN-ValueUTRA >-----# ARFCN_ValueUTRA = INT(name='ARFCN-ValueUTRA', mode=MODE_TYPE) ARFCN_ValueUTRA._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=16383)], ev=None, er=[]) #-----< BandclassCDMA2000 >-----# BandclassCDMA2000 = ENUM(name='BandclassCDMA2000', mode=MODE_TYPE) BandclassCDMA2000._cont = ASN1Dict([('bc0', 0), ('bc1', 1), ('bc2', 2), ('bc3', 3), ('bc4', 4), ('bc5', 5), ('bc6', 6), ('bc7', 7), ('bc8', 8), ('bc9', 9), ('bc10', 10), ('bc11', 11), ('bc12', 12), ('bc13', 13), ('bc14', 14), ('bc15', 15), ('bc16', 16), ('bc17', 17), ('spare14', 18), ('spare13', 19), ('spare12', 20), ('spare11', 21), ('spare10', 22), ('spare9', 23), ('spare8', 24), ('spare7', 25), ('spare6', 26), ('spare5', 27), ('spare4', 28), ('spare3', 29), ('spare2', 30), ('spare1', 31)]) BandclassCDMA2000._ext = [] #-----< BandIndicatorGERAN >-----# BandIndicatorGERAN = ENUM(name='BandIndicatorGERAN', mode=MODE_TYPE) BandIndicatorGERAN._cont = ASN1Dict([('dcs1800', 0), ('pcs1900', 1)]) BandIndicatorGERAN._ext = None #-----< CarrierFreqCDMA2000 >-----# CarrierFreqCDMA2000 = SEQ(name='CarrierFreqCDMA2000', mode=MODE_TYPE) _CarrierFreqCDMA2000_bandClass = ENUM(name='bandClass', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandclassCDMA2000'))) _CarrierFreqCDMA2000_arfcn = INT(name='arfcn', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueCDMA2000'))) CarrierFreqCDMA2000._cont = ASN1Dict([ ('bandClass', _CarrierFreqCDMA2000_bandClass), ('arfcn', _CarrierFreqCDMA2000_arfcn), ]) CarrierFreqCDMA2000._ext = None #-----< CarrierFreqGERAN >-----# CarrierFreqGERAN = SEQ(name='CarrierFreqGERAN', mode=MODE_TYPE) _CarrierFreqGERAN_arfcn = INT(name='arfcn', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueGERAN'))) _CarrierFreqGERAN_bandIndicator = ENUM(name='bandIndicator', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandIndicatorGERAN'))) CarrierFreqGERAN._cont = ASN1Dict([ ('arfcn', _CarrierFreqGERAN_arfcn), ('bandIndicator', _CarrierFreqGERAN_bandIndicator), ]) CarrierFreqGERAN._ext = None #-----< CarrierFreqsGERAN >-----# CarrierFreqsGERAN = SEQ(name='CarrierFreqsGERAN', mode=MODE_TYPE) _CarrierFreqsGERAN_startingARFCN = INT(name='startingARFCN', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueGERAN'))) _CarrierFreqsGERAN_bandIndicator = ENUM(name='bandIndicator', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandIndicatorGERAN'))) _CarrierFreqsGERAN_followingARFCNs = CHOICE(name='followingARFCNs', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __CarrierFreqsGERAN_followingARFCNs_explicitListOfARFCNs = SEQ_OF(name='explicitListOfARFCNs', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ExplicitListOfARFCNs'))) __CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs = SEQ(name='equallySpacedARFCNs', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs_arfcn_Spacing = INT(name='arfcn-Spacing', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs_arfcn_Spacing._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) ___CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs_numberOfFollowingARFCNs = INT(name='numberOfFollowingARFCNs', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs_numberOfFollowingARFCNs._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=31)], ev=None, er=[]) __CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs._cont = ASN1Dict([ ('arfcn-Spacing', ___CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs_arfcn_Spacing), ('numberOfFollowingARFCNs', ___CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs_numberOfFollowingARFCNs), ]) __CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs._ext = None __CarrierFreqsGERAN_followingARFCNs_variableBitMapOfARFCNs = OCT_STR(name='variableBitMapOfARFCNs', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __CarrierFreqsGERAN_followingARFCNs_variableBitMapOfARFCNs._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) _CarrierFreqsGERAN_followingARFCNs._cont = ASN1Dict([ ('explicitListOfARFCNs', __CarrierFreqsGERAN_followingARFCNs_explicitListOfARFCNs), ('equallySpacedARFCNs', __CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs), ('variableBitMapOfARFCNs', __CarrierFreqsGERAN_followingARFCNs_variableBitMapOfARFCNs), ]) _CarrierFreqsGERAN_followingARFCNs._ext = None CarrierFreqsGERAN._cont = ASN1Dict([ ('startingARFCN', _CarrierFreqsGERAN_startingARFCN), ('bandIndicator', _CarrierFreqsGERAN_bandIndicator), ('followingARFCNs', _CarrierFreqsGERAN_followingARFCNs), ]) CarrierFreqsGERAN._ext = None #-----< ExplicitListOfARFCNs >-----# ExplicitListOfARFCNs = SEQ_OF(name='ExplicitListOfARFCNs', mode=MODE_TYPE) _ExplicitListOfARFCNs__item_ = INT(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueGERAN'))) ExplicitListOfARFCNs._cont = _ExplicitListOfARFCNs__item_ ExplicitListOfARFCNs._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=31)], ev=None, er=[]) #-----< CDMA2000-Type >-----# CDMA2000_Type = ENUM(name='CDMA2000-Type', mode=MODE_TYPE) CDMA2000_Type._cont = ASN1Dict([('type1XRTT', 0), ('typeHRPD', 1)]) CDMA2000_Type._ext = None #-----< CellIdentity >-----# CellIdentity = BIT_STR(name='CellIdentity', mode=MODE_TYPE) CellIdentity._const_sz = ASN1Set(rv=[28], rr=[], ev=None, er=[]) #-----< CellIndexList >-----# CellIndexList = SEQ_OF(name='CellIndexList', mode=MODE_TYPE) _CellIndexList__item_ = INT(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellIndex'))) CellIndexList._cont = _CellIndexList__item_ CellIndexList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< CellIndex >-----# CellIndex = INT(name='CellIndex', mode=MODE_TYPE) CellIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< CellReselectionPriority >-----# CellReselectionPriority = INT(name='CellReselectionPriority', mode=MODE_TYPE) CellReselectionPriority._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=7)], ev=None, er=[]) #-----< CSFB-RegistrationParam1XRTT >-----# CSFB_RegistrationParam1XRTT = SEQ(name='CSFB-RegistrationParam1XRTT', mode=MODE_TYPE) _CSFB_RegistrationParam1XRTT_sid = BIT_STR(name='sid', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_sid._const_sz = ASN1Set(rv=[15], rr=[], ev=None, er=[]) _CSFB_RegistrationParam1XRTT_nid = BIT_STR(name='nid', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_nid._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) _CSFB_RegistrationParam1XRTT_multipleSID = BOOL(name='multipleSID', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_multipleNID = BOOL(name='multipleNID', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_homeReg = BOOL(name='homeReg', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_foreignSIDReg = BOOL(name='foreignSIDReg', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_foreignNIDReg = BOOL(name='foreignNIDReg', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_parameterReg = BOOL(name='parameterReg', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_powerUpReg = BOOL(name='powerUpReg', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_registrationPeriod = BIT_STR(name='registrationPeriod', mode=MODE_TYPE, tag=(9, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_registrationPeriod._const_sz = ASN1Set(rv=[7], rr=[], ev=None, er=[]) _CSFB_RegistrationParam1XRTT_registrationZone = BIT_STR(name='registrationZone', mode=MODE_TYPE, tag=(10, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_registrationZone._const_sz = ASN1Set(rv=[12], rr=[], ev=None, er=[]) _CSFB_RegistrationParam1XRTT_totalZone = BIT_STR(name='totalZone', mode=MODE_TYPE, tag=(11, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_totalZone._const_sz = ASN1Set(rv=[3], rr=[], ev=None, er=[]) _CSFB_RegistrationParam1XRTT_zoneTimer = BIT_STR(name='zoneTimer', mode=MODE_TYPE, tag=(12, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CSFB_RegistrationParam1XRTT_zoneTimer._const_sz = ASN1Set(rv=[3], rr=[], ev=None, er=[]) CSFB_RegistrationParam1XRTT._cont = ASN1Dict([ ('sid', _CSFB_RegistrationParam1XRTT_sid), ('nid', _CSFB_RegistrationParam1XRTT_nid), ('multipleSID', _CSFB_RegistrationParam1XRTT_multipleSID), ('multipleNID', _CSFB_RegistrationParam1XRTT_multipleNID), ('homeReg', _CSFB_RegistrationParam1XRTT_homeReg), ('foreignSIDReg', _CSFB_RegistrationParam1XRTT_foreignSIDReg), ('foreignNIDReg', _CSFB_RegistrationParam1XRTT_foreignNIDReg), ('parameterReg', _CSFB_RegistrationParam1XRTT_parameterReg), ('powerUpReg', _CSFB_RegistrationParam1XRTT_powerUpReg), ('registrationPeriod', _CSFB_RegistrationParam1XRTT_registrationPeriod), ('registrationZone', _CSFB_RegistrationParam1XRTT_registrationZone), ('totalZone', _CSFB_RegistrationParam1XRTT_totalZone), ('zoneTimer', _CSFB_RegistrationParam1XRTT_zoneTimer), ]) CSFB_RegistrationParam1XRTT._ext = None #-----< CellGlobalIdEUTRA >-----# CellGlobalIdEUTRA = SEQ(name='CellGlobalIdEUTRA', mode=MODE_TYPE) _CellGlobalIdEUTRA_plmn_Identity = SEQ(name='plmn-Identity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PLMN-Identity'))) _CellGlobalIdEUTRA_cellIdentity = BIT_STR(name='cellIdentity', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellIdentity'))) CellGlobalIdEUTRA._cont = ASN1Dict([ ('plmn-Identity', _CellGlobalIdEUTRA_plmn_Identity), ('cellIdentity', _CellGlobalIdEUTRA_cellIdentity), ]) CellGlobalIdEUTRA._ext = None #-----< CellGlobalIdUTRA >-----# CellGlobalIdUTRA = SEQ(name='CellGlobalIdUTRA', mode=MODE_TYPE) _CellGlobalIdUTRA_plmn_Identity = SEQ(name='plmn-Identity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PLMN-Identity'))) _CellGlobalIdUTRA_cellIdentity = BIT_STR(name='cellIdentity', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CellGlobalIdUTRA_cellIdentity._const_sz = ASN1Set(rv=[28], rr=[], ev=None, er=[]) CellGlobalIdUTRA._cont = ASN1Dict([ ('plmn-Identity', _CellGlobalIdUTRA_plmn_Identity), ('cellIdentity', _CellGlobalIdUTRA_cellIdentity), ]) CellGlobalIdUTRA._ext = None #-----< CellGlobalIdGERAN >-----# CellGlobalIdGERAN = SEQ(name='CellGlobalIdGERAN', mode=MODE_TYPE) _CellGlobalIdGERAN_plmn_Identity = SEQ(name='plmn-Identity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PLMN-Identity'))) _CellGlobalIdGERAN_locationAreaCode = BIT_STR(name='locationAreaCode', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CellGlobalIdGERAN_locationAreaCode._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) _CellGlobalIdGERAN_cellIdentity = BIT_STR(name='cellIdentity', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CellGlobalIdGERAN_cellIdentity._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) CellGlobalIdGERAN._cont = ASN1Dict([ ('plmn-Identity', _CellGlobalIdGERAN_plmn_Identity), ('locationAreaCode', _CellGlobalIdGERAN_locationAreaCode), ('cellIdentity', _CellGlobalIdGERAN_cellIdentity), ]) CellGlobalIdGERAN._ext = None #-----< CellGlobalIdCDMA2000 >-----# CellGlobalIdCDMA2000 = CHOICE(name='CellGlobalIdCDMA2000', mode=MODE_TYPE) _CellGlobalIdCDMA2000_cellGlobalId1XRTT = BIT_STR(name='cellGlobalId1XRTT', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CellGlobalIdCDMA2000_cellGlobalId1XRTT._const_sz = ASN1Set(rv=[47], rr=[], ev=None, er=[]) _CellGlobalIdCDMA2000_cellGlobalIdHRPD = BIT_STR(name='cellGlobalIdHRPD', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CellGlobalIdCDMA2000_cellGlobalIdHRPD._const_sz = ASN1Set(rv=[128], rr=[], ev=None, er=[]) CellGlobalIdCDMA2000._cont = ASN1Dict([ ('cellGlobalId1XRTT', _CellGlobalIdCDMA2000_cellGlobalId1XRTT), ('cellGlobalIdHRPD', _CellGlobalIdCDMA2000_cellGlobalIdHRPD), ]) CellGlobalIdCDMA2000._ext = None #-----< MobilityControlInfo >-----# MobilityControlInfo = SEQ(name='MobilityControlInfo', mode=MODE_TYPE) _MobilityControlInfo_targetPhysCellId = INT(name='targetPhysCellId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellId'))) _MobilityControlInfo_carrierFreq = SEQ(name='carrierFreq', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqEUTRA')), opt=True) _MobilityControlInfo_carrierBandwidth = SEQ(name='carrierBandwidth', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierBandwidthEUTRA')), opt=True) _MobilityControlInfo_additionalSpectrumEmission = INT(name='additionalSpectrumEmission', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'AdditionalSpectrumEmission')), opt=True) _MobilityControlInfo_t304 = ENUM(name='t304', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MobilityControlInfo_t304._cont = ASN1Dict([('ms50', 0), ('ms100', 1), ('ms150', 2), ('ms200', 3), ('ms500', 4), ('ms1000', 5), ('ms2000', 6), ('spare1', 7)]) _MobilityControlInfo_t304._ext = None _MobilityControlInfo_newUE_Identity = BIT_STR(name='newUE-Identity', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'C-RNTI'))) _MobilityControlInfo_radioResourceConfigCommon = SEQ(name='radioResourceConfigCommon', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RadioResourceConfigCommon'))) _MobilityControlInfo_rach_ConfigDedicated = SEQ(name='rach-ConfigDedicated', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RACH-ConfigDedicated')), opt=True) MobilityControlInfo._cont = ASN1Dict([ ('targetPhysCellId', _MobilityControlInfo_targetPhysCellId), ('carrierFreq', _MobilityControlInfo_carrierFreq), ('carrierBandwidth', _MobilityControlInfo_carrierBandwidth), ('additionalSpectrumEmission', _MobilityControlInfo_additionalSpectrumEmission), ('t304', _MobilityControlInfo_t304), ('newUE-Identity', _MobilityControlInfo_newUE_Identity), ('radioResourceConfigCommon', _MobilityControlInfo_radioResourceConfigCommon), ('rach-ConfigDedicated', _MobilityControlInfo_rach_ConfigDedicated), ]) MobilityControlInfo._ext = [] #-----< CarrierBandwidthEUTRA >-----# CarrierBandwidthEUTRA = SEQ(name='CarrierBandwidthEUTRA', mode=MODE_TYPE) _CarrierBandwidthEUTRA_dl_Bandwidth = ENUM(name='dl-Bandwidth', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CarrierBandwidthEUTRA_dl_Bandwidth._cont = ASN1Dict([('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5), ('spare10', 6), ('spare9', 7), ('spare8', 8), ('spare7', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]) _CarrierBandwidthEUTRA_dl_Bandwidth._ext = None _CarrierBandwidthEUTRA_ul_Bandwidth = ENUM(name='ul-Bandwidth', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _CarrierBandwidthEUTRA_ul_Bandwidth._cont = ASN1Dict([('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5), ('spare10', 6), ('spare9', 7), ('spare8', 8), ('spare7', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]) _CarrierBandwidthEUTRA_ul_Bandwidth._ext = None CarrierBandwidthEUTRA._cont = ASN1Dict([ ('dl-Bandwidth', _CarrierBandwidthEUTRA_dl_Bandwidth), ('ul-Bandwidth', _CarrierBandwidthEUTRA_ul_Bandwidth), ]) CarrierBandwidthEUTRA._ext = None #-----< CarrierFreqEUTRA >-----# CarrierFreqEUTRA = SEQ(name='CarrierFreqEUTRA', mode=MODE_TYPE) _CarrierFreqEUTRA_dl_CarrierFreq = INT(name='dl-CarrierFreq', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueEUTRA'))) _CarrierFreqEUTRA_ul_CarrierFreq = INT(name='ul-CarrierFreq', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueEUTRA')), opt=True) CarrierFreqEUTRA._cont = ASN1Dict([ ('dl-CarrierFreq', _CarrierFreqEUTRA_dl_CarrierFreq), ('ul-CarrierFreq', _CarrierFreqEUTRA_ul_CarrierFreq), ]) CarrierFreqEUTRA._ext = None #-----< MobilityParametersCDMA2000 >-----# MobilityParametersCDMA2000 = OCT_STR(name='MobilityParametersCDMA2000', mode=MODE_TYPE) #-----< MobilityStateParameters >-----# MobilityStateParameters = SEQ(name='MobilityStateParameters', mode=MODE_TYPE) _MobilityStateParameters_t_Evaluation = ENUM(name='t-Evaluation', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MobilityStateParameters_t_Evaluation._cont = ASN1Dict([('s30', 0), ('s60', 1), ('s120', 2), ('s180', 3), ('s240', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]) _MobilityStateParameters_t_Evaluation._ext = None _MobilityStateParameters_t_HystNormal = ENUM(name='t-HystNormal', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MobilityStateParameters_t_HystNormal._cont = ASN1Dict([('s30', 0), ('s60', 1), ('s120', 2), ('s180', 3), ('s240', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]) _MobilityStateParameters_t_HystNormal._ext = None _MobilityStateParameters_n_CellChangeMedium = INT(name='n-CellChangeMedium', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MobilityStateParameters_n_CellChangeMedium._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) _MobilityStateParameters_n_CellChangeHigh = INT(name='n-CellChangeHigh', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MobilityStateParameters_n_CellChangeHigh._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=16)], ev=None, er=[]) MobilityStateParameters._cont = ASN1Dict([ ('t-Evaluation', _MobilityStateParameters_t_Evaluation), ('t-HystNormal', _MobilityStateParameters_t_HystNormal), ('n-CellChangeMedium', _MobilityStateParameters_n_CellChangeMedium), ('n-CellChangeHigh', _MobilityStateParameters_n_CellChangeHigh), ]) MobilityStateParameters._ext = None #-----< PhysCellId >-----# PhysCellId = INT(name='PhysCellId', mode=MODE_TYPE) PhysCellId._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=503)], ev=None, er=[]) #-----< PhysCellIdRange >-----# PhysCellIdRange = SEQ(name='PhysCellIdRange', mode=MODE_TYPE) _PhysCellIdRange_start = INT(name='start', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellId'))) _PhysCellIdRange_range = ENUM(name='range', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _PhysCellIdRange_range._cont = ASN1Dict([('n4', 0), ('n8', 1), ('n12', 2), ('n16', 3), ('n24', 4), ('n32', 5), ('n48', 6), ('n64', 7), ('n84', 8), ('n96', 9), ('n128', 10), ('n168', 11), ('n252', 12), ('n504', 13), ('spare2', 14), ('spare1', 15)]) _PhysCellIdRange_range._ext = None PhysCellIdRange._cont = ASN1Dict([ ('start', _PhysCellIdRange_start), ('range', _PhysCellIdRange_range), ]) PhysCellIdRange._ext = None #-----< PhysCellIdCDMA2000 >-----# PhysCellIdCDMA2000 = INT(name='PhysCellIdCDMA2000', mode=MODE_TYPE) PhysCellIdCDMA2000._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=511)], ev=None, er=[]) #-----< PhysCellIdGERAN >-----# PhysCellIdGERAN = SEQ(name='PhysCellIdGERAN', mode=MODE_TYPE) _PhysCellIdGERAN_networkColourCode = BIT_STR(name='networkColourCode', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PhysCellIdGERAN_networkColourCode._const_sz = ASN1Set(rv=[3], rr=[], ev=None, er=[]) _PhysCellIdGERAN_baseStationColourCode = BIT_STR(name='baseStationColourCode', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PhysCellIdGERAN_baseStationColourCode._const_sz = ASN1Set(rv=[3], rr=[], ev=None, er=[]) PhysCellIdGERAN._cont = ASN1Dict([ ('networkColourCode', _PhysCellIdGERAN_networkColourCode), ('baseStationColourCode', _PhysCellIdGERAN_baseStationColourCode), ]) PhysCellIdGERAN._ext = None #-----< PhysCellIdUTRA-FDD >-----# PhysCellIdUTRA_FDD = INT(name='PhysCellIdUTRA-FDD', mode=MODE_TYPE) PhysCellIdUTRA_FDD._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=511)], ev=None, er=[]) #-----< PhysCellIdUTRA-TDD >-----# PhysCellIdUTRA_TDD = INT(name='PhysCellIdUTRA-TDD', mode=MODE_TYPE) PhysCellIdUTRA_TDD._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=127)], ev=None, er=[]) #-----< PLMN-Identity >-----# PLMN_Identity = SEQ(name='PLMN-Identity', mode=MODE_TYPE) _PLMN_Identity_mcc = SEQ_OF(name='mcc', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MCC')), opt=True) _PLMN_Identity_mnc = SEQ_OF(name='mnc', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MNC'))) PLMN_Identity._cont = ASN1Dict([ ('mcc', _PLMN_Identity_mcc), ('mnc', _PLMN_Identity_mnc), ]) PLMN_Identity._ext = None #-----< MCC >-----# MCC = SEQ_OF(name='MCC', mode=MODE_TYPE) _MCC__item_ = INT(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MCC-MNC-Digit'))) MCC._cont = _MCC__item_ MCC._const_sz = ASN1Set(rv=[3], rr=[], ev=None, er=[]) #-----< MNC >-----# MNC = SEQ_OF(name='MNC', mode=MODE_TYPE) _MNC__item_ = INT(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MCC-MNC-Digit'))) MNC._cont = _MNC__item_ MNC._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=2, ub=3)], ev=None, er=[]) #-----< MCC-MNC-Digit >-----# MCC_MNC_Digit = INT(name='MCC-MNC-Digit', mode=MODE_TYPE) MCC_MNC_Digit._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=9)], ev=None, er=[]) #-----< PreRegistrationInfoHRPD >-----# PreRegistrationInfoHRPD = SEQ(name='PreRegistrationInfoHRPD', mode=MODE_TYPE) _PreRegistrationInfoHRPD_preRegistrationAllowed = BOOL(name='preRegistrationAllowed', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PreRegistrationInfoHRPD_preRegistrationZoneId = INT(name='preRegistrationZoneId', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PreRegistrationZoneIdHRPD')), opt=True) _PreRegistrationInfoHRPD_secondaryPreRegistrationZoneIdList = SEQ_OF(name='secondaryPreRegistrationZoneIdList', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecondaryPreRegistrationZoneIdListHRPD')), opt=True) PreRegistrationInfoHRPD._cont = ASN1Dict([ ('preRegistrationAllowed', _PreRegistrationInfoHRPD_preRegistrationAllowed), ('preRegistrationZoneId', _PreRegistrationInfoHRPD_preRegistrationZoneId), ('secondaryPreRegistrationZoneIdList', _PreRegistrationInfoHRPD_secondaryPreRegistrationZoneIdList), ]) PreRegistrationInfoHRPD._ext = None #-----< SecondaryPreRegistrationZoneIdListHRPD >-----# SecondaryPreRegistrationZoneIdListHRPD = SEQ_OF(name='SecondaryPreRegistrationZoneIdListHRPD', mode=MODE_TYPE) _SecondaryPreRegistrationZoneIdListHRPD__item_ = INT(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PreRegistrationZoneIdHRPD'))) SecondaryPreRegistrationZoneIdListHRPD._cont = _SecondaryPreRegistrationZoneIdListHRPD__item_ SecondaryPreRegistrationZoneIdListHRPD._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=2)], ev=None, er=[]) #-----< PreRegistrationZoneIdHRPD >-----# PreRegistrationZoneIdHRPD = INT(name='PreRegistrationZoneIdHRPD', mode=MODE_TYPE) PreRegistrationZoneIdHRPD._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=255)], ev=None, er=[]) #-----< Q-RxLevMin >-----# Q_RxLevMin = INT(name='Q-RxLevMin', mode=MODE_TYPE) Q_RxLevMin._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-70, ub=-22)], ev=None, er=[]) #-----< Q-OffsetRange >-----# Q_OffsetRange = ENUM(name='Q-OffsetRange', mode=MODE_TYPE) Q_OffsetRange._cont = ASN1Dict([('dB-24', 0), ('dB-22', 1), ('dB-20', 2), ('dB-18', 3), ('dB-16', 4), ('dB-14', 5), ('dB-12', 6), ('dB-10', 7), ('dB-8', 8), ('dB-6', 9), ('dB-5', 10), ('dB-4', 11), ('dB-3', 12), ('dB-2', 13), ('dB-1', 14), ('dB0', 15), ('dB1', 16), ('dB2', 17), ('dB3', 18), ('dB4', 19), ('dB5', 20), ('dB6', 21), ('dB8', 22), ('dB10', 23), ('dB12', 24), ('dB14', 25), ('dB16', 26), ('dB18', 27), ('dB20', 28), ('dB22', 29), ('dB24', 30)]) Q_OffsetRange._ext = None #-----< Q-OffsetRangeInterRAT >-----# Q_OffsetRangeInterRAT = INT(name='Q-OffsetRangeInterRAT', mode=MODE_TYPE) Q_OffsetRangeInterRAT._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-15, ub=15)], ev=None, er=[]) #-----< ReselectionThreshold >-----# ReselectionThreshold = INT(name='ReselectionThreshold', mode=MODE_TYPE) ReselectionThreshold._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=31)], ev=None, er=[]) #-----< SpeedStateScaleFactors >-----# SpeedStateScaleFactors = SEQ(name='SpeedStateScaleFactors', mode=MODE_TYPE) _SpeedStateScaleFactors_sf_Medium = ENUM(name='sf-Medium', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SpeedStateScaleFactors_sf_Medium._cont = ASN1Dict([('oDot25', 0), ('oDot5', 1), ('oDot75', 2), ('lDot0', 3)]) _SpeedStateScaleFactors_sf_Medium._ext = None _SpeedStateScaleFactors_sf_High = ENUM(name='sf-High', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SpeedStateScaleFactors_sf_High._cont = ASN1Dict([('oDot25', 0), ('oDot5', 1), ('oDot75', 2), ('lDot0', 3)]) _SpeedStateScaleFactors_sf_High._ext = None SpeedStateScaleFactors._cont = ASN1Dict([ ('sf-Medium', _SpeedStateScaleFactors_sf_Medium), ('sf-High', _SpeedStateScaleFactors_sf_High), ]) SpeedStateScaleFactors._ext = None #-----< SystemTimeInfoCDMA2000 >-----# SystemTimeInfoCDMA2000 = SEQ(name='SystemTimeInfoCDMA2000', mode=MODE_TYPE) _SystemTimeInfoCDMA2000_cdma_EUTRA_Synchronisation = BOOL(name='cdma-EUTRA-Synchronisation', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SystemTimeInfoCDMA2000_cdma_SystemTime = CHOICE(name='cdma-SystemTime', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __SystemTimeInfoCDMA2000_cdma_SystemTime_synchronousSystemTime = BIT_STR(name='synchronousSystemTime', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemTimeInfoCDMA2000_cdma_SystemTime_synchronousSystemTime._const_sz = ASN1Set(rv=[39], rr=[], ev=None, er=[]) __SystemTimeInfoCDMA2000_cdma_SystemTime_asynchronousSystemTime = BIT_STR(name='asynchronousSystemTime', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __SystemTimeInfoCDMA2000_cdma_SystemTime_asynchronousSystemTime._const_sz = ASN1Set(rv=[49], rr=[], ev=None, er=[]) _SystemTimeInfoCDMA2000_cdma_SystemTime._cont = ASN1Dict([ ('synchronousSystemTime', __SystemTimeInfoCDMA2000_cdma_SystemTime_synchronousSystemTime), ('asynchronousSystemTime', __SystemTimeInfoCDMA2000_cdma_SystemTime_asynchronousSystemTime), ]) _SystemTimeInfoCDMA2000_cdma_SystemTime._ext = None SystemTimeInfoCDMA2000._cont = ASN1Dict([ ('cdma-EUTRA-Synchronisation', _SystemTimeInfoCDMA2000_cdma_EUTRA_Synchronisation), ('cdma-SystemTime', _SystemTimeInfoCDMA2000_cdma_SystemTime), ]) SystemTimeInfoCDMA2000._ext = None #-----< TrackingAreaCode >-----# TrackingAreaCode = BIT_STR(name='TrackingAreaCode', mode=MODE_TYPE) TrackingAreaCode._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) #-----< T-Reselection >-----# T_Reselection = INT(name='T-Reselection', mode=MODE_TYPE) T_Reselection._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=7)], ev=None, er=[]) #-----< AllowedMeasBandwidth >-----# AllowedMeasBandwidth = ENUM(name='AllowedMeasBandwidth', mode=MODE_TYPE) AllowedMeasBandwidth._cont = ASN1Dict([('mbw6', 0), ('mbw15', 1), ('mbw25', 2), ('mbw50', 3), ('mbw75', 4), ('mbw100', 5)]) AllowedMeasBandwidth._ext = None #-----< Hysteresis >-----# Hysteresis = INT(name='Hysteresis', mode=MODE_TYPE) Hysteresis._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=30)], ev=None, er=[]) #-----< MeasConfig >-----# MeasConfig = SEQ(name='MeasConfig', mode=MODE_TYPE) _MeasConfig_measObjectToRemoveList = SEQ_OF(name='measObjectToRemoveList', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasObjectToRemoveList')), opt=True) _MeasConfig_measObjectToAddModList = SEQ_OF(name='measObjectToAddModList', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasObjectToAddModList')), opt=True) _MeasConfig_reportConfigToRemoveList = SEQ_OF(name='reportConfigToRemoveList', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReportConfigToRemoveList')), opt=True) _MeasConfig_reportConfigToAddModList = SEQ_OF(name='reportConfigToAddModList', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReportConfigToAddModList')), opt=True) _MeasConfig_measIdToRemoveList = SEQ_OF(name='measIdToRemoveList', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasIdToRemoveList')), opt=True) _MeasConfig_measIdToAddModList = SEQ_OF(name='measIdToAddModList', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasIdToAddModList')), opt=True) _MeasConfig_quantityConfig = SEQ(name='quantityConfig', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'QuantityConfig')), opt=True) _MeasConfig_measGapConfig = CHOICE(name='measGapConfig', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasGapConfig')), opt=True) _MeasConfig_s_Measure = INT(name='s-Measure', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RSRP-Range')), opt=True) _MeasConfig_preRegistrationInfoHRPD = SEQ(name='preRegistrationInfoHRPD', mode=MODE_TYPE, tag=(9, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PreRegistrationInfoHRPD')), opt=True) _MeasConfig_speedStatePars = CHOICE(name='speedStatePars', mode=MODE_TYPE, tag=(10, TAG_CONTEXT_SPEC, TAG_EXPLICIT), opt=True) __MeasConfig_speedStatePars_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MeasConfig_speedStatePars_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MeasConfig_speedStatePars_setup_mobilityStateParameters = SEQ(name='mobilityStateParameters', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MobilityStateParameters'))) ___MeasConfig_speedStatePars_setup_timeToTrigger_SF = SEQ(name='timeToTrigger-SF', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SpeedStateScaleFactors'))) __MeasConfig_speedStatePars_setup._cont = ASN1Dict([ ('mobilityStateParameters', ___MeasConfig_speedStatePars_setup_mobilityStateParameters), ('timeToTrigger-SF', ___MeasConfig_speedStatePars_setup_timeToTrigger_SF), ]) __MeasConfig_speedStatePars_setup._ext = None _MeasConfig_speedStatePars._cont = ASN1Dict([ ('release', __MeasConfig_speedStatePars_release), ('setup', __MeasConfig_speedStatePars_setup), ]) _MeasConfig_speedStatePars._ext = None MeasConfig._cont = ASN1Dict([ ('measObjectToRemoveList', _MeasConfig_measObjectToRemoveList), ('measObjectToAddModList', _MeasConfig_measObjectToAddModList), ('reportConfigToRemoveList', _MeasConfig_reportConfigToRemoveList), ('reportConfigToAddModList', _MeasConfig_reportConfigToAddModList), ('measIdToRemoveList', _MeasConfig_measIdToRemoveList), ('measIdToAddModList', _MeasConfig_measIdToAddModList), ('quantityConfig', _MeasConfig_quantityConfig), ('measGapConfig', _MeasConfig_measGapConfig), ('s-Measure', _MeasConfig_s_Measure), ('preRegistrationInfoHRPD', _MeasConfig_preRegistrationInfoHRPD), ('speedStatePars', _MeasConfig_speedStatePars), ]) MeasConfig._ext = [] #-----< MeasIdToRemoveList >-----# MeasIdToRemoveList = SEQ_OF(name='MeasIdToRemoveList', mode=MODE_TYPE) _MeasIdToRemoveList__item_ = INT(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasId'))) MeasIdToRemoveList._cont = _MeasIdToRemoveList__item_ MeasIdToRemoveList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< MeasObjectToRemoveList >-----# MeasObjectToRemoveList = SEQ_OF(name='MeasObjectToRemoveList', mode=MODE_TYPE) _MeasObjectToRemoveList__item_ = INT(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasObjectId'))) MeasObjectToRemoveList._cont = _MeasObjectToRemoveList__item_ MeasObjectToRemoveList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< ReportConfigToRemoveList >-----# ReportConfigToRemoveList = SEQ_OF(name='ReportConfigToRemoveList', mode=MODE_TYPE) _ReportConfigToRemoveList__item_ = INT(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReportConfigId'))) ReportConfigToRemoveList._cont = _ReportConfigToRemoveList__item_ ReportConfigToRemoveList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< MeasGapConfig >-----# MeasGapConfig = CHOICE(name='MeasGapConfig', mode=MODE_TYPE) _MeasGapConfig_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MeasGapConfig_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MeasGapConfig_setup_gapOffset = CHOICE(name='gapOffset', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___MeasGapConfig_setup_gapOffset_gp0 = INT(name='gp0', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MeasGapConfig_setup_gapOffset_gp0._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=39)], ev=None, er=[]) ___MeasGapConfig_setup_gapOffset_gp1 = INT(name='gp1', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___MeasGapConfig_setup_gapOffset_gp1._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=79)], ev=None, er=[]) __MeasGapConfig_setup_gapOffset._cont = ASN1Dict([ ('gp0', ___MeasGapConfig_setup_gapOffset_gp0), ('gp1', ___MeasGapConfig_setup_gapOffset_gp1), ]) __MeasGapConfig_setup_gapOffset._ext = [] _MeasGapConfig_setup._cont = ASN1Dict([ ('gapOffset', __MeasGapConfig_setup_gapOffset), ]) _MeasGapConfig_setup._ext = None MeasGapConfig._cont = ASN1Dict([ ('release', _MeasGapConfig_release), ('setup', _MeasGapConfig_setup), ]) MeasGapConfig._ext = None #-----< MeasId >-----# MeasId = INT(name='MeasId', mode=MODE_TYPE) MeasId._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< MeasIdToAddModList >-----# MeasIdToAddModList = SEQ_OF(name='MeasIdToAddModList', mode=MODE_TYPE) _MeasIdToAddModList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasIdToAddMod'))) MeasIdToAddModList._cont = _MeasIdToAddModList__item_ MeasIdToAddModList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< MeasIdToAddMod >-----# MeasIdToAddMod = SEQ(name='MeasIdToAddMod', mode=MODE_TYPE) _MeasIdToAddMod_measId = INT(name='measId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasId'))) _MeasIdToAddMod_measObjectId = INT(name='measObjectId', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasObjectId'))) _MeasIdToAddMod_reportConfigId = INT(name='reportConfigId', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReportConfigId'))) MeasIdToAddMod._cont = ASN1Dict([ ('measId', _MeasIdToAddMod_measId), ('measObjectId', _MeasIdToAddMod_measObjectId), ('reportConfigId', _MeasIdToAddMod_reportConfigId), ]) MeasIdToAddMod._ext = None #-----< MeasObjectCDMA2000 >-----# MeasObjectCDMA2000 = SEQ(name='MeasObjectCDMA2000', mode=MODE_TYPE) _MeasObjectCDMA2000_cdma2000_Type = ENUM(name='cdma2000-Type', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CDMA2000-Type'))) _MeasObjectCDMA2000_carrierFreq = SEQ(name='carrierFreq', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqCDMA2000'))) _MeasObjectCDMA2000_searchWindowSize = INT(name='searchWindowSize', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _MeasObjectCDMA2000_searchWindowSize._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=15)], ev=None, er=[]) _MeasObjectCDMA2000_offsetFreq = INT(name='offsetFreq', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Q-OffsetRangeInterRAT')), default=0) _MeasObjectCDMA2000_cellsToRemoveList = SEQ_OF(name='cellsToRemoveList', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellIndexList')), opt=True) _MeasObjectCDMA2000_cellsToAddModList = SEQ_OF(name='cellsToAddModList', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellsToAddModListCDMA2000')), opt=True) _MeasObjectCDMA2000_cellForWhichToReportCGI = INT(name='cellForWhichToReportCGI', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdCDMA2000')), opt=True) MeasObjectCDMA2000._cont = ASN1Dict([ ('cdma2000-Type', _MeasObjectCDMA2000_cdma2000_Type), ('carrierFreq', _MeasObjectCDMA2000_carrierFreq), ('searchWindowSize', _MeasObjectCDMA2000_searchWindowSize), ('offsetFreq', _MeasObjectCDMA2000_offsetFreq), ('cellsToRemoveList', _MeasObjectCDMA2000_cellsToRemoveList), ('cellsToAddModList', _MeasObjectCDMA2000_cellsToAddModList), ('cellForWhichToReportCGI', _MeasObjectCDMA2000_cellForWhichToReportCGI), ]) MeasObjectCDMA2000._ext = [] #-----< CellsToAddModListCDMA2000 >-----# CellsToAddModListCDMA2000 = SEQ_OF(name='CellsToAddModListCDMA2000', mode=MODE_TYPE) _CellsToAddModListCDMA2000__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellsToAddModCDMA2000'))) CellsToAddModListCDMA2000._cont = _CellsToAddModListCDMA2000__item_ CellsToAddModListCDMA2000._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< CellsToAddModCDMA2000 >-----# CellsToAddModCDMA2000 = SEQ(name='CellsToAddModCDMA2000', mode=MODE_TYPE) _CellsToAddModCDMA2000_cellIndex = INT(name='cellIndex', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CellsToAddModCDMA2000_cellIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) _CellsToAddModCDMA2000_physCellId = INT(name='physCellId', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdCDMA2000'))) CellsToAddModCDMA2000._cont = ASN1Dict([ ('cellIndex', _CellsToAddModCDMA2000_cellIndex), ('physCellId', _CellsToAddModCDMA2000_physCellId), ]) CellsToAddModCDMA2000._ext = None #-----< MeasObjectEUTRA >-----# MeasObjectEUTRA = SEQ(name='MeasObjectEUTRA', mode=MODE_TYPE) _MeasObjectEUTRA_carrierFreq = INT(name='carrierFreq', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueEUTRA'))) _MeasObjectEUTRA_allowedMeasBandwidth = ENUM(name='allowedMeasBandwidth', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'AllowedMeasBandwidth'))) _MeasObjectEUTRA_presenceAntennaPort1 = BOOL(name='presenceAntennaPort1', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PresenceAntennaPort1'))) _MeasObjectEUTRA_neighCellConfig = BIT_STR(name='neighCellConfig', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'NeighCellConfig'))) _MeasObjectEUTRA_offsetFreq = ENUM(name='offsetFreq', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Q-OffsetRange')), default='dB0') _MeasObjectEUTRA_cellsToRemoveList = SEQ_OF(name='cellsToRemoveList', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellIndexList')), opt=True) _MeasObjectEUTRA_cellsToAddModList = SEQ_OF(name='cellsToAddModList', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellsToAddModList')), opt=True) _MeasObjectEUTRA_blackCellsToRemoveList = SEQ_OF(name='blackCellsToRemoveList', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellIndexList')), opt=True) _MeasObjectEUTRA_blackCellsToAddModList = SEQ_OF(name='blackCellsToAddModList', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BlackCellsToAddModList')), opt=True) _MeasObjectEUTRA_cellForWhichToReportCGI = INT(name='cellForWhichToReportCGI', mode=MODE_TYPE, tag=(9, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellId')), opt=True) MeasObjectEUTRA._cont = ASN1Dict([ ('carrierFreq', _MeasObjectEUTRA_carrierFreq), ('allowedMeasBandwidth', _MeasObjectEUTRA_allowedMeasBandwidth), ('presenceAntennaPort1', _MeasObjectEUTRA_presenceAntennaPort1), ('neighCellConfig', _MeasObjectEUTRA_neighCellConfig), ('offsetFreq', _MeasObjectEUTRA_offsetFreq), ('cellsToRemoveList', _MeasObjectEUTRA_cellsToRemoveList), ('cellsToAddModList', _MeasObjectEUTRA_cellsToAddModList), ('blackCellsToRemoveList', _MeasObjectEUTRA_blackCellsToRemoveList), ('blackCellsToAddModList', _MeasObjectEUTRA_blackCellsToAddModList), ('cellForWhichToReportCGI', _MeasObjectEUTRA_cellForWhichToReportCGI), ]) MeasObjectEUTRA._ext = [] #-----< CellsToAddModList >-----# CellsToAddModList = SEQ_OF(name='CellsToAddModList', mode=MODE_TYPE) _CellsToAddModList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellsToAddMod'))) CellsToAddModList._cont = _CellsToAddModList__item_ CellsToAddModList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< CellsToAddMod >-----# CellsToAddMod = SEQ(name='CellsToAddMod', mode=MODE_TYPE) _CellsToAddMod_cellIndex = INT(name='cellIndex', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CellsToAddMod_cellIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) _CellsToAddMod_physCellId = INT(name='physCellId', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellId'))) _CellsToAddMod_cellIndividualOffset = ENUM(name='cellIndividualOffset', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Q-OffsetRange'))) CellsToAddMod._cont = ASN1Dict([ ('cellIndex', _CellsToAddMod_cellIndex), ('physCellId', _CellsToAddMod_physCellId), ('cellIndividualOffset', _CellsToAddMod_cellIndividualOffset), ]) CellsToAddMod._ext = None #-----< BlackCellsToAddModList >-----# BlackCellsToAddModList = SEQ_OF(name='BlackCellsToAddModList', mode=MODE_TYPE) _BlackCellsToAddModList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BlackCellsToAddMod'))) BlackCellsToAddModList._cont = _BlackCellsToAddModList__item_ BlackCellsToAddModList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< BlackCellsToAddMod >-----# BlackCellsToAddMod = SEQ(name='BlackCellsToAddMod', mode=MODE_TYPE) _BlackCellsToAddMod_cellIndex = INT(name='cellIndex', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _BlackCellsToAddMod_cellIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) _BlackCellsToAddMod_physCellIdRange = SEQ(name='physCellIdRange', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdRange'))) BlackCellsToAddMod._cont = ASN1Dict([ ('cellIndex', _BlackCellsToAddMod_cellIndex), ('physCellIdRange', _BlackCellsToAddMod_physCellIdRange), ]) BlackCellsToAddMod._ext = None #-----< MeasObjectGERAN >-----# MeasObjectGERAN = SEQ(name='MeasObjectGERAN', mode=MODE_TYPE) _MeasObjectGERAN_carrierFreqs = SEQ(name='carrierFreqs', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqsGERAN'))) _MeasObjectGERAN_offsetFreq = INT(name='offsetFreq', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Q-OffsetRangeInterRAT')), default=0) _MeasObjectGERAN_ncc_Permitted = BIT_STR(name='ncc-Permitted', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), default=(255, 8)) _MeasObjectGERAN_ncc_Permitted._const_sz = ASN1Set(rv=[8], rr=[], ev=None, er=[]) _MeasObjectGERAN_cellForWhichToReportCGI = SEQ(name='cellForWhichToReportCGI', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdGERAN')), opt=True) MeasObjectGERAN._cont = ASN1Dict([ ('carrierFreqs', _MeasObjectGERAN_carrierFreqs), ('offsetFreq', _MeasObjectGERAN_offsetFreq), ('ncc-Permitted', _MeasObjectGERAN_ncc_Permitted), ('cellForWhichToReportCGI', _MeasObjectGERAN_cellForWhichToReportCGI), ]) MeasObjectGERAN._ext = [] #-----< MeasObjectId >-----# MeasObjectId = INT(name='MeasObjectId', mode=MODE_TYPE) MeasObjectId._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< MeasObjectToAddModList >-----# MeasObjectToAddModList = SEQ_OF(name='MeasObjectToAddModList', mode=MODE_TYPE) _MeasObjectToAddModList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasObjectToAddMod'))) MeasObjectToAddModList._cont = _MeasObjectToAddModList__item_ MeasObjectToAddModList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< MeasObjectToAddMod >-----# MeasObjectToAddMod = SEQ(name='MeasObjectToAddMod', mode=MODE_TYPE) _MeasObjectToAddMod_measObjectId = INT(name='measObjectId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasObjectId'))) _MeasObjectToAddMod_measObject = CHOICE(name='measObject', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __MeasObjectToAddMod_measObject_measObjectEUTRA = SEQ(name='measObjectEUTRA', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasObjectEUTRA'))) __MeasObjectToAddMod_measObject_measObjectUTRA = SEQ(name='measObjectUTRA', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasObjectUTRA'))) __MeasObjectToAddMod_measObject_measObjectGERAN = SEQ(name='measObjectGERAN', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasObjectGERAN'))) __MeasObjectToAddMod_measObject_measObjectCDMA2000 = SEQ(name='measObjectCDMA2000', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasObjectCDMA2000'))) _MeasObjectToAddMod_measObject._cont = ASN1Dict([ ('measObjectEUTRA', __MeasObjectToAddMod_measObject_measObjectEUTRA), ('measObjectUTRA', __MeasObjectToAddMod_measObject_measObjectUTRA), ('measObjectGERAN', __MeasObjectToAddMod_measObject_measObjectGERAN), ('measObjectCDMA2000', __MeasObjectToAddMod_measObject_measObjectCDMA2000), ]) _MeasObjectToAddMod_measObject._ext = [] MeasObjectToAddMod._cont = ASN1Dict([ ('measObjectId', _MeasObjectToAddMod_measObjectId), ('measObject', _MeasObjectToAddMod_measObject), ]) MeasObjectToAddMod._ext = None #-----< MeasObjectUTRA >-----# MeasObjectUTRA = SEQ(name='MeasObjectUTRA', mode=MODE_TYPE) _MeasObjectUTRA_carrierFreq = INT(name='carrierFreq', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueUTRA'))) _MeasObjectUTRA_offsetFreq = INT(name='offsetFreq', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Q-OffsetRangeInterRAT')), default=0) _MeasObjectUTRA_cellsToRemoveList = SEQ_OF(name='cellsToRemoveList', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellIndexList')), opt=True) _MeasObjectUTRA_cellsToAddModList = CHOICE(name='cellsToAddModList', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_EXPLICIT), opt=True) __MeasObjectUTRA_cellsToAddModList_cellsToAddModListUTRA_FDD = SEQ_OF(name='cellsToAddModListUTRA-FDD', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellsToAddModListUTRA-FDD'))) __MeasObjectUTRA_cellsToAddModList_cellsToAddModListUTRA_TDD = SEQ_OF(name='cellsToAddModListUTRA-TDD', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellsToAddModListUTRA-TDD'))) _MeasObjectUTRA_cellsToAddModList._cont = ASN1Dict([ ('cellsToAddModListUTRA-FDD', __MeasObjectUTRA_cellsToAddModList_cellsToAddModListUTRA_FDD), ('cellsToAddModListUTRA-TDD', __MeasObjectUTRA_cellsToAddModList_cellsToAddModListUTRA_TDD), ]) _MeasObjectUTRA_cellsToAddModList._ext = None _MeasObjectUTRA_cellForWhichToReportCGI = CHOICE(name='cellForWhichToReportCGI', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_EXPLICIT), opt=True) __MeasObjectUTRA_cellForWhichToReportCGI_utra_FDD = INT(name='utra-FDD', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdUTRA-FDD'))) __MeasObjectUTRA_cellForWhichToReportCGI_utra_TDD = INT(name='utra-TDD', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdUTRA-TDD'))) _MeasObjectUTRA_cellForWhichToReportCGI._cont = ASN1Dict([ ('utra-FDD', __MeasObjectUTRA_cellForWhichToReportCGI_utra_FDD), ('utra-TDD', __MeasObjectUTRA_cellForWhichToReportCGI_utra_TDD), ]) _MeasObjectUTRA_cellForWhichToReportCGI._ext = None MeasObjectUTRA._cont = ASN1Dict([ ('carrierFreq', _MeasObjectUTRA_carrierFreq), ('offsetFreq', _MeasObjectUTRA_offsetFreq), ('cellsToRemoveList', _MeasObjectUTRA_cellsToRemoveList), ('cellsToAddModList', _MeasObjectUTRA_cellsToAddModList), ('cellForWhichToReportCGI', _MeasObjectUTRA_cellForWhichToReportCGI), ]) MeasObjectUTRA._ext = [] #-----< CellsToAddModListUTRA-FDD >-----# CellsToAddModListUTRA_FDD = SEQ_OF(name='CellsToAddModListUTRA-FDD', mode=MODE_TYPE) _CellsToAddModListUTRA_FDD__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellsToAddModUTRA-FDD'))) CellsToAddModListUTRA_FDD._cont = _CellsToAddModListUTRA_FDD__item_ CellsToAddModListUTRA_FDD._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< CellsToAddModUTRA-FDD >-----# CellsToAddModUTRA_FDD = SEQ(name='CellsToAddModUTRA-FDD', mode=MODE_TYPE) _CellsToAddModUTRA_FDD_cellIndex = INT(name='cellIndex', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CellsToAddModUTRA_FDD_cellIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) _CellsToAddModUTRA_FDD_physCellId = INT(name='physCellId', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdUTRA-FDD'))) CellsToAddModUTRA_FDD._cont = ASN1Dict([ ('cellIndex', _CellsToAddModUTRA_FDD_cellIndex), ('physCellId', _CellsToAddModUTRA_FDD_physCellId), ]) CellsToAddModUTRA_FDD._ext = None #-----< CellsToAddModListUTRA-TDD >-----# CellsToAddModListUTRA_TDD = SEQ_OF(name='CellsToAddModListUTRA-TDD', mode=MODE_TYPE) _CellsToAddModListUTRA_TDD__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellsToAddModUTRA-TDD'))) CellsToAddModListUTRA_TDD._cont = _CellsToAddModListUTRA_TDD__item_ CellsToAddModListUTRA_TDD._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< CellsToAddModUTRA-TDD >-----# CellsToAddModUTRA_TDD = SEQ(name='CellsToAddModUTRA-TDD', mode=MODE_TYPE) _CellsToAddModUTRA_TDD_cellIndex = INT(name='cellIndex', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _CellsToAddModUTRA_TDD_cellIndex._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) _CellsToAddModUTRA_TDD_physCellId = INT(name='physCellId', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdUTRA-TDD'))) CellsToAddModUTRA_TDD._cont = ASN1Dict([ ('cellIndex', _CellsToAddModUTRA_TDD_cellIndex), ('physCellId', _CellsToAddModUTRA_TDD_physCellId), ]) CellsToAddModUTRA_TDD._ext = None #-----< MeasResults >-----# MeasResults = SEQ(name='MeasResults', mode=MODE_TYPE) _MeasResults_measId = INT(name='measId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasId'))) _MeasResults_measResultServCell = SEQ(name='measResultServCell', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MeasResults_measResultServCell_rsrpResult = INT(name='rsrpResult', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RSRP-Range'))) __MeasResults_measResultServCell_rsrqResult = INT(name='rsrqResult', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RSRQ-Range'))) _MeasResults_measResultServCell._cont = ASN1Dict([ ('rsrpResult', __MeasResults_measResultServCell_rsrpResult), ('rsrqResult', __MeasResults_measResultServCell_rsrqResult), ]) _MeasResults_measResultServCell._ext = None _MeasResults_measResultNeighCells = CHOICE(name='measResultNeighCells', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_EXPLICIT), opt=True) __MeasResults_measResultNeighCells_measResultListEUTRA = SEQ_OF(name='measResultListEUTRA', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasResultListEUTRA'))) __MeasResults_measResultNeighCells_measResultListUTRA = SEQ_OF(name='measResultListUTRA', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasResultListUTRA'))) __MeasResults_measResultNeighCells_measResultListGERAN = SEQ_OF(name='measResultListGERAN', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasResultListGERAN'))) __MeasResults_measResultNeighCells_measResultsCDMA2000 = SEQ(name='measResultsCDMA2000', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasResultsCDMA2000'))) _MeasResults_measResultNeighCells._cont = ASN1Dict([ ('measResultListEUTRA', __MeasResults_measResultNeighCells_measResultListEUTRA), ('measResultListUTRA', __MeasResults_measResultNeighCells_measResultListUTRA), ('measResultListGERAN', __MeasResults_measResultNeighCells_measResultListGERAN), ('measResultsCDMA2000', __MeasResults_measResultNeighCells_measResultsCDMA2000), ]) _MeasResults_measResultNeighCells._ext = [] MeasResults._cont = ASN1Dict([ ('measId', _MeasResults_measId), ('measResultServCell', _MeasResults_measResultServCell), ('measResultNeighCells', _MeasResults_measResultNeighCells), ]) MeasResults._ext = [] #-----< MeasResultListEUTRA >-----# MeasResultListEUTRA = SEQ_OF(name='MeasResultListEUTRA', mode=MODE_TYPE) _MeasResultListEUTRA__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasResultEUTRA'))) MeasResultListEUTRA._cont = _MeasResultListEUTRA__item_ MeasResultListEUTRA._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) #-----< MeasResultEUTRA >-----# MeasResultEUTRA = SEQ(name='MeasResultEUTRA', mode=MODE_TYPE) _MeasResultEUTRA_physCellId = INT(name='physCellId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellId'))) _MeasResultEUTRA_cgi_Info = SEQ(name='cgi-Info', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __MeasResultEUTRA_cgi_Info_cellGlobalId = SEQ(name='cellGlobalId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellGlobalIdEUTRA'))) __MeasResultEUTRA_cgi_Info_trackingAreaCode = BIT_STR(name='trackingAreaCode', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'TrackingAreaCode'))) __MeasResultEUTRA_cgi_Info_plmn_IdentityList = SEQ_OF(name='plmn-IdentityList', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PLMN-IdentityList2')), opt=True) _MeasResultEUTRA_cgi_Info._cont = ASN1Dict([ ('cellGlobalId', __MeasResultEUTRA_cgi_Info_cellGlobalId), ('trackingAreaCode', __MeasResultEUTRA_cgi_Info_trackingAreaCode), ('plmn-IdentityList', __MeasResultEUTRA_cgi_Info_plmn_IdentityList), ]) _MeasResultEUTRA_cgi_Info._ext = None _MeasResultEUTRA_measResult = SEQ(name='measResult', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MeasResultEUTRA_measResult_rsrpResult = INT(name='rsrpResult', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RSRP-Range')), opt=True) __MeasResultEUTRA_measResult_rsrqResult = INT(name='rsrqResult', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RSRQ-Range')), opt=True) _MeasResultEUTRA_measResult._cont = ASN1Dict([ ('rsrpResult', __MeasResultEUTRA_measResult_rsrpResult), ('rsrqResult', __MeasResultEUTRA_measResult_rsrqResult), ]) _MeasResultEUTRA_measResult._ext = [] MeasResultEUTRA._cont = ASN1Dict([ ('physCellId', _MeasResultEUTRA_physCellId), ('cgi-Info', _MeasResultEUTRA_cgi_Info), ('measResult', _MeasResultEUTRA_measResult), ]) MeasResultEUTRA._ext = None #-----< MeasResultListUTRA >-----# MeasResultListUTRA = SEQ_OF(name='MeasResultListUTRA', mode=MODE_TYPE) _MeasResultListUTRA__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasResultUTRA'))) MeasResultListUTRA._cont = _MeasResultListUTRA__item_ MeasResultListUTRA._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) #-----< MeasResultUTRA >-----# MeasResultUTRA = SEQ(name='MeasResultUTRA', mode=MODE_TYPE) _MeasResultUTRA_physCellId = CHOICE(name='physCellId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __MeasResultUTRA_physCellId_fdd = INT(name='fdd', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdUTRA-FDD'))) __MeasResultUTRA_physCellId_tdd = INT(name='tdd', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdUTRA-TDD'))) _MeasResultUTRA_physCellId._cont = ASN1Dict([ ('fdd', __MeasResultUTRA_physCellId_fdd), ('tdd', __MeasResultUTRA_physCellId_tdd), ]) _MeasResultUTRA_physCellId._ext = None _MeasResultUTRA_cgi_Info = SEQ(name='cgi-Info', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __MeasResultUTRA_cgi_Info_cellGlobalId = SEQ(name='cellGlobalId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellGlobalIdUTRA'))) __MeasResultUTRA_cgi_Info_locationAreaCode = BIT_STR(name='locationAreaCode', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __MeasResultUTRA_cgi_Info_locationAreaCode._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) __MeasResultUTRA_cgi_Info_routingAreaCode = BIT_STR(name='routingAreaCode', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __MeasResultUTRA_cgi_Info_routingAreaCode._const_sz = ASN1Set(rv=[8], rr=[], ev=None, er=[]) __MeasResultUTRA_cgi_Info_plmn_IdentityList = SEQ_OF(name='plmn-IdentityList', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PLMN-IdentityList2')), opt=True) _MeasResultUTRA_cgi_Info._cont = ASN1Dict([ ('cellGlobalId', __MeasResultUTRA_cgi_Info_cellGlobalId), ('locationAreaCode', __MeasResultUTRA_cgi_Info_locationAreaCode), ('routingAreaCode', __MeasResultUTRA_cgi_Info_routingAreaCode), ('plmn-IdentityList', __MeasResultUTRA_cgi_Info_plmn_IdentityList), ]) _MeasResultUTRA_cgi_Info._ext = None _MeasResultUTRA_measResult = SEQ(name='measResult', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MeasResultUTRA_measResult_utra_RSCP = INT(name='utra-RSCP', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __MeasResultUTRA_measResult_utra_RSCP._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-5, ub=91)], ev=None, er=[]) __MeasResultUTRA_measResult_utra_EcN0 = INT(name='utra-EcN0', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __MeasResultUTRA_measResult_utra_EcN0._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=49)], ev=None, er=[]) _MeasResultUTRA_measResult._cont = ASN1Dict([ ('utra-RSCP', __MeasResultUTRA_measResult_utra_RSCP), ('utra-EcN0', __MeasResultUTRA_measResult_utra_EcN0), ]) _MeasResultUTRA_measResult._ext = [] MeasResultUTRA._cont = ASN1Dict([ ('physCellId', _MeasResultUTRA_physCellId), ('cgi-Info', _MeasResultUTRA_cgi_Info), ('measResult', _MeasResultUTRA_measResult), ]) MeasResultUTRA._ext = None #-----< MeasResultListGERAN >-----# MeasResultListGERAN = SEQ_OF(name='MeasResultListGERAN', mode=MODE_TYPE) _MeasResultListGERAN__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasResultGERAN'))) MeasResultListGERAN._cont = _MeasResultListGERAN__item_ MeasResultListGERAN._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) #-----< MeasResultGERAN >-----# MeasResultGERAN = SEQ(name='MeasResultGERAN', mode=MODE_TYPE) _MeasResultGERAN_carrierFreq = SEQ(name='carrierFreq', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CarrierFreqGERAN'))) _MeasResultGERAN_physCellId = SEQ(name='physCellId', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdGERAN'))) _MeasResultGERAN_cgi_Info = SEQ(name='cgi-Info', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __MeasResultGERAN_cgi_Info_cellGlobalId = SEQ(name='cellGlobalId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellGlobalIdGERAN'))) __MeasResultGERAN_cgi_Info_routingAreaCode = BIT_STR(name='routingAreaCode', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __MeasResultGERAN_cgi_Info_routingAreaCode._const_sz = ASN1Set(rv=[8], rr=[], ev=None, er=[]) _MeasResultGERAN_cgi_Info._cont = ASN1Dict([ ('cellGlobalId', __MeasResultGERAN_cgi_Info_cellGlobalId), ('routingAreaCode', __MeasResultGERAN_cgi_Info_routingAreaCode), ]) _MeasResultGERAN_cgi_Info._ext = None _MeasResultGERAN_measResult = SEQ(name='measResult', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MeasResultGERAN_measResult_rssi = INT(name='rssi', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MeasResultGERAN_measResult_rssi._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=63)], ev=None, er=[]) _MeasResultGERAN_measResult._cont = ASN1Dict([ ('rssi', __MeasResultGERAN_measResult_rssi), ]) _MeasResultGERAN_measResult._ext = [] MeasResultGERAN._cont = ASN1Dict([ ('carrierFreq', _MeasResultGERAN_carrierFreq), ('physCellId', _MeasResultGERAN_physCellId), ('cgi-Info', _MeasResultGERAN_cgi_Info), ('measResult', _MeasResultGERAN_measResult), ]) MeasResultGERAN._ext = None #-----< MeasResultsCDMA2000 >-----# MeasResultsCDMA2000 = SEQ(name='MeasResultsCDMA2000', mode=MODE_TYPE) _MeasResultsCDMA2000_preRegistrationStatusHRPD = BOOL(name='preRegistrationStatusHRPD', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _MeasResultsCDMA2000_measResultListCDMA2000 = SEQ_OF(name='measResultListCDMA2000', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasResultListCDMA2000'))) MeasResultsCDMA2000._cont = ASN1Dict([ ('preRegistrationStatusHRPD', _MeasResultsCDMA2000_preRegistrationStatusHRPD), ('measResultListCDMA2000', _MeasResultsCDMA2000_measResultListCDMA2000), ]) MeasResultsCDMA2000._ext = None #-----< MeasResultListCDMA2000 >-----# MeasResultListCDMA2000 = SEQ_OF(name='MeasResultListCDMA2000', mode=MODE_TYPE) _MeasResultListCDMA2000__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasResultCDMA2000'))) MeasResultListCDMA2000._cont = _MeasResultListCDMA2000__item_ MeasResultListCDMA2000._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) #-----< MeasResultCDMA2000 >-----# MeasResultCDMA2000 = SEQ(name='MeasResultCDMA2000', mode=MODE_TYPE) _MeasResultCDMA2000_physCellId = INT(name='physCellId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellIdCDMA2000'))) _MeasResultCDMA2000_cgi_Info = CHOICE(name='cgi-Info', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellGlobalIdCDMA2000')), opt=True) _MeasResultCDMA2000_measResult = SEQ(name='measResult', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MeasResultCDMA2000_measResult_pilotPnPhase = INT(name='pilotPnPhase', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) __MeasResultCDMA2000_measResult_pilotPnPhase._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=32767)], ev=None, er=[]) __MeasResultCDMA2000_measResult_pilotStrength = INT(name='pilotStrength', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __MeasResultCDMA2000_measResult_pilotStrength._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=63)], ev=None, er=[]) _MeasResultCDMA2000_measResult._cont = ASN1Dict([ ('pilotPnPhase', __MeasResultCDMA2000_measResult_pilotPnPhase), ('pilotStrength', __MeasResultCDMA2000_measResult_pilotStrength), ]) _MeasResultCDMA2000_measResult._ext = [] MeasResultCDMA2000._cont = ASN1Dict([ ('physCellId', _MeasResultCDMA2000_physCellId), ('cgi-Info', _MeasResultCDMA2000_cgi_Info), ('measResult', _MeasResultCDMA2000_measResult), ]) MeasResultCDMA2000._ext = None #-----< PLMN-IdentityList2 >-----# PLMN_IdentityList2 = SEQ_OF(name='PLMN-IdentityList2', mode=MODE_TYPE) _PLMN_IdentityList2__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PLMN-Identity'))) PLMN_IdentityList2._cont = _PLMN_IdentityList2__item_ PLMN_IdentityList2._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=5)], ev=None, er=[]) #-----< QuantityConfig >-----# QuantityConfig = SEQ(name='QuantityConfig', mode=MODE_TYPE) _QuantityConfig_quantityConfigEUTRA = SEQ(name='quantityConfigEUTRA', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'QuantityConfigEUTRA')), opt=True) _QuantityConfig_quantityConfigUTRA = SEQ(name='quantityConfigUTRA', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'QuantityConfigUTRA')), opt=True) _QuantityConfig_quantityConfigGERAN = SEQ(name='quantityConfigGERAN', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'QuantityConfigGERAN')), opt=True) _QuantityConfig_quantityConfigCDMA2000 = SEQ(name='quantityConfigCDMA2000', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'QuantityConfigCDMA2000')), opt=True) QuantityConfig._cont = ASN1Dict([ ('quantityConfigEUTRA', _QuantityConfig_quantityConfigEUTRA), ('quantityConfigUTRA', _QuantityConfig_quantityConfigUTRA), ('quantityConfigGERAN', _QuantityConfig_quantityConfigGERAN), ('quantityConfigCDMA2000', _QuantityConfig_quantityConfigCDMA2000), ]) QuantityConfig._ext = [] #-----< QuantityConfigEUTRA >-----# QuantityConfigEUTRA = SEQ(name='QuantityConfigEUTRA', mode=MODE_TYPE) _QuantityConfigEUTRA_filterCoefficientRSRP = ENUM(name='filterCoefficientRSRP', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FilterCoefficient')), default='fc4') _QuantityConfigEUTRA_filterCoefficientRSRQ = ENUM(name='filterCoefficientRSRQ', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FilterCoefficient')), default='fc4') QuantityConfigEUTRA._cont = ASN1Dict([ ('filterCoefficientRSRP', _QuantityConfigEUTRA_filterCoefficientRSRP), ('filterCoefficientRSRQ', _QuantityConfigEUTRA_filterCoefficientRSRQ), ]) QuantityConfigEUTRA._ext = None #-----< QuantityConfigUTRA >-----# QuantityConfigUTRA = SEQ(name='QuantityConfigUTRA', mode=MODE_TYPE) _QuantityConfigUTRA_measQuantityUTRA_FDD = ENUM(name='measQuantityUTRA-FDD', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _QuantityConfigUTRA_measQuantityUTRA_FDD._cont = ASN1Dict([('cpich-RSCP', 0), ('cpich-EcN0', 1)]) _QuantityConfigUTRA_measQuantityUTRA_FDD._ext = None _QuantityConfigUTRA_measQuantityUTRA_TDD = ENUM(name='measQuantityUTRA-TDD', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _QuantityConfigUTRA_measQuantityUTRA_TDD._cont = ASN1Dict([('pccpch-RSCP', 0)]) _QuantityConfigUTRA_measQuantityUTRA_TDD._ext = None _QuantityConfigUTRA_filterCoefficient = ENUM(name='filterCoefficient', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FilterCoefficient')), default='fc4') QuantityConfigUTRA._cont = ASN1Dict([ ('measQuantityUTRA-FDD', _QuantityConfigUTRA_measQuantityUTRA_FDD), ('measQuantityUTRA-TDD', _QuantityConfigUTRA_measQuantityUTRA_TDD), ('filterCoefficient', _QuantityConfigUTRA_filterCoefficient), ]) QuantityConfigUTRA._ext = None #-----< QuantityConfigGERAN >-----# QuantityConfigGERAN = SEQ(name='QuantityConfigGERAN', mode=MODE_TYPE) _QuantityConfigGERAN_measQuantityGERAN = ENUM(name='measQuantityGERAN', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _QuantityConfigGERAN_measQuantityGERAN._cont = ASN1Dict([('rssi', 0)]) _QuantityConfigGERAN_measQuantityGERAN._ext = None _QuantityConfigGERAN_filterCoefficient = ENUM(name='filterCoefficient', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'FilterCoefficient')), default='fc2') QuantityConfigGERAN._cont = ASN1Dict([ ('measQuantityGERAN', _QuantityConfigGERAN_measQuantityGERAN), ('filterCoefficient', _QuantityConfigGERAN_filterCoefficient), ]) QuantityConfigGERAN._ext = None #-----< QuantityConfigCDMA2000 >-----# QuantityConfigCDMA2000 = SEQ(name='QuantityConfigCDMA2000', mode=MODE_TYPE) _QuantityConfigCDMA2000_measQuantityCDMA2000 = ENUM(name='measQuantityCDMA2000', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _QuantityConfigCDMA2000_measQuantityCDMA2000._cont = ASN1Dict([('pilotStrength', 0), ('pilotPnPhaseAndPilotStrength', 1)]) _QuantityConfigCDMA2000_measQuantityCDMA2000._ext = None QuantityConfigCDMA2000._cont = ASN1Dict([ ('measQuantityCDMA2000', _QuantityConfigCDMA2000_measQuantityCDMA2000), ]) QuantityConfigCDMA2000._ext = None #-----< ReportConfigEUTRA >-----# ReportConfigEUTRA = SEQ(name='ReportConfigEUTRA', mode=MODE_TYPE) _ReportConfigEUTRA_triggerType = CHOICE(name='triggerType', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __ReportConfigEUTRA_triggerType_event = SEQ(name='event', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___ReportConfigEUTRA_triggerType_event_eventId = CHOICE(name='eventId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ____ReportConfigEUTRA_triggerType_event_eventId_eventA1 = SEQ(name='eventA1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _____ReportConfigEUTRA_triggerType_event_eventId_eventA1_a1_Threshold = CHOICE(name='a1-Threshold', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ThresholdEUTRA'))) ____ReportConfigEUTRA_triggerType_event_eventId_eventA1._cont = ASN1Dict([ ('a1-Threshold', _____ReportConfigEUTRA_triggerType_event_eventId_eventA1_a1_Threshold), ]) ____ReportConfigEUTRA_triggerType_event_eventId_eventA1._ext = None ____ReportConfigEUTRA_triggerType_event_eventId_eventA2 = SEQ(name='eventA2', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _____ReportConfigEUTRA_triggerType_event_eventId_eventA2_a2_Threshold = CHOICE(name='a2-Threshold', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ThresholdEUTRA'))) ____ReportConfigEUTRA_triggerType_event_eventId_eventA2._cont = ASN1Dict([ ('a2-Threshold', _____ReportConfigEUTRA_triggerType_event_eventId_eventA2_a2_Threshold), ]) ____ReportConfigEUTRA_triggerType_event_eventId_eventA2._ext = None ____ReportConfigEUTRA_triggerType_event_eventId_eventA3 = SEQ(name='eventA3', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _____ReportConfigEUTRA_triggerType_event_eventId_eventA3_a3_Offset = INT(name='a3-Offset', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _____ReportConfigEUTRA_triggerType_event_eventId_eventA3_a3_Offset._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-30, ub=30)], ev=None, er=[]) _____ReportConfigEUTRA_triggerType_event_eventId_eventA3_reportOnLeave = BOOL(name='reportOnLeave', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ____ReportConfigEUTRA_triggerType_event_eventId_eventA3._cont = ASN1Dict([ ('a3-Offset', _____ReportConfigEUTRA_triggerType_event_eventId_eventA3_a3_Offset), ('reportOnLeave', _____ReportConfigEUTRA_triggerType_event_eventId_eventA3_reportOnLeave), ]) ____ReportConfigEUTRA_triggerType_event_eventId_eventA3._ext = None ____ReportConfigEUTRA_triggerType_event_eventId_eventA4 = SEQ(name='eventA4', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _____ReportConfigEUTRA_triggerType_event_eventId_eventA4_a4_Threshold = CHOICE(name='a4-Threshold', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ThresholdEUTRA'))) ____ReportConfigEUTRA_triggerType_event_eventId_eventA4._cont = ASN1Dict([ ('a4-Threshold', _____ReportConfigEUTRA_triggerType_event_eventId_eventA4_a4_Threshold), ]) ____ReportConfigEUTRA_triggerType_event_eventId_eventA4._ext = None ____ReportConfigEUTRA_triggerType_event_eventId_eventA5 = SEQ(name='eventA5', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _____ReportConfigEUTRA_triggerType_event_eventId_eventA5_a5_Threshold1 = CHOICE(name='a5-Threshold1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ThresholdEUTRA'))) _____ReportConfigEUTRA_triggerType_event_eventId_eventA5_a5_Threshold2 = CHOICE(name='a5-Threshold2', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ThresholdEUTRA'))) ____ReportConfigEUTRA_triggerType_event_eventId_eventA5._cont = ASN1Dict([ ('a5-Threshold1', _____ReportConfigEUTRA_triggerType_event_eventId_eventA5_a5_Threshold1), ('a5-Threshold2', _____ReportConfigEUTRA_triggerType_event_eventId_eventA5_a5_Threshold2), ]) ____ReportConfigEUTRA_triggerType_event_eventId_eventA5._ext = None ___ReportConfigEUTRA_triggerType_event_eventId._cont = ASN1Dict([ ('eventA1', ____ReportConfigEUTRA_triggerType_event_eventId_eventA1), ('eventA2', ____ReportConfigEUTRA_triggerType_event_eventId_eventA2), ('eventA3', ____ReportConfigEUTRA_triggerType_event_eventId_eventA3), ('eventA4', ____ReportConfigEUTRA_triggerType_event_eventId_eventA4), ('eventA5', ____ReportConfigEUTRA_triggerType_event_eventId_eventA5), ]) ___ReportConfigEUTRA_triggerType_event_eventId._ext = [] ___ReportConfigEUTRA_triggerType_event_hysteresis = INT(name='hysteresis', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Hysteresis'))) ___ReportConfigEUTRA_triggerType_event_timeToTrigger = ENUM(name='timeToTrigger', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'TimeToTrigger'))) __ReportConfigEUTRA_triggerType_event._cont = ASN1Dict([ ('eventId', ___ReportConfigEUTRA_triggerType_event_eventId), ('hysteresis', ___ReportConfigEUTRA_triggerType_event_hysteresis), ('timeToTrigger', ___ReportConfigEUTRA_triggerType_event_timeToTrigger), ]) __ReportConfigEUTRA_triggerType_event._ext = None __ReportConfigEUTRA_triggerType_periodical = SEQ(name='periodical', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___ReportConfigEUTRA_triggerType_periodical_purpose = ENUM(name='purpose', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___ReportConfigEUTRA_triggerType_periodical_purpose._cont = ASN1Dict([('reportStrongestCells', 0), ('reportCGI', 1)]) ___ReportConfigEUTRA_triggerType_periodical_purpose._ext = None __ReportConfigEUTRA_triggerType_periodical._cont = ASN1Dict([ ('purpose', ___ReportConfigEUTRA_triggerType_periodical_purpose), ]) __ReportConfigEUTRA_triggerType_periodical._ext = None _ReportConfigEUTRA_triggerType._cont = ASN1Dict([ ('event', __ReportConfigEUTRA_triggerType_event), ('periodical', __ReportConfigEUTRA_triggerType_periodical), ]) _ReportConfigEUTRA_triggerType._ext = None _ReportConfigEUTRA_triggerQuantity = ENUM(name='triggerQuantity', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _ReportConfigEUTRA_triggerQuantity._cont = ASN1Dict([('rsrp', 0), ('rsrq', 1)]) _ReportConfigEUTRA_triggerQuantity._ext = None _ReportConfigEUTRA_reportQuantity = ENUM(name='reportQuantity', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _ReportConfigEUTRA_reportQuantity._cont = ASN1Dict([('sameAsTriggerQuantity', 0), ('both', 1)]) _ReportConfigEUTRA_reportQuantity._ext = None _ReportConfigEUTRA_maxReportCells = INT(name='maxReportCells', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _ReportConfigEUTRA_maxReportCells._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) _ReportConfigEUTRA_reportInterval = ENUM(name='reportInterval', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReportInterval'))) _ReportConfigEUTRA_reportAmount = ENUM(name='reportAmount', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _ReportConfigEUTRA_reportAmount._cont = ASN1Dict([('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('infinity', 7)]) _ReportConfigEUTRA_reportAmount._ext = None ReportConfigEUTRA._cont = ASN1Dict([ ('triggerType', _ReportConfigEUTRA_triggerType), ('triggerQuantity', _ReportConfigEUTRA_triggerQuantity), ('reportQuantity', _ReportConfigEUTRA_reportQuantity), ('maxReportCells', _ReportConfigEUTRA_maxReportCells), ('reportInterval', _ReportConfigEUTRA_reportInterval), ('reportAmount', _ReportConfigEUTRA_reportAmount), ]) ReportConfigEUTRA._ext = [] #-----< ThresholdEUTRA >-----# ThresholdEUTRA = CHOICE(name='ThresholdEUTRA', mode=MODE_TYPE) _ThresholdEUTRA_threshold_RSRP = INT(name='threshold-RSRP', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RSRP-Range'))) _ThresholdEUTRA_threshold_RSRQ = INT(name='threshold-RSRQ', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RSRQ-Range'))) ThresholdEUTRA._cont = ASN1Dict([ ('threshold-RSRP', _ThresholdEUTRA_threshold_RSRP), ('threshold-RSRQ', _ThresholdEUTRA_threshold_RSRQ), ]) ThresholdEUTRA._ext = None #-----< ReportConfigId >-----# ReportConfigId = INT(name='ReportConfigId', mode=MODE_TYPE) ReportConfigId._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< ReportConfigInterRAT >-----# ReportConfigInterRAT = SEQ(name='ReportConfigInterRAT', mode=MODE_TYPE) _ReportConfigInterRAT_triggerType = CHOICE(name='triggerType', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __ReportConfigInterRAT_triggerType_event = SEQ(name='event', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___ReportConfigInterRAT_triggerType_event_eventId = CHOICE(name='eventId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ____ReportConfigInterRAT_triggerType_event_eventId_eventB1 = SEQ(name='eventB1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _____ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold = CHOICE(name='b1-Threshold', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ______ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold_b1_ThresholdUTRA = CHOICE(name='b1-ThresholdUTRA', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ThresholdUTRA'))) ______ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold_b1_ThresholdGERAN = INT(name='b1-ThresholdGERAN', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ThresholdGERAN'))) ______ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold_b1_ThresholdCDMA2000 = INT(name='b1-ThresholdCDMA2000', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ThresholdCDMA2000'))) _____ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold._cont = ASN1Dict([ ('b1-ThresholdUTRA', ______ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold_b1_ThresholdUTRA), ('b1-ThresholdGERAN', ______ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold_b1_ThresholdGERAN), ('b1-ThresholdCDMA2000', ______ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold_b1_ThresholdCDMA2000), ]) _____ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold._ext = None ____ReportConfigInterRAT_triggerType_event_eventId_eventB1._cont = ASN1Dict([ ('b1-Threshold', _____ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold), ]) ____ReportConfigInterRAT_triggerType_event_eventId_eventB1._ext = None ____ReportConfigInterRAT_triggerType_event_eventId_eventB2 = SEQ(name='eventB2', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _____ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold1 = CHOICE(name='b2-Threshold1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ThresholdEUTRA'))) _____ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2 = CHOICE(name='b2-Threshold2', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ______ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2_b2_Threshold2UTRA = CHOICE(name='b2-Threshold2UTRA', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ThresholdUTRA'))) ______ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2_b2_Threshold2GERAN = INT(name='b2-Threshold2GERAN', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ThresholdGERAN'))) ______ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2_b2_Threshold2CDMA2000 = INT(name='b2-Threshold2CDMA2000', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ThresholdCDMA2000'))) _____ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2._cont = ASN1Dict([ ('b2-Threshold2UTRA', ______ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2_b2_Threshold2UTRA), ('b2-Threshold2GERAN', ______ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2_b2_Threshold2GERAN), ('b2-Threshold2CDMA2000', ______ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2_b2_Threshold2CDMA2000), ]) _____ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2._ext = None ____ReportConfigInterRAT_triggerType_event_eventId_eventB2._cont = ASN1Dict([ ('b2-Threshold1', _____ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold1), ('b2-Threshold2', _____ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2), ]) ____ReportConfigInterRAT_triggerType_event_eventId_eventB2._ext = None ___ReportConfigInterRAT_triggerType_event_eventId._cont = ASN1Dict([ ('eventB1', ____ReportConfigInterRAT_triggerType_event_eventId_eventB1), ('eventB2', ____ReportConfigInterRAT_triggerType_event_eventId_eventB2), ]) ___ReportConfigInterRAT_triggerType_event_eventId._ext = [] ___ReportConfigInterRAT_triggerType_event_hysteresis = INT(name='hysteresis', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'Hysteresis'))) ___ReportConfigInterRAT_triggerType_event_timeToTrigger = ENUM(name='timeToTrigger', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'TimeToTrigger'))) __ReportConfigInterRAT_triggerType_event._cont = ASN1Dict([ ('eventId', ___ReportConfigInterRAT_triggerType_event_eventId), ('hysteresis', ___ReportConfigInterRAT_triggerType_event_hysteresis), ('timeToTrigger', ___ReportConfigInterRAT_triggerType_event_timeToTrigger), ]) __ReportConfigInterRAT_triggerType_event._ext = None __ReportConfigInterRAT_triggerType_periodical = SEQ(name='periodical', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___ReportConfigInterRAT_triggerType_periodical_purpose = ENUM(name='purpose', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___ReportConfigInterRAT_triggerType_periodical_purpose._cont = ASN1Dict([('reportStrongestCells', 0), ('reportStrongestCellsForSON', 1), ('reportCGI', 2)]) ___ReportConfigInterRAT_triggerType_periodical_purpose._ext = None __ReportConfigInterRAT_triggerType_periodical._cont = ASN1Dict([ ('purpose', ___ReportConfigInterRAT_triggerType_periodical_purpose), ]) __ReportConfigInterRAT_triggerType_periodical._ext = None _ReportConfigInterRAT_triggerType._cont = ASN1Dict([ ('event', __ReportConfigInterRAT_triggerType_event), ('periodical', __ReportConfigInterRAT_triggerType_periodical), ]) _ReportConfigInterRAT_triggerType._ext = None _ReportConfigInterRAT_maxReportCells = INT(name='maxReportCells', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _ReportConfigInterRAT_maxReportCells._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=8)], ev=None, er=[]) _ReportConfigInterRAT_reportInterval = ENUM(name='reportInterval', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReportInterval'))) _ReportConfigInterRAT_reportAmount = ENUM(name='reportAmount', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _ReportConfigInterRAT_reportAmount._cont = ASN1Dict([('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('infinity', 7)]) _ReportConfigInterRAT_reportAmount._ext = None ReportConfigInterRAT._cont = ASN1Dict([ ('triggerType', _ReportConfigInterRAT_triggerType), ('maxReportCells', _ReportConfigInterRAT_maxReportCells), ('reportInterval', _ReportConfigInterRAT_reportInterval), ('reportAmount', _ReportConfigInterRAT_reportAmount), ]) ReportConfigInterRAT._ext = [] #-----< ThresholdUTRA >-----# ThresholdUTRA = CHOICE(name='ThresholdUTRA', mode=MODE_TYPE) _ThresholdUTRA_utra_RSCP = INT(name='utra-RSCP', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _ThresholdUTRA_utra_RSCP._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=-5, ub=91)], ev=None, er=[]) _ThresholdUTRA_utra_EcN0 = INT(name='utra-EcN0', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _ThresholdUTRA_utra_EcN0._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=49)], ev=None, er=[]) ThresholdUTRA._cont = ASN1Dict([ ('utra-RSCP', _ThresholdUTRA_utra_RSCP), ('utra-EcN0', _ThresholdUTRA_utra_EcN0), ]) ThresholdUTRA._ext = None #-----< ThresholdGERAN >-----# ThresholdGERAN = INT(name='ThresholdGERAN', mode=MODE_TYPE) ThresholdGERAN._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=63)], ev=None, er=[]) #-----< ThresholdCDMA2000 >-----# ThresholdCDMA2000 = INT(name='ThresholdCDMA2000', mode=MODE_TYPE) ThresholdCDMA2000._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=63)], ev=None, er=[]) #-----< ReportConfigToAddModList >-----# ReportConfigToAddModList = SEQ_OF(name='ReportConfigToAddModList', mode=MODE_TYPE) _ReportConfigToAddModList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReportConfigToAddMod'))) ReportConfigToAddModList._cont = _ReportConfigToAddModList__item_ ReportConfigToAddModList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< ReportConfigToAddMod >-----# ReportConfigToAddMod = SEQ(name='ReportConfigToAddMod', mode=MODE_TYPE) _ReportConfigToAddMod_reportConfigId = INT(name='reportConfigId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReportConfigId'))) _ReportConfigToAddMod_reportConfig = CHOICE(name='reportConfig', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __ReportConfigToAddMod_reportConfig_reportConfigEUTRA = SEQ(name='reportConfigEUTRA', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReportConfigEUTRA'))) __ReportConfigToAddMod_reportConfig_reportConfigInterRAT = SEQ(name='reportConfigInterRAT', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReportConfigInterRAT'))) _ReportConfigToAddMod_reportConfig._cont = ASN1Dict([ ('reportConfigEUTRA', __ReportConfigToAddMod_reportConfig_reportConfigEUTRA), ('reportConfigInterRAT', __ReportConfigToAddMod_reportConfig_reportConfigInterRAT), ]) _ReportConfigToAddMod_reportConfig._ext = None ReportConfigToAddMod._cont = ASN1Dict([ ('reportConfigId', _ReportConfigToAddMod_reportConfigId), ('reportConfig', _ReportConfigToAddMod_reportConfig), ]) ReportConfigToAddMod._ext = None #-----< ReportInterval >-----# ReportInterval = ENUM(name='ReportInterval', mode=MODE_TYPE) ReportInterval._cont = ASN1Dict([('ms120', 0), ('ms240', 1), ('ms480', 2), ('ms640', 3), ('ms1024', 4), ('ms2048', 5), ('ms5120', 6), ('ms10240', 7), ('min1', 8), ('min6', 9), ('min12', 10), ('min30', 11), ('min60', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]) ReportInterval._ext = None #-----< RSRP-Range >-----# RSRP_Range = INT(name='RSRP-Range', mode=MODE_TYPE) RSRP_Range._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=97)], ev=None, er=[]) #-----< RSRQ-Range >-----# RSRQ_Range = INT(name='RSRQ-Range', mode=MODE_TYPE) RSRQ_Range._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=34)], ev=None, er=[]) #-----< TimeToTrigger >-----# TimeToTrigger = ENUM(name='TimeToTrigger', mode=MODE_TYPE) TimeToTrigger._cont = ASN1Dict([('ms0', 0), ('ms40', 1), ('ms64', 2), ('ms80', 3), ('ms100', 4), ('ms128', 5), ('ms160', 6), ('ms256', 7), ('ms320', 8), ('ms480', 9), ('ms512', 10), ('ms640', 11), ('ms1024', 12), ('ms1280', 13), ('ms2560', 14), ('ms5120', 15)]) TimeToTrigger._ext = None #-----< C-RNTI >-----# C_RNTI = BIT_STR(name='C-RNTI', mode=MODE_TYPE) C_RNTI._const_sz = ASN1Set(rv=[16], rr=[], ev=None, er=[]) #-----< DedicatedInfoCDMA2000 >-----# DedicatedInfoCDMA2000 = OCT_STR(name='DedicatedInfoCDMA2000', mode=MODE_TYPE) #-----< DedicatedInfoNAS >-----# DedicatedInfoNAS = OCT_STR(name='DedicatedInfoNAS', mode=MODE_TYPE) #-----< FilterCoefficient >-----# FilterCoefficient = ENUM(name='FilterCoefficient', mode=MODE_TYPE) FilterCoefficient._cont = ASN1Dict([('fc0', 0), ('fc1', 1), ('fc2', 2), ('fc3', 3), ('fc4', 4), ('fc5', 5), ('fc6', 6), ('fc7', 7), ('fc8', 8), ('fc9', 9), ('fc11', 10), ('fc13', 11), ('fc15', 12), ('fc17', 13), ('fc19', 14), ('spare1', 15)]) FilterCoefficient._ext = [] #-----< MMEC >-----# MMEC = BIT_STR(name='MMEC', mode=MODE_TYPE) MMEC._const_sz = ASN1Set(rv=[8], rr=[], ev=None, er=[]) #-----< NeighCellConfig >-----# NeighCellConfig = BIT_STR(name='NeighCellConfig', mode=MODE_TYPE) NeighCellConfig._const_sz = ASN1Set(rv=[2], rr=[], ev=None, er=[]) #-----< RAND-CDMA2000 >-----# RAND_CDMA2000 = BIT_STR(name='RAND-CDMA2000', mode=MODE_TYPE) RAND_CDMA2000._const_sz = ASN1Set(rv=[32], rr=[], ev=None, er=[]) #-----< RAT-Type >-----# RAT_Type = ENUM(name='RAT-Type', mode=MODE_TYPE) RAT_Type._cont = ASN1Dict([('eutra', 0), ('utra', 1), ('geran-cs', 2), ('geran-ps', 3), ('cdma2000-1XRTT', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]) RAT_Type._ext = [] #-----< RRC-TransactionIdentifier >-----# RRC_TransactionIdentifier = INT(name='RRC-TransactionIdentifier', mode=MODE_TYPE) RRC_TransactionIdentifier._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=3)], ev=None, er=[]) #-----< S-TMSI >-----# S_TMSI = SEQ(name='S-TMSI', mode=MODE_TYPE) _S_TMSI_mmec = BIT_STR(name='mmec', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MMEC'))) _S_TMSI_m_TMSI = BIT_STR(name='m-TMSI', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _S_TMSI_m_TMSI._const_sz = ASN1Set(rv=[32], rr=[], ev=None, er=[]) S_TMSI._cont = ASN1Dict([ ('mmec', _S_TMSI_mmec), ('m-TMSI', _S_TMSI_m_TMSI), ]) S_TMSI._ext = None #-----< UE-CapabilityRAT-ContainerList >-----# UE_CapabilityRAT_ContainerList = SEQ_OF(name='UE-CapabilityRAT-ContainerList', mode=MODE_TYPE) _UE_CapabilityRAT_ContainerList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UE-CapabilityRAT-Container'))) UE_CapabilityRAT_ContainerList._cont = _UE_CapabilityRAT_ContainerList__item_ UE_CapabilityRAT_ContainerList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=0, ub=8)], ev=None, er=[]) #-----< UE-CapabilityRAT-Container >-----# UE_CapabilityRAT_Container = SEQ(name='UE-CapabilityRAT-Container', mode=MODE_TYPE) _UE_CapabilityRAT_Container_rat_Type = ENUM(name='rat-Type', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RAT-Type'))) _UE_CapabilityRAT_Container_ueCapabilityRAT_Container = OCT_STR(name='ueCapabilityRAT-Container', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) UE_CapabilityRAT_Container._cont = ASN1Dict([ ('rat-Type', _UE_CapabilityRAT_Container_rat_Type), ('ueCapabilityRAT-Container', _UE_CapabilityRAT_Container_ueCapabilityRAT_Container), ]) UE_CapabilityRAT_Container._ext = None #-----< UE-EUTRA-Capability >-----# UE_EUTRA_Capability = SEQ(name='UE-EUTRA-Capability', mode=MODE_TYPE) _UE_EUTRA_Capability_accessStratumRelease = ENUM(name='accessStratumRelease', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'AccessStratumRelease'))) _UE_EUTRA_Capability_ue_Category = INT(name='ue-Category', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UE_EUTRA_Capability_ue_Category._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=5)], ev=None, er=[]) _UE_EUTRA_Capability_pdcp_Parameters = SEQ(name='pdcp-Parameters', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PDCP-Parameters'))) _UE_EUTRA_Capability_phyLayerParameters = SEQ(name='phyLayerParameters', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhyLayerParameters'))) _UE_EUTRA_Capability_rf_Parameters = SEQ(name='rf-Parameters', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RF-Parameters'))) _UE_EUTRA_Capability_measParameters = SEQ(name='measParameters', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasParameters'))) _UE_EUTRA_Capability_featureGroupIndicators = BIT_STR(name='featureGroupIndicators', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _UE_EUTRA_Capability_featureGroupIndicators._const_sz = ASN1Set(rv=[32], rr=[], ev=None, er=[]) _UE_EUTRA_Capability_interRAT_Parameters = SEQ(name='interRAT-Parameters', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __UE_EUTRA_Capability_interRAT_Parameters_utraFDD = SEQ(name='utraFDD', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IRAT-ParametersUTRA-FDD')), opt=True) __UE_EUTRA_Capability_interRAT_Parameters_utraTDD128 = SEQ(name='utraTDD128', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IRAT-ParametersUTRA-TDD128')), opt=True) __UE_EUTRA_Capability_interRAT_Parameters_utraTDD384 = SEQ(name='utraTDD384', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IRAT-ParametersUTRA-TDD384')), opt=True) __UE_EUTRA_Capability_interRAT_Parameters_utraTDD768 = SEQ(name='utraTDD768', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IRAT-ParametersUTRA-TDD768')), opt=True) __UE_EUTRA_Capability_interRAT_Parameters_geran = SEQ(name='geran', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IRAT-ParametersGERAN')), opt=True) __UE_EUTRA_Capability_interRAT_Parameters_cdma2000_HRPD = SEQ(name='cdma2000-HRPD', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IRAT-ParametersCDMA2000-HRPD')), opt=True) __UE_EUTRA_Capability_interRAT_Parameters_cdma2000_1xRTT = SEQ(name='cdma2000-1xRTT', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'IRAT-ParametersCDMA2000-1XRTT')), opt=True) _UE_EUTRA_Capability_interRAT_Parameters._cont = ASN1Dict([ ('utraFDD', __UE_EUTRA_Capability_interRAT_Parameters_utraFDD), ('utraTDD128', __UE_EUTRA_Capability_interRAT_Parameters_utraTDD128), ('utraTDD384', __UE_EUTRA_Capability_interRAT_Parameters_utraTDD384), ('utraTDD768', __UE_EUTRA_Capability_interRAT_Parameters_utraTDD768), ('geran', __UE_EUTRA_Capability_interRAT_Parameters_geran), ('cdma2000-HRPD', __UE_EUTRA_Capability_interRAT_Parameters_cdma2000_HRPD), ('cdma2000-1xRTT', __UE_EUTRA_Capability_interRAT_Parameters_cdma2000_1xRTT), ]) _UE_EUTRA_Capability_interRAT_Parameters._ext = None _UE_EUTRA_Capability_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _UE_EUTRA_Capability_nonCriticalExtension._cont = ASN1Dict([ ]) _UE_EUTRA_Capability_nonCriticalExtension._ext = None UE_EUTRA_Capability._cont = ASN1Dict([ ('accessStratumRelease', _UE_EUTRA_Capability_accessStratumRelease), ('ue-Category', _UE_EUTRA_Capability_ue_Category), ('pdcp-Parameters', _UE_EUTRA_Capability_pdcp_Parameters), ('phyLayerParameters', _UE_EUTRA_Capability_phyLayerParameters), ('rf-Parameters', _UE_EUTRA_Capability_rf_Parameters), ('measParameters', _UE_EUTRA_Capability_measParameters), ('featureGroupIndicators', _UE_EUTRA_Capability_featureGroupIndicators), ('interRAT-Parameters', _UE_EUTRA_Capability_interRAT_Parameters), ('nonCriticalExtension', _UE_EUTRA_Capability_nonCriticalExtension), ]) UE_EUTRA_Capability._ext = None #-----< AccessStratumRelease >-----# AccessStratumRelease = ENUM(name='AccessStratumRelease', mode=MODE_TYPE) AccessStratumRelease._cont = ASN1Dict([('rel8', 0), ('spare7', 1), ('spare6', 2), ('spare5', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]) AccessStratumRelease._ext = [] #-----< PDCP-Parameters >-----# PDCP_Parameters = SEQ(name='PDCP-Parameters', mode=MODE_TYPE) _PDCP_Parameters_supportedROHC_Profiles = SEQ(name='supportedROHC-Profiles', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PDCP_Parameters_supportedROHC_Profiles_profile0x0001 = BOOL(name='profile0x0001', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PDCP_Parameters_supportedROHC_Profiles_profile0x0002 = BOOL(name='profile0x0002', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PDCP_Parameters_supportedROHC_Profiles_profile0x0003 = BOOL(name='profile0x0003', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PDCP_Parameters_supportedROHC_Profiles_profile0x0004 = BOOL(name='profile0x0004', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PDCP_Parameters_supportedROHC_Profiles_profile0x0006 = BOOL(name='profile0x0006', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PDCP_Parameters_supportedROHC_Profiles_profile0x0101 = BOOL(name='profile0x0101', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PDCP_Parameters_supportedROHC_Profiles_profile0x0102 = BOOL(name='profile0x0102', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PDCP_Parameters_supportedROHC_Profiles_profile0x0103 = BOOL(name='profile0x0103', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __PDCP_Parameters_supportedROHC_Profiles_profile0x0104 = BOOL(name='profile0x0104', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PDCP_Parameters_supportedROHC_Profiles._cont = ASN1Dict([ ('profile0x0001', __PDCP_Parameters_supportedROHC_Profiles_profile0x0001), ('profile0x0002', __PDCP_Parameters_supportedROHC_Profiles_profile0x0002), ('profile0x0003', __PDCP_Parameters_supportedROHC_Profiles_profile0x0003), ('profile0x0004', __PDCP_Parameters_supportedROHC_Profiles_profile0x0004), ('profile0x0006', __PDCP_Parameters_supportedROHC_Profiles_profile0x0006), ('profile0x0101', __PDCP_Parameters_supportedROHC_Profiles_profile0x0101), ('profile0x0102', __PDCP_Parameters_supportedROHC_Profiles_profile0x0102), ('profile0x0103', __PDCP_Parameters_supportedROHC_Profiles_profile0x0103), ('profile0x0104', __PDCP_Parameters_supportedROHC_Profiles_profile0x0104), ]) _PDCP_Parameters_supportedROHC_Profiles._ext = None _PDCP_Parameters_maxNumberROHC_ContextSessions = ENUM(name='maxNumberROHC-ContextSessions', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), default='cs16') _PDCP_Parameters_maxNumberROHC_ContextSessions._cont = ASN1Dict([('cs2', 0), ('cs4', 1), ('cs8', 2), ('cs12', 3), ('cs16', 4), ('cs24', 5), ('cs32', 6), ('cs48', 7), ('cs64', 8), ('cs128', 9), ('cs256', 10), ('cs512', 11), ('cs1024', 12), ('cs16384', 13), ('spare2', 14), ('spare1', 15)]) _PDCP_Parameters_maxNumberROHC_ContextSessions._ext = None PDCP_Parameters._cont = ASN1Dict([ ('supportedROHC-Profiles', _PDCP_Parameters_supportedROHC_Profiles), ('maxNumberROHC-ContextSessions', _PDCP_Parameters_maxNumberROHC_ContextSessions), ]) PDCP_Parameters._ext = [] #-----< PhyLayerParameters >-----# PhyLayerParameters = SEQ(name='PhyLayerParameters', mode=MODE_TYPE) _PhyLayerParameters_ue_TxAntennaSelectionSupported = BOOL(name='ue-TxAntennaSelectionSupported', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _PhyLayerParameters_ue_SpecificRefSigsSupported = BOOL(name='ue-SpecificRefSigsSupported', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) PhyLayerParameters._cont = ASN1Dict([ ('ue-TxAntennaSelectionSupported', _PhyLayerParameters_ue_TxAntennaSelectionSupported), ('ue-SpecificRefSigsSupported', _PhyLayerParameters_ue_SpecificRefSigsSupported), ]) PhyLayerParameters._ext = None #-----< RF-Parameters >-----# RF_Parameters = SEQ(name='RF-Parameters', mode=MODE_TYPE) _RF_Parameters_supportedBandListEUTRA = SEQ_OF(name='supportedBandListEUTRA', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandListEUTRA'))) RF_Parameters._cont = ASN1Dict([ ('supportedBandListEUTRA', _RF_Parameters_supportedBandListEUTRA), ]) RF_Parameters._ext = None #-----< SupportedBandListEUTRA >-----# SupportedBandListEUTRA = SEQ_OF(name='SupportedBandListEUTRA', mode=MODE_TYPE) _SupportedBandListEUTRA__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandEUTRA'))) SupportedBandListEUTRA._cont = _SupportedBandListEUTRA__item_ SupportedBandListEUTRA._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=64)], ev=None, er=[]) #-----< SupportedBandEUTRA >-----# SupportedBandEUTRA = SEQ(name='SupportedBandEUTRA', mode=MODE_TYPE) _SupportedBandEUTRA_bandEUTRA = INT(name='bandEUTRA', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _SupportedBandEUTRA_bandEUTRA._const_val = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=64)], ev=None, er=[]) _SupportedBandEUTRA_halfDuplex = BOOL(name='halfDuplex', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) SupportedBandEUTRA._cont = ASN1Dict([ ('bandEUTRA', _SupportedBandEUTRA_bandEUTRA), ('halfDuplex', _SupportedBandEUTRA_halfDuplex), ]) SupportedBandEUTRA._ext = None #-----< MeasParameters >-----# MeasParameters = SEQ(name='MeasParameters', mode=MODE_TYPE) _MeasParameters_bandListEUTRA = SEQ_OF(name='bandListEUTRA', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandListEUTRA'))) MeasParameters._cont = ASN1Dict([ ('bandListEUTRA', _MeasParameters_bandListEUTRA), ]) MeasParameters._ext = None #-----< BandListEUTRA >-----# BandListEUTRA = SEQ_OF(name='BandListEUTRA', mode=MODE_TYPE) _BandListEUTRA__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandInfoEUTRA'))) BandListEUTRA._cont = _BandListEUTRA__item_ BandListEUTRA._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=64)], ev=None, er=[]) #-----< BandInfoEUTRA >-----# BandInfoEUTRA = SEQ(name='BandInfoEUTRA', mode=MODE_TYPE) _BandInfoEUTRA_interFreqBandList = SEQ_OF(name='interFreqBandList', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'InterFreqBandList'))) _BandInfoEUTRA_interRAT_BandList = SEQ_OF(name='interRAT-BandList', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'InterRAT-BandList')), opt=True) BandInfoEUTRA._cont = ASN1Dict([ ('interFreqBandList', _BandInfoEUTRA_interFreqBandList), ('interRAT-BandList', _BandInfoEUTRA_interRAT_BandList), ]) BandInfoEUTRA._ext = None #-----< InterFreqBandList >-----# InterFreqBandList = SEQ_OF(name='InterFreqBandList', mode=MODE_TYPE) _InterFreqBandList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'InterFreqBandInfo'))) InterFreqBandList._cont = _InterFreqBandList__item_ InterFreqBandList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=64)], ev=None, er=[]) #-----< InterFreqBandInfo >-----# InterFreqBandInfo = SEQ(name='InterFreqBandInfo', mode=MODE_TYPE) _InterFreqBandInfo_interFreqNeedForGaps = BOOL(name='interFreqNeedForGaps', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) InterFreqBandInfo._cont = ASN1Dict([ ('interFreqNeedForGaps', _InterFreqBandInfo_interFreqNeedForGaps), ]) InterFreqBandInfo._ext = None #-----< InterRAT-BandList >-----# InterRAT_BandList = SEQ_OF(name='InterRAT-BandList', mode=MODE_TYPE) _InterRAT_BandList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'InterRAT-BandInfo'))) InterRAT_BandList._cont = _InterRAT_BandList__item_ InterRAT_BandList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=64)], ev=None, er=[]) #-----< InterRAT-BandInfo >-----# InterRAT_BandInfo = SEQ(name='InterRAT-BandInfo', mode=MODE_TYPE) _InterRAT_BandInfo_interRAT_NeedForGaps = BOOL(name='interRAT-NeedForGaps', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) InterRAT_BandInfo._cont = ASN1Dict([ ('interRAT-NeedForGaps', _InterRAT_BandInfo_interRAT_NeedForGaps), ]) InterRAT_BandInfo._ext = None #-----< IRAT-ParametersUTRA-FDD >-----# IRAT_ParametersUTRA_FDD = SEQ(name='IRAT-ParametersUTRA-FDD', mode=MODE_TYPE) _IRAT_ParametersUTRA_FDD_supportedBandListUTRA_FDD = SEQ_OF(name='supportedBandListUTRA-FDD', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandListUTRA-FDD'))) IRAT_ParametersUTRA_FDD._cont = ASN1Dict([ ('supportedBandListUTRA-FDD', _IRAT_ParametersUTRA_FDD_supportedBandListUTRA_FDD), ]) IRAT_ParametersUTRA_FDD._ext = None #-----< SupportedBandListUTRA-FDD >-----# SupportedBandListUTRA_FDD = SEQ_OF(name='SupportedBandListUTRA-FDD', mode=MODE_TYPE) _SupportedBandListUTRA_FDD__item_ = ENUM(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandUTRA-FDD'))) SupportedBandListUTRA_FDD._cont = _SupportedBandListUTRA_FDD__item_ SupportedBandListUTRA_FDD._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=64)], ev=None, er=[]) #-----< SupportedBandUTRA-FDD >-----# SupportedBandUTRA_FDD = ENUM(name='SupportedBandUTRA-FDD', mode=MODE_TYPE) SupportedBandUTRA_FDD._cont = ASN1Dict([('bandI', 0), ('bandII', 1), ('bandIII', 2), ('bandIV', 3), ('bandV', 4), ('bandVI', 5), ('bandVII', 6), ('bandVIII', 7), ('bandIX', 8), ('bandX', 9), ('bandXI', 10), ('bandXII', 11), ('bandXIII', 12), ('bandXIV', 13), ('bandXV', 14), ('bandXVI', 15), ('bandXVII-8a0', 16), ('bandXVIII-8a0', 17), ('bandXIX-8a0', 18), ('bandXX-8a0', 19), ('bandXXI-8a0', 20), ('bandXXII-8a0', 21), ('bandXXIII-8a0', 22), ('bandXXIV-8a0', 23), ('bandXXV-8a0', 24), ('bandXXVI-8a0', 25), ('bandXXVII-8a0', 26), ('bandXXVIII-8a0', 27), ('bandXXIX-8a0', 28), ('bandXXX-8a0', 29), ('bandXXXI-8a0', 30), ('bandXXXII-8a0', 31)]) SupportedBandUTRA_FDD._ext = ['bandXVII-8a0', 'bandXVIII-8a0', 'bandXIX-8a0', 'bandXX-8a0', 'bandXXI-8a0', 'bandXXII-8a0', 'bandXXIII-8a0', 'bandXXIV-8a0', 'bandXXV-8a0', 'bandXXVI-8a0', 'bandXXVII-8a0', 'bandXXVIII-8a0', 'bandXXIX-8a0', 'bandXXX-8a0', 'bandXXXI-8a0', 'bandXXXII-8a0'] #-----< IRAT-ParametersUTRA-TDD128 >-----# IRAT_ParametersUTRA_TDD128 = SEQ(name='IRAT-ParametersUTRA-TDD128', mode=MODE_TYPE) _IRAT_ParametersUTRA_TDD128_supportedBandListUTRA_TDD128 = SEQ_OF(name='supportedBandListUTRA-TDD128', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandListUTRA-TDD128'))) IRAT_ParametersUTRA_TDD128._cont = ASN1Dict([ ('supportedBandListUTRA-TDD128', _IRAT_ParametersUTRA_TDD128_supportedBandListUTRA_TDD128), ]) IRAT_ParametersUTRA_TDD128._ext = None #-----< SupportedBandListUTRA-TDD128 >-----# SupportedBandListUTRA_TDD128 = SEQ_OF(name='SupportedBandListUTRA-TDD128', mode=MODE_TYPE) _SupportedBandListUTRA_TDD128__item_ = ENUM(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandUTRA-TDD128'))) SupportedBandListUTRA_TDD128._cont = _SupportedBandListUTRA_TDD128__item_ SupportedBandListUTRA_TDD128._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=64)], ev=None, er=[]) #-----< SupportedBandUTRA-TDD128 >-----# SupportedBandUTRA_TDD128 = ENUM(name='SupportedBandUTRA-TDD128', mode=MODE_TYPE) SupportedBandUTRA_TDD128._cont = ASN1Dict([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9), ('k', 10), ('l', 11), ('m', 12), ('n', 13), ('o', 14), ('p', 15)]) SupportedBandUTRA_TDD128._ext = [] #-----< IRAT-ParametersUTRA-TDD384 >-----# IRAT_ParametersUTRA_TDD384 = SEQ(name='IRAT-ParametersUTRA-TDD384', mode=MODE_TYPE) _IRAT_ParametersUTRA_TDD384_supportedBandListUTRA_TDD384 = SEQ_OF(name='supportedBandListUTRA-TDD384', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandListUTRA-TDD384'))) IRAT_ParametersUTRA_TDD384._cont = ASN1Dict([ ('supportedBandListUTRA-TDD384', _IRAT_ParametersUTRA_TDD384_supportedBandListUTRA_TDD384), ]) IRAT_ParametersUTRA_TDD384._ext = None #-----< SupportedBandListUTRA-TDD384 >-----# SupportedBandListUTRA_TDD384 = SEQ_OF(name='SupportedBandListUTRA-TDD384', mode=MODE_TYPE) _SupportedBandListUTRA_TDD384__item_ = ENUM(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandUTRA-TDD384'))) SupportedBandListUTRA_TDD384._cont = _SupportedBandListUTRA_TDD384__item_ SupportedBandListUTRA_TDD384._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=64)], ev=None, er=[]) #-----< SupportedBandUTRA-TDD384 >-----# SupportedBandUTRA_TDD384 = ENUM(name='SupportedBandUTRA-TDD384', mode=MODE_TYPE) SupportedBandUTRA_TDD384._cont = ASN1Dict([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9), ('k', 10), ('l', 11), ('m', 12), ('n', 13), ('o', 14), ('p', 15)]) SupportedBandUTRA_TDD384._ext = [] #-----< IRAT-ParametersUTRA-TDD768 >-----# IRAT_ParametersUTRA_TDD768 = SEQ(name='IRAT-ParametersUTRA-TDD768', mode=MODE_TYPE) _IRAT_ParametersUTRA_TDD768_supportedBandListUTRA_TDD768 = SEQ_OF(name='supportedBandListUTRA-TDD768', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandListUTRA-TDD768'))) IRAT_ParametersUTRA_TDD768._cont = ASN1Dict([ ('supportedBandListUTRA-TDD768', _IRAT_ParametersUTRA_TDD768_supportedBandListUTRA_TDD768), ]) IRAT_ParametersUTRA_TDD768._ext = None #-----< SupportedBandListUTRA-TDD768 >-----# SupportedBandListUTRA_TDD768 = SEQ_OF(name='SupportedBandListUTRA-TDD768', mode=MODE_TYPE) _SupportedBandListUTRA_TDD768__item_ = ENUM(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandUTRA-TDD768'))) SupportedBandListUTRA_TDD768._cont = _SupportedBandListUTRA_TDD768__item_ SupportedBandListUTRA_TDD768._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=64)], ev=None, er=[]) #-----< SupportedBandUTRA-TDD768 >-----# SupportedBandUTRA_TDD768 = ENUM(name='SupportedBandUTRA-TDD768', mode=MODE_TYPE) SupportedBandUTRA_TDD768._cont = ASN1Dict([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9), ('k', 10), ('l', 11), ('m', 12), ('n', 13), ('o', 14), ('p', 15)]) SupportedBandUTRA_TDD768._ext = [] #-----< IRAT-ParametersGERAN >-----# IRAT_ParametersGERAN = SEQ(name='IRAT-ParametersGERAN', mode=MODE_TYPE) _IRAT_ParametersGERAN_supportedBandListGERAN = SEQ_OF(name='supportedBandListGERAN', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandListGERAN'))) _IRAT_ParametersGERAN_interRAT_PS_HO_ToGERAN = BOOL(name='interRAT-PS-HO-ToGERAN', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) IRAT_ParametersGERAN._cont = ASN1Dict([ ('supportedBandListGERAN', _IRAT_ParametersGERAN_supportedBandListGERAN), ('interRAT-PS-HO-ToGERAN', _IRAT_ParametersGERAN_interRAT_PS_HO_ToGERAN), ]) IRAT_ParametersGERAN._ext = None #-----< SupportedBandListGERAN >-----# SupportedBandListGERAN = SEQ_OF(name='SupportedBandListGERAN', mode=MODE_TYPE) _SupportedBandListGERAN__item_ = ENUM(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandGERAN'))) SupportedBandListGERAN._cont = _SupportedBandListGERAN__item_ SupportedBandListGERAN._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=64)], ev=None, er=[]) #-----< SupportedBandGERAN >-----# SupportedBandGERAN = ENUM(name='SupportedBandGERAN', mode=MODE_TYPE) SupportedBandGERAN._cont = ASN1Dict([('gsm450', 0), ('gsm480', 1), ('gsm710', 2), ('gsm750', 3), ('gsm810', 4), ('gsm850', 5), ('gsm900P', 6), ('gsm900E', 7), ('gsm900R', 8), ('gsm1800', 9), ('gsm1900', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]) SupportedBandGERAN._ext = [] #-----< IRAT-ParametersCDMA2000-HRPD >-----# IRAT_ParametersCDMA2000_HRPD = SEQ(name='IRAT-ParametersCDMA2000-HRPD', mode=MODE_TYPE) _IRAT_ParametersCDMA2000_HRPD_supportedBandListHRPD = SEQ_OF(name='supportedBandListHRPD', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandListHRPD'))) _IRAT_ParametersCDMA2000_HRPD_tx_ConfigHRPD = ENUM(name='tx-ConfigHRPD', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _IRAT_ParametersCDMA2000_HRPD_tx_ConfigHRPD._cont = ASN1Dict([('single', 0), ('dual', 1)]) _IRAT_ParametersCDMA2000_HRPD_tx_ConfigHRPD._ext = None _IRAT_ParametersCDMA2000_HRPD_rx_ConfigHRPD = ENUM(name='rx-ConfigHRPD', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _IRAT_ParametersCDMA2000_HRPD_rx_ConfigHRPD._cont = ASN1Dict([('single', 0), ('dual', 1)]) _IRAT_ParametersCDMA2000_HRPD_rx_ConfigHRPD._ext = None IRAT_ParametersCDMA2000_HRPD._cont = ASN1Dict([ ('supportedBandListHRPD', _IRAT_ParametersCDMA2000_HRPD_supportedBandListHRPD), ('tx-ConfigHRPD', _IRAT_ParametersCDMA2000_HRPD_tx_ConfigHRPD), ('rx-ConfigHRPD', _IRAT_ParametersCDMA2000_HRPD_rx_ConfigHRPD), ]) IRAT_ParametersCDMA2000_HRPD._ext = None #-----< SupportedBandListHRPD >-----# SupportedBandListHRPD = SEQ_OF(name='SupportedBandListHRPD', mode=MODE_TYPE) _SupportedBandListHRPD__item_ = ENUM(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandclassCDMA2000'))) SupportedBandListHRPD._cont = _SupportedBandListHRPD__item_ SupportedBandListHRPD._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< IRAT-ParametersCDMA2000-1XRTT >-----# IRAT_ParametersCDMA2000_1XRTT = SEQ(name='IRAT-ParametersCDMA2000-1XRTT', mode=MODE_TYPE) _IRAT_ParametersCDMA2000_1XRTT_supportedBandList1XRTT = SEQ_OF(name='supportedBandList1XRTT', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SupportedBandList1XRTT'))) _IRAT_ParametersCDMA2000_1XRTT_tx_Config1XRTT = ENUM(name='tx-Config1XRTT', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _IRAT_ParametersCDMA2000_1XRTT_tx_Config1XRTT._cont = ASN1Dict([('single', 0), ('dual', 1)]) _IRAT_ParametersCDMA2000_1XRTT_tx_Config1XRTT._ext = None _IRAT_ParametersCDMA2000_1XRTT_rx_Config1XRTT = ENUM(name='rx-Config1XRTT', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _IRAT_ParametersCDMA2000_1XRTT_rx_Config1XRTT._cont = ASN1Dict([('single', 0), ('dual', 1)]) _IRAT_ParametersCDMA2000_1XRTT_rx_Config1XRTT._ext = None IRAT_ParametersCDMA2000_1XRTT._cont = ASN1Dict([ ('supportedBandList1XRTT', _IRAT_ParametersCDMA2000_1XRTT_supportedBandList1XRTT), ('tx-Config1XRTT', _IRAT_ParametersCDMA2000_1XRTT_tx_Config1XRTT), ('rx-Config1XRTT', _IRAT_ParametersCDMA2000_1XRTT_rx_Config1XRTT), ]) IRAT_ParametersCDMA2000_1XRTT._ext = None #-----< SupportedBandList1XRTT >-----# SupportedBandList1XRTT = SEQ_OF(name='SupportedBandList1XRTT', mode=MODE_TYPE) _SupportedBandList1XRTT__item_ = ENUM(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'BandclassCDMA2000'))) SupportedBandList1XRTT._cont = _SupportedBandList1XRTT__item_ SupportedBandList1XRTT._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< UE-TimersAndConstants >-----# UE_TimersAndConstants = SEQ(name='UE-TimersAndConstants', mode=MODE_TYPE) _UE_TimersAndConstants_t300 = ENUM(name='t300', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UE_TimersAndConstants_t300._cont = ASN1Dict([('ms100', 0), ('ms200', 1), ('ms300', 2), ('ms400', 3), ('ms600', 4), ('ms1000', 5), ('ms1500', 6), ('ms2000', 7)]) _UE_TimersAndConstants_t300._ext = None _UE_TimersAndConstants_t301 = ENUM(name='t301', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UE_TimersAndConstants_t301._cont = ASN1Dict([('ms100', 0), ('ms200', 1), ('ms300', 2), ('ms400', 3), ('ms600', 4), ('ms1000', 5), ('ms1500', 6), ('ms2000', 7)]) _UE_TimersAndConstants_t301._ext = None _UE_TimersAndConstants_t310 = ENUM(name='t310', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UE_TimersAndConstants_t310._cont = ASN1Dict([('ms0', 0), ('ms50', 1), ('ms100', 2), ('ms200', 3), ('ms500', 4), ('ms1000', 5), ('ms2000', 6)]) _UE_TimersAndConstants_t310._ext = None _UE_TimersAndConstants_n310 = ENUM(name='n310', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UE_TimersAndConstants_n310._cont = ASN1Dict([('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n6', 4), ('n8', 5), ('n10', 6), ('n20', 7)]) _UE_TimersAndConstants_n310._ext = None _UE_TimersAndConstants_t311 = ENUM(name='t311', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UE_TimersAndConstants_t311._cont = ASN1Dict([('ms1000', 0), ('ms3000', 1), ('ms5000', 2), ('ms10000', 3), ('ms15000', 4), ('ms20000', 5), ('ms30000', 6)]) _UE_TimersAndConstants_t311._ext = None _UE_TimersAndConstants_n311 = ENUM(name='n311', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) _UE_TimersAndConstants_n311._cont = ASN1Dict([('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n5', 4), ('n6', 5), ('n8', 6), ('n10', 7)]) _UE_TimersAndConstants_n311._ext = None UE_TimersAndConstants._cont = ASN1Dict([ ('t300', _UE_TimersAndConstants_t300), ('t301', _UE_TimersAndConstants_t301), ('t310', _UE_TimersAndConstants_t310), ('n310', _UE_TimersAndConstants_n310), ('t311', _UE_TimersAndConstants_t311), ('n311', _UE_TimersAndConstants_n311), ]) UE_TimersAndConstants._ext = [] #-----< maxBands >-----# maxBands = INT(name='maxBands', mode=MODE_VALUE) maxBands._val = 64 #-----< maxCDMA-BandClass >-----# maxCDMA_BandClass = INT(name='maxCDMA-BandClass', mode=MODE_VALUE) maxCDMA_BandClass._val = 32 #-----< maxCellBlack >-----# maxCellBlack = INT(name='maxCellBlack', mode=MODE_VALUE) maxCellBlack._val = 16 #-----< maxCellInter >-----# maxCellInter = INT(name='maxCellInter', mode=MODE_VALUE) maxCellInter._val = 16 #-----< maxCellIntra >-----# maxCellIntra = INT(name='maxCellIntra', mode=MODE_VALUE) maxCellIntra._val = 16 #-----< maxCellMeas >-----# maxCellMeas = INT(name='maxCellMeas', mode=MODE_VALUE) maxCellMeas._val = 32 #-----< maxCellReport >-----# maxCellReport = INT(name='maxCellReport', mode=MODE_VALUE) maxCellReport._val = 8 #-----< maxDRB >-----# maxDRB = INT(name='maxDRB', mode=MODE_VALUE) maxDRB._val = 11 #-----< maxEARFCN >-----# maxEARFCN = INT(name='maxEARFCN', mode=MODE_VALUE) maxEARFCN._val = 65535 #-----< maxFreq >-----# maxFreq = INT(name='maxFreq', mode=MODE_VALUE) maxFreq._val = 8 #-----< maxGERAN-SI >-----# maxGERAN_SI = INT(name='maxGERAN-SI', mode=MODE_VALUE) maxGERAN_SI._val = 10 #-----< maxGNFG >-----# maxGNFG = INT(name='maxGNFG', mode=MODE_VALUE) maxGNFG._val = 16 #-----< maxMBSFN-Allocations >-----# maxMBSFN_Allocations = INT(name='maxMBSFN-Allocations', mode=MODE_VALUE) maxMBSFN_Allocations._val = 8 #-----< maxMCS-1 >-----# maxMCS_1 = INT(name='maxMCS-1', mode=MODE_VALUE) maxMCS_1._val = 16 #-----< maxMeasId >-----# maxMeasId = INT(name='maxMeasId', mode=MODE_VALUE) maxMeasId._val = 32 #-----< maxObjectId >-----# maxObjectId = INT(name='maxObjectId', mode=MODE_VALUE) maxObjectId._val = 32 #-----< maxPageRec >-----# maxPageRec = INT(name='maxPageRec', mode=MODE_VALUE) maxPageRec._val = 16 #-----< maxPNOffset >-----# maxPNOffset = INT(name='maxPNOffset', mode=MODE_VALUE) maxPNOffset._val = 511 #-----< maxRAT-Capabilities >-----# maxRAT_Capabilities = INT(name='maxRAT-Capabilities', mode=MODE_VALUE) maxRAT_Capabilities._val = 8 #-----< maxReportConfigId >-----# maxReportConfigId = INT(name='maxReportConfigId', mode=MODE_VALUE) maxReportConfigId._val = 32 #-----< maxSIB >-----# maxSIB = INT(name='maxSIB', mode=MODE_VALUE) maxSIB._val = 32 #-----< maxSIB-1 >-----# maxSIB_1 = INT(name='maxSIB-1', mode=MODE_VALUE) maxSIB_1._val = 31 #-----< maxSI-Message >-----# maxSI_Message = INT(name='maxSI-Message', mode=MODE_VALUE) maxSI_Message._val = 32 #-----< maxUTRA-FDD-Carrier >-----# maxUTRA_FDD_Carrier = INT(name='maxUTRA-FDD-Carrier', mode=MODE_VALUE) maxUTRA_FDD_Carrier._val = 16 #-----< maxUTRA-TDD-Carrier >-----# maxUTRA_TDD_Carrier = INT(name='maxUTRA-TDD-Carrier', mode=MODE_VALUE) maxUTRA_TDD_Carrier._val = 16 _all_ = [ _BCCH_BCH_Message_message, BCCH_BCH_Message, BCCH_BCH_MessageType, _BCCH_DL_SCH_Message_message, BCCH_DL_SCH_Message, __BCCH_DL_SCH_MessageType_c1_systemInformation, __BCCH_DL_SCH_MessageType_c1_systemInformationBlockType1, _BCCH_DL_SCH_MessageType_c1, _BCCH_DL_SCH_MessageType_messageClassExtension, BCCH_DL_SCH_MessageType, _PCCH_Message_message, PCCH_Message, __PCCH_MessageType_c1_paging, _PCCH_MessageType_c1, _PCCH_MessageType_messageClassExtension, PCCH_MessageType, _DL_CCCH_Message_message, DL_CCCH_Message, __DL_CCCH_MessageType_c1_rrcConnectionReestablishment, __DL_CCCH_MessageType_c1_rrcConnectionReestablishmentReject, __DL_CCCH_MessageType_c1_rrcConnectionReject, __DL_CCCH_MessageType_c1_rrcConnectionSetup, _DL_CCCH_MessageType_c1, _DL_CCCH_MessageType_messageClassExtension, DL_CCCH_MessageType, _DL_DCCH_Message_message, DL_DCCH_Message, __DL_DCCH_MessageType_c1_csfbParametersResponseCDMA2000, __DL_DCCH_MessageType_c1_dlInformationTransfer, __DL_DCCH_MessageType_c1_handoverFromEUTRAPreparationRequest, __DL_DCCH_MessageType_c1_mobilityFromEUTRACommand, __DL_DCCH_MessageType_c1_rrcConnectionReconfiguration, __DL_DCCH_MessageType_c1_rrcConnectionRelease, __DL_DCCH_MessageType_c1_securityModeCommand, __DL_DCCH_MessageType_c1_ueCapabilityEnquiry, __DL_DCCH_MessageType_c1_counterCheck, __DL_DCCH_MessageType_c1_spare7, __DL_DCCH_MessageType_c1_spare6, __DL_DCCH_MessageType_c1_spare5, __DL_DCCH_MessageType_c1_spare4, __DL_DCCH_MessageType_c1_spare3, __DL_DCCH_MessageType_c1_spare2, __DL_DCCH_MessageType_c1_spare1, _DL_DCCH_MessageType_c1, _DL_DCCH_MessageType_messageClassExtension, DL_DCCH_MessageType, _UL_CCCH_Message_message, UL_CCCH_Message, __UL_CCCH_MessageType_c1_rrcConnectionReestablishmentRequest, __UL_CCCH_MessageType_c1_rrcConnectionRequest, _UL_CCCH_MessageType_c1, _UL_CCCH_MessageType_messageClassExtension, UL_CCCH_MessageType, _UL_DCCH_Message_message, UL_DCCH_Message, __UL_DCCH_MessageType_c1_csfbParametersRequestCDMA2000, __UL_DCCH_MessageType_c1_measurementReport, __UL_DCCH_MessageType_c1_rrcConnectionReconfigurationComplete, __UL_DCCH_MessageType_c1_rrcConnectionReestablishmentComplete, __UL_DCCH_MessageType_c1_rrcConnectionSetupComplete, __UL_DCCH_MessageType_c1_securityModeComplete, __UL_DCCH_MessageType_c1_securityModeFailure, __UL_DCCH_MessageType_c1_ueCapabilityInformation, __UL_DCCH_MessageType_c1_ulHandoverPreparationTransfer, __UL_DCCH_MessageType_c1_ulInformationTransfer, __UL_DCCH_MessageType_c1_counterCheckResponse, __UL_DCCH_MessageType_c1_spare5, __UL_DCCH_MessageType_c1_spare4, __UL_DCCH_MessageType_c1_spare3, __UL_DCCH_MessageType_c1_spare2, __UL_DCCH_MessageType_c1_spare1, _UL_DCCH_MessageType_c1, _UL_DCCH_MessageType_messageClassExtension, UL_DCCH_MessageType, _CounterCheck_rrc_TransactionIdentifier, ___CounterCheck_criticalExtensions_c1_counterCheck_r8, ___CounterCheck_criticalExtensions_c1_spare3, ___CounterCheck_criticalExtensions_c1_spare2, ___CounterCheck_criticalExtensions_c1_spare1, __CounterCheck_criticalExtensions_c1, __CounterCheck_criticalExtensions_criticalExtensionsFuture, _CounterCheck_criticalExtensions, CounterCheck, _CounterCheck_r8_IEs_drb_CountMSB_InfoList, _CounterCheck_r8_IEs_nonCriticalExtension, CounterCheck_r8_IEs, _DRB_CountMSB_InfoList__item_, DRB_CountMSB_InfoList, _DRB_CountMSB_Info_drb_Identity, _DRB_CountMSB_Info_countMSB_Uplink, _DRB_CountMSB_Info_countMSB_Downlink, DRB_CountMSB_Info, _CounterCheckResponse_rrc_TransactionIdentifier, __CounterCheckResponse_criticalExtensions_counterCheckResponse_r8, __CounterCheckResponse_criticalExtensions_criticalExtensionsFuture, _CounterCheckResponse_criticalExtensions, CounterCheckResponse, _CounterCheckResponse_r8_IEs_drb_CountInfoList, _CounterCheckResponse_r8_IEs_nonCriticalExtension, CounterCheckResponse_r8_IEs, _DRB_CountInfoList__item_, DRB_CountInfoList, _DRB_CountInfo_drb_Identity, _DRB_CountInfo_count_Uplink, _DRB_CountInfo_count_Downlink, DRB_CountInfo, __CSFBParametersRequestCDMA2000_criticalExtensions_csfbParametersRequestCDMA2000_r8, __CSFBParametersRequestCDMA2000_criticalExtensions_criticalExtensionsFuture, _CSFBParametersRequestCDMA2000_criticalExtensions, CSFBParametersRequestCDMA2000, _CSFBParametersRequestCDMA2000_r8_IEs_nonCriticalExtension, CSFBParametersRequestCDMA2000_r8_IEs, _CSFBParametersResponseCDMA2000_rrc_TransactionIdentifier, __CSFBParametersResponseCDMA2000_criticalExtensions_csfbParametersResponseCDMA2000_r8, __CSFBParametersResponseCDMA2000_criticalExtensions_criticalExtensionsFuture, _CSFBParametersResponseCDMA2000_criticalExtensions, CSFBParametersResponseCDMA2000, _CSFBParametersResponseCDMA2000_r8_IEs_rand, _CSFBParametersResponseCDMA2000_r8_IEs_mobilityParameters, _CSFBParametersResponseCDMA2000_r8_IEs_nonCriticalExtension, CSFBParametersResponseCDMA2000_r8_IEs, _DLInformationTransfer_rrc_TransactionIdentifier, ___DLInformationTransfer_criticalExtensions_c1_dlInformationTransfer_r8, ___DLInformationTransfer_criticalExtensions_c1_spare3, ___DLInformationTransfer_criticalExtensions_c1_spare2, ___DLInformationTransfer_criticalExtensions_c1_spare1, __DLInformationTransfer_criticalExtensions_c1, __DLInformationTransfer_criticalExtensions_criticalExtensionsFuture, _DLInformationTransfer_criticalExtensions, DLInformationTransfer, __DLInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoNAS, __DLInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoCDMA2000_1XRTT, __DLInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoCDMA2000_HRPD, _DLInformationTransfer_r8_IEs_dedicatedInfoType, _DLInformationTransfer_r8_IEs_nonCriticalExtension, DLInformationTransfer_r8_IEs, _HandoverFromEUTRAPreparationRequest_rrc_TransactionIdentifier, ___HandoverFromEUTRAPreparationRequest_criticalExtensions_c1_handoverFromEUTRAPreparationRequest_r8, ___HandoverFromEUTRAPreparationRequest_criticalExtensions_c1_spare3, ___HandoverFromEUTRAPreparationRequest_criticalExtensions_c1_spare2, ___HandoverFromEUTRAPreparationRequest_criticalExtensions_c1_spare1, __HandoverFromEUTRAPreparationRequest_criticalExtensions_c1, __HandoverFromEUTRAPreparationRequest_criticalExtensions_criticalExtensionsFuture, _HandoverFromEUTRAPreparationRequest_criticalExtensions, HandoverFromEUTRAPreparationRequest, _HandoverFromEUTRAPreparationRequest_r8_IEs_cdma2000_Type, _HandoverFromEUTRAPreparationRequest_r8_IEs_rand, _HandoverFromEUTRAPreparationRequest_r8_IEs_mobilityParameters, _HandoverFromEUTRAPreparationRequest_r8_IEs_nonCriticalExtension, HandoverFromEUTRAPreparationRequest_r8_IEs, _MasterInformationBlock_dl_Bandwidth, _MasterInformationBlock_phich_Config, _MasterInformationBlock_systemFrameNumber, _MasterInformationBlock_spare, MasterInformationBlock, ___MeasurementReport_criticalExtensions_c1_measurementReport_r8, ___MeasurementReport_criticalExtensions_c1_spare7, ___MeasurementReport_criticalExtensions_c1_spare6, ___MeasurementReport_criticalExtensions_c1_spare5, ___MeasurementReport_criticalExtensions_c1_spare4, ___MeasurementReport_criticalExtensions_c1_spare3, ___MeasurementReport_criticalExtensions_c1_spare2, ___MeasurementReport_criticalExtensions_c1_spare1, __MeasurementReport_criticalExtensions_c1, __MeasurementReport_criticalExtensions_criticalExtensionsFuture, _MeasurementReport_criticalExtensions, MeasurementReport, _MeasurementReport_r8_IEs_measResults, _MeasurementReport_r8_IEs_nonCriticalExtension, MeasurementReport_r8_IEs, _MobilityFromEUTRACommand_rrc_TransactionIdentifier, ___MobilityFromEUTRACommand_criticalExtensions_c1_mobilityFromEUTRACommand_r8, ___MobilityFromEUTRACommand_criticalExtensions_c1_spare3, ___MobilityFromEUTRACommand_criticalExtensions_c1_spare2, ___MobilityFromEUTRACommand_criticalExtensions_c1_spare1, __MobilityFromEUTRACommand_criticalExtensions_c1, __MobilityFromEUTRACommand_criticalExtensions_criticalExtensionsFuture, _MobilityFromEUTRACommand_criticalExtensions, MobilityFromEUTRACommand, _MobilityFromEUTRACommand_r8_IEs_cs_FallbackIndicator, __MobilityFromEUTRACommand_r8_IEs_purpose_handover, __MobilityFromEUTRACommand_r8_IEs_purpose_cellChangeOrder, _MobilityFromEUTRACommand_r8_IEs_purpose, _MobilityFromEUTRACommand_r8_IEs_nonCriticalExtension, MobilityFromEUTRACommand_r8_IEs, _Handover_targetRAT_Type, _Handover_targetRAT_MessageContainer, _Handover_nas_SecurityParamFromEUTRA, _Handover_systemInformation, Handover, _CellChangeOrder_t304, ___CellChangeOrder_targetRAT_Type_geran_physCellId, ___CellChangeOrder_targetRAT_Type_geran_carrierFreq, ___CellChangeOrder_targetRAT_Type_geran_networkControlOrder, ___CellChangeOrder_targetRAT_Type_geran_systemInformation, __CellChangeOrder_targetRAT_Type_geran, _CellChangeOrder_targetRAT_Type, CellChangeOrder, _SI_OrPSI_GERAN_si, _SI_OrPSI_GERAN_psi, SI_OrPSI_GERAN, _SystemInfoListGERAN__item_, SystemInfoListGERAN, _Paging_pagingRecordList, _Paging_systemInfoModification, _Paging_etws_Indication, _Paging_nonCriticalExtension, Paging, _PagingRecordList__item_, PagingRecordList, _PagingRecord_ue_Identity, _PagingRecord_cn_Domain, PagingRecord, _PagingUE_Identity_s_TMSI, _PagingUE_Identity_imsi, PagingUE_Identity, _IMSI__item_, IMSI, IMSI_Digit, _RRCConnectionReconfiguration_rrc_TransactionIdentifier, ___RRCConnectionReconfiguration_criticalExtensions_c1_rrcConnectionReconfiguration_r8, ___RRCConnectionReconfiguration_criticalExtensions_c1_spare7, ___RRCConnectionReconfiguration_criticalExtensions_c1_spare6, ___RRCConnectionReconfiguration_criticalExtensions_c1_spare5, ___RRCConnectionReconfiguration_criticalExtensions_c1_spare4, ___RRCConnectionReconfiguration_criticalExtensions_c1_spare3, ___RRCConnectionReconfiguration_criticalExtensions_c1_spare2, ___RRCConnectionReconfiguration_criticalExtensions_c1_spare1, __RRCConnectionReconfiguration_criticalExtensions_c1, __RRCConnectionReconfiguration_criticalExtensions_criticalExtensionsFuture, _RRCConnectionReconfiguration_criticalExtensions, RRCConnectionReconfiguration, _RRCConnectionReconfiguration_r8_IEs_measConfig, _RRCConnectionReconfiguration_r8_IEs_mobilityControlInfo, __RRCConnectionReconfiguration_r8_IEs_dedicatedInfoNASList__item_, _RRCConnectionReconfiguration_r8_IEs_dedicatedInfoNASList, _RRCConnectionReconfiguration_r8_IEs_radioResourceConfigDedicated, _RRCConnectionReconfiguration_r8_IEs_securityConfigHO, _RRCConnectionReconfiguration_r8_IEs_nonCriticalExtension, RRCConnectionReconfiguration_r8_IEs, ___SecurityConfigHO_handoverType_intraLTE_securityAlgorithmConfig, ___SecurityConfigHO_handoverType_intraLTE_keyChangeIndicator, ___SecurityConfigHO_handoverType_intraLTE_nextHopChainingCount, __SecurityConfigHO_handoverType_intraLTE, ___SecurityConfigHO_handoverType_interRAT_securityAlgorithmConfig, ___SecurityConfigHO_handoverType_interRAT_nas_SecurityParamToEUTRA, __SecurityConfigHO_handoverType_interRAT, _SecurityConfigHO_handoverType, SecurityConfigHO, _RRCConnectionReconfigurationComplete_rrc_TransactionIdentifier, __RRCConnectionReconfigurationComplete_criticalExtensions_rrcConnectionReconfigurationComplete_r8, __RRCConnectionReconfigurationComplete_criticalExtensions_criticalExtensionsFuture, _RRCConnectionReconfigurationComplete_criticalExtensions, RRCConnectionReconfigurationComplete, _RRCConnectionReconfigurationComplete_r8_IEs_nonCriticalExtension, RRCConnectionReconfigurationComplete_r8_IEs, _RRCConnectionReestablishment_rrc_TransactionIdentifier, ___RRCConnectionReestablishment_criticalExtensions_c1_rrcConnectionReestablishment_r8, ___RRCConnectionReestablishment_criticalExtensions_c1_spare7, ___RRCConnectionReestablishment_criticalExtensions_c1_spare6, ___RRCConnectionReestablishment_criticalExtensions_c1_spare5, ___RRCConnectionReestablishment_criticalExtensions_c1_spare4, ___RRCConnectionReestablishment_criticalExtensions_c1_spare3, ___RRCConnectionReestablishment_criticalExtensions_c1_spare2, ___RRCConnectionReestablishment_criticalExtensions_c1_spare1, __RRCConnectionReestablishment_criticalExtensions_c1, __RRCConnectionReestablishment_criticalExtensions_criticalExtensionsFuture, _RRCConnectionReestablishment_criticalExtensions, RRCConnectionReestablishment, _RRCConnectionReestablishment_r8_IEs_radioResourceConfigDedicated, _RRCConnectionReestablishment_r8_IEs_nextHopChainingCount, _RRCConnectionReestablishment_r8_IEs_nonCriticalExtension, RRCConnectionReestablishment_r8_IEs, _RRCConnectionReestablishmentComplete_rrc_TransactionIdentifier, __RRCConnectionReestablishmentComplete_criticalExtensions_rrcConnectionReestablishmentComplete_r8, __RRCConnectionReestablishmentComplete_criticalExtensions_criticalExtensionsFuture, _RRCConnectionReestablishmentComplete_criticalExtensions, RRCConnectionReestablishmentComplete, _RRCConnectionReestablishmentComplete_r8_IEs_nonCriticalExtension, RRCConnectionReestablishmentComplete_r8_IEs, __RRCConnectionReestablishmentReject_criticalExtensions_rrcConnectionReestablishmentReject_r8, __RRCConnectionReestablishmentReject_criticalExtensions_criticalExtensionsFuture, _RRCConnectionReestablishmentReject_criticalExtensions, RRCConnectionReestablishmentReject, _RRCConnectionReestablishmentReject_r8_IEs_nonCriticalExtension, RRCConnectionReestablishmentReject_r8_IEs, __RRCConnectionReestablishmentRequest_criticalExtensions_rrcConnectionReestablishmentRequest_r8, __RRCConnectionReestablishmentRequest_criticalExtensions_criticalExtensionsFuture, _RRCConnectionReestablishmentRequest_criticalExtensions, RRCConnectionReestablishmentRequest, _RRCConnectionReestablishmentRequest_r8_IEs_ue_Identity, _RRCConnectionReestablishmentRequest_r8_IEs_reestablishmentCause, _RRCConnectionReestablishmentRequest_r8_IEs_spare, RRCConnectionReestablishmentRequest_r8_IEs, _ReestabUE_Identity_c_RNTI, _ReestabUE_Identity_physCellId, _ReestabUE_Identity_shortMAC_I, ReestabUE_Identity, ReestablishmentCause, ___RRCConnectionReject_criticalExtensions_c1_rrcConnectionReject_r8, ___RRCConnectionReject_criticalExtensions_c1_spare3, ___RRCConnectionReject_criticalExtensions_c1_spare2, ___RRCConnectionReject_criticalExtensions_c1_spare1, __RRCConnectionReject_criticalExtensions_c1, __RRCConnectionReject_criticalExtensions_criticalExtensionsFuture, _RRCConnectionReject_criticalExtensions, RRCConnectionReject, _RRCConnectionReject_r8_IEs_waitTime, _RRCConnectionReject_r8_IEs_nonCriticalExtension, RRCConnectionReject_r8_IEs, _RRCConnectionRelease_rrc_TransactionIdentifier, ___RRCConnectionRelease_criticalExtensions_c1_rrcConnectionRelease_r8, ___RRCConnectionRelease_criticalExtensions_c1_spare3, ___RRCConnectionRelease_criticalExtensions_c1_spare2, ___RRCConnectionRelease_criticalExtensions_c1_spare1, __RRCConnectionRelease_criticalExtensions_c1, __RRCConnectionRelease_criticalExtensions_criticalExtensionsFuture, _RRCConnectionRelease_criticalExtensions, RRCConnectionRelease, _RRCConnectionRelease_r8_IEs_releaseCause, _RRCConnectionRelease_r8_IEs_redirectedCarrierInfo, _RRCConnectionRelease_r8_IEs_idleModeMobilityControlInfo, _RRCConnectionRelease_r8_IEs_nonCriticalExtension, RRCConnectionRelease_r8_IEs, ReleaseCause, _RedirectedCarrierInfo_eutra, _RedirectedCarrierInfo_geran, _RedirectedCarrierInfo_utra_FDD, _RedirectedCarrierInfo_utra_TDD, _RedirectedCarrierInfo_cdma2000_HRPD, _RedirectedCarrierInfo_cdma2000_1xRTT, RedirectedCarrierInfo, _IdleModeMobilityControlInfo_freqPriorityListEUTRA, _IdleModeMobilityControlInfo_freqPriorityListGERAN, _IdleModeMobilityControlInfo_freqPriorityListUTRA_FDD, _IdleModeMobilityControlInfo_freqPriorityListUTRA_TDD, _IdleModeMobilityControlInfo_bandClassPriorityListHRPD, _IdleModeMobilityControlInfo_bandClassPriorityList1XRTT, _IdleModeMobilityControlInfo_t320, IdleModeMobilityControlInfo, _FreqPriorityListEUTRA__item_, FreqPriorityListEUTRA, _FreqPriorityEUTRA_carrierFreq, _FreqPriorityEUTRA_cellReselectionPriority, FreqPriorityEUTRA, _FreqsPriorityListGERAN__item_, FreqsPriorityListGERAN, _FreqsPriorityGERAN_carrierFreqs, _FreqsPriorityGERAN_cellReselectionPriority, FreqsPriorityGERAN, _FreqPriorityListUTRA_FDD__item_, FreqPriorityListUTRA_FDD, _FreqPriorityUTRA_FDD_carrierFreq, _FreqPriorityUTRA_FDD_cellReselectionPriority, FreqPriorityUTRA_FDD, _FreqPriorityListUTRA_TDD__item_, FreqPriorityListUTRA_TDD, _FreqPriorityUTRA_TDD_carrierFreq, _FreqPriorityUTRA_TDD_cellReselectionPriority, FreqPriorityUTRA_TDD, _BandClassPriorityListHRPD__item_, BandClassPriorityListHRPD, _BandClassPriorityHRPD_bandClass, _BandClassPriorityHRPD_cellReselectionPriority, BandClassPriorityHRPD, _BandClassPriorityList1XRTT__item_, BandClassPriorityList1XRTT, _BandClassPriority1XRTT_bandClass, _BandClassPriority1XRTT_cellReselectionPriority, BandClassPriority1XRTT, __RRCConnectionRequest_criticalExtensions_rrcConnectionRequest_r8, __RRCConnectionRequest_criticalExtensions_criticalExtensionsFuture, _RRCConnectionRequest_criticalExtensions, RRCConnectionRequest, _RRCConnectionRequest_r8_IEs_ue_Identity, _RRCConnectionRequest_r8_IEs_establishmentCause, _RRCConnectionRequest_r8_IEs_spare, RRCConnectionRequest_r8_IEs, _InitialUE_Identity_s_TMSI, _InitialUE_Identity_randomValue, InitialUE_Identity, EstablishmentCause, _RRCConnectionSetup_rrc_TransactionIdentifier, ___RRCConnectionSetup_criticalExtensions_c1_rrcConnectionSetup_r8, ___RRCConnectionSetup_criticalExtensions_c1_spare7, ___RRCConnectionSetup_criticalExtensions_c1_spare6, ___RRCConnectionSetup_criticalExtensions_c1_spare5, ___RRCConnectionSetup_criticalExtensions_c1_spare4, ___RRCConnectionSetup_criticalExtensions_c1_spare3, ___RRCConnectionSetup_criticalExtensions_c1_spare2, ___RRCConnectionSetup_criticalExtensions_c1_spare1, __RRCConnectionSetup_criticalExtensions_c1, __RRCConnectionSetup_criticalExtensions_criticalExtensionsFuture, _RRCConnectionSetup_criticalExtensions, RRCConnectionSetup, _RRCConnectionSetup_r8_IEs_radioResourceConfigDedicated, _RRCConnectionSetup_r8_IEs_nonCriticalExtension, RRCConnectionSetup_r8_IEs, _RRCConnectionSetupComplete_rrc_TransactionIdentifier, ___RRCConnectionSetupComplete_criticalExtensions_c1_rrcConnectionSetupComplete_r8, ___RRCConnectionSetupComplete_criticalExtensions_c1_spare3, ___RRCConnectionSetupComplete_criticalExtensions_c1_spare2, ___RRCConnectionSetupComplete_criticalExtensions_c1_spare1, __RRCConnectionSetupComplete_criticalExtensions_c1, __RRCConnectionSetupComplete_criticalExtensions_criticalExtensionsFuture, _RRCConnectionSetupComplete_criticalExtensions, RRCConnectionSetupComplete, _RRCConnectionSetupComplete_r8_IEs_selectedPLMN_Identity, _RRCConnectionSetupComplete_r8_IEs_registeredMME, _RRCConnectionSetupComplete_r8_IEs_dedicatedInfoNAS, _RRCConnectionSetupComplete_r8_IEs_nonCriticalExtension, RRCConnectionSetupComplete_r8_IEs, _RegisteredMME_plmn_Identity, _RegisteredMME_mmegi, _RegisteredMME_mmec, RegisteredMME, _SecurityModeCommand_rrc_TransactionIdentifier, ___SecurityModeCommand_criticalExtensions_c1_securityModeCommand_r8, ___SecurityModeCommand_criticalExtensions_c1_spare3, ___SecurityModeCommand_criticalExtensions_c1_spare2, ___SecurityModeCommand_criticalExtensions_c1_spare1, __SecurityModeCommand_criticalExtensions_c1, __SecurityModeCommand_criticalExtensions_criticalExtensionsFuture, _SecurityModeCommand_criticalExtensions, SecurityModeCommand, _SecurityModeCommand_r8_IEs_securityConfigSMC, _SecurityModeCommand_r8_IEs_nonCriticalExtension, SecurityModeCommand_r8_IEs, _SecurityConfigSMC_securityAlgorithmConfig, SecurityConfigSMC, _SecurityModeComplete_rrc_TransactionIdentifier, __SecurityModeComplete_criticalExtensions_securityModeComplete_r8, __SecurityModeComplete_criticalExtensions_criticalExtensionsFuture, _SecurityModeComplete_criticalExtensions, SecurityModeComplete, _SecurityModeComplete_r8_IEs_nonCriticalExtension, SecurityModeComplete_r8_IEs, _SecurityModeFailure_rrc_TransactionIdentifier, __SecurityModeFailure_criticalExtensions_securityModeFailure_r8, __SecurityModeFailure_criticalExtensions_criticalExtensionsFuture, _SecurityModeFailure_criticalExtensions, SecurityModeFailure, _SecurityModeFailure_r8_IEs_nonCriticalExtension, SecurityModeFailure_r8_IEs, __SystemInformation_criticalExtensions_systemInformation_r8, __SystemInformation_criticalExtensions_criticalExtensionsFuture, _SystemInformation_criticalExtensions, SystemInformation, ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib2, ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib3, ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib4, ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib5, ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib6, ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib7, ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib8, ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib9, ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib10, ___SystemInformation_r8_IEs_sib_TypeAndInfo__item__sib11, __SystemInformation_r8_IEs_sib_TypeAndInfo__item_, _SystemInformation_r8_IEs_sib_TypeAndInfo, _SystemInformation_r8_IEs_nonCriticalExtension, SystemInformation_r8_IEs, __SystemInformationBlockType1_cellAccessRelatedInfo_plmn_IdentityList, __SystemInformationBlockType1_cellAccessRelatedInfo_trackingAreaCode, __SystemInformationBlockType1_cellAccessRelatedInfo_cellIdentity, __SystemInformationBlockType1_cellAccessRelatedInfo_cellBarred, __SystemInformationBlockType1_cellAccessRelatedInfo_intraFreqReselection, __SystemInformationBlockType1_cellAccessRelatedInfo_csg_Indication, __SystemInformationBlockType1_cellAccessRelatedInfo_csg_Identity, _SystemInformationBlockType1_cellAccessRelatedInfo, __SystemInformationBlockType1_cellSelectionInfo_q_RxLevMin, __SystemInformationBlockType1_cellSelectionInfo_q_RxLevMinOffset, _SystemInformationBlockType1_cellSelectionInfo, _SystemInformationBlockType1_p_Max, _SystemInformationBlockType1_freqBandIndicator, _SystemInformationBlockType1_schedulingInfoList, _SystemInformationBlockType1_tdd_Config, _SystemInformationBlockType1_si_WindowLength, _SystemInformationBlockType1_systemInfoValueTag, _SystemInformationBlockType1_nonCriticalExtension, SystemInformationBlockType1, _PLMN_IdentityList__item_, PLMN_IdentityList, _PLMN_IdentityInfo_plmn_Identity, _PLMN_IdentityInfo_cellReservedForOperatorUse, PLMN_IdentityInfo, _SchedulingInfoList__item_, SchedulingInfoList, _SchedulingInfo_si_Periodicity, _SchedulingInfo_sib_MappingInfo, SchedulingInfo, _SIB_MappingInfo__item_, SIB_MappingInfo, SIB_Type, _UECapabilityEnquiry_rrc_TransactionIdentifier, ___UECapabilityEnquiry_criticalExtensions_c1_ueCapabilityEnquiry_r8, ___UECapabilityEnquiry_criticalExtensions_c1_spare3, ___UECapabilityEnquiry_criticalExtensions_c1_spare2, ___UECapabilityEnquiry_criticalExtensions_c1_spare1, __UECapabilityEnquiry_criticalExtensions_c1, __UECapabilityEnquiry_criticalExtensions_criticalExtensionsFuture, _UECapabilityEnquiry_criticalExtensions, UECapabilityEnquiry, _UECapabilityEnquiry_r8_IEs_ue_CapabilityRequest, _UECapabilityEnquiry_r8_IEs_nonCriticalExtension, UECapabilityEnquiry_r8_IEs, _UE_CapabilityRequest__item_, UE_CapabilityRequest, _UECapabilityInformation_rrc_TransactionIdentifier, ___UECapabilityInformation_criticalExtensions_c1_ueCapabilityInformation_r8, ___UECapabilityInformation_criticalExtensions_c1_spare7, ___UECapabilityInformation_criticalExtensions_c1_spare6, ___UECapabilityInformation_criticalExtensions_c1_spare5, ___UECapabilityInformation_criticalExtensions_c1_spare4, ___UECapabilityInformation_criticalExtensions_c1_spare3, ___UECapabilityInformation_criticalExtensions_c1_spare2, ___UECapabilityInformation_criticalExtensions_c1_spare1, __UECapabilityInformation_criticalExtensions_c1, __UECapabilityInformation_criticalExtensions_criticalExtensionsFuture, _UECapabilityInformation_criticalExtensions, UECapabilityInformation, _UECapabilityInformation_r8_IEs_ue_CapabilityRAT_ContainerList, _UECapabilityInformation_r8_IEs_nonCriticalExtension, UECapabilityInformation_r8_IEs, ___ULHandoverPreparationTransfer_criticalExtensions_c1_ulHandoverPreparationTransfer_r8, ___ULHandoverPreparationTransfer_criticalExtensions_c1_spare3, ___ULHandoverPreparationTransfer_criticalExtensions_c1_spare2, ___ULHandoverPreparationTransfer_criticalExtensions_c1_spare1, __ULHandoverPreparationTransfer_criticalExtensions_c1, __ULHandoverPreparationTransfer_criticalExtensions_criticalExtensionsFuture, _ULHandoverPreparationTransfer_criticalExtensions, ULHandoverPreparationTransfer, _ULHandoverPreparationTransfer_r8_IEs_cdma2000_Type, _ULHandoverPreparationTransfer_r8_IEs_meid, _ULHandoverPreparationTransfer_r8_IEs_dedicatedInfo, _ULHandoverPreparationTransfer_r8_IEs_nonCriticalExtension, ULHandoverPreparationTransfer_r8_IEs, ___ULInformationTransfer_criticalExtensions_c1_ulInformationTransfer_r8, ___ULInformationTransfer_criticalExtensions_c1_spare3, ___ULInformationTransfer_criticalExtensions_c1_spare2, ___ULInformationTransfer_criticalExtensions_c1_spare1, __ULInformationTransfer_criticalExtensions_c1, __ULInformationTransfer_criticalExtensions_criticalExtensionsFuture, _ULInformationTransfer_criticalExtensions, ULInformationTransfer, __ULInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoNAS, __ULInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoCDMA2000_1XRTT, __ULInformationTransfer_r8_IEs_dedicatedInfoType_dedicatedInfoCDMA2000_HRPD, _ULInformationTransfer_r8_IEs_dedicatedInfoType, _ULInformationTransfer_r8_IEs_nonCriticalExtension, ULInformationTransfer_r8_IEs, __SystemInformationBlockType2_ac_BarringInfo_ac_BarringForEmergency, __SystemInformationBlockType2_ac_BarringInfo_ac_BarringForMO_Signalling, __SystemInformationBlockType2_ac_BarringInfo_ac_BarringForMO_Data, _SystemInformationBlockType2_ac_BarringInfo, _SystemInformationBlockType2_radioResourceConfigCommon, _SystemInformationBlockType2_ue_TimersAndConstants, __SystemInformationBlockType2_freqInfo_ul_CarrierFreq, __SystemInformationBlockType2_freqInfo_ul_Bandwidth, __SystemInformationBlockType2_freqInfo_additionalSpectrumEmission, _SystemInformationBlockType2_freqInfo, _SystemInformationBlockType2_mbsfn_SubframeConfigList, _SystemInformationBlockType2_timeAlignmentTimerCommon, SystemInformationBlockType2, _AC_BarringConfig_ac_BarringFactor, _AC_BarringConfig_ac_BarringTime, _AC_BarringConfig_ac_BarringForSpecialAC, AC_BarringConfig, _MBSFN_SubframeConfigList__item_, MBSFN_SubframeConfigList, _MBSFN_SubframeConfig_radioframeAllocationPeriod, _MBSFN_SubframeConfig_radioframeAllocationOffset, __MBSFN_SubframeConfig_subframeAllocation_oneFrame, __MBSFN_SubframeConfig_subframeAllocation_fourFrames, _MBSFN_SubframeConfig_subframeAllocation, MBSFN_SubframeConfig, __SystemInformationBlockType3_cellReselectionInfoCommon_q_Hyst, ___SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_mobilityStateParameters, ____SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF_sf_Medium, ____SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF_sf_High, ___SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars_q_HystSF, __SystemInformationBlockType3_cellReselectionInfoCommon_speedStateReselectionPars, _SystemInformationBlockType3_cellReselectionInfoCommon, __SystemInformationBlockType3_cellReselectionServingFreqInfo_s_NonIntraSearch, __SystemInformationBlockType3_cellReselectionServingFreqInfo_threshServingLow, __SystemInformationBlockType3_cellReselectionServingFreqInfo_cellReselectionPriority, _SystemInformationBlockType3_cellReselectionServingFreqInfo, __SystemInformationBlockType3_intraFreqCellReselectionInfo_q_RxLevMin, __SystemInformationBlockType3_intraFreqCellReselectionInfo_p_Max, __SystemInformationBlockType3_intraFreqCellReselectionInfo_s_IntraSearch, __SystemInformationBlockType3_intraFreqCellReselectionInfo_allowedMeasBandwidth, __SystemInformationBlockType3_intraFreqCellReselectionInfo_presenceAntennaPort1, __SystemInformationBlockType3_intraFreqCellReselectionInfo_neighCellConfig, __SystemInformationBlockType3_intraFreqCellReselectionInfo_t_ReselectionEUTRA, __SystemInformationBlockType3_intraFreqCellReselectionInfo_t_ReselectionEUTRA_SF, _SystemInformationBlockType3_intraFreqCellReselectionInfo, SystemInformationBlockType3, _SystemInformationBlockType4_intraFreqNeighCellList, _SystemInformationBlockType4_intraFreqBlackCellList, _SystemInformationBlockType4_csg_PhysCellIdRange, SystemInformationBlockType4, _IntraFreqNeighCellList__item_, IntraFreqNeighCellList, _IntraFreqNeighCellInfo_physCellId, _IntraFreqNeighCellInfo_q_OffsetCell, IntraFreqNeighCellInfo, _IntraFreqBlackCellList__item_, IntraFreqBlackCellList, _SystemInformationBlockType5_interFreqCarrierFreqList, SystemInformationBlockType5, _InterFreqCarrierFreqList__item_, InterFreqCarrierFreqList, _InterFreqCarrierFreqInfo_dl_CarrierFreq, _InterFreqCarrierFreqInfo_q_RxLevMin, _InterFreqCarrierFreqInfo_p_Max, _InterFreqCarrierFreqInfo_t_ReselectionEUTRA, _InterFreqCarrierFreqInfo_t_ReselectionEUTRA_SF, _InterFreqCarrierFreqInfo_threshX_High, _InterFreqCarrierFreqInfo_threshX_Low, _InterFreqCarrierFreqInfo_allowedMeasBandwidth, _InterFreqCarrierFreqInfo_presenceAntennaPort1, _InterFreqCarrierFreqInfo_cellReselectionPriority, _InterFreqCarrierFreqInfo_neighCellConfig, _InterFreqCarrierFreqInfo_q_OffsetFreq, _InterFreqCarrierFreqInfo_interFreqNeighCellList, _InterFreqCarrierFreqInfo_interFreqBlackCellList, InterFreqCarrierFreqInfo, _InterFreqNeighCellList__item_, InterFreqNeighCellList, _InterFreqNeighCellInfo_physCellId, _InterFreqNeighCellInfo_q_OffsetCell, InterFreqNeighCellInfo, _InterFreqBlackCellList__item_, InterFreqBlackCellList, _SystemInformationBlockType6_carrierFreqListUTRA_FDD, _SystemInformationBlockType6_carrierFreqListUTRA_TDD, _SystemInformationBlockType6_t_ReselectionUTRA, _SystemInformationBlockType6_t_ReselectionUTRA_SF, SystemInformationBlockType6, _CarrierFreqListUTRA_FDD__item_, CarrierFreqListUTRA_FDD, _CarrierFreqUTRA_FDD_carrierFreq, _CarrierFreqUTRA_FDD_cellReselectionPriority, _CarrierFreqUTRA_FDD_threshX_High, _CarrierFreqUTRA_FDD_threshX_Low, _CarrierFreqUTRA_FDD_q_RxLevMin, _CarrierFreqUTRA_FDD_p_MaxUTRA, _CarrierFreqUTRA_FDD_q_QualMin, CarrierFreqUTRA_FDD, _CarrierFreqListUTRA_TDD__item_, CarrierFreqListUTRA_TDD, _CarrierFreqUTRA_TDD_carrierFreq, _CarrierFreqUTRA_TDD_cellReselectionPriority, _CarrierFreqUTRA_TDD_threshX_High, _CarrierFreqUTRA_TDD_threshX_Low, _CarrierFreqUTRA_TDD_q_RxLevMin, _CarrierFreqUTRA_TDD_p_MaxUTRA, CarrierFreqUTRA_TDD, _SystemInformationBlockType7_t_ReselectionGERAN, _SystemInformationBlockType7_t_ReselectionGERAN_SF, _SystemInformationBlockType7_carrierFreqsInfoList, SystemInformationBlockType7, _CarrierFreqsInfoListGERAN__item_, CarrierFreqsInfoListGERAN, _CarrierFreqsInfoGERAN_carrierFreqs, __CarrierFreqsInfoGERAN_commonInfo_cellReselectionPriority, __CarrierFreqsInfoGERAN_commonInfo_ncc_Permitted, __CarrierFreqsInfoGERAN_commonInfo_q_RxLevMin, __CarrierFreqsInfoGERAN_commonInfo_p_MaxGERAN, __CarrierFreqsInfoGERAN_commonInfo_threshX_High, __CarrierFreqsInfoGERAN_commonInfo_threshX_Low, _CarrierFreqsInfoGERAN_commonInfo, CarrierFreqsInfoGERAN, _SystemInformationBlockType8_systemTimeInfo, _SystemInformationBlockType8_searchWindowSize, __SystemInformationBlockType8_parametersHRPD_preRegistrationInfoHRPD, __SystemInformationBlockType8_parametersHRPD_cellReselectionParametersHRPD, _SystemInformationBlockType8_parametersHRPD, __SystemInformationBlockType8_parameters1XRTT_csfb_RegistrationParam1XRTT, __SystemInformationBlockType8_parameters1XRTT_longCodeState1XRTT, __SystemInformationBlockType8_parameters1XRTT_cellReselectionParameters1XRTT, _SystemInformationBlockType8_parameters1XRTT, SystemInformationBlockType8, _CellReselectionParametersCDMA2000_bandClassList, _CellReselectionParametersCDMA2000_neighCellList, _CellReselectionParametersCDMA2000_t_ReselectionCDMA2000, _CellReselectionParametersCDMA2000_t_ReselectionCDMA2000_SF, CellReselectionParametersCDMA2000, _NeighCellListCDMA2000__item_, NeighCellListCDMA2000, _NeighCellCDMA2000_bandClass, _NeighCellCDMA2000_neighCellsPerFreqList, NeighCellCDMA2000, _NeighCellsPerBandclassListCDMA2000__item_, NeighCellsPerBandclassListCDMA2000, _NeighCellsPerBandclassCDMA2000_arfcn, _NeighCellsPerBandclassCDMA2000_physCellIdList, NeighCellsPerBandclassCDMA2000, _PhysCellIdListCDMA2000__item_, PhysCellIdListCDMA2000, _BandClassListCDMA2000__item_, BandClassListCDMA2000, _BandClassInfoCDMA2000_bandClass, _BandClassInfoCDMA2000_cellReselectionPriority, _BandClassInfoCDMA2000_threshX_High, _BandClassInfoCDMA2000_threshX_Low, BandClassInfoCDMA2000, _SystemInformationBlockType9_hnb_Name, SystemInformationBlockType9, _SystemInformationBlockType10_messageIdentifier, _SystemInformationBlockType10_serialNumber, _SystemInformationBlockType10_warningType, _SystemInformationBlockType10_warningSecurityInfo, SystemInformationBlockType10, _SystemInformationBlockType11_messageIdentifier, _SystemInformationBlockType11_serialNumber, _SystemInformationBlockType11_warningMessageSegmentType, _SystemInformationBlockType11_warningMessageSegmentNumber, _SystemInformationBlockType11_warningMessageSegment, _SystemInformationBlockType11_dataCodingScheme, SystemInformationBlockType11, _AntennaInfoCommon_antennaPortsCount, AntennaInfoCommon, _AntennaInfoDedicated_transmissionMode, __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm3, __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm3, __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm4, __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm4, __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm5, __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm5, __AntennaInfoDedicated_codebookSubsetRestriction_n2TxAntenna_tm6, __AntennaInfoDedicated_codebookSubsetRestriction_n4TxAntenna_tm6, _AntennaInfoDedicated_codebookSubsetRestriction, __AntennaInfoDedicated_ue_TransmitAntennaSelection_release, __AntennaInfoDedicated_ue_TransmitAntennaSelection_setup, _AntennaInfoDedicated_ue_TransmitAntennaSelection, AntennaInfoDedicated, _CQI_ReportConfig_cqi_ReportModeAperiodic, _CQI_ReportConfig_nomPDSCH_RS_EPRE_Offset, _CQI_ReportConfig_cqi_ReportPeriodic, CQI_ReportConfig, _CQI_ReportPeriodic_release, __CQI_ReportPeriodic_setup_cqi_PUCCH_ResourceIndex, __CQI_ReportPeriodic_setup_cqi_pmi_ConfigIndex, ___CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic_widebandCQI, ____CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic_subbandCQI_k, ___CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic_subbandCQI, __CQI_ReportPeriodic_setup_cqi_FormatIndicatorPeriodic, __CQI_ReportPeriodic_setup_ri_ConfigIndex, __CQI_ReportPeriodic_setup_simultaneousAckNackAndCQI, _CQI_ReportPeriodic_setup, CQI_ReportPeriodic, DRB_Identity, __LogicalChannelConfig_ul_SpecificParameters_priority, __LogicalChannelConfig_ul_SpecificParameters_prioritisedBitRate, __LogicalChannelConfig_ul_SpecificParameters_bucketSizeDuration, __LogicalChannelConfig_ul_SpecificParameters_logicalChannelGroup, _LogicalChannelConfig_ul_SpecificParameters, LogicalChannelConfig, __MAC_MainConfig_ul_SCH_Config_maxHARQ_Tx, __MAC_MainConfig_ul_SCH_Config_periodicBSR_Timer, __MAC_MainConfig_ul_SCH_Config_retxBSR_Timer, __MAC_MainConfig_ul_SCH_Config_ttiBundling, _MAC_MainConfig_ul_SCH_Config, _MAC_MainConfig_drx_Config, _MAC_MainConfig_timeAlignmentTimerDedicated, __MAC_MainConfig_phr_Config_release, ___MAC_MainConfig_phr_Config_setup_periodicPHR_Timer, ___MAC_MainConfig_phr_Config_setup_prohibitPHR_Timer, ___MAC_MainConfig_phr_Config_setup_dl_PathlossChange, __MAC_MainConfig_phr_Config_setup, _MAC_MainConfig_phr_Config, MAC_MainConfig, _DRX_Config_release, __DRX_Config_setup_onDurationTimer, __DRX_Config_setup_drx_InactivityTimer, __DRX_Config_setup_drx_RetransmissionTimer, ___DRX_Config_setup_longDRX_CycleStartOffset_sf10, ___DRX_Config_setup_longDRX_CycleStartOffset_sf20, ___DRX_Config_setup_longDRX_CycleStartOffset_sf32, ___DRX_Config_setup_longDRX_CycleStartOffset_sf40, ___DRX_Config_setup_longDRX_CycleStartOffset_sf64, ___DRX_Config_setup_longDRX_CycleStartOffset_sf80, ___DRX_Config_setup_longDRX_CycleStartOffset_sf128, ___DRX_Config_setup_longDRX_CycleStartOffset_sf160, ___DRX_Config_setup_longDRX_CycleStartOffset_sf256, ___DRX_Config_setup_longDRX_CycleStartOffset_sf320, ___DRX_Config_setup_longDRX_CycleStartOffset_sf512, ___DRX_Config_setup_longDRX_CycleStartOffset_sf640, ___DRX_Config_setup_longDRX_CycleStartOffset_sf1024, ___DRX_Config_setup_longDRX_CycleStartOffset_sf1280, ___DRX_Config_setup_longDRX_CycleStartOffset_sf2048, ___DRX_Config_setup_longDRX_CycleStartOffset_sf2560, __DRX_Config_setup_longDRX_CycleStartOffset, ___DRX_Config_setup_shortDRX_shortDRX_Cycle, ___DRX_Config_setup_shortDRX_drxShortCycleTimer, __DRX_Config_setup_shortDRX, _DRX_Config_setup, DRX_Config, _PDCP_Config_discardTimer, __PDCP_Config_rlc_AM_statusReportRequired, _PDCP_Config_rlc_AM, __PDCP_Config_rlc_UM_pdcp_SN_Size, _PDCP_Config_rlc_UM, __PDCP_Config_headerCompression_notUsed, ___PDCP_Config_headerCompression_rohc_maxCID, ____PDCP_Config_headerCompression_rohc_profiles_profile0x0001, ____PDCP_Config_headerCompression_rohc_profiles_profile0x0002, ____PDCP_Config_headerCompression_rohc_profiles_profile0x0003, ____PDCP_Config_headerCompression_rohc_profiles_profile0x0004, ____PDCP_Config_headerCompression_rohc_profiles_profile0x0006, ____PDCP_Config_headerCompression_rohc_profiles_profile0x0101, ____PDCP_Config_headerCompression_rohc_profiles_profile0x0102, ____PDCP_Config_headerCompression_rohc_profiles_profile0x0103, ____PDCP_Config_headerCompression_rohc_profiles_profile0x0104, ___PDCP_Config_headerCompression_rohc_profiles, __PDCP_Config_headerCompression_rohc, _PDCP_Config_headerCompression, PDCP_Config, _PDSCH_ConfigCommon_referenceSignalPower, _PDSCH_ConfigCommon_p_b, PDSCH_ConfigCommon, _PDSCH_ConfigDedicated_p_a, PDSCH_ConfigDedicated, _PHICH_Config_phich_Duration, _PHICH_Config_phich_Resource, PHICH_Config, _PhysicalConfigDedicated_pdsch_ConfigDedicated, _PhysicalConfigDedicated_pucch_ConfigDedicated, _PhysicalConfigDedicated_pusch_ConfigDedicated, _PhysicalConfigDedicated_uplinkPowerControlDedicated, _PhysicalConfigDedicated_tpc_PDCCH_ConfigPUCCH, _PhysicalConfigDedicated_tpc_PDCCH_ConfigPUSCH, _PhysicalConfigDedicated_cqi_ReportConfig, _PhysicalConfigDedicated_soundingRS_UL_ConfigDedicated, __PhysicalConfigDedicated_antennaInfo_explicitValue, __PhysicalConfigDedicated_antennaInfo_defaultValue, _PhysicalConfigDedicated_antennaInfo, _PhysicalConfigDedicated_schedulingRequestConfig, PhysicalConfigDedicated, P_Max, _PRACH_ConfigSIB_rootSequenceIndex, _PRACH_ConfigSIB_prach_ConfigInfo, PRACH_ConfigSIB, _PRACH_Config_rootSequenceIndex, _PRACH_Config_prach_ConfigInfo, PRACH_Config, _PRACH_ConfigInfo_prach_ConfigIndex, _PRACH_ConfigInfo_highSpeedFlag, _PRACH_ConfigInfo_zeroCorrelationZoneConfig, _PRACH_ConfigInfo_prach_FreqOffset, PRACH_ConfigInfo, PresenceAntennaPort1, _PUCCH_ConfigCommon_deltaPUCCH_Shift, _PUCCH_ConfigCommon_nRB_CQI, _PUCCH_ConfigCommon_nCS_AN, _PUCCH_ConfigCommon_n1PUCCH_AN, PUCCH_ConfigCommon, __PUCCH_ConfigDedicated_ackNackRepetition_release, ___PUCCH_ConfigDedicated_ackNackRepetition_setup_repetitionFactor, ___PUCCH_ConfigDedicated_ackNackRepetition_setup_n1PUCCH_AN_Rep, __PUCCH_ConfigDedicated_ackNackRepetition_setup, _PUCCH_ConfigDedicated_ackNackRepetition, _PUCCH_ConfigDedicated_tdd_AckNackFeedbackMode, PUCCH_ConfigDedicated, __PUSCH_ConfigCommon_pusch_ConfigBasic_n_SB, __PUSCH_ConfigCommon_pusch_ConfigBasic_hoppingMode, __PUSCH_ConfigCommon_pusch_ConfigBasic_pusch_HoppingOffset, __PUSCH_ConfigCommon_pusch_ConfigBasic_enable64QAM, _PUSCH_ConfigCommon_pusch_ConfigBasic, _PUSCH_ConfigCommon_ul_ReferenceSignalsPUSCH, PUSCH_ConfigCommon, _PUSCH_ConfigDedicated_betaOffset_ACK_Index, _PUSCH_ConfigDedicated_betaOffset_RI_Index, _PUSCH_ConfigDedicated_betaOffset_CQI_Index, PUSCH_ConfigDedicated, _UL_ReferenceSignalsPUSCH_groupHoppingEnabled, _UL_ReferenceSignalsPUSCH_groupAssignmentPUSCH, _UL_ReferenceSignalsPUSCH_sequenceHoppingEnabled, _UL_ReferenceSignalsPUSCH_cyclicShift, UL_ReferenceSignalsPUSCH, __RACH_ConfigCommon_preambleInfo_numberOfRA_Preambles, ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_sizeOfRA_PreamblesGroupA, ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_messageSizeGroupA, ___RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig_messagePowerOffsetGroupB, __RACH_ConfigCommon_preambleInfo_preamblesGroupAConfig, _RACH_ConfigCommon_preambleInfo, __RACH_ConfigCommon_powerRampingParameters_powerRampingStep, __RACH_ConfigCommon_powerRampingParameters_preambleInitialReceivedTargetPower, _RACH_ConfigCommon_powerRampingParameters, __RACH_ConfigCommon_ra_SupervisionInfo_preambleTransMax, __RACH_ConfigCommon_ra_SupervisionInfo_ra_ResponseWindowSize, __RACH_ConfigCommon_ra_SupervisionInfo_mac_ContentionResolutionTimer, _RACH_ConfigCommon_ra_SupervisionInfo, _RACH_ConfigCommon_maxHARQ_Msg3Tx, RACH_ConfigCommon, _RACH_ConfigDedicated_ra_PreambleIndex, _RACH_ConfigDedicated_ra_PRACH_MaskIndex, RACH_ConfigDedicated, _RadioResourceConfigCommonSIB_rach_ConfigCommon, _RadioResourceConfigCommonSIB_bcch_Config, _RadioResourceConfigCommonSIB_pcch_Config, _RadioResourceConfigCommonSIB_prach_Config, _RadioResourceConfigCommonSIB_pdsch_ConfigCommon, _RadioResourceConfigCommonSIB_pusch_ConfigCommon, _RadioResourceConfigCommonSIB_pucch_ConfigCommon, _RadioResourceConfigCommonSIB_soundingRS_UL_ConfigCommon, _RadioResourceConfigCommonSIB_uplinkPowerControlCommon, _RadioResourceConfigCommonSIB_ul_CyclicPrefixLength, RadioResourceConfigCommonSIB, _RadioResourceConfigCommon_rach_ConfigCommon, _RadioResourceConfigCommon_prach_Config, _RadioResourceConfigCommon_pdsch_ConfigCommon, _RadioResourceConfigCommon_pusch_ConfigCommon, _RadioResourceConfigCommon_phich_Config, _RadioResourceConfigCommon_pucch_ConfigCommon, _RadioResourceConfigCommon_soundingRS_UL_ConfigCommon, _RadioResourceConfigCommon_uplinkPowerControlCommon, _RadioResourceConfigCommon_antennaInfoCommon, _RadioResourceConfigCommon_p_Max, _RadioResourceConfigCommon_tdd_Config, _RadioResourceConfigCommon_ul_CyclicPrefixLength, RadioResourceConfigCommon, _BCCH_Config_modificationPeriodCoeff, BCCH_Config, _PCCH_Config_defaultPagingCycle, _PCCH_Config_nB, PCCH_Config, UL_CyclicPrefixLength, _RadioResourceConfigDedicated_srb_ToAddModList, _RadioResourceConfigDedicated_drb_ToAddModList, _RadioResourceConfigDedicated_drb_ToReleaseList, __RadioResourceConfigDedicated_mac_MainConfig_explicitValue, __RadioResourceConfigDedicated_mac_MainConfig_defaultValue, _RadioResourceConfigDedicated_mac_MainConfig, _RadioResourceConfigDedicated_sps_Config, _RadioResourceConfigDedicated_physicalConfigDedicated, RadioResourceConfigDedicated, _SRB_ToAddModList__item_, SRB_ToAddModList, _SRB_ToAddMod_srb_Identity, __SRB_ToAddMod_rlc_Config_explicitValue, __SRB_ToAddMod_rlc_Config_defaultValue, _SRB_ToAddMod_rlc_Config, __SRB_ToAddMod_logicalChannelConfig_explicitValue, __SRB_ToAddMod_logicalChannelConfig_defaultValue, _SRB_ToAddMod_logicalChannelConfig, SRB_ToAddMod, _DRB_ToAddModList__item_, DRB_ToAddModList, _DRB_ToAddMod_eps_BearerIdentity, _DRB_ToAddMod_drb_Identity, _DRB_ToAddMod_pdcp_Config, _DRB_ToAddMod_rlc_Config, _DRB_ToAddMod_logicalChannelIdentity, _DRB_ToAddMod_logicalChannelConfig, DRB_ToAddMod, _DRB_ToReleaseList__item_, DRB_ToReleaseList, __RLC_Config_am_ul_AM_RLC, __RLC_Config_am_dl_AM_RLC, _RLC_Config_am, __RLC_Config_um_Bi_Directional_ul_UM_RLC, __RLC_Config_um_Bi_Directional_dl_UM_RLC, _RLC_Config_um_Bi_Directional, __RLC_Config_um_Uni_Directional_UL_ul_UM_RLC, _RLC_Config_um_Uni_Directional_UL, __RLC_Config_um_Uni_Directional_DL_dl_UM_RLC, _RLC_Config_um_Uni_Directional_DL, RLC_Config, _UL_AM_RLC_t_PollRetransmit, _UL_AM_RLC_pollPDU, _UL_AM_RLC_pollByte, _UL_AM_RLC_maxRetxThreshold, UL_AM_RLC, _DL_AM_RLC_t_Reordering, _DL_AM_RLC_t_StatusProhibit, DL_AM_RLC, _UL_UM_RLC_sn_FieldLength, UL_UM_RLC, _DL_UM_RLC_sn_FieldLength, _DL_UM_RLC_t_Reordering, DL_UM_RLC, SN_FieldLength, T_PollRetransmit, PollPDU, PollByte, T_Reordering, T_StatusProhibit, _SchedulingRequestConfig_release, __SchedulingRequestConfig_setup_sr_PUCCH_ResourceIndex, __SchedulingRequestConfig_setup_sr_ConfigIndex, __SchedulingRequestConfig_setup_dsr_TransMax, _SchedulingRequestConfig_setup, SchedulingRequestConfig, _SoundingRS_UL_ConfigCommon_release, __SoundingRS_UL_ConfigCommon_setup_srs_BandwidthConfig, __SoundingRS_UL_ConfigCommon_setup_srs_SubframeConfig, __SoundingRS_UL_ConfigCommon_setup_ackNackSRS_SimultaneousTransmission, __SoundingRS_UL_ConfigCommon_setup_srs_MaxUpPts, _SoundingRS_UL_ConfigCommon_setup, SoundingRS_UL_ConfigCommon, _SoundingRS_UL_ConfigDedicated_release, __SoundingRS_UL_ConfigDedicated_setup_srs_Bandwidth, __SoundingRS_UL_ConfigDedicated_setup_srs_HoppingBandwidth, __SoundingRS_UL_ConfigDedicated_setup_freqDomainPosition, __SoundingRS_UL_ConfigDedicated_setup_duration, __SoundingRS_UL_ConfigDedicated_setup_srs_ConfigIndex, __SoundingRS_UL_ConfigDedicated_setup_transmissionComb, __SoundingRS_UL_ConfigDedicated_setup_cyclicShift, _SoundingRS_UL_ConfigDedicated_setup, SoundingRS_UL_ConfigDedicated, _SPS_Config_semiPersistSchedC_RNTI, _SPS_Config_sps_ConfigDL, _SPS_Config_sps_ConfigUL, SPS_Config, _SPS_ConfigDL_release, __SPS_ConfigDL_setup_semiPersistSchedIntervalDL, __SPS_ConfigDL_setup_numberOfConfSPS_Processes, __SPS_ConfigDL_setup_n1_PUCCH_AN_PersistentList, _SPS_ConfigDL_setup, SPS_ConfigDL, _SPS_ConfigUL_release, __SPS_ConfigUL_setup_semiPersistSchedIntervalUL, __SPS_ConfigUL_setup_implicitReleaseAfter, ___SPS_ConfigUL_setup_p0_Persistent_p0_NominalPUSCH_Persistent, ___SPS_ConfigUL_setup_p0_Persistent_p0_UE_PUSCH_Persistent, __SPS_ConfigUL_setup_p0_Persistent, __SPS_ConfigUL_setup_twoIntervalsConfig, _SPS_ConfigUL_setup, SPS_ConfigUL, _N1_PUCCH_AN_PersistentList__item_, N1_PUCCH_AN_PersistentList, _TDD_Config_subframeAssignment, _TDD_Config_specialSubframePatterns, TDD_Config, TimeAlignmentTimer, _TPC_PDCCH_Config_release, __TPC_PDCCH_Config_setup_tpc_RNTI, __TPC_PDCCH_Config_setup_tpc_Index, _TPC_PDCCH_Config_setup, TPC_PDCCH_Config, _TPC_Index_indexOfFormat3, _TPC_Index_indexOfFormat3A, TPC_Index, _UplinkPowerControlCommon_p0_NominalPUSCH, _UplinkPowerControlCommon_alpha, _UplinkPowerControlCommon_p0_NominalPUCCH, _UplinkPowerControlCommon_deltaFList_PUCCH, _UplinkPowerControlCommon_deltaPreambleMsg3, UplinkPowerControlCommon, _UplinkPowerControlDedicated_p0_UE_PUSCH, _UplinkPowerControlDedicated_deltaMCS_Enabled, _UplinkPowerControlDedicated_accumulationEnabled, _UplinkPowerControlDedicated_p0_UE_PUCCH, _UplinkPowerControlDedicated_pSRS_Offset, _UplinkPowerControlDedicated_filterCoefficient, UplinkPowerControlDedicated, _DeltaFList_PUCCH_deltaF_PUCCH_Format1, _DeltaFList_PUCCH_deltaF_PUCCH_Format1b, _DeltaFList_PUCCH_deltaF_PUCCH_Format2, _DeltaFList_PUCCH_deltaF_PUCCH_Format2a, _DeltaFList_PUCCH_deltaF_PUCCH_Format2b, DeltaFList_PUCCH, NextHopChainingCount, _SecurityAlgorithmConfig_cipheringAlgorithm, _SecurityAlgorithmConfig_integrityProtAlgorithm, SecurityAlgorithmConfig, ShortMAC_I, AdditionalSpectrumEmission, ARFCN_ValueCDMA2000, ARFCN_ValueEUTRA, ARFCN_ValueGERAN, ARFCN_ValueUTRA, BandclassCDMA2000, BandIndicatorGERAN, _CarrierFreqCDMA2000_bandClass, _CarrierFreqCDMA2000_arfcn, CarrierFreqCDMA2000, _CarrierFreqGERAN_arfcn, _CarrierFreqGERAN_bandIndicator, CarrierFreqGERAN, _CarrierFreqsGERAN_startingARFCN, _CarrierFreqsGERAN_bandIndicator, __CarrierFreqsGERAN_followingARFCNs_explicitListOfARFCNs, ___CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs_arfcn_Spacing, ___CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs_numberOfFollowingARFCNs, __CarrierFreqsGERAN_followingARFCNs_equallySpacedARFCNs, __CarrierFreqsGERAN_followingARFCNs_variableBitMapOfARFCNs, _CarrierFreqsGERAN_followingARFCNs, CarrierFreqsGERAN, _ExplicitListOfARFCNs__item_, ExplicitListOfARFCNs, CDMA2000_Type, CellIdentity, _CellIndexList__item_, CellIndexList, CellIndex, CellReselectionPriority, _CSFB_RegistrationParam1XRTT_sid, _CSFB_RegistrationParam1XRTT_nid, _CSFB_RegistrationParam1XRTT_multipleSID, _CSFB_RegistrationParam1XRTT_multipleNID, _CSFB_RegistrationParam1XRTT_homeReg, _CSFB_RegistrationParam1XRTT_foreignSIDReg, _CSFB_RegistrationParam1XRTT_foreignNIDReg, _CSFB_RegistrationParam1XRTT_parameterReg, _CSFB_RegistrationParam1XRTT_powerUpReg, _CSFB_RegistrationParam1XRTT_registrationPeriod, _CSFB_RegistrationParam1XRTT_registrationZone, _CSFB_RegistrationParam1XRTT_totalZone, _CSFB_RegistrationParam1XRTT_zoneTimer, CSFB_RegistrationParam1XRTT, _CellGlobalIdEUTRA_plmn_Identity, _CellGlobalIdEUTRA_cellIdentity, CellGlobalIdEUTRA, _CellGlobalIdUTRA_plmn_Identity, _CellGlobalIdUTRA_cellIdentity, CellGlobalIdUTRA, _CellGlobalIdGERAN_plmn_Identity, _CellGlobalIdGERAN_locationAreaCode, _CellGlobalIdGERAN_cellIdentity, CellGlobalIdGERAN, _CellGlobalIdCDMA2000_cellGlobalId1XRTT, _CellGlobalIdCDMA2000_cellGlobalIdHRPD, CellGlobalIdCDMA2000, _MobilityControlInfo_targetPhysCellId, _MobilityControlInfo_carrierFreq, _MobilityControlInfo_carrierBandwidth, _MobilityControlInfo_additionalSpectrumEmission, _MobilityControlInfo_t304, _MobilityControlInfo_newUE_Identity, _MobilityControlInfo_radioResourceConfigCommon, _MobilityControlInfo_rach_ConfigDedicated, MobilityControlInfo, _CarrierBandwidthEUTRA_dl_Bandwidth, _CarrierBandwidthEUTRA_ul_Bandwidth, CarrierBandwidthEUTRA, _CarrierFreqEUTRA_dl_CarrierFreq, _CarrierFreqEUTRA_ul_CarrierFreq, CarrierFreqEUTRA, MobilityParametersCDMA2000, _MobilityStateParameters_t_Evaluation, _MobilityStateParameters_t_HystNormal, _MobilityStateParameters_n_CellChangeMedium, _MobilityStateParameters_n_CellChangeHigh, MobilityStateParameters, PhysCellId, _PhysCellIdRange_start, _PhysCellIdRange_range, PhysCellIdRange, PhysCellIdCDMA2000, _PhysCellIdGERAN_networkColourCode, _PhysCellIdGERAN_baseStationColourCode, PhysCellIdGERAN, PhysCellIdUTRA_FDD, PhysCellIdUTRA_TDD, _PLMN_Identity_mcc, _PLMN_Identity_mnc, PLMN_Identity, _MCC__item_, MCC, _MNC__item_, MNC, MCC_MNC_Digit, _PreRegistrationInfoHRPD_preRegistrationAllowed, _PreRegistrationInfoHRPD_preRegistrationZoneId, _PreRegistrationInfoHRPD_secondaryPreRegistrationZoneIdList, PreRegistrationInfoHRPD, _SecondaryPreRegistrationZoneIdListHRPD__item_, SecondaryPreRegistrationZoneIdListHRPD, PreRegistrationZoneIdHRPD, Q_RxLevMin, Q_OffsetRange, Q_OffsetRangeInterRAT, ReselectionThreshold, _SpeedStateScaleFactors_sf_Medium, _SpeedStateScaleFactors_sf_High, SpeedStateScaleFactors, _SystemTimeInfoCDMA2000_cdma_EUTRA_Synchronisation, __SystemTimeInfoCDMA2000_cdma_SystemTime_synchronousSystemTime, __SystemTimeInfoCDMA2000_cdma_SystemTime_asynchronousSystemTime, _SystemTimeInfoCDMA2000_cdma_SystemTime, SystemTimeInfoCDMA2000, TrackingAreaCode, T_Reselection, AllowedMeasBandwidth, Hysteresis, _MeasConfig_measObjectToRemoveList, _MeasConfig_measObjectToAddModList, _MeasConfig_reportConfigToRemoveList, _MeasConfig_reportConfigToAddModList, _MeasConfig_measIdToRemoveList, _MeasConfig_measIdToAddModList, _MeasConfig_quantityConfig, _MeasConfig_measGapConfig, _MeasConfig_s_Measure, _MeasConfig_preRegistrationInfoHRPD, __MeasConfig_speedStatePars_release, ___MeasConfig_speedStatePars_setup_mobilityStateParameters, ___MeasConfig_speedStatePars_setup_timeToTrigger_SF, __MeasConfig_speedStatePars_setup, _MeasConfig_speedStatePars, MeasConfig, _MeasIdToRemoveList__item_, MeasIdToRemoveList, _MeasObjectToRemoveList__item_, MeasObjectToRemoveList, _ReportConfigToRemoveList__item_, ReportConfigToRemoveList, _MeasGapConfig_release, ___MeasGapConfig_setup_gapOffset_gp0, ___MeasGapConfig_setup_gapOffset_gp1, __MeasGapConfig_setup_gapOffset, _MeasGapConfig_setup, MeasGapConfig, MeasId, _MeasIdToAddModList__item_, MeasIdToAddModList, _MeasIdToAddMod_measId, _MeasIdToAddMod_measObjectId, _MeasIdToAddMod_reportConfigId, MeasIdToAddMod, _MeasObjectCDMA2000_cdma2000_Type, _MeasObjectCDMA2000_carrierFreq, _MeasObjectCDMA2000_searchWindowSize, _MeasObjectCDMA2000_offsetFreq, _MeasObjectCDMA2000_cellsToRemoveList, _MeasObjectCDMA2000_cellsToAddModList, _MeasObjectCDMA2000_cellForWhichToReportCGI, MeasObjectCDMA2000, _CellsToAddModListCDMA2000__item_, CellsToAddModListCDMA2000, _CellsToAddModCDMA2000_cellIndex, _CellsToAddModCDMA2000_physCellId, CellsToAddModCDMA2000, _MeasObjectEUTRA_carrierFreq, _MeasObjectEUTRA_allowedMeasBandwidth, _MeasObjectEUTRA_presenceAntennaPort1, _MeasObjectEUTRA_neighCellConfig, _MeasObjectEUTRA_offsetFreq, _MeasObjectEUTRA_cellsToRemoveList, _MeasObjectEUTRA_cellsToAddModList, _MeasObjectEUTRA_blackCellsToRemoveList, _MeasObjectEUTRA_blackCellsToAddModList, _MeasObjectEUTRA_cellForWhichToReportCGI, MeasObjectEUTRA, _CellsToAddModList__item_, CellsToAddModList, _CellsToAddMod_cellIndex, _CellsToAddMod_physCellId, _CellsToAddMod_cellIndividualOffset, CellsToAddMod, _BlackCellsToAddModList__item_, BlackCellsToAddModList, _BlackCellsToAddMod_cellIndex, _BlackCellsToAddMod_physCellIdRange, BlackCellsToAddMod, _MeasObjectGERAN_carrierFreqs, _MeasObjectGERAN_offsetFreq, _MeasObjectGERAN_ncc_Permitted, _MeasObjectGERAN_cellForWhichToReportCGI, MeasObjectGERAN, MeasObjectId, _MeasObjectToAddModList__item_, MeasObjectToAddModList, _MeasObjectToAddMod_measObjectId, __MeasObjectToAddMod_measObject_measObjectEUTRA, __MeasObjectToAddMod_measObject_measObjectUTRA, __MeasObjectToAddMod_measObject_measObjectGERAN, __MeasObjectToAddMod_measObject_measObjectCDMA2000, _MeasObjectToAddMod_measObject, MeasObjectToAddMod, _MeasObjectUTRA_carrierFreq, _MeasObjectUTRA_offsetFreq, _MeasObjectUTRA_cellsToRemoveList, __MeasObjectUTRA_cellsToAddModList_cellsToAddModListUTRA_FDD, __MeasObjectUTRA_cellsToAddModList_cellsToAddModListUTRA_TDD, _MeasObjectUTRA_cellsToAddModList, __MeasObjectUTRA_cellForWhichToReportCGI_utra_FDD, __MeasObjectUTRA_cellForWhichToReportCGI_utra_TDD, _MeasObjectUTRA_cellForWhichToReportCGI, MeasObjectUTRA, _CellsToAddModListUTRA_FDD__item_, CellsToAddModListUTRA_FDD, _CellsToAddModUTRA_FDD_cellIndex, _CellsToAddModUTRA_FDD_physCellId, CellsToAddModUTRA_FDD, _CellsToAddModListUTRA_TDD__item_, CellsToAddModListUTRA_TDD, _CellsToAddModUTRA_TDD_cellIndex, _CellsToAddModUTRA_TDD_physCellId, CellsToAddModUTRA_TDD, _MeasResults_measId, __MeasResults_measResultServCell_rsrpResult, __MeasResults_measResultServCell_rsrqResult, _MeasResults_measResultServCell, __MeasResults_measResultNeighCells_measResultListEUTRA, __MeasResults_measResultNeighCells_measResultListUTRA, __MeasResults_measResultNeighCells_measResultListGERAN, __MeasResults_measResultNeighCells_measResultsCDMA2000, _MeasResults_measResultNeighCells, MeasResults, _MeasResultListEUTRA__item_, MeasResultListEUTRA, _MeasResultEUTRA_physCellId, __MeasResultEUTRA_cgi_Info_cellGlobalId, __MeasResultEUTRA_cgi_Info_trackingAreaCode, __MeasResultEUTRA_cgi_Info_plmn_IdentityList, _MeasResultEUTRA_cgi_Info, __MeasResultEUTRA_measResult_rsrpResult, __MeasResultEUTRA_measResult_rsrqResult, _MeasResultEUTRA_measResult, MeasResultEUTRA, _MeasResultListUTRA__item_, MeasResultListUTRA, __MeasResultUTRA_physCellId_fdd, __MeasResultUTRA_physCellId_tdd, _MeasResultUTRA_physCellId, __MeasResultUTRA_cgi_Info_cellGlobalId, __MeasResultUTRA_cgi_Info_locationAreaCode, __MeasResultUTRA_cgi_Info_routingAreaCode, __MeasResultUTRA_cgi_Info_plmn_IdentityList, _MeasResultUTRA_cgi_Info, __MeasResultUTRA_measResult_utra_RSCP, __MeasResultUTRA_measResult_utra_EcN0, _MeasResultUTRA_measResult, MeasResultUTRA, _MeasResultListGERAN__item_, MeasResultListGERAN, _MeasResultGERAN_carrierFreq, _MeasResultGERAN_physCellId, __MeasResultGERAN_cgi_Info_cellGlobalId, __MeasResultGERAN_cgi_Info_routingAreaCode, _MeasResultGERAN_cgi_Info, __MeasResultGERAN_measResult_rssi, _MeasResultGERAN_measResult, MeasResultGERAN, _MeasResultsCDMA2000_preRegistrationStatusHRPD, _MeasResultsCDMA2000_measResultListCDMA2000, MeasResultsCDMA2000, _MeasResultListCDMA2000__item_, MeasResultListCDMA2000, _MeasResultCDMA2000_physCellId, _MeasResultCDMA2000_cgi_Info, __MeasResultCDMA2000_measResult_pilotPnPhase, __MeasResultCDMA2000_measResult_pilotStrength, _MeasResultCDMA2000_measResult, MeasResultCDMA2000, _PLMN_IdentityList2__item_, PLMN_IdentityList2, _QuantityConfig_quantityConfigEUTRA, _QuantityConfig_quantityConfigUTRA, _QuantityConfig_quantityConfigGERAN, _QuantityConfig_quantityConfigCDMA2000, QuantityConfig, _QuantityConfigEUTRA_filterCoefficientRSRP, _QuantityConfigEUTRA_filterCoefficientRSRQ, QuantityConfigEUTRA, _QuantityConfigUTRA_measQuantityUTRA_FDD, _QuantityConfigUTRA_measQuantityUTRA_TDD, _QuantityConfigUTRA_filterCoefficient, QuantityConfigUTRA, _QuantityConfigGERAN_measQuantityGERAN, _QuantityConfigGERAN_filterCoefficient, QuantityConfigGERAN, _QuantityConfigCDMA2000_measQuantityCDMA2000, QuantityConfigCDMA2000, _____ReportConfigEUTRA_triggerType_event_eventId_eventA1_a1_Threshold, ____ReportConfigEUTRA_triggerType_event_eventId_eventA1, _____ReportConfigEUTRA_triggerType_event_eventId_eventA2_a2_Threshold, ____ReportConfigEUTRA_triggerType_event_eventId_eventA2, _____ReportConfigEUTRA_triggerType_event_eventId_eventA3_a3_Offset, _____ReportConfigEUTRA_triggerType_event_eventId_eventA3_reportOnLeave, ____ReportConfigEUTRA_triggerType_event_eventId_eventA3, _____ReportConfigEUTRA_triggerType_event_eventId_eventA4_a4_Threshold, ____ReportConfigEUTRA_triggerType_event_eventId_eventA4, _____ReportConfigEUTRA_triggerType_event_eventId_eventA5_a5_Threshold1, _____ReportConfigEUTRA_triggerType_event_eventId_eventA5_a5_Threshold2, ____ReportConfigEUTRA_triggerType_event_eventId_eventA5, ___ReportConfigEUTRA_triggerType_event_eventId, ___ReportConfigEUTRA_triggerType_event_hysteresis, ___ReportConfigEUTRA_triggerType_event_timeToTrigger, __ReportConfigEUTRA_triggerType_event, ___ReportConfigEUTRA_triggerType_periodical_purpose, __ReportConfigEUTRA_triggerType_periodical, _ReportConfigEUTRA_triggerType, _ReportConfigEUTRA_triggerQuantity, _ReportConfigEUTRA_reportQuantity, _ReportConfigEUTRA_maxReportCells, _ReportConfigEUTRA_reportInterval, _ReportConfigEUTRA_reportAmount, ReportConfigEUTRA, _ThresholdEUTRA_threshold_RSRP, _ThresholdEUTRA_threshold_RSRQ, ThresholdEUTRA, ReportConfigId, ______ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold_b1_ThresholdUTRA, ______ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold_b1_ThresholdGERAN, ______ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold_b1_ThresholdCDMA2000, _____ReportConfigInterRAT_triggerType_event_eventId_eventB1_b1_Threshold, ____ReportConfigInterRAT_triggerType_event_eventId_eventB1, _____ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold1, ______ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2_b2_Threshold2UTRA, ______ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2_b2_Threshold2GERAN, ______ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2_b2_Threshold2CDMA2000, _____ReportConfigInterRAT_triggerType_event_eventId_eventB2_b2_Threshold2, ____ReportConfigInterRAT_triggerType_event_eventId_eventB2, ___ReportConfigInterRAT_triggerType_event_eventId, ___ReportConfigInterRAT_triggerType_event_hysteresis, ___ReportConfigInterRAT_triggerType_event_timeToTrigger, __ReportConfigInterRAT_triggerType_event, ___ReportConfigInterRAT_triggerType_periodical_purpose, __ReportConfigInterRAT_triggerType_periodical, _ReportConfigInterRAT_triggerType, _ReportConfigInterRAT_maxReportCells, _ReportConfigInterRAT_reportInterval, _ReportConfigInterRAT_reportAmount, ReportConfigInterRAT, _ThresholdUTRA_utra_RSCP, _ThresholdUTRA_utra_EcN0, ThresholdUTRA, ThresholdGERAN, ThresholdCDMA2000, _ReportConfigToAddModList__item_, ReportConfigToAddModList, _ReportConfigToAddMod_reportConfigId, __ReportConfigToAddMod_reportConfig_reportConfigEUTRA, __ReportConfigToAddMod_reportConfig_reportConfigInterRAT, _ReportConfigToAddMod_reportConfig, ReportConfigToAddMod, ReportInterval, RSRP_Range, RSRQ_Range, TimeToTrigger, C_RNTI, DedicatedInfoCDMA2000, DedicatedInfoNAS, FilterCoefficient, MMEC, NeighCellConfig, RAND_CDMA2000, RAT_Type, RRC_TransactionIdentifier, _S_TMSI_mmec, _S_TMSI_m_TMSI, S_TMSI, _UE_CapabilityRAT_ContainerList__item_, UE_CapabilityRAT_ContainerList, _UE_CapabilityRAT_Container_rat_Type, _UE_CapabilityRAT_Container_ueCapabilityRAT_Container, UE_CapabilityRAT_Container, _UE_EUTRA_Capability_accessStratumRelease, _UE_EUTRA_Capability_ue_Category, _UE_EUTRA_Capability_pdcp_Parameters, _UE_EUTRA_Capability_phyLayerParameters, _UE_EUTRA_Capability_rf_Parameters, _UE_EUTRA_Capability_measParameters, _UE_EUTRA_Capability_featureGroupIndicators, __UE_EUTRA_Capability_interRAT_Parameters_utraFDD, __UE_EUTRA_Capability_interRAT_Parameters_utraTDD128, __UE_EUTRA_Capability_interRAT_Parameters_utraTDD384, __UE_EUTRA_Capability_interRAT_Parameters_utraTDD768, __UE_EUTRA_Capability_interRAT_Parameters_geran, __UE_EUTRA_Capability_interRAT_Parameters_cdma2000_HRPD, __UE_EUTRA_Capability_interRAT_Parameters_cdma2000_1xRTT, _UE_EUTRA_Capability_interRAT_Parameters, _UE_EUTRA_Capability_nonCriticalExtension, UE_EUTRA_Capability, AccessStratumRelease, __PDCP_Parameters_supportedROHC_Profiles_profile0x0001, __PDCP_Parameters_supportedROHC_Profiles_profile0x0002, __PDCP_Parameters_supportedROHC_Profiles_profile0x0003, __PDCP_Parameters_supportedROHC_Profiles_profile0x0004, __PDCP_Parameters_supportedROHC_Profiles_profile0x0006, __PDCP_Parameters_supportedROHC_Profiles_profile0x0101, __PDCP_Parameters_supportedROHC_Profiles_profile0x0102, __PDCP_Parameters_supportedROHC_Profiles_profile0x0103, __PDCP_Parameters_supportedROHC_Profiles_profile0x0104, _PDCP_Parameters_supportedROHC_Profiles, _PDCP_Parameters_maxNumberROHC_ContextSessions, PDCP_Parameters, _PhyLayerParameters_ue_TxAntennaSelectionSupported, _PhyLayerParameters_ue_SpecificRefSigsSupported, PhyLayerParameters, _RF_Parameters_supportedBandListEUTRA, RF_Parameters, _SupportedBandListEUTRA__item_, SupportedBandListEUTRA, _SupportedBandEUTRA_bandEUTRA, _SupportedBandEUTRA_halfDuplex, SupportedBandEUTRA, _MeasParameters_bandListEUTRA, MeasParameters, _BandListEUTRA__item_, BandListEUTRA, _BandInfoEUTRA_interFreqBandList, _BandInfoEUTRA_interRAT_BandList, BandInfoEUTRA, _InterFreqBandList__item_, InterFreqBandList, _InterFreqBandInfo_interFreqNeedForGaps, InterFreqBandInfo, _InterRAT_BandList__item_, InterRAT_BandList, _InterRAT_BandInfo_interRAT_NeedForGaps, InterRAT_BandInfo, _IRAT_ParametersUTRA_FDD_supportedBandListUTRA_FDD, IRAT_ParametersUTRA_FDD, _SupportedBandListUTRA_FDD__item_, SupportedBandListUTRA_FDD, SupportedBandUTRA_FDD, _IRAT_ParametersUTRA_TDD128_supportedBandListUTRA_TDD128, IRAT_ParametersUTRA_TDD128, _SupportedBandListUTRA_TDD128__item_, SupportedBandListUTRA_TDD128, SupportedBandUTRA_TDD128, _IRAT_ParametersUTRA_TDD384_supportedBandListUTRA_TDD384, IRAT_ParametersUTRA_TDD384, _SupportedBandListUTRA_TDD384__item_, SupportedBandListUTRA_TDD384, SupportedBandUTRA_TDD384, _IRAT_ParametersUTRA_TDD768_supportedBandListUTRA_TDD768, IRAT_ParametersUTRA_TDD768, _SupportedBandListUTRA_TDD768__item_, SupportedBandListUTRA_TDD768, SupportedBandUTRA_TDD768, _IRAT_ParametersGERAN_supportedBandListGERAN, _IRAT_ParametersGERAN_interRAT_PS_HO_ToGERAN, IRAT_ParametersGERAN, _SupportedBandListGERAN__item_, SupportedBandListGERAN, SupportedBandGERAN, _IRAT_ParametersCDMA2000_HRPD_supportedBandListHRPD, _IRAT_ParametersCDMA2000_HRPD_tx_ConfigHRPD, _IRAT_ParametersCDMA2000_HRPD_rx_ConfigHRPD, IRAT_ParametersCDMA2000_HRPD, _SupportedBandListHRPD__item_, SupportedBandListHRPD, _IRAT_ParametersCDMA2000_1XRTT_supportedBandList1XRTT, _IRAT_ParametersCDMA2000_1XRTT_tx_Config1XRTT, _IRAT_ParametersCDMA2000_1XRTT_rx_Config1XRTT, IRAT_ParametersCDMA2000_1XRTT, _SupportedBandList1XRTT__item_, SupportedBandList1XRTT, _UE_TimersAndConstants_t300, _UE_TimersAndConstants_t301, _UE_TimersAndConstants_t310, _UE_TimersAndConstants_n310, _UE_TimersAndConstants_t311, _UE_TimersAndConstants_n311, UE_TimersAndConstants, maxBands, maxCDMA_BandClass, maxCellBlack, maxCellInter, maxCellIntra, maxCellMeas, maxCellReport, maxDRB, maxEARFCN, maxFreq, maxGERAN_SI, maxGNFG, maxMBSFN_Allocations, maxMCS_1, maxMeasId, maxObjectId, maxPageRec, maxPNOffset, maxRAT_Capabilities, maxReportConfigId, maxSIB, maxSIB_1, maxSI_Message, maxUTRA_FDD_Carrier, maxUTRA_TDD_Carrier, ] class EUTRA_UE_Variables: _name_ = 'EUTRA-UE-Variables' _oid_ = [] _obj_ = [ 'VarMeasConfig', 'VarMeasReportList', 'VarMeasReport', 'CellsTriggeredList', 'VarShortMAC-Input', ] _type_ = [ 'VarMeasConfig', 'VarMeasReportList', 'VarMeasReport', 'CellsTriggeredList', 'VarShortMAC-Input', ] _set_ = [ ] _val_ = [ ] _class_ = [ ] _param_ = [ ] #-----< VarMeasConfig >-----# VarMeasConfig = SEQ(name='VarMeasConfig', mode=MODE_TYPE) _VarMeasConfig_measIdList = SEQ_OF(name='measIdList', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasIdToAddModList')), opt=True) _VarMeasConfig_measObjectList = SEQ_OF(name='measObjectList', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasObjectToAddModList')), opt=True) _VarMeasConfig_reportConfigList = SEQ_OF(name='reportConfigList', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ReportConfigToAddModList')), opt=True) _VarMeasConfig_quantityConfig = SEQ(name='quantityConfig', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'QuantityConfig')), opt=True) _VarMeasConfig_s_Measure = INT(name='s-Measure', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RSRP-Range')), opt=True) _VarMeasConfig_speedStatePars = CHOICE(name='speedStatePars', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_EXPLICIT), opt=True) __VarMeasConfig_speedStatePars_release = NULL(name='release', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __VarMeasConfig_speedStatePars_setup = SEQ(name='setup', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___VarMeasConfig_speedStatePars_setup_mobilityStateParameters = SEQ(name='mobilityStateParameters', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MobilityStateParameters'))) ___VarMeasConfig_speedStatePars_setup_timeToTrigger_SF = SEQ(name='timeToTrigger-SF', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SpeedStateScaleFactors'))) __VarMeasConfig_speedStatePars_setup._cont = ASN1Dict([ ('mobilityStateParameters', ___VarMeasConfig_speedStatePars_setup_mobilityStateParameters), ('timeToTrigger-SF', ___VarMeasConfig_speedStatePars_setup_timeToTrigger_SF), ]) __VarMeasConfig_speedStatePars_setup._ext = None _VarMeasConfig_speedStatePars._cont = ASN1Dict([ ('release', __VarMeasConfig_speedStatePars_release), ('setup', __VarMeasConfig_speedStatePars_setup), ]) _VarMeasConfig_speedStatePars._ext = None VarMeasConfig._cont = ASN1Dict([ ('measIdList', _VarMeasConfig_measIdList), ('measObjectList', _VarMeasConfig_measObjectList), ('reportConfigList', _VarMeasConfig_reportConfigList), ('quantityConfig', _VarMeasConfig_quantityConfig), ('s-Measure', _VarMeasConfig_s_Measure), ('speedStatePars', _VarMeasConfig_speedStatePars), ]) VarMeasConfig._ext = None #-----< VarMeasReportList >-----# VarMeasReportList = SEQ_OF(name='VarMeasReportList', mode=MODE_TYPE) _VarMeasReportList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-UE-Variables', 'VarMeasReport'))) VarMeasReportList._cont = _VarMeasReportList__item_ VarMeasReportList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< VarMeasReport >-----# VarMeasReport = SEQ(name='VarMeasReport', mode=MODE_TYPE) _VarMeasReport_measId = INT(name='measId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasId'))) _VarMeasReport_cellsTriggeredList = SEQ_OF(name='cellsTriggeredList', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-UE-Variables', 'CellsTriggeredList')), opt=True) _VarMeasReport_numberOfReportsSent = INT(name='numberOfReportsSent', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) VarMeasReport._cont = ASN1Dict([ ('measId', _VarMeasReport_measId), ('cellsTriggeredList', _VarMeasReport_cellsTriggeredList), ('numberOfReportsSent', _VarMeasReport_numberOfReportsSent), ]) VarMeasReport._ext = None #-----< CellsTriggeredList >-----# CellsTriggeredList = SEQ_OF(name='CellsTriggeredList', mode=MODE_TYPE) _CellsTriggeredList__item_ = INT(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellId'))) CellsTriggeredList._cont = _CellsTriggeredList__item_ CellsTriggeredList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< VarShortMAC-Input >-----# VarShortMAC_Input = SEQ(name='VarShortMAC-Input', mode=MODE_TYPE) _VarShortMAC_Input_cellIdentity = BIT_STR(name='cellIdentity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellIdentity'))) _VarShortMAC_Input_physCellId = INT(name='physCellId', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellId'))) _VarShortMAC_Input_c_RNTI = BIT_STR(name='c-RNTI', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'C-RNTI'))) VarShortMAC_Input._cont = ASN1Dict([ ('cellIdentity', _VarShortMAC_Input_cellIdentity), ('physCellId', _VarShortMAC_Input_physCellId), ('c-RNTI', _VarShortMAC_Input_c_RNTI), ]) VarShortMAC_Input._ext = None _all_ = [ _VarMeasConfig_measIdList, _VarMeasConfig_measObjectList, _VarMeasConfig_reportConfigList, _VarMeasConfig_quantityConfig, _VarMeasConfig_s_Measure, __VarMeasConfig_speedStatePars_release, ___VarMeasConfig_speedStatePars_setup_mobilityStateParameters, ___VarMeasConfig_speedStatePars_setup_timeToTrigger_SF, __VarMeasConfig_speedStatePars_setup, _VarMeasConfig_speedStatePars, VarMeasConfig, _VarMeasReportList__item_, VarMeasReportList, _VarMeasReport_measId, _VarMeasReport_cellsTriggeredList, _VarMeasReport_numberOfReportsSent, VarMeasReport, _CellsTriggeredList__item_, CellsTriggeredList, _VarShortMAC_Input_cellIdentity, _VarShortMAC_Input_physCellId, _VarShortMAC_Input_c_RNTI, VarShortMAC_Input, ] class EUTRA_InterNodeDefinitions: _name_ = 'EUTRA-InterNodeDefinitions' _oid_ = [] _obj_ = [ 'HandoverCommand', 'HandoverCommand-r8-IEs', 'HandoverPreparationInformation', 'HandoverPreparationInformation-r8-IEs', 'UERadioAccessCapabilityInformation', 'UERadioAccessCapabilityInformation-r8-IEs', 'AS-Config', 'AS-Context', 'ReestablishmentInfo', 'AdditionalReestabInfoList', 'AdditionalReestabInfo', 'Key-eNodeB-Star', 'RRM-Config', 'maxReestabInfo', ] _type_ = [ 'HandoverCommand', 'HandoverCommand-r8-IEs', 'HandoverPreparationInformation', 'HandoverPreparationInformation-r8-IEs', 'UERadioAccessCapabilityInformation', 'UERadioAccessCapabilityInformation-r8-IEs', 'AS-Config', 'AS-Context', 'ReestablishmentInfo', 'AdditionalReestabInfoList', 'AdditionalReestabInfo', 'Key-eNodeB-Star', 'RRM-Config', ] _set_ = [ ] _val_ = [ 'maxReestabInfo', ] _class_ = [ ] _param_ = [ ] #-----< HandoverCommand >-----# HandoverCommand = SEQ(name='HandoverCommand', mode=MODE_TYPE) _HandoverCommand_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __HandoverCommand_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___HandoverCommand_criticalExtensions_c1_handoverCommand_r8 = SEQ(name='handoverCommand-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-InterNodeDefinitions', 'HandoverCommand-r8-IEs'))) ___HandoverCommand_criticalExtensions_c1_spare7 = NULL(name='spare7', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverCommand_criticalExtensions_c1_spare6 = NULL(name='spare6', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverCommand_criticalExtensions_c1_spare5 = NULL(name='spare5', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverCommand_criticalExtensions_c1_spare4 = NULL(name='spare4', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverCommand_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverCommand_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverCommand_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __HandoverCommand_criticalExtensions_c1._cont = ASN1Dict([ ('handoverCommand-r8', ___HandoverCommand_criticalExtensions_c1_handoverCommand_r8), ('spare7', ___HandoverCommand_criticalExtensions_c1_spare7), ('spare6', ___HandoverCommand_criticalExtensions_c1_spare6), ('spare5', ___HandoverCommand_criticalExtensions_c1_spare5), ('spare4', ___HandoverCommand_criticalExtensions_c1_spare4), ('spare3', ___HandoverCommand_criticalExtensions_c1_spare3), ('spare2', ___HandoverCommand_criticalExtensions_c1_spare2), ('spare1', ___HandoverCommand_criticalExtensions_c1_spare1), ]) __HandoverCommand_criticalExtensions_c1._ext = None __HandoverCommand_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __HandoverCommand_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __HandoverCommand_criticalExtensions_criticalExtensionsFuture._ext = None _HandoverCommand_criticalExtensions._cont = ASN1Dict([ ('c1', __HandoverCommand_criticalExtensions_c1), ('criticalExtensionsFuture', __HandoverCommand_criticalExtensions_criticalExtensionsFuture), ]) _HandoverCommand_criticalExtensions._ext = None HandoverCommand._cont = ASN1Dict([ ('criticalExtensions', _HandoverCommand_criticalExtensions), ]) HandoverCommand._ext = None #-----< HandoverCommand-r8-IEs >-----# HandoverCommand_r8_IEs = SEQ(name='HandoverCommand-r8-IEs', mode=MODE_TYPE) _HandoverCommand_r8_IEs_handoverCommandMessage = OCT_STR(name='handoverCommandMessage', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __HandoverCommand_r8_IEs_handoverCommandMessage_contain = SEQ(name='_cont_handoverCommandMessage', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'DL-DCCH-Message'))) _HandoverCommand_r8_IEs_handoverCommandMessage._const_cont = __HandoverCommand_r8_IEs_handoverCommandMessage_contain _HandoverCommand_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _HandoverCommand_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _HandoverCommand_r8_IEs_nonCriticalExtension._ext = None HandoverCommand_r8_IEs._cont = ASN1Dict([ ('handoverCommandMessage', _HandoverCommand_r8_IEs_handoverCommandMessage), ('nonCriticalExtension', _HandoverCommand_r8_IEs_nonCriticalExtension), ]) HandoverCommand_r8_IEs._ext = None #-----< HandoverPreparationInformation >-----# HandoverPreparationInformation = SEQ(name='HandoverPreparationInformation', mode=MODE_TYPE) _HandoverPreparationInformation_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __HandoverPreparationInformation_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___HandoverPreparationInformation_criticalExtensions_c1_handoverPreparationInformation_r8 = SEQ(name='handoverPreparationInformation-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-InterNodeDefinitions', 'HandoverPreparationInformation-r8-IEs'))) ___HandoverPreparationInformation_criticalExtensions_c1_spare7 = NULL(name='spare7', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverPreparationInformation_criticalExtensions_c1_spare6 = NULL(name='spare6', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverPreparationInformation_criticalExtensions_c1_spare5 = NULL(name='spare5', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverPreparationInformation_criticalExtensions_c1_spare4 = NULL(name='spare4', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverPreparationInformation_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverPreparationInformation_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___HandoverPreparationInformation_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __HandoverPreparationInformation_criticalExtensions_c1._cont = ASN1Dict([ ('handoverPreparationInformation-r8', ___HandoverPreparationInformation_criticalExtensions_c1_handoverPreparationInformation_r8), ('spare7', ___HandoverPreparationInformation_criticalExtensions_c1_spare7), ('spare6', ___HandoverPreparationInformation_criticalExtensions_c1_spare6), ('spare5', ___HandoverPreparationInformation_criticalExtensions_c1_spare5), ('spare4', ___HandoverPreparationInformation_criticalExtensions_c1_spare4), ('spare3', ___HandoverPreparationInformation_criticalExtensions_c1_spare3), ('spare2', ___HandoverPreparationInformation_criticalExtensions_c1_spare2), ('spare1', ___HandoverPreparationInformation_criticalExtensions_c1_spare1), ]) __HandoverPreparationInformation_criticalExtensions_c1._ext = None __HandoverPreparationInformation_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __HandoverPreparationInformation_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __HandoverPreparationInformation_criticalExtensions_criticalExtensionsFuture._ext = None _HandoverPreparationInformation_criticalExtensions._cont = ASN1Dict([ ('c1', __HandoverPreparationInformation_criticalExtensions_c1), ('criticalExtensionsFuture', __HandoverPreparationInformation_criticalExtensions_criticalExtensionsFuture), ]) _HandoverPreparationInformation_criticalExtensions._ext = None HandoverPreparationInformation._cont = ASN1Dict([ ('criticalExtensions', _HandoverPreparationInformation_criticalExtensions), ]) HandoverPreparationInformation._ext = None #-----< HandoverPreparationInformation-r8-IEs >-----# HandoverPreparationInformation_r8_IEs = SEQ(name='HandoverPreparationInformation-r8-IEs', mode=MODE_TYPE) _HandoverPreparationInformation_r8_IEs_ue_RadioAccessCapabilityInfo = SEQ_OF(name='ue-RadioAccessCapabilityInfo', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UE-CapabilityRAT-ContainerList'))) _HandoverPreparationInformation_r8_IEs_as_Config = SEQ(name='as-Config', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-InterNodeDefinitions', 'AS-Config')), opt=True) _HandoverPreparationInformation_r8_IEs_rrm_Config = SEQ(name='rrm-Config', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-InterNodeDefinitions', 'RRM-Config')), opt=True) _HandoverPreparationInformation_r8_IEs_as_Context = SEQ(name='as-Context', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-InterNodeDefinitions', 'AS-Context')), opt=True) _HandoverPreparationInformation_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _HandoverPreparationInformation_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _HandoverPreparationInformation_r8_IEs_nonCriticalExtension._ext = None HandoverPreparationInformation_r8_IEs._cont = ASN1Dict([ ('ue-RadioAccessCapabilityInfo', _HandoverPreparationInformation_r8_IEs_ue_RadioAccessCapabilityInfo), ('as-Config', _HandoverPreparationInformation_r8_IEs_as_Config), ('rrm-Config', _HandoverPreparationInformation_r8_IEs_rrm_Config), ('as-Context', _HandoverPreparationInformation_r8_IEs_as_Context), ('nonCriticalExtension', _HandoverPreparationInformation_r8_IEs_nonCriticalExtension), ]) HandoverPreparationInformation_r8_IEs._ext = None #-----< UERadioAccessCapabilityInformation >-----# UERadioAccessCapabilityInformation = SEQ(name='UERadioAccessCapabilityInformation', mode=MODE_TYPE) _UERadioAccessCapabilityInformation_criticalExtensions = CHOICE(name='criticalExtensions', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) __UERadioAccessCapabilityInformation_criticalExtensions_c1 = CHOICE(name='c1', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_EXPLICIT)) ___UERadioAccessCapabilityInformation_criticalExtensions_c1_ueRadioAccessCapabilityInformation_r8 = SEQ(name='ueRadioAccessCapabilityInformation-r8', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-InterNodeDefinitions', 'UERadioAccessCapabilityInformation-r8-IEs'))) ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare7 = NULL(name='spare7', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare6 = NULL(name='spare6', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare5 = NULL(name='spare5', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare4 = NULL(name='spare4', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare3 = NULL(name='spare3', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare2 = NULL(name='spare2', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare1 = NULL(name='spare1', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __UERadioAccessCapabilityInformation_criticalExtensions_c1._cont = ASN1Dict([ ('ueRadioAccessCapabilityInformation-r8', ___UERadioAccessCapabilityInformation_criticalExtensions_c1_ueRadioAccessCapabilityInformation_r8), ('spare7', ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare7), ('spare6', ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare6), ('spare5', ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare5), ('spare4', ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare4), ('spare3', ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare3), ('spare2', ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare2), ('spare1', ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare1), ]) __UERadioAccessCapabilityInformation_criticalExtensions_c1._ext = None __UERadioAccessCapabilityInformation_criticalExtensions_criticalExtensionsFuture = SEQ(name='criticalExtensionsFuture', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __UERadioAccessCapabilityInformation_criticalExtensions_criticalExtensionsFuture._cont = ASN1Dict([ ]) __UERadioAccessCapabilityInformation_criticalExtensions_criticalExtensionsFuture._ext = None _UERadioAccessCapabilityInformation_criticalExtensions._cont = ASN1Dict([ ('c1', __UERadioAccessCapabilityInformation_criticalExtensions_c1), ('criticalExtensionsFuture', __UERadioAccessCapabilityInformation_criticalExtensions_criticalExtensionsFuture), ]) _UERadioAccessCapabilityInformation_criticalExtensions._ext = None UERadioAccessCapabilityInformation._cont = ASN1Dict([ ('criticalExtensions', _UERadioAccessCapabilityInformation_criticalExtensions), ]) UERadioAccessCapabilityInformation._ext = None #-----< UERadioAccessCapabilityInformation-r8-IEs >-----# UERadioAccessCapabilityInformation_r8_IEs = SEQ(name='UERadioAccessCapabilityInformation-r8-IEs', mode=MODE_TYPE) _UERadioAccessCapabilityInformation_r8_IEs_ue_RadioAccessCapabilityInfo = OCT_STR(name='ue-RadioAccessCapabilityInfo', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT)) __UERadioAccessCapabilityInformation_r8_IEs_ue_RadioAccessCapabilityInfo_contain = SEQ(name='_cont_ue-RadioAccessCapabilityInfo', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'UECapabilityInformation'))) _UERadioAccessCapabilityInformation_r8_IEs_ue_RadioAccessCapabilityInfo._const_cont = __UERadioAccessCapabilityInformation_r8_IEs_ue_RadioAccessCapabilityInfo_contain _UERadioAccessCapabilityInformation_r8_IEs_nonCriticalExtension = SEQ(name='nonCriticalExtension', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _UERadioAccessCapabilityInformation_r8_IEs_nonCriticalExtension._cont = ASN1Dict([ ]) _UERadioAccessCapabilityInformation_r8_IEs_nonCriticalExtension._ext = None UERadioAccessCapabilityInformation_r8_IEs._cont = ASN1Dict([ ('ue-RadioAccessCapabilityInfo', _UERadioAccessCapabilityInformation_r8_IEs_ue_RadioAccessCapabilityInfo), ('nonCriticalExtension', _UERadioAccessCapabilityInformation_r8_IEs_nonCriticalExtension), ]) UERadioAccessCapabilityInformation_r8_IEs._ext = None #-----< AS-Config >-----# AS_Config = SEQ(name='AS-Config', mode=MODE_TYPE) _AS_Config_sourceMeasConfig = SEQ(name='sourceMeasConfig', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MeasConfig'))) _AS_Config_sourceRadioResourceConfig = SEQ(name='sourceRadioResourceConfig', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'RadioResourceConfigDedicated'))) _AS_Config_sourceSecurityAlgorithmConfig = SEQ(name='sourceSecurityAlgorithmConfig', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SecurityAlgorithmConfig'))) _AS_Config_sourceUE_Identity = BIT_STR(name='sourceUE-Identity', mode=MODE_TYPE, tag=(3, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'C-RNTI'))) _AS_Config_sourceMasterInformationBlock = SEQ(name='sourceMasterInformationBlock', mode=MODE_TYPE, tag=(4, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'MasterInformationBlock'))) _AS_Config_sourceSystemInformationBlockType1 = SEQ(name='sourceSystemInformationBlockType1', mode=MODE_TYPE, tag=(5, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType1'))) _AS_Config_sourceSystemInformationBlockType2 = SEQ(name='sourceSystemInformationBlockType2', mode=MODE_TYPE, tag=(6, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'SystemInformationBlockType2'))) _AS_Config_antennaInfoCommon = SEQ(name='antennaInfoCommon', mode=MODE_TYPE, tag=(7, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'AntennaInfoCommon'))) _AS_Config_sourceDl_CarrierFreq = INT(name='sourceDl-CarrierFreq', mode=MODE_TYPE, tag=(8, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ARFCN-ValueEUTRA'))) AS_Config._cont = ASN1Dict([ ('sourceMeasConfig', _AS_Config_sourceMeasConfig), ('sourceRadioResourceConfig', _AS_Config_sourceRadioResourceConfig), ('sourceSecurityAlgorithmConfig', _AS_Config_sourceSecurityAlgorithmConfig), ('sourceUE-Identity', _AS_Config_sourceUE_Identity), ('sourceMasterInformationBlock', _AS_Config_sourceMasterInformationBlock), ('sourceSystemInformationBlockType1', _AS_Config_sourceSystemInformationBlockType1), ('sourceSystemInformationBlockType2', _AS_Config_sourceSystemInformationBlockType2), ('antennaInfoCommon', _AS_Config_antennaInfoCommon), ('sourceDl-CarrierFreq', _AS_Config_sourceDl_CarrierFreq), ]) AS_Config._ext = [] #-----< AS-Context >-----# AS_Context = SEQ(name='AS-Context', mode=MODE_TYPE) _AS_Context_reestablishmentInfo = SEQ(name='reestablishmentInfo', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-InterNodeDefinitions', 'ReestablishmentInfo')), opt=True) AS_Context._cont = ASN1Dict([ ('reestablishmentInfo', _AS_Context_reestablishmentInfo), ]) AS_Context._ext = None #-----< ReestablishmentInfo >-----# ReestablishmentInfo = SEQ(name='ReestablishmentInfo', mode=MODE_TYPE) _ReestablishmentInfo_sourcePhysCellId = INT(name='sourcePhysCellId', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'PhysCellId'))) _ReestablishmentInfo_targetCellShortMAC_I = BIT_STR(name='targetCellShortMAC-I', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ShortMAC-I'))) _ReestablishmentInfo_additionalReestabInfoList = SEQ_OF(name='additionalReestabInfoList', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-InterNodeDefinitions', 'AdditionalReestabInfoList')), opt=True) ReestablishmentInfo._cont = ASN1Dict([ ('sourcePhysCellId', _ReestablishmentInfo_sourcePhysCellId), ('targetCellShortMAC-I', _ReestablishmentInfo_targetCellShortMAC_I), ('additionalReestabInfoList', _ReestablishmentInfo_additionalReestabInfoList), ]) ReestablishmentInfo._ext = [] #-----< AdditionalReestabInfoList >-----# AdditionalReestabInfoList = SEQ_OF(name='AdditionalReestabInfoList', mode=MODE_TYPE) _AdditionalReestabInfoList__item_ = SEQ(name='_item_', mode=MODE_TYPE, typeref=ASN1RefType(('EUTRA-InterNodeDefinitions', 'AdditionalReestabInfo'))) AdditionalReestabInfoList._cont = _AdditionalReestabInfoList__item_ AdditionalReestabInfoList._const_sz = ASN1Set(rv=[], rr=[ASN1RangeInt(lb=1, ub=32)], ev=None, er=[]) #-----< AdditionalReestabInfo >-----# AdditionalReestabInfo = SEQ(name='AdditionalReestabInfo', mode=MODE_TYPE) _AdditionalReestabInfo_cellIdentity = BIT_STR(name='cellIdentity', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'CellIdentity'))) _AdditionalReestabInfo_key_eNodeB_Star = BIT_STR(name='key-eNodeB-Star', mode=MODE_TYPE, tag=(1, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-InterNodeDefinitions', 'Key-eNodeB-Star'))) _AdditionalReestabInfo_shortMAC_I = BIT_STR(name='shortMAC-I', mode=MODE_TYPE, tag=(2, TAG_CONTEXT_SPEC, TAG_IMPLICIT), typeref=ASN1RefType(('EUTRA-RRC-Definitions', 'ShortMAC-I'))) AdditionalReestabInfo._cont = ASN1Dict([ ('cellIdentity', _AdditionalReestabInfo_cellIdentity), ('key-eNodeB-Star', _AdditionalReestabInfo_key_eNodeB_Star), ('shortMAC-I', _AdditionalReestabInfo_shortMAC_I), ]) AdditionalReestabInfo._ext = None #-----< Key-eNodeB-Star >-----# Key_eNodeB_Star = BIT_STR(name='Key-eNodeB-Star', mode=MODE_TYPE) Key_eNodeB_Star._const_sz = ASN1Set(rv=[256], rr=[], ev=None, er=[]) #-----< RRM-Config >-----# RRM_Config = SEQ(name='RRM-Config', mode=MODE_TYPE) _RRM_Config_ue_InactiveTime = ENUM(name='ue-InactiveTime', mode=MODE_TYPE, tag=(0, TAG_CONTEXT_SPEC, TAG_IMPLICIT), opt=True) _RRM_Config_ue_InactiveTime._cont = ASN1Dict([('s1', 0), ('s2', 1), ('s3', 2), ('s5', 3), ('s7', 4), ('s10', 5), ('s15', 6), ('s20', 7), ('s25', 8), ('s30', 9), ('s40', 10), ('s50', 11), ('min1', 12), ('min1s20c', 13), ('min1s40', 14), ('min2', 15), ('min2s30', 16), ('min3', 17), ('min3s30', 18), ('min4', 19), ('min5', 20), ('min6', 21), ('min7', 22), ('min8', 23), ('min9', 24), ('min10', 25), ('min12', 26), ('min14', 27), ('min17', 28), ('min20', 29), ('min24', 30), ('min28', 31), ('min33', 32), ('min38', 33), ('min44', 34), ('min50', 35), ('hr1', 36), ('hr1min30', 37), ('hr2', 38), ('hr2min30', 39), ('hr3', 40), ('hr3min30', 41), ('hr4', 42), ('hr5', 43), ('hr6', 44), ('hr8', 45), ('hr10', 46), ('hr13', 47), ('hr16', 48), ('hr20', 49), ('day1', 50), ('day1hr12', 51), ('day2', 52), ('day2hr12', 53), ('day3', 54), ('day4', 55), ('day5', 56), ('day7', 57), ('day10', 58), ('day14', 59), ('day19', 60), ('day24', 61), ('day30', 62), ('dayMoreThan30', 63)]) _RRM_Config_ue_InactiveTime._ext = None RRM_Config._cont = ASN1Dict([ ('ue-InactiveTime', _RRM_Config_ue_InactiveTime), ]) RRM_Config._ext = [] #-----< maxReestabInfo >-----# maxReestabInfo = INT(name='maxReestabInfo', mode=MODE_VALUE) maxReestabInfo._val = 32 _all_ = [ ___HandoverCommand_criticalExtensions_c1_handoverCommand_r8, ___HandoverCommand_criticalExtensions_c1_spare7, ___HandoverCommand_criticalExtensions_c1_spare6, ___HandoverCommand_criticalExtensions_c1_spare5, ___HandoverCommand_criticalExtensions_c1_spare4, ___HandoverCommand_criticalExtensions_c1_spare3, ___HandoverCommand_criticalExtensions_c1_spare2, ___HandoverCommand_criticalExtensions_c1_spare1, __HandoverCommand_criticalExtensions_c1, __HandoverCommand_criticalExtensions_criticalExtensionsFuture, _HandoverCommand_criticalExtensions, HandoverCommand, __HandoverCommand_r8_IEs_handoverCommandMessage_contain, _HandoverCommand_r8_IEs_handoverCommandMessage, _HandoverCommand_r8_IEs_nonCriticalExtension, HandoverCommand_r8_IEs, ___HandoverPreparationInformation_criticalExtensions_c1_handoverPreparationInformation_r8, ___HandoverPreparationInformation_criticalExtensions_c1_spare7, ___HandoverPreparationInformation_criticalExtensions_c1_spare6, ___HandoverPreparationInformation_criticalExtensions_c1_spare5, ___HandoverPreparationInformation_criticalExtensions_c1_spare4, ___HandoverPreparationInformation_criticalExtensions_c1_spare3, ___HandoverPreparationInformation_criticalExtensions_c1_spare2, ___HandoverPreparationInformation_criticalExtensions_c1_spare1, __HandoverPreparationInformation_criticalExtensions_c1, __HandoverPreparationInformation_criticalExtensions_criticalExtensionsFuture, _HandoverPreparationInformation_criticalExtensions, HandoverPreparationInformation, _HandoverPreparationInformation_r8_IEs_ue_RadioAccessCapabilityInfo, _HandoverPreparationInformation_r8_IEs_as_Config, _HandoverPreparationInformation_r8_IEs_rrm_Config, _HandoverPreparationInformation_r8_IEs_as_Context, _HandoverPreparationInformation_r8_IEs_nonCriticalExtension, HandoverPreparationInformation_r8_IEs, ___UERadioAccessCapabilityInformation_criticalExtensions_c1_ueRadioAccessCapabilityInformation_r8, ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare7, ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare6, ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare5, ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare4, ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare3, ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare2, ___UERadioAccessCapabilityInformation_criticalExtensions_c1_spare1, __UERadioAccessCapabilityInformation_criticalExtensions_c1, __UERadioAccessCapabilityInformation_criticalExtensions_criticalExtensionsFuture, _UERadioAccessCapabilityInformation_criticalExtensions, UERadioAccessCapabilityInformation, __UERadioAccessCapabilityInformation_r8_IEs_ue_RadioAccessCapabilityInfo_contain, _UERadioAccessCapabilityInformation_r8_IEs_ue_RadioAccessCapabilityInfo, _UERadioAccessCapabilityInformation_r8_IEs_nonCriticalExtension, UERadioAccessCapabilityInformation_r8_IEs, _AS_Config_sourceMeasConfig, _AS_Config_sourceRadioResourceConfig, _AS_Config_sourceSecurityAlgorithmConfig, _AS_Config_sourceUE_Identity, _AS_Config_sourceMasterInformationBlock, _AS_Config_sourceSystemInformationBlockType1, _AS_Config_sourceSystemInformationBlockType2, _AS_Config_antennaInfoCommon, _AS_Config_sourceDl_CarrierFreq, AS_Config, _AS_Context_reestablishmentInfo, AS_Context, _ReestablishmentInfo_sourcePhysCellId, _ReestablishmentInfo_targetCellShortMAC_I, _ReestablishmentInfo_additionalReestabInfoList, ReestablishmentInfo, _AdditionalReestabInfoList__item_, AdditionalReestabInfoList, _AdditionalReestabInfo_cellIdentity, _AdditionalReestabInfo_key_eNodeB_Star, _AdditionalReestabInfo_shortMAC_I, AdditionalReestabInfo, Key_eNodeB_Star, _RRM_Config_ue_InactiveTime, RRM_Config, maxReestabInfo, ] init_modules(EUTRA_RRC_Definitions, EUTRA_UE_Variables, EUTRA_InterNodeDefinitions) asn1tools-0.169.0/examples/benchmarks/packages/uper.py000077500000000000000000000660571524544274600227060ustar00rootroot00000000000000#!/usr/bin/env python """A performance example comparing the UPER encoding and decoding performance of two ASN.1 Python packages. Example execution: $ ./packages.py Starting encoding and decoding of a message 3000 times. This may take a few seconds. Encoding the message 3000 times took: PACKAGE SECONDS asn1tools 0.674007 pycrate 2.880219 Decoding the message 3000 times took: PACKAGE SECONDS asn1tools 0.598906 pycrate 2.295481 $ """ from __future__ import print_function import os import timeit import asn1tools SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) RRC_8_6_0_ASN_PATH = os.path.join(SCRIPT_DIR, '..', '..', '..', 'tests', 'files', '3gpp', 'rrc_8_6_0.asn') DECODED_MESSAGE_ASN1TOOLS = { 'message': ( 'c1', ( 'systemInformation', { 'criticalExtensions': ( 'systemInformation-r8', { 'sib-TypeAndInfo': [ ( 'sib2', { 'ac-BarringInfo': { 'ac-BarringForEmergency': True, 'ac-BarringForMO-Data': { 'ac-BarringFactor': 'p95', 'ac-BarringTime': 's128', 'ac-BarringForSpecialAC': (b'\xf0', 5) } }, 'radioResourceConfigCommon': { 'rach-ConfigCommon': { 'preambleInfo': { 'numberOfRA-Preambles': 'n24', 'preamblesGroupAConfig': { 'sizeOfRA-PreamblesGroupA': 'n28', 'messageSizeGroupA': 'b144', 'messagePowerOffsetGroupB': 'minusinfinity' } }, 'powerRampingParameters': { 'powerRampingStep': 'dB0', 'preambleInitialReceivedTargetPower': 'dBm-102' }, 'ra-SupervisionInfo': { 'preambleTransMax': 'n8', 'ra-ResponseWindowSize': 'sf6', 'mac-ContentionResolutionTimer': 'sf48' }, 'maxHARQ-Msg3Tx': 8 }, 'bcch-Config': { 'modificationPeriodCoeff': 'n2' }, 'pcch-Config': { 'defaultPagingCycle': 'rf256', 'nB': 'twoT' }, 'prach-Config': { 'rootSequenceIndex': 836, 'prach-ConfigInfo': { 'prach-ConfigIndex': 33, 'highSpeedFlag': False, 'zeroCorrelationZoneConfig': 10, 'prach-FreqOffset': 64 } }, 'pdsch-ConfigCommon': { 'referenceSignalPower': -60, 'p-b': 2 }, 'pusch-ConfigCommon': { 'pusch-ConfigBasic': { 'n-SB': 1, 'hoppingMode': 'interSubFrame', 'pusch-HoppingOffset': 10, 'enable64QAM': False }, 'ul-ReferenceSignalsPUSCH': { 'groupHoppingEnabled': True, 'groupAssignmentPUSCH': 22, 'sequenceHoppingEnabled': False, 'cyclicShift': 5 } }, 'pucch-ConfigCommon': { 'deltaPUCCH-Shift': 'ds1', 'nRB-CQI': 98, 'nCS-AN': 4, 'n1PUCCH-AN': 2047 }, 'soundingRS-UL-ConfigCommon': ( 'setup', { 'srs-BandwidthConfig': 'bw0', 'srs-SubframeConfig': 'sc4', 'ackNackSRS-SimultaneousTransmission': True }), 'uplinkPowerControlCommon': { 'p0-NominalPUSCH': -126, 'alpha': 'al0', 'p0-NominalPUCCH': -127, 'deltaFList-PUCCH': { 'deltaF-PUCCH-Format1': 'deltaF-2', 'deltaF-PUCCH-Format1b': 'deltaF1', 'deltaF-PUCCH-Format2': 'deltaF0', 'deltaF-PUCCH-Format2a': 'deltaF-2', 'deltaF-PUCCH-Format2b': 'deltaF0' }, 'deltaPreambleMsg3': -1 }, 'ul-CyclicPrefixLength': 'len1' }, 'ue-TimersAndConstants': { 't300': 'ms100', 't301': 'ms200', 't310': 'ms50', 'n310': 'n2', 't311': 'ms30000', 'n311': 'n2' }, 'freqInfo': { 'additionalSpectrumEmission': 3 }, 'timeAlignmentTimerCommon': 'sf500' } ), ( 'sib3', { 'cellReselectionInfoCommon': { 'q-Hyst': 'dB0', 'speedStateReselectionPars': { 'mobilityStateParameters': { 't-Evaluation': 's180', 't-HystNormal': 's180', 'n-CellChangeMedium': 1, 'n-CellChangeHigh': 16 }, 'q-HystSF': { 'sf-Medium': 'dB-6', 'sf-High': 'dB-4' } } }, 'cellReselectionServingFreqInfo': { 'threshServingLow': 7, 'cellReselectionPriority': 3 }, 'intraFreqCellReselectionInfo': { 'q-RxLevMin': -33, 's-IntraSearch': 0, 'presenceAntennaPort1': False, 'neighCellConfig': (b'\x80', 2), 't-ReselectionEUTRA': 4 } } ), ( 'sib4', { } ), ( 'sib5', { 'interFreqCarrierFreqList': [ { 'dl-CarrierFreq': 1, 'q-RxLevMin': -45, 't-ReselectionEUTRA': 0, 'threshX-High': 31, 'threshX-Low': 29, 'allowedMeasBandwidth': 'mbw6', 'presenceAntennaPort1': True, 'neighCellConfig': (b'\x00', 2), 'q-OffsetFreq': 'dB0' } ] } ), ( 'sib6', { 't-ReselectionUTRA': 3 } ), ('sib7', { 't-ReselectionGERAN': 3 } ), ('sib8', { 'parameters1XRTT': { 'longCodeState1XRTT': (b'\x01#Eg\x89\x00', 42) } } ), ( 'sib9', { 'hnb-Name': b'4' } ), ('sib10', { 'messageIdentifier': (b'#4', 16), 'serialNumber': (b'\x124', 16), 'warningType': b'2\x12' } ), ( 'sib11', { 'messageIdentifier': (b'g\x88', 16), 'serialNumber': (b'T5', 16), 'warningMessageSegmentType': 'notLastSegment', 'warningMessageSegmentNumber': 19, 'warningMessageSegment': b'\x12' } ) ] } ) } ) ) } DECODED_MESSAGE_PYCRATE = { 'message': ( 'c1', ( 'systemInformation', { 'criticalExtensions': ( 'systemInformation-r8', { 'sib-TypeAndInfo': [ ( 'sib2', { 'ac-BarringInfo': { 'ac-BarringForEmergency': True, 'ac-BarringForMO-Data': { 'ac-BarringFactor': 'p95', 'ac-BarringTime': 's128', 'ac-BarringForSpecialAC': (30, 5) } }, 'radioResourceConfigCommon': { 'rach-ConfigCommon': { 'preambleInfo': { 'numberOfRA-Preambles': 'n24', 'preamblesGroupAConfig': { 'sizeOfRA-PreamblesGroupA': 'n28', 'messageSizeGroupA': 'b144', 'messagePowerOffsetGroupB': 'minusinfinity' } }, 'powerRampingParameters': { 'powerRampingStep': 'dB0', 'preambleInitialReceivedTargetPower': 'dBm-102' }, 'ra-SupervisionInfo': { 'preambleTransMax': 'n8', 'ra-ResponseWindowSize': 'sf6', 'mac-ContentionResolutionTimer': 'sf48' }, 'maxHARQ-Msg3Tx': 8 }, 'bcch-Config': { 'modificationPeriodCoeff': 'n2' }, 'pcch-Config': { 'defaultPagingCycle': 'rf256', 'nB': 'twoT' }, 'prach-Config': { 'rootSequenceIndex': 836, 'prach-ConfigInfo': { 'prach-ConfigIndex': 33, 'highSpeedFlag': False, 'zeroCorrelationZoneConfig': 10, 'prach-FreqOffset': 64 } }, 'pdsch-ConfigCommon': { 'referenceSignalPower': -60, 'p-b': 2 }, 'pusch-ConfigCommon': { 'pusch-ConfigBasic': { 'n-SB': 1, 'hoppingMode': 'interSubFrame', 'pusch-HoppingOffset': 10, 'enable64QAM': False } , 'ul-ReferenceSignalsPUSCH': { 'groupHoppingEnabled': True, 'groupAssignmentPUSCH': 22, 'sequenceHoppingEnabled': False, 'cyclicShift': 5 } }, 'pucch-ConfigCommon': { 'deltaPUCCH-Shift': 'ds1', 'nRB-CQI': 98, 'nCS-AN': 4, 'n1PUCCH-AN': 2047 }, 'soundingRS-UL-ConfigCommon': ( 'setup', { 'srs-BandwidthConfig': 'bw0', 'srs-SubframeConfig': 'sc4', 'ackNackSRS-SimultaneousTransmission': True } ), 'uplinkPowerControlCommon': { 'p0-NominalPUSCH': -126, 'alpha': 'al0', 'p0-NominalPUCCH': -127, 'deltaFList-PUCCH': { 'deltaF-PUCCH-Format1': 'deltaF-2', 'deltaF-PUCCH-Format1b': 'deltaF1', 'deltaF-PUCCH-Format2': 'deltaF0', 'deltaF-PUCCH-Format2a': 'deltaF-2', 'deltaF-PUCCH-Format2b': 'deltaF0' }, 'deltaPreambleMsg3': -1 }, 'ul-CyclicPrefixLength': 'len1' }, 'ue-TimersAndConstants': { 't300': 'ms100', 't301': 'ms200', 't310': 'ms50', 'n310': 'n2', 't311': 'ms30000', 'n311': 'n2' }, 'freqInfo': { 'additionalSpectrumEmission': 3 }, 'timeAlignmentTimerCommon': 'sf500' } ), ( 'sib3', { 'cellReselectionInfoCommon': { 'q-Hyst': 'dB0', 'speedStateReselectionPars': { 'mobilityStateParameters': { 't-Evaluation': 's180', 't-HystNormal': 's180', 'n-CellChangeMedium': 1, 'n-CellChangeHigh': 16 }, 'q-HystSF': { 'sf-Medium': 'dB-6', 'sf-High': 'dB-4' } } }, 'cellReselectionServingFreqInfo': { 'threshServingLow': 7, 'cellReselectionPriority': 3 }, 'intraFreqCellReselectionInfo': { 'q-RxLevMin': -33, 's-IntraSearch': 0, 'presenceAntennaPort1': False, 'neighCellConfig': (2, 2), 't-ReselectionEUTRA': 4 } } ), ( 'sib4', { } ), ( 'sib5', { 'interFreqCarrierFreqList': [ { 'dl-CarrierFreq': 1, 'q-RxLevMin': -45, 't-ReselectionEUTRA': 0, 'threshX-High': 31, 'threshX-Low': 29, 'allowedMeasBandwidth': 'mbw6', 'presenceAntennaPort1': True, 'neighCellConfig': (0, 2), 'q-OffsetFreq': 'dB0' } ] } ), ( 'sib6', { 't-ReselectionUTRA': 3 } ), ( 'sib7', { 't-ReselectionGERAN': 3 } ), ( 'sib8', { 'parameters1XRTT': { 'longCodeState1XRTT': (19546873380, 42) } } ), ( 'sib9', { 'hnb-Name': b'4' } ), ( 'sib10', { 'messageIdentifier': (9012, 16), 'serialNumber': (4660, 16), 'warningType': b'2\x12' } ), ( 'sib11', { 'messageIdentifier': (26504, 16), 'serialNumber': (21557, 16), 'warningMessageSegmentType': 'notLastSegment', 'warningMessageSegmentNumber': 19, 'warningMessageSegment': b'\x12' } ) ] } ) } ) ) } ENCODED_MESSAGE = ( b'\x04\x81\x3f\xbe\x2a\x64\x12\xb2\xf3\x3a\x24\x2a\x80\x02\x02\x9b' b'\x29\x8a\x7f\xf8\x24\x00\x00\x11\x00\x24\xe2\x08\x05\x06\xc3\xc4' b'\x76\x92\x81\x41\x00\xc0\x00\x00\x0b\x23\xfd\x10\x80\xca\x19\x82' b'\x80\x48\xd1\x59\xe2\x43\xa0\x1a\x20\x23\x34\x12\x34\x32\x12\x48' b'\xcf\x10\xa8\x6a\x4c\x04\x48' ) ITERATIONS = 3000 def asn1tools_encode_decode(): rrc = asn1tools.compile_files(RRC_8_6_0_ASN_PATH, 'uper') def encode(): rrc.encode('BCCH-DL-SCH-Message', DECODED_MESSAGE_ASN1TOOLS, check_types=False) def decode(): rrc.decode('BCCH-DL-SCH-Message', ENCODED_MESSAGE) encode_time = timeit.timeit(encode, number=ITERATIONS) decode_time = timeit.timeit(decode, number=ITERATIONS) return encode_time, decode_time def pycrate_encode_decode(): try: import rrc_8_6_0_pycrate rrc = rrc_8_6_0_pycrate.EUTRA_RRC_Definitions.BCCH_DL_SCH_Message rrc._SAFE_INIT = False rrc._SAFE_VAL = False rrc._SAFE_BND = False rrc._SAFE_BNDTAB = False def encode(): rrc.set_val(DECODED_MESSAGE_PYCRATE) rrc.to_uper() def decode(): rrc.from_uper(ENCODED_MESSAGE) rrc() encode_time = timeit.timeit(encode, number=ITERATIONS) decode_time = timeit.timeit(decode, number=ITERATIONS) except ImportError: encode_time = float('inf') decode_time = float('inf') print('Unable to import pycrate.') except Exception as e: encode_time = float('inf') decode_time = float('inf') print('pycrate error: {}'.format(str(e))) return encode_time, decode_time print('Starting encoding and decoding of a message {} times. This may ' 'take a few seconds.'.format(ITERATIONS)) asn1tools_encode_time, asn1tools_decode_time = asn1tools_encode_decode() pycrate_encode_time, pycrate_decode_time = pycrate_encode_decode() # Encode comparison output. measurements = [ ('asn1tools', asn1tools_encode_time), ('pycrate', pycrate_encode_time) ] measurements = sorted(measurements, key=lambda m: m[1]) print() print('Encoding the message {} times took:'.format(ITERATIONS)) print() print('PACKAGE SECONDS') for package, seconds in measurements: print('{:12s} {:f}'.format(package, seconds)) # Decode comparison output. measurements = [ ('asn1tools', asn1tools_decode_time), ('pycrate', pycrate_decode_time) ] measurements = sorted(measurements, key=lambda m: m[1]) print() print('Decoding the message {} times took:'.format(ITERATIONS)) print() print('PACKAGE SECONDS') for package, seconds in measurements: print('{:12s} {:f}'.format(package, seconds)) asn1tools-0.169.0/examples/benchmarks/question/000077500000000000000000000000001524544274600214315ustar00rootroot00000000000000asn1tools-0.169.0/examples/benchmarks/question/foo.proto000066400000000000000000000002261524544274600233010ustar00rootroot00000000000000message Question { required int32 id = 1; required string question = 2; } message Answer { required int32 id = 1; required bool answer = 2; }asn1tools-0.169.0/examples/benchmarks/question/foo_pb2.py000066400000000000000000000026151524544274600233350ustar00rootroot00000000000000# -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # NO CHECKED-IN PROTOBUF GENCODE # source: foo.proto # Protobuf Python Version: 7.36.0 """Generated protocol buffer code.""" from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database from google.protobuf.internal import builder as _builder _runtime_version.ValidateProtobufRuntimeVersion( _runtime_version.Domain.PUBLIC, 7, 36, 0, '', 'foo.proto' ) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tfoo.proto\"(\n\x08Question\x12\n\n\x02id\x18\x01 \x02(\x05\x12\x10\n\x08question\x18\x02 \x02(\t\"$\n\x06\x41nswer\x12\n\n\x02id\x18\x01 \x02(\x05\x12\x0e\n\x06\x61nswer\x18\x02 \x02(\x08') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'foo_pb2', _globals) if not _descriptor._USE_C_DESCRIPTORS: DESCRIPTOR._loaded_options = None _globals['_QUESTION']._serialized_start=13 _globals['_QUESTION']._serialized_end=53 _globals['_ANSWER']._serialized_start=55 _globals['_ANSWER']._serialized_end=91 # @@protoc_insertion_point(module_scope) asn1tools-0.169.0/examples/benchmarks/question/question.py000077500000000000000000000055151524544274600236630ustar00rootroot00000000000000#!/usr/bin/env python """Encoding and decoding of a question once for each codec. Example execution: $ ./question.py ASN.1 specification: -- A simple protocol taken from Wikipedia. Foo DEFINITIONS ::= BEGIN Question ::= SEQUENCE { id INTEGER, question IA5String } Answer ::= SEQUENCE { id INTEGER, answer BOOLEAN } END Question to encode: {'id': 1, 'question': 'Is 1+1=3?'} BER: Encoded: 300e0201011609497320312b313d333f (16 bytes) Decoded: {'id': 1, 'question': 'Is 1+1=3?'} DER: Encoded: 300e0201011609497320312b313d333f (16 bytes) Decoded: {'id': 1, 'question': 'Is 1+1=3?'} JER: Encoded: 7b226964223a312c227175657374696f6e223a22497320312b313d333f227d (31 bytes) Decoded: {'id': 1, 'question': 'Is 1+1=3?'} OER: Encoded: 010109497320312b313d333f (12 bytes) Decoded: {'id': 1, 'question': 'Is 1+1=3?'} PER: Encoded: 010109497320312b313d333f (12 bytes) Decoded: {'id': 1, 'question': 'Is 1+1=3?'} UPER: Encoded: 01010993cd03156c5eb37e (11 bytes) Decoded: {'id': 1, 'question': 'Is 1+1=3?'} XER: Encoded: 3c5175657374696f6e3e3c69643e313c2f69643e3c7175657374696f6e3e497320312b313d333f3c2f7175657374696f6e3e3c2f5175657374696f6e3e (61 bytes) Decoded: {'id': 1, 'question': 'Is 1+1=3?'} Protocol Buffers: Encoded: 08011209497320312b313d333f (13 bytes) Decoded: id: 1 question: "Is 1+1=3?" $ """ from __future__ import print_function import os from binascii import hexlify import asn1tools from foo_pb2 import Question SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) FOO_ASN_PATH = os.path.join(SCRIPT_DIR, '..', '..', '..', 'tests', 'files', 'foo.asn') # Print the specification. print('ASN.1 specification:') print() with open(FOO_ASN_PATH) as fin: print(fin.read()) # The question to encode. question = {'id': 1, 'question': 'Is 1+1=3?'} print("Question to encode:", question) # Encode and decode the question once for each codec. for codec in ['ber', 'der', 'jer', 'oer', 'per', 'uper', 'xer']: foo = asn1tools.compile_files(FOO_ASN_PATH, codec) encoded = foo.encode('Question', question) decoded = foo.decode('Question', encoded) print() print('{}:'.format(codec.upper())) print('Encoded: {} ({} bytes)'.format(hexlify(encoded).decode('ascii'), len(encoded))) print('Decoded:', decoded) # Also encode using protocol buffers. question = Question() question.id = 1 question.question = 'Is 1+1=3?' encoded = question.SerializeToString() decoded = question print() print('Protocol Buffers:') print('Encoded: {} ({} bytes)'.format(hexlify(encoded).decode('ascii'), len(encoded))) print('Decoded:') print(decoded) asn1tools-0.169.0/examples/compact_extensions_uper/000077500000000000000000000000001524544274600224055ustar00rootroot00000000000000asn1tools-0.169.0/examples/compact_extensions_uper/README.rst000066400000000000000000000045171524544274600241030ustar00rootroot00000000000000About ===== An example using ``OPTIONAL`` and power of two ``CHOICE`` instead of extension markers ``...`` for more compact UPER encoding. NOTE: This only works if the extension is at the end of the message! `v1.asn` contains the first version of the protocol, and `v2.asn` the second. Notice how the last member in ``Foo`` version 1 is ``extension NULL OPTIONAL`` instead of ``...``. In version 2 it has been replaced with ``v2 SEQUENCE``, which also has the last member ``extension NULL OPTIONAL``, allowing future extensions of the ``Foo`` message. To allow more than four messages in ``Message``, the last member, ``extension3 NULL`` must be replaced with ``more CHOICE {fum Fum, extension1 NULL, extension2 NULL, extension3 NULL}`` once the first three messages are used. Example execution ================= .. code-block:: text $ ./main.py Encode V1: Input: ('foo', {'b': 55, 'e': 'on', 'a': True, 'c': 3, 'd': False}) Output: 16ec (2 bytes) Encode V2: Input: ('foo', {'b': 55, 'e': 'on', 'a': True, 'c': 3, 'd': False}) Output: 16ec (2 bytes) Input: ('foo', {'v2': {'b': True, 'a': -1}, 'b': 55, 'd': False, 'c': 3, 'e': 'on', 'a': True}) Output: 36ec3fc0 (4 bytes) Input: ('bar', 3) Output: 46 (1 bytes) Encode V2 with extension markers: Input: ('foo', {'b': 55, 'e': 'on', 'a': True, 'c': 3, 'd': False}) Output: 2dd8 (2 bytes) Input: ('foo', {'b': 55, 'd': False, 'g': True, 'c': 3, 'e': 'on', 'a': True, 'f': -1}) Output: 6dd80204ff00 (6 bytes) Input: ('bar', 3) Output: 800118 (3 bytes) Decode V1 with V1: Input: 16ec Output: ('foo', {'b': 55, 'e': 'on', 'a': True, 'c': 3, 'd': False}) Decode V1 with V2: Input: 16ec Output: ('foo', {'b': 55, 'e': 'on', 'a': True, 'c': 3, 'd': False}) Decode V2 with V1: Input: 16ec Output: ('foo', {'b': 55, 'e': 'on', 'a': True, 'c': 3, 'd': False}) Input: 36ec3fc0 Output: ('foo', {'b': 55, 'extension': None, 'd': False, 'c': 3, 'e': 'on', 'a': True}) Input: 46 Output: ('extension1', None) Decode V2 with V2: Input: 16ec Output: ('foo', {'b': 55, 'e': 'on', 'a': True, 'c': 3, 'd': False}) Input: 36ec3fc0 Output: ('foo', {'v2': {'b': True, 'a': -1}, 'b': 55, 'd': False, 'c': 3, 'e': 'on', 'a': True}) Input: 46 Output: ('bar', 3) $ asn1tools-0.169.0/examples/compact_extensions_uper/main.py000066400000000000000000000054341524544274600237110ustar00rootroot00000000000000#!/usr/bin/env python import os import binascii import asn1tools SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) FOO_V1_ASN_PATH = os.path.realpath(os.path.join(SCRIPT_DIR, 'v1.asn')) FOO_V2_ASN_PATH = os.path.realpath(os.path.join(SCRIPT_DIR, 'v2.asn')) FOO_V2_EM_ASN_PATH = os.path.realpath(os.path.join(SCRIPT_DIR, 'v2_extension_markers.asn')) def encode(foo, name, decoded): print(' Input: {}'.format(decoded)) encoded = foo.encode(name, decoded) print(' Output: {} ({} bytes)'.format(binascii.hexlify(encoded).decode('ascii'), len(encoded))) def decode(foo, name, encoded): print(' Input: {}'.format(binascii.hexlify(encoded).decode('ascii'))) decoded = foo.decode(name, encoded) print(' Output: {}'.format(decoded)) def main(): foo_v1 = asn1tools.compile_files(FOO_V1_ASN_PATH, 'uper') foo_v2 = asn1tools.compile_files(FOO_V2_ASN_PATH, 'uper') foo_v2_em = asn1tools.compile_files(FOO_V2_EM_ASN_PATH, 'uper') decoded_v1 = ( 'foo', { 'a': True, 'b': 55, 'c': 3, 'd': False, 'e': 'on' } ) decoded_v2 = ( 'foo', { 'a': True, 'b': 55, 'c': 3, 'd': False, 'e': 'on', 'v2': { 'a': -1, 'b': True } } ) decoded_v2_bar = ('bar', 3) decoded_v2_em = ( 'foo', { 'a': True, 'b': 55, 'c': 3, 'd': False, 'e': 'on', 'f': -1, 'g': True } ) print('Encode V1:') print() encode(foo_v1, 'Message', decoded_v1) print() print('Encode V2:') print() encode(foo_v2, 'Message', decoded_v1) encode(foo_v2, 'Message', decoded_v2) encode(foo_v2, 'Message', decoded_v2_bar) print() print('Encode V2 with extension markers:') print() encode(foo_v2_em, 'Message', decoded_v1) encode(foo_v2_em, 'Message', decoded_v2_em) encode(foo_v2_em, 'Message', decoded_v2_bar) print() print('Decode V1 with V1:') print() decode(foo_v1, 'Message', b'\x16\xec') print() print('Decode V1 with V2:') print() decode(foo_v2, 'Message', b'\x16\xec') print() print('Decode V2 with V1:') print() decode(foo_v1, 'Message', b'\x16\xec') decode(foo_v1, 'Message', b'\x36\xec\x3f\xc0') decode(foo_v1, 'Message', b'\x46') print() print('Decode V2 with V2:') print() decode(foo_v2, 'Message', b'\x16\xec') decode(foo_v2, 'Message', b'\x36\xec\x3f\xc0') decode(foo_v2, 'Message', b'\x46') if __name__ == '__main__': main() asn1tools-0.169.0/examples/compact_extensions_uper/v1.asn000066400000000000000000000011461524544274600234400ustar00rootroot00000000000000--- First version of the Foo protocol. Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN State ::= ENUMERATED { on (0), off (1) } -- Selection encoded in two bits. Message ::= CHOICE { foo Foo, -- Future extensions, more compact encoding than '...'. extension1 NULL, extension2 NULL, extension3 NULL } Foo ::= SEQUENCE { a BOOLEAN, b INTEGER (0..127), -- Fixed range, encoded in 7 bits. c INTEGER (0..7), -- Fixed range, encoded in 3 bits. d BOOLEAN, e State, -- Future extension, more compact encoding than '...'. extension NULL OPTIONAL } END asn1tools-0.169.0/examples/compact_extensions_uper/v2.asn000066400000000000000000000014701524544274600234410ustar00rootroot00000000000000--- Second version of the Foo protocol. Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN State ::= ENUMERATED { on (0), off (1) } -- Selection encoded in two bits. Message ::= CHOICE { foo Foo, -- Added in version 2. bar Bar, -- Future extensions, more compact encoding than '...'. extension2 NULL, extension3 NULL } Foo ::= SEQUENCE { a BOOLEAN, b INTEGER (0..127), -- Fixed range, encoded in 7 bits. c INTEGER (0..7), -- Fixed range, encoded in 3 bits. d BOOLEAN, e State, -- Extension in this version, version 2. v2 SEQUENCE { a INTEGER (-128..127), -- Fixed range, encoded in 8 bits. b BOOLEAN, -- Future extension, more compact encoding than '...'. extension NULL OPTIONAL } OPTIONAL } Bar ::= INTEGER (0..31) END asn1tools-0.169.0/examples/compact_extensions_uper/v2_extension_markers.asn000066400000000000000000000011511524544274600272550ustar00rootroot00000000000000--- Second version of the Foo protocol, with extension markers. Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN State ::= ENUMERATED { on (0), off (1) } Message ::= CHOICE { foo Foo, ..., -- Added in version 2. bar Bar } Foo ::= SEQUENCE { a BOOLEAN, b INTEGER (0..127), -- Fixed range, encoded in 7 bits. c INTEGER (0..7), -- Fixed range, encoded in 3 bits. d BOOLEAN, e State, ..., -- Extension in this version, version 2. [[ f INTEGER (-128..127), -- Fixed range, encoded in 8 bits. g BOOLEAN ]] } Bar ::= INTEGER (0..31) END asn1tools-0.169.0/examples/hello_world.py000066400000000000000000000013661524544274600203370ustar00rootroot00000000000000#!/usr/bin/env python """The asn1tools hello world example. Example execution: $ ./hello_world.py Message: {'number': 2, 'text': 'Hi!'} Encoded: 010203486921 Decoded: {'number': 2, 'text': 'Hi!'} $ """ from __future__ import print_function from binascii import hexlify import asn1tools SPECIFICATION = ''' HelloWorld DEFINITIONS ::= BEGIN Message ::= SEQUENCE { number INTEGER, text UTF8String } END ''' hello_world = asn1tools.compile_string(SPECIFICATION, 'uper') message = {'number': 2, 'text': u'Hi!'} encoded = hello_world.encode('Message', message) decoded = hello_world.decode('Message', encoded) print('Message:', message) print('Encoded:', hexlify(encoded).decode('ascii')) print('Decoded:', decoded) asn1tools-0.169.0/examples/ldap.py000077500000000000000000000101041524544274600167360ustar00rootroot00000000000000#!/usr/bin/env python """Perform an LDAP bind with an LDAP server. Example execution: $ ./ldap.py Connecting to ldap.forumsys.com:389... done. {'messageID': 1, 'protocolOp': ('bindRequest', {'authentication': ('simple', b'password'), 'name': b'uid=tesla,dc=example,dc=com', 'version': 3})} Sending LDAP bind request to the server... done. Receiving LDAP bind response from the server... done. {'messageID': 1, 'protocolOp': ('bindResponse', {'diagnosticMessage': bytearray(b''), 'matchedDN': bytearray(b''), 'resultCode': 'success'})} {'messageID': 2, 'protocolOp': ('searchRequest', {'attributes': [], 'baseObject': '', 'derefAliases': 'neverDerefAliases', 'filter': ('substrings', {'substrings': [('any', 'fred')], 'type': 'cn'}), 'scope': 'wholeSubtree', 'sizeLimit': 0, 'timeLimit': 0, 'typesOnly': False})} Sending LDAP search request to the server... done. Receiving LDAP search response from the server... done. {'messageID': 2, 'protocolOp': ('searchResDone', {'diagnosticMessage': bytearray(b''), 'matchedDN': bytearray(b''), 'resultCode': 'noSuchObject'})} $ """ from __future__ import print_function import os import socket from pprint import pprint import asn1tools # A sample can be obtained from: # https://github.com/chemikadze/asn1go/blob/master/examples/rfc4511.asn1 SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) RFC4511_ASN_PATH = os.path.join(SCRIPT_DIR, 'rfc4511.asn') HOST = 'ldap.forumsys.com' PORT = 389 db = asn1tools.compile_files(RFC4511_ASN_PATH) # Connect to the LDAP server. sock = socket.socket() print('Connecting to {}:{}... '.format(HOST, PORT), end='') sock.connect((HOST, PORT)) print('done.') print() # Encode the LDAP bind request and send it to the server. bind_request = { 'messageID': 1, 'protocolOp': ( 'bindRequest', { 'version': 3, 'name': b'uid=tesla,dc=example,dc=com', 'authentication': ( 'simple', b'password' ) } ) } encoded_bind_request = db.encode('LDAPMessage', bind_request) pprint(bind_request) print('Sending LDAP bind request to the server... ', end='') sock.sendall(encoded_bind_request) print('done.') # Receive the bind response, decode it, and print it. print('Receiving LDAP bind response from the server... ', end='') encoded_bind_response = sock.recv(2) length = db.decode_length(encoded_bind_response) encoded_bind_response += sock.recv(length - 2) print('done.') bind_response = db.decode('LDAPMessage', encoded_bind_response) pprint(bind_response) print() # Encode the LDAP search request and send it to the server. search_request = { 'messageID': 2, 'protocolOp': ( 'searchRequest', { 'baseObject': b'', 'scope': 'wholeSubtree', 'derefAliases': 'neverDerefAliases', 'sizeLimit': 0, 'timeLimit': 0, 'typesOnly': False, 'filter': ( 'substrings', { 'type': b'\x63\x6e', 'substrings': [ ('any', b'\x66\x72\x65\x64') ] } ), 'attributes': [ ] } ) } encoded_search_request = db.encode('LDAPMessage', search_request) pprint(search_request) print('Sending LDAP search request to the server... ', end='') sock.sendall(encoded_search_request) print('done.') # Receive the search response, decode it, and print it. print('Receiving LDAP search response from the server... ', end='') encoded_search_response = sock.recv(2) length = db.decode_length(encoded_search_response) encoded_search_response += sock.recv(length - 2) print('done.') search_response = db.decode('LDAPMessage', encoded_search_response) pprint(search_response) sock.close() asn1tools-0.169.0/examples/programming_types/000077500000000000000000000000001524544274600212135ustar00rootroot00000000000000asn1tools-0.169.0/examples/programming_types/README.rst000066400000000000000000000040461524544274600227060ustar00rootroot00000000000000About ===== Types often found in programming languages, defined in the ASN.1 module `programming_types.asn`_. +------------+---------------+-----------+------------+ | ASN.1 | C | Python | Java | +============+===============+===========+============+ | ``Int8`` | ``int8_t`` | ``int`` | ``byte`` | +------------+---------------+-----------+------------+ | ``Int16`` | ``int16_t`` | ``int`` | ``short`` | +------------+---------------+-----------+------------+ | ``Int32`` | ``int32_t`` | ``int`` | ``int`` | +------------+---------------+-----------+------------+ | ``Int64`` | ``int64_t`` | ``int`` | ``long`` | +------------+---------------+-----------+------------+ | ``Uint8`` | ``uint8_t`` | ``int`` | ``byte`` | +------------+---------------+-----------+------------+ | ``Uint16`` | ``uint16_t`` | ``int`` | ``short`` | +------------+---------------+-----------+------------+ | ``Uint32`` | ``uint32_t`` | ``int`` | ``int`` | +------------+---------------+-----------+------------+ | ``Uint64`` | ``uint64_t`` | ``int`` | ``long`` | +------------+---------------+-----------+------------+ | ``Float`` | ``float`` | ``float`` | ``float`` | +------------+---------------+-----------+------------+ | ``Double`` | ``double`` | ``float`` | ``double`` | +------------+---------------+-----------+------------+ | ``Bool`` | ``bool`` | ``bool`` | ``bool`` | +------------+---------------+-----------+------------+ | ``String`` | ``char *`` | ``str`` | ``String`` | +------------+---------------+-----------+------------+ | ``Bytes`` | ``uint8_t *`` | ``bytes`` | ``byte[]`` | +------------+---------------+-----------+------------+ Double is defined as `64 bits`_ and Float as `32 bits`_. .. _programming_types.asn: https://github.com/eerimoq/asn1tools/tree/master/examples/programming_types/programming_types.asn .. _64 bits: https://en.wikipedia.org/wiki/Double-precision_floating-point_format .. _32 bits: https://en.wikipedia.org/wiki/Single-precision_floating-point_format asn1tools-0.169.0/examples/programming_types/all_types.asn000066400000000000000000000012521524544274600237120ustar00rootroot00000000000000-- -- Same as the fictitious Foo protocol found in the asn1tools -- README.rst, but using programming types instead of the built-in -- ASN.1 types. -- AllTypes DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Int8, Int16, Int32, Int64, Uint8, Uint16, Uint32, Uint64, Float, Double, Bool, String, Bytes FROM ProgrammingTypes; Struct ::= SEQUENCE { int8 Int8, int16 Int16, int32 Int32, int64 Int64, uint8 Uint8, uint16 Uint16, uint32 Uint32, uint64 Uint64, float Float, double Double, bool Bool, string String, bytes Bytes } END asn1tools-0.169.0/examples/programming_types/main.py000066400000000000000000000055321524544274600225160ustar00rootroot00000000000000#!/usr/bin/env python """Example execution: $ ./main.py Encoding and decoding a question found in my protocol. Encoded: 300e8001018109497320312b313d333f Decoded: {'id': 1, 'question': 'Is 1+1=3?'} Comparing OER encoding to struct pack, as they are similar for defined programming types. OER encoded: fcfffdfffffffeffffffffffffffff01000200000003000000000000000440a00000c025000000000000ff084120737472696e67021122 Struct packed: fcfffdfffffffeffffffffffffffff01000200000003000000000000000440a00000c025000000000000ff084120737472696e67021122 OER encoded and struct packed are equal. $ """ import os import binascii import struct import asn1tools SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) PROGRAMMING_TYPES_ASN_PATH = os.path.realpath( os.path.join(SCRIPT_DIR, 'programming_types.asn')) print('Encoding and decoding a question found in my protocol.') print() MY_PROTOCOL_ASN_PATH = os.path.realpath( os.path.join(SCRIPT_DIR, 'my_protocol.asn')) my_protocol = asn1tools.compile_files([ MY_PROTOCOL_ASN_PATH, PROGRAMMING_TYPES_ASN_PATH ]) encoded = my_protocol.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'}) print('Encoded:', binascii.hexlify(encoded).decode('ascii')) decoded = my_protocol.decode('Question', encoded) print('Decoded:', decoded) print() print('Comparing OER encoding to struct pack, as they are similar ' 'for defined programming types.') print() ALL_TYPES_ASN_PATH = os.path.realpath( os.path.join(SCRIPT_DIR, 'all_types.asn')) all_types = asn1tools.compile_files([ ALL_TYPES_ASN_PATH, PROGRAMMING_TYPES_ASN_PATH ], 'oer') data = { 'int8': -4, 'int16': -3, 'int32': -2, 'int64': -1, 'uint8': 1, 'uint16': 2, 'uint32': 3, 'uint64': 4, 'float': 5.0, 'double': -10.5, 'bool': True, 'string': 'A string', 'bytes': b'\x11\x22' } encoded = all_types.encode('Struct', data) print('OER encoded:') print(binascii.hexlify(encoded).decode('ascii')) string_length = len(data['string'].encode('ascii')) bytes_length = len(data['bytes']) fmt = '>bhiqBHIQfdBB{}sB{}s'.format(string_length, bytes_length) packed = struct.pack(fmt, data['int8'], data['int16'], data['int32'], data['int64'], data['uint8'], data['uint16'], data['uint32'], data['uint64'], data['float'], data['double'], 255 if data['bool'] else 0, string_length, data['string'].encode('ascii'), bytes_length, data['bytes']) print('Struct packed:') print(binascii.hexlify(packed).decode('ascii')) if encoded == packed: print('OER encoded and struct packed are equal.') asn1tools-0.169.0/examples/programming_types/my_protocol.asn000066400000000000000000000006251524544274600242670ustar00rootroot00000000000000-- -- Same as the fictitious Foo protocol found in the asn1tools -- README.rst, but using programming types instead of the built-in -- ASN.1 types. -- MyProtocol DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Int32, Bool, String FROM ProgrammingTypes; Question ::= SEQUENCE { id Int32, question String } Answer ::= SEQUENCE { id Int32, answer Bool } END asn1tools-0.169.0/examples/programming_types/programming_types.asn000066400000000000000000000020351524544274600254640ustar00rootroot00000000000000-- -- Types often found in programming languages. -- ProgrammingTypes DEFINITIONS AUTOMATIC TAGS ::= BEGIN Int8 ::= INTEGER (-128..127) Int16 ::= INTEGER (-32768..32767) Int32 ::= INTEGER (-2147483648..2147483647) Int64 ::= INTEGER (-9223372036854775808..9223372036854775807) Uint8 ::= INTEGER (0..255) Uint16 ::= INTEGER (0..65535) Uint32 ::= INTEGER (0..4294967295) Uint64 ::= INTEGER (0..18446744073709551615) -- Single-precision (32 bits) floating point number, also known as -- binary32. Float ::= REAL (WITH COMPONENTS { mantissa (-16777215..16777215), base (2), exponent (-149..104) }) -- Double-precision (64 bits) floating point number, also known as -- binary64. Double ::= REAL (WITH COMPONENTS { mantissa (-9007199254740991..9007199254740991), base (2), exponent (-1074..971) }) Bool ::= BOOLEAN -- UTF-8 or 7-bit ASCII String ::= UTF8String Bytes ::= OCTET STRING END asn1tools-0.169.0/examples/x509_pem.py000077500000000000000000000037411524544274600173750ustar00rootroot00000000000000#!/usr/bin/env python """Decode an X509 certificate. """ from __future__ import print_function import os import base64 import asn1tools SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) RFC5280_ASN_PATH = os.path.join(SCRIPT_DIR, '..', 'tests', 'files', 'ietf', 'rfc5280.asn') CERTIFICATE_PEM = '''\ -----BEGIN CERTIFICATE----- MIIDCjCCAfICCQCoXfSQydXTczANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQGEwJT RTETMBEGA1UECAwKU29tZS1TdGF0ZTEOMAwGA1UECgwFU2ltYmExEzARBgNVBAMM CmZvb2Jhci5vcmcwHhcNMTcwMTA3MTgxOTQ3WhcNMTgwMTA3MTgxOTQ3WjBHMQsw CQYDVQQGEwJTRTETMBEGA1UECAwKU29tZS1TdGF0ZTEOMAwGA1UECgwFU2ltYmEx EzARBgNVBAMMCmZvb2Jhci5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQDugoc9amynDB/ODJzh2aqB6cnubSJEPlgB87jNG0akcbmUFt6BhPhMPSoP esHWl5OWscoga0cKrPURmMVVhfaeZLQGmrv5N4/liVlwae1n0gUEruX4d6MqSSDW 3C/WKjCn647udZwyzCvyrvPOq0qAzaxR4EFRdwjSEPO5sDw2zxeTjGW2WxaH9PEu C8vaNqTsLYl3YBkR3zVCbuQXTQhStsv3gT4Yhz2wJpY0yyWyDiaBkGKpdxJQiNAd x5JKSqtRshlYZM3+cdKLywNoYUnezp6Wm4mzz09TCFv+esJ0h7/6pMdVjhxLsAg5 ZbZyrtNIapN07AjIJS4qjkJ/HUC3AgMBAAEwDQYJKoZIhvcNAQELBQADggEBAGHS U5AvDESzTNoak5HHx166bp5+bvECvJg45GMDGhqKeFoOlR34u2b+wyTm/piz3nYJ 12kn+BbG/PwGfndL0kZYRz46fY8Rf+MxCFfcglweDJhA6ULNpera11OC35Q/lKn5 M6w6eQkZMB4VqwigvDGHGpXRTIhJHHoR2VFBFGoPTLrXilChUpiXi9DmuYXJ/19x sxOVwvvO/m/6g68G+uZYUoCsQsKllM2fgdNLTzbYvnFtsq5QnZS8m7CoZgEy2c3m VrrPsfwmyhwejDawjz2epSLNXaaDeSz4g1cQes+oehaA1IwFfKhb9tdiWUm48VuU oaFZ8e1HofYUy+65pws= -----END CERTIFICATE-----\ ''' certificate = CERTIFICATE_PEM.splitlines()[1:-1] certificate = ''.join(certificate) certificate = base64.b64decode(certificate) rfc5280_der = asn1tools.compile_files(RFC5280_ASN_PATH, codec='der') rfc5280_gser = asn1tools.compile_files(RFC5280_ASN_PATH, codec='gser') decoded = rfc5280_der.decode('Certificate', certificate) encoded = rfc5280_gser.encode('Certificate', decoded, indent=4) print(encoded.decode('ascii')) asn1tools-0.169.0/requirements.txt000066400000000000000000000003121524544274600171070ustar00rootroot00000000000000pyparsing>=3.1.2 codespell pyasn1 asn1crypto libsnmp pysnmp protobuf prompt_toolkit pycodestyle setuptools bitstruct diskcache humanfriendly mock ; python_version < '3.0' nala ; python_version >= '3.6' asn1tools-0.169.0/setup.cfg000066400000000000000000000000731524544274600154500ustar00rootroot00000000000000[pycodestyle] max-line-length = 90 ignore = E221,E129,W503 asn1tools-0.169.0/setup.py000077500000000000000000000022171524544274600153460ustar00rootroot00000000000000#!/usr/bin/env python from setuptools import setup from setuptools import find_packages import re def find_version(): return re.search(r"^__version__ = '(.*)'$", open('asn1tools/version.py', 'r').read(), re.MULTILINE).group(1) setup(name='asn1tools', version=find_version(), description='ASN.1 parsing, encoding and decoding.', long_description=open('README.rst', 'r').read(), author='Erik Moqvist', author_email='erik.moqvist@gmail.com', license='MIT', classifiers=[ 'License :: OSI Approved :: MIT License', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 3', ], keywords=['ASN.1', 'asn1'], url='https://github.com/eerimoq/asn1tools', packages=find_packages(exclude=['tests']), install_requires=[ 'pyparsing>=3.1.2', 'bitstruct' ], extras_require={ 'shell': ['prompt_toolkit'], 'cache': ['diskcache'] }, test_suite="tests", entry_points={ 'console_scripts': ['asn1tools=asn1tools.__init__:_main'] }) asn1tools-0.169.0/tests/000077500000000000000000000000001524544274600147715ustar00rootroot00000000000000asn1tools-0.169.0/tests/Makefile000066400000000000000000000005711524544274600164340ustar00rootroot00000000000000TESTS += test_oer.c TESTS += test_uper.c INC += files/c_source SRC += files/c_source/oer.c SRC += files/c_source/c_source-minus.c SRC += files/c_source/uper.c SRC += files/c_source/boolean_uper.c SRC += files/c_source/octet_string_uper.c CFLAGS += -Wall CFLAGS += -Wextra CFLAGS += -Wpedantic CFLAGS += -Wsign-conversion CFLAGS += -Wshadow CFLAGS += -Werror include test.mk asn1tools-0.169.0/tests/README.rst000066400000000000000000000026441524544274600164660ustar00rootroot00000000000000Unit tests ========== There are a bunch of unit tests to ensure a decent quality of asn1tools. Below is a short description of each test suite. test_{ber,der,gser,jer,oer,per,uper,xer}.py ------------------------------------------- Codec specific encoding and decoding tests, as the codecs have different sets of visible constraints which affects the encoding. PER/UPER/OER uses constraints to make a compact encoding, while XER/JER/BER/DER/GSER does not. The idea is to test relevant constructs for each codec. test_codecs_consistency.py -------------------------- Tests that all codecs have a common behaviour. Lately common/basic ASN.1 constructs are encoded and decoded for all codecs in the same file. The plan is to create a new file, test_all_codecs.py, and move the encoding/decoding tests there. test_parse.py ------------- This file tests the frontend parser module, and verifies that the ASN.1-files are correctly converted to the internal Python format. test_compile.py --------------- Tests the pre processing compilation step and various compilation errors that are codec independent. test_command_line.py -------------------- Tests the command line interface. test_constraints_checker.py --------------------------- Tests the constraints checker module. test_type_checker.py -------------------- Tests the type checker module. test_codecs.py -------------- Tests various utility functions in the codecs module. asn1tools-0.169.0/tests/__init__.py000066400000000000000000000000001524544274600170700ustar00rootroot00000000000000asn1tools-0.169.0/tests/files/000077500000000000000000000000001524544274600160735ustar00rootroot00000000000000asn1tools-0.169.0/tests/files/3gpp/000077500000000000000000000000001524544274600167445ustar00rootroot00000000000000asn1tools-0.169.0/tests/files/3gpp/lpp_14_3_0.asn000066400000000000000000003262301524544274600212150ustar00rootroot00000000000000LPP-PDU-Definitions { itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) eps-Access (21) modules (3) lpp (7) version1 (1) lpp-PDU-Definitions (1) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN LPP-Message ::= SEQUENCE { transactionID LPP-TransactionID OPTIONAL, -- Need ON endTransaction BOOLEAN, sequenceNumber SequenceNumber OPTIONAL, -- Need ON acknowledgement Acknowledgement OPTIONAL, -- Need ON lpp-MessageBody LPP-MessageBody OPTIONAL -- Need ON } SequenceNumber ::= INTEGER (0..255) Acknowledgement ::= SEQUENCE { ackRequested BOOLEAN, ackIndicator SequenceNumber OPTIONAL } LPP-MessageBody ::= CHOICE { c1 CHOICE { requestCapabilities RequestCapabilities, provideCapabilities ProvideCapabilities, requestAssistanceData RequestAssistanceData, provideAssistanceData ProvideAssistanceData, requestLocationInformation RequestLocationInformation, provideLocationInformation ProvideLocationInformation, abort Abort, error Error, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL, spare0 NULL }, messageClassExtension SEQUENCE {} } LPP-TransactionID ::= SEQUENCE { initiator Initiator, transactionNumber TransactionNumber, ... } Initiator ::= ENUMERATED { locationServer, targetDevice, ... } TransactionNumber ::= INTEGER (0..255) RequestCapabilities ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { requestCapabilities-r9 RequestCapabilities-r9-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RequestCapabilities-r9-IEs ::= SEQUENCE { commonIEsRequestCapabilities CommonIEsRequestCapabilities OPTIONAL, -- Need ON a-gnss-RequestCapabilities A-GNSS-RequestCapabilities OPTIONAL, -- Need ON otdoa-RequestCapabilities OTDOA-RequestCapabilities OPTIONAL, -- Need ON ecid-RequestCapabilities ECID-RequestCapabilities OPTIONAL, -- Need ON epdu-RequestCapabilities EPDU-Sequence OPTIONAL, -- Need ON ..., [[ sensor-RequestCapabilities-r13 Sensor-RequestCapabilities-r13 OPTIONAL, -- Need ON tbs-RequestCapabilities-r13 TBS-RequestCapabilities-r13 OPTIONAL, -- Need ON wlan-RequestCapabilities-r13 WLAN-RequestCapabilities-r13 OPTIONAL, -- Need ON bt-RequestCapabilities-r13 BT-RequestCapabilities-r13 OPTIONAL -- Need ON ]] } ProvideCapabilities ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { provideCapabilities-r9 ProvideCapabilities-r9-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } ProvideCapabilities-r9-IEs ::= SEQUENCE { commonIEsProvideCapabilities CommonIEsProvideCapabilities OPTIONAL, a-gnss-ProvideCapabilities A-GNSS-ProvideCapabilities OPTIONAL, otdoa-ProvideCapabilities OTDOA-ProvideCapabilities OPTIONAL, ecid-ProvideCapabilities ECID-ProvideCapabilities OPTIONAL, epdu-ProvideCapabilities EPDU-Sequence OPTIONAL, ..., [[ sensor-ProvideCapabilities-r13 Sensor-ProvideCapabilities-r13 OPTIONAL, tbs-ProvideCapabilities-r13 TBS-ProvideCapabilities-r13 OPTIONAL, wlan-ProvideCapabilities-r13 WLAN-ProvideCapabilities-r13 OPTIONAL, bt-ProvideCapabilities-r13 BT-ProvideCapabilities-r13 OPTIONAL ]] } RequestAssistanceData ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { requestAssistanceData-r9 RequestAssistanceData-r9-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RequestAssistanceData-r9-IEs ::= SEQUENCE { commonIEsRequestAssistanceData CommonIEsRequestAssistanceData OPTIONAL, a-gnss-RequestAssistanceData A-GNSS-RequestAssistanceData OPTIONAL, otdoa-RequestAssistanceData OTDOA-RequestAssistanceData OPTIONAL, epdu-RequestAssistanceData EPDU-Sequence OPTIONAL, ..., [[ sensor-RequestAssistanceData-r14 Sensor-RequestAssistanceData-r14 OPTIONAL, tbs-RequestAssistanceData-r14 TBS-RequestAssistanceData-r14 OPTIONAL, wlan-RequestAssistanceData-r14 WLAN-RequestAssistanceData-r14 OPTIONAL ]] } ProvideAssistanceData ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { provideAssistanceData-r9 ProvideAssistanceData-r9-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } ProvideAssistanceData-r9-IEs ::= SEQUENCE { commonIEsProvideAssistanceData CommonIEsProvideAssistanceData OPTIONAL, -- Need ON a-gnss-ProvideAssistanceData A-GNSS-ProvideAssistanceData OPTIONAL, -- Need ON otdoa-ProvideAssistanceData OTDOA-ProvideAssistanceData OPTIONAL, -- Need ON epdu-Provide-Assistance-Data EPDU-Sequence OPTIONAL, -- Need ON ..., [[ sensor-ProvideAssistanceData-r14 Sensor-ProvideAssistanceData-r14 OPTIONAL, -- Need ON tbs-ProvideAssistanceData-r14 TBS-ProvideAssistanceData-r14 OPTIONAL, -- Need ON wlan-ProvideAssistanceData-r14 WLAN-ProvideAssistanceData-r14 OPTIONAL -- Need ON ]] } RequestLocationInformation ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { requestLocationInformation-r9 RequestLocationInformation-r9-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RequestLocationInformation-r9-IEs ::= SEQUENCE { commonIEsRequestLocationInformation CommonIEsRequestLocationInformation OPTIONAL, -- Need ON a-gnss-RequestLocationInformation A-GNSS-RequestLocationInformation OPTIONAL, -- Need ON otdoa-RequestLocationInformation OTDOA-RequestLocationInformation OPTIONAL, -- Need ON ecid-RequestLocationInformation ECID-RequestLocationInformation OPTIONAL, -- Need ON epdu-RequestLocationInformation EPDU-Sequence OPTIONAL, -- Need ON ..., [[ sensor-RequestLocationInformation-r13 Sensor-RequestLocationInformation-r13 OPTIONAL, -- Need ON tbs-RequestLocationInformation-r13 TBS-RequestLocationInformation-r13 OPTIONAL, -- Need ON wlan-RequestLocationInformation-r13 WLAN-RequestLocationInformation-r13 OPTIONAL, -- Need ON bt-RequestLocationInformation-r13 BT-RequestLocationInformation-r13 OPTIONAL -- Need ON ]] } ProvideLocationInformation ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { provideLocationInformation-r9 ProvideLocationInformation-r9-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } ProvideLocationInformation-r9-IEs ::= SEQUENCE { commonIEsProvideLocationInformation CommonIEsProvideLocationInformation OPTIONAL, a-gnss-ProvideLocationInformation A-GNSS-ProvideLocationInformation OPTIONAL, otdoa-ProvideLocationInformation OTDOA-ProvideLocationInformation OPTIONAL, ecid-ProvideLocationInformation ECID-ProvideLocationInformation OPTIONAL, epdu-ProvideLocationInformation EPDU-Sequence OPTIONAL, ..., [[ sensor-ProvideLocationInformation-r13 Sensor-ProvideLocationInformation-r13 OPTIONAL, tbs-ProvideLocationInformation-r13 TBS-ProvideLocationInformation-r13 OPTIONAL, wlan-ProvideLocationInformation-r13 WLAN-ProvideLocationInformation-r13 OPTIONAL, bt-ProvideLocationInformation-r13 BT-ProvideLocationInformation-r13 OPTIONAL ]] } Abort ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { abort-r9 Abort-r9-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } Abort-r9-IEs ::= SEQUENCE { commonIEsAbort CommonIEsAbort OPTIONAL, -- Need ON ..., epdu-Abort EPDU-Sequence OPTIONAL -- Need ON } Error ::= CHOICE { error-r9 Error-r9-IEs, criticalExtensionsFuture SEQUENCE {} } Error-r9-IEs ::= SEQUENCE { commonIEsError CommonIEsError OPTIONAL, -- Need ON ..., epdu-Error EPDU-Sequence OPTIONAL -- Need ON } AccessTypes ::= SEQUENCE { accessTypes BIT STRING { eutra (0), utra (1), gsm (2), nb-iot (3) } (SIZE (1..8)), ... } ARFCN-ValueEUTRA ::= INTEGER (0..maxEARFCN) ARFCN-ValueEUTRA-v9a0 ::= INTEGER (maxEARFCN-Plus1..maxEARFCN2) ARFCN-ValueEUTRA-r14 ::= INTEGER (0..maxEARFCN2) maxEARFCN INTEGER ::= 65535 -- Maximum value of EUTRA carrier frequency maxEARFCN-Plus1 INTEGER ::= 65536 -- Lowest value extended EARFCN range maxEARFCN2 INTEGER ::= 262143 -- Highest value extended EARFCN range ARFCN-ValueUTRA ::= INTEGER (0..16383) CarrierFreq-NB-r14 ::= SEQUENCE { carrierFreq-r14 ARFCN-ValueEUTRA-r14, carrierFreqOffset-r14 CarrierFreqOffsetNB-r14 OPTIONAL, ... } CarrierFreqOffsetNB-r14 ::= ENUMERATED { v-10, v-9, v-8, v-7, v-6, v-5, v-4, v-3, v-2, v-1, v-0dot5, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9 } CellGlobalIdEUTRA-AndUTRA ::= SEQUENCE { plmn-Identity SEQUENCE { mcc SEQUENCE (SIZE (3)) OF INTEGER (0..9), mnc SEQUENCE (SIZE (2..3)) OF INTEGER (0..9) }, cellIdentity CHOICE { eutra BIT STRING (SIZE (28)), utra BIT STRING (SIZE (32)) }, ... } CellGlobalIdGERAN ::= SEQUENCE { plmn-Identity SEQUENCE { mcc SEQUENCE (SIZE (3)) OF INTEGER (0..9), mnc SEQUENCE (SIZE (2..3)) OF INTEGER (0..9) }, locationAreaCode BIT STRING (SIZE (16)), cellIdentity BIT STRING (SIZE (16)), ... } ECGI ::= SEQUENCE { mcc SEQUENCE (SIZE (3)) OF INTEGER (0..9), mnc SEQUENCE (SIZE (2..3)) OF INTEGER (0..9), cellidentity BIT STRING (SIZE (28)) } Ellipsoid-Point ::= SEQUENCE { latitudeSign ENUMERATED {north, south}, degreesLatitude INTEGER (0..8388607), -- 23 bit field degreesLongitude INTEGER (-8388608..8388607) -- 24 bit field } Ellipsoid-PointWithUncertaintyCircle ::= SEQUENCE { latitudeSign ENUMERATED {north, south}, degreesLatitude INTEGER (0..8388607), -- 23 bit field degreesLongitude INTEGER (-8388608..8388607), -- 24 bit field uncertainty INTEGER (0..127) } EllipsoidPointWithUncertaintyEllipse ::= SEQUENCE { latitudeSign ENUMERATED {north, south}, degreesLatitude INTEGER (0..8388607), -- 23 bit field degreesLongitude INTEGER (-8388608..8388607), -- 24 bit field uncertaintySemiMajor INTEGER (0..127), uncertaintySemiMinor INTEGER (0..127), orientationMajorAxis INTEGER (0..179), confidence INTEGER (0..100) } EllipsoidPointWithAltitude ::= SEQUENCE { latitudeSign ENUMERATED {north, south}, degreesLatitude INTEGER (0..8388607), -- 23 bit field degreesLongitude INTEGER (-8388608..8388607), -- 24 bit field altitudeDirection ENUMERATED {height, depth}, altitude INTEGER (0..32767) -- 15 bit field } EllipsoidPointWithAltitudeAndUncertaintyEllipsoid ::= SEQUENCE { latitudeSign ENUMERATED {north, south}, degreesLatitude INTEGER (0..8388607), -- 23 bit field degreesLongitude INTEGER (-8388608..8388607), -- 24 bit field altitudeDirection ENUMERATED {height, depth}, altitude INTEGER (0..32767), -- 15 bit field uncertaintySemiMajor INTEGER (0..127), uncertaintySemiMinor INTEGER (0..127), orientationMajorAxis INTEGER (0..179), uncertaintyAltitude INTEGER (0..127), confidence INTEGER (0..100) } EllipsoidArc ::= SEQUENCE { latitudeSign ENUMERATED {north, south}, degreesLatitude INTEGER (0..8388607), -- 23 bit field degreesLongitude INTEGER (-8388608..8388607), -- 24 bit field innerRadius INTEGER (0..65535), -- 16 bit field, uncertaintyRadius INTEGER (0..127), offsetAngle INTEGER (0..179), includedAngle INTEGER (0..179), confidence INTEGER (0..100) } EPDU-Sequence ::= SEQUENCE (SIZE (1..maxEPDU)) OF EPDU maxEPDU INTEGER ::= 16 EPDU ::= SEQUENCE { ePDU-Identifier EPDU-Identifier, ePDU-Body EPDU-Body } EPDU-Identifier ::= SEQUENCE { ePDU-ID EPDU-ID, ePDU-Name EPDU-Name OPTIONAL, ... } EPDU-ID ::= INTEGER (1..256) EPDU-Name ::= VisibleString (SIZE (1..32)) EPDU-Body ::= OCTET STRING HorizontalVelocity ::= SEQUENCE { bearing INTEGER(0..359), horizontalSpeed INTEGER(0..2047) } HorizontalWithVerticalVelocity ::= SEQUENCE { bearing INTEGER(0..359), horizontalSpeed INTEGER(0..2047), verticalDirection ENUMERATED{upward, downward}, verticalSpeed INTEGER(0..255) } HorizontalVelocityWithUncertainty ::= SEQUENCE { bearing INTEGER(0..359), horizontalSpeed INTEGER(0..2047), uncertaintySpeed INTEGER(0..255) } HorizontalWithVerticalVelocityAndUncertainty ::= SEQUENCE { bearing INTEGER(0..359), horizontalSpeed INTEGER(0..2047), verticalDirection ENUMERATED{upward, downward}, verticalSpeed INTEGER(0..255), horizontalUncertaintySpeed INTEGER(0..255), verticalUncertaintySpeed INTEGER(0..255) } LocationCoordinateTypes ::= SEQUENCE { ellipsoidPoint BOOLEAN, ellipsoidPointWithUncertaintyCircle BOOLEAN, ellipsoidPointWithUncertaintyEllipse BOOLEAN, polygon BOOLEAN, ellipsoidPointWithAltitude BOOLEAN, ellipsoidPointWithAltitudeAndUncertaintyEllipsoid BOOLEAN, ellipsoidArc BOOLEAN, ... } Polygon ::= SEQUENCE (SIZE (3..15)) OF PolygonPoints PolygonPoints ::= SEQUENCE { latitudeSign ENUMERATED {north, south}, degreesLatitude INTEGER (0..8388607), -- 23 bit field degreesLongitude INTEGER (-8388608..8388607) -- 24 bit field } PositioningModes ::= SEQUENCE { posModes BIT STRING { standalone (0), ue-based (1), ue-assisted (2) } (SIZE (1..8)), ... } VelocityTypes ::= SEQUENCE { horizontalVelocity BOOLEAN, horizontalWithVerticalVelocity BOOLEAN, horizontalVelocityWithUncertainty BOOLEAN, horizontalWithVerticalVelocityAndUncertainty BOOLEAN, ... } CommonIEsRequestCapabilities ::= SEQUENCE { ... } CommonIEsProvideCapabilities ::= SEQUENCE { ... } CommonIEsRequestAssistanceData ::= SEQUENCE { primaryCellID ECGI OPTIONAL, -- Cond EUTRA ... } CommonIEsProvideAssistanceData ::= SEQUENCE { ... } CommonIEsRequestLocationInformation ::= SEQUENCE { locationInformationType LocationInformationType, triggeredReporting TriggeredReportingCriteria OPTIONAL, -- Cond ECID periodicalReporting PeriodicalReportingCriteria OPTIONAL, -- Need ON additionalInformation AdditionalInformation OPTIONAL, -- Need ON qos QoS OPTIONAL, -- Need ON environment Environment OPTIONAL, -- Need ON locationCoordinateTypes LocationCoordinateTypes OPTIONAL, -- Need ON velocityTypes VelocityTypes OPTIONAL, -- Need ON ..., [[ messageSizeLimitNB-r14 MessageSizeLimitNB-r14 OPTIONAL -- Need ON ]] } LocationInformationType ::= ENUMERATED { locationEstimateRequired, locationMeasurementsRequired, locationEstimatePreferred, locationMeasurementsPreferred, ... } PeriodicalReportingCriteria ::= SEQUENCE { reportingAmount ENUMERATED { ra1, ra2, ra4, ra8, ra16, ra32, ra64, ra-Infinity } DEFAULT ra-Infinity, reportingInterval ENUMERATED { noPeriodicalReporting, ri0-25, ri0-5, ri1, ri2, ri4, ri8, ri16, ri32, ri64 } } TriggeredReportingCriteria ::= SEQUENCE { cellChange BOOLEAN, reportingDuration ReportingDuration, ... } ReportingDuration ::= INTEGER (0..255) AdditionalInformation ::= ENUMERATED { onlyReturnInformationRequested, mayReturnAditionalInformation, ... } QoS ::= SEQUENCE { horizontalAccuracy HorizontalAccuracy OPTIONAL, -- Need ON verticalCoordinateRequest BOOLEAN, verticalAccuracy VerticalAccuracy OPTIONAL, -- Need ON responseTime ResponseTime OPTIONAL, -- Need ON velocityRequest BOOLEAN, ..., [[ responseTimeNB-r14 ResponseTimeNB-r14 OPTIONAL -- Need ON ]] } HorizontalAccuracy ::= SEQUENCE { accuracy INTEGER(0..127), confidence INTEGER(0..100), ... } VerticalAccuracy ::= SEQUENCE { accuracy INTEGER(0..127), confidence INTEGER(0..100), ... } ResponseTime ::= SEQUENCE { time INTEGER (1..128), ..., [[ responseTimeEarlyFix-r12 INTEGER (1..128) OPTIONAL -- Need ON ]] } ResponseTimeNB-r14 ::= SEQUENCE { timeNB-r14 INTEGER (1..512), responseTimeEarlyFixNB-r14 INTEGER (1..512) OPTIONAL, -- Need ON ... } Environment ::= ENUMERATED { badArea, notBadArea, mixedArea, ... } MessageSizeLimitNB-r14 ::= SEQUENCE { measurementLimit-r14 INTEGER (1..512) OPTIONAL, -- Need ON ... } CommonIEsProvideLocationInformation ::= SEQUENCE { locationEstimate LocationCoordinates OPTIONAL, velocityEstimate Velocity OPTIONAL, locationError LocationError OPTIONAL, ..., [[ earlyFixReport-r12 EarlyFixReport-r12 OPTIONAL ]], [[ locationSource-r13 LocationSource-r13 OPTIONAL, locationTimestamp-r13 UTCTime OPTIONAL ]] } LocationCoordinates ::= CHOICE { ellipsoidPoint Ellipsoid-Point, ellipsoidPointWithUncertaintyCircle Ellipsoid-PointWithUncertaintyCircle, ellipsoidPointWithUncertaintyEllipse EllipsoidPointWithUncertaintyEllipse, polygon Polygon, ellipsoidPointWithAltitude EllipsoidPointWithAltitude, ellipsoidPointWithAltitudeAndUncertaintyEllipsoid EllipsoidPointWithAltitudeAndUncertaintyEllipsoid, ellipsoidArc EllipsoidArc, ... } Velocity ::= CHOICE { horizontalVelocity HorizontalVelocity, horizontalWithVerticalVelocity HorizontalWithVerticalVelocity, horizontalVelocityWithUncertainty HorizontalVelocityWithUncertainty, horizontalWithVerticalVelocityAndUncertainty HorizontalWithVerticalVelocityAndUncertainty, ... } LocationError ::= SEQUENCE { locationfailurecause LocationFailureCause, ... } LocationFailureCause ::= ENUMERATED { undefined, requestedMethodNotSupported, positionMethodFailure, periodicLocationMeasurementsNotAvailable, ... } EarlyFixReport-r12 ::= ENUMERATED { noMoreMessages, moreMessagesOnTheWay } LocationSource-r13 ::= BIT STRING { a-gnss (0), wlan (1), bt (2), tbs (3), sensor (4) } (SIZE(1..16)) CommonIEsAbort ::= SEQUENCE { abortCause ENUMERATED { undefined, stopPeriodicReporting, targetDeviceAbort, networkAbort, ... } } CommonIEsError ::= SEQUENCE { errorCause ENUMERATED { undefined, lppMessageHeaderError, lppMessageBodyError, epduError, incorrectDataValue, ... } } OTDOA-ProvideAssistanceData ::= SEQUENCE { otdoa-ReferenceCellInfo OTDOA-ReferenceCellInfo OPTIONAL, -- Need ON otdoa-NeighbourCellInfo OTDOA-NeighbourCellInfoList OPTIONAL, -- Need ON otdoa-Error OTDOA-Error OPTIONAL, -- Need ON ..., [[ otdoa-ReferenceCellInfoNB-r14 OTDOA-ReferenceCellInfoNB-r14 OPTIONAL, -- Need ON otdoa-NeighbourCellInfoNB-r14 OTDOA-NeighbourCellInfoListNB-r14 OPTIONAL -- Need ON ]] } OTDOA-ReferenceCellInfo ::= SEQUENCE { physCellId INTEGER (0..503), cellGlobalId ECGI OPTIONAL, -- Need ON earfcnRef ARFCN-ValueEUTRA OPTIONAL, -- Cond NotSameAsServ0 antennaPortConfig ENUMERATED {ports1-or-2, ports4, ... } OPTIONAL, -- Cond NotSameAsServ1 cpLength ENUMERATED { normal, extended, ... }, prsInfo PRS-Info OPTIONAL, -- Cond PRS ..., [[ earfcnRef-v9a0 ARFCN-ValueEUTRA-v9a0 OPTIONAL -- Cond NotSameAsServ2 ]], [[ tpId-r14 INTEGER (0..4095) OPTIONAL, -- Need ON cpLengthCRS-r14 ENUMERATED { normal, extended, ... } OPTIONAL, -- Cond CRS sameMBSFNconfigRef-r14 BOOLEAN OPTIONAL, -- Need ON dlBandwidth-r14 ENUMERATED {n6, n15, n25, n50, n75, n100} OPTIONAL, -- Cond NotSameAsServ3 addPRSconfigRef-r14 SEQUENCE (SIZE (1..maxAddPRSconfig-r14)) OF PRS-Info OPTIONAL -- Need ON ]] } maxAddPRSconfig-r14 INTEGER ::= 2 PRS-Info ::= SEQUENCE { prs-Bandwidth ENUMERATED { n6, n15, n25, n50, n75, n100, ... }, prs-ConfigurationIndex INTEGER (0..4095), numDL-Frames ENUMERATED {sf-1, sf-2, sf-4, sf-6, ..., sf-add-v1420}, ..., prs-MutingInfo-r9 CHOICE { po2-r9 BIT STRING (SIZE(2)), po4-r9 BIT STRING (SIZE(4)), po8-r9 BIT STRING (SIZE(8)), po16-r9 BIT STRING (SIZE(16)), ..., po32-v1420 BIT STRING (SIZE(32)), po64-v1420 BIT STRING (SIZE(64)), po128-v1420 BIT STRING (SIZE(128)), po256-v1420 BIT STRING (SIZE(256)), po512-v1420 BIT STRING (SIZE(512)), po1024-v1420 BIT STRING (SIZE(1024)) } OPTIONAL, -- Need OP [[ prsID-r14 INTEGER (0..4095) OPTIONAL, -- Need ON add-numDL-Frames-r14 INTEGER (1..160) OPTIONAL, -- Cond sf-add prsOccGroupLen-r14 ENUMERATED {g2, g4, g8, g16, g32, g64, g128,... } OPTIONAL, -- Cond Occ-Grp prsHoppingInfo-r14 CHOICE { nb2-r14 INTEGER (0.. maxAvailNarrowBands-Minus1-r14), nb4-r14 SEQUENCE (SIZE (3)) OF INTEGER (1.. maxAvailNarrowBands-Minus1-r14) } OPTIONAL -- Cond PRS-FH ]] } maxAvailNarrowBands-Minus1-r14 INTEGER ::= 15 -- Maximum number of narrowbands minus 1 OTDOA-NeighbourCellInfoList ::= SEQUENCE (SIZE (1..maxFreqLayers)) OF OTDOA-NeighbourFreqInfo OTDOA-NeighbourFreqInfo ::= SEQUENCE (SIZE (1..24)) OF OTDOA-NeighbourCellInfoElement OTDOA-NeighbourCellInfoElement ::= SEQUENCE { physCellId INTEGER (0..503), cellGlobalId ECGI OPTIONAL, -- Need ON earfcn ARFCN-ValueEUTRA OPTIONAL, -- Cond NotSameAsRef0 cpLength ENUMERATED {normal, extended, ...} OPTIONAL, -- Cond NotSameAsRef1 prsInfo PRS-Info OPTIONAL, -- Cond NotSameAsRef2 antennaPortConfig ENUMERATED {ports-1-or-2, ports-4, ...} OPTIONAL, -- Cond NotsameAsRef3 slotNumberOffset INTEGER (0..19) OPTIONAL, -- Cond NotSameAsRef4 prs-SubframeOffset INTEGER (0..1279) OPTIONAL, -- Cond InterFreq expectedRSTD INTEGER (0..16383), expectedRSTD-Uncertainty INTEGER (0..1023), ..., [[ earfcn-v9a0 ARFCN-ValueEUTRA-v9a0 OPTIONAL -- Cond NotSameAsRef5 ]], [[ tpId-r14 INTEGER (0..4095) OPTIONAL, -- Need ON prs-only-tp-r14 ENUMERATED { true } OPTIONAL, -- Cond TBS cpLengthCRS-r14 ENUMERATED { normal, extended, ... } OPTIONAL, -- Cond CRS sameMBSFNconfigNeighbour-r14 BOOLEAN OPTIONAL, -- Need ON dlBandwidth-r14 ENUMERATED {n6, n15, n25, n50, n75, n100} OPTIONAL, -- Cond NotSameAsRef6 addPRSconfigNeighbour-r14 SEQUENCE (SIZE (1..maxAddPRSconfig-r14)) OF Add-PRSconfigNeighbourElement-r14 OPTIONAL -- Need ON ]] } Add-PRSconfigNeighbourElement-r14 ::= SEQUENCE { add-prsInfo-r14 PRS-Info OPTIONAL, -- Cond NotSameAsRef7 ... } maxFreqLayers INTEGER ::= 3 OTDOA-ReferenceCellInfoNB-r14 ::= SEQUENCE { physCellIdNB-r14 INTEGER (0..503) OPTIONAL, -- Cond NoPRS-AD1 cellGlobalIdNB-r14 ECGI OPTIONAL, -- Cond NoPRS-AD2 carrierFreqRef-r14 CarrierFreq-NB-r14 OPTIONAL, -- Cond NotSameAsServ1 earfcn-r14 ARFCN-ValueEUTRA-r14 OPTIONAL, -- Cond Inband eutra-NumCRS-Ports-r14 ENUMERATED {ports1-or-2, ports4} OPTIONAL, -- Cond NoPRS-AD3 otdoa-SIB1-NB-repetitions-r14 ENUMERATED { r4, r8, r16 } OPTIONAL, -- Cond NotSameAsServ2 nprsInfo-r14 PRS-Info-NB-r14 OPTIONAL, -- Cond NPRS ... } PRS-Info-NB-r14 ::= SEQUENCE (SIZE (1..maxCarrier-r14)) OF NPRS-Info-r14 NPRS-Info-r14 ::= SEQUENCE { operationModeInfoNPRS-r14 ENUMERATED { inband, standalone }, nprs-carrier-r14 CarrierFreq-NB-r14 OPTIONAL, -- Cond Standalone/Guardband nprsSequenceInfo-r14 INTEGER (0..174) OPTIONAL, -- Cond Inband nprsID-r14 INTEGER (0..4095) OPTIONAL, -- Cond NPRS-ID partA-r14 SEQUENCE { nprsBitmap-r14 CHOICE { subframePattern10-r14 BIT STRING (SIZE (10)), subframePattern40-r14 BIT STRING (SIZE (40)) }, nprs-MutingInfoA-r14 CHOICE { po2-r14 BIT STRING (SIZE(2)), po4-r14 BIT STRING (SIZE(4)), po8-r14 BIT STRING (SIZE(8)), po16-r14 BIT STRING (SIZE(16)), ... } OPTIONAL, -- Cond MutingA ... } OPTIONAL, -- Cond PartA partB-r14 SEQUENCE { nprs-Period-r14 ENUMERATED { ms160, ms320, ms640, ms1280, ... }, nprs-startSF-r14 ENUMERATED { zero, one-eighth, two-eighths, three-eighths, four-eighths, five-eighths, six-eighths, seven-eighths, ...}, nprs-NumSF-r14 ENUMERATED { sf10, sf20, sf40, sf80, sf160, sf320, sf640, sf1280, ...}, nprs-MutingInfoB-r14 CHOICE { po2-r14 BIT STRING (SIZE(2)), po4-r14 BIT STRING (SIZE(4)), po8-r14 BIT STRING (SIZE(8)), po16-r14 BIT STRING (SIZE(16)), ... } OPTIONAL, -- Cond MutingB ... } OPTIONAL, -- Cond PartB ... } maxCarrier-r14 INTEGER ::= 5 OTDOA-NeighbourCellInfoListNB-r14 ::= SEQUENCE (SIZE (1..maxCells-r14)) OF OTDOA-NeighbourCellInfoNB-r14 OTDOA-NeighbourCellInfoNB-r14 ::= SEQUENCE { physCellIdNB-r14 INTEGER (0..503) OPTIONAL, -- Cond NoPRS-AD1 cellGlobalIdNB-r14 ECGI OPTIONAL, -- Cond NoPRS-AD2 carrierFreq-r14 CarrierFreq-NB-r14 OPTIONAL, -- Cond NotSameAsRef1 earfcn-r14 ARFCN-ValueEUTRA-r14 OPTIONAL, -- Cond Inband eutra-NumCRS-Ports-r14 ENUMERATED {ports-1-or-2, ports-4, ...} OPTIONAL, -- Cond NotsameAsRef2 otdoa-SIB1-NB-repetitions-r14 ENUMERATED { r4, r8, r16 } OPTIONAL, -- Cond NotSameAsRef3 nprsInfo-r14 PRS-Info-NB-r14 OPTIONAL, -- Cond NotsameAsRef4 nprs-slotNumberOffset-r14 INTEGER (0..19) OPTIONAL, -- Cond NotsameAsRef5 nprs-SFN-Offset-r14 INTEGER (0..63) OPTIONAL, -- Cond NotsameAsRef6 nprs-SubframeOffset-r14 INTEGER (0..1279) OPTIONAL, -- Need OP expectedRSTD-r14 INTEGER (0..16383) OPTIONAL, -- Cond NoPRS-AD3 expectedRSTD-Uncertainty-r14 INTEGER (0..1023) OPTIONAL, -- Cond NoPRS-AD3 prsNeighbourCellIndex-r14 INTEGER (1..72) OPTIONAL, -- Cond PRS-AD ... } maxCells-r14 INTEGER ::= 72 OTDOA-RequestAssistanceData ::= SEQUENCE { physCellId INTEGER (0..503), ..., [[ adType-r14 BIT STRING { prs (0), nprs (1) } (SIZE (1..8)) OPTIONAL ]] } OTDOA-ProvideLocationInformation ::= SEQUENCE { otdoaSignalMeasurementInformation OTDOA-SignalMeasurementInformation OPTIONAL, otdoa-Error OTDOA-Error OPTIONAL, ..., [[ otdoaSignalMeasurementInformation-NB-r14 OTDOA-SignalMeasurementInformation-NB-r14 OPTIONAL ]] } OTDOA-SignalMeasurementInformation ::= SEQUENCE { systemFrameNumber BIT STRING (SIZE (10)), physCellIdRef INTEGER (0..503), cellGlobalIdRef ECGI OPTIONAL, earfcnRef ARFCN-ValueEUTRA OPTIONAL, -- Cond NotSameAsRef0 referenceQuality OTDOA-MeasQuality OPTIONAL, neighbourMeasurementList NeighbourMeasurementList, ..., [[ earfcnRef-v9a0 ARFCN-ValueEUTRA-v9a0 OPTIONAL -- Cond NotSameAsRef1 ]], [[ tpIdRef-r14 INTEGER (0..4095) OPTIONAL, -- Cond ProvidedByServer0 prsIdRef-r14 INTEGER (0..4095) OPTIONAL, -- Cond ProvidedByServer1 additionalPathsRef-r14 AdditionalPathList-r14 OPTIONAL, nprsIdRef-r14 INTEGER (0..4095) OPTIONAL, -- Cond ProvidedByServer2 carrierFreqOffsetNB-Ref-r14 CarrierFreqOffsetNB-r14 OPTIONAL, -- Cond NB-IoT hyperSFN-r14 BIT STRING (SIZE (10)) OPTIONAL -- Cond H-SFN ]] } NeighbourMeasurementList ::= SEQUENCE (SIZE(1..24)) OF NeighbourMeasurementElement NeighbourMeasurementElement ::= SEQUENCE { physCellIdNeighbour INTEGER (0..503), cellGlobalIdNeighbour ECGI OPTIONAL, earfcnNeighbour ARFCN-ValueEUTRA OPTIONAL, -- Cond NotSameAsRef2 rstd INTEGER (0..12711), rstd-Quality OTDOA-MeasQuality, ..., [[ earfcnNeighbour-v9a0 ARFCN-ValueEUTRA-v9a0 OPTIONAL -- Cond NotSameAsRef3 ]], [[ tpIdNeighbour-r14 INTEGER (0..4095) OPTIONAL, -- Cond ProvidedByServer0 prsIdNeighbour-r14 INTEGER (0..4095) OPTIONAL, -- Cond ProvidedByServer1 delta-rstd-r14 INTEGER (0..5) OPTIONAL, additionalPathsNeighbour-r14 AdditionalPathList-r14 OPTIONAL, nprsIdNeighbour-r14 INTEGER (0..4095) OPTIONAL, -- Cond ProvidedByServer2 carrierFreqOffsetNB-Neighbour-r14 CarrierFreqOffsetNB-r14 OPTIONAL -- Cond NB-IoT ]] } AdditionalPathList-r14 ::= SEQUENCE (SIZE(1..maxPaths-r14)) OF AdditionalPath-r14 maxPaths-r14 INTEGER ::= 2 OTDOA-SignalMeasurementInformation-NB-r14 ::= SEQUENCE { systemFrameNumber-r14 BIT STRING (SIZE (10)), physCellIdRef-r14 INTEGER (0..503), cellGlobalIdRef-r14 ECGI OPTIONAL, earfcnRef-r14 ARFCN-ValueEUTRA-r14 OPTIONAL, -- Cond NotSameAsRef0 referenceQuality-r14 OTDOA-MeasQuality OPTIONAL, neighbourMeasurementList-r14 NeighbourMeasurementList-NB-r14, tpIdRef-r14 INTEGER (0..4095) OPTIONAL, -- Cond ProvidedByServer0 prsIdRef-r14 INTEGER (0..4095) OPTIONAL, -- Cond ProvidedByServer1 additionalPathsRef-r14 AdditionalPathList-r14 OPTIONAL, nprsIdRef-r14 INTEGER (0..4095) OPTIONAL, -- Cond ProvidedByServer2 carrierFreqOffsetNB-Ref-r14 CarrierFreqOffsetNB-r14 OPTIONAL, -- Cond NB-IoT hyperSFN-r14 BIT STRING (SIZE (10)) OPTIONAL, -- Cond H-SFN ... } NeighbourMeasurementList-NB-r14 ::= SEQUENCE (SIZE(1..24)) OF NeighbourMeasurementElement-NB-r14 NeighbourMeasurementElement-NB-r14 ::= SEQUENCE { physCellIdNeighbour-r14 INTEGER (0..503), cellGlobalIdNeighbour-r14 ECGI OPTIONAL, earfcnNeighbour-r14 ARFCN-ValueEUTRA-r14 OPTIONAL, -- Cond NotSameAsRef2 rstd-r14 INTEGER (0..12711), rstd-Quality-r14 OTDOA-MeasQuality, tpIdNeighbour-r14 INTEGER (0..4095) OPTIONAL, -- Cond ProvidedByServer0 prsIdNeighbour-r14 INTEGER (0..4095) OPTIONAL, -- Cond ProvidedByServer1 delta-rstd-r14 INTEGER (0..5) OPTIONAL, additionalPathsNeighbour-r14 AdditionalPathList-r14 OPTIONAL, nprsIdNeighbour-r14 INTEGER (0..4095) OPTIONAL, -- Cond ProvidedByServer2 carrierFreqOffsetNB-Neighbour-r14 CarrierFreqOffsetNB-r14 OPTIONAL, -- Cond NB-IoT ... } OTDOA-MeasQuality ::= SEQUENCE { error-Resolution BIT STRING (SIZE (2)), error-Value BIT STRING (SIZE (5)), error-NumSamples BIT STRING (SIZE (3)) OPTIONAL, ... } AdditionalPath-r14 ::= SEQUENCE { relativeTimeDifference-r14 INTEGER (-256..255), path-Quality-r14 OTDOA-MeasQuality OPTIONAL, ... } OTDOA-RequestLocationInformation ::= SEQUENCE { assistanceAvailability BOOLEAN, ..., [[ multipathRSTD-r14 ENUMERATED { requested } OPTIONAL, -- Need ON maxNoOfRSTDmeas-r14 INTEGER (1..32) OPTIONAL -- Need ON ]] } OTDOA-ProvideCapabilities ::= SEQUENCE { otdoa-Mode BIT STRING { ue-assisted (0), ue-assisted-NB-r14 (1) } (SIZE (1..8)), ..., supportedBandListEUTRA SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA OPTIONAL, supportedBandListEUTRA-v9a0 SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA-v9a0 OPTIONAL, interFreqRSTDmeasurement-r10 ENUMERATED { supported } OPTIONAL, additionalNeighbourCellInfoList-r10 ENUMERATED { supported } OPTIONAL, prs-id-r14 ENUMERATED { supported } OPTIONAL, tp-separation-via-muting-r14 ENUMERATED { supported } OPTIONAL, additional-prs-config-r14 ENUMERATED { supported } OPTIONAL, prs-based-tbs-r14 ENUMERATED { supported } OPTIONAL, additionalPathsReport-r14 ENUMERATED { supported } OPTIONAL, densePrsConfig-r14 ENUMERATED { supported } OPTIONAL, maxSupportedPrsBandwidth-r14 ENUMERATED { n6, n15, n25, n50, n75, n100, ...} OPTIONAL, prsOccGroup-r14 ENUMERATED { supported } OPTIONAL, prsFrequencyHopping-r14 ENUMERATED { supported } OPTIONAL, maxSupportedPrsConfigs-r14 ENUMERATED { c2, c3 } OPTIONAL, periodicalReporting-r14 ENUMERATED { supported } OPTIONAL, multiPrbNprs-r14 ENUMERATED { supported } OPTIONAL, idleStateForMeasurements-r14 ENUMERATED { required } OPTIONAL, numberOfRXantennas-r14 ENUMERATED { rx1, ... } OPTIONAL } maxBands INTEGER ::= 64 SupportedBandEUTRA ::= SEQUENCE { bandEUTRA INTEGER (1..maxFBI) } SupportedBandEUTRA-v9a0 ::= SEQUENCE { bandEUTRA-v9a0 INTEGER (maxFBI-Plus1..maxFBI2) OPTIONAL } maxFBI INTEGER ::= 64 -- Maximum value of frequency band indicator maxFBI-Plus1 INTEGER ::= 65 -- lowest value extended FBI range maxFBI2 INTEGER ::= 256 -- highest value extended FBI range OTDOA-RequestCapabilities ::= SEQUENCE { ... } OTDOA-Error ::= CHOICE { locationServerErrorCauses OTDOA-LocationServerErrorCauses, targetDeviceErrorCauses OTDOA-TargetDeviceErrorCauses, ... } OTDOA-LocationServerErrorCauses ::= SEQUENCE { cause ENUMERATED { undefined, assistanceDataNotSupportedByServer, assistanceDataSupportedButCurrentlyNotAvailableByServer, ... }, ... } OTDOA-TargetDeviceErrorCauses ::= SEQUENCE { cause ENUMERATED { undefined, assistance-data-missing, unableToMeasureReferenceCell, unableToMeasureAnyNeighbourCell, attemptedButUnableToMeasureSomeNeighbourCells, ... }, ... } A-GNSS-ProvideAssistanceData ::= SEQUENCE { gnss-CommonAssistData GNSS-CommonAssistData OPTIONAL, -- Need ON gnss-GenericAssistData GNSS-GenericAssistData OPTIONAL, -- Need ON gnss-Error A-GNSS-Error OPTIONAL, -- Need ON ... } GNSS-CommonAssistData ::= SEQUENCE { gnss-ReferenceTime GNSS-ReferenceTime OPTIONAL, -- Need ON gnss-ReferenceLocation GNSS-ReferenceLocation OPTIONAL, -- Need ON gnss-IonosphericModel GNSS-IonosphericModel OPTIONAL, -- Need ON gnss-EarthOrientationParameters GNSS-EarthOrientationParameters OPTIONAL, -- Need ON ... } GNSS-GenericAssistData ::= SEQUENCE (SIZE (1..16)) OF GNSS-GenericAssistDataElement GNSS-GenericAssistDataElement ::= SEQUENCE { gnss-ID GNSS-ID, sbas-ID SBAS-ID OPTIONAL, -- Cond GNSS-ID-SBAS gnss-TimeModels GNSS-TimeModelList OPTIONAL, -- Need ON gnss-DifferentialCorrections GNSS-DifferentialCorrections OPTIONAL, -- Need ON gnss-NavigationModel GNSS-NavigationModel OPTIONAL, -- Need ON gnss-RealTimeIntegrity GNSS-RealTimeIntegrity OPTIONAL, -- Need ON gnss-DataBitAssistance GNSS-DataBitAssistance OPTIONAL, -- Need ON gnss-AcquisitionAssistance GNSS-AcquisitionAssistance OPTIONAL, -- Need ON gnss-Almanac GNSS-Almanac OPTIONAL, -- Need ON gnss-UTC-Model GNSS-UTC-Model OPTIONAL, -- Need ON gnss-AuxiliaryInformation GNSS-AuxiliaryInformation OPTIONAL, -- Need ON ..., [[ bds-DifferentialCorrections-r12 BDS-DifferentialCorrections-r12 OPTIONAL, -- Cond GNSS-ID-BDS bds-GridModel-r12 BDS-GridModelParameter-r12 OPTIONAL -- Cond GNSS-ID-BDS ]] } GNSS-ReferenceTime ::= SEQUENCE { gnss-SystemTime GNSS-SystemTime, referenceTimeUnc INTEGER (0..127) OPTIONAL, -- Cond noFTA gnss-ReferenceTimeForCells SEQUENCE (SIZE (1..16)) OF GNSS-ReferenceTimeForOneCell OPTIONAL, -- Need ON ... } GNSS-ReferenceTimeForOneCell ::= SEQUENCE { networkTime NetworkTime, referenceTimeUnc INTEGER (0..127), bsAlign ENUMERATED {true} OPTIONAL, ... } GNSS-SystemTime ::= SEQUENCE { gnss-TimeID GNSS-ID, gnss-DayNumber INTEGER (0..32767), gnss-TimeOfDay INTEGER (0..86399), gnss-TimeOfDayFrac-msec INTEGER (0..999) OPTIONAL, -- Need ON notificationOfLeapSecond BIT STRING (SIZE(2)) OPTIONAL, -- Cond gnss-TimeID-glonass gps-TOW-Assist GPS-TOW-Assist OPTIONAL, -- Cond gnss-TimeID-gps ... } GPS-TOW-Assist ::= SEQUENCE (SIZE(1..64)) OF GPS-TOW-AssistElement GPS-TOW-AssistElement ::= SEQUENCE { satelliteID INTEGER (1..64), tlmWord INTEGER (0..16383), antiSpoof INTEGER (0..1), alert INTEGER (0..1), tlmRsvdBits INTEGER (0..3), ... } NetworkTime ::= SEQUENCE { secondsFromFrameStructureStart INTEGER(0..12533), fractionalSecondsFromFrameStructureStart INTEGER(0..3999999), frameDrift INTEGER (-64..63) OPTIONAL, -- Cond GNSSsynch cellID CHOICE { eUTRA SEQUENCE { physCellId INTEGER (0..503), cellGlobalIdEUTRA CellGlobalIdEUTRA-AndUTRA OPTIONAL, -- Need ON earfcn ARFCN-ValueEUTRA, ..., [[ earfcn-v9a0 ARFCN-ValueEUTRA-v9a0 OPTIONAL -- Cond EARFCN-max ]] }, uTRA SEQUENCE { mode CHOICE { fdd SEQUENCE { primary-CPICH-Info INTEGER (0..511), ... }, tdd SEQUENCE { cellParameters INTEGER (0..127), ... } }, cellGlobalIdUTRA CellGlobalIdEUTRA-AndUTRA OPTIONAL, -- Need ON uarfcn ARFCN-ValueUTRA, ... }, gSM SEQUENCE { bcchCarrier INTEGER (0..1023), bsic INTEGER (0..63), cellGlobalIdGERAN CellGlobalIdGERAN OPTIONAL, -- Need ON ... }, ..., nBIoT-r14 SEQUENCE { nbPhysCellId-r14 INTEGER (0..503), nbCellGlobalId-r14 ECGI OPTIONAL, -- Need ON nbCarrierFreq-r14 CarrierFreq-NB-r14, ... } }, ... } GNSS-ReferenceLocation ::= SEQUENCE { threeDlocation EllipsoidPointWithAltitudeAndUncertaintyEllipsoid, ... } GNSS-IonosphericModel ::= SEQUENCE { klobucharModel KlobucharModelParameter OPTIONAL, -- Need ON neQuickModel NeQuickModelParameter OPTIONAL, -- Need ON ... } KlobucharModelParameter ::= SEQUENCE { dataID BIT STRING (SIZE (2)), alfa0 INTEGER (-128..127), alfa1 INTEGER (-128..127), alfa2 INTEGER (-128..127), alfa3 INTEGER (-128..127), beta0 INTEGER (-128..127), beta1 INTEGER (-128..127), beta2 INTEGER (-128..127), beta3 INTEGER (-128..127), ... } NeQuickModelParameter ::= SEQUENCE { ai0 INTEGER (0..2047), ai1 INTEGER (-1024..1023), ai2 INTEGER (-8192..8191), ionoStormFlag1 INTEGER (0..1) OPTIONAL, -- Need OP ionoStormFlag2 INTEGER (0..1) OPTIONAL, -- Need OP ionoStormFlag3 INTEGER (0..1) OPTIONAL, -- Need OP ionoStormFlag4 INTEGER (0..1) OPTIONAL, -- Need OP ionoStormFlag5 INTEGER (0..1) OPTIONAL, -- Need OP ... } GNSS-EarthOrientationParameters ::= SEQUENCE { teop INTEGER (0..65535), pmX INTEGER (-1048576..1048575), pmXdot INTEGER (-16384..16383), pmY INTEGER (-1048576..1048575), pmYdot INTEGER (-16384..16383), deltaUT1 INTEGER (-1073741824..1073741823), deltaUT1dot INTEGER (-262144..262143), ... } GNSS-TimeModelList ::= SEQUENCE (SIZE (1..15)) OF GNSS-TimeModelElement GNSS-TimeModelElement ::= SEQUENCE { gnss-TimeModelRefTime INTEGER (0..65535), tA0 INTEGER (-67108864..67108863), tA1 INTEGER (-4096..4095) OPTIONAL, -- Need ON tA2 INTEGER (-64..63) OPTIONAL, -- Need ON gnss-TO-ID INTEGER (1..15), weekNumber INTEGER (0..8191) OPTIONAL, -- Need ON deltaT INTEGER (-128..127) OPTIONAL, -- Need ON ... } GNSS-DifferentialCorrections ::= SEQUENCE { dgnss-RefTime INTEGER (0..3599), dgnss-SgnTypeList DGNSS-SgnTypeList, ... } DGNSS-SgnTypeList ::= SEQUENCE (SIZE (1..3)) OF DGNSS-SgnTypeElement DGNSS-SgnTypeElement ::= SEQUENCE { gnss-SignalID GNSS-SignalID, gnss-StatusHealth INTEGER (0..7), dgnss-SatList DGNSS-SatList, ... } DGNSS-SatList ::= SEQUENCE (SIZE (1..64)) OF DGNSS-CorrectionsElement DGNSS-CorrectionsElement ::= SEQUENCE { svID SV-ID, iod BIT STRING (SIZE(11)), udre INTEGER (0..3), pseudoRangeCor INTEGER (-2047..2047), rangeRateCor INTEGER (-127..127), udreGrowthRate INTEGER (0..7) OPTIONAL, -- Need ON udreValidityTime INTEGER (0..7) OPTIONAL, -- Need ON ... } GNSS-NavigationModel ::= SEQUENCE { nonBroadcastIndFlag INTEGER (0..1), gnss-SatelliteList GNSS-NavModelSatelliteList, ... } GNSS-NavModelSatelliteList ::= SEQUENCE (SIZE(1..64)) OF GNSS-NavModelSatelliteElement GNSS-NavModelSatelliteElement ::= SEQUENCE { svID SV-ID, svHealth BIT STRING (SIZE(8)), iod BIT STRING (SIZE(11)), gnss-ClockModel GNSS-ClockModel, gnss-OrbitModel GNSS-OrbitModel, ..., [[ svHealthExt-v1240 BIT STRING (SIZE(4)) OPTIONAL -- Need ON ]] } GNSS-ClockModel ::= CHOICE { standardClockModelList StandardClockModelList, -- Model-1 nav-ClockModel NAV-ClockModel, -- Model-2 cnav-ClockModel CNAV-ClockModel, -- Model-3 glonass-ClockModel GLONASS-ClockModel, -- Model-4 sbas-ClockModel SBAS-ClockModel, -- Model-5 ..., bds-ClockModel-r12 BDS-ClockModel-r12 -- Model-6 } GNSS-OrbitModel ::= CHOICE { keplerianSet NavModelKeplerianSet, -- Model-1 nav-KeplerianSet NavModelNAV-KeplerianSet, -- Model-2 cnav-KeplerianSet NavModelCNAV-KeplerianSet, -- Model-3 glonass-ECEF NavModel-GLONASS-ECEF, -- Model-4 sbas-ECEF NavModel-SBAS-ECEF, -- Model-5 ..., bds-KeplerianSet-r12 NavModel-BDS-KeplerianSet-r12 -- Model-6 } StandardClockModelList ::= SEQUENCE (SIZE(1..2)) OF StandardClockModelElement StandardClockModelElement ::= SEQUENCE { stanClockToc INTEGER (0..16383), stanClockAF2 INTEGER (-32..31), stanClockAF1 INTEGER (-1048576..1048575), stanClockAF0 INTEGER (-1073741824..1073741823), stanClockTgd INTEGER (-512..511) OPTIONAL, -- Need ON sisa INTEGER (0..255), stanModelID INTEGER (0..1) OPTIONAL, -- Need ON ... } NAV-ClockModel ::= SEQUENCE { navToc INTEGER (0..37799), navaf2 INTEGER (-128..127), navaf1 INTEGER (-32768..32767), navaf0 INTEGER (-2097152..2097151), navTgd INTEGER (-128..127), ... } CNAV-ClockModel ::= SEQUENCE { cnavToc INTEGER (0..2015), cnavTop INTEGER (0..2015), cnavURA0 INTEGER (-16..15), cnavURA1 INTEGER (0..7), cnavURA2 INTEGER (0..7), cnavAf2 INTEGER (-512..511), cnavAf1 INTEGER (-524288..524287), cnavAf0 INTEGER (-33554432..33554431), cnavTgd INTEGER (-4096..4095), cnavISCl1cp INTEGER (-4096..4095) OPTIONAL, -- Need ON cnavISCl1cd INTEGER (-4096..4095) OPTIONAL, -- Need ON cnavISCl1ca INTEGER (-4096..4095) OPTIONAL, -- Need ON cnavISCl2c INTEGER (-4096..4095) OPTIONAL, -- Need ON cnavISCl5i5 INTEGER (-4096..4095) OPTIONAL, -- Need ON cnavISCl5q5 INTEGER (-4096..4095) OPTIONAL, -- Need ON ... } GLONASS-ClockModel ::= SEQUENCE { gloTau INTEGER (-2097152..2097151), gloGamma INTEGER (-1024..1023), gloDeltaTau INTEGER (-16..15) OPTIONAL, -- Need ON ... } SBAS-ClockModel ::= SEQUENCE { sbasTo INTEGER (0..5399), sbasAgfo INTEGER (-2048..2047), sbasAgf1 INTEGER (-128..127), ... } BDS-ClockModel-r12 ::= SEQUENCE { bdsAODC-r12 INTEGER (0..31), bdsToc-r12 INTEGER (0..131071), bdsA0-r12 INTEGER (-8388608..8388607), bdsA1-r12 INTEGER (-2097152..2097151), bdsA2-r12 INTEGER (-1024..1023), bdsTgd1-r12 INTEGER (-512..511), ... } NavModelKeplerianSet ::= SEQUENCE { keplerToe INTEGER (0 .. 16383), keplerW INTEGER (-2147483648..2147483647), keplerDeltaN INTEGER (-32768..32767), keplerM0 INTEGER (-2147483648..2147483647), keplerOmegaDot INTEGER (-8388608.. 8388607), keplerE INTEGER (0..4294967295), keplerIDot INTEGER (-8192..8191), keplerAPowerHalf INTEGER (0.. 4294967295), keplerI0 INTEGER (-2147483648..2147483647), keplerOmega0 INTEGER (-2147483648..2147483647), keplerCrs INTEGER (-32768..32767), keplerCis INTEGER (-32768..32767), keplerCus INTEGER (-32768..32767), keplerCrc INTEGER (-32768..32767), keplerCic INTEGER (-32768..32767), keplerCuc INTEGER (-32768..32767), ... } NavModelNAV-KeplerianSet ::= SEQUENCE { navURA INTEGER (0..15), navFitFlag INTEGER (0..1), navToe INTEGER (0..37799), navOmega INTEGER (-2147483648..2147483647), navDeltaN INTEGER (-32768..32767), navM0 INTEGER (-2147483648..2147483647), navOmegaADot INTEGER (-8388608..8388607), navE INTEGER (0..4294967295), navIDot INTEGER (-8192..8191), navAPowerHalf INTEGER (0..4294967295), navI0 INTEGER (-2147483648..2147483647), navOmegaA0 INTEGER (-2147483648..2147483647), navCrs INTEGER (-32768..32767), navCis INTEGER (-32768..32767), navCus INTEGER (-32768..32767), navCrc INTEGER (-32768..32767), navCic INTEGER (-32768..32767), navCuc INTEGER (-32768..32767), addNAVparam SEQUENCE { ephemCodeOnL2 INTEGER (0..3), ephemL2Pflag INTEGER (0..1), ephemSF1Rsvd SEQUENCE { reserved1 INTEGER (0..8388607), -- 23-bit field reserved2 INTEGER (0..16777215), -- 24-bit field reserved3 INTEGER (0..16777215), -- 24-bit field reserved4 INTEGER (0..65535) -- 16-bit field }, ephemAODA INTEGER (0..31) } OPTIONAL, -- Need ON ... } NavModelCNAV-KeplerianSet ::= SEQUENCE { cnavTop INTEGER (0..2015), cnavURAindex INTEGER (-16..15), cnavDeltaA INTEGER (-33554432..33554431), cnavAdot INTEGER (-16777216..16777215), cnavDeltaNo INTEGER (-65536..65535), cnavDeltaNoDot INTEGER (-4194304..4194303), cnavMo INTEGER (-4294967296..4294967295), cnavE INTEGER (0..8589934591), cnavOmega INTEGER (-4294967296..4294967295), cnavOMEGA0 INTEGER (-4294967296..4294967295), cnavDeltaOmegaDot INTEGER (-65536..65535), cnavIo INTEGER (-4294967296..4294967295), cnavIoDot INTEGER (-16384..16383), cnavCis INTEGER (-32768..32767), cnavCic INTEGER (-32768..32767), cnavCrs INTEGER (-8388608..8388607), cnavCrc INTEGER (-8388608..8388607), cnavCus INTEGER (-1048576..1048575), cnavCuc INTEGER (-1048576..1048575), ... } NavModel-GLONASS-ECEF ::= SEQUENCE { gloEn INTEGER (0..31), gloP1 BIT STRING (SIZE(2)), gloP2 BOOLEAN, gloM INTEGER (0..3), gloX INTEGER (-67108864..67108863), gloXdot INTEGER (-8388608..8388607), gloXdotdot INTEGER (-16..15), gloY INTEGER (-67108864..67108863), gloYdot INTEGER (-8388608..8388607), gloYdotdot INTEGER (-16..15), gloZ INTEGER (-67108864..67108863), gloZdot INTEGER (-8388608..8388607), gloZdotdot INTEGER (-16..15), ... } NavModel-SBAS-ECEF ::= SEQUENCE { sbasTo INTEGER (0..5399) OPTIONAL, -- Cond ClockModel sbasAccuracy BIT STRING (SIZE(4)), sbasXg INTEGER (-536870912..536870911), sbasYg INTEGER (-536870912..536870911), sbasZg INTEGER (-16777216..16777215), sbasXgDot INTEGER (-65536..65535), sbasYgDot INTEGER (-65536..65535), sbasZgDot INTEGER (-131072..131071), sbasXgDotDot INTEGER (-512..511), sbagYgDotDot INTEGER (-512..511), sbasZgDotDot INTEGER (-512..511), ... } NavModel-BDS-KeplerianSet-r12 ::= SEQUENCE { bdsAODE-r12 INTEGER (0..31), bdsURAI-r12 INTEGER (0..15), bdsToe-r12 INTEGER (0..131071), bdsAPowerHalf-r12 INTEGER (0..4294967295), bdsE-r12 INTEGER (0..4294967295), bdsW-r12 INTEGER (-2147483648..2147483647), bdsDeltaN-r12 INTEGER (-32768..32767), bdsM0-r12 INTEGER (-2147483648..2147483647), bdsOmega0-r12 INTEGER (-2147483648..2147483647), bdsOmegaDot-r12 INTEGER (-8388608..8388607), bdsI0-r12 INTEGER (-2147483648..2147483647), bdsIDot-r12 INTEGER (-8192..8191), bdsCuc-r12 INTEGER (-131072..131071), bdsCus-r12 INTEGER (-131072..131071), bdsCrc-r12 INTEGER (-131072..131071), bdsCrs-r12 INTEGER (-131072..131071), bdsCic-r12 INTEGER (-131072..131071), bdsCis-r12 INTEGER (-131072..131071), ... } GNSS-RealTimeIntegrity ::= SEQUENCE { gnss-BadSignalList GNSS-BadSignalList, ... } GNSS-BadSignalList ::= SEQUENCE (SIZE(1..64)) OF BadSignalElement BadSignalElement ::= SEQUENCE { badSVID SV-ID, badSignalID GNSS-SignalIDs OPTIONAL, -- Need OP ... } GNSS-DataBitAssistance ::= SEQUENCE { gnss-TOD INTEGER (0..3599), gnss-TODfrac INTEGER (0..999) OPTIONAL, -- Need ON gnss-DataBitsSatList GNSS-DataBitsSatList, ... } GNSS-DataBitsSatList ::= SEQUENCE (SIZE(1..64))OF GNSS-DataBitsSatElement GNSS-DataBitsSatElement ::= SEQUENCE { svID SV-ID, gnss-DataBitsSgnList GNSS-DataBitsSgnList, ... } GNSS-DataBitsSgnList ::= SEQUENCE (SIZE(1..8)) OF GNSS-DataBitsSgnElement GNSS-DataBitsSgnElement ::= SEQUENCE { gnss-SignalType GNSS-SignalID, gnss-DataBits BIT STRING (SIZE (1..1024)), ... } GNSS-AcquisitionAssistance ::= SEQUENCE { gnss-SignalID GNSS-SignalID, gnss-AcquisitionAssistList GNSS-AcquisitionAssistList, ..., confidence-r10 INTEGER (0..100) OPTIONAL -- Need ON } GNSS-AcquisitionAssistList ::= SEQUENCE (SIZE(1..64)) OF GNSS-AcquisitionAssistElement GNSS-AcquisitionAssistElement ::= SEQUENCE { svID SV-ID, doppler0 INTEGER (-2048..2047), doppler1 INTEGER (0..63), dopplerUncertainty INTEGER (0..4), codePhase INTEGER (0..1022), intCodePhase INTEGER (0..127), codePhaseSearchWindow INTEGER (0..31), azimuth INTEGER (0..511), elevation INTEGER (0..127), ..., codePhase1023 BOOLEAN OPTIONAL, -- Need OP dopplerUncertaintyExt-r10 ENUMERATED { d60, d80, d100, d120, noInformation, ... } OPTIONAL -- Need ON } GNSS-Almanac ::= SEQUENCE { weekNumber INTEGER (0..255) OPTIONAL, -- Need ON toa INTEGER (0..255) OPTIONAL, -- Need ON ioda INTEGER (0..3) OPTIONAL, -- Need ON completeAlmanacProvided BOOLEAN, gnss-AlmanacList GNSS-AlmanacList, ..., [[ toa-ext-v1240 INTEGER (256..1023) OPTIONAL, -- Need ON ioda-ext-v1240 INTEGER (4..15) OPTIONAL -- Need ON ]] } GNSS-AlmanacList ::= SEQUENCE (SIZE(1..64)) OF GNSS-AlmanacElement GNSS-AlmanacElement ::= CHOICE { keplerianAlmanacSet AlmanacKeplerianSet, -- Model-1 keplerianNAV-Almanac AlmanacNAV-KeplerianSet, -- Model-2 keplerianReducedAlmanac AlmanacReducedKeplerianSet, -- Model-3 keplerianMidiAlmanac AlmanacMidiAlmanacSet, -- Model-4 keplerianGLONASS AlmanacGLONASS-AlmanacSet, -- Model-5 ecef-SBAS-Almanac AlmanacECEF-SBAS-AlmanacSet, -- Model-6 ..., keplerianBDS-Almanac-r12 AlmanacBDS-AlmanacSet-r12 -- Model-7 } AlmanacKeplerianSet ::= SEQUENCE { svID SV-ID, kepAlmanacE INTEGER (0..2047), kepAlmanacDeltaI INTEGER (-1024..1023), kepAlmanacOmegaDot INTEGER (-1024..1023), kepSV-StatusINAV BIT STRING (SIZE (4)), kepSV-StatusFNAV BIT STRING (SIZE (2)) OPTIONAL, -- Need ON kepAlmanacAPowerHalf INTEGER (-4096..4095), kepAlmanacOmega0 INTEGER (-32768..32767), kepAlmanacW INTEGER (-32768..32767), kepAlmanacM0 INTEGER (-32768..32767), kepAlmanacAF0 INTEGER (-32768..32767), kepAlmanacAF1 INTEGER (-4096..4095), ... } AlmanacNAV-KeplerianSet ::= SEQUENCE { svID SV-ID, navAlmE INTEGER (0..65535), navAlmDeltaI INTEGER (-32768..32767), navAlmOMEGADOT INTEGER (-32768..32767), navAlmSVHealth INTEGER (0..255), navAlmSqrtA INTEGER (0..16777215), navAlmOMEGAo INTEGER (-8388608..8388607), navAlmOmega INTEGER (-8388608..8388607), navAlmMo INTEGER (-8388608..8388607), navAlmaf0 INTEGER (-1024..1023), navAlmaf1 INTEGER (-1024..1023), ... } AlmanacReducedKeplerianSet ::= SEQUENCE { svID SV-ID, redAlmDeltaA INTEGER (-128..127), redAlmOmega0 INTEGER (-64..63), redAlmPhi0 INTEGER (-64..63), redAlmL1Health BOOLEAN, redAlmL2Health BOOLEAN, redAlmL5Health BOOLEAN, ... } AlmanacMidiAlmanacSet ::= SEQUENCE { svID SV-ID, midiAlmE INTEGER (0..2047), midiAlmDeltaI INTEGER (-1024..1023), midiAlmOmegaDot INTEGER (-1024..1023), midiAlmSqrtA INTEGER (0..131071), midiAlmOmega0 INTEGER (-32768..32767), midiAlmOmega INTEGER (-32768..32767), midiAlmMo INTEGER (-32768..32767), midiAlmaf0 INTEGER (-1024..1023), midiAlmaf1 INTEGER (-512..511), midiAlmL1Health BOOLEAN, midiAlmL2Health BOOLEAN, midiAlmL5Health BOOLEAN, ... } AlmanacGLONASS-AlmanacSet ::= SEQUENCE { gloAlm-NA INTEGER (1..1461), gloAlmnA INTEGER (1..24), gloAlmHA INTEGER (0..31), gloAlmLambdaA INTEGER (-1048576..1048575), gloAlmtlambdaA INTEGER (0..2097151), gloAlmDeltaIa INTEGER (-131072..131071), gloAlmDeltaTA INTEGER (-2097152..2097151), gloAlmDeltaTdotA INTEGER (-64..63), gloAlmEpsilonA INTEGER (0..32767), gloAlmOmegaA INTEGER (-32768..32767), gloAlmTauA INTEGER (-512..511), gloAlmCA INTEGER (0..1), gloAlmMA BIT STRING (SIZE(2)) OPTIONAL, -- Need ON ... } AlmanacECEF-SBAS-AlmanacSet ::= SEQUENCE { sbasAlmDataID INTEGER (0..3), svID SV-ID, sbasAlmHealth BIT STRING (SIZE(8)), sbasAlmXg INTEGER (-16384..16383), sbasAlmYg INTEGER (-16384..16383), sbasAlmZg INTEGER (-256..255), sbasAlmXgdot INTEGER (-4..3), sbasAlmYgDot INTEGER (-4..3), sbasAlmZgDot INTEGER (-8..7), sbasAlmTo INTEGER (0..2047), ... } AlmanacBDS-AlmanacSet-r12 ::= SEQUENCE { svID SV-ID, bdsAlmToa-r12 INTEGER (0..255) OPTIONAL, -- Cond NotSameForAllSV bdsAlmSqrtA-r12 INTEGER (0..16777215), bdsAlmE-r12 INTEGER (0..131071), bdsAlmW-r12 INTEGER (-8388608..8388607), bdsAlmM0-r12 INTEGER (-8388608..8388607), bdsAlmOmega0-r12 INTEGER (-8388608..8388607), bdsAlmOmegaDot-r12 INTEGER (-65536..65535), bdsAlmDeltaI-r12 INTEGER (-32768..32767), bdsAlmA0-r12 INTEGER (-1024..1023), bdsAlmA1-r12 INTEGER (-1024..1023), bdsSvHealth-r12 BIT STRING (SIZE(9)) OPTIONAL, -- Cond SV-ID ... } GNSS-UTC-Model ::= CHOICE { utcModel1 UTC-ModelSet1, -- Model-1 utcModel2 UTC-ModelSet2, -- Model-2 utcModel3 UTC-ModelSet3, -- Model-3 utcModel4 UTC-ModelSet4, -- Model-4 ..., utcModel5-r12 UTC-ModelSet5-r12 -- Model-5 } UTC-ModelSet1 ::= SEQUENCE { gnss-Utc-A1 INTEGER (-8388608..8388607), gnss-Utc-A0 INTEGER (-2147483648..2147483647), gnss-Utc-Tot INTEGER (0..255), gnss-Utc-WNt INTEGER (0..255), gnss-Utc-DeltaTls INTEGER (-128..127), gnss-Utc-WNlsf INTEGER (0..255), gnss-Utc-DN INTEGER (-128..127), gnss-Utc-DeltaTlsf INTEGER (-128..127), ... } UTC-ModelSet2 ::= SEQUENCE { utcA0 INTEGER (-32768..32767), utcA1 INTEGER (-4096..4095), utcA2 INTEGER (-64..63), utcDeltaTls INTEGER (-128..127), utcTot INTEGER (0..65535), utcWNot INTEGER (0..8191), utcWNlsf INTEGER (0..255), utcDN BIT STRING (SIZE(4)), utcDeltaTlsf INTEGER (-128..127), ... } UTC-ModelSet3 ::= SEQUENCE { nA INTEGER (1..1461), tauC INTEGER (-2147483648..2147483647), b1 INTEGER (-1024..1023) OPTIONAL, -- Cond GLONASS-M b2 INTEGER (-512..511) OPTIONAL, -- Cond GLONASS-M kp BIT STRING (SIZE(2)) OPTIONAL, -- Cond GLONASS-M ... } UTC-ModelSet4 ::= SEQUENCE { utcA1wnt INTEGER (-8388608..8388607), utcA0wnt INTEGER (-2147483648..2147483647), utcTot INTEGER (0..255), utcWNt INTEGER (0..255), utcDeltaTls INTEGER (-128..127), utcWNlsf INTEGER (0..255), utcDN INTEGER (-128..127), utcDeltaTlsf INTEGER (-128..127), utcStandardID INTEGER (0..7), ... } UTC-ModelSet5-r12 ::= SEQUENCE { utcA0-r12 INTEGER (-2147483648..2147483647), utcA1-r12 INTEGER (-8388608..8388607), utcDeltaTls-r12 INTEGER (-128..127), utcWNlsf-r12 INTEGER (0..255), utcDN-r12 INTEGER (0..255), utcDeltaTlsf-r12 INTEGER (-128..127), ... } GNSS-AuxiliaryInformation ::= CHOICE { gnss-ID-GPS GNSS-ID-GPS, gnss-ID-GLONASS GNSS-ID-GLONASS, ... } GNSS-ID-GPS ::= SEQUENCE (SIZE(1..64)) OF GNSS-ID-GPS-SatElement GNSS-ID-GPS-SatElement ::= SEQUENCE { svID SV-ID, signalsAvailable GNSS-SignalIDs, ... } GNSS-ID-GLONASS ::= SEQUENCE (SIZE(1..64)) OF GNSS-ID-GLONASS-SatElement GNSS-ID-GLONASS-SatElement ::= SEQUENCE { svID SV-ID, signalsAvailable GNSS-SignalIDs, channelNumber INTEGER (-7..13) OPTIONAL, -- Cond FDMA ... } BDS-DifferentialCorrections-r12 ::= SEQUENCE { dbds-RefTime-r12 INTEGER (0..3599), bds-SgnTypeList-r12 BDS-SgnTypeList-r12, ... } BDS-SgnTypeList-r12 ::= SEQUENCE (SIZE (1..3)) OF BDS-SgnTypeElement-r12 BDS-SgnTypeElement-r12 ::= SEQUENCE { gnss-SignalID GNSS-SignalID OPTIONAL, -- Need ON dbds-CorrectionList-r12 DBDS-CorrectionList-r12, ... } DBDS-CorrectionList-r12 ::= SEQUENCE (SIZE (1..64)) OF DBDS-CorrectionElement-r12 DBDS-CorrectionElement-r12 ::= SEQUENCE { svID SV-ID, bds-UDREI-r12 INTEGER (0..15), bds-RURAI-r12 INTEGER (0..15), bds-ECC-DeltaT-r12 INTEGER (-4096..4095), ... } BDS-GridModelParameter-r12 ::= SEQUENCE { bds-RefTime-r12 INTEGER (0..3599), gridIonList-r12 GridIonList-r12, ... } GridIonList-r12 ::= SEQUENCE (SIZE (1..320)) OF GridIonElement-r12 GridIonElement-r12 ::= SEQUENCE { igp-ID-r12 INTEGER (1..320), dt-r12 INTEGER (0..511), givei-r12 INTEGER (0..15) , ... } A-GNSS-RequestAssistanceData ::= SEQUENCE { gnss-CommonAssistDataReq GNSS-CommonAssistDataReq OPTIONAL, -- Cond CommonADReq gnss-GenericAssistDataReq GNSS-GenericAssistDataReq OPTIONAL, -- Cond GenADReq ... } GNSS-CommonAssistDataReq ::= SEQUENCE { gnss-ReferenceTimeReq GNSS-ReferenceTimeReq OPTIONAL, -- Cond RefTimeReq gnss-ReferenceLocationReq GNSS-ReferenceLocationReq OPTIONAL, -- Cond RefLocReq gnss-IonosphericModelReq GNSS-IonosphericModelReq OPTIONAL, -- Cond IonoModReq gnss-EarthOrientationParametersReq GNSS-EarthOrientationParametersReq OPTIONAL, -- Cond EOPReq ... } GNSS-GenericAssistDataReq ::= SEQUENCE (SIZE (1..16)) OF GNSS-GenericAssistDataReqElement GNSS-GenericAssistDataReqElement ::= SEQUENCE { gnss-ID GNSS-ID, sbas-ID SBAS-ID OPTIONAL, -- Cond GNSS-ID-SBAS gnss-TimeModelsReq GNSS-TimeModelListReq OPTIONAL, -- Cond TimeModReq gnss-DifferentialCorrectionsReq GNSS-DifferentialCorrectionsReq OPTIONAL, -- Cond DGNSS-Req gnss-NavigationModelReq GNSS-NavigationModelReq OPTIONAL, -- Cond NavModReq gnss-RealTimeIntegrityReq GNSS-RealTimeIntegrityReq OPTIONAL, -- Cond RTIReq gnss-DataBitAssistanceReq GNSS-DataBitAssistanceReq OPTIONAL, -- Cond DataBitsReq gnss-AcquisitionAssistanceReq GNSS-AcquisitionAssistanceReq OPTIONAL, -- Cond AcquAssistReq gnss-AlmanacReq GNSS-AlmanacReq OPTIONAL, -- Cond AlmanacReq gnss-UTCModelReq GNSS-UTC-ModelReq OPTIONAL, -- Cond UTCModReq gnss-AuxiliaryInformationReq GNSS-AuxiliaryInformationReq OPTIONAL, -- Cond AuxInfoReq ..., [[ bds-DifferentialCorrectionsReq-r12 BDS-DifferentialCorrectionsReq-r12 OPTIONAL, -- Cond DBDS-Req bds-GridModelReq-r12 BDS-GridModelReq-r12 OPTIONAL -- Cond BDS-GridModReq ]] } GNSS-ReferenceTimeReq ::= SEQUENCE { gnss-TimeReqPrefList SEQUENCE (SIZE (1..8)) OF GNSS-ID, gps-TOW-assistReq BOOLEAN OPTIONAL, -- Cond gps notOfLeapSecReq BOOLEAN OPTIONAL, -- Cond glonass ... } GNSS-ReferenceLocationReq ::= SEQUENCE { ... } GNSS-IonosphericModelReq ::= SEQUENCE { klobucharModelReq BIT STRING (SIZE(2)) OPTIONAL, -- Cond klobuchar neQuickModelReq NULL OPTIONAL, -- Cond nequick ... } GNSS-EarthOrientationParametersReq ::= SEQUENCE { ... } GNSS-TimeModelListReq ::= SEQUENCE (SIZE(1..15)) OF GNSS-TimeModelElementReq GNSS-TimeModelElementReq ::= SEQUENCE { gnss-TO-IDsReq INTEGER (1..15), deltaTreq BOOLEAN, ... } GNSS-DifferentialCorrectionsReq ::= SEQUENCE { dgnss-SignalsReq GNSS-SignalIDs, dgnss-ValidityTimeReq BOOLEAN, ... } GNSS-NavigationModelReq ::= CHOICE { storedNavList StoredNavListInfo, reqNavList ReqNavListInfo, ... } StoredNavListInfo ::= SEQUENCE { gnss-WeekOrDay INTEGER (0..4095), gnss-Toe INTEGER (0..255), t-toeLimit INTEGER (0..15), satListRelatedDataList SatListRelatedDataList OPTIONAL, ... } SatListRelatedDataList ::= SEQUENCE (SIZE (1..64)) OF SatListRelatedDataElement SatListRelatedDataElement ::= SEQUENCE { svID SV-ID, iod BIT STRING (SIZE(11)), clockModelID INTEGER (1..8) OPTIONAL, orbitModelID INTEGER (1..8) OPTIONAL, ... } ReqNavListInfo ::= SEQUENCE { svReqList BIT STRING (SIZE (64)), clockModelID-PrefList SEQUENCE (SIZE (1..8)) OF INTEGER (1..8) OPTIONAL, orbitModelID-PrefList SEQUENCE (SIZE (1..8)) OF INTEGER (1..8) OPTIONAL, addNavparamReq BOOLEAN OPTIONAL, -- Cond orbitModelID-2 ... } GNSS-RealTimeIntegrityReq ::= SEQUENCE { ... } GNSS-DataBitAssistanceReq ::= SEQUENCE { gnss-TOD-Req INTEGER (0..3599), gnss-TOD-FracReq INTEGER (0..999) OPTIONAL, dataBitInterval INTEGER (0..15), gnss-SignalType GNSS-SignalIDs, gnss-DataBitsReq GNSS-DataBitsReqSatList OPTIONAL, ... } GNSS-DataBitsReqSatList ::= SEQUENCE (SIZE(1..64)) OF GNSS-DataBitsReqSatElement GNSS-DataBitsReqSatElement ::= SEQUENCE { svID SV-ID, ... } GNSS-AcquisitionAssistanceReq ::= SEQUENCE { gnss-SignalID-Req GNSS-SignalID, ... } GNSS-AlmanacReq ::= SEQUENCE { modelID INTEGER(1..8) OPTIONAL, ... } GNSS-UTC-ModelReq ::= SEQUENCE { modelID INTEGER(1..8) OPTIONAL, ... } GNSS-AuxiliaryInformationReq ::= SEQUENCE { ... } BDS-DifferentialCorrectionsReq-r12 ::= SEQUENCE { dgnss-SignalsReq GNSS-SignalIDs, ... } BDS-GridModelReq-r12 ::= SEQUENCE { ... } A-GNSS-ProvideLocationInformation ::= SEQUENCE { gnss-SignalMeasurementInformation GNSS-SignalMeasurementInformation OPTIONAL, gnss-LocationInformation GNSS-LocationInformation OPTIONAL, gnss-Error A-GNSS-Error OPTIONAL, ... } GNSS-SignalMeasurementInformation ::= SEQUENCE { measurementReferenceTime MeasurementReferenceTime, gnss-MeasurementList GNSS-MeasurementList, ... } MeasurementReferenceTime ::= SEQUENCE { gnss-TOD-msec INTEGER (0..3599999), gnss-TOD-frac INTEGER (0..3999) OPTIONAL, gnss-TOD-unc INTEGER (0..127) OPTIONAL, gnss-TimeID GNSS-ID, networkTime CHOICE { eUTRA SEQUENCE { physCellId INTEGER (0..503), cellGlobalId CellGlobalIdEUTRA-AndUTRA OPTIONAL, systemFrameNumber BIT STRING (SIZE (10)), ... }, uTRA SEQUENCE { mode CHOICE { fdd SEQUENCE { primary-CPICH-Info INTEGER (0..511), ... }, tdd SEQUENCE { cellParameters INTEGER (0..127), ... } }, cellGlobalId CellGlobalIdEUTRA-AndUTRA OPTIONAL, referenceSystemFrameNumber INTEGER (0..4095), ... }, gSM SEQUENCE { bcchCarrier INTEGER (0..1023), bsic INTEGER (0..63), cellGlobalId CellGlobalIdGERAN OPTIONAL, referenceFrame SEQUENCE { referenceFN INTEGER (0..65535), referenceFNMSB INTEGER (0..63) OPTIONAL, ... }, deltaGNSS-TOD INTEGER (0 .. 127) OPTIONAL, ... }, ..., nbIoT-r14 SEQUENCE { nbPhysCellId-r14 INTEGER (0..503), nbCellGlobalId-r14 ECGI OPTIONAL, sfn-r14 BIT STRING (SIZE (10)), hyperSFN-r14 BIT STRING (SIZE (10)) OPTIONAL, ... } } OPTIONAL, ... } GNSS-MeasurementList ::= SEQUENCE (SIZE(1..16)) OF GNSS-MeasurementForOneGNSS GNSS-MeasurementForOneGNSS ::= SEQUENCE { gnss-ID GNSS-ID, gnss-SgnMeasList GNSS-SgnMeasList, ... } GNSS-SgnMeasList ::= SEQUENCE (SIZE(1..8)) OF GNSS-SgnMeasElement GNSS-SgnMeasElement ::= SEQUENCE { gnss-SignalID GNSS-SignalID, gnss-CodePhaseAmbiguity INTEGER (0..127) OPTIONAL, gnss-SatMeasList GNSS-SatMeasList, ... } GNSS-SatMeasList ::= SEQUENCE (SIZE(1..64)) OF GNSS-SatMeasElement GNSS-SatMeasElement ::= SEQUENCE { svID SV-ID, cNo INTEGER (0..63), mpathDet ENUMERATED {notMeasured (0), low (1), medium (2), high (3), ...}, carrierQualityInd INTEGER (0..3) OPTIONAL, codePhase INTEGER (0..2097151), integerCodePhase INTEGER (0..127) OPTIONAL, codePhaseRMSError INTEGER (0..63), doppler INTEGER (-32768..32767) OPTIONAL, adr INTEGER (0..33554431) OPTIONAL, ... } GNSS-LocationInformation ::= SEQUENCE { measurementReferenceTime MeasurementReferenceTime, agnss-List GNSS-ID-Bitmap, ... } A-GNSS-RequestLocationInformation ::= SEQUENCE { gnss-PositioningInstructions GNSS-PositioningInstructions, ... } GNSS-PositioningInstructions ::= SEQUENCE { gnss-Methods GNSS-ID-Bitmap, fineTimeAssistanceMeasReq BOOLEAN, adrMeasReq BOOLEAN, multiFreqMeasReq BOOLEAN, assistanceAvailability BOOLEAN, ... } A-GNSS-ProvideCapabilities ::= SEQUENCE { gnss-SupportList GNSS-SupportList OPTIONAL, assistanceDataSupportList AssistanceDataSupportList OPTIONAL, locationCoordinateTypes LocationCoordinateTypes OPTIONAL, velocityTypes VelocityTypes OPTIONAL, ..., [[ periodicalReportingNotSupported-r14 PositioningModes OPTIONAL, idleStateForMeasurements-r14 ENUMERATED { required } OPTIONAL ]] } GNSS-SupportList ::= SEQUENCE (SIZE(1..16)) OF GNSS-SupportElement GNSS-SupportElement ::= SEQUENCE { gnss-ID GNSS-ID, sbas-IDs SBAS-IDs OPTIONAL, -- Cond GNSS-ID-SBAS agnss-Modes PositioningModes, gnss-Signals GNSS-SignalIDs, fta-MeasSupport SEQUENCE { cellTime AccessTypes, mode PositioningModes, ... } OPTIONAL, -- Cond fta adr-Support BOOLEAN, velocityMeasurementSupport BOOLEAN, ... } AssistanceDataSupportList ::= SEQUENCE { gnss-CommonAssistanceDataSupport GNSS-CommonAssistanceDataSupport, gnss-GenericAssistanceDataSupport GNSS-GenericAssistanceDataSupport, ... } GNSS-CommonAssistanceDataSupport ::= SEQUENCE { gnss-ReferenceTimeSupport GNSS-ReferenceTimeSupport OPTIONAL, -- Cond RefTimeSup gnss-ReferenceLocationSupport GNSS-ReferenceLocationSupport OPTIONAL, -- Cond RefLocSup gnss-IonosphericModelSupport GNSS-IonosphericModelSupport OPTIONAL, -- Cond IonoModSup gnss-EarthOrientationParametersSupport GNSS-EarthOrientationParametersSupport OPTIONAL, -- Cond EOPSup ... } GNSS-ReferenceTimeSupport ::= SEQUENCE { gnss-SystemTime GNSS-ID-Bitmap, fta-Support AccessTypes OPTIONAL, -- Cond fta ... } GNSS-ReferenceLocationSupport ::= SEQUENCE { ... } GNSS-IonosphericModelSupport ::= SEQUENCE { ionoModel BIT STRING { klobuchar (0), neQuick (1) } (SIZE (1..8)), ... } GNSS-EarthOrientationParametersSupport ::= SEQUENCE { ... } GNSS-GenericAssistanceDataSupport ::= SEQUENCE (SIZE (1..16)) OF GNSS-GenericAssistDataSupportElement GNSS-GenericAssistDataSupportElement ::= SEQUENCE { gnss-ID GNSS-ID, sbas-ID SBAS-ID OPTIONAL, -- Cond GNSS‑ID‑SBAS gnss-TimeModelsSupport GNSS-TimeModelListSupport OPTIONAL, -- Cond TimeModSup gnss-DifferentialCorrectionsSupport GNSS-DifferentialCorrectionsSupport OPTIONAL, -- Cond DGNSS-Sup gnss-NavigationModelSupport GNSS-NavigationModelSupport OPTIONAL, -- Cond NavModSup gnss-RealTimeIntegritySupport GNSS-RealTimeIntegritySupport OPTIONAL, -- Cond RTISup gnss-DataBitAssistanceSupport GNSS-DataBitAssistanceSupport OPTIONAL, -- Cond DataBitsSup gnss-AcquisitionAssistanceSupport GNSS-AcquisitionAssistanceSupport OPTIONAL, -- Cond AcquAssistSup gnss-AlmanacSupport GNSS-AlmanacSupport OPTIONAL, -- Cond AlmanacSup gnss-UTC-ModelSupport GNSS-UTC-ModelSupport OPTIONAL, -- Cond UTCModSup gnss-AuxiliaryInformationSupport GNSS-AuxiliaryInformationSupport OPTIONAL, -- Cond AuxInfoSup ..., [[ bds-DifferentialCorrectionsSupport-r12 BDS-DifferentialCorrectionsSupport-r12 OPTIONAL, -- Cond DBDS-Sup bds-GridModelSupport-r12 BDS-GridModelSupport-r12 OPTIONAL -- Cond BDS-GridModSup ]] } GNSS-TimeModelListSupport ::= SEQUENCE { ... } GNSS-DifferentialCorrectionsSupport ::= SEQUENCE { gnssSignalIDs GNSS-SignalIDs, dgnss-ValidityTimeSup BOOLEAN, ... } GNSS-NavigationModelSupport ::= SEQUENCE { clockModel BIT STRING { model-1 (0), model-2 (1), model-3 (2), model-4 (3), model-5 (4), model-6 (5) } (SIZE (1..8)) OPTIONAL, orbitModel BIT STRING { model-1 (0), model-2 (1), model-3 (2), model-4 (3), model-5 (4), model-6 (5) } (SIZE (1..8)) OPTIONAL, ... } GNSS-RealTimeIntegritySupport ::= SEQUENCE { ... } GNSS-DataBitAssistanceSupport ::= SEQUENCE { ... } GNSS-AcquisitionAssistanceSupport ::= SEQUENCE { ..., confidenceSupport-r10 ENUMERATED { true } OPTIONAL, dopplerUncertaintyExtSupport-r10 ENUMERATED { true } OPTIONAL } GNSS-AlmanacSupport ::= SEQUENCE { almanacModel BIT STRING { model-1 (0), model-2 (1), model-3 (2), model-4 (3), model-5 (4), model-6 (5), model-7 (6) } (SIZE (1..8)) OPTIONAL, ... } GNSS-UTC-ModelSupport ::= SEQUENCE { utc-Model BIT STRING { model-1 (0), model-2 (1), model-3 (2), model-4 (3), model-5 (4) } (SIZE (1..8)) OPTIONAL, ... } GNSS-AuxiliaryInformationSupport ::= SEQUENCE { ... } BDS-DifferentialCorrectionsSupport-r12 ::= SEQUENCE { gnssSignalIDs GNSS-SignalIDs, ... } BDS-GridModelSupport-r12 ::= SEQUENCE { ... } A-GNSS-RequestCapabilities ::= SEQUENCE { gnss-SupportListReq BOOLEAN, assistanceDataSupportListReq BOOLEAN, locationVelocityTypesReq BOOLEAN, ... } A-GNSS-Error ::= CHOICE { locationServerErrorCauses GNSS-LocationServerErrorCauses, targetDeviceErrorCauses GNSS-TargetDeviceErrorCauses, ... } GNSS-LocationServerErrorCauses ::= SEQUENCE { cause ENUMERATED { undefined, undeliveredAssistanceDataIsNotSupportedByServer, undeliveredAssistanceDataIsSupportedButCurrentlyNotAvailableByServer, undeliveredAssistanceDataIsPartlyNotSupportedAndPartlyNotAvailableByServer, ... }, ... } GNSS-TargetDeviceErrorCauses ::= SEQUENCE { cause ENUMERATED { undefined, thereWereNotEnoughSatellitesReceived, assistanceDataMissing, notAllRequestedMeasurementsPossible, ... }, fineTimeAssistanceMeasurementsNotPossible NULL OPTIONAL, adrMeasurementsNotPossible NULL OPTIONAL, multiFrequencyMeasurementsNotPossible NULL OPTIONAL, ... } GNSS-ID ::= SEQUENCE { gnss-id ENUMERATED{ gps, sbas, qzss, galileo, glonass, ..., bds }, ... } GNSS-ID-Bitmap ::= SEQUENCE { gnss-ids BIT STRING { gps (0), sbas (1), qzss (2), galileo (3), glonass (4), bds (5) } (SIZE (1..16)), ... } GNSS-SignalID ::= SEQUENCE { gnss-SignalID INTEGER (0 .. 7), ... } GNSS-SignalIDs ::= SEQUENCE { gnss-SignalIDs BIT STRING (SIZE(8)), ... } SBAS-ID ::= SEQUENCE { sbas-id ENUMERATED { waas, egnos, msas, gagan, ...}, ... } SBAS-IDs ::= SEQUENCE { sbas-IDs BIT STRING { waas (0), egnos (1), msas (2), gagan (3) } (SIZE (1..8)), ... } SV-ID ::= SEQUENCE { satellite-id INTEGER(0..63), ... } ECID-ProvideLocationInformation ::= SEQUENCE { ecid-SignalMeasurementInformation ECID-SignalMeasurementInformation OPTIONAL, ecid-Error ECID-Error OPTIONAL, ... } ECID-SignalMeasurementInformation ::= SEQUENCE { primaryCellMeasuredResults MeasuredResultsElement OPTIONAL, measuredResultsList MeasuredResultsList, ... } MeasuredResultsList ::= SEQUENCE (SIZE(1..32)) OF MeasuredResultsElement MeasuredResultsElement ::= SEQUENCE { physCellId INTEGER (0..503), cellGlobalId CellGlobalIdEUTRA-AndUTRA OPTIONAL, arfcnEUTRA ARFCN-ValueEUTRA, systemFrameNumber BIT STRING (SIZE (10)) OPTIONAL, rsrp-Result INTEGER (0..97) OPTIONAL, rsrq-Result INTEGER (0..34) OPTIONAL, ue-RxTxTimeDiff INTEGER (0..4095) OPTIONAL, ..., [[ arfcnEUTRA-v9a0 ARFCN-ValueEUTRA-v9a0 OPTIONAL -- Cond EARFCN-max ]], [[ nrsrp-Result-r14 INTEGER (0..113) OPTIONAL, nrsrq-Result-r14 INTEGER (0..74) OPTIONAL, carrierFreqOffsetNB-r14 CarrierFreqOffsetNB-r14 OPTIONAL, -- Cond NB-IoT hyperSFN-r14 BIT STRING (SIZE (10)) OPTIONAL ]] } ECID-RequestLocationInformation ::= SEQUENCE { requestedMeasurements BIT STRING { rsrpReq (0), rsrqReq (1), ueRxTxReq (2), nrsrpReq-r14 (3), nrsrqReq-r14 (4)} (SIZE(1..8)), ... } ECID-ProvideCapabilities ::= SEQUENCE { ecid-MeasSupported BIT STRING { rsrpSup (0), rsrqSup (1), ueRxTxSup (2), nrsrpSup-r14 (3), nrsrqSup-r14 (4)} (SIZE(1..8)), ..., [[ ueRxTxSupTDD-r13 ENUMERATED { true } OPTIONAL ]], [[ periodicalReporting-r14 ENUMERATED { supported } OPTIONAL, triggeredReporting-r14 ENUMERATED { supported } OPTIONAL, idleStateForMeasurements-r14 ENUMERATED { required } OPTIONAL ]] } ECID-RequestCapabilities ::= SEQUENCE { ... } ECID-Error ::= CHOICE { locationServerErrorCauses ECID-LocationServerErrorCauses, targetDeviceErrorCauses ECID-TargetDeviceErrorCauses, ... } ECID-LocationServerErrorCauses ::= SEQUENCE { cause ENUMERATED { undefined, ... }, ... } ECID-TargetDeviceErrorCauses ::= SEQUENCE { cause ENUMERATED { undefined, requestedMeasurementNotAvailable, notAllrequestedMeasurementsPossible, ... }, rsrpMeasurementNotPossible NULL OPTIONAL, rsrqMeasurementNotPossible NULL OPTIONAL, ueRxTxMeasurementNotPossible NULL OPTIONAL, ..., [[ nrsrpMeasurementNotPossible-r14 NULL OPTIONAL, nrsrqMeasurementNotPossible-r14 NULL OPTIONAL ]] } TBS-ProvideLocationInformation-r13 ::= SEQUENCE { tbs-MeasurementInformation-r13 TBS-MeasurementInformation-r13 OPTIONAL, tbs-Error-r13 TBS-Error-r13 OPTIONAL, ... } TBS-MeasurementInformation-r13 ::= SEQUENCE { measurementReferenceTime-r13 UTCTime OPTIONAL, mbs-SgnMeasList-r13 MBS-BeaconMeasList-r13 OPTIONAL, -- Cond MBS ... } MBS-BeaconMeasList-r13 ::= SEQUENCE (SIZE(1..64)) OF MBS-BeaconMeasElement-r13 MBS-BeaconMeasElement-r13 ::= SEQUENCE { transmitterID-r13 INTEGER (0..32767), codePhase-r13 INTEGER (0..2097151), codePhaseRMSError-r13 INTEGER (0..63), ..., [[ rssi-r14 INTEGER (-130..-30) OPTIONAL ]] } TBS-RequestLocationInformation-r13 ::= SEQUENCE { mbsSgnMeasListReq-r13 BOOLEAN, ..., [[ mbsAssistanceAvailability-r14 BOOLEAN OPTIONAL, -- Need ON mbsRequestedMeasurements-r14 BIT STRING { rssi (0)} (SIZE(1..8)) OPTIONAL -- Need ON ]] } TBS-ProvideCapabilities-r13 ::= SEQUENCE { tbs-Modes-r13 BIT STRING { standalone (0), ue-assisted (1), ue-based (2)} (SIZE (1..8)), ..., [[ mbs-AssistanceDataSupportList-r14 MBS-AssistanceDataSupportList-r14 OPTIONAL, periodicalReportingSupported-r14 PositioningModes OPTIONAL, mbs-ConfigSupport-r14 BIT STRING { tb1 (0), tb2 (1), tb3 (2), tb4 (3)} (SIZE (1..8)) OPTIONAL, mbs-IdleStateForMeasurements-r14 ENUMERATED { required } OPTIONAL ]] } MBS-AssistanceDataSupportList-r14 ::= SEQUENCE { mbs-AcquisitionAssistanceDataSupport-r14 BOOLEAN, mbs-AlmanacAssistanceDataSupport-r14 BOOLEAN, ... } TBS-RequestCapabilities-r13 ::= SEQUENCE { ... } TBS-Error-r13 ::= CHOICE { locationServerErrorCauses-r13 TBS-LocationServerErrorCauses-r13, targetDeviceErrorCauses-r13 TBS-TargetDeviceErrorCauses-r13, ... } TBS-LocationServerErrorCauses-r13 ::= SEQUENCE { cause-r13 ENUMERATED { undefined, ..., assistanceDataNotSupportedByServer-v1420, assistanceDataSupportedButCurrentlyNotAvailableByServer-v1420 }, ... } TBS-TargetDeviceErrorCauses-r13 ::= SEQUENCE { cause-r13 ENUMERATED { undefined, thereWereNotEnoughMBSBeaconsReceived, ..., assistanceDataMissing-v1420 }, ... } TBS-ProvideAssistanceData-r14 ::= SEQUENCE { tbs-AssistanceDataList-r14 TBS-AssistanceDataList-r14 OPTIONAL, -- Need ON tbs-Error-r14 TBS-Error-r13 OPTIONAL, -- Need ON ... } TBS-AssistanceDataList-r14 ::= SEQUENCE { mbs-AssistanceDataList-r14 MBS-AssistanceDataList-r14 OPTIONAL, -- Need ON ... } MBS-AssistanceDataList-r14 ::= SEQUENCE (SIZE (1..maxMBS-r14)) OF MBS-AssistanceDataElement-r14 MBS-AssistanceDataElement-r14 ::= SEQUENCE { mbs-AlmanacAssistance-r14 MBS-AlmanacAssistance-r14 OPTIONAL, -- Need ON mbs-AcquisitionAssistance-r14 MBS-AcquisitionAssistance-r14 OPTIONAL, -- Need ON ... } maxMBS-r14 INTEGER ::= 64 MBS-AlmanacAssistance-r14 ::= SEQUENCE { transmitterID-r14 INTEGER (0..32767), transmitterLatitude-r14 BIT STRING (SIZE (26)), transmitterLongitude-r14 BIT STRING (SIZE (27)), transmitterAltitude-r14 BIT STRING (SIZE (15)), timeCorrection-r14 INTEGER (0..25) OPTIONAL, -- Need ON ... } MBS-AcquisitionAssistance-r14 ::= SEQUENCE { transmitterID-r14 INTEGER (0..32767) OPTIONAL, -- Need ON mbsConfiguration-r14 ENUMERATED {tb1, tb2, tb3, tb4, ...} OPTIONAL, -- Need ON pnCodeIndex-r14 INTEGER (1..128) OPTIONAL, -- Need ON freq-r14 INTEGER (919750000..927250000) OPTIONAL, -- Need ON ... } TBS-RequestAssistanceData-r14 ::= SEQUENCE { mbs-AlmanacAssistanceDataReq-r14 BOOLEAN, mbs-AcquisitionAssistanceDataReq-r14 BOOLEAN, ... } Sensor-ProvideLocationInformation-r13 ::= SEQUENCE { sensor-MeasurementInformation-r13 Sensor-MeasurementInformation-r13 OPTIONAL, sensor-Error-r13 Sensor-Error-r13 OPTIONAL, ... } Sensor-MeasurementInformation-r13 ::= SEQUENCE { measurementReferenceTime-r13 UTCTime OPTIONAL, uncompensatedBarometricPressure-r13 INTEGER (30000..115000) OPTIONAL, -- Cond Barometer ..., [[ uncertainty-r14 SEQUENCE { range-r14 INTEGER (0..1000), confidence-r14 INTEGER (1..100) } OPTIONAL ]] } Sensor-RequestLocationInformation-r13 ::= SEQUENCE { uncompensatedBarometricPressureReq-r13 BOOLEAN, ..., [[ assistanceAvailability-r14 BOOLEAN OPTIONAL -- Need ON ]] } Sensor-ProvideCapabilities-r13 ::= SEQUENCE { sensor-Modes-r13 BIT STRING { standalone (0), ue-assisted (1), ue-based (2)} (SIZE (1..8)), ..., [[ sensor-AssistanceDataSupportList-r14 Sensor-AssistanceDataSupportList-r14 OPTIONAL, periodicalReportingSupported-r14 PositioningModes OPTIONAL, idleStateForMeasurements-r14 ENUMERATED { required } OPTIONAL ]] } Sensor-AssistanceDataSupportList-r14 ::= SEQUENCE { ... } Sensor-RequestCapabilities-r13 ::= SEQUENCE { ... } Sensor-Error-r13 ::= CHOICE { locationServerErrorCauses-r13 Sensor-LocationServerErrorCauses-r13, targetDeviceErrorCauses-r13 Sensor-TargetDeviceErrorCauses-r13, ... } Sensor-LocationServerErrorCauses-r13 ::= SEQUENCE { cause-r13 ENUMERATED { undefined, ..., assistanceDataNotSupportedByServer-v1420, assistanceDataSupportedButCurrentlyNotAvailableByServer-v1420 }, ... } Sensor-TargetDeviceErrorCauses-r13 ::= SEQUENCE { cause-r13 ENUMERATED { undefined, ..., assistanceDataMissing-v1420 }, ... } Sensor-ProvideAssistanceData-r14 ::= SEQUENCE { sensor-AssistanceDataList-r14 Sensor-AssistanceDataList-r14 OPTIONAL, -- Need ON sensor-Error-r14 Sensor-Error-r13 OPTIONAL, -- Need ON ... } Sensor-AssistanceDataList-r14::= SEQUENCE { refPressure-r14 INTEGER (-20000..10000), refPosition-r14 EllipsoidPointWithAltitudeAndUncertaintyEllipsoid OPTIONAL, -- Need ON refTemperature-r14 INTEGER (-64..63) OPTIONAL, -- Need ON ... } Sensor-RequestAssistanceData-r14 ::= SEQUENCE { ... } WLAN-ProvideLocationInformation-r13 ::= SEQUENCE { wlan-MeasurementInformation-r13 WLAN-MeasurementInformation-r13 OPTIONAL, wlan-Error-r13 WLAN-Error-r13 OPTIONAL, ... } WLAN-MeasurementInformation-r13 ::= SEQUENCE { measurementReferenceTime-r13 UTCTime OPTIONAL, wlan-MeasurementList-r13 WLAN-MeasurementList-r13 OPTIONAL, ... } WLAN-MeasurementList-r13 ::= SEQUENCE (SIZE(1..maxWLAN-AP-r13)) OF WLAN-MeasurementElement-r13 WLAN-MeasurementElement-r13 ::= SEQUENCE { wlan-AP-Identifier-r13 WLAN-AP-Identifier-r13, rssi-r13 INTEGER (-127..128) OPTIONAL, rtt-r13 WLAN-RTT-r13 OPTIONAL, apChannelFrequency-r13 INTEGER (0..256) OPTIONAL, servingFlag-r13 BOOLEAN OPTIONAL, ... } WLAN-AP-Identifier-r13 ::= SEQUENCE { bssid-r13 OCTET STRING (SIZE (6)), ssid-r13 OCTET STRING (SIZE (1..32)) OPTIONAL, ... } WLAN-RTT-r13 ::= SEQUENCE { rttValue-r13 INTEGER (0..16777215), rttUnits-r13 ENUMERATED { microseconds, hundredsofnanoseconds, tensofnanoseconds, nanoseconds, tenthsofnanoseconds, ... }, rttAccuracy-r13 INTEGER (0..255) OPTIONAL, ... } maxWLAN-AP-r13 INTEGER ::= 64 WLAN-RequestLocationInformation-r13 ::= SEQUENCE { requestedMeasurements-r13 BIT STRING { rssi (0), rtt (1)} (SIZE(1..8)), ..., [[ assistanceAvailability-r14 BOOLEAN OPTIONAL -- Need ON ]] } WLAN-ProvideCapabilities-r13 ::= SEQUENCE { wlan-Modes-r13 BIT STRING { standalone (0), ue-assisted (1), ue-based (2)} (SIZE (1..8)), wlan-MeasSupported-r13 BIT STRING { rssi-r13 (0), rtt-r13 (1)} (SIZE(1..8)), ..., [[ wlan-AP-AD-Supported-r14 BIT STRING { ap-identifier (0), ap-location (1)} (SIZE (1..8)) OPTIONAL, periodicalReportingSupported-r14 PositioningModes OPTIONAL, idleStateForMeasurements-r14 ENUMERATED { required } OPTIONAL ]] } WLAN-RequestCapabilities-r13 ::= SEQUENCE { ... } WLAN-Error-r13 ::= CHOICE { locationServerErrorCauses-r13 WLAN-LocationServerErrorCauses-r13, targetDeviceErrorCauses-r13 WLAN-TargetDeviceErrorCauses-r13, ... } WLAN-LocationServerErrorCauses-r13 ::= SEQUENCE { cause-r13 ENUMERATED {undefined, ..., requestedADNotAvailable-v1420, notAllrequestedADAvailable-v1420 }, ..., [[ apLocationDataUnavailable-r14 NULL OPTIONAL -- Need ON ]] } WLAN-TargetDeviceErrorCauses-r13 ::= SEQUENCE { cause-r13 ENUMERATED {undefined, requestedMeasurementsNotAvailable, notAllrequestedMeasurementsPossible, ... }, wlan-AP-RSSI-MeasurementNotPossible-r13 NULL OPTIONAL, wlan-AP-RTT-MeasurementNotPossible-r13 NULL OPTIONAL, ... } WLAN-ProvideAssistanceData-r14 ::= SEQUENCE { wlan-DataSet-r14 SEQUENCE (SIZE (1..maxWLAN-DataSets-r14)) OF WLAN-DataSet-r14 OPTIONAL, -- Need ON wlan-Error-r14 WLAN-Error-r13 OPTIONAL, -- Need ON ... } maxWLAN-DataSets-r14 INTEGER ::= 8 WLAN-DataSet-r14 ::= SEQUENCE { wlan-AP-List-r14 SEQUENCE (SIZE (1..maxWLAN-AP-r14)) OF WLAN-AP-Data-r14, supportedChannels-11a-r14 SupportedChannels-11a-r14 OPTIONAL, -- Need ON supportedChannels-11bg-r14 SupportedChannels-11bg-r14 OPTIONAL, -- Need ON ... } SupportedChannels-11a-r14 ::= SEQUENCE { ch34-r14 BOOLEAN, ch36-r14 BOOLEAN, ch38-r14 BOOLEAN, ch40-r14 BOOLEAN, ch42-r14 BOOLEAN, ch44-r14 BOOLEAN, ch46-r14 BOOLEAN, ch48-r14 BOOLEAN, ch52-r14 BOOLEAN, ch56-r14 BOOLEAN, ch60-r14 BOOLEAN, ch64-r14 BOOLEAN, ch149-r14 BOOLEAN, ch153-r14 BOOLEAN, ch157-r14 BOOLEAN, ch161-r14 BOOLEAN } SupportedChannels-11bg-r14 ::= SEQUENCE { ch1-r14 BOOLEAN, ch2-r14 BOOLEAN, ch3-r14 BOOLEAN, ch4-r14 BOOLEAN, ch5-r14 BOOLEAN, ch6-r14 BOOLEAN, ch7-r14 BOOLEAN, ch8-r14 BOOLEAN, ch9-r14 BOOLEAN, ch10-r14 BOOLEAN, ch11-r14 BOOLEAN, ch12-r14 BOOLEAN, ch13-r14 BOOLEAN, ch14-r14 BOOLEAN } maxWLAN-AP-r14 INTEGER ::= 128 WLAN-AP-Data-r14 ::= SEQUENCE { wlan-AP-Identifier-r14 WLAN-AP-Identifier-r13, wlan-AP-Location-r14 WLAN-AP-Location-r14 OPTIONAL, -- Need ON ... } WLAN-AP-Location-r14 ::= SEQUENCE { locationDataLCI-r14 LocationDataLCI-r14, ... } LocationDataLCI-r14 ::= SEQUENCE { latitudeUncertainty-r14 BIT STRING (SIZE (6)), latitude-r14 BIT STRING (SIZE (34)), longitudeUncertainty-r14 BIT STRING (SIZE (6)), longitude-r14 BIT STRING (SIZE (34)), altitudeUncertainty-r14 BIT STRING (SIZE (6)) OPTIONAL, -- Need ON altitude-r14 BIT STRING (SIZE (30)) OPTIONAL, -- Need ON datum-r14 BIT STRING (SIZE (8)), ... } WLAN-RequestAssistanceData-r14 ::= SEQUENCE { requestedAD-r14 BIT STRING { ap-identifier (0), ap-location (1)} (SIZE (1..8)), visibleAPs-r14 SEQUENCE (SIZE (1..maxVisibleAPs-r14)) OF WLAN-AP-Identifier-r13 OPTIONAL, wlan-AP-StoredData-r14 SEQUENCE (SIZE (1..maxKnownAPs-r14)) OF WLAN-AP-Identifier-r13 OPTIONAL, ... } maxVisibleAPs-r14 INTEGER ::= 32 maxKnownAPs-r14 INTEGER ::= 2048 BT-ProvideLocationInformation-r13 ::= SEQUENCE { bt-MeasurementInformation-r13 BT-MeasurementInformation-r13 OPTIONAL, bt-Error-r13 BT-Error-r13 OPTIONAL, ... } BT-MeasurementInformation-r13 ::= SEQUENCE { measurementReferenceTime-r13 UTCTime OPTIONAL, bt-MeasurementList-r13 BT-MeasurementList-r13 OPTIONAL, ... } BT-MeasurementList-r13 ::= SEQUENCE (SIZE(1..maxBT-Beacon-r13)) OF BT-MeasurementElement-r13 BT-MeasurementElement-r13 ::= SEQUENCE { btAddr-r13 BIT STRING (SIZE (48)), rssi-r13 INTEGER (-128..127) OPTIONAL, ... } maxBT-Beacon-r13 INTEGER ::= 32 BT-RequestLocationInformation-r13 ::= SEQUENCE { requestedMeasurements-r13 BIT STRING { rssi (0)} (SIZE(1..8)), ... } BT-ProvideCapabilities-r13 ::= SEQUENCE { bt-Modes-r13 BIT STRING { standalone (0), ue-assisted (1)} (SIZE (1..8)), bt-MeasSupported-r13 BIT STRING { rssi-r13 (0)} (SIZE (1..8)), ..., [[ idleStateForMeasurements-r14 ENUMERATED { required } OPTIONAL, periodicalReportingSupported-r14 PositioningModes OPTIONAL ]] } BT-RequestCapabilities-r13 ::= SEQUENCE { ... } BT-Error-r13 ::= CHOICE { locationServerErrorCauses-r13 BT-LocationServerErrorCauses-r13, targetDeviceErrorCauses-r13 BT-TargetDeviceErrorCauses-r13, ... } BT-LocationServerErrorCauses-r13 ::= SEQUENCE { cause-r13 ENUMERATED {undefined, ...}, ... } BT-TargetDeviceErrorCauses-r13 ::= SEQUENCE { cause-r13 ENUMERATED {undefined, requestedMeasurementsNotAvailable, notAllrequestedMeasurementsPossible, ... }, bt-Beacon-rssiMeasurementNotPossible-r13 NULL OPTIONAL, ... } END asn1tools-0.169.0/tests/files/3gpp/lpp_14_3_0.py000066400000000000000000021416271524544274600210730ustar00rootroot00000000000000EXPECTED = {'LPP-PDU-Definitions': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'A-GNSS-Error': {'members': [{'name': 'locationServerErrorCauses', 'type': 'GNSS-LocationServerErrorCauses'}, {'name': 'targetDeviceErrorCauses', 'type': 'GNSS-TargetDeviceErrorCauses'}, None], 'type': 'CHOICE'}, 'A-GNSS-ProvideAssistanceData': {'members': [{'name': 'gnss-CommonAssistData', 'optional': True, 'type': 'GNSS-CommonAssistData'}, {'name': 'gnss-GenericAssistData', 'optional': True, 'type': 'GNSS-GenericAssistData'}, {'name': 'gnss-Error', 'optional': True, 'type': 'A-GNSS-Error'}, None], 'type': 'SEQUENCE'}, 'A-GNSS-ProvideCapabilities': {'members': [{'name': 'gnss-SupportList', 'optional': True, 'type': 'GNSS-SupportList'}, {'name': 'assistanceDataSupportList', 'optional': True, 'type': 'AssistanceDataSupportList'}, {'name': 'locationCoordinateTypes', 'optional': True, 'type': 'LocationCoordinateTypes'}, {'name': 'velocityTypes', 'optional': True, 'type': 'VelocityTypes'}, None, [{'name': 'periodicalReportingNotSupported-r14', 'optional': True, 'type': 'PositioningModes'}, {'name': 'idleStateForMeasurements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('required', 0)]}]], 'type': 'SEQUENCE'}, 'A-GNSS-ProvideLocationInformation': {'members': [{'name': 'gnss-SignalMeasurementInformation', 'optional': True, 'type': 'GNSS-SignalMeasurementInformation'}, {'name': 'gnss-LocationInformation', 'optional': True, 'type': 'GNSS-LocationInformation'}, {'name': 'gnss-Error', 'optional': True, 'type': 'A-GNSS-Error'}, None], 'type': 'SEQUENCE'}, 'A-GNSS-RequestAssistanceData': {'members': [{'name': 'gnss-CommonAssistDataReq', 'optional': True, 'type': 'GNSS-CommonAssistDataReq'}, {'name': 'gnss-GenericAssistDataReq', 'optional': True, 'type': 'GNSS-GenericAssistDataReq'}, None], 'type': 'SEQUENCE'}, 'A-GNSS-RequestCapabilities': {'members': [{'name': 'gnss-SupportListReq', 'type': 'BOOLEAN'}, {'name': 'assistanceDataSupportListReq', 'type': 'BOOLEAN'}, {'name': 'locationVelocityTypesReq', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'A-GNSS-RequestLocationInformation': {'members': [{'name': 'gnss-PositioningInstructions', 'type': 'GNSS-PositioningInstructions'}, None], 'type': 'SEQUENCE'}, 'ARFCN-ValueEUTRA': {'restricted-to': [(0, 'maxEARFCN')], 'type': 'INTEGER'}, 'ARFCN-ValueEUTRA-r14': {'restricted-to': [(0, 'maxEARFCN2')], 'type': 'INTEGER'}, 'ARFCN-ValueEUTRA-v9a0': {'restricted-to': [('maxEARFCN-Plus1', 'maxEARFCN2')], 'type': 'INTEGER'}, 'ARFCN-ValueUTRA': {'restricted-to': [(0, 16383)], 'type': 'INTEGER'}, 'Abort': {'members': [{'members': [{'members': [{'name': 'abort-r9', 'type': 'Abort-r9-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'Abort-r9-IEs': {'members': [{'name': 'commonIEsAbort', 'optional': True, 'type': 'CommonIEsAbort'}, None, {'name': 'epdu-Abort', 'optional': True, 'type': 'EPDU-Sequence'}], 'type': 'SEQUENCE'}, 'AccessTypes': {'members': [{'name': 'accessTypes', 'named-bits': [('eutra', '0'), ('utra', '1'), ('gsm', '2'), ('nb-iot', '3')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'Acknowledgement': {'members': [{'name': 'ackRequested', 'type': 'BOOLEAN'}, {'name': 'ackIndicator', 'optional': True, 'type': 'SequenceNumber'}], 'type': 'SEQUENCE'}, 'Add-PRSconfigNeighbourElement-r14': {'members': [{'name': 'add-prsInfo-r14', 'optional': True, 'type': 'PRS-Info'}, None], 'type': 'SEQUENCE'}, 'AdditionalInformation': {'type': 'ENUMERATED', 'values': [('onlyReturnInformationRequested', 0), ('mayReturnAditionalInformation', 1), None]}, 'AdditionalPath-r14': {'members': [{'name': 'relativeTimeDifference-r14', 'restricted-to': [(-256, 255)], 'type': 'INTEGER'}, {'name': 'path-Quality-r14', 'optional': True, 'type': 'OTDOA-MeasQuality'}, None], 'type': 'SEQUENCE'}, 'AdditionalPathList-r14': {'element': {'type': 'AdditionalPath-r14'}, 'size': [(1, 'maxPaths-r14')], 'type': 'SEQUENCE ' 'OF'}, 'AlmanacBDS-AlmanacSet-r12': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'bdsAlmToa-r12', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'bdsAlmSqrtA-r12', 'restricted-to': [(0, 16777215)], 'type': 'INTEGER'}, {'name': 'bdsAlmE-r12', 'restricted-to': [(0, 131071)], 'type': 'INTEGER'}, {'name': 'bdsAlmW-r12', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'bdsAlmM0-r12', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'bdsAlmOmega0-r12', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'bdsAlmOmegaDot-r12', 'restricted-to': [(-65536, 65535)], 'type': 'INTEGER'}, {'name': 'bdsAlmDeltaI-r12', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'bdsAlmA0-r12', 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, {'name': 'bdsAlmA1-r12', 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, {'name': 'bdsSvHealth-r12', 'optional': True, 'size': [9], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'AlmanacECEF-SBAS-AlmanacSet': {'members': [{'name': 'sbasAlmDataID', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'svID', 'type': 'SV-ID'}, {'name': 'sbasAlmHealth', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'sbasAlmXg', 'restricted-to': [(-16384, 16383)], 'type': 'INTEGER'}, {'name': 'sbasAlmYg', 'restricted-to': [(-16384, 16383)], 'type': 'INTEGER'}, {'name': 'sbasAlmZg', 'restricted-to': [(-256, 255)], 'type': 'INTEGER'}, {'name': 'sbasAlmXgdot', 'restricted-to': [(-4, 3)], 'type': 'INTEGER'}, {'name': 'sbasAlmYgDot', 'restricted-to': [(-4, 3)], 'type': 'INTEGER'}, {'name': 'sbasAlmZgDot', 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}, {'name': 'sbasAlmTo', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'AlmanacGLONASS-AlmanacSet': {'members': [{'name': 'gloAlm-NA', 'restricted-to': [(1, 1461)], 'type': 'INTEGER'}, {'name': 'gloAlmnA', 'restricted-to': [(1, 24)], 'type': 'INTEGER'}, {'name': 'gloAlmHA', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'gloAlmLambdaA', 'restricted-to': [(-1048576, 1048575)], 'type': 'INTEGER'}, {'name': 'gloAlmtlambdaA', 'restricted-to': [(0, 2097151)], 'type': 'INTEGER'}, {'name': 'gloAlmDeltaIa', 'restricted-to': [(-131072, 131071)], 'type': 'INTEGER'}, {'name': 'gloAlmDeltaTA', 'restricted-to': [(-2097152, 2097151)], 'type': 'INTEGER'}, {'name': 'gloAlmDeltaTdotA', 'restricted-to': [(-64, 63)], 'type': 'INTEGER'}, {'name': 'gloAlmEpsilonA', 'restricted-to': [(0, 32767)], 'type': 'INTEGER'}, {'name': 'gloAlmOmegaA', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'gloAlmTauA', 'restricted-to': [(-512, 511)], 'type': 'INTEGER'}, {'name': 'gloAlmCA', 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'gloAlmMA', 'optional': True, 'size': [2], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'AlmanacKeplerianSet': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'kepAlmanacE', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'kepAlmanacDeltaI', 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, {'name': 'kepAlmanacOmegaDot', 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, {'name': 'kepSV-StatusINAV', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'kepSV-StatusFNAV', 'optional': True, 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'kepAlmanacAPowerHalf', 'restricted-to': [(-4096, 4095)], 'type': 'INTEGER'}, {'name': 'kepAlmanacOmega0', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'kepAlmanacW', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'kepAlmanacM0', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'kepAlmanacAF0', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'kepAlmanacAF1', 'restricted-to': [(-4096, 4095)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'AlmanacMidiAlmanacSet': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'midiAlmE', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'midiAlmDeltaI', 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, {'name': 'midiAlmOmegaDot', 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, {'name': 'midiAlmSqrtA', 'restricted-to': [(0, 131071)], 'type': 'INTEGER'}, {'name': 'midiAlmOmega0', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'midiAlmOmega', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'midiAlmMo', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'midiAlmaf0', 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, {'name': 'midiAlmaf1', 'restricted-to': [(-512, 511)], 'type': 'INTEGER'}, {'name': 'midiAlmL1Health', 'type': 'BOOLEAN'}, {'name': 'midiAlmL2Health', 'type': 'BOOLEAN'}, {'name': 'midiAlmL5Health', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'AlmanacNAV-KeplerianSet': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'navAlmE', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'navAlmDeltaI', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'navAlmOMEGADOT', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'navAlmSVHealth', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'navAlmSqrtA', 'restricted-to': [(0, 16777215)], 'type': 'INTEGER'}, {'name': 'navAlmOMEGAo', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'navAlmOmega', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'navAlmMo', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'navAlmaf0', 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, {'name': 'navAlmaf1', 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'AlmanacReducedKeplerianSet': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'redAlmDeltaA', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'redAlmOmega0', 'restricted-to': [(-64, 63)], 'type': 'INTEGER'}, {'name': 'redAlmPhi0', 'restricted-to': [(-64, 63)], 'type': 'INTEGER'}, {'name': 'redAlmL1Health', 'type': 'BOOLEAN'}, {'name': 'redAlmL2Health', 'type': 'BOOLEAN'}, {'name': 'redAlmL5Health', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'AssistanceDataSupportList': {'members': [{'name': 'gnss-CommonAssistanceDataSupport', 'type': 'GNSS-CommonAssistanceDataSupport'}, {'name': 'gnss-GenericAssistanceDataSupport', 'type': 'GNSS-GenericAssistanceDataSupport'}, None], 'type': 'SEQUENCE'}, 'BDS-ClockModel-r12': {'members': [{'name': 'bdsAODC-r12', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'bdsToc-r12', 'restricted-to': [(0, 131071)], 'type': 'INTEGER'}, {'name': 'bdsA0-r12', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'bdsA1-r12', 'restricted-to': [(-2097152, 2097151)], 'type': 'INTEGER'}, {'name': 'bdsA2-r12', 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, {'name': 'bdsTgd1-r12', 'restricted-to': [(-512, 511)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'BDS-DifferentialCorrections-r12': {'members': [{'name': 'dbds-RefTime-r12', 'restricted-to': [(0, 3599)], 'type': 'INTEGER'}, {'name': 'bds-SgnTypeList-r12', 'type': 'BDS-SgnTypeList-r12'}, None], 'type': 'SEQUENCE'}, 'BDS-DifferentialCorrectionsReq-r12': {'members': [{'name': 'dgnss-SignalsReq', 'type': 'GNSS-SignalIDs'}, None], 'type': 'SEQUENCE'}, 'BDS-DifferentialCorrectionsSupport-r12': {'members': [{'name': 'gnssSignalIDs', 'type': 'GNSS-SignalIDs'}, None], 'type': 'SEQUENCE'}, 'BDS-GridModelParameter-r12': {'members': [{'name': 'bds-RefTime-r12', 'restricted-to': [(0, 3599)], 'type': 'INTEGER'}, {'name': 'gridIonList-r12', 'type': 'GridIonList-r12'}, None], 'type': 'SEQUENCE'}, 'BDS-GridModelReq-r12': {'members': [None], 'type': 'SEQUENCE'}, 'BDS-GridModelSupport-r12': {'members': [None], 'type': 'SEQUENCE'}, 'BDS-SgnTypeElement-r12': {'members': [{'name': 'gnss-SignalID', 'optional': True, 'type': 'GNSS-SignalID'}, {'name': 'dbds-CorrectionList-r12', 'type': 'DBDS-CorrectionList-r12'}, None], 'type': 'SEQUENCE'}, 'BDS-SgnTypeList-r12': {'element': {'type': 'BDS-SgnTypeElement-r12'}, 'size': [(1, 3)], 'type': 'SEQUENCE ' 'OF'}, 'BT-Error-r13': {'members': [{'name': 'locationServerErrorCauses-r13', 'type': 'BT-LocationServerErrorCauses-r13'}, {'name': 'targetDeviceErrorCauses-r13', 'type': 'BT-TargetDeviceErrorCauses-r13'}, None], 'type': 'CHOICE'}, 'BT-LocationServerErrorCauses-r13': {'members': [{'name': 'cause-r13', 'type': 'ENUMERATED', 'values': [('undefined', 0), None]}, None], 'type': 'SEQUENCE'}, 'BT-MeasurementElement-r13': {'members': [{'name': 'btAddr-r13', 'size': [48], 'type': 'BIT ' 'STRING'}, {'name': 'rssi-r13', 'optional': True, 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'BT-MeasurementInformation-r13': {'members': [{'name': 'measurementReferenceTime-r13', 'optional': True, 'type': 'UTCTime'}, {'name': 'bt-MeasurementList-r13', 'optional': True, 'type': 'BT-MeasurementList-r13'}, None], 'type': 'SEQUENCE'}, 'BT-MeasurementList-r13': {'element': {'type': 'BT-MeasurementElement-r13'}, 'size': [(1, 'maxBT-Beacon-r13')], 'type': 'SEQUENCE ' 'OF'}, 'BT-ProvideCapabilities-r13': {'members': [{'name': 'bt-Modes-r13', 'named-bits': [('standalone', '0'), ('ue-assisted', '1')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, {'name': 'bt-MeasSupported-r13', 'named-bits': [('rssi-r13', '0')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None, [{'name': 'idleStateForMeasurements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('required', 0)]}, {'name': 'periodicalReportingSupported-r14', 'optional': True, 'type': 'PositioningModes'}]], 'type': 'SEQUENCE'}, 'BT-ProvideLocationInformation-r13': {'members': [{'name': 'bt-MeasurementInformation-r13', 'optional': True, 'type': 'BT-MeasurementInformation-r13'}, {'name': 'bt-Error-r13', 'optional': True, 'type': 'BT-Error-r13'}, None], 'type': 'SEQUENCE'}, 'BT-RequestCapabilities-r13': {'members': [None], 'type': 'SEQUENCE'}, 'BT-RequestLocationInformation-r13': {'members': [{'name': 'requestedMeasurements-r13', 'named-bits': [('rssi', '0')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'BT-TargetDeviceErrorCauses-r13': {'members': [{'name': 'cause-r13', 'type': 'ENUMERATED', 'values': [('undefined', 0), ('requestedMeasurementsNotAvailable', 1), ('notAllrequestedMeasurementsPossible', 2), None]}, {'name': 'bt-Beacon-rssiMeasurementNotPossible-r13', 'optional': True, 'type': 'NULL'}, None], 'type': 'SEQUENCE'}, 'BadSignalElement': {'members': [{'name': 'badSVID', 'type': 'SV-ID'}, {'name': 'badSignalID', 'optional': True, 'type': 'GNSS-SignalIDs'}, None], 'type': 'SEQUENCE'}, 'CNAV-ClockModel': {'members': [{'name': 'cnavToc', 'restricted-to': [(0, 2015)], 'type': 'INTEGER'}, {'name': 'cnavTop', 'restricted-to': [(0, 2015)], 'type': 'INTEGER'}, {'name': 'cnavURA0', 'restricted-to': [(-16, 15)], 'type': 'INTEGER'}, {'name': 'cnavURA1', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'cnavURA2', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'cnavAf2', 'restricted-to': [(-512, 511)], 'type': 'INTEGER'}, {'name': 'cnavAf1', 'restricted-to': [(-524288, 524287)], 'type': 'INTEGER'}, {'name': 'cnavAf0', 'restricted-to': [(-33554432, 33554431)], 'type': 'INTEGER'}, {'name': 'cnavTgd', 'restricted-to': [(-4096, 4095)], 'type': 'INTEGER'}, {'name': 'cnavISCl1cp', 'optional': True, 'restricted-to': [(-4096, 4095)], 'type': 'INTEGER'}, {'name': 'cnavISCl1cd', 'optional': True, 'restricted-to': [(-4096, 4095)], 'type': 'INTEGER'}, {'name': 'cnavISCl1ca', 'optional': True, 'restricted-to': [(-4096, 4095)], 'type': 'INTEGER'}, {'name': 'cnavISCl2c', 'optional': True, 'restricted-to': [(-4096, 4095)], 'type': 'INTEGER'}, {'name': 'cnavISCl5i5', 'optional': True, 'restricted-to': [(-4096, 4095)], 'type': 'INTEGER'}, {'name': 'cnavISCl5q5', 'optional': True, 'restricted-to': [(-4096, 4095)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'CarrierFreq-NB-r14': {'members': [{'name': 'carrierFreq-r14', 'type': 'ARFCN-ValueEUTRA-r14'}, {'name': 'carrierFreqOffset-r14', 'optional': True, 'type': 'CarrierFreqOffsetNB-r14'}, None], 'type': 'SEQUENCE'}, 'CarrierFreqOffsetNB-r14': {'type': 'ENUMERATED', 'values': [('v-10', 0), ('v-9', 1), ('v-8', 2), ('v-7', 3), ('v-6', 4), ('v-5', 5), ('v-4', 6), ('v-3', 7), ('v-2', 8), ('v-1', 9), ('v-0dot5', 10), ('v0', 11), ('v1', 12), ('v2', 13), ('v3', 14), ('v4', 15), ('v5', 16), ('v6', 17), ('v7', 18), ('v8', 19), ('v9', 20)]}, 'CellGlobalIdEUTRA-AndUTRA': {'members': [{'members': [{'element': {'restricted-to': [(0, 9)], 'type': 'INTEGER'}, 'name': 'mcc', 'size': [3], 'type': 'SEQUENCE ' 'OF'}, {'element': {'restricted-to': [(0, 9)], 'type': 'INTEGER'}, 'name': 'mnc', 'size': [(2, 3)], 'type': 'SEQUENCE ' 'OF'}], 'name': 'plmn-Identity', 'type': 'SEQUENCE'}, {'members': [{'name': 'eutra', 'size': [28], 'type': 'BIT ' 'STRING'}, {'name': 'utra', 'size': [32], 'type': 'BIT ' 'STRING'}], 'name': 'cellIdentity', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'CellGlobalIdGERAN': {'members': [{'members': [{'element': {'restricted-to': [(0, 9)], 'type': 'INTEGER'}, 'name': 'mcc', 'size': [3], 'type': 'SEQUENCE ' 'OF'}, {'element': {'restricted-to': [(0, 9)], 'type': 'INTEGER'}, 'name': 'mnc', 'size': [(2, 3)], 'type': 'SEQUENCE ' 'OF'}], 'name': 'plmn-Identity', 'type': 'SEQUENCE'}, {'name': 'locationAreaCode', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'cellIdentity', 'size': [16], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'CommonIEsAbort': {'members': [{'name': 'abortCause', 'type': 'ENUMERATED', 'values': [('undefined', 0), ('stopPeriodicReporting', 1), ('targetDeviceAbort', 2), ('networkAbort', 3), None]}], 'type': 'SEQUENCE'}, 'CommonIEsError': {'members': [{'name': 'errorCause', 'type': 'ENUMERATED', 'values': [('undefined', 0), ('lppMessageHeaderError', 1), ('lppMessageBodyError', 2), ('epduError', 3), ('incorrectDataValue', 4), None]}], 'type': 'SEQUENCE'}, 'CommonIEsProvideAssistanceData': {'members': [None], 'type': 'SEQUENCE'}, 'CommonIEsProvideCapabilities': {'members': [None], 'type': 'SEQUENCE'}, 'CommonIEsProvideLocationInformation': {'members': [{'name': 'locationEstimate', 'optional': True, 'type': 'LocationCoordinates'}, {'name': 'velocityEstimate', 'optional': True, 'type': 'Velocity'}, {'name': 'locationError', 'optional': True, 'type': 'LocationError'}, None, [{'name': 'earlyFixReport-r12', 'optional': True, 'type': 'EarlyFixReport-r12'}], [{'name': 'locationSource-r13', 'optional': True, 'type': 'LocationSource-r13'}, {'name': 'locationTimestamp-r13', 'optional': True, 'type': 'UTCTime'}]], 'type': 'SEQUENCE'}, 'CommonIEsRequestAssistanceData': {'members': [{'name': 'primaryCellID', 'optional': True, 'type': 'ECGI'}, None], 'type': 'SEQUENCE'}, 'CommonIEsRequestCapabilities': {'members': [None], 'type': 'SEQUENCE'}, 'CommonIEsRequestLocationInformation': {'members': [{'name': 'locationInformationType', 'type': 'LocationInformationType'}, {'name': 'triggeredReporting', 'optional': True, 'type': 'TriggeredReportingCriteria'}, {'name': 'periodicalReporting', 'optional': True, 'type': 'PeriodicalReportingCriteria'}, {'name': 'additionalInformation', 'optional': True, 'type': 'AdditionalInformation'}, {'name': 'qos', 'optional': True, 'type': 'QoS'}, {'name': 'environment', 'optional': True, 'type': 'Environment'}, {'name': 'locationCoordinateTypes', 'optional': True, 'type': 'LocationCoordinateTypes'}, {'name': 'velocityTypes', 'optional': True, 'type': 'VelocityTypes'}, None, [{'name': 'messageSizeLimitNB-r14', 'optional': True, 'type': 'MessageSizeLimitNB-r14'}]], 'type': 'SEQUENCE'}, 'DBDS-CorrectionElement-r12': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'bds-UDREI-r12', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'bds-RURAI-r12', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'bds-ECC-DeltaT-r12', 'restricted-to': [(-4096, 4095)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'DBDS-CorrectionList-r12': {'element': {'type': 'DBDS-CorrectionElement-r12'}, 'size': [(1, 64)], 'type': 'SEQUENCE ' 'OF'}, 'DGNSS-CorrectionsElement': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'iod', 'size': [11], 'type': 'BIT ' 'STRING'}, {'name': 'udre', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'pseudoRangeCor', 'restricted-to': [(-2047, 2047)], 'type': 'INTEGER'}, {'name': 'rangeRateCor', 'restricted-to': [(-127, 127)], 'type': 'INTEGER'}, {'name': 'udreGrowthRate', 'optional': True, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'udreValidityTime', 'optional': True, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'DGNSS-SatList': {'element': {'type': 'DGNSS-CorrectionsElement'}, 'size': [(1, 64)], 'type': 'SEQUENCE OF'}, 'DGNSS-SgnTypeElement': {'members': [{'name': 'gnss-SignalID', 'type': 'GNSS-SignalID'}, {'name': 'gnss-StatusHealth', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'dgnss-SatList', 'type': 'DGNSS-SatList'}, None], 'type': 'SEQUENCE'}, 'DGNSS-SgnTypeList': {'element': {'type': 'DGNSS-SgnTypeElement'}, 'size': [(1, 3)], 'type': 'SEQUENCE OF'}, 'ECGI': {'members': [{'element': {'restricted-to': [(0, 9)], 'type': 'INTEGER'}, 'name': 'mcc', 'size': [3], 'type': 'SEQUENCE OF'}, {'element': {'restricted-to': [(0, 9)], 'type': 'INTEGER'}, 'name': 'mnc', 'size': [(2, 3)], 'type': 'SEQUENCE OF'}, {'name': 'cellidentity', 'size': [28], 'type': 'BIT STRING'}], 'type': 'SEQUENCE'}, 'ECID-Error': {'members': [{'name': 'locationServerErrorCauses', 'type': 'ECID-LocationServerErrorCauses'}, {'name': 'targetDeviceErrorCauses', 'type': 'ECID-TargetDeviceErrorCauses'}, None], 'type': 'CHOICE'}, 'ECID-LocationServerErrorCauses': {'members': [{'name': 'cause', 'type': 'ENUMERATED', 'values': [('undefined', 0), None]}, None], 'type': 'SEQUENCE'}, 'ECID-ProvideCapabilities': {'members': [{'name': 'ecid-MeasSupported', 'named-bits': [('rsrpSup', '0'), ('rsrqSup', '1'), ('ueRxTxSup', '2'), ('nrsrpSup-r14', '3'), ('nrsrqSup-r14', '4')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None, [{'name': 'ueRxTxSupTDD-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], [{'name': 'periodicalReporting-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'triggeredReporting-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'idleStateForMeasurements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('required', 0)]}]], 'type': 'SEQUENCE'}, 'ECID-ProvideLocationInformation': {'members': [{'name': 'ecid-SignalMeasurementInformation', 'optional': True, 'type': 'ECID-SignalMeasurementInformation'}, {'name': 'ecid-Error', 'optional': True, 'type': 'ECID-Error'}, None], 'type': 'SEQUENCE'}, 'ECID-RequestCapabilities': {'members': [None], 'type': 'SEQUENCE'}, 'ECID-RequestLocationInformation': {'members': [{'name': 'requestedMeasurements', 'named-bits': [('rsrpReq', '0'), ('rsrqReq', '1'), ('ueRxTxReq', '2'), ('nrsrpReq-r14', '3'), ('nrsrqReq-r14', '4')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'ECID-SignalMeasurementInformation': {'members': [{'name': 'primaryCellMeasuredResults', 'optional': True, 'type': 'MeasuredResultsElement'}, {'name': 'measuredResultsList', 'type': 'MeasuredResultsList'}, None], 'type': 'SEQUENCE'}, 'ECID-TargetDeviceErrorCauses': {'members': [{'name': 'cause', 'type': 'ENUMERATED', 'values': [('undefined', 0), ('requestedMeasurementNotAvailable', 1), ('notAllrequestedMeasurementsPossible', 2), None]}, {'name': 'rsrpMeasurementNotPossible', 'optional': True, 'type': 'NULL'}, {'name': 'rsrqMeasurementNotPossible', 'optional': True, 'type': 'NULL'}, {'name': 'ueRxTxMeasurementNotPossible', 'optional': True, 'type': 'NULL'}, None, [{'name': 'nrsrpMeasurementNotPossible-r14', 'optional': True, 'type': 'NULL'}, {'name': 'nrsrqMeasurementNotPossible-r14', 'optional': True, 'type': 'NULL'}]], 'type': 'SEQUENCE'}, 'EPDU': {'members': [{'name': 'ePDU-Identifier', 'type': 'EPDU-Identifier'}, {'name': 'ePDU-Body', 'type': 'EPDU-Body'}], 'type': 'SEQUENCE'}, 'EPDU-Body': {'type': 'OCTET STRING'}, 'EPDU-ID': {'restricted-to': [(1, 256)], 'type': 'INTEGER'}, 'EPDU-Identifier': {'members': [{'name': 'ePDU-ID', 'type': 'EPDU-ID'}, {'name': 'ePDU-Name', 'optional': True, 'type': 'EPDU-Name'}, None], 'type': 'SEQUENCE'}, 'EPDU-Name': {'size': [(1, 32)], 'type': 'VisibleString'}, 'EPDU-Sequence': {'element': {'type': 'EPDU'}, 'size': [(1, 'maxEPDU')], 'type': 'SEQUENCE OF'}, 'EarlyFixReport-r12': {'type': 'ENUMERATED', 'values': [('noMoreMessages', 0), ('moreMessagesOnTheWay', 1)]}, 'Ellipsoid-Point': {'members': [{'name': 'latitudeSign', 'type': 'ENUMERATED', 'values': [('north', 0), ('south', 1)]}, {'name': 'degreesLatitude', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'degreesLongitude', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Ellipsoid-PointWithUncertaintyCircle': {'members': [{'name': 'latitudeSign', 'type': 'ENUMERATED', 'values': [('north', 0), ('south', 1)]}, {'name': 'degreesLatitude', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'degreesLongitude', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'uncertainty', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'EllipsoidArc': {'members': [{'name': 'latitudeSign', 'type': 'ENUMERATED', 'values': [('north', 0), ('south', 1)]}, {'name': 'degreesLatitude', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'degreesLongitude', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'innerRadius', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'uncertaintyRadius', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'offsetAngle', 'restricted-to': [(0, 179)], 'type': 'INTEGER'}, {'name': 'includedAngle', 'restricted-to': [(0, 179)], 'type': 'INTEGER'}, {'name': 'confidence', 'restricted-to': [(0, 100)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'EllipsoidPointWithAltitude': {'members': [{'name': 'latitudeSign', 'type': 'ENUMERATED', 'values': [('north', 0), ('south', 1)]}, {'name': 'degreesLatitude', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'degreesLongitude', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'altitudeDirection', 'type': 'ENUMERATED', 'values': [('height', 0), ('depth', 1)]}, {'name': 'altitude', 'restricted-to': [(0, 32767)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'EllipsoidPointWithAltitudeAndUncertaintyEllipsoid': {'members': [{'name': 'latitudeSign', 'type': 'ENUMERATED', 'values': [('north', 0), ('south', 1)]}, {'name': 'degreesLatitude', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'degreesLongitude', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'altitudeDirection', 'type': 'ENUMERATED', 'values': [('height', 0), ('depth', 1)]}, {'name': 'altitude', 'restricted-to': [(0, 32767)], 'type': 'INTEGER'}, {'name': 'uncertaintySemiMajor', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'uncertaintySemiMinor', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'orientationMajorAxis', 'restricted-to': [(0, 179)], 'type': 'INTEGER'}, {'name': 'uncertaintyAltitude', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'confidence', 'restricted-to': [(0, 100)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'EllipsoidPointWithUncertaintyEllipse': {'members': [{'name': 'latitudeSign', 'type': 'ENUMERATED', 'values': [('north', 0), ('south', 1)]}, {'name': 'degreesLatitude', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'degreesLongitude', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'uncertaintySemiMajor', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'uncertaintySemiMinor', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'orientationMajorAxis', 'restricted-to': [(0, 179)], 'type': 'INTEGER'}, {'name': 'confidence', 'restricted-to': [(0, 100)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Environment': {'type': 'ENUMERATED', 'values': [('badArea', 0), ('notBadArea', 1), ('mixedArea', 2), None]}, 'Error': {'members': [{'name': 'error-r9', 'type': 'Error-r9-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'Error-r9-IEs': {'members': [{'name': 'commonIEsError', 'optional': True, 'type': 'CommonIEsError'}, None, {'name': 'epdu-Error', 'optional': True, 'type': 'EPDU-Sequence'}], 'type': 'SEQUENCE'}, 'GLONASS-ClockModel': {'members': [{'name': 'gloTau', 'restricted-to': [(-2097152, 2097151)], 'type': 'INTEGER'}, {'name': 'gloGamma', 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, {'name': 'gloDeltaTau', 'optional': True, 'restricted-to': [(-16, 15)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GNSS-AcquisitionAssistElement': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'doppler0', 'restricted-to': [(-2048, 2047)], 'type': 'INTEGER'}, {'name': 'doppler1', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'dopplerUncertainty', 'restricted-to': [(0, 4)], 'type': 'INTEGER'}, {'name': 'codePhase', 'restricted-to': [(0, 1022)], 'type': 'INTEGER'}, {'name': 'intCodePhase', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'codePhaseSearchWindow', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'azimuth', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, {'name': 'elevation', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, None, {'name': 'codePhase1023', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'dopplerUncertaintyExt-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('d60', 0), ('d80', 1), ('d100', 2), ('d120', 3), ('noInformation', 4), None]}], 'type': 'SEQUENCE'}, 'GNSS-AcquisitionAssistList': {'element': {'type': 'GNSS-AcquisitionAssistElement'}, 'size': [(1, 64)], 'type': 'SEQUENCE ' 'OF'}, 'GNSS-AcquisitionAssistance': {'members': [{'name': 'gnss-SignalID', 'type': 'GNSS-SignalID'}, {'name': 'gnss-AcquisitionAssistList', 'type': 'GNSS-AcquisitionAssistList'}, None, {'name': 'confidence-r10', 'optional': True, 'restricted-to': [(0, 100)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'GNSS-AcquisitionAssistanceReq': {'members': [{'name': 'gnss-SignalID-Req', 'type': 'GNSS-SignalID'}, None], 'type': 'SEQUENCE'}, 'GNSS-AcquisitionAssistanceSupport': {'members': [None, {'name': 'confidenceSupport-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'dopplerUncertaintyExtSupport-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'GNSS-Almanac': {'members': [{'name': 'weekNumber', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'toa', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'ioda', 'optional': True, 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'completeAlmanacProvided', 'type': 'BOOLEAN'}, {'name': 'gnss-AlmanacList', 'type': 'GNSS-AlmanacList'}, None, [{'name': 'toa-ext-v1240', 'optional': True, 'restricted-to': [(256, 1023)], 'type': 'INTEGER'}, {'name': 'ioda-ext-v1240', 'optional': True, 'restricted-to': [(4, 15)], 'type': 'INTEGER'}]], 'type': 'SEQUENCE'}, 'GNSS-AlmanacElement': {'members': [{'name': 'keplerianAlmanacSet', 'type': 'AlmanacKeplerianSet'}, {'name': 'keplerianNAV-Almanac', 'type': 'AlmanacNAV-KeplerianSet'}, {'name': 'keplerianReducedAlmanac', 'type': 'AlmanacReducedKeplerianSet'}, {'name': 'keplerianMidiAlmanac', 'type': 'AlmanacMidiAlmanacSet'}, {'name': 'keplerianGLONASS', 'type': 'AlmanacGLONASS-AlmanacSet'}, {'name': 'ecef-SBAS-Almanac', 'type': 'AlmanacECEF-SBAS-AlmanacSet'}, None, {'name': 'keplerianBDS-Almanac-r12', 'type': 'AlmanacBDS-AlmanacSet-r12'}], 'type': 'CHOICE'}, 'GNSS-AlmanacList': {'element': {'type': 'GNSS-AlmanacElement'}, 'size': [(1, 64)], 'type': 'SEQUENCE OF'}, 'GNSS-AlmanacReq': {'members': [{'name': 'modelID', 'optional': True, 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GNSS-AlmanacSupport': {'members': [{'name': 'almanacModel', 'named-bits': [('model-1', '0'), ('model-2', '1'), ('model-3', '2'), ('model-4', '3'), ('model-5', '4'), ('model-6', '5'), ('model-7', '6')], 'optional': True, 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'GNSS-AuxiliaryInformation': {'members': [{'name': 'gnss-ID-GPS', 'type': 'GNSS-ID-GPS'}, {'name': 'gnss-ID-GLONASS', 'type': 'GNSS-ID-GLONASS'}, None], 'type': 'CHOICE'}, 'GNSS-AuxiliaryInformationReq': {'members': [None], 'type': 'SEQUENCE'}, 'GNSS-AuxiliaryInformationSupport': {'members': [None], 'type': 'SEQUENCE'}, 'GNSS-BadSignalList': {'element': {'type': 'BadSignalElement'}, 'size': [(1, 64)], 'type': 'SEQUENCE ' 'OF'}, 'GNSS-ClockModel': {'members': [{'name': 'standardClockModelList', 'type': 'StandardClockModelList'}, {'name': 'nav-ClockModel', 'type': 'NAV-ClockModel'}, {'name': 'cnav-ClockModel', 'type': 'CNAV-ClockModel'}, {'name': 'glonass-ClockModel', 'type': 'GLONASS-ClockModel'}, {'name': 'sbas-ClockModel', 'type': 'SBAS-ClockModel'}, None, {'name': 'bds-ClockModel-r12', 'type': 'BDS-ClockModel-r12'}], 'type': 'CHOICE'}, 'GNSS-CommonAssistData': {'members': [{'name': 'gnss-ReferenceTime', 'optional': True, 'type': 'GNSS-ReferenceTime'}, {'name': 'gnss-ReferenceLocation', 'optional': True, 'type': 'GNSS-ReferenceLocation'}, {'name': 'gnss-IonosphericModel', 'optional': True, 'type': 'GNSS-IonosphericModel'}, {'name': 'gnss-EarthOrientationParameters', 'optional': True, 'type': 'GNSS-EarthOrientationParameters'}, None], 'type': 'SEQUENCE'}, 'GNSS-CommonAssistDataReq': {'members': [{'name': 'gnss-ReferenceTimeReq', 'optional': True, 'type': 'GNSS-ReferenceTimeReq'}, {'name': 'gnss-ReferenceLocationReq', 'optional': True, 'type': 'GNSS-ReferenceLocationReq'}, {'name': 'gnss-IonosphericModelReq', 'optional': True, 'type': 'GNSS-IonosphericModelReq'}, {'name': 'gnss-EarthOrientationParametersReq', 'optional': True, 'type': 'GNSS-EarthOrientationParametersReq'}, None], 'type': 'SEQUENCE'}, 'GNSS-CommonAssistanceDataSupport': {'members': [{'name': 'gnss-ReferenceTimeSupport', 'optional': True, 'type': 'GNSS-ReferenceTimeSupport'}, {'name': 'gnss-ReferenceLocationSupport', 'optional': True, 'type': 'GNSS-ReferenceLocationSupport'}, {'name': 'gnss-IonosphericModelSupport', 'optional': True, 'type': 'GNSS-IonosphericModelSupport'}, {'name': 'gnss-EarthOrientationParametersSupport', 'optional': True, 'type': 'GNSS-EarthOrientationParametersSupport'}, None], 'type': 'SEQUENCE'}, 'GNSS-DataBitAssistance': {'members': [{'name': 'gnss-TOD', 'restricted-to': [(0, 3599)], 'type': 'INTEGER'}, {'name': 'gnss-TODfrac', 'optional': True, 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'gnss-DataBitsSatList', 'type': 'GNSS-DataBitsSatList'}, None], 'type': 'SEQUENCE'}, 'GNSS-DataBitAssistanceReq': {'members': [{'name': 'gnss-TOD-Req', 'restricted-to': [(0, 3599)], 'type': 'INTEGER'}, {'name': 'gnss-TOD-FracReq', 'optional': True, 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'dataBitInterval', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'gnss-SignalType', 'type': 'GNSS-SignalIDs'}, {'name': 'gnss-DataBitsReq', 'optional': True, 'type': 'GNSS-DataBitsReqSatList'}, None], 'type': 'SEQUENCE'}, 'GNSS-DataBitAssistanceSupport': {'members': [None], 'type': 'SEQUENCE'}, 'GNSS-DataBitsReqSatElement': {'members': [{'name': 'svID', 'type': 'SV-ID'}, None], 'type': 'SEQUENCE'}, 'GNSS-DataBitsReqSatList': {'element': {'type': 'GNSS-DataBitsReqSatElement'}, 'size': [(1, 64)], 'type': 'SEQUENCE ' 'OF'}, 'GNSS-DataBitsSatElement': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'gnss-DataBitsSgnList', 'type': 'GNSS-DataBitsSgnList'}, None], 'type': 'SEQUENCE'}, 'GNSS-DataBitsSatList': {'element': {'type': 'GNSS-DataBitsSatElement'}, 'size': [(1, 64)], 'type': 'SEQUENCE ' 'OF'}, 'GNSS-DataBitsSgnElement': {'members': [{'name': 'gnss-SignalType', 'type': 'GNSS-SignalID'}, {'name': 'gnss-DataBits', 'size': [(1, 1024)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'GNSS-DataBitsSgnList': {'element': {'type': 'GNSS-DataBitsSgnElement'}, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, 'GNSS-DifferentialCorrections': {'members': [{'name': 'dgnss-RefTime', 'restricted-to': [(0, 3599)], 'type': 'INTEGER'}, {'name': 'dgnss-SgnTypeList', 'type': 'DGNSS-SgnTypeList'}, None], 'type': 'SEQUENCE'}, 'GNSS-DifferentialCorrectionsReq': {'members': [{'name': 'dgnss-SignalsReq', 'type': 'GNSS-SignalIDs'}, {'name': 'dgnss-ValidityTimeReq', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'GNSS-DifferentialCorrectionsSupport': {'members': [{'name': 'gnssSignalIDs', 'type': 'GNSS-SignalIDs'}, {'name': 'dgnss-ValidityTimeSup', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'GNSS-EarthOrientationParameters': {'members': [{'name': 'teop', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'pmX', 'restricted-to': [(-1048576, 1048575)], 'type': 'INTEGER'}, {'name': 'pmXdot', 'restricted-to': [(-16384, 16383)], 'type': 'INTEGER'}, {'name': 'pmY', 'restricted-to': [(-1048576, 1048575)], 'type': 'INTEGER'}, {'name': 'pmYdot', 'restricted-to': [(-16384, 16383)], 'type': 'INTEGER'}, {'name': 'deltaUT1', 'restricted-to': [(-1073741824, 1073741823)], 'type': 'INTEGER'}, {'name': 'deltaUT1dot', 'restricted-to': [(-262144, 262143)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GNSS-EarthOrientationParametersReq': {'members': [None], 'type': 'SEQUENCE'}, 'GNSS-EarthOrientationParametersSupport': {'members': [None], 'type': 'SEQUENCE'}, 'GNSS-GenericAssistData': {'element': {'type': 'GNSS-GenericAssistDataElement'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'GNSS-GenericAssistDataElement': {'members': [{'name': 'gnss-ID', 'type': 'GNSS-ID'}, {'name': 'sbas-ID', 'optional': True, 'type': 'SBAS-ID'}, {'name': 'gnss-TimeModels', 'optional': True, 'type': 'GNSS-TimeModelList'}, {'name': 'gnss-DifferentialCorrections', 'optional': True, 'type': 'GNSS-DifferentialCorrections'}, {'name': 'gnss-NavigationModel', 'optional': True, 'type': 'GNSS-NavigationModel'}, {'name': 'gnss-RealTimeIntegrity', 'optional': True, 'type': 'GNSS-RealTimeIntegrity'}, {'name': 'gnss-DataBitAssistance', 'optional': True, 'type': 'GNSS-DataBitAssistance'}, {'name': 'gnss-AcquisitionAssistance', 'optional': True, 'type': 'GNSS-AcquisitionAssistance'}, {'name': 'gnss-Almanac', 'optional': True, 'type': 'GNSS-Almanac'}, {'name': 'gnss-UTC-Model', 'optional': True, 'type': 'GNSS-UTC-Model'}, {'name': 'gnss-AuxiliaryInformation', 'optional': True, 'type': 'GNSS-AuxiliaryInformation'}, None, [{'name': 'bds-DifferentialCorrections-r12', 'optional': True, 'type': 'BDS-DifferentialCorrections-r12'}, {'name': 'bds-GridModel-r12', 'optional': True, 'type': 'BDS-GridModelParameter-r12'}]], 'type': 'SEQUENCE'}, 'GNSS-GenericAssistDataReq': {'element': {'type': 'GNSS-GenericAssistDataReqElement'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'GNSS-GenericAssistDataReqElement': {'members': [{'name': 'gnss-ID', 'type': 'GNSS-ID'}, {'name': 'sbas-ID', 'optional': True, 'type': 'SBAS-ID'}, {'name': 'gnss-TimeModelsReq', 'optional': True, 'type': 'GNSS-TimeModelListReq'}, {'name': 'gnss-DifferentialCorrectionsReq', 'optional': True, 'type': 'GNSS-DifferentialCorrectionsReq'}, {'name': 'gnss-NavigationModelReq', 'optional': True, 'type': 'GNSS-NavigationModelReq'}, {'name': 'gnss-RealTimeIntegrityReq', 'optional': True, 'type': 'GNSS-RealTimeIntegrityReq'}, {'name': 'gnss-DataBitAssistanceReq', 'optional': True, 'type': 'GNSS-DataBitAssistanceReq'}, {'name': 'gnss-AcquisitionAssistanceReq', 'optional': True, 'type': 'GNSS-AcquisitionAssistanceReq'}, {'name': 'gnss-AlmanacReq', 'optional': True, 'type': 'GNSS-AlmanacReq'}, {'name': 'gnss-UTCModelReq', 'optional': True, 'type': 'GNSS-UTC-ModelReq'}, {'name': 'gnss-AuxiliaryInformationReq', 'optional': True, 'type': 'GNSS-AuxiliaryInformationReq'}, None, [{'name': 'bds-DifferentialCorrectionsReq-r12', 'optional': True, 'type': 'BDS-DifferentialCorrectionsReq-r12'}, {'name': 'bds-GridModelReq-r12', 'optional': True, 'type': 'BDS-GridModelReq-r12'}]], 'type': 'SEQUENCE'}, 'GNSS-GenericAssistDataSupportElement': {'members': [{'name': 'gnss-ID', 'type': 'GNSS-ID'}, {'name': 'sbas-ID', 'optional': True, 'type': 'SBAS-ID'}, {'name': 'gnss-TimeModelsSupport', 'optional': True, 'type': 'GNSS-TimeModelListSupport'}, {'name': 'gnss-DifferentialCorrectionsSupport', 'optional': True, 'type': 'GNSS-DifferentialCorrectionsSupport'}, {'name': 'gnss-NavigationModelSupport', 'optional': True, 'type': 'GNSS-NavigationModelSupport'}, {'name': 'gnss-RealTimeIntegritySupport', 'optional': True, 'type': 'GNSS-RealTimeIntegritySupport'}, {'name': 'gnss-DataBitAssistanceSupport', 'optional': True, 'type': 'GNSS-DataBitAssistanceSupport'}, {'name': 'gnss-AcquisitionAssistanceSupport', 'optional': True, 'type': 'GNSS-AcquisitionAssistanceSupport'}, {'name': 'gnss-AlmanacSupport', 'optional': True, 'type': 'GNSS-AlmanacSupport'}, {'name': 'gnss-UTC-ModelSupport', 'optional': True, 'type': 'GNSS-UTC-ModelSupport'}, {'name': 'gnss-AuxiliaryInformationSupport', 'optional': True, 'type': 'GNSS-AuxiliaryInformationSupport'}, None, [{'name': 'bds-DifferentialCorrectionsSupport-r12', 'optional': True, 'type': 'BDS-DifferentialCorrectionsSupport-r12'}, {'name': 'bds-GridModelSupport-r12', 'optional': True, 'type': 'BDS-GridModelSupport-r12'}]], 'type': 'SEQUENCE'}, 'GNSS-GenericAssistanceDataSupport': {'element': {'type': 'GNSS-GenericAssistDataSupportElement'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'GNSS-ID': {'members': [{'name': 'gnss-id', 'type': 'ENUMERATED', 'values': [('gps', 0), ('sbas', 1), ('qzss', 2), ('galileo', 3), ('glonass', 4), None, ('bds', 5)]}, None], 'type': 'SEQUENCE'}, 'GNSS-ID-Bitmap': {'members': [{'name': 'gnss-ids', 'named-bits': [('gps', '0'), ('sbas', '1'), ('qzss', '2'), ('galileo', '3'), ('glonass', '4'), ('bds', '5')], 'size': [(1, 16)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'GNSS-ID-GLONASS': {'element': {'type': 'GNSS-ID-GLONASS-SatElement'}, 'size': [(1, 64)], 'type': 'SEQUENCE OF'}, 'GNSS-ID-GLONASS-SatElement': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'signalsAvailable', 'type': 'GNSS-SignalIDs'}, {'name': 'channelNumber', 'optional': True, 'restricted-to': [(-7, 13)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GNSS-ID-GPS': {'element': {'type': 'GNSS-ID-GPS-SatElement'}, 'size': [(1, 64)], 'type': 'SEQUENCE OF'}, 'GNSS-ID-GPS-SatElement': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'signalsAvailable', 'type': 'GNSS-SignalIDs'}, None], 'type': 'SEQUENCE'}, 'GNSS-IonosphericModel': {'members': [{'name': 'klobucharModel', 'optional': True, 'type': 'KlobucharModelParameter'}, {'name': 'neQuickModel', 'optional': True, 'type': 'NeQuickModelParameter'}, None], 'type': 'SEQUENCE'}, 'GNSS-IonosphericModelReq': {'members': [{'name': 'klobucharModelReq', 'optional': True, 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'neQuickModelReq', 'optional': True, 'type': 'NULL'}, None], 'type': 'SEQUENCE'}, 'GNSS-IonosphericModelSupport': {'members': [{'name': 'ionoModel', 'named-bits': [('klobuchar', '0'), ('neQuick', '1')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'GNSS-LocationInformation': {'members': [{'name': 'measurementReferenceTime', 'type': 'MeasurementReferenceTime'}, {'name': 'agnss-List', 'type': 'GNSS-ID-Bitmap'}, None], 'type': 'SEQUENCE'}, 'GNSS-LocationServerErrorCauses': {'members': [{'name': 'cause', 'type': 'ENUMERATED', 'values': [('undefined', 0), ('undeliveredAssistanceDataIsNotSupportedByServer', 1), ('undeliveredAssistanceDataIsSupportedButCurrentlyNotAvailableByServer', 2), ('undeliveredAssistanceDataIsPartlyNotSupportedAndPartlyNotAvailableByServer', 3), None]}, None], 'type': 'SEQUENCE'}, 'GNSS-MeasurementForOneGNSS': {'members': [{'name': 'gnss-ID', 'type': 'GNSS-ID'}, {'name': 'gnss-SgnMeasList', 'type': 'GNSS-SgnMeasList'}, None], 'type': 'SEQUENCE'}, 'GNSS-MeasurementList': {'element': {'type': 'GNSS-MeasurementForOneGNSS'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'GNSS-NavModelSatelliteElement': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'svHealth', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'iod', 'size': [11], 'type': 'BIT ' 'STRING'}, {'name': 'gnss-ClockModel', 'type': 'GNSS-ClockModel'}, {'name': 'gnss-OrbitModel', 'type': 'GNSS-OrbitModel'}, None, [{'name': 'svHealthExt-v1240', 'optional': True, 'size': [4], 'type': 'BIT ' 'STRING'}]], 'type': 'SEQUENCE'}, 'GNSS-NavModelSatelliteList': {'element': {'type': 'GNSS-NavModelSatelliteElement'}, 'size': [(1, 64)], 'type': 'SEQUENCE ' 'OF'}, 'GNSS-NavigationModel': {'members': [{'name': 'nonBroadcastIndFlag', 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'gnss-SatelliteList', 'type': 'GNSS-NavModelSatelliteList'}, None], 'type': 'SEQUENCE'}, 'GNSS-NavigationModelReq': {'members': [{'name': 'storedNavList', 'type': 'StoredNavListInfo'}, {'name': 'reqNavList', 'type': 'ReqNavListInfo'}, None], 'type': 'CHOICE'}, 'GNSS-NavigationModelSupport': {'members': [{'name': 'clockModel', 'named-bits': [('model-1', '0'), ('model-2', '1'), ('model-3', '2'), ('model-4', '3'), ('model-5', '4'), ('model-6', '5')], 'optional': True, 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, {'name': 'orbitModel', 'named-bits': [('model-1', '0'), ('model-2', '1'), ('model-3', '2'), ('model-4', '3'), ('model-5', '4'), ('model-6', '5')], 'optional': True, 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'GNSS-OrbitModel': {'members': [{'name': 'keplerianSet', 'type': 'NavModelKeplerianSet'}, {'name': 'nav-KeplerianSet', 'type': 'NavModelNAV-KeplerianSet'}, {'name': 'cnav-KeplerianSet', 'type': 'NavModelCNAV-KeplerianSet'}, {'name': 'glonass-ECEF', 'type': 'NavModel-GLONASS-ECEF'}, {'name': 'sbas-ECEF', 'type': 'NavModel-SBAS-ECEF'}, None, {'name': 'bds-KeplerianSet-r12', 'type': 'NavModel-BDS-KeplerianSet-r12'}], 'type': 'CHOICE'}, 'GNSS-PositioningInstructions': {'members': [{'name': 'gnss-Methods', 'type': 'GNSS-ID-Bitmap'}, {'name': 'fineTimeAssistanceMeasReq', 'type': 'BOOLEAN'}, {'name': 'adrMeasReq', 'type': 'BOOLEAN'}, {'name': 'multiFreqMeasReq', 'type': 'BOOLEAN'}, {'name': 'assistanceAvailability', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'GNSS-RealTimeIntegrity': {'members': [{'name': 'gnss-BadSignalList', 'type': 'GNSS-BadSignalList'}, None], 'type': 'SEQUENCE'}, 'GNSS-RealTimeIntegrityReq': {'members': [None], 'type': 'SEQUENCE'}, 'GNSS-RealTimeIntegritySupport': {'members': [None], 'type': 'SEQUENCE'}, 'GNSS-ReferenceLocation': {'members': [{'name': 'threeDlocation', 'type': 'EllipsoidPointWithAltitudeAndUncertaintyEllipsoid'}, None], 'type': 'SEQUENCE'}, 'GNSS-ReferenceLocationReq': {'members': [None], 'type': 'SEQUENCE'}, 'GNSS-ReferenceLocationSupport': {'members': [None], 'type': 'SEQUENCE'}, 'GNSS-ReferenceTime': {'members': [{'name': 'gnss-SystemTime', 'type': 'GNSS-SystemTime'}, {'name': 'referenceTimeUnc', 'optional': True, 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'element': {'type': 'GNSS-ReferenceTimeForOneCell'}, 'name': 'gnss-ReferenceTimeForCells', 'optional': True, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, None], 'type': 'SEQUENCE'}, 'GNSS-ReferenceTimeForOneCell': {'members': [{'name': 'networkTime', 'type': 'NetworkTime'}, {'name': 'referenceTimeUnc', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'bsAlign', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, None], 'type': 'SEQUENCE'}, 'GNSS-ReferenceTimeReq': {'members': [{'element': {'type': 'GNSS-ID'}, 'name': 'gnss-TimeReqPrefList', 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'gps-TOW-assistReq', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'notOfLeapSecReq', 'optional': True, 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'GNSS-ReferenceTimeSupport': {'members': [{'name': 'gnss-SystemTime', 'type': 'GNSS-ID-Bitmap'}, {'name': 'fta-Support', 'optional': True, 'type': 'AccessTypes'}, None], 'type': 'SEQUENCE'}, 'GNSS-SatMeasElement': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'cNo', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'mpathDet', 'type': 'ENUMERATED', 'values': [('notMeasured', 0), ('low', 1), ('medium', 2), ('high', 3), None]}, {'name': 'carrierQualityInd', 'optional': True, 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'codePhase', 'restricted-to': [(0, 2097151)], 'type': 'INTEGER'}, {'name': 'integerCodePhase', 'optional': True, 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'codePhaseRMSError', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'doppler', 'optional': True, 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'adr', 'optional': True, 'restricted-to': [(0, 33554431)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GNSS-SatMeasList': {'element': {'type': 'GNSS-SatMeasElement'}, 'size': [(1, 64)], 'type': 'SEQUENCE OF'}, 'GNSS-SgnMeasElement': {'members': [{'name': 'gnss-SignalID', 'type': 'GNSS-SignalID'}, {'name': 'gnss-CodePhaseAmbiguity', 'optional': True, 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'gnss-SatMeasList', 'type': 'GNSS-SatMeasList'}, None], 'type': 'SEQUENCE'}, 'GNSS-SgnMeasList': {'element': {'type': 'GNSS-SgnMeasElement'}, 'size': [(1, 8)], 'type': 'SEQUENCE OF'}, 'GNSS-SignalID': {'members': [{'name': 'gnss-SignalID', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GNSS-SignalIDs': {'members': [{'name': 'gnss-SignalIDs', 'size': [8], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'GNSS-SignalMeasurementInformation': {'members': [{'name': 'measurementReferenceTime', 'type': 'MeasurementReferenceTime'}, {'name': 'gnss-MeasurementList', 'type': 'GNSS-MeasurementList'}, None], 'type': 'SEQUENCE'}, 'GNSS-SupportElement': {'members': [{'name': 'gnss-ID', 'type': 'GNSS-ID'}, {'name': 'sbas-IDs', 'optional': True, 'type': 'SBAS-IDs'}, {'name': 'agnss-Modes', 'type': 'PositioningModes'}, {'name': 'gnss-Signals', 'type': 'GNSS-SignalIDs'}, {'members': [{'name': 'cellTime', 'type': 'AccessTypes'}, {'name': 'mode', 'type': 'PositioningModes'}, None], 'name': 'fta-MeasSupport', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'adr-Support', 'type': 'BOOLEAN'}, {'name': 'velocityMeasurementSupport', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'GNSS-SupportList': {'element': {'type': 'GNSS-SupportElement'}, 'size': [(1, 16)], 'type': 'SEQUENCE OF'}, 'GNSS-SystemTime': {'members': [{'name': 'gnss-TimeID', 'type': 'GNSS-ID'}, {'name': 'gnss-DayNumber', 'restricted-to': [(0, 32767)], 'type': 'INTEGER'}, {'name': 'gnss-TimeOfDay', 'restricted-to': [(0, 86399)], 'type': 'INTEGER'}, {'name': 'gnss-TimeOfDayFrac-msec', 'optional': True, 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'notificationOfLeapSecond', 'optional': True, 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'gps-TOW-Assist', 'optional': True, 'type': 'GPS-TOW-Assist'}, None], 'type': 'SEQUENCE'}, 'GNSS-TargetDeviceErrorCauses': {'members': [{'name': 'cause', 'type': 'ENUMERATED', 'values': [('undefined', 0), ('thereWereNotEnoughSatellitesReceived', 1), ('assistanceDataMissing', 2), ('notAllRequestedMeasurementsPossible', 3), None]}, {'name': 'fineTimeAssistanceMeasurementsNotPossible', 'optional': True, 'type': 'NULL'}, {'name': 'adrMeasurementsNotPossible', 'optional': True, 'type': 'NULL'}, {'name': 'multiFrequencyMeasurementsNotPossible', 'optional': True, 'type': 'NULL'}, None], 'type': 'SEQUENCE'}, 'GNSS-TimeModelElement': {'members': [{'name': 'gnss-TimeModelRefTime', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'tA0', 'restricted-to': [(-67108864, 67108863)], 'type': 'INTEGER'}, {'name': 'tA1', 'optional': True, 'restricted-to': [(-4096, 4095)], 'type': 'INTEGER'}, {'name': 'tA2', 'optional': True, 'restricted-to': [(-64, 63)], 'type': 'INTEGER'}, {'name': 'gnss-TO-ID', 'restricted-to': [(1, 15)], 'type': 'INTEGER'}, {'name': 'weekNumber', 'optional': True, 'restricted-to': [(0, 8191)], 'type': 'INTEGER'}, {'name': 'deltaT', 'optional': True, 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GNSS-TimeModelElementReq': {'members': [{'name': 'gnss-TO-IDsReq', 'restricted-to': [(1, 15)], 'type': 'INTEGER'}, {'name': 'deltaTreq', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'GNSS-TimeModelList': {'element': {'type': 'GNSS-TimeModelElement'}, 'size': [(1, 15)], 'type': 'SEQUENCE ' 'OF'}, 'GNSS-TimeModelListReq': {'element': {'type': 'GNSS-TimeModelElementReq'}, 'size': [(1, 15)], 'type': 'SEQUENCE ' 'OF'}, 'GNSS-TimeModelListSupport': {'members': [None], 'type': 'SEQUENCE'}, 'GNSS-UTC-Model': {'members': [{'name': 'utcModel1', 'type': 'UTC-ModelSet1'}, {'name': 'utcModel2', 'type': 'UTC-ModelSet2'}, {'name': 'utcModel3', 'type': 'UTC-ModelSet3'}, {'name': 'utcModel4', 'type': 'UTC-ModelSet4'}, None, {'name': 'utcModel5-r12', 'type': 'UTC-ModelSet5-r12'}], 'type': 'CHOICE'}, 'GNSS-UTC-ModelReq': {'members': [{'name': 'modelID', 'optional': True, 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GNSS-UTC-ModelSupport': {'members': [{'name': 'utc-Model', 'named-bits': [('model-1', '0'), ('model-2', '1'), ('model-3', '2'), ('model-4', '3'), ('model-5', '4')], 'optional': True, 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'GPS-TOW-Assist': {'element': {'type': 'GPS-TOW-AssistElement'}, 'size': [(1, 64)], 'type': 'SEQUENCE OF'}, 'GPS-TOW-AssistElement': {'members': [{'name': 'satelliteID', 'restricted-to': [(1, 64)], 'type': 'INTEGER'}, {'name': 'tlmWord', 'restricted-to': [(0, 16383)], 'type': 'INTEGER'}, {'name': 'antiSpoof', 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'alert', 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'tlmRsvdBits', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GridIonElement-r12': {'members': [{'name': 'igp-ID-r12', 'restricted-to': [(1, 320)], 'type': 'INTEGER'}, {'name': 'dt-r12', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, {'name': 'givei-r12', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GridIonList-r12': {'element': {'type': 'GridIonElement-r12'}, 'size': [(1, 320)], 'type': 'SEQUENCE OF'}, 'HorizontalAccuracy': {'members': [{'name': 'accuracy', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'confidence', 'restricted-to': [(0, 100)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'HorizontalVelocity': {'members': [{'name': 'bearing', 'restricted-to': [(0, 359)], 'type': 'INTEGER'}, {'name': 'horizontalSpeed', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'HorizontalVelocityWithUncertainty': {'members': [{'name': 'bearing', 'restricted-to': [(0, 359)], 'type': 'INTEGER'}, {'name': 'horizontalSpeed', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'uncertaintySpeed', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'HorizontalWithVerticalVelocity': {'members': [{'name': 'bearing', 'restricted-to': [(0, 359)], 'type': 'INTEGER'}, {'name': 'horizontalSpeed', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'verticalDirection', 'type': 'ENUMERATED', 'values': [('upward', 0), ('downward', 1)]}, {'name': 'verticalSpeed', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'HorizontalWithVerticalVelocityAndUncertainty': {'members': [{'name': 'bearing', 'restricted-to': [(0, 359)], 'type': 'INTEGER'}, {'name': 'horizontalSpeed', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'verticalDirection', 'type': 'ENUMERATED', 'values': [('upward', 0), ('downward', 1)]}, {'name': 'verticalSpeed', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'horizontalUncertaintySpeed', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'verticalUncertaintySpeed', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Initiator': {'type': 'ENUMERATED', 'values': [('locationServer', 0), ('targetDevice', 1), None]}, 'KlobucharModelParameter': {'members': [{'name': 'dataID', 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'alfa0', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'alfa1', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'alfa2', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'alfa3', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'beta0', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'beta1', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'beta2', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'beta3', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'LPP-Message': {'members': [{'name': 'transactionID', 'optional': True, 'type': 'LPP-TransactionID'}, {'name': 'endTransaction', 'type': 'BOOLEAN'}, {'name': 'sequenceNumber', 'optional': True, 'type': 'SequenceNumber'}, {'name': 'acknowledgement', 'optional': True, 'type': 'Acknowledgement'}, {'name': 'lpp-MessageBody', 'optional': True, 'type': 'LPP-MessageBody'}], 'type': 'SEQUENCE'}, 'LPP-MessageBody': {'members': [{'members': [{'name': 'requestCapabilities', 'type': 'RequestCapabilities'}, {'name': 'provideCapabilities', 'type': 'ProvideCapabilities'}, {'name': 'requestAssistanceData', 'type': 'RequestAssistanceData'}, {'name': 'provideAssistanceData', 'type': 'ProvideAssistanceData'}, {'name': 'requestLocationInformation', 'type': 'RequestLocationInformation'}, {'name': 'provideLocationInformation', 'type': 'ProvideLocationInformation'}, {'name': 'abort', 'type': 'Abort'}, {'name': 'error', 'type': 'Error'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}, {'name': 'spare0', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'LPP-TransactionID': {'members': [{'name': 'initiator', 'type': 'Initiator'}, {'name': 'transactionNumber', 'type': 'TransactionNumber'}, None], 'type': 'SEQUENCE'}, 'LocationCoordinateTypes': {'members': [{'name': 'ellipsoidPoint', 'type': 'BOOLEAN'}, {'name': 'ellipsoidPointWithUncertaintyCircle', 'type': 'BOOLEAN'}, {'name': 'ellipsoidPointWithUncertaintyEllipse', 'type': 'BOOLEAN'}, {'name': 'polygon', 'type': 'BOOLEAN'}, {'name': 'ellipsoidPointWithAltitude', 'type': 'BOOLEAN'}, {'name': 'ellipsoidPointWithAltitudeAndUncertaintyEllipsoid', 'type': 'BOOLEAN'}, {'name': 'ellipsoidArc', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'LocationCoordinates': {'members': [{'name': 'ellipsoidPoint', 'type': 'Ellipsoid-Point'}, {'name': 'ellipsoidPointWithUncertaintyCircle', 'type': 'Ellipsoid-PointWithUncertaintyCircle'}, {'name': 'ellipsoidPointWithUncertaintyEllipse', 'type': 'EllipsoidPointWithUncertaintyEllipse'}, {'name': 'polygon', 'type': 'Polygon'}, {'name': 'ellipsoidPointWithAltitude', 'type': 'EllipsoidPointWithAltitude'}, {'name': 'ellipsoidPointWithAltitudeAndUncertaintyEllipsoid', 'type': 'EllipsoidPointWithAltitudeAndUncertaintyEllipsoid'}, {'name': 'ellipsoidArc', 'type': 'EllipsoidArc'}, None], 'type': 'CHOICE'}, 'LocationDataLCI-r14': {'members': [{'name': 'latitudeUncertainty-r14', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'latitude-r14', 'size': [34], 'type': 'BIT ' 'STRING'}, {'name': 'longitudeUncertainty-r14', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'longitude-r14', 'size': [34], 'type': 'BIT ' 'STRING'}, {'name': 'altitudeUncertainty-r14', 'optional': True, 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'altitude-r14', 'optional': True, 'size': [30], 'type': 'BIT ' 'STRING'}, {'name': 'datum-r14', 'size': [8], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'LocationError': {'members': [{'name': 'locationfailurecause', 'type': 'LocationFailureCause'}, None], 'type': 'SEQUENCE'}, 'LocationFailureCause': {'type': 'ENUMERATED', 'values': [('undefined', 0), ('requestedMethodNotSupported', 1), ('positionMethodFailure', 2), ('periodicLocationMeasurementsNotAvailable', 3), None]}, 'LocationInformationType': {'type': 'ENUMERATED', 'values': [('locationEstimateRequired', 0), ('locationMeasurementsRequired', 1), ('locationEstimatePreferred', 2), ('locationMeasurementsPreferred', 3), None]}, 'LocationSource-r13': {'named-bits': [('a-gnss', '0'), ('wlan', '1'), ('bt', '2'), ('tbs', '3'), ('sensor', '4')], 'size': [(1, 16)], 'type': 'BIT STRING'}, 'MBS-AcquisitionAssistance-r14': {'members': [{'name': 'transmitterID-r14', 'optional': True, 'restricted-to': [(0, 32767)], 'type': 'INTEGER'}, {'name': 'mbsConfiguration-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('tb1', 0), ('tb2', 1), ('tb3', 2), ('tb4', 3), None]}, {'name': 'pnCodeIndex-r14', 'optional': True, 'restricted-to': [(1, 128)], 'type': 'INTEGER'}, {'name': 'freq-r14', 'optional': True, 'restricted-to': [(919750000, 927250000)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'MBS-AlmanacAssistance-r14': {'members': [{'name': 'transmitterID-r14', 'restricted-to': [(0, 32767)], 'type': 'INTEGER'}, {'name': 'transmitterLatitude-r14', 'size': [26], 'type': 'BIT ' 'STRING'}, {'name': 'transmitterLongitude-r14', 'size': [27], 'type': 'BIT ' 'STRING'}, {'name': 'transmitterAltitude-r14', 'size': [15], 'type': 'BIT ' 'STRING'}, {'name': 'timeCorrection-r14', 'optional': True, 'restricted-to': [(0, 25)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'MBS-AssistanceDataElement-r14': {'members': [{'name': 'mbs-AlmanacAssistance-r14', 'optional': True, 'type': 'MBS-AlmanacAssistance-r14'}, {'name': 'mbs-AcquisitionAssistance-r14', 'optional': True, 'type': 'MBS-AcquisitionAssistance-r14'}, None], 'type': 'SEQUENCE'}, 'MBS-AssistanceDataList-r14': {'element': {'type': 'MBS-AssistanceDataElement-r14'}, 'size': [(1, 'maxMBS-r14')], 'type': 'SEQUENCE ' 'OF'}, 'MBS-AssistanceDataSupportList-r14': {'members': [{'name': 'mbs-AcquisitionAssistanceDataSupport-r14', 'type': 'BOOLEAN'}, {'name': 'mbs-AlmanacAssistanceDataSupport-r14', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'MBS-BeaconMeasElement-r13': {'members': [{'name': 'transmitterID-r13', 'restricted-to': [(0, 32767)], 'type': 'INTEGER'}, {'name': 'codePhase-r13', 'restricted-to': [(0, 2097151)], 'type': 'INTEGER'}, {'name': 'codePhaseRMSError-r13', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, None, [{'name': 'rssi-r14', 'optional': True, 'restricted-to': [(-130, -30)], 'type': 'INTEGER'}]], 'type': 'SEQUENCE'}, 'MBS-BeaconMeasList-r13': {'element': {'type': 'MBS-BeaconMeasElement-r13'}, 'size': [(1, 64)], 'type': 'SEQUENCE ' 'OF'}, 'MeasuredResultsElement': {'members': [{'name': 'physCellId', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'cellGlobalId', 'optional': True, 'type': 'CellGlobalIdEUTRA-AndUTRA'}, {'name': 'arfcnEUTRA', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'systemFrameNumber', 'optional': True, 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'rsrp-Result', 'optional': True, 'restricted-to': [(0, 97)], 'type': 'INTEGER'}, {'name': 'rsrq-Result', 'optional': True, 'restricted-to': [(0, 34)], 'type': 'INTEGER'}, {'name': 'ue-RxTxTimeDiff', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, None, [{'name': 'arfcnEUTRA-v9a0', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9a0'}], [{'name': 'nrsrp-Result-r14', 'optional': True, 'restricted-to': [(0, 113)], 'type': 'INTEGER'}, {'name': 'nrsrq-Result-r14', 'optional': True, 'restricted-to': [(0, 74)], 'type': 'INTEGER'}, {'name': 'carrierFreqOffsetNB-r14', 'optional': True, 'type': 'CarrierFreqOffsetNB-r14'}, {'name': 'hyperSFN-r14', 'optional': True, 'size': [10], 'type': 'BIT ' 'STRING'}]], 'type': 'SEQUENCE'}, 'MeasuredResultsList': {'element': {'type': 'MeasuredResultsElement'}, 'size': [(1, 32)], 'type': 'SEQUENCE ' 'OF'}, 'MeasurementReferenceTime': {'members': [{'name': 'gnss-TOD-msec', 'restricted-to': [(0, 3599999)], 'type': 'INTEGER'}, {'name': 'gnss-TOD-frac', 'optional': True, 'restricted-to': [(0, 3999)], 'type': 'INTEGER'}, {'name': 'gnss-TOD-unc', 'optional': True, 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'gnss-TimeID', 'type': 'GNSS-ID'}, {'members': [{'members': [{'name': 'physCellId', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'cellGlobalId', 'optional': True, 'type': 'CellGlobalIdEUTRA-AndUTRA'}, {'name': 'systemFrameNumber', 'size': [10], 'type': 'BIT ' 'STRING'}, None], 'name': 'eUTRA', 'type': 'SEQUENCE'}, {'members': [{'members': [{'members': [{'name': 'primary-CPICH-Info', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, None], 'name': 'fdd', 'type': 'SEQUENCE'}, {'members': [{'name': 'cellParameters', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, None], 'name': 'tdd', 'type': 'SEQUENCE'}], 'name': 'mode', 'type': 'CHOICE'}, {'name': 'cellGlobalId', 'optional': True, 'type': 'CellGlobalIdEUTRA-AndUTRA'}, {'name': 'referenceSystemFrameNumber', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, None], 'name': 'uTRA', 'type': 'SEQUENCE'}, {'members': [{'name': 'bcchCarrier', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'bsic', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'cellGlobalId', 'optional': True, 'type': 'CellGlobalIdGERAN'}, {'members': [{'name': 'referenceFN', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'referenceFNMSB', 'optional': True, 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, None], 'name': 'referenceFrame', 'type': 'SEQUENCE'}, {'name': 'deltaGNSS-TOD', 'optional': True, 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, None], 'name': 'gSM', 'type': 'SEQUENCE'}, None, {'members': [{'name': 'nbPhysCellId-r14', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'nbCellGlobalId-r14', 'optional': True, 'type': 'ECGI'}, {'name': 'sfn-r14', 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'hyperSFN-r14', 'optional': True, 'size': [10], 'type': 'BIT ' 'STRING'}, None], 'name': 'nbIoT-r14', 'type': 'SEQUENCE'}], 'name': 'networkTime', 'optional': True, 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'MessageSizeLimitNB-r14': {'members': [{'name': 'measurementLimit-r14', 'optional': True, 'restricted-to': [(1, 512)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'NAV-ClockModel': {'members': [{'name': 'navToc', 'restricted-to': [(0, 37799)], 'type': 'INTEGER'}, {'name': 'navaf2', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'navaf1', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'navaf0', 'restricted-to': [(-2097152, 2097151)], 'type': 'INTEGER'}, {'name': 'navTgd', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'NPRS-Info-r14': {'members': [{'name': 'operationModeInfoNPRS-r14', 'type': 'ENUMERATED', 'values': [('inband', 0), ('standalone', 1)]}, {'name': 'nprs-carrier-r14', 'optional': True, 'type': 'CarrierFreq-NB-r14'}, {'name': 'nprsSequenceInfo-r14', 'optional': True, 'restricted-to': [(0, 174)], 'type': 'INTEGER'}, {'name': 'nprsID-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'members': [{'members': [{'name': 'subframePattern10-r14', 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'subframePattern40-r14', 'size': [40], 'type': 'BIT ' 'STRING'}], 'name': 'nprsBitmap-r14', 'type': 'CHOICE'}, {'members': [{'name': 'po2-r14', 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'po4-r14', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'po8-r14', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'po16-r14', 'size': [16], 'type': 'BIT ' 'STRING'}, None], 'name': 'nprs-MutingInfoA-r14', 'optional': True, 'type': 'CHOICE'}, None], 'name': 'partA-r14', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'nprs-Period-r14', 'type': 'ENUMERATED', 'values': [('ms160', 0), ('ms320', 1), ('ms640', 2), ('ms1280', 3), None]}, {'name': 'nprs-startSF-r14', 'type': 'ENUMERATED', 'values': [('zero', 0), ('one-eighth', 1), ('two-eighths', 2), ('three-eighths', 3), ('four-eighths', 4), ('five-eighths', 5), ('six-eighths', 6), ('seven-eighths', 7), None]}, {'name': 'nprs-NumSF-r14', 'type': 'ENUMERATED', 'values': [('sf10', 0), ('sf20', 1), ('sf40', 2), ('sf80', 3), ('sf160', 4), ('sf320', 5), ('sf640', 6), ('sf1280', 7), None]}, {'members': [{'name': 'po2-r14', 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'po4-r14', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'po8-r14', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'po16-r14', 'size': [16], 'type': 'BIT ' 'STRING'}, None], 'name': 'nprs-MutingInfoB-r14', 'optional': True, 'type': 'CHOICE'}, None], 'name': 'partB-r14', 'optional': True, 'type': 'SEQUENCE'}, None], 'type': 'SEQUENCE'}, 'NavModel-BDS-KeplerianSet-r12': {'members': [{'name': 'bdsAODE-r12', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'bdsURAI-r12', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'bdsToe-r12', 'restricted-to': [(0, 131071)], 'type': 'INTEGER'}, {'name': 'bdsAPowerHalf-r12', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}, {'name': 'bdsE-r12', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}, {'name': 'bdsW-r12', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'bdsDeltaN-r12', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'bdsM0-r12', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'bdsOmega0-r12', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'bdsOmegaDot-r12', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'bdsI0-r12', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'bdsIDot-r12', 'restricted-to': [(-8192, 8191)], 'type': 'INTEGER'}, {'name': 'bdsCuc-r12', 'restricted-to': [(-131072, 131071)], 'type': 'INTEGER'}, {'name': 'bdsCus-r12', 'restricted-to': [(-131072, 131071)], 'type': 'INTEGER'}, {'name': 'bdsCrc-r12', 'restricted-to': [(-131072, 131071)], 'type': 'INTEGER'}, {'name': 'bdsCrs-r12', 'restricted-to': [(-131072, 131071)], 'type': 'INTEGER'}, {'name': 'bdsCic-r12', 'restricted-to': [(-131072, 131071)], 'type': 'INTEGER'}, {'name': 'bdsCis-r12', 'restricted-to': [(-131072, 131071)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'NavModel-GLONASS-ECEF': {'members': [{'name': 'gloEn', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'gloP1', 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'gloP2', 'type': 'BOOLEAN'}, {'name': 'gloM', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'gloX', 'restricted-to': [(-67108864, 67108863)], 'type': 'INTEGER'}, {'name': 'gloXdot', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'gloXdotdot', 'restricted-to': [(-16, 15)], 'type': 'INTEGER'}, {'name': 'gloY', 'restricted-to': [(-67108864, 67108863)], 'type': 'INTEGER'}, {'name': 'gloYdot', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'gloYdotdot', 'restricted-to': [(-16, 15)], 'type': 'INTEGER'}, {'name': 'gloZ', 'restricted-to': [(-67108864, 67108863)], 'type': 'INTEGER'}, {'name': 'gloZdot', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'gloZdotdot', 'restricted-to': [(-16, 15)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'NavModel-SBAS-ECEF': {'members': [{'name': 'sbasTo', 'optional': True, 'restricted-to': [(0, 5399)], 'type': 'INTEGER'}, {'name': 'sbasAccuracy', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'sbasXg', 'restricted-to': [(-536870912, 536870911)], 'type': 'INTEGER'}, {'name': 'sbasYg', 'restricted-to': [(-536870912, 536870911)], 'type': 'INTEGER'}, {'name': 'sbasZg', 'restricted-to': [(-16777216, 16777215)], 'type': 'INTEGER'}, {'name': 'sbasXgDot', 'restricted-to': [(-65536, 65535)], 'type': 'INTEGER'}, {'name': 'sbasYgDot', 'restricted-to': [(-65536, 65535)], 'type': 'INTEGER'}, {'name': 'sbasZgDot', 'restricted-to': [(-131072, 131071)], 'type': 'INTEGER'}, {'name': 'sbasXgDotDot', 'restricted-to': [(-512, 511)], 'type': 'INTEGER'}, {'name': 'sbagYgDotDot', 'restricted-to': [(-512, 511)], 'type': 'INTEGER'}, {'name': 'sbasZgDotDot', 'restricted-to': [(-512, 511)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'NavModelCNAV-KeplerianSet': {'members': [{'name': 'cnavTop', 'restricted-to': [(0, 2015)], 'type': 'INTEGER'}, {'name': 'cnavURAindex', 'restricted-to': [(-16, 15)], 'type': 'INTEGER'}, {'name': 'cnavDeltaA', 'restricted-to': [(-33554432, 33554431)], 'type': 'INTEGER'}, {'name': 'cnavAdot', 'restricted-to': [(-16777216, 16777215)], 'type': 'INTEGER'}, {'name': 'cnavDeltaNo', 'restricted-to': [(-65536, 65535)], 'type': 'INTEGER'}, {'name': 'cnavDeltaNoDot', 'restricted-to': [(-4194304, 4194303)], 'type': 'INTEGER'}, {'name': 'cnavMo', 'restricted-to': [(-4294967296, 4294967295)], 'type': 'INTEGER'}, {'name': 'cnavE', 'restricted-to': [(0, 8589934591)], 'type': 'INTEGER'}, {'name': 'cnavOmega', 'restricted-to': [(-4294967296, 4294967295)], 'type': 'INTEGER'}, {'name': 'cnavOMEGA0', 'restricted-to': [(-4294967296, 4294967295)], 'type': 'INTEGER'}, {'name': 'cnavDeltaOmegaDot', 'restricted-to': [(-65536, 65535)], 'type': 'INTEGER'}, {'name': 'cnavIo', 'restricted-to': [(-4294967296, 4294967295)], 'type': 'INTEGER'}, {'name': 'cnavIoDot', 'restricted-to': [(-16384, 16383)], 'type': 'INTEGER'}, {'name': 'cnavCis', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'cnavCic', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'cnavCrs', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'cnavCrc', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'cnavCus', 'restricted-to': [(-1048576, 1048575)], 'type': 'INTEGER'}, {'name': 'cnavCuc', 'restricted-to': [(-1048576, 1048575)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'NavModelKeplerianSet': {'members': [{'name': 'keplerToe', 'restricted-to': [(0, 16383)], 'type': 'INTEGER'}, {'name': 'keplerW', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'keplerDeltaN', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'keplerM0', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'keplerOmegaDot', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'keplerE', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}, {'name': 'keplerIDot', 'restricted-to': [(-8192, 8191)], 'type': 'INTEGER'}, {'name': 'keplerAPowerHalf', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}, {'name': 'keplerI0', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'keplerOmega0', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'keplerCrs', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'keplerCis', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'keplerCus', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'keplerCrc', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'keplerCic', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'keplerCuc', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'NavModelNAV-KeplerianSet': {'members': [{'name': 'navURA', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'navFitFlag', 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'navToe', 'restricted-to': [(0, 37799)], 'type': 'INTEGER'}, {'name': 'navOmega', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'navDeltaN', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'navM0', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'navOmegaADot', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'navE', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}, {'name': 'navIDot', 'restricted-to': [(-8192, 8191)], 'type': 'INTEGER'}, {'name': 'navAPowerHalf', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}, {'name': 'navI0', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'navOmegaA0', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'navCrs', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'navCis', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'navCus', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'navCrc', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'navCic', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'navCuc', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'members': [{'name': 'ephemCodeOnL2', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'ephemL2Pflag', 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'members': [{'name': 'reserved1', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'reserved2', 'restricted-to': [(0, 16777215)], 'type': 'INTEGER'}, {'name': 'reserved3', 'restricted-to': [(0, 16777215)], 'type': 'INTEGER'}, {'name': 'reserved4', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}], 'name': 'ephemSF1Rsvd', 'type': 'SEQUENCE'}, {'name': 'ephemAODA', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}], 'name': 'addNAVparam', 'optional': True, 'type': 'SEQUENCE'}, None], 'type': 'SEQUENCE'}, 'NeQuickModelParameter': {'members': [{'name': 'ai0', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'ai1', 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, {'name': 'ai2', 'restricted-to': [(-8192, 8191)], 'type': 'INTEGER'}, {'name': 'ionoStormFlag1', 'optional': True, 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'ionoStormFlag2', 'optional': True, 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'ionoStormFlag3', 'optional': True, 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'ionoStormFlag4', 'optional': True, 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'ionoStormFlag5', 'optional': True, 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'NeighbourMeasurementElement': {'members': [{'name': 'physCellIdNeighbour', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'cellGlobalIdNeighbour', 'optional': True, 'type': 'ECGI'}, {'name': 'earfcnNeighbour', 'optional': True, 'type': 'ARFCN-ValueEUTRA'}, {'name': 'rstd', 'restricted-to': [(0, 12711)], 'type': 'INTEGER'}, {'name': 'rstd-Quality', 'type': 'OTDOA-MeasQuality'}, None, [{'name': 'earfcnNeighbour-v9a0', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9a0'}], [{'name': 'tpIdNeighbour-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'prsIdNeighbour-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'delta-rstd-r14', 'optional': True, 'restricted-to': [(0, 5)], 'type': 'INTEGER'}, {'name': 'additionalPathsNeighbour-r14', 'optional': True, 'type': 'AdditionalPathList-r14'}, {'name': 'nprsIdNeighbour-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'carrierFreqOffsetNB-Neighbour-r14', 'optional': True, 'type': 'CarrierFreqOffsetNB-r14'}]], 'type': 'SEQUENCE'}, 'NeighbourMeasurementElement-NB-r14': {'members': [{'name': 'physCellIdNeighbour-r14', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'cellGlobalIdNeighbour-r14', 'optional': True, 'type': 'ECGI'}, {'name': 'earfcnNeighbour-r14', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r14'}, {'name': 'rstd-r14', 'restricted-to': [(0, 12711)], 'type': 'INTEGER'}, {'name': 'rstd-Quality-r14', 'type': 'OTDOA-MeasQuality'}, {'name': 'tpIdNeighbour-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'prsIdNeighbour-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'delta-rstd-r14', 'optional': True, 'restricted-to': [(0, 5)], 'type': 'INTEGER'}, {'name': 'additionalPathsNeighbour-r14', 'optional': True, 'type': 'AdditionalPathList-r14'}, {'name': 'nprsIdNeighbour-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'carrierFreqOffsetNB-Neighbour-r14', 'optional': True, 'type': 'CarrierFreqOffsetNB-r14'}, None], 'type': 'SEQUENCE'}, 'NeighbourMeasurementList': {'element': {'type': 'NeighbourMeasurementElement'}, 'size': [(1, 24)], 'type': 'SEQUENCE ' 'OF'}, 'NeighbourMeasurementList-NB-r14': {'element': {'type': 'NeighbourMeasurementElement-NB-r14'}, 'size': [(1, 24)], 'type': 'SEQUENCE ' 'OF'}, 'NetworkTime': {'members': [{'name': 'secondsFromFrameStructureStart', 'restricted-to': [(0, 12533)], 'type': 'INTEGER'}, {'name': 'fractionalSecondsFromFrameStructureStart', 'restricted-to': [(0, 3999999)], 'type': 'INTEGER'}, {'name': 'frameDrift', 'optional': True, 'restricted-to': [(-64, 63)], 'type': 'INTEGER'}, {'members': [{'members': [{'name': 'physCellId', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'cellGlobalIdEUTRA', 'optional': True, 'type': 'CellGlobalIdEUTRA-AndUTRA'}, {'name': 'earfcn', 'type': 'ARFCN-ValueEUTRA'}, None, [{'name': 'earfcn-v9a0', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9a0'}]], 'name': 'eUTRA', 'type': 'SEQUENCE'}, {'members': [{'members': [{'members': [{'name': 'primary-CPICH-Info', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, None], 'name': 'fdd', 'type': 'SEQUENCE'}, {'members': [{'name': 'cellParameters', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, None], 'name': 'tdd', 'type': 'SEQUENCE'}], 'name': 'mode', 'type': 'CHOICE'}, {'name': 'cellGlobalIdUTRA', 'optional': True, 'type': 'CellGlobalIdEUTRA-AndUTRA'}, {'name': 'uarfcn', 'type': 'ARFCN-ValueUTRA'}, None], 'name': 'uTRA', 'type': 'SEQUENCE'}, {'members': [{'name': 'bcchCarrier', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'bsic', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'cellGlobalIdGERAN', 'optional': True, 'type': 'CellGlobalIdGERAN'}, None], 'name': 'gSM', 'type': 'SEQUENCE'}, None, {'members': [{'name': 'nbPhysCellId-r14', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'nbCellGlobalId-r14', 'optional': True, 'type': 'ECGI'}, {'name': 'nbCarrierFreq-r14', 'type': 'CarrierFreq-NB-r14'}, None], 'name': 'nBIoT-r14', 'type': 'SEQUENCE'}], 'name': 'cellID', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'OTDOA-Error': {'members': [{'name': 'locationServerErrorCauses', 'type': 'OTDOA-LocationServerErrorCauses'}, {'name': 'targetDeviceErrorCauses', 'type': 'OTDOA-TargetDeviceErrorCauses'}, None], 'type': 'CHOICE'}, 'OTDOA-LocationServerErrorCauses': {'members': [{'name': 'cause', 'type': 'ENUMERATED', 'values': [('undefined', 0), ('assistanceDataNotSupportedByServer', 1), ('assistanceDataSupportedButCurrentlyNotAvailableByServer', 2), None]}, None], 'type': 'SEQUENCE'}, 'OTDOA-MeasQuality': {'members': [{'name': 'error-Resolution', 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'error-Value', 'size': [5], 'type': 'BIT ' 'STRING'}, {'name': 'error-NumSamples', 'optional': True, 'size': [3], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'OTDOA-NeighbourCellInfoElement': {'members': [{'name': 'physCellId', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'cellGlobalId', 'optional': True, 'type': 'ECGI'}, {'name': 'earfcn', 'optional': True, 'type': 'ARFCN-ValueEUTRA'}, {'name': 'cpLength', 'optional': True, 'type': 'ENUMERATED', 'values': [('normal', 0), ('extended', 1), None]}, {'name': 'prsInfo', 'optional': True, 'type': 'PRS-Info'}, {'name': 'antennaPortConfig', 'optional': True, 'type': 'ENUMERATED', 'values': [('ports-1-or-2', 0), ('ports-4', 1), None]}, {'name': 'slotNumberOffset', 'optional': True, 'restricted-to': [(0, 19)], 'type': 'INTEGER'}, {'name': 'prs-SubframeOffset', 'optional': True, 'restricted-to': [(0, 1279)], 'type': 'INTEGER'}, {'name': 'expectedRSTD', 'restricted-to': [(0, 16383)], 'type': 'INTEGER'}, {'name': 'expectedRSTD-Uncertainty', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, None, [{'name': 'earfcn-v9a0', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9a0'}], [{'name': 'tpId-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'prs-only-tp-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'cpLengthCRS-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('normal', 0), ('extended', 1), None]}, {'name': 'sameMBSFNconfigNeighbour-r14', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'dlBandwidth-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'element': {'type': 'Add-PRSconfigNeighbourElement-r14'}, 'name': 'addPRSconfigNeighbour-r14', 'optional': True, 'size': [(1, 'maxAddPRSconfig-r14')], 'type': 'SEQUENCE ' 'OF'}]], 'type': 'SEQUENCE'}, 'OTDOA-NeighbourCellInfoList': {'element': {'type': 'OTDOA-NeighbourFreqInfo'}, 'size': [(1, 'maxFreqLayers')], 'type': 'SEQUENCE ' 'OF'}, 'OTDOA-NeighbourCellInfoListNB-r14': {'element': {'type': 'OTDOA-NeighbourCellInfoNB-r14'}, 'size': [(1, 'maxCells-r14')], 'type': 'SEQUENCE ' 'OF'}, 'OTDOA-NeighbourCellInfoNB-r14': {'members': [{'name': 'physCellIdNB-r14', 'optional': True, 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'cellGlobalIdNB-r14', 'optional': True, 'type': 'ECGI'}, {'name': 'carrierFreq-r14', 'optional': True, 'type': 'CarrierFreq-NB-r14'}, {'name': 'earfcn-r14', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r14'}, {'name': 'eutra-NumCRS-Ports-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('ports-1-or-2', 0), ('ports-4', 1), None]}, {'name': 'otdoa-SIB1-NB-repetitions-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('r4', 0), ('r8', 1), ('r16', 2)]}, {'name': 'nprsInfo-r14', 'optional': True, 'type': 'PRS-Info-NB-r14'}, {'name': 'nprs-slotNumberOffset-r14', 'optional': True, 'restricted-to': [(0, 19)], 'type': 'INTEGER'}, {'name': 'nprs-SFN-Offset-r14', 'optional': True, 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'nprs-SubframeOffset-r14', 'optional': True, 'restricted-to': [(0, 1279)], 'type': 'INTEGER'}, {'name': 'expectedRSTD-r14', 'optional': True, 'restricted-to': [(0, 16383)], 'type': 'INTEGER'}, {'name': 'expectedRSTD-Uncertainty-r14', 'optional': True, 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'prsNeighbourCellIndex-r14', 'optional': True, 'restricted-to': [(1, 72)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'OTDOA-NeighbourFreqInfo': {'element': {'type': 'OTDOA-NeighbourCellInfoElement'}, 'size': [(1, 24)], 'type': 'SEQUENCE ' 'OF'}, 'OTDOA-ProvideAssistanceData': {'members': [{'name': 'otdoa-ReferenceCellInfo', 'optional': True, 'type': 'OTDOA-ReferenceCellInfo'}, {'name': 'otdoa-NeighbourCellInfo', 'optional': True, 'type': 'OTDOA-NeighbourCellInfoList'}, {'name': 'otdoa-Error', 'optional': True, 'type': 'OTDOA-Error'}, None, [{'name': 'otdoa-ReferenceCellInfoNB-r14', 'optional': True, 'type': 'OTDOA-ReferenceCellInfoNB-r14'}, {'name': 'otdoa-NeighbourCellInfoNB-r14', 'optional': True, 'type': 'OTDOA-NeighbourCellInfoListNB-r14'}]], 'type': 'SEQUENCE'}, 'OTDOA-ProvideCapabilities': {'members': [{'name': 'otdoa-Mode', 'named-bits': [('ue-assisted', '0'), ('ue-assisted-NB-r14', '1')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None, {'element': {'type': 'SupportedBandEUTRA'}, 'name': 'supportedBandListEUTRA', 'optional': True, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'SupportedBandEUTRA-v9a0'}, 'name': 'supportedBandListEUTRA-v9a0', 'optional': True, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'interFreqRSTDmeasurement-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'additionalNeighbourCellInfoList-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'prs-id-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'tp-separation-via-muting-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'additional-prs-config-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'prs-based-tbs-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'additionalPathsReport-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'densePrsConfig-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'maxSupportedPrsBandwidth-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5), None]}, {'name': 'prsOccGroup-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'prsFrequencyHopping-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'maxSupportedPrsConfigs-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('c2', 0), ('c3', 1)]}, {'name': 'periodicalReporting-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'multiPrbNprs-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'idleStateForMeasurements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('required', 0)]}, {'name': 'numberOfRXantennas-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('rx1', 0), None]}], 'type': 'SEQUENCE'}, 'OTDOA-ProvideLocationInformation': {'members': [{'name': 'otdoaSignalMeasurementInformation', 'optional': True, 'type': 'OTDOA-SignalMeasurementInformation'}, {'name': 'otdoa-Error', 'optional': True, 'type': 'OTDOA-Error'}, None, [{'name': 'otdoaSignalMeasurementInformation-NB-r14', 'optional': True, 'type': 'OTDOA-SignalMeasurementInformation-NB-r14'}]], 'type': 'SEQUENCE'}, 'OTDOA-ReferenceCellInfo': {'members': [{'name': 'physCellId', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'cellGlobalId', 'optional': True, 'type': 'ECGI'}, {'name': 'earfcnRef', 'optional': True, 'type': 'ARFCN-ValueEUTRA'}, {'name': 'antennaPortConfig', 'optional': True, 'type': 'ENUMERATED', 'values': [('ports1-or-2', 0), ('ports4', 1), None]}, {'name': 'cpLength', 'type': 'ENUMERATED', 'values': [('normal', 0), ('extended', 1), None]}, {'name': 'prsInfo', 'optional': True, 'type': 'PRS-Info'}, None, [{'name': 'earfcnRef-v9a0', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9a0'}], [{'name': 'tpId-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'cpLengthCRS-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('normal', 0), ('extended', 1), None]}, {'name': 'sameMBSFNconfigRef-r14', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'dlBandwidth-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'element': {'type': 'PRS-Info'}, 'name': 'addPRSconfigRef-r14', 'optional': True, 'size': [(1, 'maxAddPRSconfig-r14')], 'type': 'SEQUENCE ' 'OF'}]], 'type': 'SEQUENCE'}, 'OTDOA-ReferenceCellInfoNB-r14': {'members': [{'name': 'physCellIdNB-r14', 'optional': True, 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'cellGlobalIdNB-r14', 'optional': True, 'type': 'ECGI'}, {'name': 'carrierFreqRef-r14', 'optional': True, 'type': 'CarrierFreq-NB-r14'}, {'name': 'earfcn-r14', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r14'}, {'name': 'eutra-NumCRS-Ports-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('ports1-or-2', 0), ('ports4', 1)]}, {'name': 'otdoa-SIB1-NB-repetitions-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('r4', 0), ('r8', 1), ('r16', 2)]}, {'name': 'nprsInfo-r14', 'optional': True, 'type': 'PRS-Info-NB-r14'}, None], 'type': 'SEQUENCE'}, 'OTDOA-RequestAssistanceData': {'members': [{'name': 'physCellId', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, None, [{'name': 'adType-r14', 'named-bits': [('prs', '0'), ('nprs', '1')], 'optional': True, 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}]], 'type': 'SEQUENCE'}, 'OTDOA-RequestCapabilities': {'members': [None], 'type': 'SEQUENCE'}, 'OTDOA-RequestLocationInformation': {'members': [{'name': 'assistanceAvailability', 'type': 'BOOLEAN'}, None, [{'name': 'multipathRSTD-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('requested', 0)]}, {'name': 'maxNoOfRSTDmeas-r14', 'optional': True, 'restricted-to': [(1, 32)], 'type': 'INTEGER'}]], 'type': 'SEQUENCE'}, 'OTDOA-SignalMeasurementInformation': {'members': [{'name': 'systemFrameNumber', 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'physCellIdRef', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'cellGlobalIdRef', 'optional': True, 'type': 'ECGI'}, {'name': 'earfcnRef', 'optional': True, 'type': 'ARFCN-ValueEUTRA'}, {'name': 'referenceQuality', 'optional': True, 'type': 'OTDOA-MeasQuality'}, {'name': 'neighbourMeasurementList', 'type': 'NeighbourMeasurementList'}, None, [{'name': 'earfcnRef-v9a0', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9a0'}], [{'name': 'tpIdRef-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'prsIdRef-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'additionalPathsRef-r14', 'optional': True, 'type': 'AdditionalPathList-r14'}, {'name': 'nprsIdRef-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'carrierFreqOffsetNB-Ref-r14', 'optional': True, 'type': 'CarrierFreqOffsetNB-r14'}, {'name': 'hyperSFN-r14', 'optional': True, 'size': [10], 'type': 'BIT ' 'STRING'}]], 'type': 'SEQUENCE'}, 'OTDOA-SignalMeasurementInformation-NB-r14': {'members': [{'name': 'systemFrameNumber-r14', 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'physCellIdRef-r14', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'cellGlobalIdRef-r14', 'optional': True, 'type': 'ECGI'}, {'name': 'earfcnRef-r14', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r14'}, {'name': 'referenceQuality-r14', 'optional': True, 'type': 'OTDOA-MeasQuality'}, {'name': 'neighbourMeasurementList-r14', 'type': 'NeighbourMeasurementList-NB-r14'}, {'name': 'tpIdRef-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'prsIdRef-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'additionalPathsRef-r14', 'optional': True, 'type': 'AdditionalPathList-r14'}, {'name': 'nprsIdRef-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'carrierFreqOffsetNB-Ref-r14', 'optional': True, 'type': 'CarrierFreqOffsetNB-r14'}, {'name': 'hyperSFN-r14', 'optional': True, 'size': [10], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'OTDOA-TargetDeviceErrorCauses': {'members': [{'name': 'cause', 'type': 'ENUMERATED', 'values': [('undefined', 0), ('assistance-data-missing', 1), ('unableToMeasureReferenceCell', 2), ('unableToMeasureAnyNeighbourCell', 3), ('attemptedButUnableToMeasureSomeNeighbourCells', 4), None]}, None], 'type': 'SEQUENCE'}, 'PRS-Info': {'members': [{'name': 'prs-Bandwidth', 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5), None]}, {'name': 'prs-ConfigurationIndex', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'numDL-Frames', 'type': 'ENUMERATED', 'values': [('sf-1', 0), ('sf-2', 1), ('sf-4', 2), ('sf-6', 3), None, ('sf-add-v1420', 4)]}, None, {'members': [{'name': 'po2-r9', 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'po4-r9', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'po8-r9', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'po16-r9', 'size': [16], 'type': 'BIT ' 'STRING'}, None, {'name': 'po32-v1420', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'po64-v1420', 'size': [64], 'type': 'BIT ' 'STRING'}, {'name': 'po128-v1420', 'size': [128], 'type': 'BIT ' 'STRING'}, {'name': 'po256-v1420', 'size': [256], 'type': 'BIT ' 'STRING'}, {'name': 'po512-v1420', 'size': [512], 'type': 'BIT ' 'STRING'}, {'name': 'po1024-v1420', 'size': [1024], 'type': 'BIT ' 'STRING'}], 'name': 'prs-MutingInfo-r9', 'optional': True, 'type': 'CHOICE'}, [{'name': 'prsID-r14', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'add-numDL-Frames-r14', 'optional': True, 'restricted-to': [(1, 160)], 'type': 'INTEGER'}, {'name': 'prsOccGroupLen-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('g2', 0), ('g4', 1), ('g8', 2), ('g16', 3), ('g32', 4), ('g64', 5), ('g128', 6), None]}, {'members': [{'name': 'nb2-r14', 'restricted-to': [(0, 'maxAvailNarrowBands-Minus1-r14')], 'type': 'INTEGER'}, {'element': {'restricted-to': [(1, 'maxAvailNarrowBands-Minus1-r14')], 'type': 'INTEGER'}, 'name': 'nb4-r14', 'size': [3], 'type': 'SEQUENCE ' 'OF'}], 'name': 'prsHoppingInfo-r14', 'optional': True, 'type': 'CHOICE'}]], 'type': 'SEQUENCE'}, 'PRS-Info-NB-r14': {'element': {'type': 'NPRS-Info-r14'}, 'size': [(1, 'maxCarrier-r14')], 'type': 'SEQUENCE OF'}, 'PeriodicalReportingCriteria': {'members': [{'default': 'ra-Infinity', 'name': 'reportingAmount', 'type': 'ENUMERATED', 'values': [('ra1', 0), ('ra2', 1), ('ra4', 2), ('ra8', 3), ('ra16', 4), ('ra32', 5), ('ra64', 6), ('ra-Infinity', 7)]}, {'name': 'reportingInterval', 'type': 'ENUMERATED', 'values': [('noPeriodicalReporting', 0), ('ri0-25', 1), ('ri0-5', 2), ('ri1', 3), ('ri2', 4), ('ri4', 5), ('ri8', 6), ('ri16', 7), ('ri32', 8), ('ri64', 9)]}], 'type': 'SEQUENCE'}, 'Polygon': {'element': {'type': 'PolygonPoints'}, 'size': [(3, 15)], 'type': 'SEQUENCE OF'}, 'PolygonPoints': {'members': [{'name': 'latitudeSign', 'type': 'ENUMERATED', 'values': [('north', 0), ('south', 1)]}, {'name': 'degreesLatitude', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'degreesLongitude', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PositioningModes': {'members': [{'name': 'posModes', 'named-bits': [('standalone', '0'), ('ue-based', '1'), ('ue-assisted', '2')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'ProvideAssistanceData': {'members': [{'members': [{'members': [{'name': 'provideAssistanceData-r9', 'type': 'ProvideAssistanceData-r9-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'ProvideAssistanceData-r9-IEs': {'members': [{'name': 'commonIEsProvideAssistanceData', 'optional': True, 'type': 'CommonIEsProvideAssistanceData'}, {'name': 'a-gnss-ProvideAssistanceData', 'optional': True, 'type': 'A-GNSS-ProvideAssistanceData'}, {'name': 'otdoa-ProvideAssistanceData', 'optional': True, 'type': 'OTDOA-ProvideAssistanceData'}, {'name': 'epdu-Provide-Assistance-Data', 'optional': True, 'type': 'EPDU-Sequence'}, None, [{'name': 'sensor-ProvideAssistanceData-r14', 'optional': True, 'type': 'Sensor-ProvideAssistanceData-r14'}, {'name': 'tbs-ProvideAssistanceData-r14', 'optional': True, 'type': 'TBS-ProvideAssistanceData-r14'}, {'name': 'wlan-ProvideAssistanceData-r14', 'optional': True, 'type': 'WLAN-ProvideAssistanceData-r14'}]], 'type': 'SEQUENCE'}, 'ProvideCapabilities': {'members': [{'members': [{'members': [{'name': 'provideCapabilities-r9', 'type': 'ProvideCapabilities-r9-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'ProvideCapabilities-r9-IEs': {'members': [{'name': 'commonIEsProvideCapabilities', 'optional': True, 'type': 'CommonIEsProvideCapabilities'}, {'name': 'a-gnss-ProvideCapabilities', 'optional': True, 'type': 'A-GNSS-ProvideCapabilities'}, {'name': 'otdoa-ProvideCapabilities', 'optional': True, 'type': 'OTDOA-ProvideCapabilities'}, {'name': 'ecid-ProvideCapabilities', 'optional': True, 'type': 'ECID-ProvideCapabilities'}, {'name': 'epdu-ProvideCapabilities', 'optional': True, 'type': 'EPDU-Sequence'}, None, [{'name': 'sensor-ProvideCapabilities-r13', 'optional': True, 'type': 'Sensor-ProvideCapabilities-r13'}, {'name': 'tbs-ProvideCapabilities-r13', 'optional': True, 'type': 'TBS-ProvideCapabilities-r13'}, {'name': 'wlan-ProvideCapabilities-r13', 'optional': True, 'type': 'WLAN-ProvideCapabilities-r13'}, {'name': 'bt-ProvideCapabilities-r13', 'optional': True, 'type': 'BT-ProvideCapabilities-r13'}]], 'type': 'SEQUENCE'}, 'ProvideLocationInformation': {'members': [{'members': [{'members': [{'name': 'provideLocationInformation-r9', 'type': 'ProvideLocationInformation-r9-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'ProvideLocationInformation-r9-IEs': {'members': [{'name': 'commonIEsProvideLocationInformation', 'optional': True, 'type': 'CommonIEsProvideLocationInformation'}, {'name': 'a-gnss-ProvideLocationInformation', 'optional': True, 'type': 'A-GNSS-ProvideLocationInformation'}, {'name': 'otdoa-ProvideLocationInformation', 'optional': True, 'type': 'OTDOA-ProvideLocationInformation'}, {'name': 'ecid-ProvideLocationInformation', 'optional': True, 'type': 'ECID-ProvideLocationInformation'}, {'name': 'epdu-ProvideLocationInformation', 'optional': True, 'type': 'EPDU-Sequence'}, None, [{'name': 'sensor-ProvideLocationInformation-r13', 'optional': True, 'type': 'Sensor-ProvideLocationInformation-r13'}, {'name': 'tbs-ProvideLocationInformation-r13', 'optional': True, 'type': 'TBS-ProvideLocationInformation-r13'}, {'name': 'wlan-ProvideLocationInformation-r13', 'optional': True, 'type': 'WLAN-ProvideLocationInformation-r13'}, {'name': 'bt-ProvideLocationInformation-r13', 'optional': True, 'type': 'BT-ProvideLocationInformation-r13'}]], 'type': 'SEQUENCE'}, 'QoS': {'members': [{'name': 'horizontalAccuracy', 'optional': True, 'type': 'HorizontalAccuracy'}, {'name': 'verticalCoordinateRequest', 'type': 'BOOLEAN'}, {'name': 'verticalAccuracy', 'optional': True, 'type': 'VerticalAccuracy'}, {'name': 'responseTime', 'optional': True, 'type': 'ResponseTime'}, {'name': 'velocityRequest', 'type': 'BOOLEAN'}, None, [{'name': 'responseTimeNB-r14', 'optional': True, 'type': 'ResponseTimeNB-r14'}]], 'type': 'SEQUENCE'}, 'ReportingDuration': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'ReqNavListInfo': {'members': [{'name': 'svReqList', 'size': [64], 'type': 'BIT ' 'STRING'}, {'element': {'restricted-to': [(1, 8)], 'type': 'INTEGER'}, 'name': 'clockModelID-PrefList', 'optional': True, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'restricted-to': [(1, 8)], 'type': 'INTEGER'}, 'name': 'orbitModelID-PrefList', 'optional': True, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'addNavparamReq', 'optional': True, 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'RequestAssistanceData': {'members': [{'members': [{'members': [{'name': 'requestAssistanceData-r9', 'type': 'RequestAssistanceData-r9-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RequestAssistanceData-r9-IEs': {'members': [{'name': 'commonIEsRequestAssistanceData', 'optional': True, 'type': 'CommonIEsRequestAssistanceData'}, {'name': 'a-gnss-RequestAssistanceData', 'optional': True, 'type': 'A-GNSS-RequestAssistanceData'}, {'name': 'otdoa-RequestAssistanceData', 'optional': True, 'type': 'OTDOA-RequestAssistanceData'}, {'name': 'epdu-RequestAssistanceData', 'optional': True, 'type': 'EPDU-Sequence'}, None, [{'name': 'sensor-RequestAssistanceData-r14', 'optional': True, 'type': 'Sensor-RequestAssistanceData-r14'}, {'name': 'tbs-RequestAssistanceData-r14', 'optional': True, 'type': 'TBS-RequestAssistanceData-r14'}, {'name': 'wlan-RequestAssistanceData-r14', 'optional': True, 'type': 'WLAN-RequestAssistanceData-r14'}]], 'type': 'SEQUENCE'}, 'RequestCapabilities': {'members': [{'members': [{'members': [{'name': 'requestCapabilities-r9', 'type': 'RequestCapabilities-r9-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RequestCapabilities-r9-IEs': {'members': [{'name': 'commonIEsRequestCapabilities', 'optional': True, 'type': 'CommonIEsRequestCapabilities'}, {'name': 'a-gnss-RequestCapabilities', 'optional': True, 'type': 'A-GNSS-RequestCapabilities'}, {'name': 'otdoa-RequestCapabilities', 'optional': True, 'type': 'OTDOA-RequestCapabilities'}, {'name': 'ecid-RequestCapabilities', 'optional': True, 'type': 'ECID-RequestCapabilities'}, {'name': 'epdu-RequestCapabilities', 'optional': True, 'type': 'EPDU-Sequence'}, None, [{'name': 'sensor-RequestCapabilities-r13', 'optional': True, 'type': 'Sensor-RequestCapabilities-r13'}, {'name': 'tbs-RequestCapabilities-r13', 'optional': True, 'type': 'TBS-RequestCapabilities-r13'}, {'name': 'wlan-RequestCapabilities-r13', 'optional': True, 'type': 'WLAN-RequestCapabilities-r13'}, {'name': 'bt-RequestCapabilities-r13', 'optional': True, 'type': 'BT-RequestCapabilities-r13'}]], 'type': 'SEQUENCE'}, 'RequestLocationInformation': {'members': [{'members': [{'members': [{'name': 'requestLocationInformation-r9', 'type': 'RequestLocationInformation-r9-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RequestLocationInformation-r9-IEs': {'members': [{'name': 'commonIEsRequestLocationInformation', 'optional': True, 'type': 'CommonIEsRequestLocationInformation'}, {'name': 'a-gnss-RequestLocationInformation', 'optional': True, 'type': 'A-GNSS-RequestLocationInformation'}, {'name': 'otdoa-RequestLocationInformation', 'optional': True, 'type': 'OTDOA-RequestLocationInformation'}, {'name': 'ecid-RequestLocationInformation', 'optional': True, 'type': 'ECID-RequestLocationInformation'}, {'name': 'epdu-RequestLocationInformation', 'optional': True, 'type': 'EPDU-Sequence'}, None, [{'name': 'sensor-RequestLocationInformation-r13', 'optional': True, 'type': 'Sensor-RequestLocationInformation-r13'}, {'name': 'tbs-RequestLocationInformation-r13', 'optional': True, 'type': 'TBS-RequestLocationInformation-r13'}, {'name': 'wlan-RequestLocationInformation-r13', 'optional': True, 'type': 'WLAN-RequestLocationInformation-r13'}, {'name': 'bt-RequestLocationInformation-r13', 'optional': True, 'type': 'BT-RequestLocationInformation-r13'}]], 'type': 'SEQUENCE'}, 'ResponseTime': {'members': [{'name': 'time', 'restricted-to': [(1, 128)], 'type': 'INTEGER'}, None, [{'name': 'responseTimeEarlyFix-r12', 'optional': True, 'restricted-to': [(1, 128)], 'type': 'INTEGER'}]], 'type': 'SEQUENCE'}, 'ResponseTimeNB-r14': {'members': [{'name': 'timeNB-r14', 'restricted-to': [(1, 512)], 'type': 'INTEGER'}, {'name': 'responseTimeEarlyFixNB-r14', 'optional': True, 'restricted-to': [(1, 512)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'SBAS-ClockModel': {'members': [{'name': 'sbasTo', 'restricted-to': [(0, 5399)], 'type': 'INTEGER'}, {'name': 'sbasAgfo', 'restricted-to': [(-2048, 2047)], 'type': 'INTEGER'}, {'name': 'sbasAgf1', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'SBAS-ID': {'members': [{'name': 'sbas-id', 'type': 'ENUMERATED', 'values': [('waas', 0), ('egnos', 1), ('msas', 2), ('gagan', 3), None]}, None], 'type': 'SEQUENCE'}, 'SBAS-IDs': {'members': [{'name': 'sbas-IDs', 'named-bits': [('waas', '0'), ('egnos', '1'), ('msas', '2'), ('gagan', '3')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SV-ID': {'members': [{'name': 'satellite-id', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'SatListRelatedDataElement': {'members': [{'name': 'svID', 'type': 'SV-ID'}, {'name': 'iod', 'size': [11], 'type': 'BIT ' 'STRING'}, {'name': 'clockModelID', 'optional': True, 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, {'name': 'orbitModelID', 'optional': True, 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'SatListRelatedDataList': {'element': {'type': 'SatListRelatedDataElement'}, 'size': [(1, 64)], 'type': 'SEQUENCE ' 'OF'}, 'Sensor-AssistanceDataList-r14': {'members': [{'name': 'refPressure-r14', 'restricted-to': [(-20000, 10000)], 'type': 'INTEGER'}, {'name': 'refPosition-r14', 'optional': True, 'type': 'EllipsoidPointWithAltitudeAndUncertaintyEllipsoid'}, {'name': 'refTemperature-r14', 'optional': True, 'restricted-to': [(-64, 63)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'Sensor-AssistanceDataSupportList-r14': {'members': [None], 'type': 'SEQUENCE'}, 'Sensor-Error-r13': {'members': [{'name': 'locationServerErrorCauses-r13', 'type': 'Sensor-LocationServerErrorCauses-r13'}, {'name': 'targetDeviceErrorCauses-r13', 'type': 'Sensor-TargetDeviceErrorCauses-r13'}, None], 'type': 'CHOICE'}, 'Sensor-LocationServerErrorCauses-r13': {'members': [{'name': 'cause-r13', 'type': 'ENUMERATED', 'values': [('undefined', 0), None, ('assistanceDataNotSupportedByServer-v1420', 1), ('assistanceDataSupportedButCurrentlyNotAvailableByServer-v1420', 2)]}, None], 'type': 'SEQUENCE'}, 'Sensor-MeasurementInformation-r13': {'members': [{'name': 'measurementReferenceTime-r13', 'optional': True, 'type': 'UTCTime'}, {'name': 'uncompensatedBarometricPressure-r13', 'optional': True, 'restricted-to': [(30000, 115000)], 'type': 'INTEGER'}, None, [{'members': [{'name': 'range-r14', 'restricted-to': [(0, 1000)], 'type': 'INTEGER'}, {'name': 'confidence-r14', 'restricted-to': [(1, 100)], 'type': 'INTEGER'}], 'name': 'uncertainty-r14', 'optional': True, 'type': 'SEQUENCE'}]], 'type': 'SEQUENCE'}, 'Sensor-ProvideAssistanceData-r14': {'members': [{'name': 'sensor-AssistanceDataList-r14', 'optional': True, 'type': 'Sensor-AssistanceDataList-r14'}, {'name': 'sensor-Error-r14', 'optional': True, 'type': 'Sensor-Error-r13'}, None], 'type': 'SEQUENCE'}, 'Sensor-ProvideCapabilities-r13': {'members': [{'name': 'sensor-Modes-r13', 'named-bits': [('standalone', '0'), ('ue-assisted', '1'), ('ue-based', '2')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None, [{'name': 'sensor-AssistanceDataSupportList-r14', 'optional': True, 'type': 'Sensor-AssistanceDataSupportList-r14'}, {'name': 'periodicalReportingSupported-r14', 'optional': True, 'type': 'PositioningModes'}, {'name': 'idleStateForMeasurements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('required', 0)]}]], 'type': 'SEQUENCE'}, 'Sensor-ProvideLocationInformation-r13': {'members': [{'name': 'sensor-MeasurementInformation-r13', 'optional': True, 'type': 'Sensor-MeasurementInformation-r13'}, {'name': 'sensor-Error-r13', 'optional': True, 'type': 'Sensor-Error-r13'}, None], 'type': 'SEQUENCE'}, 'Sensor-RequestAssistanceData-r14': {'members': [None], 'type': 'SEQUENCE'}, 'Sensor-RequestCapabilities-r13': {'members': [None], 'type': 'SEQUENCE'}, 'Sensor-RequestLocationInformation-r13': {'members': [{'name': 'uncompensatedBarometricPressureReq-r13', 'type': 'BOOLEAN'}, None, [{'name': 'assistanceAvailability-r14', 'optional': True, 'type': 'BOOLEAN'}]], 'type': 'SEQUENCE'}, 'Sensor-TargetDeviceErrorCauses-r13': {'members': [{'name': 'cause-r13', 'type': 'ENUMERATED', 'values': [('undefined', 0), None, ('assistanceDataMissing-v1420', 1)]}, None], 'type': 'SEQUENCE'}, 'SequenceNumber': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'StandardClockModelElement': {'members': [{'name': 'stanClockToc', 'restricted-to': [(0, 16383)], 'type': 'INTEGER'}, {'name': 'stanClockAF2', 'restricted-to': [(-32, 31)], 'type': 'INTEGER'}, {'name': 'stanClockAF1', 'restricted-to': [(-1048576, 1048575)], 'type': 'INTEGER'}, {'name': 'stanClockAF0', 'restricted-to': [(-1073741824, 1073741823)], 'type': 'INTEGER'}, {'name': 'stanClockTgd', 'optional': True, 'restricted-to': [(-512, 511)], 'type': 'INTEGER'}, {'name': 'sisa', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'stanModelID', 'optional': True, 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'StandardClockModelList': {'element': {'type': 'StandardClockModelElement'}, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, 'StoredNavListInfo': {'members': [{'name': 'gnss-WeekOrDay', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'gnss-Toe', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 't-toeLimit', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'satListRelatedDataList', 'optional': True, 'type': 'SatListRelatedDataList'}, None], 'type': 'SEQUENCE'}, 'SupportedBandEUTRA': {'members': [{'name': 'bandEUTRA', 'restricted-to': [(1, 'maxFBI')], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'SupportedBandEUTRA-v9a0': {'members': [{'name': 'bandEUTRA-v9a0', 'optional': True, 'restricted-to': [('maxFBI-Plus1', 'maxFBI2')], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'SupportedChannels-11a-r14': {'members': [{'name': 'ch34-r14', 'type': 'BOOLEAN'}, {'name': 'ch36-r14', 'type': 'BOOLEAN'}, {'name': 'ch38-r14', 'type': 'BOOLEAN'}, {'name': 'ch40-r14', 'type': 'BOOLEAN'}, {'name': 'ch42-r14', 'type': 'BOOLEAN'}, {'name': 'ch44-r14', 'type': 'BOOLEAN'}, {'name': 'ch46-r14', 'type': 'BOOLEAN'}, {'name': 'ch48-r14', 'type': 'BOOLEAN'}, {'name': 'ch52-r14', 'type': 'BOOLEAN'}, {'name': 'ch56-r14', 'type': 'BOOLEAN'}, {'name': 'ch60-r14', 'type': 'BOOLEAN'}, {'name': 'ch64-r14', 'type': 'BOOLEAN'}, {'name': 'ch149-r14', 'type': 'BOOLEAN'}, {'name': 'ch153-r14', 'type': 'BOOLEAN'}, {'name': 'ch157-r14', 'type': 'BOOLEAN'}, {'name': 'ch161-r14', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'SupportedChannels-11bg-r14': {'members': [{'name': 'ch1-r14', 'type': 'BOOLEAN'}, {'name': 'ch2-r14', 'type': 'BOOLEAN'}, {'name': 'ch3-r14', 'type': 'BOOLEAN'}, {'name': 'ch4-r14', 'type': 'BOOLEAN'}, {'name': 'ch5-r14', 'type': 'BOOLEAN'}, {'name': 'ch6-r14', 'type': 'BOOLEAN'}, {'name': 'ch7-r14', 'type': 'BOOLEAN'}, {'name': 'ch8-r14', 'type': 'BOOLEAN'}, {'name': 'ch9-r14', 'type': 'BOOLEAN'}, {'name': 'ch10-r14', 'type': 'BOOLEAN'}, {'name': 'ch11-r14', 'type': 'BOOLEAN'}, {'name': 'ch12-r14', 'type': 'BOOLEAN'}, {'name': 'ch13-r14', 'type': 'BOOLEAN'}, {'name': 'ch14-r14', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'TBS-AssistanceDataList-r14': {'members': [{'name': 'mbs-AssistanceDataList-r14', 'optional': True, 'type': 'MBS-AssistanceDataList-r14'}, None], 'type': 'SEQUENCE'}, 'TBS-Error-r13': {'members': [{'name': 'locationServerErrorCauses-r13', 'type': 'TBS-LocationServerErrorCauses-r13'}, {'name': 'targetDeviceErrorCauses-r13', 'type': 'TBS-TargetDeviceErrorCauses-r13'}, None], 'type': 'CHOICE'}, 'TBS-LocationServerErrorCauses-r13': {'members': [{'name': 'cause-r13', 'type': 'ENUMERATED', 'values': [('undefined', 0), None, ('assistanceDataNotSupportedByServer-v1420', 1), ('assistanceDataSupportedButCurrentlyNotAvailableByServer-v1420', 2)]}, None], 'type': 'SEQUENCE'}, 'TBS-MeasurementInformation-r13': {'members': [{'name': 'measurementReferenceTime-r13', 'optional': True, 'type': 'UTCTime'}, {'name': 'mbs-SgnMeasList-r13', 'optional': True, 'type': 'MBS-BeaconMeasList-r13'}, None], 'type': 'SEQUENCE'}, 'TBS-ProvideAssistanceData-r14': {'members': [{'name': 'tbs-AssistanceDataList-r14', 'optional': True, 'type': 'TBS-AssistanceDataList-r14'}, {'name': 'tbs-Error-r14', 'optional': True, 'type': 'TBS-Error-r13'}, None], 'type': 'SEQUENCE'}, 'TBS-ProvideCapabilities-r13': {'members': [{'name': 'tbs-Modes-r13', 'named-bits': [('standalone', '0'), ('ue-assisted', '1'), ('ue-based', '2')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None, [{'name': 'mbs-AssistanceDataSupportList-r14', 'optional': True, 'type': 'MBS-AssistanceDataSupportList-r14'}, {'name': 'periodicalReportingSupported-r14', 'optional': True, 'type': 'PositioningModes'}, {'name': 'mbs-ConfigSupport-r14', 'named-bits': [('tb1', '0'), ('tb2', '1'), ('tb3', '2'), ('tb4', '3')], 'optional': True, 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, {'name': 'mbs-IdleStateForMeasurements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('required', 0)]}]], 'type': 'SEQUENCE'}, 'TBS-ProvideLocationInformation-r13': {'members': [{'name': 'tbs-MeasurementInformation-r13', 'optional': True, 'type': 'TBS-MeasurementInformation-r13'}, {'name': 'tbs-Error-r13', 'optional': True, 'type': 'TBS-Error-r13'}, None], 'type': 'SEQUENCE'}, 'TBS-RequestAssistanceData-r14': {'members': [{'name': 'mbs-AlmanacAssistanceDataReq-r14', 'type': 'BOOLEAN'}, {'name': 'mbs-AcquisitionAssistanceDataReq-r14', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'TBS-RequestCapabilities-r13': {'members': [None], 'type': 'SEQUENCE'}, 'TBS-RequestLocationInformation-r13': {'members': [{'name': 'mbsSgnMeasListReq-r13', 'type': 'BOOLEAN'}, None, [{'name': 'mbsAssistanceAvailability-r14', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'mbsRequestedMeasurements-r14', 'named-bits': [('rssi', '0')], 'optional': True, 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}]], 'type': 'SEQUENCE'}, 'TBS-TargetDeviceErrorCauses-r13': {'members': [{'name': 'cause-r13', 'type': 'ENUMERATED', 'values': [('undefined', 0), ('thereWereNotEnoughMBSBeaconsReceived', 1), None, ('assistanceDataMissing-v1420', 2)]}, None], 'type': 'SEQUENCE'}, 'TransactionNumber': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'TriggeredReportingCriteria': {'members': [{'name': 'cellChange', 'type': 'BOOLEAN'}, {'name': 'reportingDuration', 'type': 'ReportingDuration'}, None], 'type': 'SEQUENCE'}, 'UTC-ModelSet1': {'members': [{'name': 'gnss-Utc-A1', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'gnss-Utc-A0', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'gnss-Utc-Tot', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'gnss-Utc-WNt', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'gnss-Utc-DeltaTls', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'gnss-Utc-WNlsf', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'gnss-Utc-DN', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'gnss-Utc-DeltaTlsf', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'UTC-ModelSet2': {'members': [{'name': 'utcA0', 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'utcA1', 'restricted-to': [(-4096, 4095)], 'type': 'INTEGER'}, {'name': 'utcA2', 'restricted-to': [(-64, 63)], 'type': 'INTEGER'}, {'name': 'utcDeltaTls', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'utcTot', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'utcWNot', 'restricted-to': [(0, 8191)], 'type': 'INTEGER'}, {'name': 'utcWNlsf', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'utcDN', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'utcDeltaTlsf', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'UTC-ModelSet3': {'members': [{'name': 'nA', 'restricted-to': [(1, 1461)], 'type': 'INTEGER'}, {'name': 'tauC', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'b1', 'optional': True, 'restricted-to': [(-1024, 1023)], 'type': 'INTEGER'}, {'name': 'b2', 'optional': True, 'restricted-to': [(-512, 511)], 'type': 'INTEGER'}, {'name': 'kp', 'optional': True, 'size': [2], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'UTC-ModelSet4': {'members': [{'name': 'utcA1wnt', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'utcA0wnt', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'utcTot', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'utcWNt', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'utcDeltaTls', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'utcWNlsf', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'utcDN', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'utcDeltaTlsf', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'utcStandardID', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'UTC-ModelSet5-r12': {'members': [{'name': 'utcA0-r12', 'restricted-to': [(-2147483648, 2147483647)], 'type': 'INTEGER'}, {'name': 'utcA1-r12', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'name': 'utcDeltaTls-r12', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, {'name': 'utcWNlsf-r12', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'utcDN-r12', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'utcDeltaTlsf-r12', 'restricted-to': [(-128, 127)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'Velocity': {'members': [{'name': 'horizontalVelocity', 'type': 'HorizontalVelocity'}, {'name': 'horizontalWithVerticalVelocity', 'type': 'HorizontalWithVerticalVelocity'}, {'name': 'horizontalVelocityWithUncertainty', 'type': 'HorizontalVelocityWithUncertainty'}, {'name': 'horizontalWithVerticalVelocityAndUncertainty', 'type': 'HorizontalWithVerticalVelocityAndUncertainty'}, None], 'type': 'CHOICE'}, 'VelocityTypes': {'members': [{'name': 'horizontalVelocity', 'type': 'BOOLEAN'}, {'name': 'horizontalWithVerticalVelocity', 'type': 'BOOLEAN'}, {'name': 'horizontalVelocityWithUncertainty', 'type': 'BOOLEAN'}, {'name': 'horizontalWithVerticalVelocityAndUncertainty', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'VerticalAccuracy': {'members': [{'name': 'accuracy', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'confidence', 'restricted-to': [(0, 100)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'WLAN-AP-Data-r14': {'members': [{'name': 'wlan-AP-Identifier-r14', 'type': 'WLAN-AP-Identifier-r13'}, {'name': 'wlan-AP-Location-r14', 'optional': True, 'type': 'WLAN-AP-Location-r14'}, None], 'type': 'SEQUENCE'}, 'WLAN-AP-Identifier-r13': {'members': [{'name': 'bssid-r13', 'size': [6], 'type': 'OCTET ' 'STRING'}, {'name': 'ssid-r13', 'optional': True, 'size': [(1, 32)], 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'WLAN-AP-Location-r14': {'members': [{'name': 'locationDataLCI-r14', 'type': 'LocationDataLCI-r14'}, None], 'type': 'SEQUENCE'}, 'WLAN-DataSet-r14': {'members': [{'element': {'type': 'WLAN-AP-Data-r14'}, 'name': 'wlan-AP-List-r14', 'size': [(1, 'maxWLAN-AP-r14')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'supportedChannels-11a-r14', 'optional': True, 'type': 'SupportedChannels-11a-r14'}, {'name': 'supportedChannels-11bg-r14', 'optional': True, 'type': 'SupportedChannels-11bg-r14'}, None], 'type': 'SEQUENCE'}, 'WLAN-Error-r13': {'members': [{'name': 'locationServerErrorCauses-r13', 'type': 'WLAN-LocationServerErrorCauses-r13'}, {'name': 'targetDeviceErrorCauses-r13', 'type': 'WLAN-TargetDeviceErrorCauses-r13'}, None], 'type': 'CHOICE'}, 'WLAN-LocationServerErrorCauses-r13': {'members': [{'name': 'cause-r13', 'type': 'ENUMERATED', 'values': [('undefined', 0), None, ('requestedADNotAvailable-v1420', 1), ('notAllrequestedADAvailable-v1420', 2)]}, None, [{'name': 'apLocationDataUnavailable-r14', 'optional': True, 'type': 'NULL'}]], 'type': 'SEQUENCE'}, 'WLAN-MeasurementElement-r13': {'members': [{'name': 'wlan-AP-Identifier-r13', 'type': 'WLAN-AP-Identifier-r13'}, {'name': 'rssi-r13', 'optional': True, 'restricted-to': [(-127, 128)], 'type': 'INTEGER'}, {'name': 'rtt-r13', 'optional': True, 'type': 'WLAN-RTT-r13'}, {'name': 'apChannelFrequency-r13', 'optional': True, 'restricted-to': [(0, 256)], 'type': 'INTEGER'}, {'name': 'servingFlag-r13', 'optional': True, 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'WLAN-MeasurementInformation-r13': {'members': [{'name': 'measurementReferenceTime-r13', 'optional': True, 'type': 'UTCTime'}, {'name': 'wlan-MeasurementList-r13', 'optional': True, 'type': 'WLAN-MeasurementList-r13'}, None], 'type': 'SEQUENCE'}, 'WLAN-MeasurementList-r13': {'element': {'type': 'WLAN-MeasurementElement-r13'}, 'size': [(1, 'maxWLAN-AP-r13')], 'type': 'SEQUENCE ' 'OF'}, 'WLAN-ProvideAssistanceData-r14': {'members': [{'element': {'type': 'WLAN-DataSet-r14'}, 'name': 'wlan-DataSet-r14', 'optional': True, 'size': [(1, 'maxWLAN-DataSets-r14')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'wlan-Error-r14', 'optional': True, 'type': 'WLAN-Error-r13'}, None], 'type': 'SEQUENCE'}, 'WLAN-ProvideCapabilities-r13': {'members': [{'name': 'wlan-Modes-r13', 'named-bits': [('standalone', '0'), ('ue-assisted', '1'), ('ue-based', '2')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, {'name': 'wlan-MeasSupported-r13', 'named-bits': [('rssi-r13', '0'), ('rtt-r13', '1')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None, [{'name': 'wlan-AP-AD-Supported-r14', 'named-bits': [('ap-identifier', '0'), ('ap-location', '1')], 'optional': True, 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, {'name': 'periodicalReportingSupported-r14', 'optional': True, 'type': 'PositioningModes'}, {'name': 'idleStateForMeasurements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('required', 0)]}]], 'type': 'SEQUENCE'}, 'WLAN-ProvideLocationInformation-r13': {'members': [{'name': 'wlan-MeasurementInformation-r13', 'optional': True, 'type': 'WLAN-MeasurementInformation-r13'}, {'name': 'wlan-Error-r13', 'optional': True, 'type': 'WLAN-Error-r13'}, None], 'type': 'SEQUENCE'}, 'WLAN-RTT-r13': {'members': [{'name': 'rttValue-r13', 'restricted-to': [(0, 16777215)], 'type': 'INTEGER'}, {'name': 'rttUnits-r13', 'type': 'ENUMERATED', 'values': [('microseconds', 0), ('hundredsofnanoseconds', 1), ('tensofnanoseconds', 2), ('nanoseconds', 3), ('tenthsofnanoseconds', 4), None]}, {'name': 'rttAccuracy-r13', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'WLAN-RequestAssistanceData-r14': {'members': [{'name': 'requestedAD-r14', 'named-bits': [('ap-identifier', '0'), ('ap-location', '1')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, {'element': {'type': 'WLAN-AP-Identifier-r13'}, 'name': 'visibleAPs-r14', 'optional': True, 'size': [(1, 'maxVisibleAPs-r14')], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'WLAN-AP-Identifier-r13'}, 'name': 'wlan-AP-StoredData-r14', 'optional': True, 'size': [(1, 'maxKnownAPs-r14')], 'type': 'SEQUENCE ' 'OF'}, None], 'type': 'SEQUENCE'}, 'WLAN-RequestCapabilities-r13': {'members': [None], 'type': 'SEQUENCE'}, 'WLAN-RequestLocationInformation-r13': {'members': [{'name': 'requestedMeasurements-r13', 'named-bits': [('rssi', '0'), ('rtt', '1')], 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None, [{'name': 'assistanceAvailability-r14', 'optional': True, 'type': 'BOOLEAN'}]], 'type': 'SEQUENCE'}, 'WLAN-TargetDeviceErrorCauses-r13': {'members': [{'name': 'cause-r13', 'type': 'ENUMERATED', 'values': [('undefined', 0), ('requestedMeasurementsNotAvailable', 1), ('notAllrequestedMeasurementsPossible', 2), None]}, {'name': 'wlan-AP-RSSI-MeasurementNotPossible-r13', 'optional': True, 'type': 'NULL'}, {'name': 'wlan-AP-RTT-MeasurementNotPossible-r13', 'optional': True, 'type': 'NULL'}, None], 'type': 'SEQUENCE'}}, 'values': {'maxAddPRSconfig-r14': {'type': 'INTEGER', 'value': 2}, 'maxAvailNarrowBands-Minus1-r14': {'type': 'INTEGER', 'value': 15}, 'maxBT-Beacon-r13': {'type': 'INTEGER', 'value': 32}, 'maxBands': {'type': 'INTEGER', 'value': 64}, 'maxCarrier-r14': {'type': 'INTEGER', 'value': 5}, 'maxCells-r14': {'type': 'INTEGER', 'value': 72}, 'maxEARFCN': {'type': 'INTEGER', 'value': 65535}, 'maxEARFCN-Plus1': {'type': 'INTEGER', 'value': 65536}, 'maxEARFCN2': {'type': 'INTEGER', 'value': 262143}, 'maxEPDU': {'type': 'INTEGER', 'value': 16}, 'maxFBI': {'type': 'INTEGER', 'value': 64}, 'maxFBI-Plus1': {'type': 'INTEGER', 'value': 65}, 'maxFBI2': {'type': 'INTEGER', 'value': 256}, 'maxFreqLayers': {'type': 'INTEGER', 'value': 3}, 'maxKnownAPs-r14': {'type': 'INTEGER', 'value': 2048}, 'maxMBS-r14': {'type': 'INTEGER', 'value': 64}, 'maxPaths-r14': {'type': 'INTEGER', 'value': 2}, 'maxVisibleAPs-r14': {'type': 'INTEGER', 'value': 32}, 'maxWLAN-AP-r13': {'type': 'INTEGER', 'value': 64}, 'maxWLAN-AP-r14': {'type': 'INTEGER', 'value': 128}, 'maxWLAN-DataSets-r14': {'type': 'INTEGER', 'value': 8}}}}asn1tools-0.169.0/tests/files/3gpp/rrc_14_4_0.asn000066400000000000000000024610001524544274600212060ustar00rootroot00000000000000EUTRA-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::= BEGIN BCCH-BCH-Message ::= SEQUENCE { message BCCH-BCH-MessageType } BCCH-BCH-MessageType ::= MasterInformationBlock BCCH-BCH-Message-MBMS::= SEQUENCE { message BCCH-BCH-MessageType-MBMS-r14 } BCCH-BCH-MessageType-MBMS-r14 ::= MasterInformationBlock-MBMS-r14 BCCH-DL-SCH-Message ::= SEQUENCE { message BCCH-DL-SCH-MessageType } BCCH-DL-SCH-MessageType ::= CHOICE { c1 CHOICE { systemInformation SystemInformation, systemInformationBlockType1 SystemInformationBlockType1 }, messageClassExtension SEQUENCE {} } BCCH-DL-SCH-Message-BR ::= SEQUENCE { message BCCH-DL-SCH-MessageType-BR-r13 } BCCH-DL-SCH-MessageType-BR-r13 ::= CHOICE { c1 CHOICE { systemInformation-BR-r13 SystemInformation-BR-r13, systemInformationBlockType1-BR-r13 SystemInformationBlockType1-BR-r13 }, messageClassExtension SEQUENCE {} } BCCH-DL-SCH-Message-MBMS ::= SEQUENCE { message BCCH-DL-SCH-MessageType-MBMS-r14 } BCCH-DL-SCH-MessageType-MBMS-r14 ::= CHOICE { c1 CHOICE { systemInformation-MBMS-r14 SystemInformation-MBMS-r14, systemInformationBlockType1-MBMS-r14 SystemInformationBlockType1-MBMS-r14 }, messageClassExtension SEQUENCE {} } MCCH-Message ::= SEQUENCE { message MCCH-MessageType } MCCH-MessageType ::= CHOICE { c1 CHOICE { mbsfnAreaConfiguration-r9 MBSFNAreaConfiguration-r9 }, later CHOICE { c2 CHOICE{ mbmsCountingRequest-r10 MBMSCountingRequest-r10 }, messageClassExtension SEQUENCE {} } } PCCH-Message ::= SEQUENCE { message PCCH-MessageType } PCCH-MessageType ::= CHOICE { c1 CHOICE { paging Paging }, messageClassExtension SEQUENCE {} } DL-CCCH-Message ::= SEQUENCE { message DL-CCCH-MessageType } DL-CCCH-MessageType ::= CHOICE { c1 CHOICE { rrcConnectionReestablishment RRCConnectionReestablishment, rrcConnectionReestablishmentReject RRCConnectionReestablishmentReject, rrcConnectionReject RRCConnectionReject, rrcConnectionSetup RRCConnectionSetup }, messageClassExtension SEQUENCE {} } DL-DCCH-Message ::= SEQUENCE { message DL-DCCH-MessageType } DL-DCCH-MessageType ::= CHOICE { c1 CHOICE { csfbParametersResponseCDMA2000 CSFBParametersResponseCDMA2000, dlInformationTransfer DLInformationTransfer, handoverFromEUTRAPreparationRequest HandoverFromEUTRAPreparationRequest, mobilityFromEUTRACommand MobilityFromEUTRACommand, rrcConnectionReconfiguration RRCConnectionReconfiguration, rrcConnectionRelease RRCConnectionRelease, securityModeCommand SecurityModeCommand, ueCapabilityEnquiry UECapabilityEnquiry, counterCheck CounterCheck, ueInformationRequest-r9 UEInformationRequest-r9, loggedMeasurementConfiguration-r10 LoggedMeasurementConfiguration-r10, rnReconfiguration-r10 RNReconfiguration-r10, rrcConnectionResume-r13 RRCConnectionResume-r13, spare3 NULL, spare2 NULL, spare1 NULL }, messageClassExtension SEQUENCE {} } UL-CCCH-Message ::= SEQUENCE { message UL-CCCH-MessageType } UL-CCCH-MessageType ::= CHOICE { c1 CHOICE { rrcConnectionReestablishmentRequest RRCConnectionReestablishmentRequest, rrcConnectionRequest RRCConnectionRequest }, messageClassExtension CHOICE { c2 CHOICE { rrcConnectionResumeRequest-r13 RRCConnectionResumeRequest-r13 }, messageClassExtensionFuture-r13 SEQUENCE {} } } UL-DCCH-Message ::= SEQUENCE { message UL-DCCH-MessageType } UL-DCCH-MessageType ::= CHOICE { c1 CHOICE { csfbParametersRequestCDMA2000 CSFBParametersRequestCDMA2000, measurementReport MeasurementReport, rrcConnectionReconfigurationComplete RRCConnectionReconfigurationComplete, rrcConnectionReestablishmentComplete RRCConnectionReestablishmentComplete, rrcConnectionSetupComplete RRCConnectionSetupComplete, securityModeComplete SecurityModeComplete, securityModeFailure SecurityModeFailure, ueCapabilityInformation UECapabilityInformation, ulHandoverPreparationTransfer ULHandoverPreparationTransfer, ulInformationTransfer ULInformationTransfer, counterCheckResponse CounterCheckResponse, ueInformationResponse-r9 UEInformationResponse-r9, proximityIndication-r9 ProximityIndication-r9, rnReconfigurationComplete-r10 RNReconfigurationComplete-r10, mbmsCountingResponse-r10 MBMSCountingResponse-r10, interFreqRSTDMeasurementIndication-r10 InterFreqRSTDMeasurementIndication-r10 }, messageClassExtension CHOICE { c2 CHOICE { ueAssistanceInformation-r11 UEAssistanceInformation-r11, inDeviceCoexIndication-r11 InDeviceCoexIndication-r11, mbmsInterestIndication-r11 MBMSInterestIndication-r11, scgFailureInformation-r12 SCGFailureInformation-r12, sidelinkUEInformation-r12 SidelinkUEInformation-r12, wlanConnectionStatusReport-r13 WLANConnectionStatusReport-r13, rrcConnectionResumeComplete-r13 RRCConnectionResumeComplete-r13, spare9 NULL, spare8 NULL, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, messageClassExtensionFuture-r11 SEQUENCE {} } } SC-MCCH-Message-r13 ::= SEQUENCE { message SC-MCCH-MessageType-r13 } SC-MCCH-MessageType-r13 ::= CHOICE { c1 CHOICE { scptmConfiguration-r13 SCPTMConfiguration-r13 }, messageClassExtension CHOICE { c2 CHOICE { scptmConfiguration-BR-r14 SCPTMConfiguration-BR-r14, spare NULL }, messageClassExtensionFuture-r14 SEQUENCE {} } } CounterCheck ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { counterCheck-r8 CounterCheck-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } CounterCheck-r8-IEs ::= SEQUENCE { drb-CountMSB-InfoList DRB-CountMSB-InfoList, nonCriticalExtension CounterCheck-v8a0-IEs OPTIONAL } CounterCheck-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } DRB-CountMSB-InfoList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-CountMSB-Info DRB-CountMSB-Info ::= SEQUENCE { drb-Identity DRB-Identity, countMSB-Uplink INTEGER(0..33554431), countMSB-Downlink INTEGER(0..33554431) } CounterCheckResponse ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { counterCheckResponse-r8 CounterCheckResponse-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } CounterCheckResponse-r8-IEs ::= SEQUENCE { drb-CountInfoList DRB-CountInfoList, nonCriticalExtension CounterCheckResponse-v8a0-IEs OPTIONAL } CounterCheckResponse-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } DRB-CountInfoList ::= SEQUENCE (SIZE (0..maxDRB)) OF DRB-CountInfo DRB-CountInfo ::= SEQUENCE { drb-Identity DRB-Identity, count-Uplink INTEGER(0..4294967295), count-Downlink INTEGER(0..4294967295) } CSFBParametersRequestCDMA2000 ::= SEQUENCE { criticalExtensions CHOICE { csfbParametersRequestCDMA2000-r8 CSFBParametersRequestCDMA2000-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } CSFBParametersRequestCDMA2000-r8-IEs ::= SEQUENCE { nonCriticalExtension CSFBParametersRequestCDMA2000-v8a0-IEs OPTIONAL } CSFBParametersRequestCDMA2000-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } CSFBParametersResponseCDMA2000 ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { csfbParametersResponseCDMA2000-r8 CSFBParametersResponseCDMA2000-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } CSFBParametersResponseCDMA2000-r8-IEs ::= SEQUENCE { rand RAND-CDMA2000, mobilityParameters MobilityParametersCDMA2000, nonCriticalExtension CSFBParametersResponseCDMA2000-v8a0-IEs OPTIONAL } CSFBParametersResponseCDMA2000-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } DLInformationTransfer ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { dlInformationTransfer-r8 DLInformationTransfer-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } DLInformationTransfer-r8-IEs ::= SEQUENCE { dedicatedInfoType CHOICE { dedicatedInfoNAS DedicatedInfoNAS, dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000, dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000 }, nonCriticalExtension DLInformationTransfer-v8a0-IEs OPTIONAL } DLInformationTransfer-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } HandoverFromEUTRAPreparationRequest ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { handoverFromEUTRAPreparationRequest-r8 HandoverFromEUTRAPreparationRequest-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } HandoverFromEUTRAPreparationRequest-r8-IEs ::= SEQUENCE { cdma2000-Type CDMA2000-Type, rand RAND-CDMA2000 OPTIONAL, -- Cond cdma2000-Type mobilityParameters MobilityParametersCDMA2000 OPTIONAL, -- Cond cdma2000-Type nonCriticalExtension HandoverFromEUTRAPreparationRequest-v890-IEs OPTIONAL } HandoverFromEUTRAPreparationRequest-v890-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension HandoverFromEUTRAPreparationRequest-v920-IEs OPTIONAL } HandoverFromEUTRAPreparationRequest-v920-IEs ::= SEQUENCE { concurrPrepCDMA2000-HRPD-r9 BOOLEAN OPTIONAL, -- Cond cdma2000-Type nonCriticalExtension HandoverFromEUTRAPreparationRequest-v1020-IEs OPTIONAL } HandoverFromEUTRAPreparationRequest-v1020-IEs ::= SEQUENCE { dualRxTxRedirectIndicator-r10 ENUMERATED {true} OPTIONAL, -- Cond cdma2000-1XRTT redirectCarrierCDMA2000-1XRTT-r10 CarrierFreqCDMA2000 OPTIONAL, -- Cond dualRxTxRedirect nonCriticalExtension SEQUENCE {} OPTIONAL } InDeviceCoexIndication-r11 ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { inDeviceCoexIndication-r11 InDeviceCoexIndication-r11-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } InDeviceCoexIndication-r11-IEs ::= SEQUENCE { affectedCarrierFreqList-r11 AffectedCarrierFreqList-r11 OPTIONAL, tdm-AssistanceInfo-r11 TDM-AssistanceInfo-r11 OPTIONAL, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension InDeviceCoexIndication-v11d0-IEs OPTIONAL } InDeviceCoexIndication-v11d0-IEs ::= SEQUENCE { ul-CA-AssistanceInfo-r11 SEQUENCE { affectedCarrierFreqCombList-r11 AffectedCarrierFreqCombList-r11 OPTIONAL, victimSystemType-r11 VictimSystemType-r11 } OPTIONAL, nonCriticalExtension InDeviceCoexIndication-v1310-IEs OPTIONAL } InDeviceCoexIndication-v1310-IEs ::= SEQUENCE { affectedCarrierFreqList-v1310 AffectedCarrierFreqList-v1310 OPTIONAL, affectedCarrierFreqCombList-r13 AffectedCarrierFreqCombList-r13 OPTIONAL, nonCriticalExtension InDeviceCoexIndication-v1360-IEs OPTIONAL } InDeviceCoexIndication-v1360-IEs ::= SEQUENCE { hardwareSharingProblem-r13 ENUMERATED {true} OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } AffectedCarrierFreqList-r11 ::= SEQUENCE (SIZE (1..maxFreqIDC-r11)) OF AffectedCarrierFreq-r11 AffectedCarrierFreqList-v1310 ::= SEQUENCE (SIZE (1..maxFreqIDC-r11)) OF AffectedCarrierFreq-v1310 AffectedCarrierFreq-r11 ::= SEQUENCE { carrierFreq-r11 MeasObjectId, interferenceDirection-r11 ENUMERATED {eutra, other, both, spare} } AffectedCarrierFreq-v1310 ::= SEQUENCE { carrierFreq-v1310 MeasObjectId-v1310 OPTIONAL } AffectedCarrierFreqCombList-r11 ::= SEQUENCE (SIZE (1..maxCombIDC-r11)) OF AffectedCarrierFreqComb-r11 AffectedCarrierFreqCombList-r13 ::= SEQUENCE (SIZE (1..maxCombIDC-r11)) OF AffectedCarrierFreqComb-r13 AffectedCarrierFreqComb-r11 ::= SEQUENCE (SIZE (2..maxServCell-r10)) OF MeasObjectId AffectedCarrierFreqComb-r13 ::= SEQUENCE (SIZE (2..maxServCell-r13)) OF MeasObjectId-r13 TDM-AssistanceInfo-r11 ::= CHOICE { drx-AssistanceInfo-r11 SEQUENCE { drx-CycleLength-r11 ENUMERATED {sf40, sf64, sf80, sf128, sf160, sf256, spare2, spare1}, drx-Offset-r11 INTEGER (0..255) OPTIONAL, drx-ActiveTime-r11 ENUMERATED {sf20, sf30, sf40, sf60, sf80, sf100, spare2, spare1} }, idc-SubframePatternList-r11 IDC-SubframePatternList-r11, ... } IDC-SubframePatternList-r11 ::= SEQUENCE (SIZE (1..maxSubframePatternIDC-r11)) OF IDC-SubframePattern-r11 IDC-SubframePattern-r11 ::= CHOICE { subframePatternFDD-r11 BIT STRING (SIZE (4)), subframePatternTDD-r11 CHOICE { subframeConfig0-r11 BIT STRING (SIZE (70)), subframeConfig1-5-r11 BIT STRING (SIZE (10)), subframeConfig6-r11 BIT STRING (SIZE (60)) }, ... } VictimSystemType-r11 ::= SEQUENCE { gps-r11 ENUMERATED {true} OPTIONAL, glonass-r11 ENUMERATED {true} OPTIONAL, bds-r11 ENUMERATED {true} OPTIONAL, galileo-r11 ENUMERATED {true} OPTIONAL, wlan-r11 ENUMERATED {true} OPTIONAL, bluetooth-r11 ENUMERATED {true} OPTIONAL } InterFreqRSTDMeasurementIndication-r10 ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { interFreqRSTDMeasurementIndication-r10 InterFreqRSTDMeasurementIndication-r10-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } InterFreqRSTDMeasurementIndication-r10-IEs ::= SEQUENCE { rstd-InterFreqIndication-r10 CHOICE { start SEQUENCE { rstd-InterFreqInfoList-r10 RSTD-InterFreqInfoList-r10 }, stop NULL }, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RSTD-InterFreqInfoList-r10 ::= SEQUENCE (SIZE(1..maxRSTD-Freq-r10)) OF RSTD-InterFreqInfo-r10 RSTD-InterFreqInfo-r10 ::= SEQUENCE { carrierFreq-r10 ARFCN-ValueEUTRA, measPRS-Offset-r10 INTEGER (0..39), ..., [[ carrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL ]] } LoggedMeasurementConfiguration-r10 ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { loggedMeasurementConfiguration-r10 LoggedMeasurementConfiguration-r10-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } LoggedMeasurementConfiguration-r10-IEs ::= SEQUENCE { traceReference-r10 TraceReference-r10, traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), tce-Id-r10 OCTET STRING (SIZE (1)), absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, -- Need OR loggingDuration-r10 LoggingDuration-r10, loggingInterval-r10 LoggingInterval-r10, nonCriticalExtension LoggedMeasurementConfiguration-v1080-IEs OPTIONAL } LoggedMeasurementConfiguration-v1080-IEs ::= SEQUENCE { lateNonCriticalExtension-r10 OCTET STRING OPTIONAL, nonCriticalExtension LoggedMeasurementConfiguration-v1130-IEs OPTIONAL } LoggedMeasurementConfiguration-v1130-IEs ::= SEQUENCE { plmn-IdentityList-r11 PLMN-IdentityList3-r11 OPTIONAL, -- Need OR areaConfiguration-v1130 AreaConfiguration-v1130 OPTIONAL, -- Need OR nonCriticalExtension LoggedMeasurementConfiguration-v1250-IEs OPTIONAL } LoggedMeasurementConfiguration-v1250-IEs ::= SEQUENCE { targetMBSFN-AreaList-r12 TargetMBSFN-AreaList-r12 OPTIONAL, -- Need OP nonCriticalExtension SEQUENCE {} OPTIONAL } TargetMBSFN-AreaList-r12 ::= SEQUENCE (SIZE (0..maxMBSFN-Area)) OF TargetMBSFN-Area-r12 TargetMBSFN-Area-r12 ::= SEQUENCE { mbsfn-AreaId-r12 MBSFN-AreaId-r12 OPTIONAL, -- Need OR carrierFreq-r12 ARFCN-ValueEUTRA-r9, ... } MasterInformationBlock ::= SEQUENCE { dl-Bandwidth ENUMERATED { n6, n15, n25, n50, n75, n100}, phich-Config PHICH-Config, systemFrameNumber BIT STRING (SIZE (8)), schedulingInfoSIB1-BR-r13 INTEGER (0..31), spare BIT STRING (SIZE (5)) } MasterInformationBlock-MBMS-r14 ::= SEQUENCE { dl-Bandwidth-MBMS-r14 ENUMERATED { n6, n15, n25, n50, n75, n100}, systemFrameNumber-r14 BIT STRING (SIZE (6)), additionalNonMBSFNSubframes-r14 INTEGER (0..3), spare BIT STRING (SIZE (13)) } MBMSCountingRequest-r10 ::= SEQUENCE { countingRequestList-r10 CountingRequestList-r10, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } CountingRequestList-r10 ::= SEQUENCE (SIZE (1..maxServiceCount)) OF CountingRequestInfo-r10 CountingRequestInfo-r10 ::= SEQUENCE { tmgi-r10 TMGI-r9, ... } MBMSCountingResponse-r10 ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { countingResponse-r10 MBMSCountingResponse-r10-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } MBMSCountingResponse-r10-IEs ::= SEQUENCE { mbsfn-AreaIndex-r10 INTEGER (0..maxMBSFN-Area-1) OPTIONAL, countingResponseList-r10 CountingResponseList-r10 OPTIONAL, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } CountingResponseList-r10 ::= SEQUENCE (SIZE (1..maxServiceCount)) OF CountingResponseInfo-r10 CountingResponseInfo-r10 ::= SEQUENCE { countingResponseService-r10 INTEGER (0..maxServiceCount-1), ... } MBMSInterestIndication-r11 ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { interestIndication-r11 MBMSInterestIndication-r11-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } MBMSInterestIndication-r11-IEs ::= SEQUENCE { mbms-FreqList-r11 CarrierFreqListMBMS-r11 OPTIONAL, mbms-Priority-r11 ENUMERATED {true} OPTIONAL, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension MBMSInterestIndication-v1310-IEs OPTIONAL } MBMSInterestIndication-v1310-IEs ::= SEQUENCE { mbms-Services-r13 MBMS-ServiceList-r13 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } MBSFNAreaConfiguration-r9 ::= SEQUENCE { commonSF-Alloc-r9 CommonSF-AllocPatternList-r9, commonSF-AllocPeriod-r9 ENUMERATED { rf4, rf8, rf16, rf32, rf64, rf128, rf256}, pmch-InfoList-r9 PMCH-InfoList-r9, nonCriticalExtension MBSFNAreaConfiguration-v930-IEs OPTIONAL } MBSFNAreaConfiguration-v930-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension MBSFNAreaConfiguration-v1250-IEs OPTIONAL } MBSFNAreaConfiguration-v1250-IEs ::= SEQUENCE { pmch-InfoListExt-r12 PMCH-InfoListExt-r12 OPTIONAL, -- Need OR nonCriticalExtension MBSFNAreaConfiguration-v1430-IEs OPTIONAL } MBSFNAreaConfiguration-v1430-IEs ::= SEQUENCE { commonSF-Alloc-r14 CommonSF-AllocPatternList-r14, nonCriticalExtension SEQUENCE {} OPTIONAL } CommonSF-AllocPatternList-r9 ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig CommonSF-AllocPatternList-r14 ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig-v1430 MeasurementReport ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ measurementReport-r8 MeasurementReport-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } MeasurementReport-r8-IEs ::= SEQUENCE { measResults MeasResults, nonCriticalExtension MeasurementReport-v8a0-IEs OPTIONAL } MeasurementReport-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } MobilityFromEUTRACommand ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ mobilityFromEUTRACommand-r8 MobilityFromEUTRACommand-r8-IEs, mobilityFromEUTRACommand-r9 MobilityFromEUTRACommand-r9-IEs, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } MobilityFromEUTRACommand-r8-IEs ::= SEQUENCE { cs-FallbackIndicator BOOLEAN, purpose CHOICE{ handover Handover, cellChangeOrder CellChangeOrder }, nonCriticalExtension MobilityFromEUTRACommand-v8a0-IEs OPTIONAL } MobilityFromEUTRACommand-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension MobilityFromEUTRACommand-v8d0-IEs OPTIONAL } MobilityFromEUTRACommand-v8d0-IEs ::= SEQUENCE { bandIndicator BandIndicatorGERAN OPTIONAL, -- Cond GERAN nonCriticalExtension SEQUENCE {} OPTIONAL } MobilityFromEUTRACommand-r9-IEs ::= SEQUENCE { cs-FallbackIndicator BOOLEAN, purpose CHOICE{ handover Handover, cellChangeOrder CellChangeOrder, e-CSFB-r9 E-CSFB-r9, ... }, nonCriticalExtension MobilityFromEUTRACommand-v930-IEs OPTIONAL } MobilityFromEUTRACommand-v930-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension MobilityFromEUTRACommand-v960-IEs OPTIONAL } MobilityFromEUTRACommand-v960-IEs ::= SEQUENCE { bandIndicator BandIndicatorGERAN OPTIONAL, -- Cond GERAN nonCriticalExtension SEQUENCE {} OPTIONAL } Handover ::= SEQUENCE { targetRAT-Type ENUMERATED { utra, geran, cdma2000-1XRTT, cdma2000-HRPD, spare4, spare3, spare2, spare1, ...}, targetRAT-MessageContainer OCTET STRING, nas-SecurityParamFromEUTRA OCTET STRING (SIZE (1)) OPTIONAL, -- Cond UTRAGERAN systemInformation SI-OrPSI-GERAN OPTIONAL -- Cond PSHO } CellChangeOrder ::= SEQUENCE { t304 ENUMERATED { ms100, ms200, ms500, ms1000, ms2000, ms4000, ms8000, ms10000-v1310}, targetRAT-Type CHOICE { geran SEQUENCE { physCellId PhysCellIdGERAN, carrierFreq CarrierFreqGERAN, networkControlOrder BIT STRING (SIZE (2)) OPTIONAL, -- Need OP systemInformation SI-OrPSI-GERAN OPTIONAL -- Need OP }, ... } } SI-OrPSI-GERAN ::= CHOICE { si SystemInfoListGERAN, psi SystemInfoListGERAN } E-CSFB-r9 ::= SEQUENCE { messageContCDMA2000-1XRTT-r9 OCTET STRING OPTIONAL, -- Need ON mobilityCDMA2000-HRPD-r9 ENUMERATED { handover, redirection } OPTIONAL, -- Need OP messageContCDMA2000-HRPD-r9 OCTET STRING OPTIONAL, -- Cond concHO redirectCarrierCDMA2000-HRPD-r9 CarrierFreqCDMA2000 OPTIONAL -- Cond concRedir } Paging ::= SEQUENCE { pagingRecordList PagingRecordList OPTIONAL, -- Need ON systemInfoModification ENUMERATED {true} OPTIONAL, -- Need ON etws-Indication ENUMERATED {true} OPTIONAL, -- Need ON nonCriticalExtension Paging-v890-IEs OPTIONAL } Paging-v890-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension Paging-v920-IEs OPTIONAL } Paging-v920-IEs ::= SEQUENCE { cmas-Indication-r9 ENUMERATED {true} OPTIONAL, -- Need ON nonCriticalExtension Paging-v1130-IEs OPTIONAL } Paging-v1130-IEs ::= SEQUENCE { eab-ParamModification-r11 ENUMERATED {true} OPTIONAL, -- Need ON nonCriticalExtension Paging-v1310-IEs OPTIONAL } Paging-v1310-IEs ::= SEQUENCE { redistributionIndication-r13 ENUMERATED {true} OPTIONAL, --Need ON systemInfoModification-eDRX-r13 ENUMERATED {true} OPTIONAL, -- Need ON nonCriticalExtension SEQUENCE {} OPTIONAL } PagingRecordList ::= SEQUENCE (SIZE (1..maxPageRec)) OF PagingRecord PagingRecord ::= SEQUENCE { ue-Identity PagingUE-Identity, cn-Domain ENUMERATED {ps, cs}, ... } PagingUE-Identity ::= CHOICE { s-TMSI S-TMSI, imsi IMSI, ... } IMSI ::= SEQUENCE (SIZE (6..21)) OF IMSI-Digit IMSI-Digit ::= INTEGER (0..9) ProximityIndication-r9 ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { proximityIndication-r9 ProximityIndication-r9-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } ProximityIndication-r9-IEs ::= SEQUENCE { type-r9 ENUMERATED {entering, leaving}, carrierFreq-r9 CHOICE { eutra-r9 ARFCN-ValueEUTRA, utra-r9 ARFCN-ValueUTRA, ..., eutra2-v9e0 ARFCN-ValueEUTRA-v9e0 }, nonCriticalExtension ProximityIndication-v930-IEs OPTIONAL } ProximityIndication-v930-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RNReconfiguration-r10 ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { rnReconfiguration-r10 RNReconfiguration-r10-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RNReconfiguration-r10-IEs ::= SEQUENCE { rn-SystemInfo-r10 RN-SystemInfo-r10 OPTIONAL, -- Need ON rn-SubframeConfig-r10 RN-SubframeConfig-r10 OPTIONAL, -- Need ON lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RN-SystemInfo-r10 ::= SEQUENCE { systemInformationBlockType1-r10 OCTET STRING (CONTAINING SystemInformationBlockType1) OPTIONAL, -- Need ON systemInformationBlockType2-r10 SystemInformationBlockType2 OPTIONAL, -- Need ON ... } RNReconfigurationComplete-r10 ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ rnReconfigurationComplete-r10 RNReconfigurationComplete-r10-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RNReconfigurationComplete-r10-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionReconfiguration ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ rrcConnectionReconfiguration-r8 RRCConnectionReconfiguration-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReconfiguration-r8-IEs ::= SEQUENCE { measConfig MeasConfig OPTIONAL, -- Need ON mobilityControlInfo MobilityControlInfo OPTIONAL, -- Cond HO dedicatedInfoNASList SEQUENCE (SIZE(1..maxDRB)) OF DedicatedInfoNAS OPTIONAL, -- Cond nonHO radioResourceConfigDedicated RadioResourceConfigDedicated OPTIONAL, -- Cond HO-toEUTRA securityConfigHO SecurityConfigHO OPTIONAL, -- Cond HO nonCriticalExtension RRCConnectionReconfiguration-v890-IEs OPTIONAL } RRCConnectionReconfiguration-v890-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING (CONTAINING RRCConnectionReconfiguration-v8m0-IEs) OPTIONAL, nonCriticalExtension RRCConnectionReconfiguration-v920-IEs OPTIONAL } -- Late non-critical extensions: RRCConnectionReconfiguration-v8m0-IEs ::= SEQUENCE { -- Following field is only for pre REL-10 late non-critical extensions lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension RRCConnectionReconfiguration-v10i0-IEs OPTIONAL } RRCConnectionReconfiguration-v10i0-IEs ::= SEQUENCE { antennaInfoDedicatedPCell-v10i0 AntennaInfoDedicated-v10i0 OPTIONAL, -- Need ON nonCriticalExtension RRCConnectionReconfiguration-v10l0-IEs OPTIONAL } RRCConnectionReconfiguration-v10l0-IEs ::= SEQUENCE { mobilityControlInfo-v10l0 MobilityControlInfo-v10l0 OPTIONAL, sCellToAddModList-v10l0 SCellToAddModList-v10l0 OPTIONAL, -- Need ON -- Following field is only for late non-critical extensions from REL-10 to REL-11 lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension RRCConnectionReconfiguration-v12f0-IEs OPTIONAL } RRCConnectionReconfiguration-v12f0-IEs ::= SEQUENCE { scg-Configuration-v12f0 SCG-Configuration-v12f0 OPTIONAL, -- Cond nonFullConfig -- Following field is only for late non-critical extensions from REL-12 lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension RRCConnectionReconfiguration-v1370-IEs OPTIONAL } RRCConnectionReconfiguration-v1370-IEs ::= SEQUENCE { radioResourceConfigDedicated-v1370 RadioResourceConfigDedicated-v1370 OPTIONAL, -- Need ON sCellToAddModListExt-v1370 SCellToAddModListExt-v1370 OPTIONAL, -- Need ON -- Following field is only for late non-critical extensions from REL-13 onwards nonCriticalExtension SEQUENCE {} OPTIONAL } -- Regular non-critical extensions: RRCConnectionReconfiguration-v920-IEs ::= SEQUENCE { otherConfig-r9 OtherConfig-r9 OPTIONAL, -- Need ON fullConfig-r9 ENUMERATED {true} OPTIONAL, -- Cond HO-Reestab nonCriticalExtension RRCConnectionReconfiguration-v1020-IEs OPTIONAL } RRCConnectionReconfiguration-v1020-IEs ::= SEQUENCE { sCellToReleaseList-r10 SCellToReleaseList-r10 OPTIONAL, -- Need ON sCellToAddModList-r10 SCellToAddModList-r10 OPTIONAL, -- Need ON nonCriticalExtension RRCConnectionReconfiguration-v1130-IEs OPTIONAL } RRCConnectionReconfiguration-v1130-IEs ::= SEQUENCE { systemInformationBlockType1Dedicated-r11 OCTET STRING (CONTAINING SystemInformationBlockType1) OPTIONAL, -- Need ON nonCriticalExtension RRCConnectionReconfiguration-v1250-IEs OPTIONAL } RRCConnectionReconfiguration-v1250-IEs ::= SEQUENCE { wlan-OffloadInfo-r12 CHOICE { release NULL, setup SEQUENCE { wlan-OffloadConfigDedicated-r12 WLAN-OffloadConfig-r12, t350-r12 ENUMERATED {min5, min10, min20, min30, min60, min120, min180, spare1} OPTIONAL -- Need OR } } OPTIONAL, -- Need ON scg-Configuration-r12 SCG-Configuration-r12 OPTIONAL, -- Cond nonFullConfig sl-SyncTxControl-r12 SL-SyncTxControl-r12 OPTIONAL, -- Need ON sl-DiscConfig-r12 SL-DiscConfig-r12 OPTIONAL, -- Need ON sl-CommConfig-r12 SL-CommConfig-r12 OPTIONAL, -- Need ON nonCriticalExtension RRCConnectionReconfiguration-v1310-IEs OPTIONAL } RRCConnectionReconfiguration-v1310-IEs ::= SEQUENCE { sCellToReleaseListExt-r13 SCellToReleaseListExt-r13 OPTIONAL, -- Need ON sCellToAddModListExt-r13 SCellToAddModListExt-r13 OPTIONAL, -- Need ON lwa-Configuration-r13 LWA-Configuration-r13 OPTIONAL, -- Need ON lwip-Configuration-r13 LWIP-Configuration-r13 OPTIONAL, -- Need ON rclwi-Configuration-r13 RCLWI-Configuration-r13 OPTIONAL, -- Need ON nonCriticalExtension RRCConnectionReconfiguration-v1430-IEs OPTIONAL } RRCConnectionReconfiguration-v1430-IEs ::= SEQUENCE { sl-V2X-ConfigDedicated-r14 SL-V2X-ConfigDedicated-r14 OPTIONAL, -- Need ON sCellToAddModListExt-v1430 SCellToAddModListExt-v1430 OPTIONAL, -- Need ON perCC-GapIndicationRequest-r14 ENUMERATED{true} OPTIONAL, -- Need ON systemInformationBlockType2Dedicated-r14 OCTET STRING (CONTAINING SystemInformationBlockType2) OPTIONAL, -- Cond nonHO nonCriticalExtension SEQUENCE {} OPTIONAL } SL-SyncTxControl-r12 ::= SEQUENCE { networkControlledSyncTx-r12 ENUMERATED {on, off} OPTIONAL -- Need OP } PSCellToAddMod-r12 ::= SEQUENCE { sCellIndex-r12 SCellIndex-r10, cellIdentification-r12 SEQUENCE { physCellId-r12 PhysCellId, dl-CarrierFreq-r12 ARFCN-ValueEUTRA-r9 } OPTIONAL, -- Cond SCellAdd radioResourceConfigCommonPSCell-r12 RadioResourceConfigCommonPSCell-r12 OPTIONAL, -- Cond SCellAdd radioResourceConfigDedicatedPSCell-r12 RadioResourceConfigDedicatedPSCell-r12 OPTIONAL, -- Cond SCellAdd2 ..., [[ antennaInfoDedicatedPSCell-v1280 AntennaInfoDedicated-v10i0 OPTIONAL -- Need ON ]], [[ sCellIndex-r13 SCellIndex-r13 OPTIONAL -- Need ON ]], [[ radioResourceConfigDedicatedPSCell-v1370 RadioResourceConfigDedicatedPSCell-v1370 OPTIONAL -- Need ON ]] } PSCellToAddMod-v12f0 ::= SEQUENCE { radioResourceConfigCommonPSCell-r12 RadioResourceConfigCommonPSCell-v12f0 OPTIONAL } PSCellToAddMod-v1440 ::= SEQUENCE { radioResourceConfigCommonPSCell-r14 RadioResourceConfigCommonPSCell-v1440 OPTIONAL } PowerCoordinationInfo-r12 ::= SEQUENCE { p-MeNB-r12 INTEGER (1..16), p-SeNB-r12 INTEGER (1..16), powerControlMode-r12 INTEGER (1..2) } SCellToAddModList-r10 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellToAddMod-r10 SCellToAddModList-v10l0 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellToAddMod-v10l0 SCellToAddModListExt-r13 ::= SEQUENCE (SIZE (1..maxSCell-r13)) OF SCellToAddModExt-r13 SCellToAddModListExt-v1370 ::= SEQUENCE (SIZE (1..maxSCell-r13)) OF SCellToAddModExt-v1370 SCellToAddModListExt-v1430 ::= SEQUENCE (SIZE (1..maxSCell-r13)) OF SCellToAddModExt-v1430 SCellToAddMod-r10 ::= SEQUENCE { sCellIndex-r10 SCellIndex-r10, cellIdentification-r10 SEQUENCE { physCellId-r10 PhysCellId, dl-CarrierFreq-r10 ARFCN-ValueEUTRA } OPTIONAL, -- Cond SCellAdd radioResourceConfigCommonSCell-r10 RadioResourceConfigCommonSCell-r10 OPTIONAL, -- Cond SCellAdd radioResourceConfigDedicatedSCell-r10 RadioResourceConfigDedicatedSCell-r10 OPTIONAL, -- Cond SCellAdd2 ..., [[ dl-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Cond EARFCN-max ]], [[ antennaInfoDedicatedSCell-v10i0 AntennaInfoDedicated-v10i0 OPTIONAL -- Need ON ]], [[ srs-SwitchFromServCellIndex-r14 INTEGER (0.. 31) OPTIONAL -- Need ON ]] } SCellToAddMod-v10l0 ::= SEQUENCE { radioResourceConfigCommonSCell-v10l0 RadioResourceConfigCommonSCell-v10l0 OPTIONAL } SCellToAddModExt-r13 ::= SEQUENCE { sCellIndex-r13 SCellIndex-r13, cellIdentification-r13 SEQUENCE { physCellId-r13 PhysCellId, dl-CarrierFreq-r13 ARFCN-ValueEUTRA-r9 } OPTIONAL, -- Cond SCellAdd radioResourceConfigCommonSCell-r13 RadioResourceConfigCommonSCell-r10 OPTIONAL, -- Cond SCellAdd radioResourceConfigDedicatedSCell-r13 RadioResourceConfigDedicatedSCell-r10 OPTIONAL, -- Cond SCellAdd2 antennaInfoDedicatedSCell-r13 AntennaInfoDedicated-v10i0 OPTIONAL -- Need ON } SCellToAddModExt-v1370 ::= SEQUENCE { radioResourceConfigCommonSCell-v1370 RadioResourceConfigCommonSCell-v10l0 OPTIONAL } SCellToAddModExt-v1430 ::= SEQUENCE { srs-SwitchFromServCellIndex-r14 INTEGER (0.. 31) OPTIONAL, -- Need ON ... } SCellToReleaseList-r10 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF SCellIndex-r10 SCellToReleaseListExt-r13 ::= SEQUENCE (SIZE (1..maxSCell-r13)) OF SCellIndex-r13 SCG-Configuration-r12 ::= CHOICE { release NULL, setup SEQUENCE { scg-ConfigPartMCG-r12 SEQUENCE { scg-Counter-r12 INTEGER (0.. 65535) OPTIONAL, -- Need ON powerCoordinationInfo-r12 PowerCoordinationInfo-r12 OPTIONAL, -- Need ON ... } OPTIONAL, -- Need ON scg-ConfigPartSCG-r12 SCG-ConfigPartSCG-r12 OPTIONAL -- Need ON } } SCG-Configuration-v12f0 ::= CHOICE { release NULL, setup SEQUENCE { scg-ConfigPartSCG-v12f0 SCG-ConfigPartSCG-v12f0 OPTIONAL -- Need ON } } SCG-ConfigPartSCG-r12 ::= SEQUENCE { radioResourceConfigDedicatedSCG-r12 RadioResourceConfigDedicatedSCG-r12 OPTIONAL, -- Need ON sCellToReleaseListSCG-r12 SCellToReleaseList-r10 OPTIONAL, -- Need ON pSCellToAddMod-r12 PSCellToAddMod-r12 OPTIONAL, -- Need ON sCellToAddModListSCG-r12 SCellToAddModList-r10 OPTIONAL, -- Need ON mobilityControlInfoSCG-r12 MobilityControlInfoSCG-r12 OPTIONAL, -- Need ON ..., [[ sCellToReleaseListSCG-Ext-r13 SCellToReleaseListExt-r13 OPTIONAL, -- Need ON sCellToAddModListSCG-Ext-r13 SCellToAddModListExt-r13 OPTIONAL -- Need ON ]], [[ sCellToAddModListSCG-Ext-v1370 SCellToAddModListExt-v1370 OPTIONAL -- Need ON ]], [[ pSCellToAddMod-v1440 PSCellToAddMod-v1440 OPTIONAL -- Need ON ]] } SCG-ConfigPartSCG-v12f0 ::= SEQUENCE { pSCellToAddMod-v12f0 PSCellToAddMod-v12f0 OPTIONAL, -- Need ON sCellToAddModListSCG-v12f0 SCellToAddModList-v10l0 OPTIONAL -- Need ON } SecurityConfigHO ::= SEQUENCE { handoverType CHOICE { intraLTE SEQUENCE { securityAlgorithmConfig SecurityAlgorithmConfig OPTIONAL, -- Cond fullConfig keyChangeIndicator BOOLEAN, nextHopChainingCount NextHopChainingCount }, interRAT SEQUENCE { securityAlgorithmConfig SecurityAlgorithmConfig, nas-SecurityParamToEUTRA OCTET STRING (SIZE(6)) } }, ... } RRCConnectionReconfigurationComplete ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { rrcConnectionReconfigurationComplete-r8 RRCConnectionReconfigurationComplete-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReconfigurationComplete-r8-IEs ::= SEQUENCE { nonCriticalExtension RRCConnectionReconfigurationComplete-v8a0-IEs OPTIONAL } RRCConnectionReconfigurationComplete-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension RRCConnectionReconfigurationComplete-v1020-IEs OPTIONAL } RRCConnectionReconfigurationComplete-v1020-IEs ::= SEQUENCE { rlf-InfoAvailable-r10 ENUMERATED {true} OPTIONAL, logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, nonCriticalExtension RRCConnectionReconfigurationComplete-v1130-IEs OPTIONAL } RRCConnectionReconfigurationComplete-v1130-IEs ::= SEQUENCE { connEstFailInfoAvailable-r11 ENUMERATED {true} OPTIONAL, nonCriticalExtension RRCConnectionReconfigurationComplete-v1250-IEs OPTIONAL } RRCConnectionReconfigurationComplete-v1250-IEs ::= SEQUENCE { logMeasAvailableMBSFN-r12 ENUMERATED {true} OPTIONAL, nonCriticalExtension RRCConnectionReconfigurationComplete-v1430-IEs OPTIONAL } RRCConnectionReconfigurationComplete-v1430-IEs ::= SEQUENCE { perCC-GapIndicationList-r14 PerCC-GapIndicationList-r14 OPTIONAL, numFreqEffective-r14 INTEGER (1..12) OPTIONAL, numFreqEffectiveReduced-r14 INTEGER (1..12) OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionReestablishment ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ rrcConnectionReestablishment-r8 RRCConnectionReestablishment-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReestablishment-r8-IEs ::= SEQUENCE { radioResourceConfigDedicated RadioResourceConfigDedicated, nextHopChainingCount NextHopChainingCount, nonCriticalExtension RRCConnectionReestablishment-v8a0-IEs OPTIONAL } RRCConnectionReestablishment-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionReestablishmentComplete ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { rrcConnectionReestablishmentComplete-r8 RRCConnectionReestablishmentComplete-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReestablishmentComplete-r8-IEs ::= SEQUENCE { nonCriticalExtension RRCConnectionReestablishmentComplete-v920-IEs OPTIONAL } RRCConnectionReestablishmentComplete-v920-IEs ::= SEQUENCE { rlf-InfoAvailable-r9 ENUMERATED {true} OPTIONAL, nonCriticalExtension RRCConnectionReestablishmentComplete-v8a0-IEs OPTIONAL } RRCConnectionReestablishmentComplete-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension RRCConnectionReestablishmentComplete-v1020-IEs OPTIONAL } RRCConnectionReestablishmentComplete-v1020-IEs ::= SEQUENCE { logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, nonCriticalExtension RRCConnectionReestablishmentComplete-v1130-IEs OPTIONAL } RRCConnectionReestablishmentComplete-v1130-IEs ::= SEQUENCE { connEstFailInfoAvailable-r11 ENUMERATED {true} OPTIONAL, nonCriticalExtension RRCConnectionReestablishmentComplete-v1250-IEs OPTIONAL } RRCConnectionReestablishmentComplete-v1250-IEs ::= SEQUENCE { logMeasAvailableMBSFN-r12 ENUMERATED {true} OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionReestablishmentReject ::= SEQUENCE { criticalExtensions CHOICE { rrcConnectionReestablishmentReject-r8 RRCConnectionReestablishmentReject-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReestablishmentReject-r8-IEs ::= SEQUENCE { nonCriticalExtension RRCConnectionReestablishmentReject-v8a0-IEs OPTIONAL } RRCConnectionReestablishmentReject-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionReestablishmentRequest ::= SEQUENCE { criticalExtensions CHOICE { rrcConnectionReestablishmentRequest-r8 RRCConnectionReestablishmentRequest-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReestablishmentRequest-r8-IEs ::= SEQUENCE { ue-Identity ReestabUE-Identity, reestablishmentCause ReestablishmentCause, spare BIT STRING (SIZE (2)) } ReestabUE-Identity ::= SEQUENCE { c-RNTI C-RNTI, physCellId PhysCellId, shortMAC-I ShortMAC-I } ReestablishmentCause ::= ENUMERATED { reconfigurationFailure, handoverFailure, otherFailure, spare1} RRCConnectionReject ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { rrcConnectionReject-r8 RRCConnectionReject-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReject-r8-IEs ::= SEQUENCE { waitTime INTEGER (1..16), nonCriticalExtension RRCConnectionReject-v8a0-IEs OPTIONAL } RRCConnectionReject-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension RRCConnectionReject-v1020-IEs OPTIONAL } RRCConnectionReject-v1020-IEs ::= SEQUENCE { extendedWaitTime-r10 INTEGER (1..1800) OPTIONAL, -- Need ON nonCriticalExtension RRCConnectionReject-v1130-IEs OPTIONAL } RRCConnectionReject-v1130-IEs ::= SEQUENCE { deprioritisationReq-r11 SEQUENCE { deprioritisationType-r11 ENUMERATED {frequency, e-utra}, deprioritisationTimer-r11 ENUMERATED {min5, min10, min15, min30} } OPTIONAL, -- Need ON nonCriticalExtension RRCConnectionReject-v1320-IEs OPTIONAL } RRCConnectionReject-v1320-IEs ::= SEQUENCE { rrc-SuspendIndication-r13 ENUMERATED {true} OPTIONAL, -- Need ON nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionRelease ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { rrcConnectionRelease-r8 RRCConnectionRelease-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionRelease-r8-IEs ::= SEQUENCE { releaseCause ReleaseCause, redirectedCarrierInfo RedirectedCarrierInfo OPTIONAL, -- Need ON idleModeMobilityControlInfo IdleModeMobilityControlInfo OPTIONAL, -- Need OP nonCriticalExtension RRCConnectionRelease-v890-IEs OPTIONAL } RRCConnectionRelease-v890-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING (CONTAINING RRCConnectionRelease-v9e0-IEs) OPTIONAL, nonCriticalExtension RRCConnectionRelease-v920-IEs OPTIONAL } -- Late non critical extensions RRCConnectionRelease-v9e0-IEs ::= SEQUENCE { redirectedCarrierInfo-v9e0 RedirectedCarrierInfo-v9e0 OPTIONAL, -- Cond NoRedirect-r8 idleModeMobilityControlInfo-v9e0 IdleModeMobilityControlInfo-v9e0 OPTIONAL, -- Cond IdleInfoEUTRA nonCriticalExtension SEQUENCE {} OPTIONAL } -- Regular non critical extensions RRCConnectionRelease-v920-IEs ::= SEQUENCE { cellInfoList-r9 CHOICE { geran-r9 CellInfoListGERAN-r9, utra-FDD-r9 CellInfoListUTRA-FDD-r9, utra-TDD-r9 CellInfoListUTRA-TDD-r9, ..., utra-TDD-r10 CellInfoListUTRA-TDD-r10 } OPTIONAL, -- Cond Redirection nonCriticalExtension RRCConnectionRelease-v1020-IEs OPTIONAL } RRCConnectionRelease-v1020-IEs ::= SEQUENCE { extendedWaitTime-r10 INTEGER (1..1800) OPTIONAL, -- Need ON nonCriticalExtension RRCConnectionRelease-v1320-IEs OPTIONAL } RRCConnectionRelease-v1320-IEs::= SEQUENCE { resumeIdentity-r13 ResumeIdentity-r13 OPTIONAL, -- Need OR nonCriticalExtension SEQUENCE {} OPTIONAL } ReleaseCause ::= ENUMERATED {loadBalancingTAUrequired, other, cs-FallbackHighPriority-v1020, rrc-Suspend-v1320} RedirectedCarrierInfo ::= CHOICE { eutra ARFCN-ValueEUTRA, geran CarrierFreqsGERAN, utra-FDD ARFCN-ValueUTRA, utra-TDD ARFCN-ValueUTRA, cdma2000-HRPD CarrierFreqCDMA2000, cdma2000-1xRTT CarrierFreqCDMA2000, ..., utra-TDD-r10 CarrierFreqListUTRA-TDD-r10 } RedirectedCarrierInfo-v9e0 ::= SEQUENCE { eutra-v9e0 ARFCN-ValueEUTRA-v9e0 } CarrierFreqListUTRA-TDD-r10 ::= SEQUENCE (SIZE (1..maxFreqUTRA-TDD-r10)) OF ARFCN-ValueUTRA IdleModeMobilityControlInfo ::= SEQUENCE { freqPriorityListEUTRA FreqPriorityListEUTRA OPTIONAL, -- Need ON freqPriorityListGERAN FreqsPriorityListGERAN OPTIONAL, -- Need ON freqPriorityListUTRA-FDD FreqPriorityListUTRA-FDD OPTIONAL, -- Need ON freqPriorityListUTRA-TDD FreqPriorityListUTRA-TDD OPTIONAL, -- Need ON bandClassPriorityListHRPD BandClassPriorityListHRPD OPTIONAL, -- Need ON bandClassPriorityList1XRTT BandClassPriorityList1XRTT OPTIONAL, -- Need ON t320 ENUMERATED { min5, min10, min20, min30, min60, min120, min180, spare1} OPTIONAL, -- Need OR ..., [[ freqPriorityListExtEUTRA-r12 FreqPriorityListExtEUTRA-r12 OPTIONAL -- Need ON ]], [[ freqPriorityListEUTRA-v1310 FreqPriorityListEUTRA-v1310 OPTIONAL, -- Need ON freqPriorityListExtEUTRA-v1310 FreqPriorityListExtEUTRA-v1310 OPTIONAL -- Need ON ]] } IdleModeMobilityControlInfo-v9e0 ::= SEQUENCE { freqPriorityListEUTRA-v9e0 SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA-v9e0 } FreqPriorityListEUTRA ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA FreqPriorityListExtEUTRA-r12 ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA-r12 FreqPriorityListEUTRA-v1310 ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA-v1310 FreqPriorityListExtEUTRA-v1310 ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA-v1310 FreqPriorityEUTRA ::= SEQUENCE { carrierFreq ARFCN-ValueEUTRA, cellReselectionPriority CellReselectionPriority } FreqPriorityEUTRA-v9e0 ::= SEQUENCE { carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Cond EARFCN-max } FreqPriorityEUTRA-r12 ::= SEQUENCE { carrierFreq-r12 ARFCN-ValueEUTRA-r9, cellReselectionPriority-r12 CellReselectionPriority } FreqPriorityEUTRA-v1310 ::= SEQUENCE { cellReselectionSubPriority-r13 CellReselectionSubPriority-r13 OPTIONAL -- Need ON } FreqsPriorityListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF FreqsPriorityGERAN FreqsPriorityGERAN ::= SEQUENCE { carrierFreqs CarrierFreqsGERAN, cellReselectionPriority CellReselectionPriority } FreqPriorityListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF FreqPriorityUTRA-FDD FreqPriorityUTRA-FDD ::= SEQUENCE { carrierFreq ARFCN-ValueUTRA, cellReselectionPriority CellReselectionPriority } FreqPriorityListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF FreqPriorityUTRA-TDD FreqPriorityUTRA-TDD ::= SEQUENCE { carrierFreq ARFCN-ValueUTRA, cellReselectionPriority CellReselectionPriority } BandClassPriorityListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriorityHRPD BandClassPriorityHRPD ::= SEQUENCE { bandClass BandclassCDMA2000, cellReselectionPriority CellReselectionPriority } BandClassPriorityList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriority1XRTT BandClassPriority1XRTT ::= SEQUENCE { bandClass BandclassCDMA2000, cellReselectionPriority CellReselectionPriority } CellInfoListGERAN-r9 ::= SEQUENCE (SIZE (1..maxCellInfoGERAN-r9)) OF CellInfoGERAN-r9 CellInfoGERAN-r9 ::= SEQUENCE { physCellId-r9 PhysCellIdGERAN, carrierFreq-r9 CarrierFreqGERAN, systemInformation-r9 SystemInfoListGERAN } CellInfoListUTRA-FDD-r9 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-FDD-r9 CellInfoUTRA-FDD-r9 ::= SEQUENCE { physCellId-r9 PhysCellIdUTRA-FDD, utra-BCCH-Container-r9 OCTET STRING } CellInfoListUTRA-TDD-r9 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-TDD-r9 CellInfoUTRA-TDD-r9 ::= SEQUENCE { physCellId-r9 PhysCellIdUTRA-TDD, utra-BCCH-Container-r9 OCTET STRING } CellInfoListUTRA-TDD-r10 ::= SEQUENCE (SIZE (1..maxCellInfoUTRA-r9)) OF CellInfoUTRA-TDD-r10 CellInfoUTRA-TDD-r10 ::= SEQUENCE { physCellId-r10 PhysCellIdUTRA-TDD, carrierFreq-r10 ARFCN-ValueUTRA, utra-BCCH-Container-r10 OCTET STRING } RRCConnectionRequest ::= SEQUENCE { criticalExtensions CHOICE { rrcConnectionRequest-r8 RRCConnectionRequest-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionRequest-r8-IEs ::= SEQUENCE { ue-Identity InitialUE-Identity, establishmentCause EstablishmentCause, spare BIT STRING (SIZE (1)) } InitialUE-Identity ::= CHOICE { s-TMSI S-TMSI, randomValue BIT STRING (SIZE (40)) } EstablishmentCause ::= ENUMERATED { emergency, highPriorityAccess, mt-Access, mo-Signalling, mo-Data, delayTolerantAccess-v1020, mo-VoiceCall-v1280, spare1} RRCConnectionResume-r13 ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { rrcConnectionResume-r13 RRCConnectionResume-r13-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionResume-r13-IEs ::= SEQUENCE { radioResourceConfigDedicated-r13 RadioResourceConfigDedicated OPTIONAL, -- Need ON nextHopChainingCount-r13 NextHopChainingCount, measConfig-r13 MeasConfig OPTIONAL, -- Need ON antennaInfoDedicatedPCell-r13 AntennaInfoDedicated-v10i0 OPTIONAL, -- Need ON drb-ContinueROHC-r13 ENUMERATED {true} OPTIONAL, -- Need OP lateNonCriticalExtension OCTET STRING OPTIONAL, rrcConnectionResume-v1430-IEs RRCConnectionResume-v1430-IEs OPTIONAL } RRCConnectionResume-v1430-IEs ::= SEQUENCE { otherConfig-r14 OtherConfig-r9 OPTIONAL, -- Need ON nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionResumeComplete-r13 ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { rrcConnectionResumeComplete-r13 RRCConnectionResumeComplete-r13-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionResumeComplete-r13-IEs ::= SEQUENCE { selectedPLMN-Identity-r13 INTEGER (1..maxPLMN-r11) OPTIONAL, dedicatedInfoNAS-r13 DedicatedInfoNAS OPTIONAL, rlf-InfoAvailable-r13 ENUMERATED {true} OPTIONAL, logMeasAvailable-r13 ENUMERATED {true} OPTIONAL, connEstFailInfoAvailable-r13 ENUMERATED {true} OPTIONAL, mobilityState-r13 ENUMERATED {normal, medium, high, spare} OPTIONAL, mobilityHistoryAvail-r13 ENUMERATED {true} OPTIONAL, logMeasAvailableMBSFN-r13 ENUMERATED {true} OPTIONAL, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionResumeRequest-r13 ::= SEQUENCE { criticalExtensions CHOICE { rrcConnectionResumeRequest-r13 RRCConnectionResumeRequest-r13-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionResumeRequest-r13-IEs ::= SEQUENCE { resumeIdentity-r13 CHOICE { resumeID-r13 ResumeIdentity-r13, truncatedResumeID-r13 BIT STRING (SIZE (24)) }, shortResumeMAC-I-r13 BIT STRING (SIZE (16)), resumeCause-r13 ResumeCause, spare BIT STRING (SIZE (1)) } ResumeCause ::= ENUMERATED { emergency, highPriorityAccess, mt-Access, mo-Signalling, mo-Data, delayTolerantAccess-v1020, mo-VoiceCall-v1280, spare1} RRCConnectionSetup ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { rrcConnectionSetup-r8 RRCConnectionSetup-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionSetup-r8-IEs ::= SEQUENCE { radioResourceConfigDedicated RadioResourceConfigDedicated, nonCriticalExtension RRCConnectionSetup-v8a0-IEs OPTIONAL } RRCConnectionSetup-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionSetupComplete ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ rrcConnectionSetupComplete-r8 RRCConnectionSetupComplete-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionSetupComplete-r8-IEs ::= SEQUENCE { selectedPLMN-Identity INTEGER (1..maxPLMN-r11), registeredMME RegisteredMME OPTIONAL, dedicatedInfoNAS DedicatedInfoNAS, nonCriticalExtension RRCConnectionSetupComplete-v8a0-IEs OPTIONAL } RRCConnectionSetupComplete-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension RRCConnectionSetupComplete-v1020-IEs OPTIONAL } RRCConnectionSetupComplete-v1020-IEs ::= SEQUENCE { gummei-Type-r10 ENUMERATED {native, mapped} OPTIONAL, rlf-InfoAvailable-r10 ENUMERATED {true} OPTIONAL, logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, rn-SubframeConfigReq-r10 ENUMERATED {required, notRequired} OPTIONAL, nonCriticalExtension RRCConnectionSetupComplete-v1130-IEs OPTIONAL } RRCConnectionSetupComplete-v1130-IEs ::= SEQUENCE { connEstFailInfoAvailable-r11 ENUMERATED {true} OPTIONAL, nonCriticalExtension RRCConnectionSetupComplete-v1250-IEs OPTIONAL } RRCConnectionSetupComplete-v1250-IEs ::= SEQUENCE { mobilityState-r12 ENUMERATED {normal, medium, high, spare} OPTIONAL, mobilityHistoryAvail-r12 ENUMERATED {true} OPTIONAL, logMeasAvailableMBSFN-r12 ENUMERATED {true} OPTIONAL, nonCriticalExtension RRCConnectionSetupComplete-v1320-IEs OPTIONAL } RRCConnectionSetupComplete-v1320-IEs ::= SEQUENCE { ce-ModeB-r13 ENUMERATED {supported} OPTIONAL, s-TMSI-r13 S-TMSI OPTIONAL, attachWithoutPDN-Connectivity-r13 ENUMERATED {true} OPTIONAL, up-CIoT-EPS-Optimisation-r13 ENUMERATED {true} OPTIONAL, cp-CIoT-EPS-Optimisation-r13 ENUMERATED {true} OPTIONAL, nonCriticalExtension RRCConnectionSetupComplete-v1330-IEs OPTIONAL } RRCConnectionSetupComplete-v1330-IEs ::= SEQUENCE { ue-CE-NeedULGaps-r13 ENUMERATED {true} OPTIONAL, nonCriticalExtension RRCConnectionSetupComplete-v1430-IEs OPTIONAL } RRCConnectionSetupComplete-v1430-IEs ::= SEQUENCE { dcn-ID-r14 INTEGER (0..65535) OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RegisteredMME ::= SEQUENCE { plmn-Identity PLMN-Identity OPTIONAL, mmegi BIT STRING (SIZE (16)), mmec MMEC } SCGFailureInformation-r12 ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { scgFailureInformation-r12 SCGFailureInformation-r12-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } SCGFailureInformation-r12-IEs ::= SEQUENCE { failureReportSCG-r12 FailureReportSCG-r12 OPTIONAL, nonCriticalExtension SCGFailureInformation-v1310-IEs OPTIONAL } SCGFailureInformation-v1310-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING (CONTAINING SCGFailureInformation-v12d0-IEs) OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } -- Late non-critical extensions: SCGFailureInformation-v12d0-IEs ::= SEQUENCE { failureReportSCG-v12d0 FailureReportSCG-v12d0 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } -- Regular non-critical extensions: FailureReportSCG-r12 ::= SEQUENCE { failureType-r12 ENUMERATED {t313-Expiry, randomAccessProblem, rlc-MaxNumRetx, scg-ChangeFailure }, measResultServFreqList-r12 MeasResultServFreqList-r10 OPTIONAL, measResultNeighCells-r12 MeasResultList2EUTRA-r9 OPTIONAL, ..., [[ failureType-v1290 ENUMERATED {maxUL-TimingDiff-v1290} OPTIONAL ]], [[ measResultServFreqListExt-r13 MeasResultServFreqListExt-r13 OPTIONAL ]] } FailureReportSCG-v12d0 ::= SEQUENCE { measResultNeighCells-v12d0 MeasResultList2EUTRA-v9e0 OPTIONAL } SCPTMConfiguration-r13 ::= SEQUENCE { sc-mtch-InfoList-r13 SC-MTCH-InfoList-r13, scptm-NeighbourCellList-r13 SCPTM-NeighbourCellList-r13 OPTIONAL, -- Need OP lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SCPTMConfiguration-v1340 OPTIONAL } SCPTMConfiguration-v1340 ::= SEQUENCE { p-b-r13 INTEGER (0..3) OPTIONAL, -- Need ON nonCriticalExtension SEQUENCE {} OPTIONAL } SCPTMConfiguration-BR-r14 ::= SEQUENCE { sc-mtch-InfoList-r14 SC-MTCH-InfoList-BR-r14, scptm-NeighbourCellList-r14 SCPTM-NeighbourCellList-r13 OPTIONAL, -- Need OP p-b-r14 INTEGER (0..3) OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } SecurityModeCommand ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ securityModeCommand-r8 SecurityModeCommand-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } SecurityModeCommand-r8-IEs ::= SEQUENCE { securityConfigSMC SecurityConfigSMC, nonCriticalExtension SecurityModeCommand-v8a0-IEs OPTIONAL } SecurityModeCommand-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } SecurityConfigSMC ::= SEQUENCE { securityAlgorithmConfig SecurityAlgorithmConfig, ... } SecurityModeComplete ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { securityModeComplete-r8 SecurityModeComplete-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } SecurityModeComplete-r8-IEs ::= SEQUENCE { nonCriticalExtension SecurityModeComplete-v8a0-IEs OPTIONAL } SecurityModeComplete-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } SecurityModeFailure ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { securityModeFailure-r8 SecurityModeFailure-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } SecurityModeFailure-r8-IEs ::= SEQUENCE { nonCriticalExtension SecurityModeFailure-v8a0-IEs OPTIONAL } SecurityModeFailure-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } SidelinkUEInformation-r12 ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { sidelinkUEInformation-r12 SidelinkUEInformation-r12-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } SidelinkUEInformation-r12-IEs ::= SEQUENCE { commRxInterestedFreq-r12 ARFCN-ValueEUTRA-r9 OPTIONAL, commTxResourceReq-r12 SL-CommTxResourceReq-r12 OPTIONAL, discRxInterest-r12 ENUMERATED {true} OPTIONAL, discTxResourceReq-r12 INTEGER (1..63) OPTIONAL, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SidelinkUEInformation-v1310-IEs OPTIONAL } SidelinkUEInformation-v1310-IEs ::= SEQUENCE { commTxResourceReqUC-r13 SL-CommTxResourceReq-r12 OPTIONAL, commTxResourceInfoReqRelay-r13 SEQUENCE { commTxResourceReqRelay-r13 SL-CommTxResourceReq-r12 OPTIONAL, commTxResourceReqRelayUC-r13 SL-CommTxResourceReq-r12 OPTIONAL, ue-Type-r13 ENUMERATED {relayUE, remoteUE} } OPTIONAL, discTxResourceReq-v1310 SEQUENCE { carrierFreqDiscTx-r13 INTEGER (1..maxFreq) OPTIONAL, discTxResourceReqAddFreq-r13 SL-DiscTxResourceReqPerFreqList-r13 OPTIONAL } OPTIONAL, discTxResourceReqPS-r13 SL-DiscTxResourceReq-r13 OPTIONAL, discRxGapReq-r13 SL-GapRequest-r13 OPTIONAL, discTxGapReq-r13 SL-GapRequest-r13 OPTIONAL, discSysInfoReportFreqList-r13 SL-DiscSysInfoReportFreqList-r13 OPTIONAL, nonCriticalExtension SidelinkUEInformation-v1430-IEs OPTIONAL } SidelinkUEInformation-v1430-IEs ::= SEQUENCE { v2x-CommRxInterestedFreqList-r14 SL-V2X-CommFreqList-r14 OPTIONAL, p2x-CommTxType-r14 ENUMERATED {true} OPTIONAL, v2x-CommTxResourceReq-r14 SL-V2X-CommTxFreqList-r14 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } SL-CommTxResourceReq-r12 ::= SEQUENCE { carrierFreq-r12 ARFCN-ValueEUTRA-r9 OPTIONAL, destinationInfoList-r12 SL-DestinationInfoList-r12 } SL-DiscTxResourceReqPerFreqList-r13 ::= SEQUENCE (SIZE (1..maxFreq)) OF SL-DiscTxResourceReq-r13 SL-DiscTxResourceReq-r13 ::= SEQUENCE { carrierFreqDiscTx-r13 INTEGER (1..maxFreq) OPTIONAL, discTxResourceReq-r13 INTEGER (1..63) } SL-DestinationInfoList-r12 ::= SEQUENCE (SIZE (1..maxSL-Dest-r12)) OF SL-DestinationIdentity-r12 SL-DestinationIdentity-r12 ::= BIT STRING (SIZE (24)) SL-DiscSysInfoReportFreqList-r13 ::= SEQUENCE (SIZE (1.. maxSL-DiscSysInfoReportFreq-r13)) OF SL-DiscSysInfoReport-r13 SL-V2X-CommFreqList-r14 ::= SEQUENCE (SIZE (1..maxFreqV2X-r14)) OF INTEGER (0..maxFreqV2X-1-r14) SL-V2X-CommTxFreqList-r14 ::= SEQUENCE (SIZE (1..maxFreqV2X-r14)) OF SL-V2X-CommTxResourceReq-r14 SL-V2X-CommTxResourceReq-r14 ::= SEQUENCE { carrierFreqCommTx-r14 INTEGER (0.. maxFreqV2X-1-r14) OPTIONAL, v2x-TypeTxSync-r14 SL-TypeTxSync-r14 OPTIONAL, v2x-DestinationInfoList-r14 SL-DestinationInfoList-r12 OPTIONAL } SystemInformation-BR-r13 ::= SystemInformation SystemInformation-MBMS-r14 ::= SystemInformation SystemInformation ::= SEQUENCE { criticalExtensions CHOICE { systemInformation-r8 SystemInformation-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } SystemInformation-r8-IEs ::= SEQUENCE { sib-TypeAndInfo SEQUENCE (SIZE (1..maxSIB)) OF CHOICE { sib2 SystemInformationBlockType2, sib3 SystemInformationBlockType3, sib4 SystemInformationBlockType4, sib5 SystemInformationBlockType5, sib6 SystemInformationBlockType6, sib7 SystemInformationBlockType7, sib8 SystemInformationBlockType8, sib9 SystemInformationBlockType9, sib10 SystemInformationBlockType10, sib11 SystemInformationBlockType11, ..., sib12-v920 SystemInformationBlockType12-r9, sib13-v920 SystemInformationBlockType13-r9, sib14-v1130 SystemInformationBlockType14-r11, sib15-v1130 SystemInformationBlockType15-r11, sib16-v1130 SystemInformationBlockType16-r11, sib17-v1250 SystemInformationBlockType17-r12, sib18-v1250 SystemInformationBlockType18-r12, sib19-v1250 SystemInformationBlockType19-r12, sib20-v1310 SystemInformationBlockType20-r13, sib21-v1430 SystemInformationBlockType21-r14 }, nonCriticalExtension SystemInformation-v8a0-IEs OPTIONAL } SystemInformation-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } SystemInformationBlockType1-BR-r13 ::= SystemInformationBlockType1 SystemInformationBlockType1 ::= SEQUENCE { cellAccessRelatedInfo SEQUENCE { plmn-IdentityList PLMN-IdentityList, trackingAreaCode TrackingAreaCode, cellIdentity CellIdentity, cellBarred ENUMERATED {barred, notBarred}, intraFreqReselection ENUMERATED {allowed, notAllowed}, csg-Indication BOOLEAN, csg-Identity CSG-Identity OPTIONAL -- Need OR }, cellSelectionInfo SEQUENCE { q-RxLevMin Q-RxLevMin, q-RxLevMinOffset INTEGER (1..8) OPTIONAL -- Need OP }, p-Max P-Max OPTIONAL, -- Need OP freqBandIndicator FreqBandIndicator, schedulingInfoList SchedulingInfoList, tdd-Config TDD-Config OPTIONAL, -- Cond TDD si-WindowLength ENUMERATED { ms1, ms2, ms5, ms10, ms15, ms20, ms40}, systemInfoValueTag INTEGER (0..31), nonCriticalExtension SystemInformationBlockType1-v890-IEs OPTIONAL } SystemInformationBlockType1-v890-IEs::= SEQUENCE { lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType1-v8h0-IEs) OPTIONAL, nonCriticalExtension SystemInformationBlockType1-v920-IEs OPTIONAL } -- Late non critical extensions SystemInformationBlockType1-v8h0-IEs ::= SEQUENCE { multiBandInfoList MultiBandInfoList OPTIONAL, -- Need OR nonCriticalExtension SystemInformationBlockType1-v9e0-IEs OPTIONAL } SystemInformationBlockType1-v9e0-IEs ::= SEQUENCE { freqBandIndicator-v9e0 FreqBandIndicator-v9e0 OPTIONAL, -- Cond FBI-max multiBandInfoList-v9e0 MultiBandInfoList-v9e0 OPTIONAL, -- Cond mFBI-max nonCriticalExtension SystemInformationBlockType1-v10j0-IEs OPTIONAL } SystemInformationBlockType1-v10j0-IEs ::= SEQUENCE { freqBandInfo-r10 NS-PmaxList-r10 OPTIONAL, -- Need OR multiBandInfoList-v10j0 MultiBandInfoList-v10j0 OPTIONAL, -- Need OR nonCriticalExtension SystemInformationBlockType1-v10l0-IEs OPTIONAL } SystemInformationBlockType1-v10l0-IEs ::= SEQUENCE { freqBandInfo-v10l0 NS-PmaxList-v10l0 OPTIONAL, -- Need OR multiBandInfoList-v10l0 MultiBandInfoList-v10l0 OPTIONAL, -- Need OR nonCriticalExtension SEQUENCE {} OPTIONAL } -- Regular non critical extensions SystemInformationBlockType1-v920-IEs ::= SEQUENCE { ims-EmergencySupport-r9 ENUMERATED {true} OPTIONAL, -- Need OR cellSelectionInfo-v920 CellSelectionInfo-v920 OPTIONAL, -- Cond RSRQ nonCriticalExtension SystemInformationBlockType1-v1130-IEs OPTIONAL } SystemInformationBlockType1-v1130-IEs ::= SEQUENCE { tdd-Config-v1130 TDD-Config-v1130 OPTIONAL, -- Cond TDD-OR cellSelectionInfo-v1130 CellSelectionInfo-v1130 OPTIONAL, -- Cond WB-RSRQ nonCriticalExtension SystemInformationBlockType1-v1250-IEs OPTIONAL } SystemInformationBlockType1-v1250-IEs ::= SEQUENCE { cellAccessRelatedInfo-v1250 SEQUENCE { category0Allowed-r12 ENUMERATED {true} OPTIONAL -- Need OP }, cellSelectionInfo-v1250 CellSelectionInfo-v1250 OPTIONAL, -- Cond RSRQ2 freqBandIndicatorPriority-r12 ENUMERATED {true} OPTIONAL, -- Cond mFBI nonCriticalExtension SystemInformationBlockType1-v1310-IEs OPTIONAL } SystemInformationBlockType1-v1310-IEs ::= SEQUENCE { hyperSFN-r13 BIT STRING (SIZE (10)) OPTIONAL, -- Need OR eDRX-Allowed-r13 ENUMERATED {true} OPTIONAL, -- Need OR cellSelectionInfoCE-r13 CellSelectionInfoCE-r13 OPTIONAL, -- Need OP bandwidthReducedAccessRelatedInfo-r13 SEQUENCE { si-WindowLength-BR-r13 ENUMERATED { ms20, ms40, ms60, ms80, ms120, ms160, ms200, spare}, si-RepetitionPattern-r13 ENUMERATED {everyRF, every2ndRF, every4thRF, every8thRF}, schedulingInfoList-BR-r13 SchedulingInfoList-BR-r13 OPTIONAL, -- Cond SI-BR fdd-DownlinkOrTddSubframeBitmapBR-r13 CHOICE { subframePattern10-r13 BIT STRING (SIZE (10)), subframePattern40-r13 BIT STRING (SIZE (40)) } OPTIONAL, -- Need OP fdd-UplinkSubframeBitmapBR-r13 BIT STRING (SIZE (10)) OPTIONAL, -- Need OP startSymbolBR-r13 INTEGER (1..4), si-HoppingConfigCommon-r13 ENUMERATED {on,off}, si-ValidityTime-r13 ENUMERATED {true} OPTIONAL, -- Need OP systemInfoValueTagList-r13 SystemInfoValueTagList-r13 OPTIONAL -- Need OR } OPTIONAL, -- Cond BW-reduced nonCriticalExtension SystemInformationBlockType1-v1320-IEs OPTIONAL } SystemInformationBlockType1-v1320-IEs ::= SEQUENCE { freqHoppingParametersDL-r13 SEQUENCE { mpdcch-pdsch-HoppingNB-r13 ENUMERATED {nb2, nb4} OPTIONAL, -- Need OR interval-DLHoppingConfigCommonModeA-r13 CHOICE { interval-FDD-r13 ENUMERATED {int1, int2, int4, int8}, interval-TDD-r13 ENUMERATED {int1, int5, int10, int20} } OPTIONAL, -- Need OR interval-DLHoppingConfigCommonModeB-r13 CHOICE { interval-FDD-r13 ENUMERATED {int2, int4, int8, int16}, interval-TDD-r13 ENUMERATED { int5, int10, int20, int40} } OPTIONAL, -- Need OR mpdcch-pdsch-HoppingOffset-r13 INTEGER (1..maxAvailNarrowBands-r13) OPTIONAL -- Need OR } OPTIONAL, -- Cond Hopping nonCriticalExtension SystemInformationBlockType1-v1350-IEs OPTIONAL } SystemInformationBlockType1-v1350-IEs ::= SEQUENCE { cellSelectionInfoCE1-r13 CellSelectionInfoCE1-r13 OPTIONAL, -- Need OP nonCriticalExtension SystemInformationBlockType1-v1360-IEs OPTIONAL } SystemInformationBlockType1-v1360-IEs ::= SEQUENCE { cellSelectionInfoCE1-v1360 CellSelectionInfoCE1-v1360 OPTIONAL, -- Cond QrxlevminCE1 nonCriticalExtension SystemInformationBlockType1-v1430-IEs OPTIONAL } SystemInformationBlockType1-v1430-IEs ::= SEQUENCE { eCallOverIMS-Support-r14 ENUMERATED {true} OPTIONAL, -- Need OR tdd-Config-v1430 TDD-Config-v1430 OPTIONAL, -- Cond TDD-OR cellAccessRelatedInfoList-r14 SEQUENCE (SIZE (1..maxPLMN-1-r14)) OF CellAccessRelatedInfo-r14 OPTIONAL, -- Need OR nonCriticalExtension SEQUENCE {} OPTIONAL } PLMN-IdentityList ::= SEQUENCE (SIZE (1..maxPLMN-r11)) OF PLMN-IdentityInfo PLMN-IdentityInfo ::= SEQUENCE { plmn-Identity PLMN-Identity, cellReservedForOperatorUse ENUMERATED {reserved, notReserved} } SchedulingInfoList ::= SEQUENCE (SIZE (1..maxSI-Message)) OF SchedulingInfo SchedulingInfo ::= SEQUENCE { si-Periodicity ENUMERATED { rf8, rf16, rf32, rf64, rf128, rf256, rf512}, sib-MappingInfo SIB-MappingInfo } SchedulingInfoList-BR-r13 ::= SEQUENCE (SIZE (1..maxSI-Message)) OF SchedulingInfo-BR-r13 SchedulingInfo-BR-r13 ::= SEQUENCE { si-Narrowband-r13 INTEGER (1..maxAvailNarrowBands-r13), si-TBS-r13 ENUMERATED {b152, b208, b256, b328, b408, b504, b600, b712, b808, b936} } SIB-MappingInfo ::= SEQUENCE (SIZE (0..maxSIB-1)) OF SIB-Type SIB-Type ::= ENUMERATED { sibType3, sibType4, sibType5, sibType6, sibType7, sibType8, sibType9, sibType10, sibType11, sibType12-v920, sibType13-v920, sibType14-v1130, sibType15-v1130, sibType16-v1130, sibType17-v1250, sibType18-v1250, ..., sibType19-v1250, sibType20-v1310, sibType21-v1430} SystemInfoValueTagList-r13 ::= SEQUENCE (SIZE (1..maxSI-Message)) OF SystemInfoValueTagSI-r13 SystemInfoValueTagSI-r13 ::= INTEGER (0..3) CellSelectionInfo-v920 ::= SEQUENCE { q-QualMin-r9 Q-QualMin-r9, q-QualMinOffset-r9 INTEGER (1..8) OPTIONAL -- Need OP } CellSelectionInfo-v1130 ::= SEQUENCE { q-QualMinWB-r11 Q-QualMin-r9 } CellSelectionInfo-v1250 ::= SEQUENCE { q-QualMinRSRQ-OnAllSymbols-r12 Q-QualMin-r9 } CellAccessRelatedInfo-r14 ::= SEQUENCE { plmn-IdentityList-r14 PLMN-IdentityList, trackingAreaCode-r14 TrackingAreaCode, cellIdentity-r14 CellIdentity } SystemInformationBlockType1-MBMS-r14 ::= SEQUENCE { cellAccessRelatedInfo-r14 SEQUENCE { plmn-IdentityList-r14 PLMN-IdentityList-MBMS-r14, trackingAreaCode-r14 TrackingAreaCode, cellIdentity-r14 CellIdentity }, freqBandIndicator-r14 FreqBandIndicator-r11, multiBandInfoList-r14 MultiBandInfoList-r11 OPTIONAL, -- Need OR schedulingInfoList-MBMS-r14 SchedulingInfoList-MBMS-r14, si-WindowLength-r14 ENUMERATED { ms1, ms2, ms5, ms10, ms15, ms20,ms40, ms80}, systemInfoValueTag-r14 INTEGER (0..31), nonMBSFN-SubframeConfig-r14 NonMBSFN-SubframeConfig-r14 OPTIONAL, --Need OR pdsch-ConfigCommon-r14 PDSCH-ConfigCommon, systemInformationBlockType13-r14 SystemInformationBlockType13-r9 OPTIONAL, --Need OR cellAccessRelatedInfoList-r14 SEQUENCE (SIZE (1..maxPLMN-1-r14)) OF CellAccessRelatedInfo-r14 OPTIONAL, -- Need OR nonCriticalExtension SEQUENCE {} OPTIONAL } PLMN-IdentityList-MBMS-r14 ::= SEQUENCE (SIZE (1..maxPLMN-r11)) OF PLMN-Identity SchedulingInfoList-MBMS-r14 ::= SEQUENCE (SIZE (1..maxSI-Message)) OF SchedulingInfo-MBMS-r14 SchedulingInfo-MBMS-r14 ::= SEQUENCE { si-Periodicity-r14 ENUMERATED { rf16, rf32, rf64, rf128, rf256, rf512}, sib-MappingInfo-r14 SIB-MappingInfo-MBMS-r14 } SIB-MappingInfo-MBMS-r14 ::= SEQUENCE (SIZE (0..maxSIB-1)) OF SIB-Type-MBMS-r14 SIB-Type-MBMS-r14 ::= ENUMERATED { sibType10, sibType11, sibType12-v920, sibType13-v920, sibType15-v1130, sibType16-v1130, ...} NonMBSFN-SubframeConfig-r14 ::= SEQUENCE { radioFrameAllocationPeriod-r14 ENUMERATED {rf4, rf8, rf16, rf32, rf64, rf128, rf512}, radioFrameAllocationOffset-r14 INTEGER (0..7), subframeAllocation-r14 BIT STRING (SIZE(9)) } UEAssistanceInformation-r11 ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { ueAssistanceInformation-r11 UEAssistanceInformation-r11-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UEAssistanceInformation-r11-IEs ::= SEQUENCE { powerPrefIndication-r11 ENUMERATED {normal, lowPowerConsumption} OPTIONAL, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension UEAssistanceInformation-v1430-IEs OPTIONAL } UEAssistanceInformation-v1430-IEs ::= SEQUENCE { bw-Preference-r14 BW-Preference-r14 OPTIONAL, sps-AssistanceInformation-r14 SEQUENCE { trafficPatternInfoListSL-r14 TrafficPatternInfoList-r14 OPTIONAL, trafficPatternInfoListUL-r14 TrafficPatternInfoList-r14 OPTIONAL } OPTIONAL, rlm-Report-r14 SEQUENCE { rlm-Event-r14 ENUMERATED {earlyOutOfSync, earlyInSync}, excessRep-MPDCCH-r14 ENUMERATED {excessRep1, excessRep2} OPTIONAL } OPTIONAL, delayBudgetReport-r14 DelayBudgetReport-r14 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } BW-Preference-r14 ::= SEQUENCE { dl-Preference-r14 ENUMERATED {mhz1dot4, mhz5, mhz20 } OPTIONAL, ul-Preference-r14 ENUMERATED {mhz1dot4, mhz5} OPTIONAL } TrafficPatternInfoList-r14 ::= SEQUENCE (SIZE (1..maxTrafficPattern-r14)) OF TrafficPatternInfo-r14 TrafficPatternInfo-r14 ::= SEQUENCE { trafficPeriodicity-r14 ENUMERATED { sf20, sf50, sf100, sf200, sf300, sf400, sf500, sf600, sf700, sf800, sf900, sf1000}, timingOffset-r14 INTEGER (0..10239), priorityInfoSL-r14 SL-Priority-r13 OPTIONAL, logicalChannelIdentityUL-r14 INTEGER (3..10) OPTIONAL, messageSize-r14 BIT STRING (SIZE (6)) } DelayBudgetReport-r14::= CHOICE { type1 ENUMERATED { msMinus1280, msMinus640, msMinus320, msMinus160, msMinus80, msMinus60, msMinus40, msMinus20, ms0, ms20, ms40, ms60, ms80, ms160, ms320, ms640, ms1280}, type2 ENUMERATED { msMinus192, msMinus168,msMinus144, msMinus120, msMinus96, msMinus72, msMinus48, msMinus24, ms0, ms24, ms48, ms72, ms96, ms120, ms144, ms168, ms192} } UECapabilityEnquiry ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { ueCapabilityEnquiry-r8 UECapabilityEnquiry-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UECapabilityEnquiry-r8-IEs ::= SEQUENCE { ue-CapabilityRequest UE-CapabilityRequest, nonCriticalExtension UECapabilityEnquiry-v8a0-IEs OPTIONAL } UECapabilityEnquiry-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension UECapabilityEnquiry-v1180-IEs OPTIONAL } UECapabilityEnquiry-v1180-IEs ::= SEQUENCE { requestedFrequencyBands-r11 SEQUENCE (SIZE (1..16)) OF FreqBandIndicator-r11 OPTIONAL, nonCriticalExtension UECapabilityEnquiry-v1310-IEs OPTIONAL } UECapabilityEnquiry-v1310-IEs ::= SEQUENCE { requestReducedFormat-r13 ENUMERATED {true} OPTIONAL, -- Need ON requestSkipFallbackComb-r13 ENUMERATED {true} OPTIONAL, -- Need ON requestedMaxCCsDL-r13 INTEGER (2..32) OPTIONAL, -- Need ON requestedMaxCCsUL-r13 INTEGER (2..32) OPTIONAL, -- Need ON requestReducedIntNonContComb-r13 ENUMERATED {true} OPTIONAL, -- Need ON nonCriticalExtension UECapabilityEnquiry-v1430-IEs OPTIONAL } UECapabilityEnquiry-v1430-IEs ::= SEQUENCE { requestDiffFallbackCombList-r14 BandCombinationList-r14 OPTIONAL, -- Need ON nonCriticalExtension SEQUENCE {} OPTIONAL } UE-CapabilityRequest ::= SEQUENCE (SIZE (1..maxRAT-Capabilities)) OF RAT-Type UECapabilityInformation ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ ueCapabilityInformation-r8 UECapabilityInformation-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UECapabilityInformation-r8-IEs ::= SEQUENCE { ue-CapabilityRAT-ContainerList UE-CapabilityRAT-ContainerList, nonCriticalExtension UECapabilityInformation-v8a0-IEs OPTIONAL } UECapabilityInformation-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension UECapabilityInformation-v1250-IEs OPTIONAL } UECapabilityInformation-v1250-IEs ::= SEQUENCE { ue-RadioPagingInfo-r12 UE-RadioPagingInfo-r12 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } UEInformationRequest-r9 ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { ueInformationRequest-r9 UEInformationRequest-r9-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UEInformationRequest-r9-IEs ::= SEQUENCE { rach-ReportReq-r9 BOOLEAN, rlf-ReportReq-r9 BOOLEAN, nonCriticalExtension UEInformationRequest-v930-IEs OPTIONAL } UEInformationRequest-v930-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension UEInformationRequest-v1020-IEs OPTIONAL } UEInformationRequest-v1020-IEs ::= SEQUENCE { logMeasReportReq-r10 ENUMERATED {true} OPTIONAL, -- Need ON nonCriticalExtension UEInformationRequest-v1130-IEs OPTIONAL } UEInformationRequest-v1130-IEs ::= SEQUENCE { connEstFailReportReq-r11 ENUMERATED {true} OPTIONAL, -- Need ON nonCriticalExtension UEInformationRequest-v1250-IEs OPTIONAL } UEInformationRequest-v1250-IEs ::= SEQUENCE { mobilityHistoryReportReq-r12 ENUMERATED {true} OPTIONAL, -- Need ON nonCriticalExtension SEQUENCE {} OPTIONAL } UEInformationResponse-r9 ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { ueInformationResponse-r9 UEInformationResponse-r9-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UEInformationResponse-r9-IEs ::= SEQUENCE { rach-Report-r9 SEQUENCE { numberOfPreamblesSent-r9 NumberOfPreamblesSent-r11, contentionDetected-r9 BOOLEAN } OPTIONAL, rlf-Report-r9 RLF-Report-r9 OPTIONAL, nonCriticalExtension UEInformationResponse-v930-IEs OPTIONAL } -- Late non critical extensions UEInformationResponse-v9e0-IEs ::= SEQUENCE { rlf-Report-v9e0 RLF-Report-v9e0 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } -- Regular non critical extensions UEInformationResponse-v930-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING (CONTAINING UEInformationResponse-v9e0-IEs) OPTIONAL, nonCriticalExtension UEInformationResponse-v1020-IEs OPTIONAL } UEInformationResponse-v1020-IEs ::= SEQUENCE { logMeasReport-r10 LogMeasReport-r10 OPTIONAL, nonCriticalExtension UEInformationResponse-v1130-IEs OPTIONAL } UEInformationResponse-v1130-IEs ::= SEQUENCE { connEstFailReport-r11 ConnEstFailReport-r11 OPTIONAL, nonCriticalExtension UEInformationResponse-v1250-IEs OPTIONAL } UEInformationResponse-v1250-IEs ::= SEQUENCE { mobilityHistoryReport-r12 MobilityHistoryReport-r12 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RLF-Report-r9 ::= SEQUENCE { measResultLastServCell-r9 SEQUENCE { rsrpResult-r9 RSRP-Range, rsrqResult-r9 RSRQ-Range OPTIONAL }, measResultNeighCells-r9 SEQUENCE { measResultListEUTRA-r9 MeasResultList2EUTRA-r9 OPTIONAL, measResultListUTRA-r9 MeasResultList2UTRA-r9 OPTIONAL, measResultListGERAN-r9 MeasResultListGERAN OPTIONAL, measResultsCDMA2000-r9 MeasResultList2CDMA2000-r9 OPTIONAL } OPTIONAL, ..., [[ locationInfo-r10 LocationInfo-r10 OPTIONAL, failedPCellId-r10 CHOICE { cellGlobalId-r10 CellGlobalIdEUTRA, pci-arfcn-r10 SEQUENCE { physCellId-r10 PhysCellId, carrierFreq-r10 ARFCN-ValueEUTRA } } OPTIONAL, reestablishmentCellId-r10 CellGlobalIdEUTRA OPTIONAL, timeConnFailure-r10 INTEGER (0..1023) OPTIONAL, connectionFailureType-r10 ENUMERATED {rlf, hof} OPTIONAL, previousPCellId-r10 CellGlobalIdEUTRA OPTIONAL ]], [[ failedPCellId-v1090 SEQUENCE { carrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 } OPTIONAL ]], [[ basicFields-r11 SEQUENCE { c-RNTI-r11 C-RNTI, rlf-Cause-r11 ENUMERATED { t310-Expiry, randomAccessProblem, rlc-MaxNumRetx, t312-Expiry-r12}, timeSinceFailure-r11 TimeSinceFailure-r11 } OPTIONAL, previousUTRA-CellId-r11 SEQUENCE { carrierFreq-r11 ARFCN-ValueUTRA, physCellId-r11 CHOICE { fdd-r11 PhysCellIdUTRA-FDD, tdd-r11 PhysCellIdUTRA-TDD }, cellGlobalId-r11 CellGlobalIdUTRA OPTIONAL } OPTIONAL, selectedUTRA-CellId-r11 SEQUENCE { carrierFreq-r11 ARFCN-ValueUTRA, physCellId-r11 CHOICE { fdd-r11 PhysCellIdUTRA-FDD, tdd-r11 PhysCellIdUTRA-TDD } } OPTIONAL ]], [[ failedPCellId-v1250 SEQUENCE { tac-FailedPCell-r12 TrackingAreaCode } OPTIONAL, measResultLastServCell-v1250 RSRQ-Range-v1250 OPTIONAL, lastServCellRSRQ-Type-r12 RSRQ-Type-r12 OPTIONAL, measResultListEUTRA-v1250 MeasResultList2EUTRA-v1250 OPTIONAL ]], [[ drb-EstablishedWithQCI-1-r13 ENUMERATED {qci1} OPTIONAL ]], [[ measResultLastServCell-v1360 RSRP-Range-v1360 OPTIONAL ]] } RLF-Report-v9e0 ::= SEQUENCE { measResultListEUTRA-v9e0 MeasResultList2EUTRA-v9e0 } MeasResultList2EUTRA-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-r9 MeasResultList2EUTRA-v9e0 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-v9e0 MeasResultList2EUTRA-v1250 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2EUTRA-v1250 MeasResult2EUTRA-r9 ::= SEQUENCE { carrierFreq-r9 ARFCN-ValueEUTRA, measResultList-r9 MeasResultListEUTRA } MeasResult2EUTRA-v9e0 ::= SEQUENCE { carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL } MeasResult2EUTRA-v1250 ::= SEQUENCE { rsrq-Type-r12 RSRQ-Type-r12 OPTIONAL } MeasResultList2UTRA-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2UTRA-r9 MeasResult2UTRA-r9 ::= SEQUENCE { carrierFreq-r9 ARFCN-ValueUTRA, measResultList-r9 MeasResultListUTRA } MeasResultList2CDMA2000-r9 ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasResult2CDMA2000-r9 MeasResult2CDMA2000-r9 ::= SEQUENCE { carrierFreq-r9 CarrierFreqCDMA2000, measResultList-r9 MeasResultsCDMA2000 } LogMeasReport-r10 ::= SEQUENCE { absoluteTimeStamp-r10 AbsoluteTimeInfo-r10, traceReference-r10 TraceReference-r10, traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), tce-Id-r10 OCTET STRING (SIZE (1)), logMeasInfoList-r10 LogMeasInfoList-r10, logMeasAvailable-r10 ENUMERATED {true} OPTIONAL, ... } LogMeasInfoList-r10 ::= SEQUENCE (SIZE (1..maxLogMeasReport-r10)) OF LogMeasInfo-r10 LogMeasInfo-r10 ::= SEQUENCE { locationInfo-r10 LocationInfo-r10 OPTIONAL, relativeTimeStamp-r10 INTEGER (0..7200), servCellIdentity-r10 CellGlobalIdEUTRA, measResultServCell-r10 SEQUENCE { rsrpResult-r10 RSRP-Range, rsrqResult-r10 RSRQ-Range }, measResultNeighCells-r10 SEQUENCE { measResultListEUTRA-r10 MeasResultList2EUTRA-r9 OPTIONAL, measResultListUTRA-r10 MeasResultList2UTRA-r9 OPTIONAL, measResultListGERAN-r10 MeasResultList2GERAN-r10 OPTIONAL, measResultListCDMA2000-r10 MeasResultList2CDMA2000-r9 OPTIONAL } OPTIONAL, ..., [[ measResultListEUTRA-v1090 MeasResultList2EUTRA-v9e0 OPTIONAL ]], [[ measResultListMBSFN-r12 MeasResultListMBSFN-r12 OPTIONAL, measResultServCell-v1250 RSRQ-Range-v1250 OPTIONAL, servCellRSRQ-Type-r12 RSRQ-Type-r12 OPTIONAL, measResultListEUTRA-v1250 MeasResultList2EUTRA-v1250 OPTIONAL ]], [[ inDeviceCoexDetected-r13 ENUMERATED {true} OPTIONAL ]], [[ measResultServCell-v1360 RSRP-Range-v1360 OPTIONAL ]] } MeasResultListMBSFN-r12 ::= SEQUENCE (SIZE (1..maxMBSFN-Area)) OF MeasResultMBSFN-r12 MeasResultMBSFN-r12 ::= SEQUENCE { mbsfn-Area-r12 SEQUENCE { mbsfn-AreaId-r12 MBSFN-AreaId-r12, carrierFreq-r12 ARFCN-ValueEUTRA-r9 }, rsrpResultMBSFN-r12 RSRP-Range, rsrqResultMBSFN-r12 MBSFN-RSRQ-Range-r12, signallingBLER-Result-r12 BLER-Result-r12 OPTIONAL, dataBLER-MCH-ResultList-r12 DataBLER-MCH-ResultList-r12 OPTIONAL, ... } DataBLER-MCH-ResultList-r12 ::= SEQUENCE (SIZE (1.. maxPMCH-PerMBSFN)) OF DataBLER-MCH-Result-r12 DataBLER-MCH-Result-r12 ::= SEQUENCE { mch-Index-r12 INTEGER (1..maxPMCH-PerMBSFN), dataBLER-Result-r12 BLER-Result-r12 } BLER-Result-r12 ::= SEQUENCE { bler-r12 BLER-Range-r12, blocksReceived-r12 SEQUENCE { n-r12 BIT STRING (SIZE (3)), m-r12 BIT STRING (SIZE (8)) } } BLER-Range-r12 ::= INTEGER(0..31) MeasResultList2GERAN-r10 ::= SEQUENCE (SIZE (1..maxCellListGERAN)) OF MeasResultListGERAN ConnEstFailReport-r11 ::= SEQUENCE { failedCellId-r11 CellGlobalIdEUTRA, locationInfo-r11 LocationInfo-r10 OPTIONAL, measResultFailedCell-r11 SEQUENCE { rsrpResult-r11 RSRP-Range, rsrqResult-r11 RSRQ-Range OPTIONAL }, measResultNeighCells-r11 SEQUENCE { measResultListEUTRA-r11 MeasResultList2EUTRA-r9 OPTIONAL, measResultListUTRA-r11 MeasResultList2UTRA-r9 OPTIONAL, measResultListGERAN-r11 MeasResultListGERAN OPTIONAL, measResultsCDMA2000-r11 MeasResultList2CDMA2000-r9 OPTIONAL } OPTIONAL, numberOfPreamblesSent-r11 NumberOfPreamblesSent-r11, contentionDetected-r11 BOOLEAN, maxTxPowerReached-r11 BOOLEAN, timeSinceFailure-r11 TimeSinceFailure-r11, measResultListEUTRA-v1130 MeasResultList2EUTRA-v9e0 OPTIONAL, ..., [[ measResultFailedCell-v1250 RSRQ-Range-v1250 OPTIONAL, failedCellRSRQ-Type-r12 RSRQ-Type-r12 OPTIONAL, measResultListEUTRA-v1250 MeasResultList2EUTRA-v1250 OPTIONAL ]], [[ measResultFailedCell-v1360 RSRP-Range-v1360 OPTIONAL ]] } NumberOfPreamblesSent-r11::= INTEGER (1..200) TimeSinceFailure-r11 ::= INTEGER (0..172800) MobilityHistoryReport-r12 ::= VisitedCellInfoList-r12 ULHandoverPreparationTransfer ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { ulHandoverPreparationTransfer-r8 ULHandoverPreparationTransfer-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } ULHandoverPreparationTransfer-r8-IEs ::= SEQUENCE { cdma2000-Type CDMA2000-Type, meid BIT STRING (SIZE (56)) OPTIONAL, dedicatedInfo DedicatedInfoCDMA2000, nonCriticalExtension ULHandoverPreparationTransfer-v8a0-IEs OPTIONAL } ULHandoverPreparationTransfer-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } ULInformationTransfer ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { ulInformationTransfer-r8 ULInformationTransfer-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } ULInformationTransfer-r8-IEs ::= SEQUENCE { dedicatedInfoType CHOICE { dedicatedInfoNAS DedicatedInfoNAS, dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000, dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000 }, nonCriticalExtension ULInformationTransfer-v8a0-IEs OPTIONAL } ULInformationTransfer-v8a0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } WLANConnectionStatusReport-r13 ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { wlanConnectionStatusReport-r13 WLANConnectionStatusReport-r13-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } WLANConnectionStatusReport-r13-IEs ::= SEQUENCE { wlan-Status-r13 WLAN-Status-r13, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension WLANConnectionStatusReport-v1430-IEs OPTIONAL } WLANConnectionStatusReport-v1430-IEs ::= SEQUENCE { wlan-Status-v1430 WLAN-Status-v1430, nonCriticalExtension SEQUENCE {} OPTIONAL } SystemInformationBlockType2 ::= SEQUENCE { ac-BarringInfo SEQUENCE { ac-BarringForEmergency BOOLEAN, ac-BarringForMO-Signalling AC-BarringConfig OPTIONAL, -- Need OP ac-BarringForMO-Data AC-BarringConfig OPTIONAL -- Need OP } OPTIONAL, -- Need OP radioResourceConfigCommon RadioResourceConfigCommonSIB, ue-TimersAndConstants UE-TimersAndConstants, freqInfo SEQUENCE { ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL, -- Need OP ul-Bandwidth ENUMERATED {n6, n15, n25, n50, n75, n100} OPTIONAL, -- Need OP additionalSpectrumEmission AdditionalSpectrumEmission }, mbsfn-SubframeConfigList MBSFN-SubframeConfigList OPTIONAL, -- Need OR timeAlignmentTimerCommon TimeAlignmentTimer, ..., lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType2-v8h0-IEs) OPTIONAL, [[ ssac-BarringForMMTEL-Voice-r9 AC-BarringConfig OPTIONAL, -- Need OP ssac-BarringForMMTEL-Video-r9 AC-BarringConfig OPTIONAL -- Need OP ]], [[ ac-BarringForCSFB-r10 AC-BarringConfig OPTIONAL -- Need OP ]], [[ ac-BarringSkipForMMTELVoice-r12 ENUMERATED {true} OPTIONAL, -- Need OP ac-BarringSkipForMMTELVideo-r12 ENUMERATED {true} OPTIONAL, -- Need OP ac-BarringSkipForSMS-r12 ENUMERATED {true} OPTIONAL, -- Need OP ac-BarringPerPLMN-List-r12 AC-BarringPerPLMN-List-r12 OPTIONAL -- Need OP ]], [[ voiceServiceCauseIndication-r12 ENUMERATED {true} OPTIONAL -- Need OP ]], [[ acdc-BarringForCommon-r13 ACDC-BarringForCommon-r13 OPTIONAL, -- Need OP acdc-BarringPerPLMN-List-r13 ACDC-BarringPerPLMN-List-r13 OPTIONAL -- Need OP ]], [[ udt-RestrictingForCommon-r13 UDT-Restricting-r13 OPTIONAL, -- Need OR udt-RestrictingPerPLMN-List-r13 UDT-RestrictingPerPLMN-List-r13 OPTIONAL, -- Need OR cIoT-EPS-OptimisationInfo-r13 CIOT-EPS-OptimisationInfo-r13 OPTIONAL, -- Need OP useFullResumeID-r13 ENUMERATED {true} OPTIONAL -- Need OP ]], [[ unicastFreqHoppingInd-r13 ENUMERATED {true} OPTIONAL -- Need OP ]], [[ mbsfn-SubframeConfigList-v1430 MBSFN-SubframeConfigList-v1430 OPTIONAL, -- Need OP videoServiceCauseIndication-r14 ENUMERATED {true} OPTIONAL -- Need OP ]] } SystemInformationBlockType2-v8h0-IEs ::= SEQUENCE { multiBandInfoList SEQUENCE (SIZE (1..maxMultiBands)) OF AdditionalSpectrumEmission OPTIONAL, -- Need OR nonCriticalExtension SystemInformationBlockType2-v9e0-IEs OPTIONAL } SystemInformationBlockType2-v9e0-IEs ::= SEQUENCE { ul-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL, -- Cond ul-FreqMax nonCriticalExtension SystemInformationBlockType2-v9i0-IEs OPTIONAL } SystemInformationBlockType2-v9i0-IEs ::= SEQUENCE { -- Following field is only for late non-critical extensions for REL-9 lateNonCriticalExtension OCTET STRING OPTIONAL, -- Following field is only for late non-critical extensions from REL-10 nonCriticalExtension SystemInformationBlockType2-v10l0-IEs OPTIONAL } SystemInformationBlockType2-v10l0-IEs ::= SEQUENCE { freqInfo-v10l0 SEQUENCE { additionalSpectrumEmission-v10l0 AdditionalSpectrumEmission-v10l0 }, multiBandInfoList-v10l0 SEQUENCE (SIZE (1..maxMultiBands)) OF AdditionalSpectrumEmission-v10l0, nonCriticalExtension SEQUENCE {} OPTIONAL } AC-BarringConfig ::= SEQUENCE { ac-BarringFactor ENUMERATED { p00, p05, p10, p15, p20, p25, p30, p40, p50, p60, p70, p75, p80, p85, p90, p95}, ac-BarringTime ENUMERATED {s4, s8, s16, s32, s64, s128, s256, s512}, ac-BarringForSpecialAC BIT STRING (SIZE(5)) } MBSFN-SubframeConfigList ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig MBSFN-SubframeConfigList-v1430 ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig-v1430 AC-BarringPerPLMN-List-r12 ::= SEQUENCE (SIZE (1.. maxPLMN-r11)) OF AC-BarringPerPLMN-r12 AC-BarringPerPLMN-r12 ::= SEQUENCE { plmn-IdentityIndex-r12 INTEGER (1..maxPLMN-r11), ac-BarringInfo-r12 SEQUENCE { ac-BarringForEmergency-r12 BOOLEAN, ac-BarringForMO-Signalling-r12 AC-BarringConfig OPTIONAL, -- Need OP ac-BarringForMO-Data-r12 AC-BarringConfig OPTIONAL -- Need OP } OPTIONAL, -- Need OP ac-BarringSkipForMMTELVoice-r12 ENUMERATED {true} OPTIONAL, -- Need OP ac-BarringSkipForMMTELVideo-r12 ENUMERATED {true} OPTIONAL, -- Need OP ac-BarringSkipForSMS-r12 ENUMERATED {true} OPTIONAL, -- Need OP ac-BarringForCSFB-r12 AC-BarringConfig OPTIONAL, -- Need OP ssac-BarringForMMTEL-Voice-r12 AC-BarringConfig OPTIONAL, -- Need OP ssac-BarringForMMTEL-Video-r12 AC-BarringConfig OPTIONAL -- Need OP } ACDC-BarringForCommon-r13 ::= SEQUENCE { acdc-HPLMNonly-r13 BOOLEAN, barringPerACDC-CategoryList-r13 BarringPerACDC-CategoryList-r13 } ACDC-BarringPerPLMN-List-r13 ::= SEQUENCE (SIZE (1.. maxPLMN-r11)) OF ACDC-BarringPerPLMN-r13 ACDC-BarringPerPLMN-r13 ::= SEQUENCE { plmn-IdentityIndex-r13 INTEGER (1..maxPLMN-r11), acdc-OnlyForHPLMN-r13 BOOLEAN, barringPerACDC-CategoryList-r13 BarringPerACDC-CategoryList-r13 } BarringPerACDC-CategoryList-r13 ::= SEQUENCE (SIZE (1..maxACDC-Cat-r13)) OF BarringPerACDC-Category-r13 BarringPerACDC-Category-r13 ::= SEQUENCE { acdc-Category-r13 INTEGER (1..maxACDC-Cat-r13), acdc-BarringConfig-r13 SEQUENCE { ac-BarringFactor-r13 ENUMERATED { p00, p05, p10, p15, p20, p25, p30, p40, p50, p60, p70, p75, p80, p85, p90, p95}, ac-BarringTime-r13 ENUMERATED {s4, s8, s16, s32, s64, s128, s256, s512} } OPTIONAL -- Need OP } UDT-Restricting-r13 ::= SEQUENCE { udt-Restricting-r13 ENUMERATED {true} OPTIONAL, --Need OR udt-RestrictingTime-r13 ENUMERATED {s4, s8, s16, s32, s64, s128, s256, s512} OPTIONAL --Need OR } UDT-RestrictingPerPLMN-List-r13 ::= SEQUENCE (SIZE (1..maxPLMN-r11)) OF UDT-RestrictingPerPLMN-r13 UDT-RestrictingPerPLMN-r13 ::= SEQUENCE { plmn-IdentityIndex-r13 INTEGER (1..maxPLMN-r11), udt-Restricting-r13 UDT-Restricting-r13 OPTIONAL --Need OR } CIOT-EPS-OptimisationInfo-r13 ::= SEQUENCE (SIZE (1.. maxPLMN-r11)) OF CIOT-OptimisationPLMN-r13 CIOT-OptimisationPLMN-r13::= SEQUENCE { up-CIoT-EPS-Optimisation-r13 ENUMERATED {true} OPTIONAL, -- Need OP cp-CIoT-EPS-Optimisation-r13 ENUMERATED {true} OPTIONAL, -- Need OP attachWithoutPDN-Connectivity-r13 ENUMERATED {true} OPTIONAL -- Need OP } SystemInformationBlockType3 ::= SEQUENCE { cellReselectionInfoCommon SEQUENCE { q-Hyst ENUMERATED { dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, dB12, dB14, dB16, dB18, dB20, dB22, dB24}, speedStateReselectionPars SEQUENCE { mobilityStateParameters MobilityStateParameters, q-HystSF SEQUENCE { sf-Medium ENUMERATED { dB-6, dB-4, dB-2, dB0}, sf-High ENUMERATED { dB-6, dB-4, dB-2, dB0} } } OPTIONAL -- Need OP }, cellReselectionServingFreqInfo SEQUENCE { s-NonIntraSearch ReselectionThreshold OPTIONAL, -- Need OP threshServingLow ReselectionThreshold, cellReselectionPriority CellReselectionPriority }, intraFreqCellReselectionInfo SEQUENCE { q-RxLevMin Q-RxLevMin, p-Max P-Max OPTIONAL, -- Need OP s-IntraSearch ReselectionThreshold OPTIONAL, -- Need OP allowedMeasBandwidth AllowedMeasBandwidth OPTIONAL, -- Need OP presenceAntennaPort1 PresenceAntennaPort1, neighCellConfig NeighCellConfig, t-ReselectionEUTRA T-Reselection, t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL -- Need OP }, ..., lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType3-v10j0-IEs) OPTIONAL, [[ s-IntraSearch-v920 SEQUENCE { s-IntraSearchP-r9 ReselectionThreshold, s-IntraSearchQ-r9 ReselectionThresholdQ-r9 } OPTIONAL, -- Need OP s-NonIntraSearch-v920 SEQUENCE { s-NonIntraSearchP-r9 ReselectionThreshold, s-NonIntraSearchQ-r9 ReselectionThresholdQ-r9 } OPTIONAL, -- Need OP q-QualMin-r9 Q-QualMin-r9 OPTIONAL, -- Need OP threshServingLowQ-r9 ReselectionThresholdQ-r9 OPTIONAL -- Need OP ]], [[ q-QualMinWB-r11 Q-QualMin-r9 OPTIONAL -- Cond WB-RSRQ ]], [[ q-QualMinRSRQ-OnAllSymbols-r12 Q-QualMin-r9 OPTIONAL -- Cond RSRQ ]], [[ cellReselectionServingFreqInfo-v1310 CellReselectionServingFreqInfo-v1310 OPTIONAL, -- Need OP redistributionServingInfo-r13 RedistributionServingInfo-r13 OPTIONAL, --Need OR cellSelectionInfoCE-r13 CellSelectionInfoCE-r13 OPTIONAL, -- Need OP t-ReselectionEUTRA-CE-r13 T-ReselectionEUTRA-CE-r13 OPTIONAL -- Need OP ]], [[ cellSelectionInfoCE1-r13 CellSelectionInfoCE1-r13 OPTIONAL -- Need OP ]], [[ cellSelectionInfoCE1-v1360 CellSelectionInfoCE1-v1360 OPTIONAL -- Cond QrxlevminCE1 ]] } RedistributionServingInfo-r13 ::= SEQUENCE { redistributionFactorServing-r13 INTEGER(0..10), redistributionFactorCell-r13 ENUMERATED{true} OPTIONAL, --Need OP t360-r13 ENUMERATED {min4, min8, min16, min32,infinity, spare3,spare2,spare1}, redistrOnPagingOnly-r13 ENUMERATED {true} OPTIONAL --Need OP } CellReselectionServingFreqInfo-v1310 ::= SEQUENCE { cellReselectionSubPriority-r13 CellReselectionSubPriority-r13 } -- Late non critical extensions SystemInformationBlockType3-v10j0-IEs ::= SEQUENCE { freqBandInfo-r10 NS-PmaxList-r10 OPTIONAL, -- Need OR multiBandInfoList-v10j0 MultiBandInfoList-v10j0 OPTIONAL, -- Need OR nonCriticalExtension SystemInformationBlockType3-v10l0-IEs OPTIONAL } SystemInformationBlockType3-v10l0-IEs ::= SEQUENCE { freqBandInfo-v10l0 NS-PmaxList-v10l0 OPTIONAL, -- Need OR multiBandInfoList-v10l0 MultiBandInfoList-v10l0 OPTIONAL, -- Need OR nonCriticalExtension SEQUENCE {} OPTIONAL } SystemInformationBlockType4 ::= SEQUENCE { intraFreqNeighCellList IntraFreqNeighCellList OPTIONAL, -- Need OR intraFreqBlackCellList IntraFreqBlackCellList OPTIONAL, -- Need OR csg-PhysCellIdRange PhysCellIdRange OPTIONAL, -- Cond CSG ..., lateNonCriticalExtension OCTET STRING OPTIONAL } IntraFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellIntra)) OF IntraFreqNeighCellInfo IntraFreqNeighCellInfo ::= SEQUENCE { physCellId PhysCellId, q-OffsetCell Q-OffsetRange, ... } IntraFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange SystemInformationBlockType5 ::= SEQUENCE { interFreqCarrierFreqList InterFreqCarrierFreqList, ..., lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType5-v8h0-IEs) OPTIONAL, [[ interFreqCarrierFreqList-v1250 InterFreqCarrierFreqList-v1250 OPTIONAL, -- Need OR interFreqCarrierFreqListExt-r12 InterFreqCarrierFreqListExt-r12 OPTIONAL -- Need OR ]], [[ interFreqCarrierFreqListExt-v1280 InterFreqCarrierFreqListExt-v1280 OPTIONAL -- Need OR ]], [[ interFreqCarrierFreqList-v1310 InterFreqCarrierFreqList-v1310 OPTIONAL, -- Need OR interFreqCarrierFreqListExt-v1310 InterFreqCarrierFreqListExt-v1310 OPTIONAL -- Need OR ]], [[ interFreqCarrierFreqList-v1350 InterFreqCarrierFreqList-v1350 OPTIONAL, -- Need OR interFreqCarrierFreqListExt-v1350 InterFreqCarrierFreqListExt-v1350 OPTIONAL -- Need OR ]], [[ interFreqCarrierFreqListExt-v1360 InterFreqCarrierFreqListExt-v1360 OPTIONAL -- Need OR ]], [[ scptm-FreqOffset-r14 INTEGER (1..8) OPTIONAL -- Need OP ]] } SystemInformationBlockType5-v8h0-IEs ::= SEQUENCE { interFreqCarrierFreqList-v8h0 SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v8h0 OPTIONAL, -- Need OP nonCriticalExtension SystemInformationBlockType5-v9e0-IEs OPTIONAL } SystemInformationBlockType5-v9e0-IEs ::= SEQUENCE { interFreqCarrierFreqList-v9e0 SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v9e0 OPTIONAL, -- Need OR nonCriticalExtension SystemInformationBlockType5-v10j0-IEs OPTIONAL } SystemInformationBlockType5-v10j0-IEs ::= SEQUENCE { interFreqCarrierFreqList-v10j0 SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v10j0 OPTIONAL, -- Need OR nonCriticalExtension SystemInformationBlockType5-v10l0-IEs OPTIONAL } SystemInformationBlockType5-v10l0-IEs ::= SEQUENCE { interFreqCarrierFreqList-v10l0 SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v10l0 OPTIONAL, -- Need OR nonCriticalExtension SEQUENCE {} OPTIONAL } InterFreqCarrierFreqList ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo InterFreqCarrierFreqList-v1250 ::= SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1250 InterFreqCarrierFreqList-v1310 ::= SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1310 InterFreqCarrierFreqList-v1350 ::= SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1350 InterFreqCarrierFreqListExt-r12 ::= SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-r12 InterFreqCarrierFreqListExt-v1280 ::= SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v10j0 InterFreqCarrierFreqListExt-v1310 ::= SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1310 InterFreqCarrierFreqListExt-v1350 ::= SEQUENCE (SIZE (1.. maxFreq)) OF InterFreqCarrierFreqInfo-v1350 InterFreqCarrierFreqListExt-v1360 ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-v1360 InterFreqCarrierFreqInfo ::= SEQUENCE { dl-CarrierFreq ARFCN-ValueEUTRA, q-RxLevMin Q-RxLevMin, p-Max P-Max OPTIONAL, -- Need OP t-ReselectionEUTRA T-Reselection, t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP threshX-High ReselectionThreshold, threshX-Low ReselectionThreshold, allowedMeasBandwidth AllowedMeasBandwidth, presenceAntennaPort1 PresenceAntennaPort1, cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP neighCellConfig NeighCellConfig, q-OffsetFreq Q-OffsetRange DEFAULT dB0, interFreqNeighCellList InterFreqNeighCellList OPTIONAL, -- Need OR interFreqBlackCellList InterFreqBlackCellList OPTIONAL, -- Need OR ..., [[ q-QualMin-r9 Q-QualMin-r9 OPTIONAL, -- Need OP threshX-Q-r9 SEQUENCE { threshX-HighQ-r9 ReselectionThresholdQ-r9, threshX-LowQ-r9 ReselectionThresholdQ-r9 } OPTIONAL -- Cond RSRQ ]], [[ q-QualMinWB-r11 Q-QualMin-r9 OPTIONAL -- Cond WB-RSRQ ]] } InterFreqCarrierFreqInfo-v8h0 ::= SEQUENCE { multiBandInfoList MultiBandInfoList OPTIONAL -- Need OR } InterFreqCarrierFreqInfo-v9e0 ::= SEQUENCE { dl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 OPTIONAL, -- Cond dl-FreqMax multiBandInfoList-v9e0 MultiBandInfoList-v9e0 OPTIONAL -- Need OR } InterFreqCarrierFreqInfo-v10j0 ::= SEQUENCE { freqBandInfo-r10 NS-PmaxList-r10 OPTIONAL, -- Need OR multiBandInfoList-v10j0 MultiBandInfoList-v10j0 OPTIONAL -- Need OR } InterFreqCarrierFreqInfo-v10l0 ::= SEQUENCE { freqBandInfo-v10l0 NS-PmaxList-v10l0 OPTIONAL, -- Need OR multiBandInfoList-v10l0 MultiBandInfoList-v10l0 OPTIONAL -- Need OR } InterFreqCarrierFreqInfo-v1250 ::= SEQUENCE { reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL, -- Need OP q-QualMinRSRQ-OnAllSymbols-r12 Q-QualMin-r9 OPTIONAL -- Cond RSRQ2 } InterFreqCarrierFreqInfo-r12 ::= SEQUENCE { dl-CarrierFreq-r12 ARFCN-ValueEUTRA-r9, q-RxLevMin-r12 Q-RxLevMin, p-Max-r12 P-Max OPTIONAL, -- Need OP t-ReselectionEUTRA-r12 T-Reselection, t-ReselectionEUTRA-SF-r12 SpeedStateScaleFactors OPTIONAL, -- Need OP threshX-High-r12 ReselectionThreshold, threshX-Low-r12 ReselectionThreshold, allowedMeasBandwidth-r12 AllowedMeasBandwidth, presenceAntennaPort1-r12 PresenceAntennaPort1, cellReselectionPriority-r12 CellReselectionPriority OPTIONAL, -- Need OP neighCellConfig-r12 NeighCellConfig, q-OffsetFreq-r12 Q-OffsetRange DEFAULT dB0, interFreqNeighCellList-r12 InterFreqNeighCellList OPTIONAL, -- Need OR interFreqBlackCellList-r12 InterFreqBlackCellList OPTIONAL, -- Need OR q-QualMin-r12 Q-QualMin-r9 OPTIONAL, -- Need OP threshX-Q-r12 SEQUENCE { threshX-HighQ-r12 ReselectionThresholdQ-r9, threshX-LowQ-r12 ReselectionThresholdQ-r9 } OPTIONAL, -- Cond RSRQ q-QualMinWB-r12 Q-QualMin-r9 OPTIONAL, -- Cond WB-RSRQ multiBandInfoList-r12 MultiBandInfoList-r11 OPTIONAL, -- Need OR reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL, -- Need OP q-QualMinRSRQ-OnAllSymbols-r12 Q-QualMin-r9 OPTIONAL, -- Cond RSRQ2 ... } InterFreqCarrierFreqInfo-v1310 ::= SEQUENCE { cellReselectionSubPriority-r13 CellReselectionSubPriority-r13 OPTIONAL, -- Need OP redistributionInterFreqInfo-r13 RedistributionInterFreqInfo-r13 OPTIONAL, --Need OP cellSelectionInfoCE-r13 CellSelectionInfoCE-r13 OPTIONAL, -- Need OP t-ReselectionEUTRA-CE-r13 T-ReselectionEUTRA-CE-r13 OPTIONAL -- Need OP } InterFreqCarrierFreqInfo-v1350 ::= SEQUENCE { cellSelectionInfoCE1-r13 CellSelectionInfoCE1-r13 OPTIONAL -- Need OP } InterFreqCarrierFreqInfo-v1360 ::= SEQUENCE { cellSelectionInfoCE1-v1360 CellSelectionInfoCE1-v1360 OPTIONAL -- Cond QrxlevminCE1 } InterFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellInter)) OF InterFreqNeighCellInfo InterFreqNeighCellInfo ::= SEQUENCE { physCellId PhysCellId, q-OffsetCell Q-OffsetRange } InterFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange RedistributionInterFreqInfo-r13 ::= SEQUENCE { redistributionFactorFreq-r13 RedistributionFactor-r13 OPTIONAL, --Need OP redistributionNeighCellList-r13 RedistributionNeighCellList-r13 OPTIONAL --Need OP } RedistributionNeighCellList-r13 ::= SEQUENCE (SIZE (1..maxCellInter)) OF RedistributionNeighCell-r13 RedistributionNeighCell-r13 ::= SEQUENCE { physCellId-r13 PhysCellId, redistributionFactorCell-r13 RedistributionFactor-r13 } RedistributionFactor-r13 ::= INTEGER(1..10) SystemInformationBlockType6 ::= SEQUENCE { carrierFreqListUTRA-FDD CarrierFreqListUTRA-FDD OPTIONAL, -- Need OR carrierFreqListUTRA-TDD CarrierFreqListUTRA-TDD OPTIONAL, -- Need OR t-ReselectionUTRA T-Reselection, t-ReselectionUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP ..., lateNonCriticalExtension OCTET STRING (CONTAINING SystemInformationBlockType6-v8h0-IEs) OPTIONAL, [[ carrierFreqListUTRA-FDD-v1250 SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqInfoUTRA-v1250 OPTIONAL, -- Cond UTRA-FDD carrierFreqListUTRA-TDD-v1250 SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF CarrierFreqInfoUTRA-v1250 OPTIONAL, -- Cond UTRA-TDD carrierFreqListUTRA-FDD-Ext-r12 CarrierFreqListUTRA-FDD-Ext-r12 OPTIONAL, -- Cond UTRA-FDD carrierFreqListUTRA-TDD-Ext-r12 CarrierFreqListUTRA-TDD-Ext-r12 OPTIONAL -- Cond UTRA-TDD ]] } SystemInformationBlockType6-v8h0-IEs ::= SEQUENCE { carrierFreqListUTRA-FDD-v8h0 SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqInfoUTRA-FDD-v8h0 OPTIONAL, -- Cond UTRA-FDD nonCriticalExtension SEQUENCE {} OPTIONAL } CarrierFreqInfoUTRA-v1250 ::= SEQUENCE { reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL -- Need OP } CarrierFreqListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqUTRA-FDD CarrierFreqUTRA-FDD ::= SEQUENCE { carrierFreq ARFCN-ValueUTRA, cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP threshX-High ReselectionThreshold, threshX-Low ReselectionThreshold, q-RxLevMin INTEGER (-60..-13), p-MaxUTRA INTEGER (-50..33), q-QualMin INTEGER (-24..0), ..., [[ threshX-Q-r9 SEQUENCE { threshX-HighQ-r9 ReselectionThresholdQ-r9, threshX-LowQ-r9 ReselectionThresholdQ-r9 } OPTIONAL -- Cond RSRQ ]] } CarrierFreqInfoUTRA-FDD-v8h0 ::= SEQUENCE { multiBandInfoList SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-UTRA-FDD OPTIONAL -- Need OR } CarrierFreqListUTRA-FDD-Ext-r12 ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqUTRA-FDD-Ext-r12 CarrierFreqUTRA-FDD-Ext-r12 ::= SEQUENCE { carrierFreq-r12 ARFCN-ValueUTRA, cellReselectionPriority-r12 CellReselectionPriority OPTIONAL, -- Need OP threshX-High-r12 ReselectionThreshold, threshX-Low-r12 ReselectionThreshold, q-RxLevMin-r12 INTEGER (-60..-13), p-MaxUTRA-r12 INTEGER (-50..33), q-QualMin-r12 INTEGER (-24..0), threshX-Q-r12 SEQUENCE { threshX-HighQ-r12 ReselectionThresholdQ-r9, threshX-LowQ-r12 ReselectionThresholdQ-r9 } OPTIONAL, -- Cond RSRQ multiBandInfoList-r12 SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-UTRA-FDD OPTIONAL, -- Need OR reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL, -- Need OP ... } CarrierFreqListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF CarrierFreqUTRA-TDD CarrierFreqUTRA-TDD ::= SEQUENCE { carrierFreq ARFCN-ValueUTRA, cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP threshX-High ReselectionThreshold, threshX-Low ReselectionThreshold, q-RxLevMin INTEGER (-60..-13), p-MaxUTRA INTEGER (-50..33), ... } CarrierFreqListUTRA-TDD-Ext-r12 ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF CarrierFreqUTRA-TDD-r12 CarrierFreqUTRA-TDD-r12 ::= SEQUENCE { carrierFreq-r12 ARFCN-ValueUTRA, cellReselectionPriority-r12 CellReselectionPriority OPTIONAL, -- Need OP threshX-High-r12 ReselectionThreshold, threshX-Low-r12 ReselectionThreshold, q-RxLevMin-r12 INTEGER (-60..-13), p-MaxUTRA-r12 INTEGER (-50..33), reducedMeasPerformance-r12 ENUMERATED {true} OPTIONAL, -- Need OP ... } FreqBandIndicator-UTRA-FDD ::= INTEGER (1..86) SystemInformationBlockType7 ::= SEQUENCE { t-ReselectionGERAN T-Reselection, t-ReselectionGERAN-SF SpeedStateScaleFactors OPTIONAL, -- Need OR carrierFreqsInfoList CarrierFreqsInfoListGERAN OPTIONAL, -- Need OR ..., lateNonCriticalExtension OCTET STRING OPTIONAL } CarrierFreqsInfoListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF CarrierFreqsInfoGERAN CarrierFreqsInfoGERAN ::= SEQUENCE { carrierFreqs CarrierFreqsGERAN, commonInfo SEQUENCE { cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP ncc-Permitted BIT STRING (SIZE (8)), q-RxLevMin INTEGER (0..45), p-MaxGERAN INTEGER (0..39) OPTIONAL, -- Need OP threshX-High ReselectionThreshold, threshX-Low ReselectionThreshold }, ... } SystemInformationBlockType8 ::= SEQUENCE { systemTimeInfo SystemTimeInfoCDMA2000 OPTIONAL, -- Need OR searchWindowSize INTEGER (0..15) OPTIONAL, -- Need OR parametersHRPD SEQUENCE { preRegistrationInfoHRPD PreRegistrationInfoHRPD, cellReselectionParametersHRPD CellReselectionParametersCDMA2000 OPTIONAL -- Need OR } OPTIONAL, -- Need OR parameters1XRTT SEQUENCE { csfb-RegistrationParam1XRTT CSFB-RegistrationParam1XRTT OPTIONAL, -- Need OP longCodeState1XRTT BIT STRING (SIZE (42)) OPTIONAL, -- Need OR cellReselectionParameters1XRTT CellReselectionParametersCDMA2000 OPTIONAL -- Need OR } OPTIONAL, -- Need OR ..., lateNonCriticalExtension OCTET STRING OPTIONAL, [[ csfb-SupportForDualRxUEs-r9 BOOLEAN OPTIONAL, -- Need OR cellReselectionParametersHRPD-v920 CellReselectionParametersCDMA2000-v920 OPTIONAL, -- Cond NCL-HRPD cellReselectionParameters1XRTT-v920 CellReselectionParametersCDMA2000-v920 OPTIONAL, -- Cond NCL-1XRTT csfb-RegistrationParam1XRTT-v920 CSFB-RegistrationParam1XRTT-v920 OPTIONAL, -- Cond REG-1XRTT ac-BarringConfig1XRTT-r9 AC-BarringConfig1XRTT-r9 OPTIONAL -- Cond REG-1XRTT ]], [[ csfb-DualRxTxSupport-r10 ENUMERATED {true} OPTIONAL -- Cond REG-1XRTT ]], [[ sib8-PerPLMN-List-r11 SIB8-PerPLMN-List-r11 OPTIONAL -- Need OR ]] } CellReselectionParametersCDMA2000 ::= SEQUENCE { bandClassList BandClassListCDMA2000, neighCellList NeighCellListCDMA2000, t-ReselectionCDMA2000 T-Reselection, t-ReselectionCDMA2000-SF SpeedStateScaleFactors OPTIONAL -- Need OP } CellReselectionParametersCDMA2000-r11 ::= SEQUENCE { bandClassList BandClassListCDMA2000, neighCellList-r11 SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000-r11, t-ReselectionCDMA2000 T-Reselection, t-ReselectionCDMA2000-SF SpeedStateScaleFactors OPTIONAL -- Need OP } CellReselectionParametersCDMA2000-v920 ::= SEQUENCE { neighCellList-v920 NeighCellListCDMA2000-v920 } NeighCellListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000 NeighCellCDMA2000 ::= SEQUENCE { bandClass BandclassCDMA2000, neighCellsPerFreqList NeighCellsPerBandclassListCDMA2000 } NeighCellCDMA2000-r11 ::= SEQUENCE { bandClass BandclassCDMA2000, neighFreqInfoList-r11 SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000-r11 } NeighCellsPerBandclassListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000 NeighCellsPerBandclassCDMA2000 ::= SEQUENCE { arfcn ARFCN-ValueCDMA2000, physCellIdList PhysCellIdListCDMA2000 } NeighCellsPerBandclassCDMA2000-r11 ::= SEQUENCE { arfcn ARFCN-ValueCDMA2000, physCellIdList-r11 SEQUENCE (SIZE (1..40)) OF PhysCellIdCDMA2000 } NeighCellListCDMA2000-v920 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000-v920 NeighCellCDMA2000-v920 ::= SEQUENCE { neighCellsPerFreqList-v920 NeighCellsPerBandclassListCDMA2000-v920 } NeighCellsPerBandclassListCDMA2000-v920 ::= SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000-v920 NeighCellsPerBandclassCDMA2000-v920 ::= SEQUENCE { physCellIdList-v920 PhysCellIdListCDMA2000-v920 } PhysCellIdListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdCDMA2000 PhysCellIdListCDMA2000-v920 ::= SEQUENCE (SIZE (0..24)) OF PhysCellIdCDMA2000 BandClassListCDMA2000 ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassInfoCDMA2000 BandClassInfoCDMA2000 ::= SEQUENCE { bandClass BandclassCDMA2000, cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP threshX-High INTEGER (0..63), threshX-Low INTEGER (0..63), ... } AC-BarringConfig1XRTT-r9 ::= SEQUENCE { ac-Barring0to9-r9 INTEGER (0..63), ac-Barring10-r9 INTEGER (0..7), ac-Barring11-r9 INTEGER (0..7), ac-Barring12-r9 INTEGER (0..7), ac-Barring13-r9 INTEGER (0..7), ac-Barring14-r9 INTEGER (0..7), ac-Barring15-r9 INTEGER (0..7), ac-BarringMsg-r9 INTEGER (0..7), ac-BarringReg-r9 INTEGER (0..7), ac-BarringEmg-r9 INTEGER (0..7) } SIB8-PerPLMN-List-r11 ::= SEQUENCE (SIZE (1..maxPLMN-r11)) OF SIB8-PerPLMN-r11 SIB8-PerPLMN-r11 ::= SEQUENCE { plmn-Identity-r11 INTEGER (1..maxPLMN-r11), parametersCDMA2000-r11 CHOICE { explicitValue ParametersCDMA2000-r11, defaultValue NULL } } ParametersCDMA2000-r11 ::= SEQUENCE { systemTimeInfo-r11 CHOICE { explicitValue SystemTimeInfoCDMA2000, defaultValue NULL } OPTIONAL, -- Need OR searchWindowSize-r11 INTEGER (0..15), parametersHRPD-r11 SEQUENCE { preRegistrationInfoHRPD-r11 PreRegistrationInfoHRPD, cellReselectionParametersHRPD-r11 CellReselectionParametersCDMA2000-r11 OPTIONAL -- Need OR } OPTIONAL, -- Need OR parameters1XRTT-r11 SEQUENCE { csfb-RegistrationParam1XRTT-r11 CSFB-RegistrationParam1XRTT OPTIONAL, -- Need OP csfb-RegistrationParam1XRTT-Ext-r11 CSFB-RegistrationParam1XRTT-v920 OPTIONAL, -- Cond REG-1XRTT-PerPLMN longCodeState1XRTT-r11 BIT STRING (SIZE (42)) OPTIONAL, -- Cond PerPLMN-LC cellReselectionParameters1XRTT-r11 CellReselectionParametersCDMA2000-r11 OPTIONAL, -- Need OR ac-BarringConfig1XRTT-r11 AC-BarringConfig1XRTT-r9 OPTIONAL, -- Cond REG-1XRTT-PerPLMN csfb-SupportForDualRxUEs-r11 BOOLEAN OPTIONAL, -- Need OR csfb-DualRxTxSupport-r11 ENUMERATED {true} OPTIONAL -- Cond REG-1XRTT-PerPLMN } OPTIONAL, -- Need OR ... } SystemInformationBlockType9 ::= SEQUENCE { hnb-Name OCTET STRING (SIZE(1..48)) OPTIONAL, -- Need OR ..., lateNonCriticalExtension OCTET STRING OPTIONAL } SystemInformationBlockType10 ::= SEQUENCE { messageIdentifier BIT STRING (SIZE (16)), serialNumber BIT STRING (SIZE (16)), warningType OCTET STRING (SIZE (2)), dummy OCTET STRING (SIZE (50)) OPTIONAL, -- Need OP ..., lateNonCriticalExtension OCTET STRING OPTIONAL } SystemInformationBlockType11 ::= SEQUENCE { messageIdentifier BIT STRING (SIZE (16)), serialNumber BIT STRING (SIZE (16)), warningMessageSegmentType ENUMERATED {notLastSegment, lastSegment}, warningMessageSegmentNumber INTEGER (0..63), warningMessageSegment OCTET STRING, dataCodingScheme OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1 ..., lateNonCriticalExtension OCTET STRING OPTIONAL } SystemInformationBlockType12-r9 ::= SEQUENCE { messageIdentifier-r9 BIT STRING (SIZE (16)), serialNumber-r9 BIT STRING (SIZE (16)), warningMessageSegmentType-r9 ENUMERATED {notLastSegment, lastSegment}, warningMessageSegmentNumber-r9 INTEGER (0..63), warningMessageSegment-r9 OCTET STRING, dataCodingScheme-r9 OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1 lateNonCriticalExtension OCTET STRING OPTIONAL, ... } SystemInformationBlockType13-r9 ::= SEQUENCE { mbsfn-AreaInfoList-r9 MBSFN-AreaInfoList-r9, notificationConfig-r9 MBMS-NotificationConfig-r9, lateNonCriticalExtension OCTET STRING OPTIONAL, ..., [[ notificationConfig-v1430 MBMS-NotificationConfig-v1430 OPTIONAL ]] } SystemInformationBlockType14-r11 ::= SEQUENCE { eab-Param-r11 CHOICE { eab-Common-r11 EAB-Config-r11, eab-PerPLMN-List-r11 SEQUENCE (SIZE (1..maxPLMN-r11)) OF EAB-ConfigPLMN-r11 } OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, ... } EAB-ConfigPLMN-r11 ::= SEQUENCE { eab-Config-r11 EAB-Config-r11 OPTIONAL -- Need OR } EAB-Config-r11 ::= SEQUENCE { eab-Category-r11 ENUMERATED {a, b, c}, eab-BarringBitmap-r11 BIT STRING (SIZE (10)) } SystemInformationBlockType15-r11 ::= SEQUENCE { mbms-SAI-IntraFreq-r11 MBMS-SAI-List-r11 OPTIONAL, -- Need OR mbms-SAI-InterFreqList-r11 MBMS-SAI-InterFreqList-r11 OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, ..., [[ mbms-SAI-InterFreqList-v1140 MBMS-SAI-InterFreqList-v1140 OPTIONAL -- Cond InterFreq ]], [[ mbms-IntraFreqCarrierType-r14 MBMS-CarrierType-r14 OPTIONAL, -- Need OR mbms-InterFreqCarrierTypeList-r14 MBMS-InterFreqCarrierTypeList-r14 OPTIONAL -- Need OR ]] } MBMS-SAI-List-r11 ::= SEQUENCE (SIZE (1..maxSAI-MBMS-r11)) OF MBMS-SAI-r11 MBMS-SAI-r11 ::= INTEGER (0..65535) MBMS-SAI-InterFreqList-r11 ::= SEQUENCE (SIZE (1..maxFreq)) OF MBMS-SAI-InterFreq-r11 MBMS-SAI-InterFreqList-v1140 ::= SEQUENCE (SIZE (1..maxFreq)) OF MBMS-SAI-InterFreq-v1140 MBMS-SAI-InterFreq-r11 ::= SEQUENCE { dl-CarrierFreq-r11 ARFCN-ValueEUTRA-r9, mbms-SAI-List-r11 MBMS-SAI-List-r11 } MBMS-SAI-InterFreq-v1140 ::= SEQUENCE { multiBandInfoList-r11 MultiBandInfoList-r11 OPTIONAL -- Need OR } MBMS-InterFreqCarrierTypeList-r14 ::= SEQUENCE (SIZE (1..maxFreq)) OF MBMS-CarrierType-r14 MBMS-CarrierType-r14 ::= SEQUENCE { carrierType-r14 ENUMERATED {mbms, fembmsMixed, fembmsDedicated}, frameOffset-r14 INTEGER (0..3) OPTIONAL -- Need OR } SystemInformationBlockType16-r11 ::= SEQUENCE { timeInfo-r11 SEQUENCE { timeInfoUTC-r11 INTEGER (0..549755813887), dayLightSavingTime-r11 BIT STRING (SIZE (2)) OPTIONAL, -- Need OR leapSeconds-r11 INTEGER (-127..128) OPTIONAL, -- Need OR localTimeOffset-r11 INTEGER (-63..64) OPTIONAL -- Need OR } OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, ... } SystemInformationBlockType17-r12 ::= SEQUENCE { wlan-OffloadInfoPerPLMN-List-r12 SEQUENCE (SIZE (1..maxPLMN-r11)) OF WLAN-OffloadInfoPerPLMN-r12 OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, ... } WLAN-OffloadInfoPerPLMN-r12 ::= SEQUENCE { wlan-OffloadConfigCommon-r12 WLAN-OffloadConfig-r12 OPTIONAL, -- Need OR wlan-Id-List-r12 WLAN-Id-List-r12 OPTIONAL, -- Need OR ... } WLAN-Id-List-r12 ::= SEQUENCE (SIZE (1..maxWLAN-Id-r12)) OF WLAN-Identifiers-r12 WLAN-Identifiers-r12 ::= SEQUENCE { ssid-r12 OCTET STRING (SIZE (1..32)) OPTIONAL, -- Need OR bssid-r12 OCTET STRING (SIZE (6)) OPTIONAL, -- Need OR hessid-r12 OCTET STRING (SIZE (6)) OPTIONAL, -- Need OR ... } SystemInformationBlockType18-r12 ::= SEQUENCE { commConfig-r12 SEQUENCE { commRxPool-r12 SL-CommRxPoolList-r12, commTxPoolNormalCommon-r12 SL-CommTxPoolList-r12 OPTIONAL, -- Need OR commTxPoolExceptional-r12 SL-CommTxPoolList-r12 OPTIONAL, -- Need OR commSyncConfig-r12 SL-SyncConfigList-r12 OPTIONAL -- Need OR } OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, ..., [[ commTxPoolNormalCommonExt-r13 SL-CommTxPoolListExt-r13 OPTIONAL, -- Need OR commTxResourceUC-ReqAllowed-r13 ENUMERATED {true} OPTIONAL, -- Need OR commTxAllowRelayCommon-r13 ENUMERATED {true} OPTIONAL -- Need OR ]] } SystemInformationBlockType19-r12 ::= SEQUENCE { discConfig-r12 SEQUENCE { discRxPool-r12 SL-DiscRxPoolList-r12, discTxPoolCommon-r12 SL-DiscTxPoolList-r12 OPTIONAL, -- Need OR discTxPowerInfo-r12 SL-DiscTxPowerInfoList-r12 OPTIONAL, -- Cond Tx discSyncConfig-r12 SL-SyncConfigList-r12 OPTIONAL -- Need OR } OPTIONAL, -- Need OR discInterFreqList-r12 SL-CarrierFreqInfoList-r12 OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, ..., [[ discConfig-v1310 SEQUENCE { discInterFreqList-v1310 SL-CarrierFreqInfoList-v1310 OPTIONAL, -- Need OR gapRequestsAllowedCommon ENUMERATED {true} OPTIONAL -- Need OR } OPTIONAL, -- Need OR discConfigRelay-r13 SEQUENCE { relayUE-Config-r13 SL-DiscConfigRelayUE-r13, remoteUE-Config-r13 SL-DiscConfigRemoteUE-r13 } OPTIONAL, -- Need OR discConfigPS-13 SEQUENCE { discRxPoolPS-r13 SL-DiscRxPoolList-r12, discTxPoolPS-Common-r13 SL-DiscTxPoolList-r12 OPTIONAL -- Need OR } OPTIONAL -- Need OR ]] } SL-CarrierFreqInfoList-r12 ::= SEQUENCE (SIZE (1..maxFreq)) OF SL-CarrierFreqInfo-r12 SL-CarrierFreqInfoList-v1310 ::= SEQUENCE (SIZE (1..maxFreq)) OF SL-CarrierFreqInfo-v1310 SL-CarrierFreqInfo-r12::= SEQUENCE { carrierFreq-r12 ARFCN-ValueEUTRA-r9, plmn-IdentityList-r12 PLMN-IdentityList4-r12 OPTIONAL -- Need OP } SL-DiscConfigRelayUE-r13 ::= SEQUENCE { threshHigh-r13 RSRP-RangeSL4-r13 OPTIONAL, -- Need OR threshLow-r13 RSRP-RangeSL4-r13 OPTIONAL, -- Need OR hystMax-r13 ENUMERATED {dB0, dB3, dB6, dB9, dB12, dBinf} OPTIONAL, -- Cond ThreshHigh hystMin-r13 ENUMERATED {dB0, dB3, dB6, dB9, dB12} OPTIONAL -- Cond ThreshLow } SL-DiscConfigRemoteUE-r13 ::= SEQUENCE { threshHigh-r13 RSRP-RangeSL4-r13 OPTIONAL, -- Need OR hystMax-r13 ENUMERATED {dB0, dB3, dB6, dB9, dB12} OPTIONAL, -- Cond ThreshHigh reselectionInfoIC-r13 ReselectionInfoRelay-r13 } ReselectionInfoRelay-r13 ::= SEQUENCE { q-RxLevMin-r13 Q-RxLevMin, -- Note that the mapping of invidual values may be different for PC5, but the granularity/ -- number of values is same as for Uu filterCoefficient-r13 FilterCoefficient, minHyst-r13 ENUMERATED {dB0, dB3, dB6, dB9, dB12, dBinf} OPTIONAL -- Need OR } SL-CarrierFreqInfo-v1310::= SEQUENCE { discResourcesNonPS-r13 SL-ResourcesInterFreq-r13 OPTIONAL, -- Need OR discResourcesPS-r13 SL-ResourcesInterFreq-r13 OPTIONAL, -- Need OR discConfigOther-r13 SL-DiscConfigOtherInterFreq-r13 OPTIONAL, -- Need OR ... } PLMN-IdentityList4-r12 ::= SEQUENCE (SIZE (1..maxPLMN-r11)) OF PLMN-IdentityInfo2-r12 PLMN-IdentityInfo2-r12 ::= CHOICE { plmn-Index-r12 INTEGER (1..maxPLMN-r11), plmnIdentity-r12 PLMN-Identity } SL-DiscTxResourcesInterFreq-r13 ::= CHOICE { acquireSI-FromCarrier-r13 NULL, discTxPoolCommon-r13 SL-DiscTxPoolList-r12, requestDedicated-r13 NULL, noTxOnCarrier-r13 NULL } SL-DiscConfigOtherInterFreq-r13::= SEQUENCE { txPowerInfo-r13 SL-DiscTxPowerInfoList-r12 OPTIONAL, -- Cond Tx refCarrierCommon-r13 ENUMERATED {pCell} OPTIONAL, -- Need OR discSyncConfig-r13 SL-SyncConfigListNFreq-r13 OPTIONAL, -- Need OR discCellSelectionInfo-r13 CellSelectionInfoNFreq-r13 OPTIONAL -- Need OR } SL-ResourcesInterFreq-r13 ::= SEQUENCE { discRxResourcesInterFreq-r13 SL-DiscRxPoolList-r12 OPTIONAL, -- Need OR discTxResourcesInterFreq-r13 SL-DiscTxResourcesInterFreq-r13 OPTIONAL -- Need OR } SystemInformationBlockType20-r13 ::= SEQUENCE { sc-mcch-RepetitionPeriod-r13 ENUMERATED {rf2, rf4, rf8, rf16, rf32, rf64, rf128, rf256}, sc-mcch-Offset-r13 INTEGER (0..10), sc-mcch-FirstSubframe-r13 INTEGER (0..9), sc-mcch-duration-r13 INTEGER (2..9) OPTIONAL, sc-mcch-ModificationPeriod-r13 ENUMERATED {rf2, rf4, rf8, rf16, rf32, rf64, rf128, rf256, rf512, rf1024, r2048, rf4096, rf8192, rf16384, rf32768, rf65536}, lateNonCriticalExtension OCTET STRING OPTIONAL, ..., [[ br-BCCH-Config-r14 SEQUENCE { sc-mcch-RepetitionPeriod-v1430 ENUMERATED {rf1}, sc-mcch-ModificationPeriod-v1430 ENUMERATED {rf1}, mpdcch-Narrowband-SC-MCCH-r14 INTEGER (1..maxAvailNarrowBands-r13), mpdcch-NumRepetition-SC-MCCH-r14 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128, r256}, mpdcch-StartSF-SC-MCCH-r14 CHOICE { fdd-r14 ENUMERATED {v1, v1dot5, v2, v2dot5, v4, v5, v8, v10}, tdd-r14 ENUMERATED {v1, v2, v4, v5, v8, v10, v20} }, mpdcch-PDSCH-HoppingConfig-SC-MCCH-r14 ENUMERATED {off, ce-ModeA, ce-ModeB}, sc-mcch-CarrierFreq-r14 ARFCN-ValueEUTRA-r9, sc-mcch-Offset-BR-r14 INTEGER (0..10), sc-mcch-RepetitionPeriod-BR-r14 ENUMERATED {rf32, rf128, rf512, rf1024, rf2048, rf4096, rf8192, rf16384}, sc-mcch-ModificationPeriod-BR-r14 ENUMERATED { rf32, rf128, rf256, rf512, rf1024, rf2048, rf4096, rf8192, rf16384, rf32768, rf65536, rf131072, rf262144, rf524288, rf1048576} } OPTIONAL, -- Need OR sc-mcch-SchedulingInfo-r14 SC-MCCH-SchedulingInfo-r14 OPTIONAL, -- Need OP pdsch-maxNumRepetitionCEmodeA-SC-MTCH-r14 ENUMERATED { r16, r32 } OPTIONAL, -- Need OR pdsch-maxNumRepetitionCEmodeB-SC-MTCH-r14 ENUMERATED { r192, r256, r384, r512, r768, r1024, r1536, r2048} OPTIONAL -- Need OR ]] } SC-MCCH-SchedulingInfo-r14::= SEQUENCE { onDurationTimerSCPTM-r14 ENUMERATED {psf10, psf20, psf100, psf300, psf500, psf1000, psf1200, psf1600}, drx-InactivityTimerSCPTM-r14 ENUMERATED {psf0, psf1, psf2, psf4, psf8, psf16, psf32, psf64, psf128, psf256, ps512, psf1024, psf2048, psf4096, psf8192, psf16384}, schedulingPeriodStartOffsetSCPTM-r14 CHOICE { sf10 INTEGER(0..9), sf20 INTEGER(0..19), sf32 INTEGER(0..31), sf40 INTEGER(0..39), sf64 INTEGER(0..63), sf80 INTEGER(0..79), sf128 INTEGER(0..127), sf160 INTEGER(0..159), sf256 INTEGER(0..255), sf320 INTEGER(0..319), sf512 INTEGER(0..511), sf640 INTEGER(0..639), sf1024 INTEGER(0..1023), sf2048 INTEGER(0..2047), sf4096 INTEGER(0..4095), sf8192 INTEGER(0..8191) }, ... } SystemInformationBlockType21-r14 ::= SEQUENCE { sl-V2X-ConfigCommon-r14 SL-V2X-ConfigCommon-r14 OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, ... } SL-V2X-ConfigCommon-r14 ::= SEQUENCE { v2x-CommRxPool-r14 SL-CommRxPoolListV2X-r14 OPTIONAL, -- Need OR v2x-CommTxPoolNormalCommon-r14 SL-CommTxPoolListV2X-r14 OPTIONAL, -- Need OR p2x-CommTxPoolNormalCommon-r14 SL-CommTxPoolListV2X-r14 OPTIONAL, -- Need OR v2x-CommTxPoolExceptional-r14 SL-CommResourcePoolV2X-r14 OPTIONAL, -- Need OR v2x-SyncConfig-r14 SL-SyncConfigListV2X-r14 OPTIONAL, -- Need OR v2x-InterFreqInfoList-r14 SL-InterFreqInfoListV2X-r14 OPTIONAL, -- Need OR v2x-ResourceSelectionConfig-r14 SL-CommTxPoolSensingConfig-r14 OPTIONAL, -- Need OR zoneConfig-r14 SL-ZoneConfig-r14 OPTIONAL, -- Need OR typeTxSync-r14 SL-TypeTxSync-r14 OPTIONAL, -- Need OR thresSL-TxPrioritization-r14 SL-Priority-r13 OPTIONAL, -- Need OR anchorCarrierFreqList-r14 SL-AnchorCarrierFreqList-V2X-r14 OPTIONAL, -- Need OR offsetDFN-r14 INTEGER (0..1000) OPTIONAL, -- Need OR cbr-CommonTxConfigList-r14 SL-CBR-CommonTxConfigList-r14 OPTIONAL -- Need OR } AntennaInfoCommon ::= SEQUENCE { antennaPortsCount ENUMERATED {an1, an2, an4, spare1} } AntennaInfoDedicated ::= SEQUENCE { transmissionMode ENUMERATED { tm1, tm2, tm3, tm4, tm5, tm6, tm7, tm8-v920}, codebookSubsetRestriction CHOICE { n2TxAntenna-tm3 BIT STRING (SIZE (2)), n4TxAntenna-tm3 BIT STRING (SIZE (4)), n2TxAntenna-tm4 BIT STRING (SIZE (6)), n4TxAntenna-tm4 BIT STRING (SIZE (64)), n2TxAntenna-tm5 BIT STRING (SIZE (4)), n4TxAntenna-tm5 BIT STRING (SIZE (16)), n2TxAntenna-tm6 BIT STRING (SIZE (4)), n4TxAntenna-tm6 BIT STRING (SIZE (16)) } OPTIONAL, -- Cond TM ue-TransmitAntennaSelection CHOICE{ release NULL, setup ENUMERATED {closedLoop, openLoop} } } AntennaInfoDedicated-v920 ::= SEQUENCE { codebookSubsetRestriction-v920 CHOICE { n2TxAntenna-tm8-r9 BIT STRING (SIZE (6)), n4TxAntenna-tm8-r9 BIT STRING (SIZE (32)) } OPTIONAL -- Cond TM8 } AntennaInfoDedicated-r10 ::= SEQUENCE { transmissionMode-r10 ENUMERATED { tm1, tm2, tm3, tm4, tm5, tm6, tm7, tm8-v920, tm9-v1020, tm10-v1130, spare6, spare5, spare4, spare3, spare2, spare1}, codebookSubsetRestriction-r10 BIT STRING OPTIONAL, -- Cond TMX ue-TransmitAntennaSelection CHOICE{ release NULL, setup ENUMERATED {closedLoop, openLoop} } } AntennaInfoDedicated-v10i0::= SEQUENCE { maxLayersMIMO-r10 ENUMERATED {twoLayers, fourLayers, eightLayers} OPTIONAL -- Need OR } AntennaInfoDedicated-v1250 ::= SEQUENCE { alternativeCodebookEnabledFor4TX-r12 BOOLEAN } AntennaInfoDedicated-v1430 ::= SEQUENCE { ce-UE-TxAntennaSelection-config-r14 ENUMERATED {on} OPTIONAL -- Need OR } AntennaInfoUL-r10 ::= SEQUENCE { transmissionModeUL-r10 ENUMERATED {tm1, tm2, spare6, spare5, spare4, spare3, spare2, spare1} OPTIONAL, -- Need OR fourAntennaPortActivated-r10 ENUMERATED {setup} OPTIONAL -- Need OR } CQI-ReportConfig ::= SEQUENCE { cqi-ReportModeAperiodic CQI-ReportModeAperiodic OPTIONAL, -- Need OR nomPDSCH-RS-EPRE-Offset INTEGER (-1..6), cqi-ReportPeriodic CQI-ReportPeriodic OPTIONAL -- Need ON } CQI-ReportConfig-v920 ::= SEQUENCE { cqi-Mask-r9 ENUMERATED {setup} OPTIONAL, -- Cond cqi-Setup pmi-RI-Report-r9 ENUMERATED {setup} OPTIONAL -- Cond PMIRI } CQI-ReportConfig-r10 ::= SEQUENCE { cqi-ReportAperiodic-r10 CQI-ReportAperiodic-r10 OPTIONAL, -- Need ON nomPDSCH-RS-EPRE-Offset INTEGER (-1..6), cqi-ReportPeriodic-r10 CQI-ReportPeriodic-r10 OPTIONAL, -- Need ON pmi-RI-Report-r9 ENUMERATED {setup} OPTIONAL, -- Cond PMIRIPCell csi-SubframePatternConfig-r10 CHOICE { release NULL, setup SEQUENCE { csi-MeasSubframeSet1-r10 MeasSubframePattern-r10, csi-MeasSubframeSet2-r10 MeasSubframePattern-r10 } } OPTIONAL -- Need ON } CQI-ReportConfig-v1130 ::= SEQUENCE { cqi-ReportPeriodic-v1130 CQI-ReportPeriodic-v1130, cqi-ReportBoth-r11 CQI-ReportBoth-r11 } CQI-ReportConfig-v1250 ::= SEQUENCE { csi-SubframePatternConfig-r12 CHOICE { release NULL, setup SEQUENCE { csi-MeasSubframeSets-r12 BIT STRING (SIZE (10)) } } OPTIONAL, -- Need ON cqi-ReportBoth-v1250 CQI-ReportBoth-v1250 OPTIONAL, -- Need ON cqi-ReportAperiodic-v1250 CQI-ReportAperiodic-v1250 OPTIONAL, -- Need ON altCQI-Table-r12 ENUMERATED { allSubframes, csi-SubframeSet1, csi-SubframeSet2, spare1} OPTIONAL -- Need OP } CQI-ReportConfig-v1310 ::= SEQUENCE { cqi-ReportBoth-v1310 CQI-ReportBoth-v1310 OPTIONAL, -- Need ON cqi-ReportAperiodic-v1310 CQI-ReportAperiodic-v1310 OPTIONAL, -- Need ON cqi-ReportPeriodic-v1310 CQI-ReportPeriodic-v1310 OPTIONAL -- Need ON } CQI-ReportConfig-v1320 ::= SEQUENCE { cqi-ReportPeriodic-v1320 CQI-ReportPeriodic-v1320 OPTIONAL -- Need ON } CQI-ReportConfig-v1430 ::= SEQUENCE { cqi-ReportAperiodicHybrid-r14 CQI-ReportAperiodicHybrid-r14 OPTIONAL -- Need ON } CQI-ReportConfigSCell-r10 ::= SEQUENCE { cqi-ReportModeAperiodic-r10 CQI-ReportModeAperiodic OPTIONAL, -- Need OR nomPDSCH-RS-EPRE-Offset-r10 INTEGER (-1..6), cqi-ReportPeriodicSCell-r10 CQI-ReportPeriodic-r10 OPTIONAL, -- Need ON pmi-RI-Report-r10 ENUMERATED {setup} OPTIONAL -- Cond PMIRISCell } CQI-ReportPeriodic ::= CHOICE { release NULL, setup SEQUENCE { cqi-PUCCH-ResourceIndex INTEGER (0..1185), cqi-pmi-ConfigIndex INTEGER (0..1023), cqi-FormatIndicatorPeriodic CHOICE { widebandCQI NULL, subbandCQI SEQUENCE { k INTEGER (1..4) } }, ri-ConfigIndex INTEGER (0..1023) OPTIONAL, -- Need OR simultaneousAckNackAndCQI BOOLEAN } } CQI-ReportPeriodic-r10 ::= CHOICE { release NULL, setup SEQUENCE { cqi-PUCCH-ResourceIndex-r10 INTEGER (0..1184), cqi-PUCCH-ResourceIndexP1-r10 INTEGER (0..1184) OPTIONAL, -- Need OR cqi-pmi-ConfigIndex INTEGER (0..1023), cqi-FormatIndicatorPeriodic-r10 CHOICE { widebandCQI-r10 SEQUENCE { csi-ReportMode-r10 ENUMERATED {submode1, submode2} OPTIONAL -- Need OR }, subbandCQI-r10 SEQUENCE { k INTEGER (1..4), periodicityFactor-r10 ENUMERATED {n2, n4} } }, ri-ConfigIndex INTEGER (0..1023) OPTIONAL, -- Need OR simultaneousAckNackAndCQI BOOLEAN, cqi-Mask-r9 ENUMERATED {setup} OPTIONAL, -- Need OR csi-ConfigIndex-r10 CHOICE { release NULL, setup SEQUENCE { cqi-pmi-ConfigIndex2-r10 INTEGER (0..1023), ri-ConfigIndex2-r10 INTEGER (0..1023) OPTIONAL -- Need OR } } OPTIONAL -- Need ON } } CQI-ReportPeriodic-v1130 ::= SEQUENCE { simultaneousAckNackAndCQI-Format3-r11 ENUMERATED {setup} OPTIONAL, -- Need OR cqi-ReportPeriodicProcExtToReleaseList-r11 CQI-ReportPeriodicProcExtToReleaseList-r11 OPTIONAL, -- Need ON cqi-ReportPeriodicProcExtToAddModList-r11 CQI-ReportPeriodicProcExtToAddModList-r11 OPTIONAL -- Need ON } CQI-ReportPeriodic-v1310 ::= SEQUENCE { cri-ReportConfig-r13 CRI-ReportConfig-r13 OPTIONAL, -- Need OR simultaneousAckNackAndCQI-Format4-Format5-r13 ENUMERATED {setup} OPTIONAL-- Need OR } CQI-ReportPeriodic-v1320 ::= SEQUENCE { periodicityFactorWB-r13 ENUMERATED {n2, n4} OPTIONAL -- Need OR } CQI-ReportPeriodicProcExtToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCQI-ProcExt-r11)) OF CQI-ReportPeriodicProcExt-r11 CQI-ReportPeriodicProcExtToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCQI-ProcExt-r11)) OF CQI-ReportPeriodicProcExtId-r11 CQI-ReportPeriodicProcExt-r11 ::= SEQUENCE { cqi-ReportPeriodicProcExtId-r11 CQI-ReportPeriodicProcExtId-r11, cqi-pmi-ConfigIndex-r11 INTEGER (0..1023), cqi-FormatIndicatorPeriodic-r11 CHOICE { widebandCQI-r11 SEQUENCE { csi-ReportMode-r11 ENUMERATED {submode1, submode2} OPTIONAL -- Need OR }, subbandCQI-r11 SEQUENCE { k INTEGER (1..4), periodicityFactor-r11 ENUMERATED {n2, n4} } }, ri-ConfigIndex-r11 INTEGER (0..1023) OPTIONAL, -- Need OR csi-ConfigIndex-r11 CHOICE { release NULL, setup SEQUENCE { cqi-pmi-ConfigIndex2-r11 INTEGER (0..1023), ri-ConfigIndex2-r11 INTEGER (0..1023) OPTIONAL -- Need OR } } OPTIONAL, -- Need ON ..., [[ cri-ReportConfig-r13 CRI-ReportConfig-r13 OPTIONAL -- Need ON ]], [[ periodicityFactorWB-r13 ENUMERATED {n2, n4} OPTIONAL -- Need ON ]] } CQI-ReportAperiodic-r10 ::= CHOICE { release NULL, setup SEQUENCE { cqi-ReportModeAperiodic-r10 CQI-ReportModeAperiodic, aperiodicCSI-Trigger-r10 SEQUENCE { trigger1-r10 BIT STRING (SIZE (8)), trigger2-r10 BIT STRING (SIZE (8)) } OPTIONAL -- Need OR } } CQI-ReportAperiodic-v1250 ::= CHOICE { release NULL, setup SEQUENCE { aperiodicCSI-Trigger-v1250 SEQUENCE { trigger-SubframeSetIndicator-r12 ENUMERATED {s1, s2}, trigger1-SubframeSetIndicator-r12 BIT STRING (SIZE (8)), trigger2-SubframeSetIndicator-r12 BIT STRING (SIZE (8)) } } } CQI-ReportAperiodic-v1310 ::= CHOICE { release NULL, setup SEQUENCE { aperiodicCSI-Trigger-v1310 SEQUENCE { trigger1-r13 BIT STRING (SIZE (32)), trigger2-r13 BIT STRING (SIZE (32)), trigger3-r13 BIT STRING (SIZE (32)), trigger4-r13 BIT STRING (SIZE (32)), trigger5-r13 BIT STRING (SIZE (32)), trigger6-r13 BIT STRING (SIZE (32)) } OPTIONAL, -- Need ON aperiodicCSI-Trigger2-r13 CHOICE { release NULL, setup SEQUENCE { trigger1-SubframeSetIndicator-r13 BIT STRING (SIZE (32)), trigger2-SubframeSetIndicator-r13 BIT STRING (SIZE (32)), trigger3-SubframeSetIndicator-r13 BIT STRING (SIZE (32)), trigger4-SubframeSetIndicator-r13 BIT STRING (SIZE (32)), trigger5-SubframeSetIndicator-r13 BIT STRING (SIZE (32)), trigger6-SubframeSetIndicator-r13 BIT STRING (SIZE (32)) } } OPTIONAL -- Need ON } } CQI-ReportAperiodicProc-r11 ::= SEQUENCE { cqi-ReportModeAperiodic-r11 CQI-ReportModeAperiodic, trigger01-r11 BOOLEAN, trigger10-r11 BOOLEAN, trigger11-r11 BOOLEAN } CQI-ReportAperiodicProc-v1310 ::= SEQUENCE { trigger001-r13 BOOLEAN, trigger010-r13 BOOLEAN, trigger011-r13 BOOLEAN, trigger100-r13 BOOLEAN, trigger101-r13 BOOLEAN, trigger110-r13 BOOLEAN, trigger111-r13 BOOLEAN } CQI-ReportAperiodicHybrid-r14 ::= SEQUENCE { triggers-r14 CHOICE { oneBit-r14 SEQUENCE { trigger1-Indicator-r14 BIT STRING (SIZE (8)) }, twoBit-r14 SEQUENCE { trigger01-Indicator-r14 BIT STRING (SIZE (8)), trigger10-Indicator-r14 BIT STRING (SIZE (8)), trigger11-Indicator-r14 BIT STRING (SIZE (8)) }, threeBit-r14 SEQUENCE { trigger001-Indicator-r14 BIT STRING (SIZE (32)), trigger010-Indicator-r14 BIT STRING (SIZE (32)), trigger011-Indicator-r14 BIT STRING (SIZE (32)), trigger100-Indicator-r14 BIT STRING (SIZE (32)), trigger101-Indicator-r14 BIT STRING (SIZE (32)), trigger110-Indicator-r14 BIT STRING (SIZE (32)), trigger111-Indicator-r14 BIT STRING (SIZE (32)) } } OPTIONAL -- Need OR } CQI-ReportModeAperiodic ::= ENUMERATED { rm12, rm20, rm22, rm30, rm31, rm32-v1250, rm10-v1310, rm11-v1310 } CQI-ReportBoth-r11 ::= SEQUENCE { csi-IM-ConfigToReleaseList-r11 CSI-IM-ConfigToReleaseList-r11 OPTIONAL, -- Need ON csi-IM-ConfigToAddModList-r11 CSI-IM-ConfigToAddModList-r11 OPTIONAL, -- Need ON csi-ProcessToReleaseList-r11 CSI-ProcessToReleaseList-r11 OPTIONAL, -- Need ON csi-ProcessToAddModList-r11 CSI-ProcessToAddModList-r11 OPTIONAL -- Need ON } CQI-ReportBoth-v1250 ::= SEQUENCE { csi-IM-ConfigToReleaseListExt-r12 CSI-IM-ConfigId-v1250 OPTIONAL, -- Need ON csi-IM-ConfigToAddModListExt-r12 CSI-IM-ConfigExt-r12 OPTIONAL -- Need ON } CQI-ReportBoth-v1310 ::= SEQUENCE { csi-IM-ConfigToReleaseListExt-r13 CSI-IM-ConfigToReleaseListExt-r13 OPTIONAL, -- Need ON csi-IM-ConfigToAddModListExt-r13 CSI-IM-ConfigToAddModListExt-r13 OPTIONAL -- Need ON } CSI-IM-ConfigToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-IM-r11)) OF CSI-IM-Config-r11 CSI-IM-ConfigToAddModListExt-r13 ::= SEQUENCE (SIZE (1..maxCSI-IM-v1310)) OF CSI-IM-ConfigExt-r12 CSI-IM-ConfigToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCSI-IM-r11)) OF CSI-IM-ConfigId-r11 CSI-IM-ConfigToReleaseListExt-r13 ::= SEQUENCE (SIZE (1..maxCSI-IM-v1310)) OF CSI-IM-ConfigId-v1310 CSI-ProcessToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-Proc-r11)) OF CSI-Process-r11 CSI-ProcessToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCSI-Proc-r11)) OF CSI-ProcessId-r11 CQI-ReportBothProc-r11 ::= SEQUENCE { ri-Ref-CSI-ProcessId-r11 CSI-ProcessId-r11 OPTIONAL, -- Need OR pmi-RI-Report-r11 ENUMERATED {setup} OPTIONAL -- Need OR } CRI-ReportConfig-r13 ::= CHOICE { release NULL, setup SEQUENCE { cri-ConfigIndex-r13 CRI-ConfigIndex-r13, cri-ConfigIndex2-r13 CRI-ConfigIndex-r13 OPTIONAL -- Need OR } } CRI-ConfigIndex-r13 ::= INTEGER (0..1023) CQI-ReportPeriodicProcExtId-r11 ::= INTEGER (1..maxCQI-ProcExt-r11) CrossCarrierSchedulingConfig-r10 ::= SEQUENCE { schedulingCellInfo-r10 CHOICE { own-r10 SEQUENCE { -- No cross carrier scheduling cif-Presence-r10 BOOLEAN }, other-r10 SEQUENCE { -- Cross carrier scheduling schedulingCellId-r10 ServCellIndex-r10, pdsch-Start-r10 INTEGER (1..4) } } } CrossCarrierSchedulingConfig-r13 ::= SEQUENCE { schedulingCellInfo-r13 CHOICE { own-r13 SEQUENCE { -- No cross carrier scheduling cif-Presence-r13 BOOLEAN }, other-r13 SEQUENCE { -- Cross carrier scheduling schedulingCellId-r13 ServCellIndex-r13, pdsch-Start-r13 INTEGER (1..4), cif-InSchedulingCell-r13 INTEGER (1..7) } } } CrossCarrierSchedulingConfigLAA-UL-r14 ::= SEQUENCE { schedulingCellId-r14 ServCellIndex-r13, cif-InSchedulingCell-r14 INTEGER (1..7) } CSI-IM-Config-r11 ::= SEQUENCE { csi-IM-ConfigId-r11 CSI-IM-ConfigId-r11, resourceConfig-r11 INTEGER (0..31), subframeConfig-r11 INTEGER (0..154), ..., [[ interferenceMeasRestriction-r13 BOOLEAN OPTIONAL -- Need ON ]] } CSI-IM-ConfigExt-r12 ::= SEQUENCE { csi-IM-ConfigId-v1250 CSI-IM-ConfigId-v1250, resourceConfig-r12 INTEGER (0..31), subframeConfig-r12 INTEGER (0..154), ..., [[ interferenceMeasRestriction-r13 BOOLEAN OPTIONAL, -- Need ON csi-IM-ConfigId-v1310 CSI-IM-ConfigId-v1310 OPTIONAL -- Need ON ]] } CSI-IM-ConfigId-r11 ::= INTEGER (1..maxCSI-IM-r11) CSI-IM-ConfigId-r12 ::= INTEGER (1..maxCSI-IM-r12) CSI-IM-ConfigId-v1250 ::= INTEGER (maxCSI-IM-r12) CSI-IM-ConfigId-v1310 ::= INTEGER (minCSI-IM-r13..maxCSI-IM-r13) CSI-IM-ConfigId-r13 ::= INTEGER (1..maxCSI-IM-r13) CSI-Process-r11 ::= SEQUENCE { csi-ProcessId-r11 CSI-ProcessId-r11, csi-RS-ConfigNZPId-r11 CSI-RS-ConfigNZPId-r11, csi-IM-ConfigId-r11 CSI-IM-ConfigId-r11, p-C-AndCBSRList-r11 P-C-AndCBSR-Pair-r13a, cqi-ReportBothProc-r11 CQI-ReportBothProc-r11 OPTIONAL, -- Need OR cqi-ReportPeriodicProcId-r11 INTEGER (0..maxCQI-ProcExt-r11) OPTIONAL, -- Need OR cqi-ReportAperiodicProc-r11 CQI-ReportAperiodicProc-r11 OPTIONAL, -- Need OR ..., [[ alternativeCodebookEnabledFor4TXProc-r12 ENUMERATED {true} OPTIONAL, -- Need ON csi-IM-ConfigIdList-r12 CHOICE { release NULL, setup SEQUENCE (SIZE (1..2)) OF CSI-IM-ConfigId-r12 } OPTIONAL, -- Need ON cqi-ReportAperiodicProc2-r12 CHOICE { release NULL, setup CQI-ReportAperiodicProc-r11 } OPTIONAL -- Need ON ]], [[ cqi-ReportAperiodicProc-v1310 CHOICE { release NULL, setup CQI-ReportAperiodicProc-v1310 } OPTIONAL, -- Need ON cqi-ReportAperiodicProc2-v1310 CHOICE { release NULL, setup CQI-ReportAperiodicProc-v1310 } OPTIONAL, -- Need ON eMIMO-Type-r13 CSI-RS-ConfigEMIMO-r13 OPTIONAL -- Need ON ]], [[ eMIMO-Type-v1430 CSI-RS-ConfigEMIMO-v1430 OPTIONAL, -- Need ON eMIMO-Hybrid-r14 CSI-RS-ConfigEMIMO-Hybrid-r14 OPTIONAL, -- Need ON advancedCodebookEnabled-r14 BOOLEAN OPTIONAL -- Need ON ]] } CSI-ProcessId-r11 ::= INTEGER (1..maxCSI-Proc-r11) CSI-RS-Config-r10 ::= SEQUENCE { csi-RS-r10 CHOICE { release NULL, setup SEQUENCE { antennaPortsCount-r10 ENUMERATED {an1, an2, an4, an8}, resourceConfig-r10 INTEGER (0..31), subframeConfig-r10 INTEGER (0..154), p-C-r10 INTEGER (-8..15) } } OPTIONAL, -- Need ON zeroTxPowerCSI-RS-r10 ZeroTxPowerCSI-RS-Conf-r12 OPTIONAL -- Need ON } CSI-RS-Config-v1250 ::= SEQUENCE { zeroTxPowerCSI-RS2-r12 ZeroTxPowerCSI-RS-Conf-r12 OPTIONAL, -- Need ON ds-ZeroTxPowerCSI-RS-r12 CHOICE { release NULL, setup SEQUENCE { zeroTxPowerCSI-RS-List-r12 SEQUENCE (SIZE (1..maxDS-ZTP-CSI-RS-r12)) OF ZeroTxPowerCSI-RS-r12 } } OPTIONAL -- Need ON } CSI-RS-Config-v1310 ::= SEQUENCE { eMIMO-Type-r13 CSI-RS-ConfigEMIMO-r13 OPTIONAL -- Need ON } CSI-RS-Config-v1430 ::= SEQUENCE { eMIMO-Type-v1430 CSI-RS-ConfigEMIMO-v1430 OPTIONAL, -- Need ON eMIMO-Hybrid-r14 CSI-RS-ConfigEMIMO-Hybrid-r14 OPTIONAL, -- Need ON advancedCodebookEnabled-r14 BOOLEAN OPTIONAL -- Need ON } ZeroTxPowerCSI-RS-Conf-r12 ::= CHOICE { release NULL, setup ZeroTxPowerCSI-RS-r12 } ZeroTxPowerCSI-RS-r12 ::= SEQUENCE { zeroTxPowerResourceConfigList-r12 BIT STRING (SIZE (16)), zeroTxPowerSubframeConfig-r12 INTEGER (0..154) } CSI-RS-ConfigEMIMO-r13 ::= CHOICE { release NULL, setup CHOICE { nonPrecoded-r13 CSI-RS-ConfigNonPrecoded-r13, beamformed-r13 CSI-RS-ConfigBeamformed-r13 } } CSI-RS-ConfigEMIMO-v1430 ::= CHOICE { release NULL, setup CHOICE { nonPrecoded-v1430 CSI-RS-ConfigNonPrecoded-v1430, beamformed-v1430 CSI-RS-ConfigBeamformed-v1430 } } CSI-RS-ConfigEMIMO2-r14 ::= CHOICE { release NULL, setup CSI-RS-ConfigBeamformed-r14 } CSI-RS-ConfigEMIMO-Hybrid-r14 ::= CHOICE { release NULL, setup SEQUENCE { periodicityOffsetIndex-r14 INTEGER (0..1023) OPTIONAL, -- Need OR eMIMO-Type2-r14 CSI-RS-ConfigEMIMO2-r14 OPTIONAL -- Need ON } } CSI-RS-ConfigNonPrecoded-r13 ::= SEQUENCE { p-C-AndCBSRList-r13 P-C-AndCBSR-Pair-r13 OPTIONAL, -- Need OR codebookConfigN1-r13 ENUMERATED {n1, n2, n3, n4, n8}, codebookConfigN2-r13 ENUMERATED {n1, n2, n3, n4, n8}, codebookOverSamplingRateConfig-O1-r13 ENUMERATED {n4, n8} OPTIONAL, -- Need OR codebookOverSamplingRateConfig-O2-r13 ENUMERATED {n4, n8} OPTIONAL, -- Need OR codebookConfig-r13 INTEGER (1..4), csi-IM-ConfigIdList-r13 SEQUENCE (SIZE (1..2)) OF CSI-IM-ConfigId-r13 OPTIONAL, -- Need OR csi-RS-ConfigNZP-EMIMO-r13 CSI-RS-ConfigNZP-EMIMO-r13 OPTIONAL -- Need ON } CSI-RS-ConfigNonPrecoded-v1430::= SEQUENCE { csi-RS-ConfigNZP-EMIMO-v1430 CSI-RS-ConfigNZP-EMIMO-v1430 OPTIONAL, -- Need ON codebookConfigN1-v1430 ENUMERATED {n5, n6, n7, n10, n12, n14, n16}, codebookConfigN2-r1430 ENUMERATED {n5, n6, n7 }, nzp-ResourceConfigTM9-Original-v1430 CSI-RS-Config-NZP-v1430 } CSI-RS-ConfigBeamformed-r13 ::= SEQUENCE { csi-RS-ConfigNZPIdListExt-r13 SEQUENCE (SIZE (1..7)) OF CSI-RS-ConfigNZPId-r13 OPTIONAL, -- Need OR csi-IM-ConfigIdList-r13 SEQUENCE (SIZE (1..8)) OF CSI-IM-ConfigId-r13 OPTIONAL, -- Need OR p-C-AndCBSR-PerResourceConfigList-r13 SEQUENCE (SIZE (1..8)) OF P-C-AndCBSR-Pair-r13 OPTIONAL, -- Need OR ace-For4Tx-PerResourceConfigList-r13 SEQUENCE (SIZE (1..7)) OF BOOLEAN OPTIONAL, -- Need OR alternativeCodebookEnabledBeamformed-r13 ENUMERATED {true} OPTIONAL, -- Need OR channelMeasRestriction-r13 ENUMERATED {on} OPTIONAL -- Need OR } CSI-RS-ConfigBeamformed-r14 ::= SEQUENCE { csi-RS-ConfigNZPIdListExt-r14 SEQUENCE (SIZE (1..7)) OF CSI-RS-ConfigNZPId-r13 OPTIONAL, -- Need OR csi-IM-ConfigIdList-r14 SEQUENCE (SIZE (1..8)) OF CSI-IM-ConfigId-r13 OPTIONAL, -- Need OR p-C-AndCBSR-PerResourceConfigList-r14 SEQUENCE (SIZE (1..8)) OF P-C-AndCBSR-Pair-r13 OPTIONAL, -- Need OR ace-For4Tx-PerResourceConfigList-r14 SEQUENCE (SIZE (1..7)) OF BOOLEAN OPTIONAL, -- Need OR alternativeCodebookEnabledBeamformed-r14 ENUMERATED {true} OPTIONAL, -- Need OR channelMeasRestriction-r14 ENUMERATED {on} OPTIONAL, -- Need OR csi-RS-ConfigNZP-ApList-r14 SEQUENCE (SIZE (1..8)) OF CSI-RS-ConfigNZP-r11 OPTIONAL, -- Need OR nzp-ResourceConfigOriginal-v1430 CSI-RS-Config-NZP-v1430 OPTIONAL, -- Need OR csi-RS-NZP-Activation-r14 CSI-RS-ConfigNZP-Activation-r14 OPTIONAL -- Need OR } CSI-RS-ConfigBeamformed-v1430::= SEQUENCE { csi-RS-ConfigNZP-ApList-r14 SEQUENCE (SIZE (1..8)) OF CSI-RS-ConfigNZP-r11 OPTIONAL, -- Need OR nzp-ResourceConfigOriginal-v1430 CSI-RS-Config-NZP-v1430 OPTIONAL, -- Need OR csi-RS-NZP-Activation-r14 CSI-RS-ConfigNZP-Activation-r14 OPTIONAL -- Need OR } CSI-RS-Config-NZP-v1430::= SEQUENCE { transmissionComb-r14 NZP-TransmissionComb-r14 OPTIONAL, -- Need OR frequencyDensity-r14 NZP-FrequencyDensity-r14 OPTIONAL -- Need OR } CSI-RS-ConfigNZP-Activation-r14::= SEQUENCE { csi-RS-NZP-mode-r14 ENUMERATED {semiPersistent, aperiodic}, activatedResources-r14 INTEGER (0..4) } CSI-RS-ConfigNZP-r11 ::= SEQUENCE { csi-RS-ConfigNZPId-r11 CSI-RS-ConfigNZPId-r11, antennaPortsCount-r11 ENUMERATED {an1, an2, an4, an8}, resourceConfig-r11 INTEGER (0..31), subframeConfig-r11 INTEGER (0..154), scramblingIdentity-r11 INTEGER (0..503), qcl-CRS-Info-r11 SEQUENCE { qcl-ScramblingIdentity-r11 INTEGER (0..503), crs-PortsCount-r11 ENUMERATED {n1, n2, n4, spare1}, mbsfn-SubframeConfigList-r11 CHOICE { release NULL, setup SEQUENCE { subframeConfigList MBSFN-SubframeConfigList } } OPTIONAL -- Need ON } OPTIONAL, -- Need OR ..., [[ csi-RS-ConfigNZPId-v1310 CSI-RS-ConfigNZPId-v1310 OPTIONAL -- Need ON ]], [[ transmissionComb-r14 NZP-TransmissionComb-r14 OPTIONAL, -- Need OR frequencyDensity-r14 NZP-FrequencyDensity-r14 OPTIONAL -- Need OR ]], [[ mbsfn-SubframeConfigList-v1430 CHOICE { release NULL, setup SEQUENCE { subframeConfigList-v1430 MBSFN-SubframeConfigList-v1430 } } OPTIONAL -- Need OP ]] } CSI-RS-ConfigNZP-EMIMO-r13 ::= CHOICE { release NULL, setup SEQUENCE { nzp-resourceConfigList-r13 SEQUENCE (SIZE (1..2)) OF NZP-ResourceConfig-r13, cdmType-r13 ENUMERATED {cdm2, cdm4} OPTIONAL -- Need OR } } CSI-RS-ConfigNZP-EMIMO-v1430 ::= SEQUENCE { -- All extensions are for Non-Precoded so could be grouped by setup/ release choice nzp-resourceConfigListExt-r14 SEQUENCE (SIZE (0..4)) OF NZP-ResourceConfig-r13, cdmType-v1430 ENUMERATED {cdm8 } OPTIONAL -- Need OR } NZP-ResourceConfig-r13 ::= SEQUENCE { resourceConfig-r13 ResourceConfig-r13, ..., [[ transmissionComb-r14 NZP-TransmissionComb-r14 OPTIONAL, -- Need OR frequencyDensity-r14 NZP-FrequencyDensity-r14 OPTIONAL -- Need OR ]] } ResourceConfig-r13 ::= INTEGER (0..31) NZP-TransmissionComb-r14 ::= INTEGER (0..2) NZP-FrequencyDensity-r14 ::= ENUMERATED {d1, d2, d3} CSI-RS-ConfigNZPId-r11 ::= INTEGER (1..maxCSI-RS-NZP-r11) CSI-RS-ConfigNZPId-v1310 ::= INTEGER (minCSI-RS-NZP-r13..maxCSI-RS-NZP-r13) CSI-RS-ConfigNZPId-r13 ::= INTEGER (1..maxCSI-RS-NZP-r13) CSI-RS-ConfigZP-r11 ::= SEQUENCE { csi-RS-ConfigZPId-r11 CSI-RS-ConfigZPId-r11, resourceConfigList-r11 BIT STRING (SIZE (16)), subframeConfig-r11 INTEGER (0..154), ... } CSI-RS-ConfigZP-ApList-r14 ::= CHOICE { release NULL, setup SEQUENCE (SIZE (1.. maxCSI-RS-ZP-r11)) OF CSI-RS-ConfigZP-r11 } CSI-RS-ConfigZPId-r11 ::= INTEGER (1..maxCSI-RS-ZP-r11) DataInactivityTimer-r14 ::= ENUMERATED { s1, s2, s3, s5, s7, s10, s15, s20, s40, s50, s60, s80, s100, s120, s150, s180} DMRS-Config-r11 ::= CHOICE { release NULL, setup SEQUENCE { scramblingIdentity-r11 INTEGER (0..503), scramblingIdentity2-r11 INTEGER (0..503) } } DMRS-Config-v1310 ::= SEQUENCE { dmrs-tableAlt-r13 ENUMERATED {true} OPTIONAL -- Need OR } DRB-Identity ::= INTEGER (1..32) EPDCCH-Config-r11 ::= SEQUENCE{ config-r11 CHOICE { release NULL, setup SEQUENCE { subframePatternConfig-r11 CHOICE { release NULL, setup SEQUENCE { subframePattern-r11 MeasSubframePattern-r10 } } OPTIONAL, -- Need ON startSymbol-r11 INTEGER (1..4) OPTIONAL, -- Need OP setConfigToReleaseList-r11 EPDCCH-SetConfigToReleaseList-r11 OPTIONAL, -- Need ON setConfigToAddModList-r11 EPDCCH-SetConfigToAddModList-r11 OPTIONAL -- Need ON } } } EPDCCH-SetConfigToAddModList-r11 ::= SEQUENCE (SIZE(1..maxEPDCCH-Set-r11)) OF EPDCCH-SetConfig-r11 EPDCCH-SetConfigToReleaseList-r11 ::= SEQUENCE (SIZE(1..maxEPDCCH-Set-r11)) OF EPDCCH-SetConfigId-r11 EPDCCH-SetConfig-r11 ::= SEQUENCE { setConfigId-r11 EPDCCH-SetConfigId-r11, transmissionType-r11 ENUMERATED {localised, distributed}, resourceBlockAssignment-r11 SEQUENCE{ numberPRB-Pairs-r11 ENUMERATED {n2, n4, n8}, resourceBlockAssignment-r11 BIT STRING (SIZE(4..38)) }, dmrs-ScramblingSequenceInt-r11 INTEGER (0..503), pucch-ResourceStartOffset-r11 INTEGER (0..2047), re-MappingQCL-ConfigId-r11 PDSCH-RE-MappingQCL-ConfigId-r11 OPTIONAL, -- Need OR ..., [[ csi-RS-ConfigZPId2-r12 CHOICE { release NULL, setup CSI-RS-ConfigZPId-r11 } OPTIONAL -- Need ON ]], [[ numberPRB-Pairs-v1310 CHOICE { release NULL, setup ENUMERATED {n6} } OPTIONAL, -- Need ON mpdcch-config-r13 CHOICE { release NULL, setup SEQUENCE { csi-NumRepetitionCE-r13 ENUMERATED {sf1, sf2, sf4, sf8, sf16, sf32}, mpdcch-pdsch-HoppingConfig-r13 ENUMERATED {on,off}, mpdcch-StartSF-UESS-r13 CHOICE { fdd-r13 ENUMERATED {v1, v1dot5, v2, v2dot5, v4, v5, v8, v10}, tdd-r13 ENUMERATED {v1, v2, v4, v5, v8, v10, v20, spare1} }, mpdcch-NumRepetition-r13 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128, r256}, mpdcch-Narrowband-r13 INTEGER (1.. maxAvailNarrowBands-r13) } } OPTIONAL -- Need ON ]] } EPDCCH-SetConfigId-r11 ::= INTEGER (0..1) EIMTA-MainConfig-r12 ::= CHOICE { release NULL, setup SEQUENCE { eimta-RNTI-r12 C-RNTI, eimta-CommandPeriodicity-r12 ENUMERATED {sf10, sf20, sf40, sf80}, eimta-CommandSubframeSet-r12 BIT STRING (SIZE(10)) } } EIMTA-MainConfigServCell-r12 ::= CHOICE { release NULL, setup SEQUENCE { eimta-UL-DL-ConfigIndex-r12 INTEGER (1..5), eimta-HARQ-ReferenceConfig-r12 ENUMERATED {sa2, sa4, sa5}, mbsfn-SubframeConfigList-v1250 CHOICE { release NULL, setup SEQUENCE { subframeConfigList-r12 MBSFN-SubframeConfigList } } } } LogicalChannelConfig ::= SEQUENCE { ul-SpecificParameters SEQUENCE { priority INTEGER (1..16), prioritisedBitRate ENUMERATED { kBps0, kBps8, kBps16, kBps32, kBps64, kBps128, kBps256, infinity, kBps512-v1020, kBps1024-v1020, kBps2048-v1020, spare5, spare4, spare3, spare2, spare1}, bucketSizeDuration ENUMERATED { ms50, ms100, ms150, ms300, ms500, ms1000, spare2, spare1}, logicalChannelGroup INTEGER (0..3) OPTIONAL -- Need OR } OPTIONAL, -- Cond UL ..., [[ logicalChannelSR-Mask-r9 ENUMERATED {setup} OPTIONAL -- Cond SRmask ]], [[ logicalChannelSR-Prohibit-r12 BOOLEAN OPTIONAL -- Need ON ]], [[ laa-UL-Allowed-r14 BOOLEAN OPTIONAL, -- Need ON bitRateQueryProhibitTimer-r14 ENUMERATED { s0, s0dot4, s0dot8, s1dot6, s3, s6, s12, s30} OPTIONAL --Need OR ]] } LWA-Configuration-r13 ::= CHOICE { release NULL, setup SEQUENCE { lwa-Config-r13 LWA-Config-r13 } } LWA-Config-r13 ::= SEQUENCE { lwa-MobilityConfig-r13 WLAN-MobilityConfig-r13 OPTIONAL, -- Need ON lwa-WT-Counter-r13 INTEGER (0..65535) OPTIONAL, -- Need ON ..., [[ wt-MAC-Address-r14 OCTET STRING (SIZE (6)) OPTIONAL -- Need ON ]] } LWIP-Configuration-r13 ::= CHOICE { release NULL, setup SEQUENCE { lwip-Config-r13 LWIP-Config-r13 } } LWIP-Config-r13 ::= SEQUENCE { lwip-MobilityConfig-r13 WLAN-MobilityConfig-r13 OPTIONAL, -- Need ON tunnelConfigLWIP-r13 TunnelConfigLWIP-r13 OPTIONAL, -- Need ON ... } MAC-MainConfig ::= SEQUENCE { ul-SCH-Config SEQUENCE { maxHARQ-Tx ENUMERATED { n1, n2, n3, n4, n5, n6, n7, n8, n10, n12, n16, n20, n24, n28, spare2, spare1} OPTIONAL, -- Need ON periodicBSR-Timer PeriodicBSR-Timer-r12 OPTIONAL, -- Need ON retxBSR-Timer RetxBSR-Timer-r12, ttiBundling BOOLEAN } OPTIONAL, -- Need ON drx-Config DRX-Config OPTIONAL, -- Need ON timeAlignmentTimerDedicated TimeAlignmentTimer, phr-Config CHOICE { release NULL, setup SEQUENCE { periodicPHR-Timer ENUMERATED {sf10, sf20, sf50, sf100, sf200, sf500, sf1000, infinity}, prohibitPHR-Timer ENUMERATED {sf0, sf10, sf20, sf50, sf100, sf200, sf500, sf1000}, dl-PathlossChange ENUMERATED {dB1, dB3, dB6, infinity} } } OPTIONAL, -- Need ON ..., [[ sr-ProhibitTimer-r9 INTEGER (0..7) OPTIONAL -- Need ON ]], [[ mac-MainConfig-v1020 SEQUENCE { sCellDeactivationTimer-r10 ENUMERATED { rf2, rf4, rf8, rf16, rf32, rf64, rf128, spare} OPTIONAL, -- Need OP extendedBSR-Sizes-r10 ENUMERATED {setup} OPTIONAL, -- Need OR extendedPHR-r10 ENUMERATED {setup} OPTIONAL -- Need OR } OPTIONAL -- Need ON ]], [[ stag-ToReleaseList-r11 STAG-ToReleaseList-r11 OPTIONAL, -- Need ON stag-ToAddModList-r11 STAG-ToAddModList-r11 OPTIONAL, -- Need ON drx-Config-v1130 DRX-Config-v1130 OPTIONAL -- Need ON ]], [[ e-HARQ-Pattern-r12 BOOLEAN OPTIONAL, -- Need ON dualConnectivityPHR CHOICE { release NULL, setup SEQUENCE { phr-ModeOtherCG-r12 ENUMERATED {real, virtual} } } OPTIONAL, -- Need ON logicalChannelSR-Config-r12 CHOICE { release NULL, setup SEQUENCE { logicalChannelSR-ProhibitTimer-r12 ENUMERATED {sf20, sf40, sf64, sf128, sf512, sf1024, sf2560, spare1} } } OPTIONAL -- Need ON ]], [[ drx-Config-v1310 DRX-Config-v1310 OPTIONAL, -- Need ON extendedPHR2-r13 BOOLEAN OPTIONAL, -- Need ON eDRX-Config-CycleStartOffset-r13 CHOICE { release NULL, setup CHOICE { sf5120 INTEGER(0..1), sf10240 INTEGER(0..3) } } OPTIONAL -- Need ON ]], [[ drx-Config-r13 CHOICE { release NULL, setup DRX-Config-r13 } OPTIONAL -- Need ON ]], [[ skipUplinkTx-r14 CHOICE { release NULL, setup SEQUENCE { skipUplinkTxSPS-r14 ENUMERATED {true} OPTIONAL, -- Need OR skipUplinkTxDynamic-r14 ENUMERATED {true} OPTIONAL -- Need OR } } OPTIONAL, -- Need ON dataInactivityTimerConfig-r14 CHOICE { release NULL, setup SEQUENCE { dataInactivityTimer-r14 DataInactivityTimer-r14 } } OPTIONAL -- Need ON ]], [[ rai-Activation-r14 ENUMERATED {true} OPTIONAL -- Need OR ]] } MAC-MainConfigSCell-r11 ::= SEQUENCE { stag-Id-r11 STAG-Id-r11 OPTIONAL, -- Need OP ... } DRX-Config ::= CHOICE { release NULL, setup SEQUENCE { onDurationTimer ENUMERATED { psf1, psf2, psf3, psf4, psf5, psf6, psf8, psf10, psf20, psf30, psf40, psf50, psf60, psf80, psf100, psf200}, drx-InactivityTimer ENUMERATED { psf1, psf2, psf3, psf4, psf5, psf6, psf8, psf10, psf20, psf30, psf40, psf50, psf60, psf80, psf100, psf200, psf300, psf500, psf750, psf1280, psf1920, psf2560, psf0-v1020, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}, drx-RetransmissionTimer ENUMERATED { psf1, psf2, psf4, psf6, psf8, psf16, psf24, psf33}, longDRX-CycleStartOffset CHOICE { sf10 INTEGER(0..9), sf20 INTEGER(0..19), sf32 INTEGER(0..31), sf40 INTEGER(0..39), sf64 INTEGER(0..63), sf80 INTEGER(0..79), sf128 INTEGER(0..127), sf160 INTEGER(0..159), sf256 INTEGER(0..255), sf320 INTEGER(0..319), sf512 INTEGER(0..511), sf640 INTEGER(0..639), sf1024 INTEGER(0..1023), sf1280 INTEGER(0..1279), sf2048 INTEGER(0..2047), sf2560 INTEGER(0..2559) }, shortDRX SEQUENCE { shortDRX-Cycle ENUMERATED { sf2, sf5, sf8, sf10, sf16, sf20, sf32, sf40, sf64, sf80, sf128, sf160, sf256, sf320, sf512, sf640}, drxShortCycleTimer INTEGER (1..16) } OPTIONAL -- Need OR } } DRX-Config-v1130 ::= SEQUENCE { drx-RetransmissionTimer-v1130 ENUMERATED {psf0-v1130} OPTIONAL, --Need OR longDRX-CycleStartOffset-v1130 CHOICE { sf60-v1130 INTEGER(0..59), sf70-v1130 INTEGER(0..69) } OPTIONAL, --Need OR shortDRX-Cycle-v1130 ENUMERATED {sf4-v1130} OPTIONAL --Need OR } DRX-Config-v1310 ::= SEQUENCE { longDRX-CycleStartOffset-v1310 SEQUENCE { sf60-v1310 INTEGER(0..59) } OPTIONAL --Need OR } DRX-Config-r13 ::= SEQUENCE { onDurationTimer-v1310 ENUMERATED {psf300, psf400, psf500, psf600, psf800, psf1000, psf1200, psf1600} OPTIONAL, --Need OR drx-RetransmissionTimer-v1310 ENUMERATED {psf40, psf64, psf80, psf96, psf112, psf128, psf160, psf320} OPTIONAL, --Need OR drx-ULRetransmissionTimer-r13 ENUMERATED {psf0, psf1, psf2, psf4, psf6, psf8, psf16, psf24, psf33, psf40, psf64, psf80, psf96, psf112, psf128, psf160, psf320} OPTIONAL --Need OR } PeriodicBSR-Timer-r12 ::= ENUMERATED { sf5, sf10, sf16, sf20, sf32, sf40, sf64, sf80, sf128, sf160, sf320, sf640, sf1280, sf2560, infinity, spare1} RetxBSR-Timer-r12 ::= ENUMERATED { sf320, sf640, sf1280, sf2560, sf5120, sf10240, spare2, spare1} STAG-ToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxSTAG-r11)) OF STAG-Id-r11 STAG-ToAddModList-r11 ::= SEQUENCE (SIZE (1..maxSTAG-r11)) OF STAG-ToAddMod-r11 STAG-ToAddMod-r11 ::= SEQUENCE { stag-Id-r11 STAG-Id-r11, timeAlignmentTimerSTAG-r11 TimeAlignmentTimer, ... } STAG-Id-r11::= INTEGER (1..maxSTAG-r11) P-C-AndCBSR-r11 ::= SEQUENCE { p-C-r11 INTEGER (-8..15), codebookSubsetRestriction-r11 BIT STRING } P-C-AndCBSR-r13 ::= SEQUENCE { p-C-r13 INTEGER (-8..15), cbsr-Selection-r13 CHOICE{ nonPrecoded-r13 SEQUENCE { codebookSubsetRestriction1-r13 BIT STRING, codebookSubsetRestriction2-r13 BIT STRING }, beamformedK1a-r13 SEQUENCE { codebookSubsetRestriction3-r13 BIT STRING }, beamformedKN-r13 SEQUENCE { codebookSubsetRestriction-r13 BIT STRING } }, ... } P-C-AndCBSR-Pair-r13a ::= SEQUENCE (SIZE (1..2)) OF P-C-AndCBSR-r11 P-C-AndCBSR-Pair-r13 ::= SEQUENCE (SIZE (1..2)) OF P-C-AndCBSR-r13 PDCCH-ConfigSCell-r13 ::= SEQUENCE { skipMonitoringDCI-format0-1A-r13 ENUMERATED {true} OPTIONAL -- Need OR } PDCCH-ConfigLAA-r14 ::= SEQUENCE { maxNumberOfSchedSubframes-Format0B-r14 ENUMERATED {sf2, sf3, sf4} OPTIONAL, -- Need OR maxNumberOfSchedSubframes-Format4B-r14 ENUMERATED {sf2, sf3, sf4} OPTIONAL, -- Need OR skipMonitoringDCI-Format0A-r14 ENUMERATED {true} OPTIONAL, -- Need OR skipMonitoringDCI-Format4A-r14 ENUMERATED {true} OPTIONAL, -- Need OR pdcch-CandidateReductions-Format0A-r14 PDCCH-CandidateReductions-r13 OPTIONAL, -- Need ON pdcch-CandidateReductions-Format4A-r14 PDCCH-CandidateReductionsLAA-UL-r14 OPTIONAL, -- Need ON pdcch-CandidateReductions-Format0B-r14 PDCCH-CandidateReductionsLAA-UL-r14 OPTIONAL, -- Need ON pdcch-CandidateReductions-Format4B-r14 PDCCH-CandidateReductionsLAA-UL-r14 OPTIONAL -- Need ON } PDCCH-CandidateReductionValue-r13 ::= ENUMERATED {n0, n33, n66, n100} PDCCH-CandidateReductionValue-r14 ::= ENUMERATED {n0, n50, n100, n150} PDCCH-CandidateReductions-r13 ::= CHOICE { release NULL, setup SEQUENCE { pdcch-candidateReductionAL1-r13 PDCCH-CandidateReductionValue-r13, pdcch-candidateReductionAL2-r13 PDCCH-CandidateReductionValue-r13, pdcch-candidateReductionAL3-r13 PDCCH-CandidateReductionValue-r13, pdcch-candidateReductionAL4-r13 PDCCH-CandidateReductionValue-r13, pdcch-candidateReductionAL5-r13 PDCCH-CandidateReductionValue-r13 } } PDCCH-CandidateReductionsLAA-UL-r14 ::= CHOICE { release NULL, setup SEQUENCE { pdcch-candidateReductionAL1-r14 PDCCH-CandidateReductionValue-r13, pdcch-candidateReductionAL2-r14 PDCCH-CandidateReductionValue-r13, pdcch-candidateReductionAL3-r14 PDCCH-CandidateReductionValue-r14, pdcch-candidateReductionAL4-r14 PDCCH-CandidateReductionValue-r14, pdcch-candidateReductionAL5-r14 PDCCH-CandidateReductionValue-r14 } } PDCP-Config ::= SEQUENCE { discardTimer ENUMERATED { ms50, ms100, ms150, ms300, ms500, ms750, ms1500, infinity } OPTIONAL, -- Cond Setup rlc-AM SEQUENCE { statusReportRequired BOOLEAN } OPTIONAL, -- Cond Rlc-AM rlc-UM SEQUENCE { pdcp-SN-Size ENUMERATED {len7bits, len12bits} } OPTIONAL, -- Cond Rlc-UM headerCompression CHOICE { notUsed NULL, rohc SEQUENCE { maxCID INTEGER (1..16383) DEFAULT 15, profiles SEQUENCE { profile0x0001 BOOLEAN, profile0x0002 BOOLEAN, profile0x0003 BOOLEAN, profile0x0004 BOOLEAN, profile0x0006 BOOLEAN, profile0x0101 BOOLEAN, profile0x0102 BOOLEAN, profile0x0103 BOOLEAN, profile0x0104 BOOLEAN }, ... } }, ..., [[ rn-IntegrityProtection-r10 ENUMERATED {enabled} OPTIONAL -- Cond RN ]], [[ pdcp-SN-Size-v1130 ENUMERATED {len15bits} OPTIONAL -- Cond Rlc-AM2 ]], [[ ul-DataSplitDRB-ViaSCG-r12 BOOLEAN OPTIONAL, -- Need ON t-Reordering-r12 ENUMERATED { ms0, ms20, ms40, ms60, ms80, ms100, ms120, ms140, ms160, ms180, ms200, ms220, ms240, ms260, ms280, ms300, ms500, ms750, spare14, spare13, spare12, spare11, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1} OPTIONAL -- Cond SetupS ]], [[ ul-DataSplitThreshold-r13 CHOICE { release NULL, setup ENUMERATED { b0, b100, b200, b400, b800, b1600, b3200, b6400, b12800, b25600, b51200, b102400, b204800, b409600, b819200, spare1} } OPTIONAL, -- Need ON pdcp-SN-Size-v1310 ENUMERATED {len18bits} OPTIONAL, -- Cond Rlc-AM3 statusFeedback-r13 CHOICE { release NULL, setup SEQUENCE { statusPDU-TypeForPolling-r13 ENUMERATED {type1, type2} OPTIONAL, -- Need ON statusPDU-Periodicity-Type1-r13 ENUMERATED { ms5, ms10, ms20, ms30, ms40, ms50, ms60, ms70, ms80, ms90, ms100, ms150, ms200, ms300, ms500, ms1000, ms2000, ms5000, ms10000, ms20000, ms50000} OPTIONAL, -- Need ON statusPDU-Periodicity-Type2-r13 ENUMERATED { ms5, ms10, ms20, ms30, ms40, ms50, ms60, ms70, ms80, ms90, ms100, ms150, ms200, ms300, ms500, ms1000, ms2000, ms5000, ms10000, ms20000, ms50000} OPTIONAL, -- Need ON statusPDU-Periodicity-Offset-r13 ENUMERATED { ms1, ms2, ms5, ms10, ms25, ms50, ms100, ms250, ms500, ms2500, ms5000, ms25000} OPTIONAL -- Need ON } } OPTIONAL -- Need ON ]], [[ ul-LWA-Config-r14 CHOICE { release NULL, setup SEQUENCE { ul-LWA-DRB-ViaWLAN-r14 BOOLEAN, ul-LWA-DataSplitThreshold-r14 ENUMERATED { b0, b100, b200, b400, b800, b1600, b3200, b6400, b12800, b25600, b51200, b102400, b204800, b409600, b819200 } OPTIONAL -- Need OR } } OPTIONAL, -- Need ON uplinkOnlyHeaderCompression-r14 CHOICE { notUsed-r14 NULL, rohc-r14 SEQUENCE { maxCID-r14 INTEGER (1..16383) DEFAULT 15, profiles-r14 SEQUENCE { profile0x0006-r14 BOOLEAN }, ... } } OPTIONAL -- Need ON ]] } PDSCH-ConfigCommon ::= SEQUENCE { referenceSignalPower INTEGER (-60..50), p-b INTEGER (0..3) } PDSCH-ConfigCommon-v1310 ::= SEQUENCE { pdsch-maxNumRepetitionCEmodeA-r13 ENUMERATED { r16, r32 } OPTIONAL, -- Need OR pdsch-maxNumRepetitionCEmodeB-r13 ENUMERATED { r192, r256, r384, r512, r768, r1024, r1536, r2048} OPTIONAL -- Need OR } PDSCH-ConfigDedicated::= SEQUENCE { p-a ENUMERATED { dB-6, dB-4dot77, dB-3, dB-1dot77, dB0, dB1, dB2, dB3} } PDSCH-ConfigDedicated-v1130 ::= SEQUENCE { dmrs-ConfigPDSCH-r11 DMRS-Config-r11 OPTIONAL, -- Need ON qcl-Operation ENUMERATED {typeA, typeB} OPTIONAL, -- Need OR re-MappingQCLConfigToReleaseList-r11 RE-MappingQCLConfigToReleaseList-r11 OPTIONAL, -- Need ON re-MappingQCLConfigToAddModList-r11 RE-MappingQCLConfigToAddModList-r11 OPTIONAL -- Need ON } PDSCH-ConfigDedicated-v1280 ::= SEQUENCE { tbsIndexAlt-r12 ENUMERATED {a26, a33} OPTIONAL -- Need OR } PDSCH-ConfigDedicated-v1310 ::= SEQUENCE { dmrs-ConfigPDSCH-v1310 DMRS-Config-v1310 OPTIONAL -- Need ON } PDSCH-ConfigDedicated-v1430 ::= SEQUENCE { ce-PDSCH-MaxBandwidth-r14 ENUMERATED {bw5, bw20} OPTIONAL, -- Need OP ce-PDSCH-TenProcesses-r14 ENUMERATED {on} OPTIONAL, -- Need OR ce-HARQ-AckBundling-r14 ENUMERATED {on} OPTIONAL, -- Need OR ce-SchedulingEnhancement-r14 ENUMERATED {range1, range2} OPTIONAL, -- Need OR tbsIndexAlt2-r14 ENUMERATED {b33} OPTIONAL -- Need OR } PDSCH-ConfigDedicatedSCell-v1430 ::= SEQUENCE { tbsIndexAlt2-r14 ENUMERATED {b33} OPTIONAL -- Need OR } RE-MappingQCLConfigToAddModList-r11 ::= SEQUENCE (SIZE (1..maxRE-MapQCL-r11)) OF PDSCH-RE-MappingQCL-Config-r11 RE-MappingQCLConfigToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxRE-MapQCL-r11)) OF PDSCH-RE-MappingQCL-ConfigId-r11 PDSCH-RE-MappingQCL-Config-r11 ::= SEQUENCE { pdsch-RE-MappingQCL-ConfigId-r11 PDSCH-RE-MappingQCL-ConfigId-r11, optionalSetOfFields-r11 SEQUENCE { crs-PortsCount-r11 ENUMERATED {n1, n2, n4, spare1}, crs-FreqShift-r11 INTEGER (0..5), mbsfn-SubframeConfigList-r11 CHOICE { release NULL, setup SEQUENCE { subframeConfigList MBSFN-SubframeConfigList } } OPTIONAL, -- Need ON pdsch-Start-r11 ENUMERATED {reserved, n1, n2, n3, n4, assigned} } OPTIONAL, -- Need OP csi-RS-ConfigZPId-r11 CSI-RS-ConfigZPId-r11, qcl-CSI-RS-ConfigNZPId-r11 CSI-RS-ConfigNZPId-r11 OPTIONAL, -- Need OR ..., [[ mbsfn-SubframeConfigList-v1430 CHOICE { release NULL, setup SEQUENCE { subframeConfigList-v1430 MBSFN-SubframeConfigList-v1430 } } OPTIONAL -- Need OP ]] } PDSCH-RE-MappingQCL-ConfigId-r11 ::= INTEGER (1..maxRE-MapQCL-r11) PerCC-GapIndicationList-r14 ::= SEQUENCE (SIZE (1..maxServCell-r13)) OF PerCC-GapIndication-r14 PerCC-GapIndication-r14 ::= SEQUENCE { servCellId-r14 ServCellIndex-r13, gapIndication-r14 ENUMERATED {gap, ncsg, nogap-noNcsg} } PHICH-Config ::= SEQUENCE { phich-Duration ENUMERATED {normal, extended}, phich-Resource ENUMERATED {oneSixth, half, one, two} } PhysicalConfigDedicated ::= SEQUENCE { pdsch-ConfigDedicated PDSCH-ConfigDedicated OPTIONAL, -- Need ON pucch-ConfigDedicated PUCCH-ConfigDedicated OPTIONAL, -- Need ON pusch-ConfigDedicated PUSCH-ConfigDedicated OPTIONAL, -- Need ON uplinkPowerControlDedicated UplinkPowerControlDedicated OPTIONAL, -- Need ON tpc-PDCCH-ConfigPUCCH TPC-PDCCH-Config OPTIONAL, -- Need ON tpc-PDCCH-ConfigPUSCH TPC-PDCCH-Config OPTIONAL, -- Need ON cqi-ReportConfig CQI-ReportConfig OPTIONAL, -- Cond CQI-r8 soundingRS-UL-ConfigDedicated SoundingRS-UL-ConfigDedicated OPTIONAL, -- Need ON antennaInfo CHOICE { explicitValue AntennaInfoDedicated, defaultValue NULL } OPTIONAL, -- Cond AI-r8 schedulingRequestConfig SchedulingRequestConfig OPTIONAL, -- Need ON ..., [[ cqi-ReportConfig-v920 CQI-ReportConfig-v920 OPTIONAL, -- Cond CQI-r8 antennaInfo-v920 AntennaInfoDedicated-v920 OPTIONAL -- Cond AI-r8 ]], [[ antennaInfo-r10 CHOICE { explicitValue-r10 AntennaInfoDedicated-r10, defaultValue NULL } OPTIONAL, -- Cond AI-r10 antennaInfoUL-r10 AntennaInfoUL-r10 OPTIONAL, -- Need ON cif-Presence-r10 BOOLEAN OPTIONAL, -- Need ON cqi-ReportConfig-r10 CQI-ReportConfig-r10 OPTIONAL, -- Cond CQI-r10 csi-RS-Config-r10 CSI-RS-Config-r10 OPTIONAL, -- Need ON pucch-ConfigDedicated-v1020 PUCCH-ConfigDedicated-v1020 OPTIONAL, -- Need ON pusch-ConfigDedicated-v1020 PUSCH-ConfigDedicated-v1020 OPTIONAL, -- Need ON schedulingRequestConfig-v1020 SchedulingRequestConfig-v1020 OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicated-v1020 SoundingRS-UL-ConfigDedicated-v1020 OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicatedAperiodic-r10 SoundingRS-UL-ConfigDedicatedAperiodic-r10 OPTIONAL, -- Need ON uplinkPowerControlDedicated-v1020 UplinkPowerControlDedicated-v1020 OPTIONAL -- Need ON ]], [[ additionalSpectrumEmissionCA-r10 CHOICE { release NULL, setup SEQUENCE { additionalSpectrumEmissionPCell-r10 AdditionalSpectrumEmission } } OPTIONAL -- Need ON ]], [[ -- DL configuration as well as configuration applicable for DL and UL csi-RS-ConfigNZPToReleaseList-r11 CSI-RS-ConfigNZPToReleaseList-r11 OPTIONAL, -- Need ON csi-RS-ConfigNZPToAddModList-r11 CSI-RS-ConfigNZPToAddModList-r11 OPTIONAL, -- Need ON csi-RS-ConfigZPToReleaseList-r11 CSI-RS-ConfigZPToReleaseList-r11 OPTIONAL, -- Need ON csi-RS-ConfigZPToAddModList-r11 CSI-RS-ConfigZPToAddModList-r11 OPTIONAL, -- Need ON epdcch-Config-r11 EPDCCH-Config-r11 OPTIONAL, -- Need ON pdsch-ConfigDedicated-v1130 PDSCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON -- UL configuration cqi-ReportConfig-v1130 CQI-ReportConfig-v1130 OPTIONAL, -- Need ON pucch-ConfigDedicated-v1130 PUCCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON pusch-ConfigDedicated-v1130 PUSCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON uplinkPowerControlDedicated-v1130 UplinkPowerControlDedicated-v1130 OPTIONAL -- Need ON ]], [[ antennaInfo-v1250 AntennaInfoDedicated-v1250 OPTIONAL, -- Cond AI-r10 eimta-MainConfig-r12 EIMTA-MainConfig-r12 OPTIONAL, -- Need ON eimta-MainConfigPCell-r12 EIMTA-MainConfigServCell-r12 OPTIONAL, -- Need ON pucch-ConfigDedicated-v1250 PUCCH-ConfigDedicated-v1250 OPTIONAL, -- Need ON cqi-ReportConfigPCell-v1250 CQI-ReportConfig-v1250 OPTIONAL, -- Need ON uplinkPowerControlDedicated-v1250 UplinkPowerControlDedicated-v1250 OPTIONAL, -- Need ON pusch-ConfigDedicated-v1250 PUSCH-ConfigDedicated-v1250 OPTIONAL, -- Need ON csi-RS-Config-v1250 CSI-RS-Config-v1250 OPTIONAL -- Need ON ]], [[ pdsch-ConfigDedicated-v1280 PDSCH-ConfigDedicated-v1280 OPTIONAL -- Need ON ]], [[ pdsch-ConfigDedicated-v1310 PDSCH-ConfigDedicated-v1310 OPTIONAL, -- Need ON pucch-ConfigDedicated-r13 PUCCH-ConfigDedicated-r13 OPTIONAL, -- Need ON pusch-ConfigDedicated-r13 PUSCH-ConfigDedicated-r13 OPTIONAL, -- Need ON pdcch-CandidateReductions-r13 PDCCH-CandidateReductions-r13 OPTIONAL, -- Need ON cqi-ReportConfig-v1310 CQI-ReportConfig-v1310 OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicated-v1310 SoundingRS-UL-ConfigDedicated-v1310 OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicatedUpPTsExt-r13 SoundingRS-UL-ConfigDedicatedUpPTsExt-r13 OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicatedAperiodic-v1310 SoundingRS-UL-ConfigDedicatedAperiodic-v1310 OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13 SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13 OPTIONAL, -- Need ON csi-RS-Config-v1310 CSI-RS-Config-v1310 OPTIONAL, -- Need ON ce-Mode-r13 CHOICE { release NULL, setup ENUMERATED {ce-ModeA,ce-ModeB} } OPTIONAL, -- Need ON csi-RS-ConfigNZPToAddModListExt-r13 CSI-RS-ConfigNZPToAddModListExt-r13 OPTIONAL, -- Need ON csi-RS-ConfigNZPToReleaseListExt-r13 CSI-RS-ConfigNZPToReleaseListExt-r13 OPTIONAL -- Need ON ]], [[ cqi-ReportConfig-v1320 CQI-ReportConfig-v1320 OPTIONAL -- Need ON ]], [[ typeA-SRS-TPC-PDCCH-Group-r14 CHOICE { release NULL, setup SEQUENCE (SIZE (1..32)) OF SRS-TPC-PDCCH-Config-r14 } OPTIONAL, -- Need ON must-Config-r14 CHOICE{ release NULL, setup SEQUENCE { k-max-r14 ENUMERATED {l1, l3}, p-a-must-r14 ENUMERATED { dB-6, dB-4dot77, dB-3, dB-1dot77, dB0, dB1, dB2, dB3} OPTIONAL -- Need ON } } OPTIONAL, -- Need ON pusch-EnhancementsConfig-r14 PUSCH-EnhancementsConfig-r14 OPTIONAL, -- Need ON ce-pdsch-pusch-EnhancementConfig-r14 ENUMERATED {on} OPTIONAL, -- Need OR antennaInfo-v1430 AntennaInfoDedicated-v1430 OPTIONAL, -- Need ON pucch-ConfigDedicated-v1430 PUCCH-ConfigDedicated-v1430 OPTIONAL, -- Need ON pdsch-ConfigDedicated-v1430 PDSCH-ConfigDedicated-v1430 OPTIONAL, -- Need ON pusch-ConfigDedicated-v1430 PUSCH-ConfigDedicated-v1430 OPTIONAL, -- Need ON soundingRS-UL-PeriodicConfigDedicatedList-r14 SEQUENCE (SIZE (1..2)) OF SoundingRS-UL-ConfigDedicated OPTIONAL, -- Cond PeriodicSRSPCell soundingRS-UL-PeriodicConfigDedicatedUpPTsExtList-r14 SEQUENCE (SIZE (1..4)) OF SoundingRS-UL-ConfigDedicatedUpPTsExt-r13 OPTIONAL, -- Cond PeriodicSRSExt soundingRS-UL-AperiodicConfigDedicatedList-r14 SEQUENCE (SIZE (1..2)) OF SoundingRS-UL-ConfigDedicatedAperiodic-r10 OPTIONAL, -- Cond AperiodicSRS soundingRS-UL-ConfigDedicatedApUpPTsExtList-r14 SEQUENCE (SIZE (1..4)) OF SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13 OPTIONAL, -- Cond AperiodicSRSExt csi-RS-Config-v1430 CSI-RS-Config-v1430 OPTIONAL, -- Need ON csi-RS-ConfigZP-ApList-r14 CSI-RS-ConfigZP-ApList-r14 OPTIONAL, -- Need ON cqi-ReportConfig-v1430 CQI-ReportConfig-v1430 OPTIONAL, -- Need ON semiOpenLoop-r14 BOOLEAN OPTIONAL -- Need ON ]] } PhysicalConfigDedicated-v1370 ::= SEQUENCE { pucch-ConfigDedicated-v1370 PUCCH-ConfigDedicated-v1370 OPTIONAL -- Need ON } PhysicalConfigDedicatedSCell-r10 ::= SEQUENCE { -- DL configuration as well as configuration applicable for DL and UL nonUL-Configuration-r10 SEQUENCE { antennaInfo-r10 AntennaInfoDedicated-r10 OPTIONAL, -- Need ON crossCarrierSchedulingConfig-r10 CrossCarrierSchedulingConfig-r10 OPTIONAL, -- Need ON csi-RS-Config-r10 CSI-RS-Config-r10 OPTIONAL, -- Need ON pdsch-ConfigDedicated-r10 PDSCH-ConfigDedicated OPTIONAL -- Need ON } OPTIONAL, -- Cond SCellAdd -- UL configuration ul-Configuration-r10 SEQUENCE { antennaInfoUL-r10 AntennaInfoUL-r10 OPTIONAL, -- Need ON pusch-ConfigDedicatedSCell-r10 PUSCH-ConfigDedicatedSCell-r10 OPTIONAL, -- Cond PUSCH-SCell1 uplinkPowerControlDedicatedSCell-r10 UplinkPowerControlDedicatedSCell-r10 OPTIONAL, -- Need ON cqi-ReportConfigSCell-r10 CQI-ReportConfigSCell-r10 OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicated-r10 SoundingRS-UL-ConfigDedicated OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicated-v1020 SoundingRS-UL-ConfigDedicated-v1020 OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicatedAperiodic-r10 SoundingRS-UL-ConfigDedicatedAperiodic-r10 OPTIONAL -- Need ON } OPTIONAL, -- Cond CommonUL ..., [[ -- DL configuration as well as configuration applicable for DL and UL csi-RS-ConfigNZPToReleaseList-r11 CSI-RS-ConfigNZPToReleaseList-r11 OPTIONAL, -- Need ON csi-RS-ConfigNZPToAddModList-r11 CSI-RS-ConfigNZPToAddModList-r11 OPTIONAL, -- Need ON csi-RS-ConfigZPToReleaseList-r11 CSI-RS-ConfigZPToReleaseList-r11 OPTIONAL, -- Need ON csi-RS-ConfigZPToAddModList-r11 CSI-RS-ConfigZPToAddModList-r11 OPTIONAL, -- Need ON epdcch-Config-r11 EPDCCH-Config-r11 OPTIONAL, -- Need ON pdsch-ConfigDedicated-v1130 PDSCH-ConfigDedicated-v1130 OPTIONAL, -- Need ON -- UL configuration cqi-ReportConfig-v1130 CQI-ReportConfig-v1130 OPTIONAL, -- Need ON pusch-ConfigDedicated-v1130 PUSCH-ConfigDedicated-v1130 OPTIONAL, -- Cond PUSCH-SCell1 uplinkPowerControlDedicatedSCell-v1130 UplinkPowerControlDedicated-v1130 OPTIONAL -- Need ON ]], [[ antennaInfo-v1250 AntennaInfoDedicated-v1250 OPTIONAL, -- Need ON eimta-MainConfigSCell-r12 EIMTA-MainConfigServCell-r12 OPTIONAL, -- Need ON cqi-ReportConfigSCell-v1250 CQI-ReportConfig-v1250 OPTIONAL, -- Need ON uplinkPowerControlDedicatedSCell-v1250 UplinkPowerControlDedicated-v1250 OPTIONAL, -- Need ON csi-RS-Config-v1250 CSI-RS-Config-v1250 OPTIONAL -- Need ON ]], [[ pdsch-ConfigDedicated-v1280 PDSCH-ConfigDedicated-v1280 OPTIONAL -- Need ON ]], [[ pucch-Cell-r13 ENUMERATED {true} OPTIONAL, -- Cond PUCCH-SCell1 pucch-SCell CHOICE{ release NULL, setup SEQUENCE { pucch-ConfigDedicated-r13 PUCCH-ConfigDedicated-r13 OPTIONAL, -- Need ON schedulingRequestConfig-r13 SchedulingRequestConfigSCell-r13 OPTIONAL, -- Need ON tpc-PDCCH-ConfigPUCCH-SCell-r13 TPC-PDCCH-ConfigSCell-r13 OPTIONAL, -- Need ON pusch-ConfigDedicated-r13 PUSCH-ConfigDedicated-r13 OPTIONAL, -- Cond PUSCH-SCell uplinkPowerControlDedicated-r13 UplinkPowerControlDedicatedSCell-v1310 OPTIONAL -- Need ON } } OPTIONAL, -- Need ON crossCarrierSchedulingConfig-r13 CrossCarrierSchedulingConfig-r13 OPTIONAL, -- Cond Cross-Carrier-Config pdcch-ConfigSCell-r13 PDCCH-ConfigSCell-r13 OPTIONAL, -- Need ON cqi-ReportConfig-v1310 CQI-ReportConfig-v1310 OPTIONAL, -- Need ON pdsch-ConfigDedicated-v1310 PDSCH-ConfigDedicated-v1310 OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicated-v1310 SoundingRS-UL-ConfigDedicated-v1310 OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicatedUpPTsExt-r13 SoundingRS-UL-ConfigDedicatedUpPTsExt-r13 OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicatedAperiodic-v1310 SoundingRS-UL-ConfigDedicatedAperiodic-v1310 OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13 SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13 OPTIONAL, -- Need ON csi-RS-Config-v1310 CSI-RS-Config-v1310 OPTIONAL, -- Need ON laa-SCellConfiguration-r13 LAA-SCellConfiguration-r13 OPTIONAL, -- Need ON csi-RS-ConfigNZPToAddModListExt-r13 CSI-RS-ConfigNZPToAddModListExt-r13 OPTIONAL, -- Need ON csi-RS-ConfigNZPToReleaseListExt-r13 CSI-RS-ConfigNZPToReleaseListExt-r13 OPTIONAL -- Need ON ]], [[ cqi-ReportConfig-v1320 CQI-ReportConfig-v1320 OPTIONAL -- Need ON ]], [[ laa-SCellConfiguration-v1430 LAA-SCellConfiguration-v1430 OPTIONAL, -- Need ON typeB-SRS-TPC-PDCCH-Config-r14 SRS-TPC-PDCCH-Config-r14 OPTIONAL, -- Need ON uplinkPUSCH-LessPowerControlDedicated-v1430 UplinkPUSCH-LessPowerControlDedicated-v1430 OPTIONAL, -- Need ON soundingRS-UL-PeriodicConfigDedicatedList-r14 SEQUENCE (SIZE (1..2)) OF SoundingRS-UL-ConfigDedicated OPTIONAL, -- Cond PeriodicSRS soundingRS-UL-PeriodicConfigDedicatedUpPTsExtList-r14 SEQUENCE (SIZE (1..4)) OF SoundingRS-UL-ConfigDedicatedUpPTsExt-r13 OPTIONAL, -- Cond PeriodicSRSExt soundingRS-UL-AperiodicConfigDedicatedList-r14 SEQUENCE (SIZE (1..2)) OF SoundingRS-AperiodicSet-r14 OPTIONAL, -- Cond AperiodicSRS soundingRS-UL-ConfigDedicatedApUpPTsExtList-r14 SEQUENCE (SIZE (1..4)) OF SoundingRS-AperiodicSetUpPTsExt-r14 OPTIONAL, -- Cond AperiodicSRSExt must-Config-r14 CHOICE{ release NULL, setup SEQUENCE { k-max-r14 ENUMERATED {l1, l3}, p-a-must-r14 ENUMERATED { dB-6, dB-4dot77, dB-3, dB-1dot77, dB0, dB1, dB2, dB3} OPTIONAL -- Need ON } } OPTIONAL, -- Need ON pusch-ConfigDedicated-v1430 PUSCH-ConfigDedicatedSCell-v1430 OPTIONAL, -- Need ON csi-RS-Config-v1430 CSI-RS-Config-v1430 OPTIONAL, -- Need ON csi-RS-ConfigZP-ApList-r14 CSI-RS-ConfigZP-ApList-r14 OPTIONAL, -- Need ON cqi-ReportConfig-v1430 CQI-ReportConfig-v1430 OPTIONAL, -- Need ON semiOpenLoop-r14 BOOLEAN OPTIONAL, -- Need ON pdsch-ConfigDedicatedSCell-v1430 PDSCH-ConfigDedicatedSCell-v1430 OPTIONAL -- Need ON ]] } PhysicalConfigDedicatedSCell-v1370 ::= SEQUENCE { pucch-SCell-v1370 CHOICE{ release NULL, setup SEQUENCE { pucch-ConfigDedicated-v1370 PUCCH-ConfigDedicated-v1370 OPTIONAL -- Need ON } } } LAA-SCellConfiguration-r13 ::= SEQUENCE { subframeStartPosition-r13 ENUMERATED {s0, s07}, laa-SCellSubframeConfig-r13 BIT STRING (SIZE(8)) } LAA-SCellConfiguration-v1430 ::= SEQUENCE { crossCarrierSchedulingConfig-UL-r14 CHOICE { release NULL, setup SEQUENCE { crossCarrierSchedulingConfigLAA-UL-r14 CrossCarrierSchedulingConfigLAA-UL-r14 } } OPTIONAL, -- Cond Cross-Carrier-ConfigUL lbt-Config-r14 LBT-Config-r14 OPTIONAL, -- Need ON pdcch-ConfigLAA-r14 PDCCH-ConfigLAA-r14 OPTIONAL, -- Need ON absenceOfAnyOtherTechnology-r14 ENUMERATED {true} OPTIONAL, -- Need OR soundingRS-UL-ConfigDedicatedAperiodic-v1430 SoundingRS-UL-ConfigDedicatedAperiodic-v1430 OPTIONAL -- Need ON } LBT-Config-r14 ::= CHOICE{ maxEnergyDetectionThreshold-r14 INTEGER(-85..-52), energyDetectionThresholdOffset-r14 INTEGER(-13..20) } CSI-RS-ConfigNZPToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-NZP-r11)) OF CSI-RS-ConfigNZP-r11 CSI-RS-ConfigNZPToAddModListExt-r13 ::= SEQUENCE (SIZE (1..maxCSI-RS-NZP-v1310)) OF CSI-RS-ConfigNZP-r11 CSI-RS-ConfigNZPToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-NZP-r11)) OF CSI-RS-ConfigNZPId-r11 CSI-RS-ConfigNZPToReleaseListExt-r13 ::= SEQUENCE (SIZE (1..maxCSI-RS-NZP-v1310)) OF CSI-RS-ConfigNZPId-v1310 CSI-RS-ConfigZPToAddModList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-ZP-r11)) OF CSI-RS-ConfigZP-r11 CSI-RS-ConfigZPToReleaseList-r11 ::= SEQUENCE (SIZE (1..maxCSI-RS-ZP-r11)) OF CSI-RS-ConfigZPId-r11 SoundingRS-AperiodicSet-r14 ::= SEQUENCE{ srs-CC-SetIndexList-r14 SEQUENCE (SIZE (1..4)) OF SRS-CC-SetIndex-r14 OPTIONAL, -- Cond SRS-Trigger-TypeA soundingRS-UL-ConfigDedicatedAperiodic-r14 SoundingRS-UL-ConfigDedicatedAperiodic-r10 } SoundingRS-AperiodicSetUpPTsExt-r14 ::= SEQUENCE{ srs-CC-SetIndexList-r14 SEQUENCE (SIZE (1..4)) OF SRS-CC-SetIndex-r14 OPTIONAL, -- Cond SRS-Trigger-TypeA soundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r14 SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13 } P-Max ::= INTEGER (-30..33) PRACH-ConfigSIB ::= SEQUENCE { rootSequenceIndex INTEGER (0..837), prach-ConfigInfo PRACH-ConfigInfo } PRACH-ConfigSIB-v1310 ::= SEQUENCE { rsrp-ThresholdsPrachInfoList-r13 RSRP-ThresholdsPrachInfoList-r13, mpdcch-startSF-CSS-RA-r13 CHOICE { fdd-r13 ENUMERATED {v1, v1dot5, v2, v2dot5, v4, v5, v8, v10}, tdd-r13 ENUMERATED {v1, v2, v4, v5, v8, v10, v20, spare} } OPTIONAL, -- Cond MP prach-HoppingOffset-r13 INTEGER (0..94) OPTIONAL, -- Need OR prach-ParametersListCE-r13 PRACH-ParametersListCE-r13 } PRACH-Config ::= SEQUENCE { rootSequenceIndex INTEGER (0..837), prach-ConfigInfo PRACH-ConfigInfo OPTIONAL -- Need ON } PRACH-Config-v1310 ::= SEQUENCE { rsrp-ThresholdsPrachInfoList-r13 RSRP-ThresholdsPrachInfoList-r13 OPTIONAL, -- Cond MP mpdcch-startSF-CSS-RA-r13 CHOICE { fdd-r13 ENUMERATED {v1, v1dot5, v2, v2dot5, v4, v5, v8, v10}, tdd-r13 ENUMERATED {v1, v2, v4, v5, v8, v10, v20, spare} } OPTIONAL, -- Cond MP prach-HoppingOffset-r13 INTEGER (0..94) OPTIONAL, -- Need OR prach-ParametersListCE-r13 PRACH-ParametersListCE-r13 OPTIONAL, -- Cond MP initial-CE-level-r13 INTEGER (0..3) OPTIONAL -- Need OR } PRACH-Config-v1430 ::= SEQUENCE { rootSequenceIndexHighSpeed-r14 INTEGER (0..837), zeroCorrelationZoneConfigHighSpeed-r14 INTEGER (0..12), prach-ConfigIndexHighSpeed-r14 INTEGER (0..63), prach-FreqOffsetHighSpeed-r14 INTEGER (0..94) } PRACH-ConfigSCell-r10 ::= SEQUENCE { prach-ConfigIndex-r10 INTEGER (0..63) } PRACH-ConfigInfo ::= SEQUENCE { prach-ConfigIndex INTEGER (0..63), highSpeedFlag BOOLEAN, zeroCorrelationZoneConfig INTEGER (0..15), prach-FreqOffset INTEGER (0..94) } PRACH-ParametersListCE-r13 ::= SEQUENCE (SIZE(1..maxCE-Level-r13)) OF PRACH-ParametersCE-r13 PRACH-ParametersCE-r13 ::= SEQUENCE { prach-ConfigIndex-r13 INTEGER (0..63), prach-FreqOffset-r13 INTEGER (0..94), prach-StartingSubframe-r13 ENUMERATED {sf2, sf4, sf8, sf16, sf32, sf64, sf128, sf256} OPTIONAL, -- Need OP maxNumPreambleAttemptCE-r13 ENUMERATED {n3, n4, n5, n6, n7, n8, n10} OPTIONAL, -- Need OP numRepetitionPerPreambleAttempt-r13 ENUMERATED {n1,n2,n4,n8,n16,n32,n64,n128}, mpdcch-NarrowbandsToMonitor-r13 SEQUENCE (SIZE(1..2)) OF INTEGER (1..maxAvailNarrowBands-r13), mpdcch-NumRepetition-RA-r13 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128, r256}, prach-HoppingConfig-r13 ENUMERATED {on,off} } RSRP-ThresholdsPrachInfoList-r13 ::= SEQUENCE (SIZE(1..3)) OF RSRP-Range PresenceAntennaPort1 ::= BOOLEAN PUCCH-ConfigCommon ::= SEQUENCE { deltaPUCCH-Shift ENUMERATED {ds1, ds2, ds3}, nRB-CQI INTEGER (0..98), nCS-AN INTEGER (0..7), n1PUCCH-AN INTEGER (0..2047) } PUCCH-ConfigCommon-v1310 ::= SEQUENCE { n1PUCCH-AN-InfoList-r13 N1PUCCH-AN-InfoList-r13 OPTIONAL, -- Need OR pucch-NumRepetitionCE-Msg4-Level0-r13 ENUMERATED {n1, n2, n4, n8} OPTIONAL, -- Need OR pucch-NumRepetitionCE-Msg4-Level1-r13 ENUMERATED {n1, n2, n4, n8} OPTIONAL, -- Need OR pucch-NumRepetitionCE-Msg4-Level2-r13 ENUMERATED {n4, n8, n16, n32} OPTIONAL, -- Need OR pucch-NumRepetitionCE-Msg4-Level3-r13 ENUMERATED {n4, n8, n16, n32} OPTIONAL -- Need OR } PUCCH-ConfigCommon-v1430 ::= SEQUENCE { pucch-NumRepetitionCE-Msg4-Level3-r14 ENUMERATED {n64, n128} OPTIONAL -- Need OR } PUCCH-ConfigDedicated ::= SEQUENCE { ackNackRepetition CHOICE{ release NULL, setup SEQUENCE { repetitionFactor ENUMERATED {n2, n4, n6, spare1}, n1PUCCH-AN-Rep INTEGER (0..2047) } }, tdd-AckNackFeedbackMode ENUMERATED {bundling, multiplexing} OPTIONAL -- Cond TDD } PUCCH-ConfigDedicated-v1020 ::= SEQUENCE { pucch-Format-r10 CHOICE { format3-r10 PUCCH-Format3-Conf-r13, channelSelection-r10 SEQUENCE { n1PUCCH-AN-CS-r10 CHOICE { release NULL, setup SEQUENCE { n1PUCCH-AN-CS-List-r10 SEQUENCE (SIZE (1..2)) OF N1PUCCH-AN-CS-r10 } } OPTIONAL -- Need ON } } OPTIONAL, -- Need OR twoAntennaPortActivatedPUCCH-Format1a1b-r10 ENUMERATED {true} OPTIONAL, -- Need OR simultaneousPUCCH-PUSCH-r10 ENUMERATED {true} OPTIONAL, -- Need OR n1PUCCH-AN-RepP1-r10 INTEGER (0..2047) OPTIONAL -- Need OR } PUCCH-ConfigDedicated-v1130 ::= SEQUENCE { n1PUCCH-AN-CS-v1130 CHOICE { release NULL, setup SEQUENCE { n1PUCCH-AN-CS-ListP1-r11 SEQUENCE (SIZE (2..4)) OF INTEGER (0..2047) } } OPTIONAL, -- Need ON nPUCCH-Param-r11 CHOICE { release NULL, setup SEQUENCE { nPUCCH-Identity-r11 INTEGER (0..503), n1PUCCH-AN-r11 INTEGER (0..2047) } } OPTIONAL -- Need ON } PUCCH-ConfigDedicated-v1250 ::= SEQUENCE { nkaPUCCH-Param-r12 CHOICE { release NULL, setup SEQUENCE { nkaPUCCH-AN-r12 INTEGER (0..2047) } } } PUCCH-ConfigDedicated-r13 ::= SEQUENCE { --Release 8 ackNackRepetition-r13 CHOICE{ release NULL, setup SEQUENCE { repetitionFactor-r13 ENUMERATED {n2, n4, n6, spare1}, n1PUCCH-AN-Rep-r13 INTEGER (0..2047) } }, tdd-AckNackFeedbackMode-r13 ENUMERATED {bundling, multiplexing} OPTIONAL, -- Cond TDD --Release 10 pucch-Format-r13 CHOICE { format3-r13 SEQUENCE { n3PUCCH-AN-List-r13 SEQUENCE (SIZE (1..4)) OF INTEGER (0..549) OPTIONAL, -- Need ON twoAntennaPortActivatedPUCCH-Format3-r13 CHOICE { release NULL, setup SEQUENCE { n3PUCCH-AN-ListP1-r13 SEQUENCE (SIZE (1..4)) OF INTEGER (0..549) } } OPTIONAL -- Need ON }, channelSelection-r13 SEQUENCE { n1PUCCH-AN-CS-r13 CHOICE { release NULL, setup SEQUENCE { n1PUCCH-AN-CS-List-r13 SEQUENCE (SIZE (1..2)) OF N1PUCCH-AN-CS-r10, n1PUCCH-AN-CS-ListP1-r13 SEQUENCE (SIZE (2..4)) OF INTEGER (0..2047) } } OPTIONAL -- Need ON }, format4-r13 SEQUENCE { format4-resourceConfiguration-r13 SEQUENCE (SIZE (4)) OF Format4-resource-r13, format4-MultiCSI-resourceConfiguration-r13 SEQUENCE (SIZE (1..2)) OF Format4-resource-r13 OPTIONAL -- Need OR }, format5-r13 SEQUENCE { format5-resourceConfiguration-r13 SEQUENCE (SIZE (4)) OF Format5-resource-r13, format5-MultiCSI-resourceConfiguration-r13 Format5-resource-r13 OPTIONAL -- Need OR } } OPTIONAL, -- Need OR twoAntennaPortActivatedPUCCH-Format1a1b-r13 ENUMERATED {true} OPTIONAL, -- Need OR simultaneousPUCCH-PUSCH-r13 ENUMERATED {true} OPTIONAL, -- Need OR n1PUCCH-AN-RepP1-r13 INTEGER (0..2047) OPTIONAL, -- Need OR --Release 11 nPUCCH-Param-r13 CHOICE { release NULL, setup SEQUENCE { nPUCCH-Identity-r13 INTEGER (0..503), n1PUCCH-AN-r13 INTEGER (0..2047) } } OPTIONAL, -- Need ON --Release 12 nkaPUCCH-Param-r13 CHOICE { release NULL, setup SEQUENCE { nkaPUCCH-AN-r13 INTEGER (0..2047) } } OPTIONAL, -- Need ON --Release 13 spatialBundlingPUCCH-r13 BOOLEAN, spatialBundlingPUSCH-r13 BOOLEAN, harq-TimingTDD-r13 BOOLEAN, codebooksizeDetermination-r13 ENUMERATED {dai,cc} OPTIONAL, -- Need OR maximumPayloadCoderate-r13 INTEGER (0..7) OPTIONAL, -- Need OR pucch-NumRepetitionCE-r13 CHOICE { release NULL, setup CHOICE { modeA SEQUENCE { pucch-NumRepetitionCE-format1-r13 ENUMERATED {r1, r2, r4, r8}, pucch-NumRepetitionCE-format2-r13 ENUMERATED {r1, r2, r4, r8} }, modeB SEQUENCE { pucch-NumRepetitionCE-format1-r13 ENUMERATED {r4, r8, r16, r32}, pucch-NumRepetitionCE-format2-r13 ENUMERATED {r4, r8, r16, r32} } } } OPTIONAL --Need ON } PUCCH-ConfigDedicated-v1370 ::= SEQUENCE { pucch-Format-v1370 CHOICE { release NULL, setup PUCCH-Format3-Conf-r13 } } PUCCH-Format3-Conf-r13 ::= SEQUENCE { n3PUCCH-AN-List-r13 SEQUENCE (SIZE (1..4)) OF INTEGER (0..549) OPTIONAL, -- Need ON twoAntennaPortActivatedPUCCH-Format3-r13 CHOICE { release NULL, setup SEQUENCE { n3PUCCH-AN-ListP1-r13 SEQUENCE (SIZE (1..4)) OF INTEGER (0..549) } } OPTIONAL -- Need ON } PUCCH-ConfigDedicated-v1430 ::= SEQUENCE { pucch-NumRepetitionCE-format1-r14 ENUMERATED {r64,r128} OPTIONAL -- Need OR } Format4-resource-r13 ::= SEQUENCE { startingPRB-format4-r13 INTEGER (0..109), numberOfPRB-format4-r13 INTEGER (0..7) } Format5-resource-r13 ::= SEQUENCE { startingPRB-format5-r13 INTEGER (0..109), cdm-index-format5-r13 INTEGER (0..1) } N1PUCCH-AN-CS-r10 ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) N1PUCCH-AN-InfoList-r13 ::= SEQUENCE (SIZE(1..maxCE-Level-r13)) OF INTEGER (0..2047) PUSCH-ConfigCommon ::= SEQUENCE { pusch-ConfigBasic SEQUENCE { n-SB INTEGER (1..4), hoppingMode ENUMERATED {interSubFrame, intraAndInterSubFrame}, pusch-HoppingOffset INTEGER (0..98), enable64QAM BOOLEAN }, ul-ReferenceSignalsPUSCH UL-ReferenceSignalsPUSCH } PUSCH-ConfigCommon-v1270 ::= SEQUENCE { enable64QAM-v1270 ENUMERATED {true} } PUSCH-ConfigCommon-v1310 ::= SEQUENCE { pusch-maxNumRepetitionCEmodeA-r13 ENUMERATED { r8, r16, r32 } OPTIONAL, -- Need OR pusch-maxNumRepetitionCEmodeB-r13 ENUMERATED { r192, r256, r384, r512, r768, r1024, r1536, r2048} OPTIONAL, -- Need OR pusch-HoppingOffset-v1310 INTEGER (1..maxAvailNarrowBands-r13) OPTIONAL -- Need OR } PUSCH-ConfigDedicated ::= SEQUENCE { betaOffset-ACK-Index INTEGER (0..15), betaOffset-RI-Index INTEGER (0..15), betaOffset-CQI-Index INTEGER (0..15) } PUSCH-ConfigDedicated-v1020 ::= SEQUENCE { betaOffsetMC-r10 SEQUENCE { betaOffset-ACK-Index-MC-r10 INTEGER (0..15), betaOffset-RI-Index-MC-r10 INTEGER (0..15), betaOffset-CQI-Index-MC-r10 INTEGER (0..15) } OPTIONAL, -- Need OR groupHoppingDisabled-r10 ENUMERATED {true} OPTIONAL, -- Need OR dmrs-WithOCC-Activated-r10 ENUMERATED {true} OPTIONAL -- Need OR } PUSCH-ConfigDedicated-v1130 ::= SEQUENCE { pusch-DMRS-r11 CHOICE { release NULL, setup SEQUENCE { nPUSCH-Identity-r11 INTEGER (0..509), nDMRS-CSH-Identity-r11 INTEGER (0..509) } } } PUSCH-ConfigDedicated-v1250::= SEQUENCE { uciOnPUSCH CHOICE { release NULL, setup SEQUENCE { betaOffset-ACK-Index-SubframeSet2-r12 INTEGER (0..15), betaOffset-RI-Index-SubframeSet2-r12 INTEGER (0..15), betaOffset-CQI-Index-SubframeSet2-r12 INTEGER (0..15), betaOffsetMC-r12 SEQUENCE { betaOffset-ACK-Index-MC-SubframeSet2-r12 INTEGER (0..15), betaOffset-RI-Index-MC-SubframeSet2-r12 INTEGER (0..15), betaOffset-CQI-Index-MC-SubframeSet2-r12 INTEGER (0..15) } OPTIONAL -- Need OR } } } PUSCH-ConfigDedicated-r13 ::= SEQUENCE { betaOffset-ACK-Index-r13 INTEGER (0..15), betaOffset2-ACK-Index-r13 INTEGER (0..15) OPTIONAL, -- Need OR betaOffset-RI-Index-r13 INTEGER (0..15), betaOffset-CQI-Index-r13 INTEGER (0..15), betaOffsetMC-r13 SEQUENCE { betaOffset-ACK-Index-MC-r13 INTEGER (0..15), betaOffset2-ACK-Index-MC-r13 INTEGER (0..15) OPTIONAL, -- Need OR betaOffset-RI-Index-MC-r13 INTEGER (0..15), betaOffset-CQI-Index-MC-r13 INTEGER (0..15) } OPTIONAL, -- Need OR groupHoppingDisabled-r13 ENUMERATED {true} OPTIONAL, -- Need OR dmrs-WithOCC-Activated-r13 ENUMERATED {true} OPTIONAL, -- Need OR pusch-DMRS-r11 CHOICE { release NULL, setup SEQUENCE { nPUSCH-Identity-r13 INTEGER (0..509), nDMRS-CSH-Identity-r13 INTEGER (0..509) } } OPTIONAL, -- Need ON uciOnPUSCH CHOICE { release NULL, setup SEQUENCE { betaOffset-ACK-Index-SubframeSet2-r13 INTEGER (0..15), betaOffset2-ACK-Index-SubframeSet2-r13 INTEGER (0..15) OPTIONAL, -- Need OR betaOffset-RI-Index-SubframeSet2-r13 INTEGER (0..15), betaOffset-CQI-Index-SubframeSet2-r13 INTEGER (0..15), betaOffsetMC-r12 SEQUENCE { betaOffset-ACK-Index-MC-SubframeSet2-r13 INTEGER (0..15), betaOffset2-ACK-Index-MC-SubframeSet2-r13 INTEGER (0..15) OPTIONAL, -- Need OR betaOffset-RI-Index-MC-SubframeSet2-r13 INTEGER (0..15), betaOffset-CQI-Index-MC-SubframeSet2-r13 INTEGER (0..15) } OPTIONAL -- Need OR } } OPTIONAL, -- Need ON pusch-HoppingConfig-r13 ENUMERATED {on} OPTIONAL -- Need OR } PUSCH-ConfigDedicated-v1430 ::= SEQUENCE { ce-PUSCH-NB-MaxTBS-r14 ENUMERATED {on} OPTIONAL, -- Need OR ce-PUSCH-MaxBandwidth-r14 ENUMERATED {bw5} OPTIONAL, -- Need OR tdd-PUSCH-UpPTS-r14 TDD-PUSCH-UpPTS-r14 OPTIONAL, -- Need ON ul-DMRS-IFDMA-r14 BOOLEAN, enable256QAM-r14 Enable256QAM-r14 OPTIONAL -- Need ON } PUSCH-ConfigDedicatedSCell-r10 ::= SEQUENCE { groupHoppingDisabled-r10 ENUMERATED {true} OPTIONAL, -- Need OR dmrs-WithOCC-Activated-r10 ENUMERATED {true} OPTIONAL -- Need OR } PUSCH-ConfigDedicatedSCell-v1430 ::= SEQUENCE { enable256QAM-r14 Enable256QAM-r14 OPTIONAL -- Need OR } TDD-PUSCH-UpPTS-r14 ::= CHOICE { release NULL, setup SEQUENCE { symPUSCH-UpPTS-r14 ENUMERATED {sym1, sym2, sym3, sym4, sym5, sym6} OPTIONAL, -- Need ON dmrs-LessUpPTS-Config-r14 ENUMERATED {true} OPTIONAL -- Need OR } } Enable256QAM-r14 ::= CHOICE { release NULL, setup CHOICE { tpc-SubframeSet-Configured-r14 SEQUENCE { subframeSet1-DCI-Format0-r14 BOOLEAN, subframeSet1-DCI-Format4-r14 BOOLEAN, subframeSet2-DCI-Format0-r14 BOOLEAN, subframeSet2-DCI-Format4-r14 BOOLEAN }, tpc-SubframeSet-NotConfigured-r14 SEQUENCE { dci-Format0-r14 BOOLEAN, dci-Format4-r14 BOOLEAN } } } PUSCH-EnhancementsConfig-r14 ::= CHOICE { release NULL, setup SEQUENCE { pusch-HoppingOffsetPUSCH-Enh-r14 INTEGER (1..100) OPTIONAL, -- Need ON interval-ULHoppingPUSCH-Enh-r14 CHOICE { interval-FDD-PUSCH-Enh-r14 ENUMERATED {int1, int2, int4, int8}, interval-TDD-PUSCH-Enh-r14 ENUMERATED {int1, int5, int10, int20} } OPTIONAL -- Need ON } } UL-ReferenceSignalsPUSCH ::= SEQUENCE { groupHoppingEnabled BOOLEAN, groupAssignmentPUSCH INTEGER (0..29), sequenceHoppingEnabled BOOLEAN, cyclicShift INTEGER (0..7) } RACH-ConfigCommon ::= SEQUENCE { preambleInfo SEQUENCE { numberOfRA-Preambles ENUMERATED { n4, n8, n12, n16, n20, n24, n28, n32, n36, n40, n44, n48, n52, n56, n60, n64}, preamblesGroupAConfig SEQUENCE { sizeOfRA-PreamblesGroupA ENUMERATED { n4, n8, n12, n16, n20, n24, n28, n32, n36, n40, n44, n48, n52, n56, n60}, messageSizeGroupA ENUMERATED {b56, b144, b208, b256}, messagePowerOffsetGroupB ENUMERATED { minusinfinity, dB0, dB5, dB8, dB10, dB12, dB15, dB18}, ... } OPTIONAL -- Need OP }, powerRampingParameters PowerRampingParameters, ra-SupervisionInfo SEQUENCE { preambleTransMax PreambleTransMax, ra-ResponseWindowSize ENUMERATED { sf2, sf3, sf4, sf5, sf6, sf7, sf8, sf10}, mac-ContentionResolutionTimer ENUMERATED { sf8, sf16, sf24, sf32, sf40, sf48, sf56, sf64} }, maxHARQ-Msg3Tx INTEGER (1..8), ..., [[ preambleTransMax-CE-r13 PreambleTransMax OPTIONAL, -- Need OR rach-CE-LevelInfoList-r13 RACH-CE-LevelInfoList-r13 OPTIONAL -- Need OR ]] } RACH-ConfigCommon-v1250 ::= SEQUENCE { txFailParams-r12 SEQUENCE { connEstFailCount-r12 ENUMERATED {n1, n2, n3, n4}, connEstFailOffsetValidity-r12 ENUMERATED {s30, s60, s120, s240, s300, s420, s600, s900}, connEstFailOffset-r12 INTEGER (0..15) OPTIONAL -- Need OP } } RACH-ConfigCommonSCell-r11 ::= SEQUENCE { powerRampingParameters-r11 PowerRampingParameters, ra-SupervisionInfo-r11 SEQUENCE { preambleTransMax-r11 PreambleTransMax }, ... } RACH-CE-LevelInfoList-r13 ::= SEQUENCE (SIZE (1..maxCE-Level-r13)) OF RACH-CE-LevelInfo-r13 RACH-CE-LevelInfo-r13 ::= SEQUENCE { preambleMappingInfo-r13 SEQUENCE { firstPreamble-r13 INTEGER(0..63), lastPreamble-r13 INTEGER(0..63) }, ra-ResponseWindowSize-r13 ENUMERATED {sf20, sf50, sf80, sf120, sf180, sf240, sf320, sf400}, mac-ContentionResolutionTimer-r13 ENUMERATED {sf80, sf100, sf120, sf160, sf200, sf240, sf480, sf960}, rar-HoppingConfig-r13 ENUMERATED {on,off}, ... } PowerRampingParameters ::= SEQUENCE { powerRampingStep ENUMERATED {dB0, dB2,dB4, dB6}, preambleInitialReceivedTargetPower ENUMERATED { dBm-120, dBm-118, dBm-116, dBm-114, dBm-112, dBm-110, dBm-108, dBm-106, dBm-104, dBm-102, dBm-100, dBm-98, dBm-96, dBm-94, dBm-92, dBm-90} } PreambleTransMax ::= ENUMERATED { n3, n4, n5, n6, n7, n8, n10, n20, n50, n100, n200} RACH-ConfigDedicated ::= SEQUENCE { ra-PreambleIndex INTEGER (0..63), ra-PRACH-MaskIndex INTEGER (0..15) } RadioResourceConfigCommonSIB ::= SEQUENCE { rach-ConfigCommon RACH-ConfigCommon, bcch-Config BCCH-Config, pcch-Config PCCH-Config, prach-Config PRACH-ConfigSIB, pdsch-ConfigCommon PDSCH-ConfigCommon, pusch-ConfigCommon PUSCH-ConfigCommon, pucch-ConfigCommon PUCCH-ConfigCommon, soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon, uplinkPowerControlCommon UplinkPowerControlCommon, ul-CyclicPrefixLength UL-CyclicPrefixLength, ..., [[ uplinkPowerControlCommon-v1020 UplinkPowerControlCommon-v1020 OPTIONAL -- Need OR ]], [[ rach-ConfigCommon-v1250 RACH-ConfigCommon-v1250 OPTIONAL -- Need OR ]], [[ pusch-ConfigCommon-v1270 PUSCH-ConfigCommon-v1270 OPTIONAL -- Need OR ]], [[ bcch-Config-v1310 BCCH-Config-v1310 OPTIONAL, -- Need OR pcch-Config-v1310 PCCH-Config-v1310 OPTIONAL, -- Need OR freqHoppingParameters-r13 FreqHoppingParameters-r13 OPTIONAL, -- Need OR pdsch-ConfigCommon-v1310 PDSCH-ConfigCommon-v1310 OPTIONAL, -- Need OR pusch-ConfigCommon-v1310 PUSCH-ConfigCommon-v1310 OPTIONAL, -- Need OR prach-ConfigCommon-v1310 PRACH-ConfigSIB-v1310 OPTIONAL, -- Need OR pucch-ConfigCommon-v1310 PUCCH-ConfigCommon-v1310 OPTIONAL -- Need OR ]], [[ highSpeedConfig-r14 HighSpeedConfig-r14 OPTIONAL, -- Need OR prach-Config-v1430 PRACH-Config-v1430 OPTIONAL, -- Need OR pucch-ConfigCommon-v1430 PUCCH-ConfigCommon-v1430 OPTIONAL -- Need OR ]] } RadioResourceConfigCommon ::= SEQUENCE { rach-ConfigCommon RACH-ConfigCommon OPTIONAL, -- Need ON prach-Config PRACH-Config, pdsch-ConfigCommon PDSCH-ConfigCommon OPTIONAL, -- Need ON pusch-ConfigCommon PUSCH-ConfigCommon, phich-Config PHICH-Config OPTIONAL, -- Need ON pucch-ConfigCommon PUCCH-ConfigCommon OPTIONAL, -- Need ON soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon OPTIONAL, -- Need ON uplinkPowerControlCommon UplinkPowerControlCommon OPTIONAL, -- Need ON antennaInfoCommon AntennaInfoCommon OPTIONAL, -- Need ON p-Max P-Max OPTIONAL, -- Need OP tdd-Config TDD-Config OPTIONAL, -- Cond TDD ul-CyclicPrefixLength UL-CyclicPrefixLength, ..., [[ uplinkPowerControlCommon-v1020 UplinkPowerControlCommon-v1020 OPTIONAL -- Need ON ]], [[ tdd-Config-v1130 TDD-Config-v1130 OPTIONAL -- Cond TDD3 ]], [[ pusch-ConfigCommon-v1270 PUSCH-ConfigCommon-v1270 OPTIONAL -- Need OR ]], [[ prach-Config-v1310 PRACH-Config-v1310 OPTIONAL, -- Need ON freqHoppingParameters-r13 FreqHoppingParameters-r13 OPTIONAL, -- Need ON pdsch-ConfigCommon-v1310 PDSCH-ConfigCommon-v1310 OPTIONAL, -- Need ON pucch-ConfigCommon-v1310 PUCCH-ConfigCommon-v1310 OPTIONAL, -- Need ON pusch-ConfigCommon-v1310 PUSCH-ConfigCommon-v1310 OPTIONAL, -- Need ON uplinkPowerControlCommon-v1310 UplinkPowerControlCommon-v1310 OPTIONAL -- Need ON ]], [[ highSpeedConfig-r14 HighSpeedConfig-r14 OPTIONAL, -- Need OR prach-Config-v1430 PRACH-Config-v1430 OPTIONAL, -- Need OR pucch-ConfigCommon-v1430 PUCCH-ConfigCommon-v1430 OPTIONAL, -- Need OR tdd-Config-v1430 TDD-Config-v1430 OPTIONAL -- Cond TDD3 ]] } RadioResourceConfigCommonPSCell-r12 ::= SEQUENCE { basicFields-r12 RadioResourceConfigCommonSCell-r10, pucch-ConfigCommon-r12 PUCCH-ConfigCommon, rach-ConfigCommon-r12 RACH-ConfigCommon, uplinkPowerControlCommonPSCell-r12 UplinkPowerControlCommonPSCell-r12, ..., [[ uplinkPowerControlCommonPSCell-v1310 UplinkPowerControlCommon-v1310 OPTIONAL -- Need ON ]] } RadioResourceConfigCommonPSCell-v12f0 ::= SEQUENCE { basicFields-v12f0 RadioResourceConfigCommonSCell-v10l0 } RadioResourceConfigCommonPSCell-v1440 ::= SEQUENCE { basicFields-v1440 RadioResourceConfigCommonSCell-v1440 } RadioResourceConfigCommonSCell-r10 ::= SEQUENCE { -- DL configuration as well as configuration applicable for DL and UL nonUL-Configuration-r10 SEQUENCE { -- 1: Cell characteristics dl-Bandwidth-r10 ENUMERATED {n6, n15, n25, n50, n75, n100}, -- 2: Physical configuration, general antennaInfoCommon-r10 AntennaInfoCommon, mbsfn-SubframeConfigList-r10 MBSFN-SubframeConfigList OPTIONAL, -- Need OR -- 3: Physical configuration, control phich-Config-r10 PHICH-Config, -- 4: Physical configuration, physical channels pdsch-ConfigCommon-r10 PDSCH-ConfigCommon, tdd-Config-r10 TDD-Config OPTIONAL -- Cond TDDSCell }, -- UL configuration ul-Configuration-r10 SEQUENCE { ul-FreqInfo-r10 SEQUENCE { ul-CarrierFreq-r10 ARFCN-ValueEUTRA OPTIONAL, -- Need OP ul-Bandwidth-r10 ENUMERATED {n6, n15, n25, n50, n75, n100} OPTIONAL, -- Need OP additionalSpectrumEmissionSCell-r10 AdditionalSpectrumEmission }, p-Max-r10 P-Max OPTIONAL, -- Need OP uplinkPowerControlCommonSCell-r10 UplinkPowerControlCommonSCell-r10, -- A special version of IE UplinkPowerControlCommon may be introduced -- 3: Physical configuration, control soundingRS-UL-ConfigCommon-r10 SoundingRS-UL-ConfigCommon, ul-CyclicPrefixLength-r10 UL-CyclicPrefixLength, -- 4: Physical configuration, physical channels prach-ConfigSCell-r10 PRACH-ConfigSCell-r10 OPTIONAL, -- Cond TDD-OR-NoR11 pusch-ConfigCommon-r10 PUSCH-ConfigCommon } OPTIONAL, -- Need OR ..., [[ ul-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Need OP ]], [[ rach-ConfigCommonSCell-r11 RACH-ConfigCommonSCell-r11 OPTIONAL, -- Cond ULSCell prach-ConfigSCell-r11 PRACH-Config OPTIONAL, -- Cond UL tdd-Config-v1130 TDD-Config-v1130 OPTIONAL, -- Cond TDD2 uplinkPowerControlCommonSCell-v1130 UplinkPowerControlCommonSCell-v1130 OPTIONAL -- Cond UL ]], [[ pusch-ConfigCommon-v1270 PUSCH-ConfigCommon-v1270 OPTIONAL -- Need OR ]], [[ pucch-ConfigCommon-r13 PUCCH-ConfigCommon OPTIONAL, -- Cond UL uplinkPowerControlCommonSCell-v1310 UplinkPowerControlCommonSCell-v1310 OPTIONAL -- Cond UL ]], [[ highSpeedConfigSCell-r14 HighSpeedConfigSCell-r14 OPTIONAL, -- Need OR prach-Config-v1430 PRACH-Config-v1430 OPTIONAL, -- Cond UL ul-Configuration-r14 SEQUENCE { ul-FreqInfo-r14 SEQUENCE { ul-CarrierFreq-r14 ARFCN-ValueEUTRA-r9 OPTIONAL, -- Need OP ul-Bandwidth-r14 ENUMERATED {n6, n15, n25, n50, n75, n100} OPTIONAL, -- Need OP additionalSpectrumEmissionSCell-r14 AdditionalSpectrumEmission }, p-Max-r14 P-Max OPTIONAL, -- Need OP soundingRS-UL-ConfigCommon-r14 SoundingRS-UL-ConfigCommon, ul-CyclicPrefixLength-r14 UL-CyclicPrefixLength, prach-ConfigSCell-r14 PRACH-ConfigSCell-r10 OPTIONAL, -- Cond TDD-OR-NoR11 uplinkPowerControlCommonPUSCH-LessCell-v1430 UplinkPowerControlCommonPUSCH-LessCell-v1430 OPTIONAL -- Need OR } OPTIONAL, -- Cond ULSRS harq-ReferenceConfig-r14 ENUMERATED {sa2,sa4,sa5} OPTIONAL, -- Need OR soundingRS-FlexibleTiming-r14 ENUMERATED {true} OPTIONAL -- Need OR ]], [[ mbsfn-SubframeConfigList-v1430 MBSFN-SubframeConfigList-v1430 OPTIONAL-- Need ON ]] } RadioResourceConfigCommonSCell-v10l0 ::= SEQUENCE { -- UL configuration ul-Configuration-v10l0 SEQUENCE { additionalSpectrumEmissionSCell-v10l0 AdditionalSpectrumEmission-v10l0 } } RadioResourceConfigCommonSCell-v1440 ::= SEQUENCE { ul-Configuration-v1440 SEQUENCE { ul-FreqInfo-v1440 SEQUENCE { additionalSpectrumEmissionSCell-v1440 AdditionalSpectrumEmission-v10l0 } } } BCCH-Config ::= SEQUENCE { modificationPeriodCoeff ENUMERATED {n2, n4, n8, n16} } BCCH-Config-v1310 ::= SEQUENCE { modificationPeriodCoeff-v1310 ENUMERATED {n64} } FreqHoppingParameters-r13 ::= SEQUENCE { dummy ENUMERATED {nb2, nb4} OPTIONAL, dummy2 CHOICE { interval-FDD-r13 ENUMERATED {int1, int2, int4, int8}, interval-TDD-r13 ENUMERATED {int1, int5, int10, int20} } OPTIONAL, dummy3 CHOICE { interval-FDD-r13 ENUMERATED {int2, int4, int8, int16}, interval-TDD-r13 ENUMERATED { int5, int10, int20, int40} } OPTIONAL, interval-ULHoppingConfigCommonModeA-r13 CHOICE { interval-FDD-r13 ENUMERATED {int1, int2, int4, int8}, interval-TDD-r13 ENUMERATED {int1, int5, int10, int20} } OPTIONAL, -- Cond MP-A interval-ULHoppingConfigCommonModeB-r13 CHOICE { interval-FDD-r13 ENUMERATED {int2, int4, int8, int16}, interval-TDD-r13 ENUMERATED { int5, int10, int20, int40} } OPTIONAL, -- Cond MP-B dummy4 INTEGER (1..maxAvailNarrowBands-r13) OPTIONAL } PCCH-Config ::= SEQUENCE { defaultPagingCycle ENUMERATED { rf32, rf64, rf128, rf256}, nB ENUMERATED { fourT, twoT, oneT, halfT, quarterT, oneEighthT, oneSixteenthT, oneThirtySecondT} } PCCH-Config-v1310 ::= SEQUENCE { paging-narrowBands-r13 INTEGER (1..maxAvailNarrowBands-r13), mpdcch-NumRepetition-Paging-r13 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128, r256}, nB-v1310 ENUMERATED {one64thT, one128thT, one256thT} OPTIONAL -- Need OR } UL-CyclicPrefixLength ::= ENUMERATED {len1, len2} HighSpeedConfig-r14 ::= SEQUENCE { highSpeedEnhancedMeasFlag-r14 ENUMERATED {true} OPTIONAL, -- Need OR highSpeedEnhancedDemodulationFlag-r14 ENUMERATED {true} OPTIONAL -- Need OR } HighSpeedConfigSCell-r14 ::= SEQUENCE { highSpeedEnhancedDemodulationFlag-r14 ENUMERATED {true} OPTIONAL -- Need OR } RadioResourceConfigDedicated ::= SEQUENCE { srb-ToAddModList SRB-ToAddModList OPTIONAL, -- Cond HO-Conn drb-ToAddModList DRB-ToAddModList OPTIONAL, -- Cond HO-toEUTRA drb-ToReleaseList DRB-ToReleaseList OPTIONAL, -- Need ON mac-MainConfig CHOICE { explicitValue MAC-MainConfig, defaultValue NULL } OPTIONAL, -- Cond HO-toEUTRA2 sps-Config SPS-Config OPTIONAL, -- Need ON physicalConfigDedicated PhysicalConfigDedicated OPTIONAL, -- Need ON ..., [[ rlf-TimersAndConstants-r9 RLF-TimersAndConstants-r9 OPTIONAL -- Need ON ]], [[ measSubframePatternPCell-r10 MeasSubframePatternPCell-r10 OPTIONAL -- Need ON ]], [[ neighCellsCRS-Info-r11 NeighCellsCRS-Info-r11 OPTIONAL -- Need ON ]], [[ naics-Info-r12 NAICS-AssistanceInfo-r12 OPTIONAL -- Need ON ]], [[ neighCellsCRS-Info-r13 NeighCellsCRS-Info-r13 OPTIONAL, -- Cond CRSIM rlf-TimersAndConstants-r13 RLF-TimersAndConstants-r13 OPTIONAL -- Need ON ]], [[ sps-Config-v1430 SPS-Config-v1430 OPTIONAL -- Cond SPS ]] } RadioResourceConfigDedicated-v1370 ::= SEQUENCE { physicalConfigDedicated-v1370 PhysicalConfigDedicated-v1370 OPTIONAL -- Need ON } RadioResourceConfigDedicatedPSCell-r12 ::= SEQUENCE { -- UE specific configuration extensions applicable for an PSCell physicalConfigDedicatedPSCell-r12 PhysicalConfigDedicated OPTIONAL, -- Need ON sps-Config-r12 SPS-Config OPTIONAL, -- Need ON naics-Info-r12 NAICS-AssistanceInfo-r12 OPTIONAL, -- Need ON ..., [[ neighCellsCRS-InfoPSCell-r13 NeighCellsCRS-Info-r13 OPTIONAL -- Need ON ]], [[ sps-Config-v1430 SPS-Config-v1430 OPTIONAL -- Cond SPS2 ]] } RadioResourceConfigDedicatedPSCell-v1370 ::= SEQUENCE { physicalConfigDedicatedPSCell-v1370 PhysicalConfigDedicated-v1370 OPTIONAL -- Need ON } RadioResourceConfigDedicatedSCG-r12 ::= SEQUENCE { drb-ToAddModListSCG-r12 DRB-ToAddModListSCG-r12 OPTIONAL, -- Need ON mac-MainConfigSCG-r12 MAC-MainConfig OPTIONAL, -- Need ON rlf-TimersAndConstantsSCG-r12 RLF-TimersAndConstantsSCG-r12 OPTIONAL, -- Need ON ... } RadioResourceConfigDedicatedSCell-r10 ::= SEQUENCE { -- UE specific configuration extensions applicable for an SCell physicalConfigDedicatedSCell-r10 PhysicalConfigDedicatedSCell-r10 OPTIONAL, -- Need ON ..., [[ mac-MainConfigSCell-r11 MAC-MainConfigSCell-r11 OPTIONAL -- Cond SCellAdd ]], [[ naics-Info-r12 NAICS-AssistanceInfo-r12 OPTIONAL -- Need ON ]], [[ neighCellsCRS-InfoSCell-r13 NeighCellsCRS-Info-r13 OPTIONAL -- Need ON ]], [[ physicalConfigDedicatedSCell-v1370 PhysicalConfigDedicatedSCell-v1370 OPTIONAL -- Need ON ]] } SRB-ToAddModList ::= SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod SRB-ToAddMod ::= SEQUENCE { srb-Identity INTEGER (1..2), rlc-Config CHOICE { explicitValue RLC-Config, defaultValue NULL } OPTIONAL, -- Cond Setup logicalChannelConfig CHOICE { explicitValue LogicalChannelConfig, defaultValue NULL } OPTIONAL, -- Cond Setup ... } DRB-ToAddModList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddMod DRB-ToAddModListSCG-r12 ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddModSCG-r12 DRB-ToAddMod ::= SEQUENCE { eps-BearerIdentity INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup drb-Identity DRB-Identity, pdcp-Config PDCP-Config OPTIONAL, -- Cond PDCP rlc-Config RLC-Config OPTIONAL, -- Cond SetupM logicalChannelIdentity INTEGER (3..10) OPTIONAL, -- Cond DRB-SetupM logicalChannelConfig LogicalChannelConfig OPTIONAL, -- Cond SetupM ..., [[ drb-TypeChange-r12 ENUMERATED {toMCG} OPTIONAL, -- Need OP rlc-Config-v1250 RLC-Config-v1250 OPTIONAL -- Need ON ]], [[ rlc-Config-v1310 RLC-Config-v1310 OPTIONAL, -- Need ON drb-TypeLWA-r13 BOOLEAN OPTIONAL, -- Need ON drb-TypeLWIP-r13 ENUMERATED {lwip, lwip-DL-only, lwip-UL-only, eutran} OPTIONAL -- Need ON ]], [[ rlc-Config-v1430 RLC-Config-v1430 OPTIONAL, -- Need ON lwip-UL-Aggregation-r14 BOOLEAN OPTIONAL, -- Cond LWIP lwip-DL-Aggregation-r14 BOOLEAN OPTIONAL, -- Cond LWIP lwa-WLAN-AC-r14 ENUMERATED {ac-bk, ac-be, ac-vi, ac-vo} OPTIONAL -- Cond UL-LWA ]] } DRB-ToAddModSCG-r12 ::= SEQUENCE { drb-Identity-r12 DRB-Identity, drb-Type-r12 CHOICE { split-r12 NULL, scg-r12 SEQUENCE { eps-BearerIdentity-r12 INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup pdcp-Config-r12 PDCP-Config OPTIONAL -- Cond PDCP-S } } OPTIONAL, -- Cond SetupS2 rlc-ConfigSCG-r12 RLC-Config OPTIONAL, -- Cond SetupS rlc-Config-v1250 RLC-Config-v1250 OPTIONAL, -- Need ON logicalChannelIdentitySCG-r12 INTEGER (3..10) OPTIONAL, -- Cond DRB-SetupS logicalChannelConfigSCG-r12 LogicalChannelConfig OPTIONAL, -- Cond SetupS ..., [[ rlc-Config-v1430 RLC-Config-v1430 OPTIONAL -- Need ON ]] } DRB-ToReleaseList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-Identity MeasSubframePatternPCell-r10 ::= CHOICE { release NULL, setup MeasSubframePattern-r10 } NeighCellsCRS-Info-r11 ::= CHOICE { release NULL, setup CRS-AssistanceInfoList-r11 } CRS-AssistanceInfoList-r11 ::= SEQUENCE (SIZE (1..maxCellReport)) OF CRS-AssistanceInfo-r11 CRS-AssistanceInfo-r11 ::= SEQUENCE { physCellId-r11 PhysCellId, antennaPortsCount-r11 ENUMERATED {an1, an2, an4, spare1}, mbsfn-SubframeConfigList-r11 MBSFN-SubframeConfigList, ..., [[ mbsfn-SubframeConfigList-v1430 MBSFN-SubframeConfigList-v1430 OPTIONAL -- Need ON ]] } NeighCellsCRS-Info-r13 ::= CHOICE { release NULL, setup CRS-AssistanceInfoList-r13 } CRS-AssistanceInfoList-r13 ::= SEQUENCE (SIZE (1..maxCellReport)) OF CRS-AssistanceInfo-r13 CRS-AssistanceInfo-r13 ::= SEQUENCE { physCellId-r13 PhysCellId, antennaPortsCount-r13 ENUMERATED {an1, an2, an4, spare1}, mbsfn-SubframeConfigList-r13 MBSFN-SubframeConfigList OPTIONAL, -- Need ON ..., [[ mbsfn-SubframeConfigList-v1430 MBSFN-SubframeConfigList-v1430 OPTIONAL -- Need ON ]] } NAICS-AssistanceInfo-r12 ::= CHOICE { release NULL, setup SEQUENCE { neighCellsToReleaseList-r12 NeighCellsToReleaseList-r12 OPTIONAL , -- Need ON neighCellsToAddModList-r12 NeighCellsToAddModList-r12 OPTIONAL, -- Need ON servCellp-a-r12 P-a OPTIONAL -- Need ON } } NeighCellsToReleaseList-r12 ::= SEQUENCE (SIZE (1..maxNeighCell-r12)) OF PhysCellId NeighCellsToAddModList-r12 ::= SEQUENCE (SIZE (1..maxNeighCell-r12)) OF NeighCellsInfo-r12 NeighCellsInfo-r12 ::= SEQUENCE { physCellId-r12 PhysCellId, p-b-r12 INTEGER (0..3), crs-PortsCount-r12 ENUMERATED {n1, n2, n4, spare}, mbsfn-SubframeConfig-r12 MBSFN-SubframeConfigList OPTIONAL, -- Need ON p-aList-r12 SEQUENCE (SIZE (1..maxP-a-PerNeighCell-r12)) OF P-a, transmissionModeList-r12 BIT STRING (SIZE(8)), resAllocGranularity-r12 INTEGER (1..4), ... } P-a ::= ENUMERATED { dB-6, dB-4dot77, dB-3, dB-1dot77, dB0, dB1, dB2, dB3} RCLWI-Configuration-r13 ::= CHOICE { release NULL, setup SEQUENCE { rclwi-Config-r13 RCLWI-Config-r13 } } RCLWI-Config-r13 ::= SEQUENCE { command CHOICE { steerToWLAN-r13 SEQUENCE { mobilityConfig-r13 WLAN-Id-List-r12 }, steerToLTE-r13 NULL }, ... } RLC-Config ::= CHOICE { am SEQUENCE { ul-AM-RLC UL-AM-RLC, dl-AM-RLC DL-AM-RLC }, um-Bi-Directional SEQUENCE { ul-UM-RLC UL-UM-RLC, dl-UM-RLC DL-UM-RLC }, um-Uni-Directional-UL SEQUENCE { ul-UM-RLC UL-UM-RLC }, um-Uni-Directional-DL SEQUENCE { dl-UM-RLC DL-UM-RLC }, ... } RLC-Config-v1250 ::= SEQUENCE { ul-extended-RLC-LI-Field-r12 BOOLEAN, dl-extended-RLC-LI-Field-r12 BOOLEAN } RLC-Config-v1310 ::= SEQUENCE { ul-extended-RLC-AM-SN-r13 BOOLEAN, dl-extended-RLC-AM-SN-r13 BOOLEAN, pollPDU-v1310 PollPDU-v1310 OPTIONAL -- Need OR } RLC-Config-v1430 ::= CHOICE { release NULL, setup SEQUENCE { pollByte-r14 PollByte-r14 } } UL-AM-RLC ::= SEQUENCE { t-PollRetransmit T-PollRetransmit, pollPDU PollPDU, pollByte PollByte, maxRetxThreshold ENUMERATED { t1, t2, t3, t4, t6, t8, t16, t32} } DL-AM-RLC ::= SEQUENCE { t-Reordering T-Reordering, t-StatusProhibit T-StatusProhibit } UL-UM-RLC ::= SEQUENCE { sn-FieldLength SN-FieldLength } DL-UM-RLC ::= SEQUENCE { sn-FieldLength SN-FieldLength, t-Reordering T-Reordering } SN-FieldLength ::= ENUMERATED {size5, size10} T-PollRetransmit ::= ENUMERATED { ms5, ms10, ms15, ms20, ms25, ms30, ms35, ms40, ms45, ms50, ms55, ms60, ms65, ms70, ms75, ms80, ms85, ms90, ms95, ms100, ms105, ms110, ms115, ms120, ms125, ms130, ms135, ms140, ms145, ms150, ms155, ms160, ms165, ms170, ms175, ms180, ms185, ms190, ms195, ms200, ms205, ms210, ms215, ms220, ms225, ms230, ms235, ms240, ms245, ms250, ms300, ms350, ms400, ms450, ms500, ms800-v1310, ms1000-v1310, ms2000-v1310, ms4000-v1310, spare5, spare4, spare3, spare2, spare1} PollPDU ::= ENUMERATED { p4, p8, p16, p32, p64, p128, p256, pInfinity} PollPDU-v1310 ::= ENUMERATED { p512, p1024, p2048, p4096, p6144, p8192, p12288, p16384} PollByte ::= ENUMERATED { kB25, kB50, kB75, kB100, kB125, kB250, kB375, kB500, kB750, kB1000, kB1250, kB1500, kB2000, kB3000, kBinfinity, spare1} PollByte-r14 ::= ENUMERATED { kB1, kB2, kB5, kB8, kB10, kB15, kB3500, kB4000, kB4500, kB5000, kB5500, kB6000, kB6500, kB7000, kB7500, kB8000, kB9000, kB10000, kB11000, kB12000, kB13000, kB14000, kB15000, kB16000, kB17000, kB18000, kB19000, kB20000, kB25000, kB30000, kB35000, kB40000} T-Reordering ::= ENUMERATED { ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, ms40, ms45, ms50, ms55, ms60, ms65, ms70, ms75, ms80, ms85, ms90, ms95, ms100, ms110, ms120, ms130, ms140, ms150, ms160, ms170, ms180, ms190, ms200, ms1600-v1310} T-StatusProhibit ::= ENUMERATED { ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, ms40, ms45, ms50, ms55, ms60, ms65, ms70, ms75, ms80, ms85, ms90, ms95, ms100, ms105, ms110, ms115, ms120, ms125, ms130, ms135, ms140, ms145, ms150, ms155, ms160, ms165, ms170, ms175, ms180, ms185, ms190, ms195, ms200, ms205, ms210, ms215, ms220, ms225, ms230, ms235, ms240, ms245, ms250, ms300, ms350, ms400, ms450, ms500, ms800-v1310, ms1000-v1310, ms1200-v1310, ms1600-v1310, ms2000-v1310, ms2400-v1310, spare2, spare1} RLF-TimersAndConstants-r9 ::= CHOICE { release NULL, setup SEQUENCE { t301-r9 ENUMERATED { ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000}, t310-r9 ENUMERATED { ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, n310-r9 ENUMERATED { n1, n2, n3, n4, n6, n8, n10, n20}, t311-r9 ENUMERATED { ms1000, ms3000, ms5000, ms10000, ms15000, ms20000, ms30000}, n311-r9 ENUMERATED { n1, n2, n3, n4, n5, n6, n8, n10}, ... } } RLF-TimersAndConstants-r13 ::= CHOICE { release NULL, setup SEQUENCE { t301-v1310 ENUMERATED { ms2500, ms3000, ms3500, ms4000, ms5000, ms6000, ms8000, ms10000}, ..., [[ t310-v1330 ENUMERATED {ms4000, ms6000} OPTIONAL -- Need ON ]] } } RLF-TimersAndConstantsSCG-r12 ::= CHOICE { release NULL, setup SEQUENCE { t313-r12 ENUMERATED { ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, n313-r12 ENUMERATED { n1, n2, n3, n4, n6, n8, n10, n20}, n314-r12 ENUMERATED { n1, n2, n3, n4, n5, n6, n8, n10}, ... } } RN-SubframeConfig-r10 ::= SEQUENCE { subframeConfigPattern-r10 CHOICE { subframeConfigPatternFDD-r10 BIT STRING (SIZE(8)), subframeConfigPatternTDD-r10 INTEGER (0..31) } OPTIONAL, -- Need ON rpdcch-Config-r10 SEQUENCE { resourceAllocationType-r10 ENUMERATED {type0, type1, type2Localized, type2Distributed, spare4, spare3, spare2, spare1}, resourceBlockAssignment-r10 CHOICE { type01-r10 CHOICE { nrb6-r10 BIT STRING (SIZE(6)), nrb15-r10 BIT STRING (SIZE(8)), nrb25-r10 BIT STRING (SIZE(13)), nrb50-r10 BIT STRING (SIZE(17)), nrb75-r10 BIT STRING (SIZE(19)), nrb100-r10 BIT STRING (SIZE(25)) }, type2-r10 CHOICE { nrb6-r10 BIT STRING (SIZE(5)), nrb15-r10 BIT STRING (SIZE(7)), nrb25-r10 BIT STRING (SIZE(9)), nrb50-r10 BIT STRING (SIZE(11)), nrb75-r10 BIT STRING (SIZE(12)), nrb100-r10 BIT STRING (SIZE(13)) }, ... }, demodulationRS-r10 CHOICE { interleaving-r10 ENUMERATED {crs}, noInterleaving-r10 ENUMERATED {crs, dmrs} }, pdsch-Start-r10 INTEGER (1..3), pucch-Config-r10 CHOICE { tdd CHOICE { channelSelectionMultiplexingBundling SEQUENCE { n1PUCCH-AN-List-r10 SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) }, fallbackForFormat3 SEQUENCE { n1PUCCH-AN-P0-r10 INTEGER (0..2047), n1PUCCH-AN-P1-r10 INTEGER (0..2047) OPTIONAL -- Need OR } }, fdd SEQUENCE { n1PUCCH-AN-P0-r10 INTEGER (0..2047), n1PUCCH-AN-P1-r10 INTEGER (0..2047) OPTIONAL -- Need OR } }, ... } OPTIONAL, -- Need ON ... } SchedulingRequestConfig ::= CHOICE { release NULL, setup SEQUENCE { sr-PUCCH-ResourceIndex INTEGER (0..2047), sr-ConfigIndex INTEGER (0..157), dsr-TransMax ENUMERATED { n4, n8, n16, n32, n64, spare3, spare2, spare1} } } SchedulingRequestConfig-v1020 ::= SEQUENCE { sr-PUCCH-ResourceIndexP1-r10 INTEGER (0..2047) OPTIONAL -- Need OR } SchedulingRequestConfigSCell-r13 ::= CHOICE { release NULL, setup SEQUENCE { sr-PUCCH-ResourceIndex-r13 INTEGER (0..2047), sr-PUCCH-ResourceIndexP1-r13 INTEGER (0..2047) OPTIONAL, -- Need OR sr-ConfigIndex-r13 INTEGER (0..157), dsr-TransMax-r13 ENUMERATED { n4, n8, n16, n32, n64, spare3, spare2, spare1} } } SoundingRS-UL-ConfigCommon ::= CHOICE { release NULL, setup SEQUENCE { srs-BandwidthConfig ENUMERATED {bw0, bw1, bw2, bw3, bw4, bw5, bw6, bw7}, srs-SubframeConfig ENUMERATED { sc0, sc1, sc2, sc3, sc4, sc5, sc6, sc7, sc8, sc9, sc10, sc11, sc12, sc13, sc14, sc15}, ackNackSRS-SimultaneousTransmission BOOLEAN, srs-MaxUpPts ENUMERATED {true} OPTIONAL -- Cond TDD } } SoundingRS-UL-ConfigDedicated ::= CHOICE{ release NULL, setup SEQUENCE { srs-Bandwidth ENUMERATED {bw0, bw1, bw2, bw3}, srs-HoppingBandwidth ENUMERATED {hbw0, hbw1, hbw2, hbw3}, freqDomainPosition INTEGER (0..23), duration BOOLEAN, srs-ConfigIndex INTEGER (0..1023), transmissionComb INTEGER (0..1), cyclicShift ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7} } } SoundingRS-UL-ConfigDedicated-v1020 ::= SEQUENCE { srs-AntennaPort-r10 SRS-AntennaPort } SoundingRS-UL-ConfigDedicated-v1310 ::= CHOICE{ release NULL, setup SEQUENCE { transmissionComb-v1310 INTEGER (2..3) OPTIONAL, -- Need OR cyclicShift-v1310 ENUMERATED {cs8, cs9, cs10, cs11} OPTIONAL, -- Need OR transmissionCombNum-r13 ENUMERATED {n2, n4} OPTIONAL -- Need OR } } SoundingRS-UL-ConfigDedicatedUpPTsExt-r13 ::= CHOICE{ release NULL, setup SEQUENCE { srs-UpPtsAdd-r13 ENUMERATED {sym2, sym4}, srs-Bandwidth-r13 ENUMERATED {bw0, bw1, bw2, bw3}, srs-HoppingBandwidth-r13 ENUMERATED {hbw0, hbw1, hbw2, hbw3}, freqDomainPosition-r13 INTEGER (0..23), duration-r13 BOOLEAN, srs-ConfigIndex-r13 INTEGER (0..1023), transmissionComb-r13 INTEGER (0..3), cyclicShift-r13 ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7, cs8, cs9, cs10, cs11}, srs-AntennaPort-r13 SRS-AntennaPort, transmissionCombNum-r13 ENUMERATED {n2, n4} } } SoundingRS-UL-ConfigDedicatedAperiodic-r10 ::= CHOICE{ release NULL, setup SEQUENCE { srs-ConfigIndexAp-r10 INTEGER (0..31), srs-ConfigApDCI-Format4-r10 SEQUENCE (SIZE (1..3)) OF SRS-ConfigAp-r10 OPTIONAL,--Need ON srs-ActivateAp-r10 CHOICE { release NULL, setup SEQUENCE { srs-ConfigApDCI-Format0-r10 SRS-ConfigAp-r10, srs-ConfigApDCI-Format1a2b2c-r10 SRS-ConfigAp-r10, ... } } OPTIONAL -- Need ON } } SoundingRS-UL-ConfigDedicatedAperiodic-v1310 ::= CHOICE{ release NULL, setup SEQUENCE { srs-ConfigApDCI-Format4-v1310 SEQUENCE (SIZE (1..3)) OF SRS-ConfigAp-v1310 OPTIONAL,--Need ON srs-ActivateAp-v1310 CHOICE { release NULL, setup SEQUENCE { srs-ConfigApDCI-Format0-v1310 SRS-ConfigAp-v1310 OPTIONAL, -- Need ON srs-ConfigApDCI-Format1a2b2c-v1310 SRS-ConfigAp-v1310 OPTIONAL -- Need ON } } OPTIONAL -- Need ON } } SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13 ::= CHOICE{ release NULL, setup SEQUENCE { srs-UpPtsAdd-r13 ENUMERATED {sym2, sym4}, srs-ConfigIndexAp-r13 INTEGER (0..31), srs-ConfigApDCI-Format4-r13 SEQUENCE (SIZE (1..3)) OF SRS-ConfigAp-r13 OPTIONAL,--Need ON srs-ActivateAp-r13 CHOICE { release NULL, setup SEQUENCE { srs-ConfigApDCI-Format0-r13 SRS-ConfigAp-r13, srs-ConfigApDCI-Format1a2b2c-r13 SRS-ConfigAp-r13 } } OPTIONAL -- Need ON } } SoundingRS-UL-ConfigDedicatedAperiodic-v1430 ::= CHOICE{ release NULL, setup SEQUENCE { srs-SubframeIndication-r14 INTEGER (1..4) OPTIONAL -- Need ON } } SRS-ConfigAp-r10 ::= SEQUENCE { srs-AntennaPortAp-r10 SRS-AntennaPort, srs-BandwidthAp-r10 ENUMERATED {bw0, bw1, bw2, bw3}, freqDomainPositionAp-r10 INTEGER (0..23), transmissionCombAp-r10 INTEGER (0..1), cyclicShiftAp-r10 ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7} } SRS-ConfigAp-v1310 ::= SEQUENCE { transmissionCombAp-v1310 INTEGER (2..3) OPTIONAL, -- Need OR cyclicShiftAp-v1310 ENUMERATED {cs8, cs9, cs10, cs11} OPTIONAL, -- Need OR transmissionCombNum-r13 ENUMERATED {n2, n4} OPTIONAL -- Need OR } SRS-ConfigAp-r13 ::= SEQUENCE { srs-AntennaPortAp-r13 SRS-AntennaPort, srs-BandwidthAp-r13 ENUMERATED {bw0, bw1, bw2, bw3}, freqDomainPositionAp-r13 INTEGER (0..23), transmissionCombAp-r13 INTEGER (0..3), cyclicShiftAp-r13 ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7, cs8, cs9, cs10, cs11}, transmissionCombNum-r13 ENUMERATED {n2, n4} } SRS-AntennaPort ::= ENUMERATED {an1, an2, an4, spare1} SPS-Config ::= SEQUENCE { semiPersistSchedC-RNTI C-RNTI OPTIONAL, -- Need OR sps-ConfigDL SPS-ConfigDL OPTIONAL, -- Need ON sps-ConfigUL SPS-ConfigUL OPTIONAL -- Need ON } SPS-Config-v1430 ::= SEQUENCE { ul-SPS-V-RNTI-r14 C-RNTI OPTIONAL, -- Need OR sl-SPS-V-RNTI-r14 C-RNTI OPTIONAL, -- Need OR sps-ConfigUL-ToAddModList-r14 SPS-ConfigUL-ToAddModList-r14 OPTIONAL, -- Need ON sps-ConfigUL-ToReleaseList-r14 SPS-ConfigUL-ToReleaseList-r14 OPTIONAL, -- Need ON sps-ConfigSL-ToAddModList-r14 SPS-ConfigSL-ToAddModList-r14 OPTIONAL, -- Need ON sps-ConfigSL-ToReleaseList-r14 SPS-ConfigSL-ToReleaseList-r14 OPTIONAL -- Need ON } SPS-ConfigUL-ToAddModList-r14 ::= SEQUENCE (SIZE (1..maxConfigSPS-r14)) OF SPS-ConfigUL SPS-ConfigUL-ToReleaseList-r14 ::= SEQUENCE (SIZE (1..maxConfigSPS-r14)) OF SPS-ConfigIndex-r14 SPS-ConfigSL-ToAddModList-r14 ::= SEQUENCE (SIZE (1..maxConfigSPS-r14)) OF SPS-ConfigSL-r14 SPS-ConfigSL-ToReleaseList-r14 ::= SEQUENCE (SIZE (1..maxConfigSPS-r14)) OF SPS-ConfigIndex-r14 SPS-ConfigDL ::= CHOICE{ release NULL, setup SEQUENCE { semiPersistSchedIntervalDL ENUMERATED { sf10, sf20, sf32, sf40, sf64, sf80, sf128, sf160, sf320, sf640, spare6, spare5, spare4, spare3, spare2, spare1}, numberOfConfSPS-Processes INTEGER (1..8), n1PUCCH-AN-PersistentList N1PUCCH-AN-PersistentList, ..., [[ twoAntennaPortActivated-r10 CHOICE { release NULL, setup SEQUENCE { n1PUCCH-AN-PersistentListP1-r10 N1PUCCH-AN-PersistentList } } OPTIONAL -- Need ON ]] } } SPS-ConfigUL ::= CHOICE { release NULL, setup SEQUENCE { semiPersistSchedIntervalUL ENUMERATED { sf10, sf20, sf32, sf40, sf64, sf80, sf128, sf160, sf320, sf640, sf1-v1430, sf2-v1430, sf3-v1430, sf4-v1430, sf5-v1430, spare1}, implicitReleaseAfter ENUMERATED {e2, e3, e4, e8}, p0-Persistent SEQUENCE { p0-NominalPUSCH-Persistent INTEGER (-126..24), p0-UE-PUSCH-Persistent INTEGER (-8..7) } OPTIONAL, -- Need OP twoIntervalsConfig ENUMERATED {true} OPTIONAL, -- Cond TDD ..., [[ p0-PersistentSubframeSet2-r12 CHOICE { release NULL, setup SEQUENCE { p0-NominalPUSCH-PersistentSubframeSet2-r12 INTEGER (-126..24), p0-UE-PUSCH-PersistentSubframeSet2-r12 INTEGER (-8..7) } } OPTIONAL -- Need ON ]], [[ numberOfConfUlSPS-Processes-r13 INTEGER (1..8) OPTIONAL -- Need OR ]], [[ fixedRV-NonAdaptive-r14 ENUMERATED {true} OPTIONAL, -- Need OR sps-ConfigIndex-r14 SPS-ConfigIndex-r14 OPTIONAL, -- Need OR semiPersistSchedIntervalUL-v1430 ENUMERATED { sf50, sf100, sf200, sf300, sf400, sf500, sf600, sf700, sf800, sf900, sf1000, spare5, spare4, spare3, spare2, spare1} OPTIONAL -- Need OR ]] } } SPS-ConfigSL-r14 ::= SEQUENCE { sps-ConfigIndex-r14 SPS-ConfigIndex-r14, semiPersistSchedIntervalSL-r14 ENUMERATED { sf20, sf50, sf100, sf200, sf300, sf400, sf500, sf600, sf700, sf800, sf900, sf1000, spare4, spare3, spare2, spare1} } SPS-ConfigIndex-r14 ::= INTEGER (1..maxConfigSPS-r14) N1PUCCH-AN-PersistentList ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) SRS-TPC-PDCCH-Config-r14 ::= CHOICE { release NULL, setup SEQUENCE { srs-TPC-RNTI-r14 BIT STRING (SIZE (16)), startingBitOfFormat3B-r14 INTEGER (0..31), fieldTypeFormat3B-r14 INTEGER (1..4), srs-CC-SetIndexlist-r14 SEQUENCE (SIZE(1..4)) OF SRS-CC-SetIndex-r14 OPTIONAL -- Cond SRS-Trigger-TypeA } } SRS-CC-SetIndex-r14 ::= SEQUENCE { cc-SetIndex-r14 INTEGER (0..3), cc-IndexInOneCC-Set-r14 INTEGER (0..7) } TDD-Config ::= SEQUENCE { subframeAssignment ENUMERATED { sa0, sa1, sa2, sa3, sa4, sa5, sa6}, specialSubframePatterns ENUMERATED { ssp0, ssp1, ssp2, ssp3, ssp4,ssp5, ssp6, ssp7, ssp8} } TDD-Config-v1130 ::= SEQUENCE { specialSubframePatterns-v1130 ENUMERATED {ssp7,ssp9} } TDD-Config-v1430 ::= SEQUENCE { specialSubframePatterns-v1430 ENUMERATED {ssp10} } TDD-ConfigSL-r12 ::= SEQUENCE { subframeAssignmentSL-r12 ENUMERATED { none, sa0, sa1, sa2, sa3, sa4, sa5, sa6} } TimeAlignmentTimer ::= ENUMERATED { sf500, sf750, sf1280, sf1920, sf2560, sf5120, sf10240, infinity} TPC-PDCCH-Config ::= CHOICE { release NULL, setup SEQUENCE { tpc-RNTI BIT STRING (SIZE (16)), tpc-Index TPC-Index } } TPC-PDCCH-ConfigSCell-r13 ::= CHOICE { release NULL, setup SEQUENCE { tpc-Index-PUCCH-SCell-r13 TPC-Index } } TPC-Index ::= CHOICE { indexOfFormat3 INTEGER (1..15), indexOfFormat3A INTEGER (1..31) } TunnelConfigLWIP-r13 ::= SEQUENCE { ip-Address-r13 IP-Address-r13, ike-Identity-r13 IKE-Identity-r13, ..., [[ lwip-Counter-r13 INTEGER (0..65535) OPTIONAL -- Cond LWIP-Setup ]] } IKE-Identity-r13 ::= SEQUENCE { idI-r13 OCTET STRING } IP-Address-r13 ::= CHOICE { ipv4-r13 BIT STRING (SIZE (32)), ipv6-r13 BIT STRING (SIZE (128)) } UplinkPowerControlCommon ::= SEQUENCE { p0-NominalPUSCH INTEGER (-126..24), alpha Alpha-r12, p0-NominalPUCCH INTEGER (-127..-96), deltaFList-PUCCH DeltaFList-PUCCH, deltaPreambleMsg3 INTEGER (-1..6) } UplinkPowerControlCommon-v1020 ::= SEQUENCE { deltaF-PUCCH-Format3-r10 ENUMERATED {deltaF-1, deltaF0, deltaF1, deltaF2, deltaF3, deltaF4, deltaF5, deltaF6}, deltaF-PUCCH-Format1bCS-r10 ENUMERATED {deltaF1, deltaF2, spare2, spare1} } UplinkPowerControlCommon-v1310 ::= SEQUENCE { deltaF-PUCCH-Format4-r13 ENUMERATED {deltaF16, deltaF15, deltaF14,deltaF13, deltaF12, deltaF11, deltaF10, spare1} OPTIONAL, -- Need OR deltaF-PUCCH-Format5-13 ENUMERATED { deltaF13, deltaF12, deltaF11, deltaF10, deltaF9, deltaF8, deltaF7, spare1} OPTIONAL -- Need OR } UplinkPowerControlCommonPSCell-r12 ::= SEQUENCE { -- For uplink power control the additional/ missing fields are signalled (compared to SCell) deltaF-PUCCH-Format3-r12 ENUMERATED {deltaF-1, deltaF0, deltaF1, deltaF2, deltaF3, deltaF4, deltaF5, deltaF6}, deltaF-PUCCH-Format1bCS-r12 ENUMERATED {deltaF1, deltaF2, spare2, spare1}, p0-NominalPUCCH-r12 INTEGER (-127..-96), deltaFList-PUCCH-r12 DeltaFList-PUCCH } UplinkPowerControlCommonSCell-r10 ::= SEQUENCE { p0-NominalPUSCH-r10 INTEGER (-126..24), alpha-r10 Alpha-r12 } UplinkPowerControlCommonSCell-v1130 ::= SEQUENCE { deltaPreambleMsg3-r11 INTEGER (-1..6) } UplinkPowerControlCommonSCell-v1310 ::= SEQUENCE { -- For uplink power control the additional/ missing fields are signalled (compared to SCell) p0-NominalPUCCH INTEGER (-127..-96), deltaFList-PUCCH DeltaFList-PUCCH, deltaF-PUCCH-Format3-r12 ENUMERATED {deltaF-1, deltaF0, deltaF1, deltaF2, deltaF3, deltaF4, deltaF5, deltaF6} OPTIONAL, -- Need OR deltaF-PUCCH-Format1bCS-r12 ENUMERATED {deltaF1, deltaF2, spare2, spare1} OPTIONAL, -- Need OR deltaF-PUCCH-Format4-r13 ENUMERATED {deltaF16, deltaF15, deltaF14, deltaF13, deltaF12, deltaF11, deltaF10, spare1} OPTIONAL, -- Need OR deltaF-PUCCH-Format5-13 ENUMERATED { deltaF13, deltaF12, deltaF11, deltaF10, deltaF9, deltaF8, deltaF7, spare1} OPTIONAL -- Need OR } UplinkPowerControlCommonPUSCH-LessCell-v1430 ::= SEQUENCE { p0-Nominal-PeriodicSRS-r14 INTEGER (-126..24) OPTIONAL, -- Need OR p0-Nominal-AperiodicSRS-r14 INTEGER (-126..24) OPTIONAL, -- Need OR alpha-SRS-r14 Alpha-r12 OPTIONAL -- Need OR } UplinkPowerControlDedicated ::= SEQUENCE { p0-UE-PUSCH INTEGER (-8..7), deltaMCS-Enabled ENUMERATED {en0, en1}, accumulationEnabled BOOLEAN, p0-UE-PUCCH INTEGER (-8..7), pSRS-Offset INTEGER (0..15), filterCoefficient FilterCoefficient DEFAULT fc4 } UplinkPowerControlDedicated-v1020 ::= SEQUENCE { deltaTxD-OffsetListPUCCH-r10 DeltaTxD-OffsetListPUCCH-r10 OPTIONAL, -- Need OR pSRS-OffsetAp-r10 INTEGER (0..15) OPTIONAL -- Need OR } UplinkPowerControlDedicated-v1130 ::= SEQUENCE { pSRS-Offset-v1130 INTEGER (16..31) OPTIONAL, -- Need OR pSRS-OffsetAp-v1130 INTEGER (16..31) OPTIONAL, -- Need OR deltaTxD-OffsetListPUCCH-v1130 DeltaTxD-OffsetListPUCCH-v1130 OPTIONAL -- Need OR } UplinkPowerControlDedicated-v1250 ::= SEQUENCE { set2PowerControlParameter CHOICE { release NULL, setup SEQUENCE { tpc-SubframeSet-r12 BIT STRING (SIZE(10)), p0-NominalPUSCH-SubframeSet2-r12 INTEGER (-126..24), alpha-SubframeSet2-r12 Alpha-r12, p0-UE-PUSCH-SubframeSet2-r12 INTEGER (-8..7) } } } UplinkPUSCH-LessPowerControlDedicated-v1430 ::= SEQUENCE { p0-UE-PeriodicSRS-r14 INTEGER (-8..7) OPTIONAL, -- Need OR p0-UE-AperiodicSRS-r14 INTEGER (-8..7) OPTIONAL, -- Need OR accumulationEnabled-r14 BOOLEAN } UplinkPowerControlDedicatedSCell-r10 ::= SEQUENCE { p0-UE-PUSCH-r10 INTEGER (-8..7), deltaMCS-Enabled-r10 ENUMERATED {en0, en1}, accumulationEnabled-r10 BOOLEAN, pSRS-Offset-r10 INTEGER (0..15), pSRS-OffsetAp-r10 INTEGER (0..15) OPTIONAL, -- Need OR filterCoefficient-r10 FilterCoefficient DEFAULT fc4, pathlossReferenceLinking-r10 ENUMERATED {pCell, sCell} } UplinkPowerControlDedicatedSCell-v1310 ::= SEQUENCE { --Release 8 p0-UE-PUCCH INTEGER (-8..7), --Release 10 deltaTxD-OffsetListPUCCH-r10 DeltaTxD-OffsetListPUCCH-r10 OPTIONAL -- Need OR } Alpha-r12 ::= ENUMERATED {al0, al04, al05, al06, al07, al08, al09, al1} DeltaFList-PUCCH ::= SEQUENCE { deltaF-PUCCH-Format1 ENUMERATED {deltaF-2, deltaF0, deltaF2}, deltaF-PUCCH-Format1b ENUMERATED {deltaF1, deltaF3, deltaF5}, deltaF-PUCCH-Format2 ENUMERATED {deltaF-2, deltaF0, deltaF1, deltaF2}, deltaF-PUCCH-Format2a ENUMERATED {deltaF-2, deltaF0, deltaF2}, deltaF-PUCCH-Format2b ENUMERATED {deltaF-2, deltaF0, deltaF2} } DeltaTxD-OffsetListPUCCH-r10 ::= SEQUENCE { deltaTxD-OffsetPUCCH-Format1-r10 ENUMERATED {dB0, dB-2}, deltaTxD-OffsetPUCCH-Format1a1b-r10 ENUMERATED {dB0, dB-2}, deltaTxD-OffsetPUCCH-Format22a2b-r10 ENUMERATED {dB0, dB-2}, deltaTxD-OffsetPUCCH-Format3-r10 ENUMERATED {dB0, dB-2}, ... } DeltaTxD-OffsetListPUCCH-v1130 ::= SEQUENCE { deltaTxD-OffsetPUCCH-Format1bCS-r11 ENUMERATED {dB0, dB-1} } WLAN-Id-List-r13 ::= SEQUENCE (SIZE (1..maxWLAN-Id-r13)) OF WLAN-Identifiers-r12 WLAN-MobilityConfig-r13 ::= SEQUENCE { wlan-ToReleaseList-r13 WLAN-Id-List-r13 OPTIONAL, -- Need ON wlan-ToAddList-r13 WLAN-Id-List-r13 OPTIONAL, -- Need ON associationTimer-r13 ENUMERATED {s10, s30, s60, s120, s240} OPTIONAL, -- Need OR successReportRequested-r13 ENUMERATED {true} OPTIONAL, -- Need OR ..., [[ wlan-SuspendConfig-r14 WLAN-SuspendConfig-r14 OPTIONAL -- Need ON ]] } NextHopChainingCount ::= INTEGER (0..7) SecurityAlgorithmConfig ::= SEQUENCE { cipheringAlgorithm CipheringAlgorithm-r12, integrityProtAlgorithm ENUMERATED { eia0-v920, eia1, eia2, eia3-v1130, spare4, spare3, spare2, spare1, ...} } CipheringAlgorithm-r12 ::= ENUMERATED { eea0, eea1, eea2, eea3-v1130, spare4, spare3, spare2, spare1, ...} ShortMAC-I ::= BIT STRING (SIZE (16)) AdditionalSpectrumEmission ::= INTEGER (1..32) AdditionalSpectrumEmission-v10l0 ::= INTEGER (33..288) ARFCN-ValueCDMA2000 ::= INTEGER (0..2047) ARFCN-ValueEUTRA ::= INTEGER (0..maxEARFCN) ARFCN-ValueEUTRA-v9e0 ::= INTEGER (maxEARFCN-Plus1..maxEARFCN2) ARFCN-ValueEUTRA-r9 ::= INTEGER (0..maxEARFCN2) ARFCN-ValueGERAN ::= INTEGER (0..1023) ARFCN-ValueUTRA ::= INTEGER (0..16383) BandclassCDMA2000 ::= ENUMERATED { bc0, bc1, bc2, bc3, bc4, bc5, bc6, bc7, bc8, bc9, bc10, bc11, bc12, bc13, bc14, bc15, bc16, bc17, bc18-v9a0, bc19-v9a0, bc20-v9a0, bc21-v9a0, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1, ...} BandIndicatorGERAN ::= ENUMERATED {dcs1800, pcs1900} CarrierFreqCDMA2000 ::= SEQUENCE { bandClass BandclassCDMA2000, arfcn ARFCN-ValueCDMA2000 } CarrierFreqGERAN ::= SEQUENCE { arfcn ARFCN-ValueGERAN, bandIndicator BandIndicatorGERAN } CarrierFreqsGERAN ::= SEQUENCE { startingARFCN ARFCN-ValueGERAN, bandIndicator BandIndicatorGERAN, followingARFCNs CHOICE { explicitListOfARFCNs ExplicitListOfARFCNs, equallySpacedARFCNs SEQUENCE { arfcn-Spacing INTEGER (1..8), numberOfFollowingARFCNs INTEGER (0..31) }, variableBitMapOfARFCNs OCTET STRING (SIZE (1..16)) } } ExplicitListOfARFCNs ::= SEQUENCE (SIZE (0..31)) OF ARFCN-ValueGERAN CarrierFreqListMBMS-r11 ::= SEQUENCE (SIZE (1..maxFreqMBMS-r11)) OF ARFCN-ValueEUTRA-r9 CDMA2000-Type ::= ENUMERATED {type1XRTT, typeHRPD} CellIdentity ::= BIT STRING (SIZE (28)) CellIndexList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellIndex CellIndex ::= INTEGER (1..maxCellMeas) CellReselectionPriority ::= INTEGER (0..7) CellSelectionInfoCE-r13 ::= SEQUENCE { q-RxLevMinCE-r13 Q-RxLevMin, q-QualMinRSRQ-CE-r13 Q-QualMin-r9 OPTIONAL -- Need OR } CellSelectionInfoCE1-r13 ::= SEQUENCE { q-RxLevMinCE1-r13 Q-RxLevMin, q-QualMinRSRQ-CE1-r13 Q-QualMin-r9 OPTIONAL -- Need OR } CellSelectionInfoCE1-v1360 ::= SEQUENCE { delta-RxLevMinCE1-v1360 INTEGER (-8..-1) } CellReselectionSubPriority-r13 ::= ENUMERATED {oDot2, oDot4, oDot6, oDot8} CSFB-RegistrationParam1XRTT ::= SEQUENCE { sid BIT STRING (SIZE (15)), nid BIT STRING (SIZE (16)), multipleSID BOOLEAN, multipleNID BOOLEAN, homeReg BOOLEAN, foreignSIDReg BOOLEAN, foreignNIDReg BOOLEAN, parameterReg BOOLEAN, powerUpReg BOOLEAN, registrationPeriod BIT STRING (SIZE (7)), registrationZone BIT STRING (SIZE (12)), totalZone BIT STRING (SIZE (3)), zoneTimer BIT STRING (SIZE (3)) } CSFB-RegistrationParam1XRTT-v920 ::= SEQUENCE { powerDownReg-r9 ENUMERATED {true} } CellGlobalIdEUTRA ::= SEQUENCE { plmn-Identity PLMN-Identity, cellIdentity CellIdentity } CellGlobalIdUTRA ::= SEQUENCE { plmn-Identity PLMN-Identity, cellIdentity BIT STRING (SIZE (28)) } CellGlobalIdGERAN ::= SEQUENCE { plmn-Identity PLMN-Identity, locationAreaCode BIT STRING (SIZE (16)), cellIdentity BIT STRING (SIZE (16)) } CellGlobalIdCDMA2000 ::= CHOICE { cellGlobalId1XRTT BIT STRING (SIZE (47)), cellGlobalIdHRPD BIT STRING (SIZE (128)) } CellSelectionInfoNFreq-r13 ::= SEQUENCE { -- Cell selection information as in SIB1 q-RxLevMin-r13 Q-RxLevMin, q-RxLevMinOffset INTEGER (1..8) OPTIONAL, -- Need OP -- Cell re-selection information as in SIB3 q-Hyst-r13 ENUMERATED { dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, dB12, dB14, dB16, dB18, dB20, dB22, dB24}, q-RxLevMinReselection-r13 Q-RxLevMin, t-ReselectionEUTRA-r13 T-Reselection } CSG-Identity ::= BIT STRING (SIZE (27)) FreqBandIndicator ::= INTEGER (1..maxFBI) FreqBandIndicator-v9e0 ::= INTEGER (maxFBI-Plus1..maxFBI2) FreqBandIndicator-r11 ::= INTEGER (1..maxFBI2) MobilityControlInfo ::= SEQUENCE { targetPhysCellId PhysCellId, carrierFreq CarrierFreqEUTRA OPTIONAL, -- Cond HO-toEUTRA2 carrierBandwidth CarrierBandwidthEUTRA OPTIONAL, -- Cond HO-toEUTRA additionalSpectrumEmission AdditionalSpectrumEmission OPTIONAL, -- Cond HO-toEUTRA t304 ENUMERATED { ms50, ms100, ms150, ms200, ms500, ms1000, ms2000, ms10000-v1310}, newUE-Identity C-RNTI, radioResourceConfigCommon RadioResourceConfigCommon, rach-ConfigDedicated RACH-ConfigDedicated OPTIONAL, -- Need OP ..., [[ carrierFreq-v9e0 CarrierFreqEUTRA-v9e0 OPTIONAL -- Need ON ]], [[ drb-ContinueROHC-r11 ENUMERATED {true} OPTIONAL -- Cond HO ]], [[ mobilityControlInfoV2X-r14 MobilityControlInfoV2X-r14 OPTIONAL, -- Need ON handoverWithoutWT-Change-r14 ENUMERATED {keepLWA-Config, sendEndMarker} OPTIONAL, -- Cond HO makeBeforeBreak-r14 ENUMERATED {true} OPTIONAL, -- Need OR rach-Skip-r14 RACH-Skip-r14 OPTIONAL, -- Need OR sameSFN-Indication-r14 ENUMERATED {true} OPTIONAL -- Cond HO-SFNsynced ]] } MobilityControlInfo-v10l0 ::= SEQUENCE { additionalSpectrumEmission-v10l0 AdditionalSpectrumEmission-v10l0 OPTIONAL -- Need ON } MobilityControlInfoSCG-r12 ::= SEQUENCE { t307-r12 ENUMERATED { ms50, ms100, ms150, ms200, ms500, ms1000, ms2000, spare1}, ue-IdentitySCG-r12 C-RNTI OPTIONAL, -- Cond SCGEst, rach-ConfigDedicated-r12 RACH-ConfigDedicated OPTIONAL, -- Need OP cipheringAlgorithmSCG-r12 CipheringAlgorithm-r12 OPTIONAL, -- Need ON ..., [[ makeBeforeBreakSCG-r14 ENUMERATED {true} OPTIONAL, -- Need OR rach-SkipSCG-r14 RACH-Skip-r14 OPTIONAL -- Need OR ]] } MobilityControlInfoV2X-r14 ::= SEQUENCE { v2x-CommTxPoolExceptional-r14 SL-CommResourcePoolV2X-r14 OPTIONAL, -- Need OR v2x-CommRxPool-r14 SL-CommRxPoolListV2X-r14 OPTIONAL, -- Need OR v2x-CommSyncConfig-r14 SL-SyncConfigListV2X-r14 OPTIONAL, -- Need OR cbr-MobilityTxConfigList-r14 SL-CBR-CommonTxConfigList-r14 OPTIONAL -- Need OR } CarrierBandwidthEUTRA ::= SEQUENCE { dl-Bandwidth ENUMERATED { n6, n15, n25, n50, n75, n100, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}, ul-Bandwidth ENUMERATED { n6, n15, n25, n50, n75, n100, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1} OPTIONAL -- Need OP } CarrierFreqEUTRA ::= SEQUENCE { dl-CarrierFreq ARFCN-ValueEUTRA, ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL -- Cond FDD } CarrierFreqEUTRA-v9e0 ::= SEQUENCE { dl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-r9, ul-CarrierFreq-v9e0 ARFCN-ValueEUTRA-r9 OPTIONAL -- Cond FDD } RACH-Skip-r14 ::= SEQUENCE { targetTA-r14 CHOICE { ta0-r14 NULL, mcg-PTAG-r14 NULL, scg-PTAG-r14 NULL, mcg-STAG-r14 STAG-Id-r11, scg-STAG-r14 STAG-Id-r11 }, ul-ConfigInfo-r14 SEQUENCE { numberOfConfUL-Processes-r14 INTEGER (1..8), ul-SchedInterval-r14 ENUMERATED {sf2, sf5, sf10}, ul-StartSubframe-r14 INTEGER (0..9), ul-Grant-r14 BIT STRING (SIZE (16)) } OPTIONAL -- Need OR } MobilityParametersCDMA2000 ::= OCTET STRING MobilityStateParameters ::= SEQUENCE { t-Evaluation ENUMERATED { s30, s60, s120, s180, s240, spare3, spare2, spare1}, t-HystNormal ENUMERATED { s30, s60, s120, s180, s240, spare3, spare2, spare1}, n-CellChangeMedium INTEGER (1..16), n-CellChangeHigh INTEGER (1..16) } MultiBandInfoList ::= SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator MultiBandInfoList-v9e0 ::= SEQUENCE (SIZE (1..maxMultiBands)) OF MultiBandInfo-v9e0 MultiBandInfoList-v10j0 ::= SEQUENCE (SIZE (1..maxMultiBands)) OF NS-PmaxList-r10 MultiBandInfoList-v10l0 ::= SEQUENCE (SIZE (1..maxMultiBands)) OF NS-PmaxList-v10l0 MultiBandInfoList-r11 ::= SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-r11 MultiBandInfo-v9e0 ::= SEQUENCE { freqBandIndicator-v9e0 FreqBandIndicator-v9e0 OPTIONAL -- Need OP } NS-PmaxList-r10 ::= SEQUENCE (SIZE (1..maxNS-Pmax-r10)) OF NS-PmaxValue-r10 NS-PmaxList-v10l0 ::= SEQUENCE (SIZE (1..maxNS-Pmax-r10)) OF NS-PmaxValue-v10l0 NS-PmaxValue-r10 ::= SEQUENCE { additionalPmax-r10 P-Max OPTIONAL, -- Need OP additionalSpectrumEmission AdditionalSpectrumEmission } NS-PmaxValue-v10l0 ::= SEQUENCE { additionalSpectrumEmission-v10l0 AdditionalSpectrumEmission-v10l0 OPTIONAL -- Need OP } PhysCellId ::= INTEGER (0..503) PhysCellIdRange ::= SEQUENCE { start PhysCellId, range ENUMERATED { n4, n8, n12, n16, n24, n32, n48, n64, n84, n96, n128, n168, n252, n504, spare2, spare1} OPTIONAL -- Need OP } PhysCellIdRangeUTRA-FDDList-r9::= SEQUENCE (SIZE (1..maxPhysCellIdRange-r9)) OF PhysCellIdRangeUTRA-FDD-r9 PhysCellIdRangeUTRA-FDD-r9 ::= SEQUENCE { start-r9 PhysCellIdUTRA-FDD, range-r9 INTEGER (2..512) OPTIONAL -- Need OP } PhysCellIdCDMA2000 ::= INTEGER (0..maxPNOffset) PhysCellIdGERAN ::= SEQUENCE { networkColourCode BIT STRING (SIZE (3)), baseStationColourCode BIT STRING (SIZE (3)) } PhysCellIdUTRA-FDD ::= INTEGER (0..511) PhysCellIdUTRA-TDD ::= INTEGER (0..127) PLMN-Identity ::= SEQUENCE { mcc MCC OPTIONAL, -- Cond MCC mnc MNC } MCC ::= SEQUENCE (SIZE (3)) OF MCC-MNC-Digit MNC ::= SEQUENCE (SIZE (2..3)) OF MCC-MNC-Digit MCC-MNC-Digit ::= INTEGER (0..9) PLMN-IdentityList3-r11 ::= SEQUENCE (SIZE (1..16)) OF PLMN-Identity PreRegistrationInfoHRPD ::= SEQUENCE { preRegistrationAllowed BOOLEAN, preRegistrationZoneId PreRegistrationZoneIdHRPD OPTIONAL, -- cond PreRegAllowed secondaryPreRegistrationZoneIdList SecondaryPreRegistrationZoneIdListHRPD OPTIONAL -- Need OR } SecondaryPreRegistrationZoneIdListHRPD ::= SEQUENCE (SIZE (1..2)) OF PreRegistrationZoneIdHRPD PreRegistrationZoneIdHRPD ::= INTEGER (0..255) Q-QualMin-r9 ::= INTEGER (-34..-3) Q-RxLevMin ::= INTEGER (-70..-22) Q-OffsetRange ::= ENUMERATED { dB-24, dB-22, dB-20, dB-18, dB-16, dB-14, dB-12, dB-10, dB-8, dB-6, dB-5, dB-4, dB-3, dB-2, dB-1, dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, dB12, dB14, dB16, dB18, dB20, dB22, dB24} Q-OffsetRangeInterRAT ::= INTEGER (-15..15) ReselectionThreshold ::= INTEGER (0..31) ReselectionThresholdQ-r9 ::= INTEGER (0..31) SCellIndex-r10 ::= INTEGER (1..7) SCellIndex-r13 ::= INTEGER (1..31) ServCellIndex-r10 ::= INTEGER (0..7) ServCellIndex-r13 ::= INTEGER (0..31) SpeedStateScaleFactors ::= SEQUENCE { sf-Medium ENUMERATED {oDot25, oDot5, oDot75, lDot0}, sf-High ENUMERATED {oDot25, oDot5, oDot75, lDot0} } SystemInfoListGERAN ::= SEQUENCE (SIZE (1..maxGERAN-SI)) OF OCTET STRING (SIZE (1..23)) SystemTimeInfoCDMA2000 ::= SEQUENCE { cdma-EUTRA-Synchronisation BOOLEAN, cdma-SystemTime CHOICE { synchronousSystemTime BIT STRING (SIZE (39)), asynchronousSystemTime BIT STRING (SIZE (49)) } } TrackingAreaCode ::= BIT STRING (SIZE (16)) T-Reselection ::= INTEGER (0..7) T-ReselectionEUTRA-CE-r13 ::= INTEGER (0..15) AllowedMeasBandwidth ::= ENUMERATED {mbw6, mbw15, mbw25, mbw50, mbw75, mbw100} CSI-RSRP-Range-r12 ::= INTEGER(0..97) Hysteresis ::= INTEGER (0..30) LocationInfo-r10 ::= SEQUENCE { locationCoordinates-r10 CHOICE { ellipsoid-Point-r10 OCTET STRING, ellipsoidPointWithAltitude-r10 OCTET STRING, ..., ellipsoidPointWithUncertaintyCircle-r11 OCTET STRING, ellipsoidPointWithUncertaintyEllipse-r11 OCTET STRING, ellipsoidPointWithAltitudeAndUncertaintyEllipsoid-r11 OCTET STRING, ellipsoidArc-r11 OCTET STRING, polygon-r11 OCTET STRING }, horizontalVelocity-r10 OCTET STRING OPTIONAL, gnss-TOD-msec-r10 OCTET STRING OPTIONAL, ... } MBSFN-RSRQ-Range-r12 ::= INTEGER(0..31) MeasConfig ::= SEQUENCE { -- Measurement objects measObjectToRemoveList MeasObjectToRemoveList OPTIONAL, -- Need ON measObjectToAddModList MeasObjectToAddModList OPTIONAL, -- Need ON -- Reporting configurations reportConfigToRemoveList ReportConfigToRemoveList OPTIONAL, -- Need ON reportConfigToAddModList ReportConfigToAddModList OPTIONAL, -- Need ON -- Measurement identities measIdToRemoveList MeasIdToRemoveList OPTIONAL, -- Need ON measIdToAddModList MeasIdToAddModList OPTIONAL, -- Need ON -- Other parameters quantityConfig QuantityConfig OPTIONAL, -- Need ON measGapConfig MeasGapConfig OPTIONAL, -- Need ON s-Measure RSRP-Range OPTIONAL, -- Need ON preRegistrationInfoHRPD PreRegistrationInfoHRPD OPTIONAL, -- Need OP speedStatePars CHOICE { release NULL, setup SEQUENCE { mobilityStateParameters MobilityStateParameters, timeToTrigger-SF SpeedStateScaleFactors } } OPTIONAL, -- Need ON ..., [[ measObjectToAddModList-v9e0 MeasObjectToAddModList-v9e0 OPTIONAL -- Need ON ]], [[ allowInterruptions-r11 BOOLEAN OPTIONAL -- Need ON ]], [[ measScaleFactor-r12 CHOICE { release NULL, setup MeasScaleFactor-r12 } OPTIONAL, -- Need ON measIdToRemoveListExt-r12 MeasIdToRemoveListExt-r12 OPTIONAL, -- Need ON measIdToAddModListExt-r12 MeasIdToAddModListExt-r12 OPTIONAL, -- Need ON measRSRQ-OnAllSymbols-r12 BOOLEAN OPTIONAL -- Need ON ]], [[ measObjectToRemoveListExt-r13 MeasObjectToRemoveListExt-r13 OPTIONAL, -- Need ON measObjectToAddModListExt-r13 MeasObjectToAddModListExt-r13 OPTIONAL, -- Need ON measIdToAddModList-v1310 MeasIdToAddModList-v1310 OPTIONAL, -- Need ON measIdToAddModListExt-v1310 MeasIdToAddModListExt-v1310 OPTIONAL -- Need ON ]], [[ measGapConfigPerCC-List-r14 MeasGapConfigPerCC-List-r14 OPTIONAL, -- Need ON measGapSharingConfig-r14 MeasGapSharingConfig-r14 OPTIONAL -- Need ON ]] } MeasIdToRemoveList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasId MeasIdToRemoveListExt-r12 ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasId-v1250 MeasObjectToRemoveList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectId MeasObjectToRemoveListExt-r13 ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectId-v1310 ReportConfigToRemoveList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigId MeasDS-Config-r12 ::= CHOICE { release NULL, setup SEQUENCE { dmtc-PeriodOffset-r12 CHOICE { ms40-r12 INTEGER(0..39), ms80-r12 INTEGER(0..79), ms160-r12 INTEGER(0..159), ... }, ds-OccasionDuration-r12 CHOICE { durationFDD-r12 INTEGER(1..maxDS-Duration-r12), durationTDD-r12 INTEGER(2..maxDS-Duration-r12) }, measCSI-RS-ToRemoveList-r12 MeasCSI-RS-ToRemoveList-r12 OPTIONAL, -- Need ON measCSI-RS-ToAddModList-r12 MeasCSI-RS-ToAddModList-r12 OPTIONAL, -- Need ON ... } } MeasCSI-RS-ToRemoveList-r12 ::= SEQUENCE (SIZE (1..maxCSI-RS-Meas-r12)) OF MeasCSI-RS-Id-r12 MeasCSI-RS-ToAddModList-r12 ::= SEQUENCE (SIZE (1..maxCSI-RS-Meas-r12)) OF MeasCSI-RS-Config-r12 MeasCSI-RS-Id-r12 ::= INTEGER (1..maxCSI-RS-Meas-r12) MeasCSI-RS-Config-r12 ::= SEQUENCE { measCSI-RS-Id-r12 MeasCSI-RS-Id-r12, physCellId-r12 INTEGER (0..503), scramblingIdentity-r12 INTEGER (0..503), resourceConfig-r12 INTEGER (0..31), subframeOffset-r12 INTEGER (0..4), csi-RS-IndividualOffset-r12 Q-OffsetRange, ... } MeasGapConfig ::= CHOICE { release NULL, setup SEQUENCE { gapOffset CHOICE { gp0 INTEGER (0..39), gp1 INTEGER (0..79), ..., gp2-r14 INTEGER (0..39), gp3-r14 INTEGER (0..79), gp-ncsg0-r14 INTEGER (0..39), gp-ncsg1-r14 INTEGER (0..79), gp-ncsg2-r14 INTEGER (0..39), gp-ncsg3-r14 INTEGER (0..79), gp-nonUniform1-r14 INTEGER (0..1279), gp-nonUniform2-r14 INTEGER (0..2559), gp-nonUniform3-r14 INTEGER (0..5119), gp-nonUniform4-r14 INTEGER (0..10239) } } } MeasGapConfigPerCC-List-r14 ::= CHOICE { release NULL, setup SEQUENCE { measGapConfigToRemoveList-r14 MeasGapConfigToRemoveList-r14 OPTIONAL, -- Need ON measGapConfigToAddModList-r14 MeasGapConfigToAddModList-r14 OPTIONAL -- Need ON } } MeasGapConfigToRemoveList-r14 ::= SEQUENCE (SIZE (1..maxServCell-r13)) OF ServCellIndex-r13 MeasGapConfigToAddModList-r14 ::= SEQUENCE (SIZE (1..maxServCell-r13)) OF MeasGapConfigPerCC-r14 MeasGapConfigPerCC-r14 ::= SEQUENCE { servCellId-r14 ServCellIndex-r13, measGapConfigCC-r14 MeasGapConfig } MeasGapSharingConfig-r14 ::= CHOICE { release NULL, setup SEQUENCE { measGapSharingScheme-r14 ENUMERATED {scheme00, scheme01, scheme10, scheme11} } } MeasId ::= INTEGER (1..maxMeasId) MeasId-v1250 ::= INTEGER (maxMeasId-Plus1..maxMeasId-r12) MeasIdToAddModList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasIdToAddMod MeasIdToAddModList-v1310 ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasIdToAddMod-v1310 MeasIdToAddModListExt-r12 ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasIdToAddModExt-r12 MeasIdToAddModListExt-v1310 ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasIdToAddMod-v1310 MeasIdToAddMod ::= SEQUENCE { measId MeasId, measObjectId MeasObjectId, reportConfigId ReportConfigId } MeasIdToAddModExt-r12 ::= SEQUENCE { measId-v1250 MeasId-v1250, measObjectId-r12 MeasObjectId, reportConfigId-r12 ReportConfigId } MeasIdToAddMod-v1310 ::= SEQUENCE { measObjectId-v1310 MeasObjectId-v1310 OPTIONAL } MeasObjectCDMA2000 ::= SEQUENCE { cdma2000-Type CDMA2000-Type, carrierFreq CarrierFreqCDMA2000, searchWindowSize INTEGER (0..15) OPTIONAL, -- Need ON offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, cellsToRemoveList CellIndexList OPTIONAL, -- Need ON cellsToAddModList CellsToAddModListCDMA2000 OPTIONAL, -- Need ON cellForWhichToReportCGI PhysCellIdCDMA2000 OPTIONAL, -- Need ON ... } CellsToAddModListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModCDMA2000 CellsToAddModCDMA2000 ::= SEQUENCE { cellIndex INTEGER (1..maxCellMeas), physCellId PhysCellIdCDMA2000 } MeasObjectEUTRA ::= SEQUENCE { carrierFreq ARFCN-ValueEUTRA, allowedMeasBandwidth AllowedMeasBandwidth, presenceAntennaPort1 PresenceAntennaPort1, neighCellConfig NeighCellConfig, offsetFreq Q-OffsetRange DEFAULT dB0, -- Cell list cellsToRemoveList CellIndexList OPTIONAL, -- Need ON cellsToAddModList CellsToAddModList OPTIONAL, -- Need ON -- Black list blackCellsToRemoveList CellIndexList OPTIONAL, -- Need ON blackCellsToAddModList BlackCellsToAddModList OPTIONAL, -- Need ON cellForWhichToReportCGI PhysCellId OPTIONAL, -- Need ON ..., [[measCycleSCell-r10 MeasCycleSCell-r10 OPTIONAL, -- Need ON measSubframePatternConfigNeigh-r10 MeasSubframePatternConfigNeigh-r10 OPTIONAL -- Need ON ]], [[widebandRSRQ-Meas-r11 BOOLEAN OPTIONAL -- Cond WB-RSRQ ]], [[ altTTT-CellsToRemoveList-r12 CellIndexList OPTIONAL, -- Need ON altTTT-CellsToAddModList-r12 AltTTT-CellsToAddModList-r12 OPTIONAL, -- Need ON t312-r12 CHOICE { release NULL, setup ENUMERATED {ms0, ms50, ms100, ms200, ms300, ms400, ms500, ms1000} } OPTIONAL, -- Need ON reducedMeasPerformance-r12 BOOLEAN OPTIONAL, -- Need ON measDS-Config-r12 MeasDS-Config-r12 OPTIONAL -- Need ON ]], [[ whiteCellsToRemoveList-r13 CellIndexList OPTIONAL, -- Need ON whiteCellsToAddModList-r13 WhiteCellsToAddModList-r13 OPTIONAL, -- Need ON rmtc-Config-r13 RMTC-Config-r13 OPTIONAL, -- Need ON carrierFreq-r13 ARFCN-ValueEUTRA-v9e0 OPTIONAL -- Need ON ]], [[ tx-ResourcePoolToRemoveList-r14 Tx-ResourcePoolMeasList-r14 OPTIONAL, -- Need ON tx-ResourcePoolToAddList-r14 Tx-ResourcePoolMeasList-r14 OPTIONAL, -- Need ON fembms-MixedCarrier-r14 BOOLEAN OPTIONAL -- Need ON ]] } MeasObjectEUTRA-v9e0 ::= SEQUENCE { carrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 } CellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddMod CellsToAddMod ::= SEQUENCE { cellIndex INTEGER (1..maxCellMeas), physCellId PhysCellId, cellIndividualOffset Q-OffsetRange } BlackCellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF BlackCellsToAddMod BlackCellsToAddMod ::= SEQUENCE { cellIndex INTEGER (1..maxCellMeas), physCellIdRange PhysCellIdRange } MeasCycleSCell-r10 ::= ENUMERATED {sf160, sf256, sf320, sf512, sf640, sf1024, sf1280, spare1} MeasSubframePatternConfigNeigh-r10 ::= CHOICE { release NULL, setup SEQUENCE { measSubframePatternNeigh-r10 MeasSubframePattern-r10, measSubframeCellList-r10 MeasSubframeCellList-r10 OPTIONAL -- Cond always } } MeasSubframeCellList-r10 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF PhysCellIdRange AltTTT-CellsToAddModList-r12 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF AltTTT-CellsToAddMod-r12 AltTTT-CellsToAddMod-r12 ::= SEQUENCE { cellIndex-r12 INTEGER (1..maxCellMeas), physCellIdRange-r12 PhysCellIdRange } WhiteCellsToAddModList-r13 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF WhiteCellsToAddMod-r13 WhiteCellsToAddMod-r13 ::= SEQUENCE { cellIndex-r13 INTEGER (1..maxCellMeas), physCellIdRange-r13 PhysCellIdRange } RMTC-Config-r13 ::= CHOICE { release NULL, setup SEQUENCE { rmtc-Period-r13 ENUMERATED {ms40, ms80, ms160, ms320, ms640}, rmtc-SubframeOffset-r13 INTEGER(0..639) OPTIONAL, -- Need ON measDuration-r13 ENUMERATED {sym1, sym14, sym28, sym42, sym70}, ... } } Tx-ResourcePoolMeasList-r14 ::= SEQUENCE (SIZE (1..maxSL-PoolToMeasure-r14)) OF SL-V2X-TxPoolReportIdentity-r14 MeasObjectGERAN ::= SEQUENCE { carrierFreqs CarrierFreqsGERAN, offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, ncc-Permitted BIT STRING(SIZE (8)) DEFAULT '11111111'B, cellForWhichToReportCGI PhysCellIdGERAN OPTIONAL, -- Need ON ... } MeasObjectId ::= INTEGER (1..maxObjectId) MeasObjectId-v1310 ::= INTEGER (maxObjectId-Plus1-r13..maxObjectId-r13) MeasObjectId-r13 ::= INTEGER (1..maxObjectId-r13) MeasObjectToAddModList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddMod MeasObjectToAddModListExt-r13 ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddModExt-r13 MeasObjectToAddModList-v9e0 ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddMod-v9e0 MeasObjectToAddMod ::= SEQUENCE { measObjectId MeasObjectId, measObject CHOICE { measObjectEUTRA MeasObjectEUTRA, measObjectUTRA MeasObjectUTRA, measObjectGERAN MeasObjectGERAN, measObjectCDMA2000 MeasObjectCDMA2000, ..., measObjectWLAN-r13 MeasObjectWLAN-r13 } } MeasObjectToAddModExt-r13 ::= SEQUENCE { measObjectId-r13 MeasObjectId-v1310, measObject-r13 CHOICE { measObjectEUTRA-r13 MeasObjectEUTRA, measObjectUTRA-r13 MeasObjectUTRA, measObjectGERAN-r13 MeasObjectGERAN, measObjectCDMA2000-r13 MeasObjectCDMA2000, ..., measObjectWLAN-v1320 MeasObjectWLAN-r13 } } MeasObjectToAddMod-v9e0 ::= SEQUENCE { measObjectEUTRA-v9e0 MeasObjectEUTRA-v9e0 OPTIONAL -- Cond eutra } MeasObjectUTRA ::= SEQUENCE { carrierFreq ARFCN-ValueUTRA, offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, cellsToRemoveList CellIndexList OPTIONAL, -- Need ON cellsToAddModList CHOICE { cellsToAddModListUTRA-FDD CellsToAddModListUTRA-FDD, cellsToAddModListUTRA-TDD CellsToAddModListUTRA-TDD } OPTIONAL, -- Need ON cellForWhichToReportCGI CHOICE { utra-FDD PhysCellIdUTRA-FDD, utra-TDD PhysCellIdUTRA-TDD } OPTIONAL, -- Need ON ..., [[ csg-allowedReportingCells-v930 CSG-AllowedReportingCells-r9 OPTIONAL -- Need ON ]], [[ reducedMeasPerformance-r12 BOOLEAN OPTIONAL -- Need ON ]] } CellsToAddModListUTRA-FDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-FDD CellsToAddModUTRA-FDD ::= SEQUENCE { cellIndex INTEGER (1..maxCellMeas), physCellId PhysCellIdUTRA-FDD } CellsToAddModListUTRA-TDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-TDD CellsToAddModUTRA-TDD ::= SEQUENCE { cellIndex INTEGER (1..maxCellMeas), physCellId PhysCellIdUTRA-TDD } CSG-AllowedReportingCells-r9 ::= SEQUENCE { physCellIdRangeUTRA-FDDList-r9 PhysCellIdRangeUTRA-FDDList-r9 OPTIONAL -- Need OR } MeasObjectWLAN-r13 ::= SEQUENCE { carrierFreq-r13 CHOICE { bandIndicatorListWLAN-r13 SEQUENCE (SIZE (1..maxWLAN-Bands-r13)) OF WLAN-BandIndicator-r13, carrierInfoListWLAN-r13 SEQUENCE (SIZE (1..maxWLAN-CarrierInfo-r13)) OF WLAN-CarrierInfo-r13 } OPTIONAL, -- Need ON wlan-ToAddModList-r13 WLAN-Id-List-r13 OPTIONAL, -- Need ON wlan-ToRemoveList-r13 WLAN-Id-List-r13 OPTIONAL, -- Need ON ... } WLAN-BandIndicator-r13 ::= ENUMERATED {band2dot4, band5, band60-v1430, spare5, spare4, spare3, spare2, spare1, ...} MeasResults ::= SEQUENCE { measId MeasId, measResultPCell SEQUENCE { rsrpResult RSRP-Range, rsrqResult RSRQ-Range }, measResultNeighCells CHOICE { measResultListEUTRA MeasResultListEUTRA, measResultListUTRA MeasResultListUTRA, measResultListGERAN MeasResultListGERAN, measResultsCDMA2000 MeasResultsCDMA2000, ... } OPTIONAL, ..., [[ measResultForECID-r9 MeasResultForECID-r9 OPTIONAL ]], [[ locationInfo-r10 LocationInfo-r10 OPTIONAL, measResultServFreqList-r10 MeasResultServFreqList-r10 OPTIONAL ]], [[ measId-v1250 MeasId-v1250 OPTIONAL, measResultPCell-v1250 RSRQ-Range-v1250 OPTIONAL, measResultCSI-RS-List-r12 MeasResultCSI-RS-List-r12 OPTIONAL ]], [[ measResultForRSSI-r13 MeasResultForRSSI-r13 OPTIONAL, measResultServFreqListExt-r13 MeasResultServFreqListExt-r13 OPTIONAL, measResultSSTD-r13 MeasResultSSTD-r13 OPTIONAL, measResultPCell-v1310 SEQUENCE { rs-sinr-Result-r13 RS-SINR-Range-r13 } OPTIONAL, ul-PDCP-DelayResultList-r13 UL-PDCP-DelayResultList-r13 OPTIONAL, measResultListWLAN-r13 MeasResultListWLAN-r13 OPTIONAL ]], [[ measResultPCell-v1360 RSRP-Range-v1360 OPTIONAL ]], [[ measResultListCBR-r14 MeasResultListCBR-r14 OPTIONAL, measResultListWLAN-r14 MeasResultListWLAN-r14 OPTIONAL ]] } MeasResultListEUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultEUTRA MeasResultEUTRA ::= SEQUENCE { physCellId PhysCellId, cgi-Info SEQUENCE { cellGlobalId CellGlobalIdEUTRA, trackingAreaCode TrackingAreaCode, plmn-IdentityList PLMN-IdentityList2 OPTIONAL } OPTIONAL, measResult SEQUENCE { rsrpResult RSRP-Range OPTIONAL, rsrqResult RSRQ-Range OPTIONAL, ..., [[ additionalSI-Info-r9 AdditionalSI-Info-r9 OPTIONAL ]], [[ primaryPLMN-Suitable-r12 ENUMERATED {true} OPTIONAL, measResult-v1250 RSRQ-Range-v1250 OPTIONAL ]], [[ rs-sinr-Result-r13 RS-SINR-Range-r13 OPTIONAL, cgi-Info-v1310 SEQUENCE { freqBandIndicator-r13 FreqBandIndicator-r11 OPTIONAL, multiBandInfoList-r13 MultiBandInfoList-r11 OPTIONAL, freqBandIndicatorPriority-r13 ENUMERATED {true} OPTIONAL } OPTIONAL ]], [[ measResult-v1360 RSRP-Range-v1360 OPTIONAL ]] } } MeasResultServFreqList-r10 ::= SEQUENCE (SIZE (1..maxServCell-r10)) OF MeasResultServFreq-r10 MeasResultServFreqListExt-r13 ::= SEQUENCE (SIZE (1..maxServCell-r13)) OF MeasResultServFreq-r13 MeasResultServFreq-r10 ::= SEQUENCE { servFreqId-r10 ServCellIndex-r10, measResultSCell-r10 SEQUENCE { rsrpResultSCell-r10 RSRP-Range, rsrqResultSCell-r10 RSRQ-Range } OPTIONAL, measResultBestNeighCell-r10 SEQUENCE { physCellId-r10 PhysCellId, rsrpResultNCell-r10 RSRP-Range, rsrqResultNCell-r10 RSRQ-Range } OPTIONAL, ..., [[ measResultSCell-v1250 RSRQ-Range-v1250 OPTIONAL, measResultBestNeighCell-v1250 RSRQ-Range-v1250 OPTIONAL ]], [[ measResultSCell-v1310 SEQUENCE { rs-sinr-Result-r13 RS-SINR-Range-r13 } OPTIONAL, measResultBestNeighCell-v1310 SEQUENCE { rs-sinr-Result-r13 RS-SINR-Range-r13 } OPTIONAL ]] } MeasResultServFreq-r13 ::= SEQUENCE { servFreqId-r13 ServCellIndex-r13, measResultSCell-r13 SEQUENCE { rsrpResultSCell-r13 RSRP-Range, rsrqResultSCell-r13 RSRQ-Range-r13, rs-sinr-Result-r13 RS-SINR-Range-r13 OPTIONAL } OPTIONAL, measResultBestNeighCell-r13 SEQUENCE { physCellId-r13 PhysCellId, rsrpResultNCell-r13 RSRP-Range, rsrqResultNCell-r13 RSRQ-Range-r13, rs-sinr-Result-r13 RS-SINR-Range-r13 OPTIONAL } OPTIONAL, ..., [[ measResultBestNeighCell-v1360 SEQUENCE { rsrpResultNCell-v1360 RSRP-Range-v1360 } OPTIONAL ]] } MeasResultCSI-RS-List-r12 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultCSI-RS-r12 MeasResultCSI-RS-r12 ::= SEQUENCE { measCSI-RS-Id-r12 MeasCSI-RS-Id-r12, csi-RSRP-Result-r12 CSI-RSRP-Range-r12, ... } MeasResultListUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultUTRA MeasResultUTRA ::= SEQUENCE { physCellId CHOICE { fdd PhysCellIdUTRA-FDD, tdd PhysCellIdUTRA-TDD }, cgi-Info SEQUENCE { cellGlobalId CellGlobalIdUTRA, locationAreaCode BIT STRING (SIZE (16)) OPTIONAL, routingAreaCode BIT STRING (SIZE (8)) OPTIONAL, plmn-IdentityList PLMN-IdentityList2 OPTIONAL } OPTIONAL, measResult SEQUENCE { utra-RSCP INTEGER (-5..91) OPTIONAL, utra-EcN0 INTEGER (0..49) OPTIONAL, ..., [[ additionalSI-Info-r9 AdditionalSI-Info-r9 OPTIONAL ]], [[ primaryPLMN-Suitable-r12 ENUMERATED {true} OPTIONAL ]] } } MeasResultListGERAN ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultGERAN MeasResultGERAN ::= SEQUENCE { carrierFreq CarrierFreqGERAN, physCellId PhysCellIdGERAN, cgi-Info SEQUENCE { cellGlobalId CellGlobalIdGERAN, routingAreaCode BIT STRING (SIZE (8)) OPTIONAL } OPTIONAL, measResult SEQUENCE { rssi INTEGER (0..63), ... } } MeasResultsCDMA2000 ::= SEQUENCE { preRegistrationStatusHRPD BOOLEAN, measResultListCDMA2000 MeasResultListCDMA2000 } MeasResultListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultCDMA2000 MeasResultCDMA2000 ::= SEQUENCE { physCellId PhysCellIdCDMA2000, cgi-Info CellGlobalIdCDMA2000 OPTIONAL, measResult SEQUENCE { pilotPnPhase INTEGER (0..32767) OPTIONAL, pilotStrength INTEGER (0..63), ... } } MeasResultListWLAN-r13 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultWLAN-r13 MeasResultListWLAN-r14 ::= SEQUENCE (SIZE (1..maxWLAN-Id-Report-r14)) OF MeasResultWLAN-r13 MeasResultWLAN-r13 ::= SEQUENCE { wlan-Identifiers-r13 WLAN-Identifiers-r12, carrierInfoWLAN-r13 WLAN-CarrierInfo-r13 OPTIONAL, bandWLAN-r13 WLAN-BandIndicator-r13 OPTIONAL, rssiWLAN-r13 WLAN-RSSI-Range-r13, availableAdmissionCapacityWLAN-r13 INTEGER (0..31250) OPTIONAL, backhaulDL-BandwidthWLAN-r13 WLAN-backhaulRate-r12 OPTIONAL, backhaulUL-BandwidthWLAN-r13 WLAN-backhaulRate-r12 OPTIONAL, channelUtilizationWLAN-r13 INTEGER (0..255) OPTIONAL, stationCountWLAN-r13 INTEGER (0..65535) OPTIONAL, connectedWLAN-r13 ENUMERATED {true} OPTIONAL, ... } MeasResultListCBR-r14 ::= SEQUENCE (SIZE (1..maxCBR-Report-r14)) OF MeasResultCBR-r14 MeasResultCBR-r14 ::= SEQUENCE { poolIdentity-r14 SL-V2X-TxPoolReportIdentity-r14, cbr-PSSCH-r14 SL-CBR-r14, cbr-PSCCH-r14 SL-CBR-r14 OPTIONAL } MeasResultForECID-r9 ::= SEQUENCE { ue-RxTxTimeDiffResult-r9 INTEGER (0..4095), currentSFN-r9 BIT STRING (SIZE (10)) } PLMN-IdentityList2 ::= SEQUENCE (SIZE (1..5)) OF PLMN-Identity AdditionalSI-Info-r9 ::= SEQUENCE { csg-MemberStatus-r9 ENUMERATED {member} OPTIONAL, csg-Identity-r9 CSG-Identity OPTIONAL } MeasResultForRSSI-r13 ::= SEQUENCE { rssi-Result-r13 RSSI-Range-r13, channelOccupancy-r13 INTEGER (0..100), ... } UL-PDCP-DelayResultList-r13 ::= SEQUENCE (SIZE (1..maxQCI-r13)) OF UL-PDCP-DelayResult-r13 UL-PDCP-DelayResult-r13 ::= SEQUENCE { qci-Id-r13 ENUMERATED {qci1, qci2, qci3, qci4, spare4, spare3, spare2, spare1}, excessDelay-r13 INTEGER (0..31), ... } MeasResultSSTD-r13 ::= SEQUENCE { sfn-OffsetResult-r13 INTEGER (0..1023), frameBoundaryOffsetResult-r13 INTEGER (-5..4), subframeBoundaryOffsetResult-r13 INTEGER (0..127) } MeasScaleFactor-r12 ::= ENUMERATED {sf-EUTRA-cf1, sf-EUTRA-cf2} QuantityConfig ::= SEQUENCE { quantityConfigEUTRA QuantityConfigEUTRA OPTIONAL, -- Need ON quantityConfigUTRA QuantityConfigUTRA OPTIONAL, -- Need ON quantityConfigGERAN QuantityConfigGERAN OPTIONAL, -- Need ON quantityConfigCDMA2000 QuantityConfigCDMA2000 OPTIONAL, -- Need ON ..., [[ quantityConfigUTRA-v1020 QuantityConfigUTRA-v1020 OPTIONAL -- Need ON ]], [[ quantityConfigEUTRA-v1250 QuantityConfigEUTRA-v1250 OPTIONAL -- Need ON ]], [[ quantityConfigEUTRA-v1310 QuantityConfigEUTRA-v1310 OPTIONAL, -- Need ON quantityConfigWLAN-r13 QuantityConfigWLAN-r13 OPTIONAL -- Need ON ]] } QuantityConfigEUTRA ::= SEQUENCE { filterCoefficientRSRP FilterCoefficient DEFAULT fc4, filterCoefficientRSRQ FilterCoefficient DEFAULT fc4 } QuantityConfigEUTRA-v1250 ::= SEQUENCE { filterCoefficientCSI-RSRP-r12 FilterCoefficient OPTIONAL -- Need OR } QuantityConfigEUTRA-v1310 ::= SEQUENCE { filterCoefficientRS-SINR-r13 FilterCoefficient DEFAULT fc4 } QuantityConfigUTRA ::= SEQUENCE { measQuantityUTRA-FDD ENUMERATED {cpich-RSCP, cpich-EcN0}, measQuantityUTRA-TDD ENUMERATED {pccpch-RSCP}, filterCoefficient FilterCoefficient DEFAULT fc4 } QuantityConfigUTRA-v1020 ::= SEQUENCE { filterCoefficient2-FDD-r10 FilterCoefficient DEFAULT fc4 } QuantityConfigGERAN ::= SEQUENCE { measQuantityGERAN ENUMERATED {rssi}, filterCoefficient FilterCoefficient DEFAULT fc2 } QuantityConfigCDMA2000 ::= SEQUENCE { measQuantityCDMA2000 ENUMERATED {pilotStrength, pilotPnPhaseAndPilotStrength} } QuantityConfigWLAN-r13 ::= SEQUENCE { measQuantityWLAN-r13 ENUMERATED {rssiWLAN}, filterCoefficient-r13 FilterCoefficient DEFAULT fc4 } ReportConfigEUTRA ::= SEQUENCE { triggerType CHOICE { event SEQUENCE { eventId CHOICE { eventA1 SEQUENCE { a1-Threshold ThresholdEUTRA }, eventA2 SEQUENCE { a2-Threshold ThresholdEUTRA }, eventA3 SEQUENCE { a3-Offset INTEGER (-30..30), reportOnLeave BOOLEAN }, eventA4 SEQUENCE { a4-Threshold ThresholdEUTRA }, eventA5 SEQUENCE { a5-Threshold1 ThresholdEUTRA, a5-Threshold2 ThresholdEUTRA }, ..., eventA6-r10 SEQUENCE { a6-Offset-r10 INTEGER (-30..30), a6-ReportOnLeave-r10 BOOLEAN }, eventC1-r12 SEQUENCE { c1-Threshold-r12 ThresholdEUTRA-v1250, c1-ReportOnLeave-r12 BOOLEAN }, eventC2-r12 SEQUENCE { c2-RefCSI-RS-r12 MeasCSI-RS-Id-r12, c2-Offset-r12 INTEGER (-30..30), c2-ReportOnLeave-r12 BOOLEAN }, eventV1-r14 SEQUENCE { v1-Threshold-r14 SL-CBR-r14 }, eventV2-r14 SEQUENCE { v2-Threshold-r14 SL-CBR-r14 } }, hysteresis Hysteresis, timeToTrigger TimeToTrigger }, periodical SEQUENCE { purpose ENUMERATED { reportStrongestCells, reportCGI} } }, triggerQuantity ENUMERATED {rsrp, rsrq}, reportQuantity ENUMERATED {sameAsTriggerQuantity, both}, maxReportCells INTEGER (1..maxCellReport), reportInterval ReportInterval, reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, ..., [[ si-RequestForHO-r9 ENUMERATED {setup} OPTIONAL, -- Cond reportCGI ue-RxTxTimeDiffPeriodical-r9 ENUMERATED {setup} OPTIONAL -- Need OR ]], [[ includeLocationInfo-r10 ENUMERATED {true} OPTIONAL, -- Need OR reportAddNeighMeas-r10 ENUMERATED {setup} OPTIONAL -- Need OR ]], [[ alternativeTimeToTrigger-r12 CHOICE { release NULL, setup TimeToTrigger } OPTIONAL, -- Need ON useT312-r12 BOOLEAN OPTIONAL, -- Need ON usePSCell-r12 BOOLEAN OPTIONAL, -- Need ON aN-Threshold1-v1250 RSRQ-RangeConfig-r12 OPTIONAL, -- Need ON a5-Threshold2-v1250 RSRQ-RangeConfig-r12 OPTIONAL, -- Need ON reportStrongestCSI-RSs-r12 BOOLEAN OPTIONAL, -- Need ON reportCRS-Meas-r12 BOOLEAN OPTIONAL, -- Need ON triggerQuantityCSI-RS-r12 BOOLEAN OPTIONAL -- Need ON ]], [[ reportSSTD-Meas-r13 BOOLEAN OPTIONAL, -- Need ON rs-sinr-Config-r13 CHOICE { release NULL, setup SEQUENCE { triggerQuantity-v1310 ENUMERATED {sinr} OPTIONAL, -- Need ON aN-Threshold1-r13 RS-SINR-Range-r13 OPTIONAL, -- Need ON a5-Threshold2-r13 RS-SINR-Range-r13 OPTIONAL, -- Need ON reportQuantity-v1310 ENUMERATED {rsrpANDsinr, rsrqANDsinr, all} } } OPTIONAL, -- Need ON useWhiteCellList-r13 BOOLEAN OPTIONAL, -- Need ON measRSSI-ReportConfig-r13 MeasRSSI-ReportConfig-r13 OPTIONAL, -- Need ON includeMultiBandInfo-r13 ENUMERATED {true} OPTIONAL, -- Cond reportCGI ul-DelayConfig-r13 UL-DelayConfig-r13 OPTIONAL -- Need ON ]], [[ ue-RxTxTimeDiffPeriodicalTDD-r13 BOOLEAN OPTIONAL -- Need ON ]], [[ purpose-v1430 ENUMERATED {reportLocation, sidelink, spare2, spare1} OPTIONAL -- Need ON ]] } RSRQ-RangeConfig-r12 ::= CHOICE { release NULL, setup RSRQ-Range-v1250 } ThresholdEUTRA ::= CHOICE{ threshold-RSRP RSRP-Range, threshold-RSRQ RSRQ-Range } ThresholdEUTRA-v1250 ::= CSI-RSRP-Range-r12 MeasRSSI-ReportConfig-r13 ::= SEQUENCE { channelOccupancyThreshold-r13 RSSI-Range-r13 OPTIONAL -- Need OR } ReportConfigId ::= INTEGER (1..maxReportConfigId) ReportConfigInterRAT ::= SEQUENCE { triggerType CHOICE { event SEQUENCE { eventId CHOICE { eventB1 SEQUENCE { b1-Threshold CHOICE { b1-ThresholdUTRA ThresholdUTRA, b1-ThresholdGERAN ThresholdGERAN, b1-ThresholdCDMA2000 ThresholdCDMA2000 } }, eventB2 SEQUENCE { b2-Threshold1 ThresholdEUTRA, b2-Threshold2 CHOICE { b2-Threshold2UTRA ThresholdUTRA, b2-Threshold2GERAN ThresholdGERAN, b2-Threshold2CDMA2000 ThresholdCDMA2000 } }, ..., eventW1-r13 SEQUENCE { w1-Threshold-r13 WLAN-RSSI-Range-r13 }, eventW2-r13 SEQUENCE { w2-Threshold1-r13 WLAN-RSSI-Range-r13, w2-Threshold2-r13 WLAN-RSSI-Range-r13 }, eventW3-r13 SEQUENCE { w3-Threshold-r13 WLAN-RSSI-Range-r13 } }, hysteresis Hysteresis, timeToTrigger TimeToTrigger }, periodical SEQUENCE { purpose ENUMERATED { reportStrongestCells, reportStrongestCellsForSON, reportCGI} } }, maxReportCells INTEGER (1..maxCellReport), reportInterval ReportInterval, reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, ..., [[ si-RequestForHO-r9 ENUMERATED {setup} OPTIONAL -- Cond reportCGI ]], [[ reportQuantityUTRA-FDD-r10 ENUMERATED {both} OPTIONAL -- Need OR ]], [[ includeLocationInfo-r11 BOOLEAN OPTIONAL -- Need ON ]], [[ b2-Threshold1-v1250 CHOICE { release NULL, setup RSRQ-Range-v1250 } OPTIONAL -- Need ON ]], [[ reportQuantityWLAN-r13 ReportQuantityWLAN-r13 OPTIONAL -- Need ON ]], [[ reportAnyWLAN-r14 BOOLEAN OPTIONAL -- Need ON ]] } ThresholdUTRA ::= CHOICE{ utra-RSCP INTEGER (-5..91), utra-EcN0 INTEGER (0..49) } ThresholdGERAN ::= INTEGER (0..63) ThresholdCDMA2000 ::= INTEGER (0..63) ReportQuantityWLAN-r13 ::= SEQUENCE { bandRequestWLAN-r13 ENUMERATED {true} OPTIONAL, -- Need OR carrierInfoRequestWLAN-r13 ENUMERATED {true} OPTIONAL, -- Need OR availableAdmissionCapacityRequestWLAN-r13 ENUMERATED {true} OPTIONAL, -- Need OR backhaulDL-BandwidthRequestWLAN-r13 ENUMERATED {true} OPTIONAL, -- Need OR backhaulUL-BandwidthRequestWLAN-r13 ENUMERATED {true} OPTIONAL, -- Need OR channelUtilizationRequestWLAN-r13 ENUMERATED {true} OPTIONAL, -- Need OR stationCountRequestWLAN-r13 ENUMERATED {true} OPTIONAL, -- Need OR ... } ReportConfigToAddModList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigToAddMod ReportConfigToAddMod ::= SEQUENCE { reportConfigId ReportConfigId, reportConfig CHOICE { reportConfigEUTRA ReportConfigEUTRA, reportConfigInterRAT ReportConfigInterRAT } } ReportInterval ::= ENUMERATED { ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60, spare3, spare2, spare1} RSRP-Range ::= INTEGER(0..97) RSRP-Range-v1360 ::= INTEGER(-17..-1) RSRP-RangeSL-r12 ::= INTEGER(0..13) RSRP-RangeSL2-r12 ::= INTEGER(0..7) RSRP-RangeSL3-r12 ::= INTEGER(0..11) RSRP-RangeSL4-r13 ::= INTEGER(0..49) RSRQ-Range ::= INTEGER(0..34) RSRQ-Range-v1250 ::= INTEGER(-30..46) RSRQ-Range-r13 ::= INTEGER(-30..46) RSRQ-Type-r12 ::= SEQUENCE { allSymbols-r12 BOOLEAN, wideBand-r12 BOOLEAN } RS-SINR-Range-r13 ::= INTEGER(0..127) RSSI-Range-r13 ::= INTEGER(0..76) TimeToTrigger ::= ENUMERATED { ms0, ms40, ms64, ms80, ms100, ms128, ms160, ms256, ms320, ms480, ms512, ms640, ms1024, ms1280, ms2560, ms5120} UL-DelayConfig-r13 ::= CHOICE { release NULL, setup SEQUENCE { delayThreshold-r13 ENUMERATED { ms30, ms40, ms50, ms60, ms70, ms80, ms90,ms100, ms150, ms300, ms500, ms750, spare4, spare3, spare2, spare1} } } WLAN-CarrierInfo-r13 ::= SEQUENCE { operatingClass-r13 INTEGER (0..255) OPTIONAL, -- Need ON countryCode-r13 ENUMERATED {unitedStates, europe, japan, global, ...} OPTIONAL, -- Need ON channelNumbers-r13 WLAN-ChannelList-r13 OPTIONAL, -- Need ON ... } WLAN-ChannelList-r13 ::= SEQUENCE (SIZE (1..maxWLAN-Channels-r13)) OF WLAN-Channel-r13 WLAN-Channel-r13 ::= INTEGER(0..255) WLAN-RSSI-Range-r13 ::= INTEGER(0..141) WLAN-Status-r13 ::= ENUMERATED {successfulAssociation, failureWlanRadioLink, failureWlanUnavailable, failureTimeout} WLAN-Status-v1430 ::= ENUMERATED {suspended, resumed} WLAN-SuspendConfig-r14 ::= SEQUENCE { wlan-SuspendResumeAllowed-r14 BOOLEAN OPTIONAL, -- Need ON wlan-SuspendTriggersStatusReport-r14 BOOLEAN OPTIONAL -- Need ON } AbsoluteTimeInfo-r10 ::= BIT STRING (SIZE (48)) AreaConfiguration-r10 ::= CHOICE { cellGlobalIdList-r10 CellGlobalIdList-r10, trackingAreaCodeList-r10 TrackingAreaCodeList-r10 } AreaConfiguration-v1130 ::= SEQUENCE { trackingAreaCodeList-v1130 TrackingAreaCodeList-v1130 } CellGlobalIdList-r10 ::= SEQUENCE (SIZE (1..32)) OF CellGlobalIdEUTRA TrackingAreaCodeList-r10 ::= SEQUENCE (SIZE (1..8)) OF TrackingAreaCode TrackingAreaCodeList-v1130 ::= SEQUENCE { plmn-Identity-perTAC-List-r11 SEQUENCE (SIZE (1..8)) OF PLMN-Identity } BandCombinationList-r14 ::= SEQUENCE (SIZE (1..maxBandComb-r13)) OF BandCombination-r14 BandCombination-r14 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandIndication-r14 BandIndication-r14 ::= SEQUENCE { bandEUTRA-r14 FreqBandIndicator-r11, ca-BandwidthClassDL-r14 CA-BandwidthClass-r10, ca-BandwidthClassUL-r14 CA-BandwidthClass-r10 OPTIONAL } C-RNTI ::= BIT STRING (SIZE (16)) DedicatedInfoCDMA2000 ::= OCTET STRING DedicatedInfoNAS ::= OCTET STRING FilterCoefficient ::= ENUMERATED { fc0, fc1, fc2, fc3, fc4, fc5, fc6, fc7, fc8, fc9, fc11, fc13, fc15, fc17, fc19, spare1, ...} LoggingDuration-r10 ::= ENUMERATED { min10, min20, min40, min60, min90, min120, spare2, spare1} LoggingInterval-r10 ::= ENUMERATED { ms1280, ms2560, ms5120, ms10240, ms20480, ms30720, ms40960, ms61440} MeasSubframePattern-r10 ::= CHOICE { subframePatternFDD-r10 BIT STRING (SIZE (40)), subframePatternTDD-r10 CHOICE { subframeConfig1-5-r10 BIT STRING (SIZE (20)), subframeConfig0-r10 BIT STRING (SIZE (70)), subframeConfig6-r10 BIT STRING (SIZE (60)), ... }, ... } MMEC ::= BIT STRING (SIZE (8)) NeighCellConfig ::= BIT STRING (SIZE (2)) OtherConfig-r9 ::= SEQUENCE { reportProximityConfig-r9 ReportProximityConfig-r9 OPTIONAL, -- Need ON ..., [[ idc-Config-r11 IDC-Config-r11 OPTIONAL, -- Need ON powerPrefIndicationConfig-r11 PowerPrefIndicationConfig-r11 OPTIONAL, -- Need ON obtainLocationConfig-r11 ObtainLocationConfig-r11 OPTIONAL -- Need ON ]], [[ bw-PreferenceIndicationTimer-r14 ENUMERATED {s0, s0dot5, s1, s2, s5, s10, s20, s30, s60, s90, s120, s300, s600, spare3, spare2, spare1} OPTIONAL, -- Need OR sps-AssistanceInfoReport-r14 BOOLEAN OPTIONAL, -- Need ON delayBudgetReportingConfig-r14 CHOICE{ release NULL, setup SEQUENCE{ delayBudgetReportingProhibitTimer-r14 ENUMERATED { s0, s0dot4, s0dot8, s1dot6, s3, s6, s12, s30} } } OPTIONAL, -- Need ON rlm-ReportConfig-r14 CHOICE { release NULL, setup SEQUENCE{ rlmReportTimer-r14 ENUMERATED {s0, s0dot5, s1, s2, s5, s10, s20, s30, s60, s90, s120, s300, s600, spare3, spare2, spare1}, rlmReportRep-MPDCCH-r14 ENUMERATED {setup} OPTIONAL -- Need OR } } OPTIONAL -- Need ON ]] } IDC-Config-r11 ::= SEQUENCE { idc-Indication-r11 ENUMERATED {setup} OPTIONAL, -- Need OR autonomousDenialParameters-r11 SEQUENCE { autonomousDenialSubframes-r11 ENUMERATED {n2, n5, n10, n15, n20, n30, spare2, spare1}, autonomousDenialValidity-r11 ENUMERATED { sf200, sf500, sf1000, sf2000, spare4, spare3, spare2, spare1} } OPTIONAL, -- Need OR ..., [[ idc-Indication-UL-CA-r11 ENUMERATED {setup} OPTIONAL -- Cond idc-Ind ]], [[ idc-HardwareSharingIndication-r13 ENUMERATED {setup} OPTIONAL -- Need OR ]] } ObtainLocationConfig-r11 ::= SEQUENCE { obtainLocation-r11 ENUMERATED {setup} OPTIONAL -- Need OR } PowerPrefIndicationConfig-r11 ::= CHOICE{ release NULL, setup SEQUENCE{ powerPrefIndicationTimer-r11 ENUMERATED {s0, s0dot5, s1, s2, s5, s10, s20, s30, s60, s90, s120, s300, s600, spare3, spare2, spare1} } } ReportProximityConfig-r9 ::= SEQUENCE { proximityIndicationEUTRA-r9 ENUMERATED {enabled} OPTIONAL, -- Need OR proximityIndicationUTRA-r9 ENUMERATED {enabled} OPTIONAL -- Need OR } RAND-CDMA2000 ::= BIT STRING (SIZE (32)) RAT-Type ::= ENUMERATED { eutra, utra, geran-cs, geran-ps, cdma2000-1XRTT, spare3, spare2, spare1, ...} ResumeIdentity-r13 ::= BIT STRING (SIZE(40)) RRC-TransactionIdentifier ::= INTEGER (0..3) S-TMSI ::= SEQUENCE { mmec MMEC, m-TMSI BIT STRING (SIZE (32)) } TraceReference-r10 ::= SEQUENCE { plmn-Identity-r10 PLMN-Identity, traceId-r10 OCTET STRING (SIZE (3)) } UE-CapabilityRAT-ContainerList ::= SEQUENCE (SIZE (0..maxRAT-Capabilities)) OF UE-CapabilityRAT-Container UE-CapabilityRAT-Container ::= SEQUENCE { rat-Type RAT-Type, ueCapabilityRAT-Container OCTET STRING } UE-EUTRA-Capability ::= SEQUENCE { accessStratumRelease AccessStratumRelease, ue-Category INTEGER (1..5), pdcp-Parameters PDCP-Parameters, phyLayerParameters PhyLayerParameters, rf-Parameters RF-Parameters, measParameters MeasParameters, featureGroupIndicators BIT STRING (SIZE (32)) OPTIONAL, interRAT-Parameters SEQUENCE { utraFDD IRAT-ParametersUTRA-FDD OPTIONAL, utraTDD128 IRAT-ParametersUTRA-TDD128 OPTIONAL, utraTDD384 IRAT-ParametersUTRA-TDD384 OPTIONAL, utraTDD768 IRAT-ParametersUTRA-TDD768 OPTIONAL, geran IRAT-ParametersGERAN OPTIONAL, cdma2000-HRPD IRAT-ParametersCDMA2000-HRPD OPTIONAL, cdma2000-1xRTT IRAT-ParametersCDMA2000-1XRTT OPTIONAL }, nonCriticalExtension UE-EUTRA-Capability-v920-IEs OPTIONAL } -- Late non critical extensions UE-EUTRA-Capability-v9a0-IEs ::= SEQUENCE { featureGroupIndRel9Add-r9 BIT STRING (SIZE (32)) OPTIONAL, fdd-Add-UE-EUTRA-Capabilities-r9 UE-EUTRA-CapabilityAddXDD-Mode-r9 OPTIONAL, tdd-Add-UE-EUTRA-Capabilities-r9 UE-EUTRA-CapabilityAddXDD-Mode-r9 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v9c0-IEs OPTIONAL } UE-EUTRA-Capability-v9c0-IEs ::= SEQUENCE { interRAT-ParametersUTRA-v9c0 IRAT-ParametersUTRA-v9c0 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v9d0-IEs OPTIONAL } UE-EUTRA-Capability-v9d0-IEs ::= SEQUENCE { phyLayerParameters-v9d0 PhyLayerParameters-v9d0 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v9e0-IEs OPTIONAL } UE-EUTRA-Capability-v9e0-IEs ::= SEQUENCE { rf-Parameters-v9e0 RF-Parameters-v9e0 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v9h0-IEs OPTIONAL } UE-EUTRA-Capability-v9h0-IEs ::= SEQUENCE { interRAT-ParametersUTRA-v9h0 IRAT-ParametersUTRA-v9h0 OPTIONAL, -- Following field is only to be used for late REL-9 extensions lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v10c0-IEs OPTIONAL } UE-EUTRA-Capability-v10c0-IEs ::= SEQUENCE { otdoa-PositioningCapabilities-r10 OTDOA-PositioningCapabilities-r10 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v10f0-IEs OPTIONAL } UE-EUTRA-Capability-v10f0-IEs ::= SEQUENCE { rf-Parameters-v10f0 RF-Parameters-v10f0 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v10i0-IEs OPTIONAL } UE-EUTRA-Capability-v10i0-IEs ::= SEQUENCE { rf-Parameters-v10i0 RF-Parameters-v10i0 OPTIONAL, -- Following field is only to be used for late REL-10 extensions lateNonCriticalExtension OCTET STRING (CONTAINING UE-EUTRA-Capability-v10j0-IEs) OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v11d0-IEs OPTIONAL } UE-EUTRA-Capability-v10j0-IEs ::= SEQUENCE { rf-Parameters-v10j0 RF-Parameters-v10j0 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } UE-EUTRA-Capability-v11d0-IEs ::= SEQUENCE { rf-Parameters-v11d0 RF-Parameters-v11d0 OPTIONAL, otherParameters-v11d0 Other-Parameters-v11d0 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v11x0-IEs OPTIONAL } UE-EUTRA-Capability-v11x0-IEs ::= SEQUENCE { -- Following field is only to be used for late REL-11 extensions lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v12b0-IEs OPTIONAL } UE-EUTRA-Capability-v12b0-IEs ::= SEQUENCE { rf-Parameters-v12b0 RF-Parameters-v12b0 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v12x0-IEs OPTIONAL } UE-EUTRA-Capability-v12x0-IEs ::= SEQUENCE { -- Following field is only to be used for late REL-12 extensions lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1370-IEs OPTIONAL } UE-EUTRA-Capability-v1370-IEs ::= SEQUENCE { ce-Parameters-v1370 CE-Parameters-v1370 OPTIONAL, fdd-Add-UE-EUTRA-Capabilities-v1370 UE-EUTRA-CapabilityAddXDD-Mode-v1370 OPTIONAL, tdd-Add-UE-EUTRA-Capabilities-v1370 UE-EUTRA-CapabilityAddXDD-Mode-v1370 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } -- Regular non critical extensions UE-EUTRA-Capability-v920-IEs ::= SEQUENCE { phyLayerParameters-v920 PhyLayerParameters-v920, interRAT-ParametersGERAN-v920 IRAT-ParametersGERAN-v920, interRAT-ParametersUTRA-v920 IRAT-ParametersUTRA-v920 OPTIONAL, interRAT-ParametersCDMA2000-v920 IRAT-ParametersCDMA2000-1XRTT-v920 OPTIONAL, deviceType-r9 ENUMERATED {noBenFromBatConsumpOpt} OPTIONAL, csg-ProximityIndicationParameters-r9 CSG-ProximityIndicationParameters-r9, neighCellSI-AcquisitionParameters-r9 NeighCellSI-AcquisitionParameters-r9, son-Parameters-r9 SON-Parameters-r9, nonCriticalExtension UE-EUTRA-Capability-v940-IEs OPTIONAL } UE-EUTRA-Capability-v940-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING (CONTAINING UE-EUTRA-Capability-v9a0-IEs) OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1020-IEs OPTIONAL } UE-EUTRA-Capability-v1020-IEs ::= SEQUENCE { ue-Category-v1020 INTEGER (6..8) OPTIONAL, phyLayerParameters-v1020 PhyLayerParameters-v1020 OPTIONAL, rf-Parameters-v1020 RF-Parameters-v1020 OPTIONAL, measParameters-v1020 MeasParameters-v1020 OPTIONAL, featureGroupIndRel10-r10 BIT STRING (SIZE (32)) OPTIONAL, interRAT-ParametersCDMA2000-v1020 IRAT-ParametersCDMA2000-1XRTT-v1020 OPTIONAL, ue-BasedNetwPerfMeasParameters-r10 UE-BasedNetwPerfMeasParameters-r10 OPTIONAL, interRAT-ParametersUTRA-TDD-v1020 IRAT-ParametersUTRA-TDD-v1020 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1060-IEs OPTIONAL } UE-EUTRA-Capability-v1060-IEs ::= SEQUENCE { fdd-Add-UE-EUTRA-Capabilities-v1060 UE-EUTRA-CapabilityAddXDD-Mode-v1060 OPTIONAL, tdd-Add-UE-EUTRA-Capabilities-v1060 UE-EUTRA-CapabilityAddXDD-Mode-v1060 OPTIONAL, rf-Parameters-v1060 RF-Parameters-v1060 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1090-IEs OPTIONAL } UE-EUTRA-Capability-v1090-IEs ::= SEQUENCE { rf-Parameters-v1090 RF-Parameters-v1090 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1130-IEs OPTIONAL } UE-EUTRA-Capability-v1130-IEs ::= SEQUENCE { pdcp-Parameters-v1130 PDCP-Parameters-v1130, phyLayerParameters-v1130 PhyLayerParameters-v1130 OPTIONAL, rf-Parameters-v1130 RF-Parameters-v1130, measParameters-v1130 MeasParameters-v1130, interRAT-ParametersCDMA2000-v1130 IRAT-ParametersCDMA2000-v1130, otherParameters-r11 Other-Parameters-r11, fdd-Add-UE-EUTRA-Capabilities-v1130 UE-EUTRA-CapabilityAddXDD-Mode-v1130 OPTIONAL, tdd-Add-UE-EUTRA-Capabilities-v1130 UE-EUTRA-CapabilityAddXDD-Mode-v1130 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1170-IEs OPTIONAL } UE-EUTRA-Capability-v1170-IEs ::= SEQUENCE { phyLayerParameters-v1170 PhyLayerParameters-v1170 OPTIONAL, ue-Category-v1170 INTEGER (9..10) OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1180-IEs OPTIONAL } UE-EUTRA-Capability-v1180-IEs ::= SEQUENCE { rf-Parameters-v1180 RF-Parameters-v1180 OPTIONAL, mbms-Parameters-r11 MBMS-Parameters-r11 OPTIONAL, fdd-Add-UE-EUTRA-Capabilities-v1180 UE-EUTRA-CapabilityAddXDD-Mode-v1180 OPTIONAL, tdd-Add-UE-EUTRA-Capabilities-v1180 UE-EUTRA-CapabilityAddXDD-Mode-v1180 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v11a0-IEs OPTIONAL } UE-EUTRA-Capability-v11a0-IEs ::= SEQUENCE { ue-Category-v11a0 INTEGER (11..12) OPTIONAL, measParameters-v11a0 MeasParameters-v11a0 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1250-IEs OPTIONAL } UE-EUTRA-Capability-v1250-IEs ::= SEQUENCE { phyLayerParameters-v1250 PhyLayerParameters-v1250 OPTIONAL, rf-Parameters-v1250 RF-Parameters-v1250 OPTIONAL, rlc-Parameters-r12 RLC-Parameters-r12 OPTIONAL, ue-BasedNetwPerfMeasParameters-v1250 UE-BasedNetwPerfMeasParameters-v1250 OPTIONAL, ue-CategoryDL-r12 INTEGER (0..14) OPTIONAL, ue-CategoryUL-r12 INTEGER (0..13) OPTIONAL, wlan-IW-Parameters-r12 WLAN-IW-Parameters-r12 OPTIONAL, measParameters-v1250 MeasParameters-v1250 OPTIONAL, dc-Parameters-r12 DC-Parameters-r12 OPTIONAL, mbms-Parameters-v1250 MBMS-Parameters-v1250 OPTIONAL, mac-Parameters-r12 MAC-Parameters-r12 OPTIONAL, fdd-Add-UE-EUTRA-Capabilities-v1250 UE-EUTRA-CapabilityAddXDD-Mode-v1250 OPTIONAL, tdd-Add-UE-EUTRA-Capabilities-v1250 UE-EUTRA-CapabilityAddXDD-Mode-v1250 OPTIONAL, sl-Parameters-r12 SL-Parameters-r12 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1260-IEs OPTIONAL } UE-EUTRA-Capability-v1260-IEs ::= SEQUENCE { ue-CategoryDL-v1260 INTEGER (15..16) OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1270-IEs OPTIONAL } UE-EUTRA-Capability-v1270-IEs ::= SEQUENCE { rf-Parameters-v1270 RF-Parameters-v1270 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1280-IEs OPTIONAL } UE-EUTRA-Capability-v1280-IEs ::= SEQUENCE { phyLayerParameters-v1280 PhyLayerParameters-v1280 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1310-IEs OPTIONAL } UE-EUTRA-Capability-v1310-IEs ::= SEQUENCE { ue-CategoryDL-v1310 ENUMERATED {n17, m1} OPTIONAL, ue-CategoryUL-v1310 ENUMERATED {n14, m1} OPTIONAL, pdcp-Parameters-v1310 PDCP-Parameters-v1310, rlc-Parameters-v1310 RLC-Parameters-v1310, mac-Parameters-v1310 MAC-Parameters-v1310 OPTIONAL, phyLayerParameters-v1310 PhyLayerParameters-v1310 OPTIONAL, rf-Parameters-v1310 RF-Parameters-v1310 OPTIONAL, measParameters-v1310 MeasParameters-v1310 OPTIONAL, dc-Parameters-v1310 DC-Parameters-v1310 OPTIONAL, sl-Parameters-v1310 SL-Parameters-v1310 OPTIONAL, scptm-Parameters-r13 SCPTM-Parameters-r13 OPTIONAL, ce-Parameters-r13 CE-Parameters-r13 OPTIONAL, interRAT-ParametersWLAN-r13 IRAT-ParametersWLAN-r13, laa-Parameters-r13 LAA-Parameters-r13 OPTIONAL, lwa-Parameters-r13 LWA-Parameters-r13 OPTIONAL, wlan-IW-Parameters-v1310 WLAN-IW-Parameters-v1310, lwip-Parameters-r13 LWIP-Parameters-r13, fdd-Add-UE-EUTRA-Capabilities-v1310 UE-EUTRA-CapabilityAddXDD-Mode-v1310 OPTIONAL, tdd-Add-UE-EUTRA-Capabilities-v1310 UE-EUTRA-CapabilityAddXDD-Mode-v1310 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1320-IEs OPTIONAL } UE-EUTRA-Capability-v1320-IEs ::= SEQUENCE { ce-Parameters-v1320 CE-Parameters-v1320 OPTIONAL, phyLayerParameters-v1320 PhyLayerParameters-v1320 OPTIONAL, rf-Parameters-v1320 RF-Parameters-v1320 OPTIONAL, fdd-Add-UE-EUTRA-Capabilities-v1320 UE-EUTRA-CapabilityAddXDD-Mode-v1320 OPTIONAL, tdd-Add-UE-EUTRA-Capabilities-v1320 UE-EUTRA-CapabilityAddXDD-Mode-v1320 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1330-IEs OPTIONAL } UE-EUTRA-Capability-v1330-IEs ::= SEQUENCE { ue-CategoryDL-v1330 INTEGER (18..19) OPTIONAL, phyLayerParameters-v1330 PhyLayerParameters-v1330 OPTIONAL, ue-CE-NeedULGaps-r13 ENUMERATED {true} OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1340-IEs OPTIONAL } UE-EUTRA-Capability-v1340-IEs ::= SEQUENCE { ue-CategoryUL-v1340 INTEGER (15) OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1350-IEs OPTIONAL } UE-EUTRA-Capability-v1350-IEs ::= SEQUENCE { ue-CategoryDL-v1350 ENUMERATED {oneBis} OPTIONAL, ue-CategoryUL-v1350 ENUMERATED {oneBis} OPTIONAL, ce-Parameters-v1350 CE-Parameters-v1350, nonCriticalExtension UE-EUTRA-Capability-v1360-IEs OPTIONAL } UE-EUTRA-Capability-v1360-IEs ::= SEQUENCE { other-Parameters-v1360 Other-Parameters-v1360 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1430-IEs OPTIONAL } UE-EUTRA-Capability-v1430-IEs ::= SEQUENCE { phyLayerParameters-v1430 PhyLayerParameters-v1430, ue-CategoryDL-v1430 ENUMERATED {m2} OPTIONAL, ue-CategoryUL-v1430 ENUMERATED {n16, n17, n18, n19, n20, m2} OPTIONAL, ue-CategoryUL-v1430b ENUMERATED {n21} OPTIONAL, mac-Parameters-v1430 MAC-Parameters-v1430 OPTIONAL, measParameters-v1430 MeasParameters-v1430 OPTIONAL, pdcp-Parameters-v1430 PDCP-Parameters-v1430 OPTIONAL, rlc-Parameters-v1430 RLC-Parameters-v1430, rf-Parameters-v1430 RF-Parameters-v1430 OPTIONAL, laa-Parameters-v1430 LAA-Parameters-v1430 OPTIONAL, lwa-Parameters-v1430 LWA-Parameters-v1430 OPTIONAL, lwip-Parameters-v1430 LWIP-Parameters-v1430 OPTIONAL, otherParameters-v1430 Other-Parameters-v1430, mmtel-Parameters-r14 MMTEL-Parameters-r14 OPTIONAL, mobilityParameters-r14 MobilityParameters-r14 OPTIONAL, ce-Parameters-v1430 CE-Parameters-v1430, fdd-Add-UE-EUTRA-Capabilities-v1430 UE-EUTRA-CapabilityAddXDD-Mode-v1430 OPTIONAL, tdd-Add-UE-EUTRA-Capabilities-v1430 UE-EUTRA-CapabilityAddXDD-Mode-v1430 OPTIONAL, mbms-Parameters-v1430 MBMS-Parameters-v1430 OPTIONAL, sl-Parameters-v1430 SL-Parameters-v1430 OPTIONAL, ue-BasedNetwPerfMeasParameters-v1430 UE-BasedNetwPerfMeasParameters-v1430 OPTIONAL, highSpeedEnhParameters-r14 HighSpeedEnhParameters-r14 OPTIONAL, nonCriticalExtension UE-EUTRA-Capability-v1440-IEs OPTIONAL } UE-EUTRA-Capability-v1440-IEs ::= SEQUENCE { lwa-Parameters-v1440 LWA-Parameters-v1440, mac-Parameters-v1440 MAC-Parameters-v1440, nonCriticalExtension SEQUENCE {} OPTIONAL } UE-EUTRA-CapabilityAddXDD-Mode-r9 ::= SEQUENCE { phyLayerParameters-r9 PhyLayerParameters OPTIONAL, featureGroupIndicators-r9 BIT STRING (SIZE (32)) OPTIONAL, featureGroupIndRel9Add-r9 BIT STRING (SIZE (32)) OPTIONAL, interRAT-ParametersGERAN-r9 IRAT-ParametersGERAN OPTIONAL, interRAT-ParametersUTRA-r9 IRAT-ParametersUTRA-v920 OPTIONAL, interRAT-ParametersCDMA2000-r9 IRAT-ParametersCDMA2000-1XRTT-v920 OPTIONAL, neighCellSI-AcquisitionParameters-r9 NeighCellSI-AcquisitionParameters-r9 OPTIONAL, ... } UE-EUTRA-CapabilityAddXDD-Mode-v1060 ::= SEQUENCE { phyLayerParameters-v1060 PhyLayerParameters-v1020 OPTIONAL, featureGroupIndRel10-v1060 BIT STRING (SIZE (32)) OPTIONAL, interRAT-ParametersCDMA2000-v1060 IRAT-ParametersCDMA2000-1XRTT-v1020 OPTIONAL, interRAT-ParametersUTRA-TDD-v1060 IRAT-ParametersUTRA-TDD-v1020 OPTIONAL, ..., [[ otdoa-PositioningCapabilities-r10 OTDOA-PositioningCapabilities-r10 OPTIONAL ]] } UE-EUTRA-CapabilityAddXDD-Mode-v1130 ::= SEQUENCE { phyLayerParameters-v1130 PhyLayerParameters-v1130 OPTIONAL, measParameters-v1130 MeasParameters-v1130 OPTIONAL, otherParameters-r11 Other-Parameters-r11 OPTIONAL, ... } UE-EUTRA-CapabilityAddXDD-Mode-v1180 ::= SEQUENCE { mbms-Parameters-r11 MBMS-Parameters-r11 } UE-EUTRA-CapabilityAddXDD-Mode-v1250 ::= SEQUENCE { phyLayerParameters-v1250 PhyLayerParameters-v1250 OPTIONAL, measParameters-v1250 MeasParameters-v1250 OPTIONAL } UE-EUTRA-CapabilityAddXDD-Mode-v1310 ::= SEQUENCE { phyLayerParameters-v1310 PhyLayerParameters-v1310 OPTIONAL } UE-EUTRA-CapabilityAddXDD-Mode-v1320 ::= SEQUENCE { phyLayerParameters-v1320 PhyLayerParameters-v1320 OPTIONAL, scptm-Parameters-r13 SCPTM-Parameters-r13 OPTIONAL } UE-EUTRA-CapabilityAddXDD-Mode-v1370 ::= SEQUENCE { ce-Parameters-v1370 CE-Parameters-v1370 OPTIONAL } UE-EUTRA-CapabilityAddXDD-Mode-v1430 ::= SEQUENCE { phyLayerParameters-v1430 PhyLayerParameters-v1430 OPTIONAL, mmtel-Parameters-r14 MMTEL-Parameters-r14 OPTIONAL } AccessStratumRelease ::= ENUMERATED { rel8, rel9, rel10, rel11, rel12, rel13, rel14, spare1, ...} MobilityParameters-r14 ::= SEQUENCE { makeBeforeBreak-r14 ENUMERATED {supported} OPTIONAL, rach-Less-r14 ENUMERATED {supported} OPTIONAL } DC-Parameters-r12 ::= SEQUENCE { drb-TypeSplit-r12 ENUMERATED {supported} OPTIONAL, drb-TypeSCG-r12 ENUMERATED {supported} OPTIONAL } DC-Parameters-v1310 ::= SEQUENCE { pdcp-TransferSplitUL-r13 ENUMERATED {supported} OPTIONAL, ue-SSTD-Meas-r13 ENUMERATED {supported} OPTIONAL } MAC-Parameters-r12 ::= SEQUENCE { logicalChannelSR-ProhibitTimer-r12 ENUMERATED {supported} OPTIONAL, longDRX-Command-r12 ENUMERATED {supported} OPTIONAL } MAC-Parameters-v1310 ::= SEQUENCE { extendedMAC-LengthField-r13 ENUMERATED {supported} OPTIONAL, extendedLongDRX-r13 ENUMERATED {supported} OPTIONAL } MAC-Parameters-v1430 ::= SEQUENCE { shortSPS-IntervalFDD-r14 ENUMERATED {supported} OPTIONAL, shortSPS-IntervalTDD-r14 ENUMERATED {supported} OPTIONAL, skipUplinkDynamic-r14 ENUMERATED {supported} OPTIONAL, skipUplinkSPS-r14 ENUMERATED {supported} OPTIONAL, multipleUplinkSPS-r14 ENUMERATED {supported} OPTIONAL, dataInactMon-r14 ENUMERATED {supported} OPTIONAL } MAC-Parameters-v1440 ::= SEQUENCE { rai-Support-r14 ENUMERATED {supported} OPTIONAL } RLC-Parameters-r12 ::= SEQUENCE { extended-RLC-LI-Field-r12 ENUMERATED {supported} } RLC-Parameters-v1310 ::= SEQUENCE { extendedRLC-SN-SO-Field-r13 ENUMERATED {supported} OPTIONAL } RLC-Parameters-v1430 ::= SEQUENCE { extendedPollByte-r14 ENUMERATED {supported} OPTIONAL } PDCP-Parameters ::= SEQUENCE { supportedROHC-Profiles SEQUENCE { profile0x0001 BOOLEAN, profile0x0002 BOOLEAN, profile0x0003 BOOLEAN, profile0x0004 BOOLEAN, profile0x0006 BOOLEAN, profile0x0101 BOOLEAN, profile0x0102 BOOLEAN, profile0x0103 BOOLEAN, profile0x0104 BOOLEAN }, maxNumberROHC-ContextSessions ENUMERATED { cs2, cs4, cs8, cs12, cs16, cs24, cs32, cs48, cs64, cs128, cs256, cs512, cs1024, cs16384, spare2, spare1} DEFAULT cs16, ... } PDCP-Parameters-v1130 ::= SEQUENCE { pdcp-SN-Extension-r11 ENUMERATED {supported} OPTIONAL, supportRohcContextContinue-r11 ENUMERATED {supported} OPTIONAL } PDCP-Parameters-v1310 ::= SEQUENCE { pdcp-SN-Extension-18bits-r13 ENUMERATED {supported} OPTIONAL } PDCP-Parameters-v1430 ::= SEQUENCE { supportedUplinkOnlyROHC-Profiles-r14 SEQUENCE { profile0x0006-r14 BOOLEAN }, maxNumberROHC-ContextSessions-r14 ENUMERATED { cs2, cs4, cs8, cs12, cs16, cs24, cs32, cs48, cs64, cs128, cs256, cs512, cs1024, cs16384, spare2, spare1} DEFAULT cs16 } PhyLayerParameters ::= SEQUENCE { ue-TxAntennaSelectionSupported BOOLEAN, ue-SpecificRefSigsSupported BOOLEAN } PhyLayerParameters-v920 ::= SEQUENCE { enhancedDualLayerFDD-r9 ENUMERATED {supported} OPTIONAL, enhancedDualLayerTDD-r9 ENUMERATED {supported} OPTIONAL } PhyLayerParameters-v9d0 ::= SEQUENCE { tm5-FDD-r9 ENUMERATED {supported} OPTIONAL, tm5-TDD-r9 ENUMERATED {supported} OPTIONAL } PhyLayerParameters-v1020 ::= SEQUENCE { twoAntennaPortsForPUCCH-r10 ENUMERATED {supported} OPTIONAL, tm9-With-8Tx-FDD-r10 ENUMERATED {supported} OPTIONAL, pmi-Disabling-r10 ENUMERATED {supported} OPTIONAL, crossCarrierScheduling-r10 ENUMERATED {supported} OPTIONAL, simultaneousPUCCH-PUSCH-r10 ENUMERATED {supported} OPTIONAL, multiClusterPUSCH-WithinCC-r10 ENUMERATED {supported} OPTIONAL, nonContiguousUL-RA-WithinCC-List-r10 NonContiguousUL-RA-WithinCC-List-r10 OPTIONAL } PhyLayerParameters-v1130 ::= SEQUENCE { crs-InterfHandl-r11 ENUMERATED {supported} OPTIONAL, ePDCCH-r11 ENUMERATED {supported} OPTIONAL, multiACK-CSI-Reporting-r11 ENUMERATED {supported} OPTIONAL, ss-CCH-InterfHandl-r11 ENUMERATED {supported} OPTIONAL, tdd-SpecialSubframe-r11 ENUMERATED {supported} OPTIONAL, txDiv-PUCCH1b-ChSelect-r11 ENUMERATED {supported} OPTIONAL, ul-CoMP-r11 ENUMERATED {supported} OPTIONAL } PhyLayerParameters-v1170 ::= SEQUENCE { interBandTDD-CA-WithDifferentConfig-r11 BIT STRING (SIZE (2)) OPTIONAL } PhyLayerParameters-v1250 ::= SEQUENCE { e-HARQ-Pattern-FDD-r12 ENUMERATED {supported} OPTIONAL, enhanced-4TxCodebook-r12 ENUMERATED {supported} OPTIONAL, tdd-FDD-CA-PCellDuplex-r12 BIT STRING (SIZE (2)) OPTIONAL, phy-TDD-ReConfig-TDD-PCell-r12 ENUMERATED {supported} OPTIONAL, phy-TDD-ReConfig-FDD-PCell-r12 ENUMERATED {supported} OPTIONAL, pusch-FeedbackMode-r12 ENUMERATED {supported} OPTIONAL, pusch-SRS-PowerControl-SubframeSet-r12 ENUMERATED {supported} OPTIONAL, csi-SubframeSet-r12 ENUMERATED {supported} OPTIONAL, noResourceRestrictionForTTIBundling-r12 ENUMERATED {supported} OPTIONAL, discoverySignalsInDeactSCell-r12 ENUMERATED {supported} OPTIONAL, naics-Capability-List-r12 NAICS-Capability-List-r12 OPTIONAL } PhyLayerParameters-v1280 ::= SEQUENCE { alternativeTBS-Indices-r12 ENUMERATED {supported} OPTIONAL } PhyLayerParameters-v1310 ::= SEQUENCE { aperiodicCSI-Reporting-r13 BIT STRING (SIZE (2)) OPTIONAL, codebook-HARQ-ACK-r13 BIT STRING (SIZE (2)) OPTIONAL, crossCarrierScheduling-B5C-r13 ENUMERATED {supported} OPTIONAL, fdd-HARQ-TimingTDD-r13 ENUMERATED {supported} OPTIONAL, maxNumberUpdatedCSI-Proc-r13 INTEGER(5..32) OPTIONAL, pucch-Format4-r13 ENUMERATED {supported} OPTIONAL, pucch-Format5-r13 ENUMERATED {supported} OPTIONAL, pucch-SCell-r13 ENUMERATED {supported} OPTIONAL, spatialBundling-HARQ-ACK-r13 ENUMERATED {supported} OPTIONAL, supportedBlindDecoding-r13 SEQUENCE { maxNumberDecoding-r13 INTEGER(1..32) OPTIONAL, pdcch-CandidateReductions-r13 ENUMERATED {supported} OPTIONAL, skipMonitoringDCI-Format0-1A-r13 ENUMERATED {supported} OPTIONAL } OPTIONAL, uci-PUSCH-Ext-r13 ENUMERATED {supported} OPTIONAL, crs-InterfMitigationTM10-r13 ENUMERATED {supported} OPTIONAL, pdsch-CollisionHandling-r13 ENUMERATED {supported} OPTIONAL } PhyLayerParameters-v1320 ::= SEQUENCE { mimo-UE-Parameters-r13 MIMO-UE-Parameters-r13 OPTIONAL } PhyLayerParameters-v1330 ::= SEQUENCE { cch-InterfMitigation-RefRecTypeA-r13 ENUMERATED {supported} OPTIONAL, cch-InterfMitigation-RefRecTypeB-r13 ENUMERATED {supported} OPTIONAL, cch-InterfMitigation-MaxNumCCs-r13 INTEGER (1.. maxServCell-r13) OPTIONAL, crs-InterfMitigationTM1toTM9-r13 INTEGER (1.. maxServCell-r13) OPTIONAL } PhyLayerParameters-v1430 ::= SEQUENCE { ce-PUSCH-NB-MaxTBS-r14 ENUMERATED {supported} OPTIONAL, ce-PDSCH-PUSCH-MaxBandwidth-r14 ENUMERATED {bw5, bw20} OPTIONAL, ce-HARQ-AckBundling-r14 ENUMERATED {supported} OPTIONAL, ce-PDSCH-TenProcesses-r14 ENUMERATED {supported} OPTIONAL, ce-RetuningSymbols-r14 ENUMERATED {n0, n1} OPTIONAL, ce-PDSCH-PUSCH-Enhancement-r14 ENUMERATED {supported} OPTIONAL, ce-SchedulingEnhancement-r14 ENUMERATED {supported} OPTIONAL, ce-SRS-Enhancement-r14 ENUMERATED {supported} OPTIONAL, ce-PUCCH-Enhancement-r14 ENUMERATED {supported} OPTIONAL, ce-ClosedLoopTxAntennaSelection-r14 ENUMERATED {supported} OPTIONAL, tdd-SpecialSubframe-r14 ENUMERATED {supported} OPTIONAL, tdd-TTI-Bundling-r14 ENUMERATED {supported} OPTIONAL, dmrs-LessUpPTS-r14 ENUMERATED {supported} OPTIONAL, mimo-UE-Parameters-v1430 MIMO-UE-Parameters-v1430 OPTIONAL, alternativeTBS-Index-r14 ENUMERATED {supported} OPTIONAL, feMBMS-Unicast-Parameters-r14 FeMBMS-Unicast-Parameters-r14 OPTIONAL } MIMO-UE-Parameters-r13 ::= SEQUENCE { parametersTM9-r13 MIMO-UE-ParametersPerTM-r13 OPTIONAL, parametersTM10-r13 MIMO-UE-ParametersPerTM-r13 OPTIONAL, srs-EnhancementsTDD-r13 ENUMERATED {supported} OPTIONAL, srs-Enhancements-r13 ENUMERATED {supported} OPTIONAL, interferenceMeasRestriction-r13 ENUMERATED {supported} OPTIONAL } MIMO-UE-Parameters-v1430 ::= SEQUENCE { parametersTM9-v1430 MIMO-UE-ParametersPerTM-v1430 OPTIONAL, parametersTM10-v1430 MIMO-UE-ParametersPerTM-v1430 OPTIONAL } MIMO-UE-ParametersPerTM-r13 ::= SEQUENCE { nonPrecoded-r13 MIMO-NonPrecodedCapabilities-r13 OPTIONAL, beamformed-r13 MIMO-UE-BeamformedCapabilities-r13 OPTIONAL, channelMeasRestriction-r13 ENUMERATED {supported} OPTIONAL, dmrs-Enhancements-r13 ENUMERATED {supported} OPTIONAL, csi-RS-EnhancementsTDD-r13 ENUMERATED {supported} OPTIONAL } MIMO-UE-ParametersPerTM-v1430 ::= SEQUENCE { nzp-CSI-RS-AperiodicInfo-r14 SEQUENCE { nMaxProc-r14 INTEGER(5..32), nMaxResource-r14 ENUMERATED {ffs1, ffs2, ffs3, ffs4} } OPTIONAL, nzp-CSI-RS-PeriodicInfo-r14 SEQUENCE { nMaxResource-r14 ENUMERATED {ffs1, ffs2, ffs3, ffs4} } OPTIONAL, zp-CSI-RS-AperiodicInfo-r14 ENUMERATED {supported} OPTIONAL, ul-dmrs-Enhancements-r14 ENUMERATED {supported} OPTIONAL, densityReductionNP-r14 ENUMERATED {supported} OPTIONAL, densityReductionBF-r14 ENUMERATED {supported} OPTIONAL, hybridCSI-r14 ENUMERATED {supported} OPTIONAL, semiOL-r14 ENUMERATED {supported} OPTIONAL, csi-ReportingNP-r14 ENUMERATED {supported} OPTIONAL, csi-ReportingAdvanced-r14 ENUMERATED {supported} OPTIONAL } MIMO-CA-ParametersPerBoBC-r13 ::= SEQUENCE { parametersTM9-r13 MIMO-CA-ParametersPerBoBCPerTM-r13 OPTIONAL, parametersTM10-r13 MIMO-CA-ParametersPerBoBCPerTM-r13 OPTIONAL } MIMO-CA-ParametersPerBoBC-v1430 ::= SEQUENCE { parametersTM9-v1430 MIMO-CA-ParametersPerBoBCPerTM-v1430 OPTIONAL, parametersTM10-v1430 MIMO-CA-ParametersPerBoBCPerTM-v1430 OPTIONAL } MIMO-CA-ParametersPerBoBCPerTM-r13 ::= SEQUENCE { nonPrecoded-r13 MIMO-NonPrecodedCapabilities-r13 OPTIONAL, beamformed-r13 MIMO-BeamformedCapabilityList-r13 OPTIONAL, dmrs-Enhancements-r13 ENUMERATED {different} OPTIONAL } MIMO-CA-ParametersPerBoBCPerTM-v1430 ::= SEQUENCE { csi-ReportingNP-r14 ENUMERATED {different} OPTIONAL, csi-ReportingAdvanced-r14 ENUMERATED {different} OPTIONAL } MIMO-NonPrecodedCapabilities-r13 ::= SEQUENCE { config1-r13 ENUMERATED {supported} OPTIONAL, config2-r13 ENUMERATED {supported} OPTIONAL, config3-r13 ENUMERATED {supported} OPTIONAL, config4-r13 ENUMERATED {supported} OPTIONAL } MIMO-UE-BeamformedCapabilities-r13 ::= SEQUENCE { altCodebook-r13 ENUMERATED {supported} OPTIONAL, mimo-BeamformedCapabilities-r13 MIMO-BeamformedCapabilityList-r13 } MIMO-BeamformedCapabilityList-r13 ::= SEQUENCE (SIZE (1..maxCSI-Proc-r11)) OF MIMO-BeamformedCapabilities-r13 MIMO-BeamformedCapabilities-r13 ::= SEQUENCE { k-Max-r13 INTEGER (1..8), n-MaxList-r13 BIT STRING (SIZE (1..7)) OPTIONAL } NonContiguousUL-RA-WithinCC-List-r10 ::= SEQUENCE (SIZE (1..maxBands)) OF NonContiguousUL-RA-WithinCC-r10 NonContiguousUL-RA-WithinCC-r10 ::= SEQUENCE { nonContiguousUL-RA-WithinCC-Info-r10 ENUMERATED {supported} OPTIONAL } RF-Parameters ::= SEQUENCE { supportedBandListEUTRA SupportedBandListEUTRA } RF-Parameters-v9e0 ::= SEQUENCE { supportedBandListEUTRA-v9e0 SupportedBandListEUTRA-v9e0 OPTIONAL } RF-Parameters-v1020 ::= SEQUENCE { supportedBandCombination-r10 SupportedBandCombination-r10 } RF-Parameters-v1060 ::= SEQUENCE { supportedBandCombinationExt-r10 SupportedBandCombinationExt-r10 } RF-Parameters-v1090 ::= SEQUENCE { supportedBandCombination-v1090 SupportedBandCombination-v1090 OPTIONAL } RF-Parameters-v10f0 ::= SEQUENCE { modifiedMPR-Behavior-r10 BIT STRING (SIZE (32)) OPTIONAL } RF-Parameters-v10i0 ::= SEQUENCE { supportedBandCombination-v10i0 SupportedBandCombination-v10i0 OPTIONAL } RF-Parameters-v10j0 ::= SEQUENCE { multiNS-Pmax-r10 ENUMERATED {supported} OPTIONAL } RF-Parameters-v1130 ::= SEQUENCE { supportedBandCombination-v1130 SupportedBandCombination-v1130 OPTIONAL } RF-Parameters-v1180 ::= SEQUENCE { freqBandRetrieval-r11 ENUMERATED {supported} OPTIONAL, requestedBands-r11 SEQUENCE (SIZE (1.. maxBands)) OF FreqBandIndicator-r11 OPTIONAL, supportedBandCombinationAdd-r11 SupportedBandCombinationAdd-r11 OPTIONAL } RF-Parameters-v11d0 ::= SEQUENCE { supportedBandCombinationAdd-v11d0 SupportedBandCombinationAdd-v11d0 OPTIONAL } RF-Parameters-v1250 ::= SEQUENCE { supportedBandListEUTRA-v1250 SupportedBandListEUTRA-v1250 OPTIONAL, supportedBandCombination-v1250 SupportedBandCombination-v1250 OPTIONAL, supportedBandCombinationAdd-v1250 SupportedBandCombinationAdd-v1250 OPTIONAL, freqBandPriorityAdjustment-r12 ENUMERATED {supported} OPTIONAL } RF-Parameters-v1270 ::= SEQUENCE { supportedBandCombination-v1270 SupportedBandCombination-v1270 OPTIONAL, supportedBandCombinationAdd-v1270 SupportedBandCombinationAdd-v1270 OPTIONAL } RF-Parameters-v1310 ::= SEQUENCE { eNB-RequestedParameters-r13 SEQUENCE { reducedIntNonContCombRequested-r13 ENUMERATED {true} OPTIONAL, requestedCCsDL-r13 INTEGER (2..32) OPTIONAL, requestedCCsUL-r13 INTEGER (2..32) OPTIONAL, skipFallbackCombRequested-r13 ENUMERATED {true} OPTIONAL } OPTIONAL, maximumCCsRetrieval-r13 ENUMERATED {supported} OPTIONAL, skipFallbackCombinations-r13 ENUMERATED {supported} OPTIONAL, reducedIntNonContComb-r13 ENUMERATED {supported} OPTIONAL, supportedBandListEUTRA-v1310 SupportedBandListEUTRA-v1310 OPTIONAL, supportedBandCombinationReduced-r13 SupportedBandCombinationReduced-r13 OPTIONAL } RF-Parameters-v1320 ::= SEQUENCE { supportedBandListEUTRA-v1320 SupportedBandListEUTRA-v1320 OPTIONAL, supportedBandCombination-v1320 SupportedBandCombination-v1320 OPTIONAL, supportedBandCombinationAdd-v1320 SupportedBandCombinationAdd-v1320 OPTIONAL, supportedBandCombinationReduced-v1320 SupportedBandCombinationReduced-v1320 OPTIONAL } RF-Parameters-v12b0 ::= SEQUENCE { maxLayersMIMO-Indication-r12 ENUMERATED {supported} OPTIONAL } RF-Parameters-v1430 ::= SEQUENCE { supportedBandCombination-v1430 SupportedBandCombination-v1430 OPTIONAL, supportedBandCombinationAdd-v1430 SupportedBandCombinationAdd-v1430 OPTIONAL, supportedBandCombinationReduced-v1430 SupportedBandCombinationReduced-v1430 OPTIONAL, eNB-RequestedParameters-v1430 SEQUENCE { requestedDiffFallbackCombList-r14 BandCombinationList-r14 } OPTIONAL, diffFallbackCombReport-r14 ENUMERATED {supported} OPTIONAL } SupportedBandCombination-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-r10 SupportedBandCombinationExt-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParametersExt-r10 SupportedBandCombination-v1090 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1090 SupportedBandCombination-v10i0 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v10i0 SupportedBandCombination-v1130 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1130 SupportedBandCombination-v1250 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1250 SupportedBandCombination-v1270 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1270 SupportedBandCombination-v1320 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1320 SupportedBandCombination-v1430 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandCombinationParameters-v1430 SupportedBandCombinationAdd-r11 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-r11 SupportedBandCombinationAdd-v11d0 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-v10i0 SupportedBandCombinationAdd-v1250 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-v1250 SupportedBandCombinationAdd-v1270 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-v1270 SupportedBandCombinationAdd-v1320 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-v1320 SupportedBandCombinationAdd-v1430 ::= SEQUENCE (SIZE (1..maxBandComb-r11)) OF BandCombinationParameters-v1430 SupportedBandCombinationReduced-r13 ::= SEQUENCE (SIZE (1..maxBandComb-r13)) OF BandCombinationParameters-r13 SupportedBandCombinationReduced-v1320 ::= SEQUENCE (SIZE (1..maxBandComb-r13)) OF BandCombinationParameters-v1320 SupportedBandCombinationReduced-v1430 ::= SEQUENCE (SIZE (1..maxBandComb-r13)) OF BandCombinationParameters-v1430 BandCombinationParameters-r10 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-r10 BandCombinationParametersExt-r10 ::= SEQUENCE { supportedBandwidthCombinationSet-r10 SupportedBandwidthCombinationSet-r10 OPTIONAL } BandCombinationParameters-v1090 ::= SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-v1090 BandCombinationParameters-v10i0::= SEQUENCE { bandParameterList-v10i0 SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-v10i0 OPTIONAL } BandCombinationParameters-v1130 ::= SEQUENCE { multipleTimingAdvance-r11 ENUMERATED {supported} OPTIONAL, simultaneousRx-Tx-r11 ENUMERATED {supported} OPTIONAL, bandParameterList-r11 SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-v1130 OPTIONAL, ... } BandCombinationParameters-r11 ::= SEQUENCE { bandParameterList-r11 SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-r11, supportedBandwidthCombinationSet-r11 SupportedBandwidthCombinationSet-r10 OPTIONAL, multipleTimingAdvance-r11 ENUMERATED {supported} OPTIONAL, simultaneousRx-Tx-r11 ENUMERATED {supported} OPTIONAL, bandInfoEUTRA-r11 BandInfoEUTRA, ... } BandCombinationParameters-v1250::= SEQUENCE { dc-Support-r12 SEQUENCE { asynchronous-r12 ENUMERATED {supported} OPTIONAL, supportedCellGrouping-r12 CHOICE { threeEntries-r12 BIT STRING (SIZE(3)), fourEntries-r12 BIT STRING (SIZE(7)), fiveEntries-r12 BIT STRING (SIZE(15)) } OPTIONAL } OPTIONAL, supportedNAICS-2CRS-AP-r12 BIT STRING (SIZE (1..maxNAICS-Entries-r12)) OPTIONAL, commSupportedBandsPerBC-r12 BIT STRING (SIZE (1.. maxBands)) OPTIONAL, ... } BandCombinationParameters-v1270 ::= SEQUENCE { bandParameterList-v1270 SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-v1270 OPTIONAL } BandCombinationParameters-r13 ::= SEQUENCE { differentFallbackSupported-r13 ENUMERATED {true} OPTIONAL, bandParameterList-r13 SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-r13, supportedBandwidthCombinationSet-r13 SupportedBandwidthCombinationSet-r10 OPTIONAL, multipleTimingAdvance-r13 ENUMERATED {supported} OPTIONAL, simultaneousRx-Tx-r13 ENUMERATED {supported} OPTIONAL, bandInfoEUTRA-r13 BandInfoEUTRA, dc-Support-r13 SEQUENCE { asynchronous-r13 ENUMERATED {supported} OPTIONAL, supportedCellGrouping-r13 CHOICE { threeEntries-r13 BIT STRING (SIZE(3)), fourEntries-r13 BIT STRING (SIZE(7)), fiveEntries-r13 BIT STRING (SIZE(15)) } OPTIONAL } OPTIONAL, supportedNAICS-2CRS-AP-r13 BIT STRING (SIZE (1..maxNAICS-Entries-r12)) OPTIONAL, commSupportedBandsPerBC-r13 BIT STRING (SIZE (1.. maxBands)) OPTIONAL } BandCombinationParameters-v1320 ::= SEQUENCE { bandParameterList-v1320 SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-v1320 OPTIONAL, additionalRx-Tx-PerformanceReq-r13 ENUMERATED {supported} OPTIONAL } BandCombinationParameters-v1430 ::= SEQUENCE { bandParameterList-v1430 SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF BandParameters-v1430 OPTIONAL, v2x-SupportedTxBandCombListPerBC-r14 BIT STRING (SIZE (1.. maxBandComb-r13)) OPTIONAL, v2x-SupportedRxBandCombListPerBC-r14 BIT STRING (SIZE (1.. maxBandComb-r13)) OPTIONAL} SupportedBandwidthCombinationSet-r10 ::= BIT STRING (SIZE (1..maxBandwidthCombSet-r10)) BandParameters-r10 ::= SEQUENCE { bandEUTRA-r10 FreqBandIndicator, bandParametersUL-r10 BandParametersUL-r10 OPTIONAL, bandParametersDL-r10 BandParametersDL-r10 OPTIONAL } BandParameters-v1090 ::= SEQUENCE { bandEUTRA-v1090 FreqBandIndicator-v9e0 OPTIONAL, ... } BandParameters-v10i0::= SEQUENCE { bandParametersDL-v10i0 SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersDL-v10i0 } BandParameters-v1130 ::= SEQUENCE { supportedCSI-Proc-r11 ENUMERATED {n1, n3, n4} } BandParameters-r11 ::= SEQUENCE { bandEUTRA-r11 FreqBandIndicator-r11, bandParametersUL-r11 BandParametersUL-r10 OPTIONAL, bandParametersDL-r11 BandParametersDL-r10 OPTIONAL, supportedCSI-Proc-r11 ENUMERATED {n1, n3, n4} OPTIONAL } BandParameters-v1270 ::= SEQUENCE { bandParametersDL-v1270 SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersDL-v1270 } BandParameters-r13 ::= SEQUENCE { bandEUTRA-r13 FreqBandIndicator-r11, bandParametersUL-r13 BandParametersUL-r13 OPTIONAL, bandParametersDL-r13 BandParametersDL-r13 OPTIONAL, supportedCSI-Proc-r13 ENUMERATED {n1, n3, n4} OPTIONAL } BandParameters-v1320 ::= SEQUENCE { bandParametersDL-v1320 MIMO-CA-ParametersPerBoBC-r13 } BandParameters-v1430 ::= SEQUENCE { bandParametersDL-v1430 MIMO-CA-ParametersPerBoBC-v1430 OPTIONAL, ul-256QAM-r14 ENUMERATED {supported} OPTIONAL, ul-256QAM-perCC-InfoList-r14 SEQUENCE (SIZE (2..maxServCell-r13)) OF UL-256QAM-perCC-Info-r14 OPTIONAL, retuningTimeInfoBandList-r14 SEQUENCE (SIZE (1..maxSimultaneousBands-r10)) OF RetuningTimeInfo-r14 OPTIONAL } V2X-BandParameters-r14 ::= SEQUENCE { v2x-FreqBandEUTRA-r14 FreqBandIndicator-r11, bandParametersTxSL-r14 BandParametersTxSL-r14 OPTIONAL, bandParametersRxSL-r14 BandParametersRxSL-r14 OPTIONAL } BandParametersTxSL-r14 ::= SEQUENCE { v2x-BandwidthClassTxSL-r14 V2X-BandwidthClassSL-r14, v2x-eNB-Scheduled-r14 ENUMERATED {supported} OPTIONAL, v2x-HighPower-r14 ENUMERATED {supported} OPTIONAL } BandParametersRxSL-r14 ::= SEQUENCE { v2x-BandwidthClassRxSL-r14 V2X-BandwidthClassSL-r14, v2x-HighReception-r14 ENUMERATED {supported} OPTIONAL } V2X-BandwidthClassSL-r14 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF V2X-BandwidthClass-r14 UL-256QAM-perCC-Info-r14 ::= SEQUENCE { ul-256QAM-perCC-r14 ENUMERATED {supported} OPTIONAL } BandParametersUL-r10 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersUL-r10 BandParametersUL-r13 ::= CA-MIMO-ParametersUL-r10 CA-MIMO-ParametersUL-r10 ::= SEQUENCE { ca-BandwidthClassUL-r10 CA-BandwidthClass-r10, supportedMIMO-CapabilityUL-r10 MIMO-CapabilityUL-r10 OPTIONAL } BandParametersDL-r10 ::= SEQUENCE (SIZE (1..maxBandwidthClass-r10)) OF CA-MIMO-ParametersDL-r10 BandParametersDL-r13 ::= CA-MIMO-ParametersDL-r13 CA-MIMO-ParametersDL-r10 ::= SEQUENCE { ca-BandwidthClassDL-r10 CA-BandwidthClass-r10, supportedMIMO-CapabilityDL-r10 MIMO-CapabilityDL-r10 OPTIONAL } CA-MIMO-ParametersDL-v10i0 ::= SEQUENCE { fourLayerTM3-TM4-r10 ENUMERATED {supported} OPTIONAL } CA-MIMO-ParametersDL-v1270 ::= SEQUENCE { intraBandContiguousCC-InfoList-r12 SEQUENCE (SIZE (1..maxServCell-r10)) OF IntraBandContiguousCC-Info-r12 } CA-MIMO-ParametersDL-r13 ::= SEQUENCE { ca-BandwidthClassDL-r13 CA-BandwidthClass-r10, supportedMIMO-CapabilityDL-r13 MIMO-CapabilityDL-r10 OPTIONAL, fourLayerTM3-TM4-r13 ENUMERATED {supported} OPTIONAL, intraBandContiguousCC-InfoList-r13 SEQUENCE (SIZE (1..maxServCell-r13)) OF IntraBandContiguousCC-Info-r12 } IntraBandContiguousCC-Info-r12 ::= SEQUENCE { fourLayerTM3-TM4-perCC-r12 ENUMERATED {supported} OPTIONAL, supportedMIMO-CapabilityDL-r12 MIMO-CapabilityDL-r10 OPTIONAL, supportedCSI-Proc-r12 ENUMERATED {n1, n3, n4} OPTIONAL } CA-BandwidthClass-r10 ::= ENUMERATED {a, b, c, d, e, f, ...} V2X-BandwidthClass-r14 ::= ENUMERATED {a, b, c, d, e, f, ...} MIMO-CapabilityUL-r10 ::= ENUMERATED {twoLayers, fourLayers} MIMO-CapabilityDL-r10 ::= ENUMERATED {twoLayers, fourLayers, eightLayers} SupportedBandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA SupportedBandListEUTRA-v9e0::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA-v9e0 SupportedBandListEUTRA-v1250 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA-v1250 SupportedBandListEUTRA-v1310 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA-v1310 SupportedBandListEUTRA-v1320 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA-v1320 SupportedBandEUTRA ::= SEQUENCE { bandEUTRA FreqBandIndicator, halfDuplex BOOLEAN } SupportedBandEUTRA-v9e0 ::= SEQUENCE { bandEUTRA-v9e0 FreqBandIndicator-v9e0 OPTIONAL } SupportedBandEUTRA-v1250 ::= SEQUENCE { dl-256QAM-r12 ENUMERATED {supported} OPTIONAL, ul-64QAM-r12 ENUMERATED {supported} OPTIONAL } SupportedBandEUTRA-v1310 ::= SEQUENCE { ue-PowerClass-5-r13 ENUMERATED {supported} OPTIONAL } SupportedBandEUTRA-v1320 ::= SEQUENCE { intraFreq-CE-NeedForGaps-r13 ENUMERATED {supported} OPTIONAL, ue-PowerClass-N-r13 ENUMERATED {class1, class2, class4} OPTIONAL } MeasParameters ::= SEQUENCE { bandListEUTRA BandListEUTRA } MeasParameters-v1020 ::= SEQUENCE { bandCombinationListEUTRA-r10 BandCombinationListEUTRA-r10 } MeasParameters-v1130 ::= SEQUENCE { rsrqMeasWideband-r11 ENUMERATED {supported} OPTIONAL } MeasParameters-v11a0 ::= SEQUENCE { benefitsFromInterruption-r11 ENUMERATED {true} OPTIONAL } MeasParameters-v1250 ::= SEQUENCE { timerT312-r12 ENUMERATED {supported} OPTIONAL, alternativeTimeToTrigger-r12 ENUMERATED {supported} OPTIONAL, incMonEUTRA-r12 ENUMERATED {supported} OPTIONAL, incMonUTRA-r12 ENUMERATED {supported} OPTIONAL, extendedMaxMeasId-r12 ENUMERATED {supported} OPTIONAL, extendedRSRQ-LowerRange-r12 ENUMERATED {supported} OPTIONAL, rsrq-OnAllSymbols-r12 ENUMERATED {supported} OPTIONAL, crs-DiscoverySignalsMeas-r12 ENUMERATED {supported} OPTIONAL, csi-RS-DiscoverySignalsMeas-r12 ENUMERATED {supported} OPTIONAL } MeasParameters-v1310 ::= SEQUENCE { rs-SINR-Meas-r13 ENUMERATED {supported} OPTIONAL, whiteCellList-r13 ENUMERATED {supported} OPTIONAL, extendedMaxObjectId-r13 ENUMERATED {supported} OPTIONAL, ul-PDCP-Delay-r13 ENUMERATED {supported} OPTIONAL, extendedFreqPriorities-r13 ENUMERATED {supported} OPTIONAL, multiBandInfoReport-r13 ENUMERATED {supported} OPTIONAL, rssi-AndChannelOccupancyReporting-r13 ENUMERATED {supported} OPTIONAL } MeasParameters-v1430 ::= SEQUENCE { ceMeasurements-r14 ENUMERATED {supported} OPTIONAL, ncsg-r14 ENUMERATED {supported} OPTIONAL, shortMeasurementGap-r14 ENUMERATED {supported} OPTIONAL, perServingCellMeasurementGap-r14 ENUMERATED {supported} OPTIONAL, nonUniformGap-r14 ENUMERATED {supported} OPTIONAL } BandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF BandInfoEUTRA BandCombinationListEUTRA-r10 ::= SEQUENCE (SIZE (1..maxBandComb-r10)) OF BandInfoEUTRA BandInfoEUTRA ::= SEQUENCE { interFreqBandList InterFreqBandList, interRAT-BandList InterRAT-BandList OPTIONAL } InterFreqBandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterFreqBandInfo InterFreqBandInfo ::= SEQUENCE { interFreqNeedForGaps BOOLEAN } InterRAT-BandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterRAT-BandInfo InterRAT-BandInfo ::= SEQUENCE { interRAT-NeedForGaps BOOLEAN } IRAT-ParametersUTRA-FDD ::= SEQUENCE { supportedBandListUTRA-FDD SupportedBandListUTRA-FDD } IRAT-ParametersUTRA-v920 ::= SEQUENCE { e-RedirectionUTRA-r9 ENUMERATED {supported} } IRAT-ParametersUTRA-v9c0 ::= SEQUENCE { voiceOverPS-HS-UTRA-FDD-r9 ENUMERATED {supported} OPTIONAL, voiceOverPS-HS-UTRA-TDD128-r9 ENUMERATED {supported} OPTIONAL, srvcc-FromUTRA-FDD-ToUTRA-FDD-r9 ENUMERATED {supported} OPTIONAL, srvcc-FromUTRA-FDD-ToGERAN-r9 ENUMERATED {supported} OPTIONAL, srvcc-FromUTRA-TDD128-ToUTRA-TDD128-r9 ENUMERATED {supported} OPTIONAL, srvcc-FromUTRA-TDD128-ToGERAN-r9 ENUMERATED {supported} OPTIONAL } IRAT-ParametersUTRA-v9h0 ::= SEQUENCE { mfbi-UTRA-r9 ENUMERATED {supported} } SupportedBandListUTRA-FDD ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-FDD SupportedBandUTRA-FDD ::= ENUMERATED { bandI, bandII, bandIII, bandIV, bandV, bandVI, bandVII, bandVIII, bandIX, bandX, bandXI, bandXII, bandXIII, bandXIV, bandXV, bandXVI, ..., bandXVII-8a0, bandXVIII-8a0, bandXIX-8a0, bandXX-8a0, bandXXI-8a0, bandXXII-8a0, bandXXIII-8a0, bandXXIV-8a0, bandXXV-8a0, bandXXVI-8a0, bandXXVII-8a0, bandXXVIII-8a0, bandXXIX-8a0, bandXXX-8a0, bandXXXI-8a0, bandXXXII-8a0} IRAT-ParametersUTRA-TDD128 ::= SEQUENCE { supportedBandListUTRA-TDD128 SupportedBandListUTRA-TDD128 } SupportedBandListUTRA-TDD128 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD128 SupportedBandUTRA-TDD128 ::= ENUMERATED { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, ...} IRAT-ParametersUTRA-TDD384 ::= SEQUENCE { supportedBandListUTRA-TDD384 SupportedBandListUTRA-TDD384 } SupportedBandListUTRA-TDD384 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD384 SupportedBandUTRA-TDD384 ::= ENUMERATED { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, ...} IRAT-ParametersUTRA-TDD768 ::= SEQUENCE { supportedBandListUTRA-TDD768 SupportedBandListUTRA-TDD768 } SupportedBandListUTRA-TDD768 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD768 SupportedBandUTRA-TDD768 ::= ENUMERATED { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, ...} IRAT-ParametersUTRA-TDD-v1020 ::= SEQUENCE { e-RedirectionUTRA-TDD-r10 ENUMERATED {supported} } IRAT-ParametersGERAN ::= SEQUENCE { supportedBandListGERAN SupportedBandListGERAN, interRAT-PS-HO-ToGERAN BOOLEAN } IRAT-ParametersGERAN-v920 ::= SEQUENCE { dtm-r9 ENUMERATED {supported} OPTIONAL, e-RedirectionGERAN-r9 ENUMERATED {supported} OPTIONAL } SupportedBandListGERAN ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandGERAN SupportedBandGERAN ::= ENUMERATED { gsm450, gsm480, gsm710, gsm750, gsm810, gsm850, gsm900P, gsm900E, gsm900R, gsm1800, gsm1900, spare5, spare4, spare3, spare2, spare1, ...} IRAT-ParametersCDMA2000-HRPD ::= SEQUENCE { supportedBandListHRPD SupportedBandListHRPD, tx-ConfigHRPD ENUMERATED {single, dual}, rx-ConfigHRPD ENUMERATED {single, dual} } SupportedBandListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000 IRAT-ParametersCDMA2000-1XRTT ::= SEQUENCE { supportedBandList1XRTT SupportedBandList1XRTT, tx-Config1XRTT ENUMERATED {single, dual}, rx-Config1XRTT ENUMERATED {single, dual} } IRAT-ParametersCDMA2000-1XRTT-v920 ::= SEQUENCE { e-CSFB-1XRTT-r9 ENUMERATED {supported}, e-CSFB-ConcPS-Mob1XRTT-r9 ENUMERATED {supported} OPTIONAL } IRAT-ParametersCDMA2000-1XRTT-v1020 ::= SEQUENCE { e-CSFB-dual-1XRTT-r10 ENUMERATED {supported} } IRAT-ParametersCDMA2000-v1130 ::= SEQUENCE { cdma2000-NW-Sharing-r11 ENUMERATED {supported} OPTIONAL } SupportedBandList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000 IRAT-ParametersWLAN-r13 ::= SEQUENCE { supportedBandListWLAN-r13 SEQUENCE (SIZE (1..maxWLAN-Bands-r13)) OF WLAN-BandIndicator-r13 OPTIONAL } CSG-ProximityIndicationParameters-r9 ::= SEQUENCE { intraFreqProximityIndication-r9 ENUMERATED {supported} OPTIONAL, interFreqProximityIndication-r9 ENUMERATED {supported} OPTIONAL, utran-ProximityIndication-r9 ENUMERATED {supported} OPTIONAL } NeighCellSI-AcquisitionParameters-r9 ::= SEQUENCE { intraFreqSI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL, interFreqSI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL, utran-SI-AcquisitionForHO-r9 ENUMERATED {supported} OPTIONAL } SON-Parameters-r9 ::= SEQUENCE { rach-Report-r9 ENUMERATED {supported} OPTIONAL } UE-BasedNetwPerfMeasParameters-r10 ::= SEQUENCE { loggedMeasurementsIdle-r10 ENUMERATED {supported} OPTIONAL, standaloneGNSS-Location-r10 ENUMERATED {supported} OPTIONAL } UE-BasedNetwPerfMeasParameters-v1250 ::= SEQUENCE { loggedMBSFNMeasurements-r12 ENUMERATED {supported} } UE-BasedNetwPerfMeasParameters-v1430 ::= SEQUENCE { locationReport-r14 ENUMERATED {supported} OPTIONAL } OTDOA-PositioningCapabilities-r10 ::= SEQUENCE { otdoa-UE-Assisted-r10 ENUMERATED {supported}, interFreqRSTD-Measurement-r10 ENUMERATED {supported} OPTIONAL } Other-Parameters-r11 ::= SEQUENCE { inDeviceCoexInd-r11 ENUMERATED {supported} OPTIONAL, powerPrefInd-r11 ENUMERATED {supported} OPTIONAL, ue-Rx-TxTimeDiffMeasurements-r11 ENUMERATED {supported} OPTIONAL } Other-Parameters-v11d0 ::= SEQUENCE { inDeviceCoexInd-UL-CA-r11 ENUMERATED {supported} OPTIONAL } Other-Parameters-v1360 ::= SEQUENCE { inDeviceCoexInd-HardwareSharingInd-r13 ENUMERATED {supported} OPTIONAL } Other-Parameters-v1430 ::= SEQUENCE { bwPrefInd-r14 ENUMERATED {supported} OPTIONAL, rlm-ReportSupport-r14 ENUMERATED {supported} OPTIONAL } MBMS-Parameters-r11 ::= SEQUENCE { mbms-SCell-r11 ENUMERATED {supported} OPTIONAL, mbms-NonServingCell-r11 ENUMERATED {supported} OPTIONAL } MBMS-Parameters-v1250 ::= SEQUENCE { mbms-AsyncDC-r12 ENUMERATED {supported} OPTIONAL } MBMS-Parameters-v1430 ::= SEQUENCE { fembmsDedicatedCell-r14 ENUMERATED {supported} OPTIONAL, fembmsMixedCell-r14 ENUMERATED {supported} OPTIONAL, subcarrierSpacingMBMS-khz7dot5-r14 ENUMERATED {supported} OPTIONAL, subcarrierSpacingMBMS-khz1dot25-r14 ENUMERATED {supported} OPTIONAL } FeMBMS-Unicast-Parameters-r14 ::= SEQUENCE { unicast-fembmsMixedSCell-r14 ENUMERATED {supported} OPTIONAL, emptyUnicastRegion-r14 ENUMERATED {supported} OPTIONAL } SCPTM-Parameters-r13 ::= SEQUENCE { scptm-ParallelReception-r13 ENUMERATED {supported} OPTIONAL, scptm-SCell-r13 ENUMERATED {supported} OPTIONAL, scptm-NonServingCell-r13 ENUMERATED {supported} OPTIONAL, scptm-AsyncDC-r13 ENUMERATED {supported} OPTIONAL } CE-Parameters-r13 ::= SEQUENCE { ce-ModeA-r13 ENUMERATED {supported} OPTIONAL, ce-ModeB-r13 ENUMERATED {supported} OPTIONAL } CE-Parameters-v1320 ::= SEQUENCE { intraFreqA3-CE-ModeA-r13 ENUMERATED {supported} OPTIONAL, intraFreqA3-CE-ModeB-r13 ENUMERATED {supported} OPTIONAL, intraFreqHO-CE-ModeA-r13 ENUMERATED {supported} OPTIONAL, intraFreqHO-CE-ModeB-r13 ENUMERATED {supported} OPTIONAL } CE-Parameters-v1350 ::= SEQUENCE { unicastFrequencyHopping-r13 ENUMERATED {supported} OPTIONAL } CE-Parameters-v1370 ::= SEQUENCE { tm9-CE-ModeA-r13 ENUMERATED {supported} OPTIONAL, tm9-CE-ModeB-r13 ENUMERATED {supported} OPTIONAL } CE-Parameters-v1430 ::= SEQUENCE { ce-SwitchWithoutHO-r14 ENUMERATED {supported} OPTIONAL } LAA-Parameters-r13 ::= SEQUENCE { crossCarrierSchedulingLAA-DL-r13 ENUMERATED {supported} OPTIONAL, csi-RS-DRS-RRM-MeasurementsLAA-r13 ENUMERATED {supported} OPTIONAL, downlinkLAA-r13 ENUMERATED {supported} OPTIONAL, endingDwPTS-r13 ENUMERATED {supported} OPTIONAL, secondSlotStartingPosition-r13 ENUMERATED {supported} OPTIONAL, tm9-LAA-r13 ENUMERATED {supported} OPTIONAL, tm10-LAA-r13 ENUMERATED {supported} OPTIONAL } LAA-Parameters-v1430 ::= SEQUENCE { crossCarrierSchedulingLAA-UL-r14 ENUMERATED {supported} OPTIONAL, uplinkLAA-r14 ENUMERATED {supported} OPTIONAL, twoStepSchedulingTimingInfo-r14 ENUMERATED {nPlus1, nPlus2, nPlus3} OPTIONAL, uss-BlindDecodingAdjustment-r14 ENUMERATED {supported} OPTIONAL, uss-BlindDecodingReduction-r14 ENUMERATED {supported} OPTIONAL, outOfSequenceGrantHandling-r14 ENUMERATED {supported} OPTIONAL } WLAN-IW-Parameters-r12 ::= SEQUENCE { wlan-IW-RAN-Rules-r12 ENUMERATED {supported} OPTIONAL, wlan-IW-ANDSF-Policies-r12 ENUMERATED {supported} OPTIONAL } LWA-Parameters-r13 ::= SEQUENCE { lwa-r13 ENUMERATED {supported} OPTIONAL, lwa-SplitBearer-r13 ENUMERATED {supported} OPTIONAL, wlan-MAC-Address-r13 OCTET STRING (SIZE (6)) OPTIONAL, lwa-BufferSize-r13 ENUMERATED {supported} OPTIONAL } LWA-Parameters-v1430 ::= SEQUENCE { lwa-HO-WithoutWT-Change-r14 ENUMERATED {supported} OPTIONAL, lwa-UL-r14 ENUMERATED {supported} OPTIONAL, wlan-PeriodicMeas-r14 ENUMERATED {supported} OPTIONAL, wlan-ReportAnyWLAN-r14 ENUMERATED {supported} OPTIONAL, wlan-SupportedDataRate-r14 INTEGER (1..2048) OPTIONAL } LWA-Parameters-v1440 ::= SEQUENCE { lwa-RLC-UM-r14 ENUMERATED {supported} OPTIONAL } WLAN-IW-Parameters-v1310 ::= SEQUENCE { rclwi-r13 ENUMERATED {supported} OPTIONAL } LWIP-Parameters-r13 ::= SEQUENCE { lwip-r13 ENUMERATED {supported} OPTIONAL } LWIP-Parameters-v1430 ::= SEQUENCE { lwip-Aggregation-DL-r14 ENUMERATED {supported} OPTIONAL, lwip-Aggregation-UL-r14 ENUMERATED {supported} OPTIONAL } NAICS-Capability-List-r12 ::= SEQUENCE (SIZE (1..maxNAICS-Entries-r12)) OF NAICS-Capability-Entry-r12 NAICS-Capability-Entry-r12 ::= SEQUENCE { numberOfNAICS-CapableCC-r12 INTEGER(1..5), numberOfAggregatedPRB-r12 ENUMERATED { n50, n75, n100, n125, n150, n175, n200, n225, n250, n275, n300, n350, n400, n450, n500, spare}, ... } SL-Parameters-r12 ::= SEQUENCE { commSimultaneousTx-r12 ENUMERATED {supported} OPTIONAL, commSupportedBands-r12 FreqBandIndicatorListEUTRA-r12 OPTIONAL, discSupportedBands-r12 SupportedBandInfoList-r12 OPTIONAL, discScheduledResourceAlloc-r12 ENUMERATED {supported} OPTIONAL, disc-UE-SelectedResourceAlloc-r12 ENUMERATED {supported} OPTIONAL, disc-SLSS-r12 ENUMERATED {supported} OPTIONAL, discSupportedProc-r12 ENUMERATED {n50, n400} OPTIONAL } SL-Parameters-v1310 ::= SEQUENCE { discSysInfoReporting-r13 ENUMERATED {supported} OPTIONAL, commMultipleTx-r13 ENUMERATED {supported} OPTIONAL, discInterFreqTx-r13 ENUMERATED {supported} OPTIONAL, discPeriodicSLSS-r13 ENUMERATED {supported} OPTIONAL } SL-Parameters-v1430 ::= SEQUENCE { zoneBasedPoolSelection-r14 ENUMERATED {supported} OPTIONAL, ue-AutonomousWithFullSensing-r14 ENUMERATED {supported} OPTIONAL, ue-AutonomousWithPartialSensing-r14 ENUMERATED {supported} OPTIONAL, sl-CongestionControl-r14 ENUMERATED {supported} OPTIONAL, v2x-TxWithShortResvInterval-r14 ENUMERATED {supported} OPTIONAL, v2x-numberTxRxTiming-r14 INTEGER(1..16) OPTIONAL, v2x-nonAdjacentPSCCH-PSSCH-r14 ENUMERATED {supported} OPTIONAL, slss-TxRx-r14 ENUMERATED {supported} OPTIONAL, v2x-SupportedBandCombinationList-r14 V2X-SupportedBandCombination-r14 OPTIONAL } V2X-SupportedBandCombination-r14 ::= SEQUENCE (SIZE (1..maxBandComb-r13)) OF V2X-BandCombinationParameters-r14 V2X-BandCombinationParameters-r14 ::= SEQUENCE (SIZE (1.. maxSimultaneousBands-r10)) OF V2X-BandParameters-r14 SupportedBandInfoList-r12 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandInfo-r12 SupportedBandInfo-r12 ::= SEQUENCE { support-r12 ENUMERATED {supported} OPTIONAL } FreqBandIndicatorListEUTRA-r12 ::= SEQUENCE (SIZE (1..maxBands)) OF FreqBandIndicator-r11 MMTEL-Parameters-r14 ::= SEQUENCE { delayBudgetReporting-r14 ENUMERATED {supported} OPTIONAL, pusch-Enhancements-r14 ENUMERATED {supported} OPTIONAL, recommendedBitRate-r14 ENUMERATED {supported} OPTIONAL, recommendedBitRateQuery-r14 ENUMERATED {supported} OPTIONAL } RetuningTimeInfo-r14 ::= SEQUENCE { retuningInfo SEQUENCE { rf-RetuningTimeDL-r14 ENUMERATED {n0, n0dot5, n1, n1dot5, n2, n2dot5, n3, n3dot5, n4, n4dot5, n5, n5dot5, n6, n6dot5, n7, spare1} OPTIONAL, rf-RetuningTimeUL-r14 ENUMERATED {n0, n0dot5, n1, n1dot5, n2, n2dot5, n3, n3dot5, n4, n4dot5, n5, n5dot5, n6, n6dot5, n7, spare1} OPTIONAL } } HighSpeedEnhParameters-r14 ::= SEQUENCE { measurementEnhancements-r14 ENUMERATED {supported} OPTIONAL, demodulationEnhancements-r14 ENUMERATED {supported} OPTIONAL, prach-Enhancements-r14 ENUMERATED {supported} OPTIONAL } UE-RadioPagingInfo-r12 ::= SEQUENCE { ue-Category-v1250 INTEGER (0) OPTIONAL, ..., [[ ue-CategoryDL-v1310 ENUMERATED {m1} OPTIONAL, ce-ModeA-r13 ENUMERATED {true} OPTIONAL, ce-ModeB-r13 ENUMERATED {true} OPTIONAL ]] } UE-TimersAndConstants ::= SEQUENCE { t300 ENUMERATED { ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000}, t301 ENUMERATED { ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000}, t310 ENUMERATED { ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, n310 ENUMERATED { n1, n2, n3, n4, n6, n8, n10, n20}, t311 ENUMERATED { ms1000, ms3000, ms5000, ms10000, ms15000, ms20000, ms30000}, n311 ENUMERATED { n1, n2, n3, n4, n5, n6, n8, n10}, ..., [[ t300-v1310 ENUMERATED { ms2500, ms3000, ms3500, ms4000, ms5000, ms6000, ms8000, ms10000} OPTIONAL, -- Need OR t301-v1310 ENUMERATED { ms2500, ms3000, ms3500, ms4000, ms5000, ms6000, ms8000, ms10000} OPTIONAL -- Need OR ]], [[ t310-v1330 ENUMERATED {ms4000, ms6000} OPTIONAL -- Need OR ]] } VisitedCellInfoList-r12 ::= SEQUENCE (SIZE (1..maxCellHistory-r12)) OF VisitedCellInfo-r12 VisitedCellInfo-r12 ::= SEQUENCE { visitedCellId-r12 CHOICE { cellGlobalId-r12 CellGlobalIdEUTRA, pci-arfcn-r12 SEQUENCE { physCellId-r12 PhysCellId, carrierFreq-r12 ARFCN-ValueEUTRA-r9 } } OPTIONAL, timeSpent-r12 INTEGER (0..4095), ... } WLAN-OffloadConfig-r12 ::= SEQUENCE { thresholdRSRP-r12 SEQUENCE { thresholdRSRP-Low-r12 RSRP-Range, thresholdRSRP-High-r12 RSRP-Range } OPTIONAL, -- Need OR thresholdRSRQ-r12 SEQUENCE { thresholdRSRQ-Low-r12 RSRQ-Range, thresholdRSRQ-High-r12 RSRQ-Range } OPTIONAL, -- Need OR thresholdRSRQ-OnAllSymbolsWithWB-r12 SEQUENCE { thresholdRSRQ-OnAllSymbolsWithWB-Low-r12 RSRQ-Range, thresholdRSRQ-OnAllSymbolsWithWB-High-r12 RSRQ-Range } OPTIONAL, -- Need OP thresholdRSRQ-OnAllSymbols-r12 SEQUENCE { thresholdRSRQ-OnAllSymbolsLow-r12 RSRQ-Range, thresholdRSRQ-OnAllSymbolsHigh-r12 RSRQ-Range } OPTIONAL, -- Need OP thresholdRSRQ-WB-r12 SEQUENCE { thresholdRSRQ-WB-Low-r12 RSRQ-Range, thresholdRSRQ-WB-High-r12 RSRQ-Range } OPTIONAL, -- Need OP thresholdChannelUtilization-r12 SEQUENCE { thresholdChannelUtilizationLow-r12 INTEGER (0..255), thresholdChannelUtilizationHigh-r12 INTEGER (0..255) } OPTIONAL, -- Need OR thresholdBackhaul-Bandwidth-r12 SEQUENCE { thresholdBackhaulDL-BandwidthLow-r12 WLAN-backhaulRate-r12, thresholdBackhaulDL-BandwidthHigh-r12 WLAN-backhaulRate-r12, thresholdBackhaulUL-BandwidthLow-r12 WLAN-backhaulRate-r12, thresholdBackhaulUL-BandwidthHigh-r12 WLAN-backhaulRate-r12 } OPTIONAL, -- Need OR thresholdWLAN-RSSI-r12 SEQUENCE { thresholdWLAN-RSSI-Low-r12 INTEGER (0..255), thresholdWLAN-RSSI-High-r12 INTEGER (0..255) } OPTIONAL, -- Need OR offloadPreferenceIndicator-r12 BIT STRING (SIZE (16)) OPTIONAL, -- Need OR t-SteeringWLAN-r12 T-Reselection OPTIONAL, -- Need OR ... } WLAN-backhaulRate-r12 ::= ENUMERATED {r0, r4, r8, r16, r32, r64, r128, r256, r512, r1024, r2048, r4096, r8192, r16384, r32768, r65536, r131072, r262144, r524288, r1048576, r2097152, r4194304, r8388608, r16777216, r33554432, r67108864, r134217728, r268435456, r536870912, r1073741824, r2147483648, r4294967296} MBMS-NotificationConfig-r9 ::= SEQUENCE { notificationRepetitionCoeff-r9 ENUMERATED {n2, n4}, notificationOffset-r9 INTEGER (0..10), notificationSF-Index-r9 INTEGER (1..6) } MBMS-NotificationConfig-v1430 ::= SEQUENCE { notificationSF-Index-v1430 INTEGER (7..10) } MBMS-ServiceList-r13 ::= SEQUENCE (SIZE (0..maxMBMS-ServiceListPerUE-r13)) OF MBMS-ServiceInfo-r13 MBMS-ServiceInfo-r13 ::= SEQUENCE { tmgi-r13 TMGI-r9 } MBSFN-AreaId-r12 ::= INTEGER (0..255) MBSFN-AreaInfoList-r9 ::= SEQUENCE (SIZE(1..maxMBSFN-Area)) OF MBSFN-AreaInfo-r9 MBSFN-AreaInfo-r9 ::= SEQUENCE { mbsfn-AreaId-r9 MBSFN-AreaId-r12, non-MBSFNregionLength ENUMERATED {s1, s2}, notificationIndicator-r9 INTEGER (0..7), mcch-Config-r9 SEQUENCE { mcch-RepetitionPeriod-r9 ENUMERATED {rf32, rf64, rf128, rf256}, mcch-Offset-r9 INTEGER (0..10), mcch-ModificationPeriod-r9 ENUMERATED {rf512, rf1024}, sf-AllocInfo-r9 BIT STRING (SIZE(6)), signallingMCS-r9 ENUMERATED {n2, n7, n13, n19} }, ..., [[ mcch-Config-r14 SEQUENCE { mcch-RepetitionPeriod-v1430 ENUMERATED {rf1, rf2, rf4, rf8, rf16 } OPTIONAL, -- Need OR mcch-ModificationPeriod-v1430 ENUMERATED {rf1, rf2, rf4, rf8, rf16, rf32, rf64, rf128, rf256, spare7} OPTIONAL -- Need OR } OPTIONAL, -- Need OR subcarrierSpacingMBMS-r14 ENUMERATED {khz-7dot5, khz-1dot25} OPTIONAL -- Need OR ]] } MBSFN-SubframeConfig ::= SEQUENCE { radioframeAllocationPeriod ENUMERATED {n1, n2, n4, n8, n16, n32}, radioframeAllocationOffset INTEGER (0..7), subframeAllocation CHOICE { oneFrame BIT STRING (SIZE(6)), fourFrames BIT STRING (SIZE(24)) } } MBSFN-SubframeConfig-v1430 ::= SEQUENCE { subframeAllocation-v1430 CHOICE { oneFrame-v1430 BIT STRING (SIZE(2)), fourFrames-v1430 BIT STRING (SIZE(8)) } } PMCH-InfoList-r9 ::= SEQUENCE (SIZE (0..maxPMCH-PerMBSFN)) OF PMCH-Info-r9 PMCH-InfoListExt-r12 ::= SEQUENCE (SIZE (0..maxPMCH-PerMBSFN)) OF PMCH-InfoExt-r12 PMCH-Info-r9 ::= SEQUENCE { pmch-Config-r9 PMCH-Config-r9, mbms-SessionInfoList-r9 MBMS-SessionInfoList-r9, ... } PMCH-InfoExt-r12 ::= SEQUENCE { pmch-Config-r12 PMCH-Config-r12, mbms-SessionInfoList-r12 MBMS-SessionInfoList-r9, ... } MBMS-SessionInfoList-r9 ::= SEQUENCE (SIZE (0..maxSessionPerPMCH)) OF MBMS-SessionInfo-r9 MBMS-SessionInfo-r9 ::= SEQUENCE { tmgi-r9 TMGI-r9, sessionId-r9 OCTET STRING (SIZE (1)) OPTIONAL, -- Need OR logicalChannelIdentity-r9 INTEGER (0..maxSessionPerPMCH-1), ... } PMCH-Config-r9 ::= SEQUENCE { sf-AllocEnd-r9 INTEGER (0..1535), dataMCS-r9 INTEGER (0..28), mch-SchedulingPeriod-r9 ENUMERATED { rf8, rf16, rf32, rf64, rf128, rf256, rf512, rf1024}, ... } PMCH-Config-r12 ::= SEQUENCE { sf-AllocEnd-r12 INTEGER (0..1535), dataMCS-r12 CHOICE { normal-r12 INTEGER (0..28), higerOrder-r12 INTEGER (0..27) }, mch-SchedulingPeriod-r12 ENUMERATED { rf4, rf8, rf16, rf32, rf64, rf128, rf256, rf512, rf1024}, ..., [[ mch-SchedulingPeriod-v1430 ENUMERATED {rf1, rf2} OPTIONAL -- Need OR ]] } TMGI-r9 ::= SEQUENCE { plmn-Id-r9 CHOICE { plmn-Index-r9 INTEGER (1..maxPLMN-r11), explicitValue-r9 PLMN-Identity }, serviceId-r9 OCTET STRING (SIZE (3)) } SC-MTCH-InfoList-r13 ::= SEQUENCE (SIZE (0..maxSC-MTCH-r13)) OF SC-MTCH-Info-r13 SC-MTCH-Info-r13 ::= SEQUENCE { mbmsSessionInfo-r13 MBMSSessionInfo-r13, g-RNTI-r13 BIT STRING(SIZE(16)), sc-mtch-schedulingInfo-r13 SC-MTCH-SchedulingInfo-r13 OPTIONAL, -- Need OP sc-mtch-neighbourCell-r13 BIT STRING (SIZE(maxNeighCell-SCPTM-r13)) OPTIONAL, -- Need OP ..., [[ p-a-r13 ENUMERATED { dB-6, dB-4dot77, dB-3, dB-1dot77, dB0, dB1, dB2, dB3} OPTIONAL -- Need ON ]] } MBMSSessionInfo-r13 ::= SEQUENCE { tmgi-r13 TMGI-r9, sessionId-r13 OCTET STRING (SIZE (1)) OPTIONAL -- Need OR } SC-MTCH-SchedulingInfo-r13::= SEQUENCE { onDurationTimerSCPTM-r13 ENUMERATED { psf1, psf2, psf3, psf4, psf5, psf6, psf8, psf10, psf20, psf30, psf40, psf50, psf60, psf80, psf100, psf200}, drx-InactivityTimerSCPTM-r13 ENUMERATED { psf0, psf1, psf2, psf4, psf8, psf10, psf20, psf40, psf80, psf160, ps320, psf640, psf960, psf1280, psf1920, psf2560}, schedulingPeriodStartOffsetSCPTM-r13 CHOICE { sf10 INTEGER(0..9), sf20 INTEGER(0..19), sf32 INTEGER(0..31), sf40 INTEGER(0..39), sf64 INTEGER(0..63), sf80 INTEGER(0..79), sf128 INTEGER(0..127), sf160 INTEGER(0..159), sf256 INTEGER(0..255), sf320 INTEGER(0..319), sf512 INTEGER(0..511), sf640 INTEGER(0..639), sf1024 INTEGER(0..1023), sf2048 INTEGER(0..2048), sf4096 INTEGER(0..4096), sf8192 INTEGER(0..8192) }, ... } SC-MTCH-InfoList-BR-r14 ::= SEQUENCE (SIZE (0..maxSC-MTCH-BR-r14)) OF SC-MTCH-Info-BR-r14 SC-MTCH-Info-BR-r14 ::= SEQUENCE { sc-mtch-CarrierFreq-r14 ARFCN-ValueEUTRA-r9, mbmsSessionInfo-r14 MBMSSessionInfo-r13, g-RNTI-r14 BIT STRING(SIZE(16)), sc-mtch-schedulingInfo-r14 SC-MTCH-SchedulingInfo-BR-r14 OPTIONAL, -- Need OP sc-mtch-neighbourCell-r14 BIT STRING (SIZE(maxNeighCell-SCPTM-r13)) OPTIONAL, -- Need OP mpdcch-Narrowband-SC-MTCH-r14 INTEGER (1.. maxAvailNarrowBands-r13), mpdcch-NumRepetition-SC-MTCH-r14 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128, r256}, mpdcch-StartSF-SC-MTCH-r14 CHOICE { fdd-r14 ENUMERATED {v1, v1dot5, v2, v2dot5, v4, v5, v8, v10}, tdd-r14 ENUMERATED {v1, v2, v4, v5, v8, v10, v20} }, mpdcch-PDSCH-HoppingConfig-SC-MTCH-r14 ENUMERATED {on, off}, mpdcch-PDSCH-CEmodeConfig-SC-MTCH-r14 ENUMERATED {ce-ModeA, ce-ModeB}, mpdcch-PDSCH-MaxBandwidth-SC-MTCH-r14 ENUMERATED {bw1dot4, bw5}, mpdcch-Offset-SC-MTCH-r14 ENUMERATED {zero, oneEighth, oneQuarter, threeEighth, oneHalf, fiveEighth, threeQuarter, sevenEighth}, p-a-r14 ENUMERATED { dB-6, dB-4dot77, dB-3, dB-1dot77, dB0, dB1, dB2, dB3} OPTIONAL,-- Need OR ... } SC-MTCH-SchedulingInfo-BR-r14::= SEQUENCE { onDurationTimerSCPTM-r14 ENUMERATED { psf300, psf400, psf500, psf600, psf800, psf1000, psf1200, psf1600}, drx-InactivityTimerSCPTM-r14 ENUMERATED { psf0, psf1, psf2, psf4, psf8, psf16, psf32, psf64, psf128, psf256, ps512, psf1024, psf2048, psf4096, psf8192, psf16384}, schedulingPeriodStartOffsetSCPTM-r14 CHOICE { sf10 INTEGER(0..9), sf20 INTEGER(0..19), sf32 INTEGER(0..31), sf40 INTEGER(0..39), sf64 INTEGER(0..63), sf80 INTEGER(0..79), sf128 INTEGER(0..127), sf160 INTEGER(0..159), sf256 INTEGER(0..255), sf320 INTEGER(0..319), sf512 INTEGER(0..511), sf640 INTEGER(0..639), sf1024 INTEGER(0..1023), sf2048 INTEGER(0..2047), sf4096 INTEGER(0..4095), sf8192 INTEGER(0..8191) }, ... } SCPTM-NeighbourCellList-r13 ::= SEQUENCE (SIZE (1..maxNeighCell-SCPTM-r13)) OF PCI-ARFCN-r13 PCI-ARFCN-r13 ::= SEQUENCE { physCellId-r13 PhysCellId, carrierFreq-r13 ARFCN-ValueEUTRA-r9 OPTIONAL } SL-AnchorCarrierFreqList-V2X-r14 ::= SEQUENCE (SIZE (1..maxFreqV2X-r14)) OF ARFCN-ValueEUTRA-r9 SL-CBR-CommonTxConfigList-r14 ::= SEQUENCE { cbr-RangeCommonConfigList-r14 SEQUENCE (SIZE (1..maxSL-V2X-CBRConfig-r14)) OF SL-CBR-Levels-Config-r14, sl-CBR-PSSCH-TxConfigList-r14 SEQUENCE (SIZE (1..maxSL-V2X-TxConfig-r14)) OF SL-CBR-PSSCH-TxConfig-r14 } SL-CBR-Levels-Config-r14 ::= SEQUENCE (SIZE (1..maxCBR-Level-r14)) OF SL-CBR-r14 SL-CBR-PSSCH-TxConfig-r14 ::= SEQUENCE { cr-Limit-r14 INTEGER(0..10000), tx-Parameters-r14 SL-PSSCH-TxParameters-r14 } SL-CBR-r14 ::= INTEGER(0..100) SL-CBR-PPPP-TxConfigList-r14 ::= SEQUENCE (SIZE (1..8)) OF SL-PPPP-TxConfigIndex-r14 SL-PPPP-TxConfigIndex-r14 ::= SEQUENCE { priorityThreshold-r14 SL-Priority-r13, defaultTxConfigIndex-r14 INTEGER(0..maxCBR-Level-1-r14), cbr-ConfigIndex-r14 INTEGER(0..maxSL-V2X-CBRConfig-1-r14), tx-ConfigIndexList-r14 SEQUENCE (SIZE (1..maxCBR-Level-r14)) OF Tx-ConfigIndex-r14 } Tx-ConfigIndex-r14 ::= INTEGER(0..maxSL-V2X-TxConfig-1-r14) SL-CommConfig-r12 ::= SEQUENCE { commTxResources-r12 CHOICE { release NULL, setup CHOICE { scheduled-r12 SEQUENCE { sl-RNTI-r12 C-RNTI, mac-MainConfig-r12 MAC-MainConfigSL-r12, sc-CommTxConfig-r12 SL-CommResourcePool-r12, mcs-r12 INTEGER (0..28) OPTIONAL -- Need OP }, ue-Selected-r12 SEQUENCE { -- Pool for normal usage commTxPoolNormalDedicated-r12 SEQUENCE { poolToReleaseList-r12 SL-TxPoolToReleaseList-r12 OPTIONAL, -- Need ON poolToAddModList-r12 SL-CommTxPoolToAddModList-r12 OPTIONAL -- Need ON } } } } OPTIONAL, -- Need ON ..., [[ commTxResources-v1310 CHOICE { release NULL, setup CHOICE { scheduled-v1310 SEQUENCE { logicalChGroupInfoList-r13 LogicalChGroupInfoList-r13, multipleTx-r13 BOOLEAN }, ue-Selected-v1310 SEQUENCE { commTxPoolNormalDedicatedExt-r13 SEQUENCE { poolToReleaseListExt-r13 SL-TxPoolToReleaseListExt-r13 OPTIONAL, -- Need ON poolToAddModListExt-r13 SL-CommTxPoolToAddModListExt-r13 OPTIONAL -- Need ON } } } } OPTIONAL, -- Need ON commTxAllowRelayDedicated-r13 BOOLEAN OPTIONAL -- Need ON ]] } LogicalChGroupInfoList-r13 ::= SEQUENCE (SIZE (1..maxLCG-r13)) OF SL-PriorityList-r13 SL-CommTxPoolToAddModList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-CommTxPoolToAddMod-r12 SL-CommTxPoolToAddModListExt-r13 ::= SEQUENCE (SIZE (1..maxSL-TxPool-v1310)) OF SL-CommTxPoolToAddModExt-r13 SL-CommTxPoolToAddMod-r12 ::= SEQUENCE { poolIdentity-r12 SL-TxPoolIdentity-r12, pool-r12 SL-CommResourcePool-r12 } SL-CommTxPoolToAddModExt-r13 ::= SEQUENCE { poolIdentity-v1310 SL-TxPoolIdentity-v1310, pool-r13 SL-CommResourcePool-r12 } MAC-MainConfigSL-r12 ::= SEQUENCE { periodic-BSR-TimerSL PeriodicBSR-Timer-r12 OPTIONAL, -- Need ON retx-BSR-TimerSL RetxBSR-Timer-r12 } SL-CommTxPoolList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-CommResourcePool-r12 SL-CommTxPoolListExt-r13 ::= SEQUENCE (SIZE (1..maxSL-TxPool-v1310)) OF SL-CommResourcePool-r12 SL-CommTxPoolListV2X-r14 ::= SEQUENCE (SIZE (1..maxSL-V2X-TxPool-r14)) OF SL-CommResourcePoolV2X-r14 SL-CommRxPoolList-r12 ::= SEQUENCE (SIZE (1..maxSL-RxPool-r12)) OF SL-CommResourcePool-r12 SL-CommRxPoolListV2X-r14 ::= SEQUENCE (SIZE (1..maxSL-V2X-RxPool-r14)) OF SL-CommResourcePoolV2X-r14 SL-CommResourcePool-r12 ::= SEQUENCE { sc-CP-Len-r12 SL-CP-Len-r12, sc-Period-r12 SL-PeriodComm-r12, sc-TF-ResourceConfig-r12 SL-TF-ResourceConfig-r12, data-CP-Len-r12 SL-CP-Len-r12, dataHoppingConfig-r12 SL-HoppingConfigComm-r12, ue-SelectedResourceConfig-r12 SEQUENCE { data-TF-ResourceConfig-r12 SL-TF-ResourceConfig-r12, trpt-Subset-r12 SL-TRPT-Subset-r12 OPTIONAL -- Need OP } OPTIONAL, -- Need OR rxParametersNCell-r12 SEQUENCE { tdd-Config-r12 TDD-Config OPTIONAL, -- Need OP syncConfigIndex-r12 INTEGER (0..15) } OPTIONAL, -- Need OR txParameters-r12 SEQUENCE { sc-TxParameters-r12 SL-TxParameters-r12, dataTxParameters-r12 SL-TxParameters-r12 } OPTIONAL, -- Cond Tx ..., [[ priorityList-r13 SL-PriorityList-r13 OPTIONAL -- Cond Tx ]] } SL-CommResourcePoolV2X-r14 ::= SEQUENCE { sl-OffsetIndicator-r14 SL-OffsetIndicator-r12 OPTIONAL, -- Need OR sl-Subframe-r14 SubframeBitmapSL-r14, adjacencyPSCCH-PSSCH-r14 BOOLEAN, sizeSubchannel-r14 ENUMERATED { n4, n5, n6, n8, n9, n10, n12, n15, n16, n18, n20, n25, n30, n48, n50, n72, n75, n96, n100, spare13, spare12, spare11, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}, numSubchannel-r14 ENUMERATED {n1, n3, n5, n8, n10, n15, n20, spare1}, startRB-Subchannel-r14 INTEGER (0..99), startRB-PSCCH-Pool-r14 INTEGER (0..99) OPTIONAL, -- Need OR rxParametersNCell-r14 SEQUENCE { tdd-Config-r14 TDD-Config OPTIONAL, -- Need OP syncConfigIndex-r14 INTEGER (0..15) } OPTIONAL, -- Need OR dataTxParameters-r14 SL-TxParameters-r12 OPTIONAL, -- Cond Tx zoneID-r14 INTEGER (0..7) OPTIONAL, -- Need OR threshS-RSSI-CBR-r14 INTEGER (0..45) OPTIONAL, -- Need OR poolReportId-r14 SL-V2X-TxPoolReportIdentity-r14 OPTIONAL, -- Need OR cbr-pssch-TxConfigList-r14 SL-CBR-PPPP-TxConfigList-r14 OPTIONAL, -- Need OR resourceSelectionConfigP2X-r14 SL-P2X-ResourceSelectionConfig-r14 OPTIONAL, -- Cond P2X syncAllowed-r14 SL-SyncAllowed-r14 OPTIONAL, -- Need OR restrictResourceReservationPeriod-r14 SL-RestrictResourceReservationPeriodList-r14 OPTIONAL, -- Need OR ... } SL-TRPT-Subset-r12 ::= BIT STRING (SIZE (3..5)) SL-V2X-TxPoolReportIdentity-r14::= INTEGER (1..maxSL-PoolToMeasure-r14) SL-CommTxPoolSensingConfig-r14 ::= SEQUENCE { pssch-TxConfigList-r14 SL-PSSCH-TxConfigList-r14, thresPSSCH-RSRP-List-r14 SL-ThresPSSCH-RSRP-List-r14, restrictResourceReservationPeriod-r14 SL-RestrictResourceReservationPeriodList-r14 OPTIONAL, -- Need OR probResourceKeep-r14 ENUMERATED {v0, v0dot2, v0dot4, v0dot6, v0dot8, spare3,spare2, spare1}, p2x-SensingConfig-r14 SEQUENCE { minNumCandidateSF-r14 INTEGER (1..13), gapCandidateSensing-r14 BIT STRING (SIZE (10)) } OPTIONAL, -- Need OR sl-ReselectAfter-r14 ENUMERATED {n1, n2, n3, n4, n5, n6, n7, n8, n9, spare7, spare6, spare5, spare4, spare3, spare2, spare1} OPTIONAL -- Need OR } SL-CP-Len-r12 ::= ENUMERATED {normal, extended} SL-DiscConfig-r12 ::= SEQUENCE { discTxResources-r12 CHOICE { release NULL, setup CHOICE { scheduled-r12 SEQUENCE { discTxConfig-r12 SL-DiscResourcePool-r12 OPTIONAL, -- Need ON discTF-IndexList-r12 SL-TF-IndexPairList-r12 OPTIONAL, -- Need ON discHoppingConfig-r12 SL-HoppingConfigDisc-r12 OPTIONAL -- Need ON }, ue-Selected-r12 SEQUENCE { discTxPoolDedicated-r12 SEQUENCE { poolToReleaseList-r12 SL-TxPoolToReleaseList-r12 OPTIONAL, -- Need ON poolToAddModList-r12 SL-DiscTxPoolToAddModList-r12 OPTIONAL -- Need ON } OPTIONAL -- Need ON } } } OPTIONAL, -- Need ON ..., [[ discTF-IndexList-v1260 CHOICE { release NULL, setup SEQUENCE { discTF-IndexList-r12b SL-TF-IndexPairList-r12b } } OPTIONAL -- Need ON ]], [[ discTxResourcesPS-r13 CHOICE { release NULL, setup CHOICE { scheduled-r13 SL-DiscTxConfigScheduled-r13, ue-Selected-r13 SEQUENCE { discTxPoolPS-Dedicated-r13 SL-DiscTxPoolDedicated-r13 } } } OPTIONAL, -- Need ON discTxInterFreqInfo-r13 CHOICE { release NULL, setup SEQUENCE { discTxCarrierFreq-r13 ARFCN-ValueEUTRA-r9 OPTIONAL, -- Need OR discTxRefCarrierDedicated-r13 SL-DiscTxRefCarrierDedicated-r13 OPTIONAL, -- Need OR discTxInfoInterFreqListAdd-r13 SL-DiscTxInfoInterFreqListAdd-r13 OPTIONAL -- Need ON } } OPTIONAL, -- Need ON gapRequestsAllowedDedicated-r13 BOOLEAN OPTIONAL, -- Need ON discRxGapConfig-r13 CHOICE { release NULL, setup SL-GapConfig-r13 } OPTIONAL, -- Need ON discTxGapConfig-r13 CHOICE { release NULL, setup SL-GapConfig-r13 } OPTIONAL, -- Need ON discSysInfoToReportConfig-r13 CHOICE { release NULL, setup SL-DiscSysInfoToReportFreqList-r13 } OPTIONAL -- Need ON ]] } SL-DiscSysInfoToReportFreqList-r13 ::= SEQUENCE (SIZE (1..maxFreq)) OF ARFCN-ValueEUTRA-r9 SL-DiscTxInfoInterFreqListAdd-r13 ::= SEQUENCE { discTxFreqToAddModList-r13 SEQUENCE (SIZE (1..maxFreq)) OF SL-DiscTxResourceInfoPerFreq-r13 OPTIONAL, -- Need ON discTxFreqToReleaseList-r13 SEQUENCE (SIZE (1..maxFreq)) OF ARFCN-ValueEUTRA-r9 OPTIONAL, -- Need ON ... } SL-DiscTxResourceInfoPerFreq-r13 ::= SEQUENCE { discTxCarrierFreq-r13 ARFCN-ValueEUTRA-r9, discTxResources-r13 SL-DiscTxResource-r13 OPTIONAL, -- Need OR discTxResourcesPS-r13 SL-DiscTxResource-r13 OPTIONAL, -- Need OR discTxRefCarrierDedicated-r13 SL-DiscTxRefCarrierDedicated-r13 OPTIONAL, -- Need OR discCellSelectionInfo-r13 CellSelectionInfoNFreq-r13 OPTIONAL, -- Need OR ... } SL-DiscTxResource-r13 ::= CHOICE { release NULL, setup CHOICE { scheduled-r13 SL-DiscTxConfigScheduled-r13, ue-Selected-r13 SL-DiscTxPoolDedicated-r13 } } SL-DiscTxPoolToAddModList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-DiscTxPoolToAddMod-r12 SL-DiscTxPoolToAddMod-r12 ::= SEQUENCE { poolIdentity-r12 SL-TxPoolIdentity-r12, pool-r12 SL-DiscResourcePool-r12 } SL-DiscTxConfigScheduled-r13 ::= SEQUENCE { discTxConfig-r13 SL-DiscResourcePool-r12 OPTIONAL, -- Need ON discTF-IndexList-r13 SL-TF-IndexPairList-r12b OPTIONAL, -- Need ON discHoppingConfig-r13 SL-HoppingConfigDisc-r12 OPTIONAL,-- Need ON ... } SL-DiscTxPoolDedicated-r13 ::= SEQUENCE { poolToReleaseList-r13 SL-TxPoolToReleaseList-r12 OPTIONAL, -- Need ON poolToAddModList-r13 SL-DiscTxPoolToAddModList-r12 OPTIONAL -- Need ON } SL-TF-IndexPairList-r12 ::= SEQUENCE (SIZE (1..maxSL-TF-IndexPair-r12)) OF SL-TF-IndexPair-r12 SL-TF-IndexPair-r12 ::= SEQUENCE { discSF-Index-r12 INTEGER (1.. 200) OPTIONAL, -- Need ON discPRB-Index-r12 INTEGER (1.. 50) OPTIONAL -- Need ON } SL-TF-IndexPairList-r12b ::= SEQUENCE (SIZE (1..maxSL-TF-IndexPair-r12)) OF SL-TF-IndexPair-r12b SL-TF-IndexPair-r12b ::= SEQUENCE { discSF-Index-r12b INTEGER (0..209) OPTIONAL, -- Need ON discPRB-Index-r12b INTEGER (0..49) OPTIONAL -- Need ON } SL-DiscTxRefCarrierDedicated-r13 ::= CHOICE { pCell NULL, sCell SCellIndex-r10 } SL-DiscTxPoolList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-DiscResourcePool-r12 SL-DiscRxPoolList-r12 ::= SEQUENCE (SIZE (1..maxSL-RxPool-r12)) OF SL-DiscResourcePool-r12 SL-DiscResourcePool-r12 ::= SEQUENCE { cp-Len-r12 SL-CP-Len-r12, discPeriod-r12 ENUMERATED {rf32, rf64, rf128, rf256, rf512, rf1024, rf16-v1310, spare}, numRetx-r12 INTEGER (0..3), numRepetition-r12 INTEGER (1..50), tf-ResourceConfig-r12 SL-TF-ResourceConfig-r12, txParameters-r12 SEQUENCE { txParametersGeneral-r12 SL-TxParameters-r12, ue-SelectedResourceConfig-r12 SEQUENCE { poolSelection-r12 CHOICE { rsrpBased-r12 SL-PoolSelectionConfig-r12, random-r12 NULL }, txProbability-r12 ENUMERATED {p25, p50, p75, p100} } OPTIONAL -- Need OR } OPTIONAL, -- Cond Tx rxParameters-r12 SEQUENCE { tdd-Config-r12 TDD-Config OPTIONAL, -- Need OR syncConfigIndex-r12 INTEGER (0..15) } OPTIONAL, -- Need OR ..., [[ discPeriod-v1310 CHOICE { release NULL, setup ENUMERATED {rf4, rf6, rf7, rf8, rf12, rf14, rf24, rf28} } OPTIONAL, -- Need ON rxParamsAddNeighFreq-r13 CHOICE { release NULL, setup SEQUENCE { physCellId-r13 PhysCellIdList-r13 } } OPTIONAL, -- Need ON txParamsAddNeighFreq-r13 CHOICE { release NULL, setup SEQUENCE { physCellId-r13 PhysCellIdList-r13, p-Max P-Max OPTIONAL, -- Need OP tdd-Config-r13 TDD-Config OPTIONAL, -- Cond TDD-OR tdd-Config-v1130 TDD-Config-v1130 OPTIONAL, -- Cond TDD-OR freqInfo SEQUENCE { ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL, -- Need OP ul-Bandwidth ENUMERATED {n6, n15, n25, n50, n75, n100} OPTIONAL, -- Need OP additionalSpectrumEmission AdditionalSpectrumEmission }, referenceSignalPower INTEGER (-60..50), syncConfigIndex-r13 INTEGER (0..15) OPTIONAL -- Need OR } } OPTIONAL -- Need ON ]], [[ txParamsAddNeighFreq-v1370 CHOICE { release NULL, setup SEQUENCE { freqInfo-v1370 SEQUENCE { additionalSpectrumEmission-v1370 AdditionalSpectrumEmission-v10l0 } } } OPTIONAL -- Need ON ]] } PhysCellIdList-r13 ::= SEQUENCE (SIZE (1.. maxSL-DiscCells-r13)) OF PhysCellId SL-PoolSelectionConfig-r12 ::= SEQUENCE { threshLow-r12 RSRP-RangeSL2-r12, threshHigh-r12 RSRP-RangeSL2-r12 } SL-DiscSysInfoReport-r13 ::= SEQUENCE { plmn-IdentityList-r13 PLMN-IdentityList OPTIONAL, cellIdentity-13 CellIdentity OPTIONAL, carrierFreqInfo-13 ARFCN-ValueEUTRA-r9 OPTIONAL, discRxResources-r13 SL-DiscRxPoolList-r12 OPTIONAL, discTxPoolCommon-r13 SL-DiscTxPoolList-r12 OPTIONAL, discTxPowerInfo-r13 SL-DiscTxPowerInfoList-r12 OPTIONAL, discSyncConfig-r13 SL-SyncConfigNFreq-r13 OPTIONAL, discCellSelectionInfo-r13 SEQUENCE { q-RxLevMin-r13 Q-RxLevMin, q-RxLevMinOffset-r13 INTEGER (1..8) OPTIONAL } OPTIONAL, cellReselectionInfo-r13 SEQUENCE { q-Hyst-r13 ENUMERATED { dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, dB12, dB14, dB16, dB18, dB20, dB22, dB24}, q-RxLevMin-r13 Q-RxLevMin, t-ReselectionEUTRA-r13 T-Reselection } OPTIONAL, tdd-Config-r13 TDD-Config OPTIONAL, freqInfo-r13 SEQUENCE { ul-CarrierFreq-r13 ARFCN-ValueEUTRA OPTIONAL, ul-Bandwidth-r13 ENUMERATED {n6, n15, n25, n50, n75, n100} OPTIONAL, additionalSpectrumEmission-r13 AdditionalSpectrumEmission OPTIONAL } OPTIONAL, p-Max-r13 P-Max OPTIONAL, referenceSignalPower-r13 INTEGER (-60..50) OPTIONAL, ..., [[ freqInfo-v1370 SEQUENCE { additionalSpectrumEmission-v1370 AdditionalSpectrumEmission-v10l0 } OPTIONAL ]] } SL-DiscTxPowerInfoList-r12 ::= SEQUENCE (SIZE (maxSL-DiscPowerClass-r12)) OF SL-DiscTxPowerInfo-r12 SL-DiscTxPowerInfo-r12 ::= SEQUENCE { discMaxTxPower-r12 P-Max, ... } SL-GapConfig-r13 ::= SEQUENCE { gapPatternList-r13 SL-GapPatternList-r13 } SL-GapPatternList-r13 ::= SEQUENCE (SIZE (1..maxSL-GP-r13)) OF SL-GapPattern-r13 SL-GapPattern-r13 ::= SEQUENCE { gapPeriod-r13 ENUMERATED {sf40, sf60, sf70, sf80, sf120, sf140, sf160, sf240, sf280, sf320, sf640, sf1280, sf2560, sf5120, sf10240}, gapOffset-r12 SL-OffsetIndicator-r12, gapSubframeBitmap-r13 BIT STRING (SIZE (1..10240)), ... } SL-GapRequest-r13 ::= SEQUENCE (SIZE (1..maxFreq)) OF SL-GapFreqInfo-r13 SL-GapFreqInfo-r13 ::= SEQUENCE { carrierFreq-r13 ARFCN-ValueEUTRA-r9 OPTIONAL, gapPatternList-r13 SL-GapPatternList-r13 } SL-HoppingConfigComm-r12 ::= SEQUENCE { hoppingParameter-r12 INTEGER (0..504), numSubbands-r12 ENUMERATED {ns1, ns2, ns4}, rb-Offset-r12 INTEGER (0..110) } SL-HoppingConfigDisc-r12 ::= SEQUENCE { a-r12 INTEGER (1..200), b-r12 INTEGER (1..10), c-r12 ENUMERATED {n1, n5} } SL-InterFreqInfoListV2X-r14 ::= SEQUENCE (SIZE (0..maxFreqV2X-1-r14)) OF SL-InterFreqInfoV2X-r14 SL-InterFreqInfoV2X-r14 ::= SEQUENCE { plmn-IdentityList-r14 PLMN-IdentityList OPTIONAL, -- Need OP v2x-CommCarrierFreq-r14 ARFCN-ValueEUTRA-r9, sl-MaxTxPower-r14 P-Max OPTIONAL, -- Need OR sl-Bandwidth-r14 ENUMERATED {n6, n15, n25, n50, n75, n100} OPTIONAL, -- Need OR v2x-SchedulingPool-r14 SL-CommResourcePoolV2X-r14 OPTIONAL, -- Need OR v2x-UE-ConfigList-r14 SL-V2X-UE-ConfigList-r14 OPTIONAL, -- Need OR ..., [[ additionalSpectrumEmissionV2X-r14 CHOICE { additionalSpectrumEmission-r14 AdditionalSpectrumEmission, additionalSpectrumEmission-v1440 AdditionalSpectrumEmission-v10l0 } OPTIONAL -- Need ON ]] } SL-V2X-UE-ConfigList-r14 ::= SEQUENCE (SIZE (1.. maxCellIntra)) OF SL-V2X-InterFreqUE-Config-r14 SL-V2X-InterFreqUE-Config-r14 ::= SEQUENCE { physCellIdList-r14 PhysCellIdList-r13 OPTIONAL, -- Need OR typeTxSync-r14 SL-TypeTxSync-r14 OPTIONAL, -- Need OR v2x-SyncConfig-r14 SL-SyncConfigListNFreqV2X-r14 OPTIONAL, -- Need OR v2x-CommRxPool-r14 SL-CommRxPoolListV2X-r14 OPTIONAL, -- Need OR v2x-CommTxPoolNormal-r14 SL-CommTxPoolListV2X-r14 OPTIONAL, -- Need OR p2x-CommTxPoolNormal-r14 SL-CommTxPoolListV2X-r14 OPTIONAL, -- Need OR v2x-CommTxPoolExceptional-r14 SL-CommResourcePoolV2X-r14 OPTIONAL, -- Need OR v2x-ResourceSelectionConfig-r14 SL-CommTxPoolSensingConfig-r14 OPTIONAL, -- Need OR zoneConfig-r14 SL-ZoneConfig-r14 OPTIONAL, -- Need OR offsetDFN-r14 INTEGER (0..1000) OPTIONAL, -- Need OR ... } SL-OffsetIndicator-r12 ::= CHOICE { small-r12 INTEGER (0..319), large-r12 INTEGER (0..10239) } SL-OffsetIndicatorSync-r12 ::= INTEGER (0..39) SL-OffsetIndicatorSync-v1430 ::= INTEGER (40..159) SL-OffsetIndicatorSync-r14 ::= INTEGER (0..159) SL-P2X-ResourceSelectionConfig-r14 ::= SEQUENCE { partialSensing-r14 ENUMERATED {true} OPTIONAL, -- Need OR randomSelection-r14 ENUMERATED {true} OPTIONAL -- Need OR } SL-PeriodComm-r12 ::= ENUMERATED {sf40, sf60, sf70, sf80, sf120, sf140, sf160, sf240, sf280, sf320, spare6, spare5, spare4, spare3, spare2, spare} SL-PriorityList-r13 ::= SEQUENCE (SIZE (1..maxSL-Prio-r13)) OF SL-Priority-r13 SL-Priority-r13 ::= INTEGER (1..8) SL-PSSCH-TxConfigList-r14 ::= SEQUENCE (SIZE (1..maxPSSCH-TxConfig-r14)) OF SL-PSSCH-TxConfig-r14 SL-PSSCH-TxConfig-r14 ::= SEQUENCE { typeTxSync-r14 SL-TypeTxSync-r14 OPTIONAL, -- Need OR thresUE-Speed-r14 ENUMERATED {kmph60, kmph80, kmph100, kmph120, kmph140, kmph160, kmph180, kmph200}, parametersAboveThres-r14 SL-PSSCH-TxParameters-r14, parametersBelowThres-r14 SL-PSSCH-TxParameters-r14, ... } SL-PSSCH-TxParameters-r14 ::= SEQUENCE { minMCS-PSSCH-r14 INTEGER (0..31), maxMCS-PSSCH-r14 INTEGER (0..31), minSubChannel-NumberPSSCH-r14 INTEGER (1..20), maxSubchannel-NumberPSSCH-r14 INTEGER (1..20), allowedRetxNumberPSSCH-r14 ENUMERATED {n0, n1, both, spare1}, maxTxPower-r14 SL-TxPower-r14 OPTIONAL -- Cond CBR } SL-RestrictResourceReservationPeriodList-r14 ::= SEQUENCE (SIZE (1..maxReservationPeriod-r14)) OF SL-RestrictResourceReservationPeriod-r14 SL-RestrictResourceReservationPeriod-r14 ::= ENUMERATED {v0dot2, v0dot5, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, spare4,spare3, spare2, spare1} SLSSID-r12 ::= INTEGER (0..167) SL-SyncAllowed-r14 ::= SEQUENCE { gnss-Sync-r14 ENUMERATED {true} OPTIONAL, -- Need OR enb-Sync-r14 ENUMERATED {true} OPTIONAL, -- Need OR ue-Sync-r14 ENUMERATED {true} OPTIONAL -- Need OR } SL-SyncConfigList-r12 ::= SEQUENCE (SIZE (1..maxSL-SyncConfig-r12)) OF SL-SyncConfig-r12 SL-SyncConfigListV2X-r14 ::= SEQUENCE (SIZE (1.. maxSL-V2X-SyncConfig-r14)) OF SL-SyncConfig-r12 SL-SyncConfig-r12 ::= SEQUENCE { syncCP-Len-r12 SL-CP-Len-r12, syncOffsetIndicator-r12 SL-OffsetIndicatorSync-r12, slssid-r12 SLSSID-r12, txParameters-r12 SEQUENCE { syncTxParameters-r12 SL-TxParameters-r12, syncTxThreshIC-r12 RSRP-RangeSL-r12, syncInfoReserved-r12 BIT STRING (SIZE (19)) OPTIONAL -- Need OR } OPTIONAL, -- Need OR rxParamsNCell-r12 SEQUENCE { physCellId-r12 PhysCellId, discSyncWindow-r12 ENUMERATED {w1, w2} } OPTIONAL, -- Need OR ..., [[ syncTxPeriodic-r13 ENUMERATED {true} OPTIONAL -- Need OR ]], [[ syncOffsetIndicator-v1430 SL-OffsetIndicatorSync-v1430 OPTIONAL, -- Need OR gnss-Sync-r14 ENUMERATED {true} OPTIONAL -- Need OR ]] } SL-SyncConfigListNFreq-r13 ::= SEQUENCE (SIZE (1..maxSL-SyncConfig-r12)) OF SL-SyncConfigNFreq-r13 SL-SyncConfigListNFreqV2X-r14 ::= SEQUENCE (SIZE (1..maxSL-V2X-SyncConfig-r14)) OF SL-SyncConfigNFreq-r13 SL-SyncConfigNFreq-r13 ::= SEQUENCE { asyncParameters-r13 SEQUENCE { syncCP-Len-r13 SL-CP-Len-r12, syncOffsetIndicator-r13 SL-OffsetIndicatorSync-r12, slssid-r13 SLSSID-r12 } OPTIONAL, -- Need OR txParameters-r13 SEQUENCE { syncTxParameters-r13 SL-TxParameters-r12, syncTxThreshIC-r13 RSRP-RangeSL-r12, syncInfoReserved-r13 BIT STRING (SIZE (19)) OPTIONAL, -- Need OR syncTxPeriodic-r13 ENUMERATED {true} OPTIONAL -- Need OR } OPTIONAL, -- Need OR rxParameters-r13 SEQUENCE { discSyncWindow-r13 ENUMERATED {w1, w2} } OPTIONAL, -- Need OR ..., [[ syncOffsetIndicator-v1430 SL-OffsetIndicatorSync-v1430 OPTIONAL, -- Need OR gnss-Sync-r14 ENUMERATED {true} OPTIONAL -- Need OR ]] } SL-TF-ResourceConfig-r12 ::= SEQUENCE { prb-Num-r12 INTEGER (1..100), prb-Start-r12 INTEGER (0..99), prb-End-r12 INTEGER (0..99), offsetIndicator-r12 SL-OffsetIndicator-r12, subframeBitmap-r12 SubframeBitmapSL-r12 } SubframeBitmapSL-r12 ::= CHOICE { bs4-r12 BIT STRING (SIZE (4)), bs8-r12 BIT STRING (SIZE (8)), bs12-r12 BIT STRING (SIZE (12)), bs16-r12 BIT STRING (SIZE (16)), bs30-r12 BIT STRING (SIZE (30)), bs40-r12 BIT STRING (SIZE (40)), bs42-r12 BIT STRING (SIZE (42)) } SubframeBitmapSL-r14 ::= CHOICE { bs10-r14 BIT STRING (SIZE (10)), bs16-r14 BIT STRING (SIZE (16)), bs20-r14 BIT STRING (SIZE (20)), bs30-r14 BIT STRING (SIZE (30)), bs40-r14 BIT STRING (SIZE (40)), bs50-r14 BIT STRING (SIZE (50)), bs60-r14 BIT STRING (SIZE (60)), bs100-r14 BIT STRING (SIZE (100)) } SL-TxPower-r14 ::= CHOICE { minusinfinity-r14 NULL, txPower-r14 INTEGER (-41..31) } SL-TypeTxSync-r14 ::= ENUMERATED {gnss, enb, ue} SL-ThresPSSCH-RSRP-List-r14 ::= SEQUENCE (SIZE (64)) OF SL-ThresPSSCH-RSRP-r14 SL-ThresPSSCH-RSRP-r14 ::= INTEGER (0..66) SL-TxParameters-r12 ::= SEQUENCE { alpha-r12 Alpha-r12, p0-r12 P0-SL-r12 } P0-SL-r12 ::= INTEGER (-126..31) SL-TxPoolIdentity-r12 ::= INTEGER (1.. maxSL-TxPool-r12) SL-TxPoolIdentity-v1310 ::= INTEGER (maxSL-TxPool-r12Plus1-r13.. maxSL-TxPool-r13) SL-V2X-TxPoolIdentity-r14 ::= INTEGER (1.. maxSL-V2X-TxPool-r14) SL-TxPoolToReleaseList-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-TxPoolIdentity-r12 SL-TxPoolToReleaseListExt-r13 ::= SEQUENCE (SIZE (1..maxSL-TxPool-v1310)) OF SL-TxPoolIdentity-v1310 SL-V2X-ConfigDedicated-r14 ::= SEQUENCE { commTxResources-r14 CHOICE { release NULL, setup CHOICE { scheduled-r14 SEQUENCE { sl-V-RNTI-r14 C-RNTI, mac-MainConfig-r14 MAC-MainConfigSL-r12, v2x-SchedulingPool-r14 SL-CommResourcePoolV2X-r14 OPTIONAL, -- Need ON mcs-r14 INTEGER (0..31) OPTIONAL, -- Need OR logicalChGroupInfoList-r14 LogicalChGroupInfoList-r13 }, ue-Selected-r14 SEQUENCE { -- Pool for normal usage v2x-CommTxPoolNormalDedicated-r14 SEQUENCE { poolToReleaseList-r14 SL-TxPoolToReleaseListV2X-r14 OPTIONAL, -- Need ON poolToAddModList-r14 SL-TxPoolToAddModListV2X-r14 OPTIONAL, -- Need ON v2x-CommTxPoolSensingConfig-r14 SL-CommTxPoolSensingConfig-r14 OPTIONAL -- Need ON } } } } OPTIONAL, -- Need ON v2x-InterFreqInfoList-r14 SL-InterFreqInfoListV2X-r14 OPTIONAL, -- Need ON thresSL-TxPrioritization-r14 SL-Priority-r13 OPTIONAL, -- Need OR typeTxSync-r14 SL-TypeTxSync-r14 OPTIONAL, -- Need OR cbr-DedicatedTxConfigList-r14 SL-CBR-CommonTxConfigList-r14 OPTIONAL, -- Need OR ... } SL-TxPoolToAddModListV2X-r14 ::= SEQUENCE (SIZE (1.. maxSL-V2X-TxPool-r14)) OF SL-TxPoolToAddMod-r14 SL-TxPoolToAddMod-r14 ::= SEQUENCE { poolIdentity-r14 SL-V2X-TxPoolIdentity-r14, pool-r14 SL-CommResourcePoolV2X-r14 } SL-TxPoolToReleaseListV2X-r14 ::= SEQUENCE (SIZE (1.. maxSL-V2X-TxPool-r14)) OF SL-V2X-TxPoolIdentity-r14 SL-ZoneConfig-r14 ::= SEQUENCE { zoneLength-r14 ENUMERATED { m5, m10, m20, m50, m100, m200, m500, spare1}, zoneWidth-r14 ENUMERATED { m5, m10, m20, m50, m100, m200, m500, spare1}, zoneIdLongiMod-r14 INTEGER (1..4), zoneIdLatiMod-r14 INTEGER (1..4) } maxACDC-Cat-r13 INTEGER ::= 16 -- Maximum number of ACDC categories (per PLMN) maxAvailNarrowBands-r13 INTEGER ::= 16 -- Maximum number of narrowbands maxBandComb-r10 INTEGER ::= 128 -- Maximum number of band combinations. maxBandComb-r11 INTEGER ::= 256 -- Maximum number of additional band combinations. maxBandComb-r13 INTEGER ::= 384 -- Maximum number of band combinations in Rel-13 maxBands INTEGER ::= 64 -- Maximum number of bands listed in EUTRA UE caps maxBandwidthClass-r10 INTEGER ::= 16 -- Maximum number of supported CA BW classes per band maxBandwidthCombSet-r10 INTEGER ::= 32 -- Maximum number of bandwidth combination sets per -- supported band combination maxCBR-Level-r14 INTEGER ::= 16 -- Maximum number of CBR levels maxCBR-Level-1-r14 INTEGER ::= 15 maxCBR-Report-r14 INTEGER ::= 72 -- Maximum number of CBR results in a report maxCDMA-BandClass INTEGER ::= 32 -- Maximum value of the CDMA band classes maxCE-Level-r13 INTEGER ::= 4 -- Maximum number of CE levels maxCellBlack INTEGER ::= 16 -- Maximum number of blacklisted physical cell identity -- ranges listed in SIB type 4 and 5 maxCellHistory-r12 INTEGER ::= 16 -- Maximum number of visited EUTRA cells reported maxCellInfoGERAN-r9 INTEGER ::= 32 -- Maximum number of GERAN cells for which system in- -- formation can be provided as redirection assistance maxCellInfoUTRA-r9 INTEGER ::= 16 -- Maximum number of UTRA cells for which system -- information can be provided as redirection -- assistance maxCombIDC-r11 INTEGER ::= 128 -- Maximum number of reported UL CA combinations maxCSI-IM-r11 INTEGER ::= 3 -- Maximum number of CSI-IM configurations -- (per carrier frequency) maxCSI-IM-r12 INTEGER ::= 4 -- Maximum number of CSI-IM configurations -- (per carrier frequency) minCSI-IM-r13 INTEGER ::= 5 -- Minimum number of CSI IM configurations from which -- REL-13 extension is used maxCSI-IM-r13 INTEGER ::= 24 -- Maximum number of CSI-IM configurations -- (per carrier frequency) maxCSI-IM-v1310 INTEGER ::= 20 -- Maximum number of additional CSI-IM configurations -- (per carrier frequency) maxCSI-Proc-r11 INTEGER ::= 4 -- Maximum number of CSI processes (per carrier -- frequency) maxCSI-RS-NZP-r11 INTEGER ::= 3 -- Maximum number of CSI RS resource -- configurations using non-zero Tx power -- (per carrier frequency) minCSI-RS-NZP-r13 INTEGER ::= 4 -- Minimum number of CSI RS resource from which -- REL-13 extension is used maxCSI-RS-NZP-r13 INTEGER ::= 24 -- Maximum number of CSI RS resource -- configurations using non-zero Tx power -- (per carrier frequency) maxCSI-RS-NZP-v1310 INTEGER ::= 21 -- Maximum number of additional CSI RS resource -- configurations using non-zero Tx power -- (per carrier frequency) maxCSI-RS-ZP-r11 INTEGER ::= 4 -- Maximum number of CSI RS resource -- configurations using zero Tx power(per carrier -- frequency) maxCQI-ProcExt-r11 INTEGER ::= 3 -- Maximum number of additional periodic CQI -- configurations (per carrier frequency) maxFreqUTRA-TDD-r10 INTEGER ::= 6 -- Maximum number of UTRA TDD carrier frequencies for -- which system information can be provided as -- redirection assistance maxCellInter INTEGER ::= 16 -- Maximum number of neighbouring inter-frequency -- cells listed in SIB type 5 maxCellIntra INTEGER ::= 16 -- Maximum number of neighbouring intra-frequency -- cells listed in SIB type 4 maxCellListGERAN INTEGER ::= 3 -- Maximum number of lists of GERAN cells maxCellMeas INTEGER ::= 32 -- Maximum number of entries in each of the -- cell lists in a measurement object maxCellReport INTEGER ::= 8 -- Maximum number of reported cells/CSI-RS resources maxConfigSPS-r14 INTEGER ::= 8 -- Maximum number of simultaneous SPS configurations maxCSI-RS-Meas-r12 INTEGER ::= 96 -- Maximum number of entries in the CSI-RS list -- in a measurement object maxDRB INTEGER ::= 11 -- Maximum number of Data Radio Bearers maxDS-Duration-r12 INTEGER ::= 5 -- Maximum number of subframes in a discovery signals -- occasion maxDS-ZTP-CSI-RS-r12 INTEGER ::= 5 -- Maximum number of zero transmission power CSI-RS for -- a serving cell concerning discovery signals maxEARFCN INTEGER ::= 65535 -- Maximum value of EUTRA carrier frequency maxEARFCN-Plus1 INTEGER ::= 65536 -- Lowest value extended EARFCN range maxEARFCN2 INTEGER ::= 262143 -- Highest value extended EARFCN range maxEPDCCH-Set-r11 INTEGER ::= 2 -- Maximum number of EPDCCH sets maxFBI INTEGER ::= 64 -- Maximum value of fequency band indicator maxFBI-Plus1 INTEGER ::= 65 -- Lowest value extended FBI range maxFBI2 INTEGER ::= 256 -- Highest value extended FBI range maxFreq INTEGER ::= 8 -- Maximum number of carrier frequencies maxFreqIDC-r11 INTEGER ::= 32 -- Maximum number of carrier frequencies that are -- affected by the IDC problems maxFreqMBMS-r11 INTEGER ::= 5 -- Maximum number of carrier frequencies for which an -- MBMS capable UE may indicate an interest maxFreqV2X-r14 INTEGER ::= 8 -- Maximum number of carrier frequencies for which V2X -- sidelink communication can be configured maxFreqV2X-1-r14 INTEGER ::= 7 -- Highest index of frequencies maxGERAN-SI INTEGER ::= 10 -- Maximum number of GERAN SI blocks that can be -- provided as part of NACC information maxGNFG INTEGER ::= 16 -- Maximum number of GERAN neighbour freq groups maxLCG-r13 INTEGER ::= 4 -- Maximum number of logical channel groups maxLogMeasReport-r10 INTEGER ::= 520 -- Maximum number of logged measurement entries -- that can be reported by the UE in one message maxMBSFN-Allocations INTEGER ::= 8 -- Maximum number of MBSFN frame allocations with -- different offset maxMBSFN-Area INTEGER ::= 8 maxMBSFN-Area-1 INTEGER ::= 7 maxMBMS-ServiceListPerUE-r13 INTEGER ::= 15 -- Maximum number of services which the UE can -- include in the MBMS interest indication maxMeasId INTEGER ::= 32 maxMeasId-Plus1 INTEGER ::= 33 maxMeasId-r12 INTEGER ::= 64 maxMultiBands INTEGER ::= 8 -- Maximum number of additional frequency bands -- that a cell belongs to maxNS-Pmax-r10 INTEGER ::= 8 -- Maximum number of NS and P-Max values per band maxNAICS-Entries-r12 INTEGER ::= 8 -- Maximum number of supported NAICS combination(s) maxNeighCell-r12 INTEGER ::= 8 -- Maximum number of neighbouring cells in NAICS -- configuration (per carrier frequency) maxNeighCell-SCPTM-r13 INTEGER ::= 8 -- Maximum number of SCPTM neighbour cells maxObjectId INTEGER ::= 32 maxObjectId-Plus1-r13 INTEGER ::= 33 maxObjectId-r13 INTEGER ::= 64 maxP-a-PerNeighCell-r12 INTEGER ::= 3 -- Maximum number of power offsets for a neighbour cell -- in NAICS configuration maxPageRec INTEGER ::= 16 -- maxPhysCellIdRange-r9 INTEGER ::= 4 -- Maximum number of physical cell identity ranges maxPLMN-r11 INTEGER ::= 6 -- Maximum number of PLMNs maxPLMN-1-r14 INTEGER ::= 5 -- Maximum number of PLMNs minus one maxPNOffset INTEGER ::= 511 -- Maximum number of CDMA2000 PNOffsets maxPMCH-PerMBSFN INTEGER ::= 15 maxPSSCH-TxConfig-r14 INTEGER ::= 16 -- Maximum number of PSSCH TX configurations maxQCI-r13 INTEGER ::= 6 -- Maximum number of QCIs maxRAT-Capabilities INTEGER ::= 8 -- Maximum number of interworking RATs (incl EUTRA) maxRE-MapQCL-r11 INTEGER ::= 4 -- Maximum number of PDSCH RE Mapping configurations -- (per carrier frequency) maxReportConfigId INTEGER ::= 32 maxReservationPeriod-r14 INTEGER ::= 16 -- Maximum number of resource reservation periodicities -- for sidelink V2X communication maxRSTD-Freq-r10 INTEGER ::= 3 -- Maximum number of frequency layers for RSTD -- measurement maxSAI-MBMS-r11 INTEGER ::= 64 -- Maximum number of MBMS service area identities -- broadcast per carrier frequency maxSCell-r10 INTEGER ::= 4 -- Maximum number of SCells maxSCell-r13 INTEGER ::= 31 -- Highest value of extended number range of SCells maxSC-MTCH-r13 INTEGER ::= 1023 -- Maximum number of SC-MTCHs in one cell maxSC-MTCH-BR-r14 INTEGER ::= 128 -- Maximum number of SC-MTCHs in one cell for feMTC maxSL-CommRxPoolNFreq-r13 INTEGER ::= 32 -- Maximum number of individual sidelink communication -- Rx resource pools on neighbouring freq maxSL-CommRxPoolPreconf-v1310 INTEGER ::= 12 -- Maximum number of additional preconfigured -- sidelink communication Rx resource pool entries maxSL-TxPool-r12Plus1-r13 INTEGER ::= 5 -- First additional individual sidelink -- Tx resource pool maxSL-TxPool-v1310 INTEGER ::= 4 -- Maximum number of additional sidelink -- Tx resource pool entries maxSL-TxPool-r13 INTEGER ::= 8 -- Maximum number of individual sidelink -- Tx resource pools maxSL-CommTxPoolPreconf-v1310 INTEGER ::= 7 -- Maximum number of additional preconfigured -- sidelink Tx resource pool entries maxSL-Dest-r12 INTEGER ::= 16 -- Maximum number of sidelink destinations maxSL-DiscCells-r13 INTEGER ::= 16 -- Maximum number of cells with similar sidelink -- configurations maxSL-DiscPowerClass-r12 INTEGER ::= 3 -- Maximum number of sidelink power classes maxSL-DiscRxPoolPreconf-r13 INTEGER ::= 16 -- Maximum number of preconfigured sidelink -- discovery Rx resource pool entries maxSL-DiscSysInfoReportFreq-r13 INTEGER ::= 8 -- Maximum number of frequencies to include in a -- SidelinkUEInformation for SI reporting maxSL-DiscTxPoolPreconf-r13 INTEGER ::= 4 -- Maximum number of preconfigured sidelink -- discovery Tx resource pool entries maxSL-GP-r13 INTEGER ::= 8 -- Maximum number of gap patterns that can be requested -- for a frequency or assigned maxSL-PoolToMeasure-r14 INTEGER ::= 72 -- Maximum number of TX resource pools for CBR -- measurement and report maxSL-Prio-r13 INTEGER ::= 8 -- Maximum number of entries in sidelink priority list maxSL-RxPool-r12 INTEGER ::= 16 -- Maximum number of individual sidelink Rx resource pools maxSL-SyncConfig-r12 INTEGER ::= 16 -- Maximum number of sidelink Sync configurations maxSL-TF-IndexPair-r12 INTEGER ::= 64 -- Maximum number of sidelink Time Freq resource index -- pairs maxSL-TxPool-r12 INTEGER ::= 4 -- Maximum number of individual sidelink Tx resource pools maxSL-V2X-RxPool-r14 INTEGER ::= 16 -- Maximum number of RX resource pools for -- V2X sidelink communication maxSL-V2X-RxPoolPreconf-r14 INTEGER ::= 16 -- Maximum number of RX resource pools for -- V2X sidelink communication maxSL-V2X-TxPool-r14 INTEGER ::= 8 -- Maximum number of TX resource pools for -- V2X sidelink communication maxSL-V2X-TxPoolPreconf-r14 INTEGER ::= 8 -- Maximum number of TX resource pools for -- V2X sidelink communication maxSL-V2X-SyncConfig-r14 INTEGER ::= 16 -- Maximum number of sidelink Sync configurations -- for V2X sidelink communication maxSL-V2X-CBRConfig-r14 INTEGER ::= 4 -- Maximum number of CBR range configurations -- for V2X sidelink communication congestion -- control maxSL-V2X-CBRConfig-1-r14 INTEGER ::= 3 maxSL-V2X-TxConfig-r14 INTEGER ::= 64 -- Maximum number of TX parameter configurations -- for V2X sidelink communication congestion -- control maxSL-V2X-TxConfig-1-r14 INTEGER ::= 63 maxSL-V2X-CBRConfig2-r14 INTEGER ::= 8 -- Maximum number of CBR range configurations in -- pre-configuration for V2X sidelink -- communication congestion control maxSL-V2X-CBRConfig2-1-r14 INTEGER ::= 7 maxSL-V2X-TxConfig2-r14 INTEGER ::= 128 -- Maximum number of TX parameter -- configurations in pre-configuration for V2X -- sidelink communication congestion control maxSL-V2X-TxConfig2-1-r14 INTEGER ::= 127 maxSTAG-r11 INTEGER ::= 3 -- Maximum number of STAGs maxServCell-r10 INTEGER ::= 5 -- Maximum number of Serving cells maxServCell-r13 INTEGER ::= 32 -- Highest value of extended number range of Serving cells maxServiceCount INTEGER ::= 16 -- Maximum number of MBMS services that can be included -- in an MBMS counting request and response maxServiceCount-1 INTEGER ::= 15 maxSessionPerPMCH INTEGER ::= 29 maxSessionPerPMCH-1 INTEGER ::= 28 maxSIB INTEGER ::= 32 -- Maximum number of SIBs maxSIB-1 INTEGER ::= 31 maxSI-Message INTEGER ::= 32 -- Maximum number of SI messages maxSimultaneousBands-r10 INTEGER ::= 64 -- Maximum number of simultaneously aggregated bands maxSubframePatternIDC-r11 INTEGER ::= 8 -- Maximum number of subframe reservation patterns -- that the UE can simultaneously recommend to the -- E-UTRAN for use. maxTrafficPattern-r14 INTEGER ::= 8 -- Maximum number of periodical traffic patterns -- that the UE can simultaneously report to the -- E-UTRAN. maxUTRA-FDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA FDD carrier frequencies maxUTRA-TDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA TDD carrier frequencies maxWLAN-Id-r12 INTEGER ::= 16 -- Maximum number of WLAN identifiers maxWLAN-Bands-r13 INTEGER ::= 8 -- Maximum number of WLAN bands maxWLAN-Id-r13 INTEGER ::= 32 -- Maximum number of WLAN identifiers maxWLAN-Channels-r13 INTEGER ::= 16 -- maximum number of WLAN channels used in -- WLAN-CarrierInfo maxWLAN-CarrierInfo-r13 INTEGER ::= 8 -- Maximum number of WLAN Carrier Information maxWLAN-Id-Report-r14 INTEGER ::= 32 -- Maximum number of WLAN IDs to report END PC5-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS TDD-ConfigSL-r12 FROM EUTRA-RRC-Definitions; SBCCH-SL-BCH-Message ::= SEQUENCE { message SBCCH-SL-BCH-MessageType } SBCCH-SL-BCH-MessageType ::= MasterInformationBlock-SL SBCCH-SL-BCH-Message-V2X-r14 ::= SEQUENCE { message SBCCH-SL-BCH-MessageType-V2X-r14 } SBCCH-SL-BCH-MessageType-V2X-r14 ::= MasterInformationBlock-SL-V2X-r14 MasterInformationBlock-SL ::= SEQUENCE { sl-Bandwidth-r12 ENUMERATED { n6, n15, n25, n50, n75, n100}, tdd-ConfigSL-r12 TDD-ConfigSL-r12, directFrameNumber-r12 BIT STRING (SIZE (10)), directSubframeNumber-r12 INTEGER (0..9), inCoverage-r12 BOOLEAN, reserved-r12 BIT STRING (SIZE (19)) } MasterInformationBlock-SL-V2X-r14 ::= SEQUENCE { sl-Bandwidth-r14 ENUMERATED { n6, n15, n25, n50, n75, n100}, tdd-ConfigSL-r14 TDD-ConfigSL-r12, directFrameNumber-r14 BIT STRING (SIZE (10)), directSubframeNumber-r14 INTEGER (0..9), inCoverage-r14 BOOLEAN, reserved-r14 BIT STRING (SIZE (27)) } END NBIOT-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS RRCConnectionReestablishmentReject, SecurityModeCommand, SecurityModeComplete, SecurityModeFailure, AdditionalSpectrumEmission, ARFCN-ValueEUTRA-r9, CellIdentity, DedicatedInfoNAS, DRB-Identity, InitialUE-Identity, IntraFreqBlackCellList, IntraFreqNeighCellList, maxBands, maxCellBlack, maxCellInter, maxFBI2, maxFreq, maxMultiBands, maxPageRec, maxPLMN-r11, maxSAI-MBMS-r11, maxSIB, maxSIB-1, MBMS-SAI-r11, MBMS-SAI-List-r11, MBMSSessionInfo-r13, NextHopChainingCount, PagingUE-Identity, PLMN-Identity, P-Max, PowerRampingParameters, PreambleTransMax, PhysCellId, Q-OffsetRange, Q-QualMin-r9, Q-RxLevMin, ReestabUE-Identity, RegisteredMME, ReselectionThreshold, ResumeIdentity-r13, RRC-TransactionIdentifier, RSRP-Range, ShortMAC-I, S-TMSI, SystemInformationBlockType16-r11, SystemInfoValueTagSI-r13, T-Reordering, TimeAlignmentTimer, TMGI-r9, TrackingAreaCode, DataInactivityTimer-r14 FROM EUTRA-RRC-Definitions; BCCH-BCH-Message-NB ::= SEQUENCE { message BCCH-BCH-MessageType-NB } BCCH-BCH-MessageType-NB::= MasterInformationBlock-NB BCCH-DL-SCH-Message-NB ::= SEQUENCE { message BCCH-DL-SCH-MessageType-NB } BCCH-DL-SCH-MessageType-NB ::= CHOICE { c1 CHOICE { systemInformation-r13 SystemInformation-NB, systemInformationBlockType1-r13 SystemInformationBlockType1-NB }, messageClassExtension SEQUENCE {} } PCCH-Message-NB ::= SEQUENCE { message PCCH-MessageType-NB } PCCH-MessageType-NB ::= CHOICE { c1 CHOICE { paging-r13 Paging-NB }, messageClassExtension SEQUENCE {} } DL-CCCH-Message-NB ::= SEQUENCE { message DL-CCCH-MessageType-NB } DL-CCCH-MessageType-NB ::= CHOICE { c1 CHOICE { rrcConnectionReestablishment-r13 RRCConnectionReestablishment-NB, rrcConnectionReestablishmentReject-r13 RRCConnectionReestablishmentReject, rrcConnectionReject-r13 RRCConnectionReject-NB, rrcConnectionSetup-r13 RRCConnectionSetup-NB, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, messageClassExtension SEQUENCE {} } DL-DCCH-Message-NB ::= SEQUENCE { message DL-DCCH-MessageType-NB } DL-DCCH-MessageType-NB ::= CHOICE { c1 CHOICE { dlInformationTransfer-r13 DLInformationTransfer-NB, rrcConnectionReconfiguration-r13 RRCConnectionReconfiguration-NB, rrcConnectionRelease-r13 RRCConnectionRelease-NB, securityModeCommand-r13 SecurityModeCommand, ueCapabilityEnquiry-r13 UECapabilityEnquiry-NB, rrcConnectionResume-r13 RRCConnectionResume-NB, spare2 NULL, spare1 NULL }, messageClassExtension SEQUENCE {} } UL-CCCH-Message-NB ::= SEQUENCE { message UL-CCCH-MessageType-NB } UL-CCCH-MessageType-NB ::= CHOICE { c1 CHOICE { rrcConnectionReestablishmentRequest-r13 RRCConnectionReestablishmentRequest-NB, rrcConnectionRequest-r13 RRCConnectionRequest-NB, rrcConnectionResumeRequest-r13 RRCConnectionResumeRequest-NB, spare1 NULL }, messageClassExtension SEQUENCE {} } SC-MCCH-Message-NB ::= SEQUENCE { message SC-MCCH-MessageType-NB } SC-MCCH-MessageType-NB ::= CHOICE { c1 CHOICE { scptmConfiguration-r14 SCPTMConfiguration-NB-r14 }, messageClassExtension SEQUENCE {} } UL-DCCH-Message-NB ::= SEQUENCE { message UL-DCCH-MessageType-NB } UL-DCCH-MessageType-NB ::= CHOICE { c1 CHOICE { rrcConnectionReconfigurationComplete-r13 RRCConnectionReconfigurationComplete-NB, rrcConnectionReestablishmentComplete-r13 RRCConnectionReestablishmentComplete-NB, rrcConnectionSetupComplete-r13 RRCConnectionSetupComplete-NB, securityModeComplete-r13 SecurityModeComplete, securityModeFailure-r13 SecurityModeFailure, ueCapabilityInformation-r13 UECapabilityInformation-NB, ulInformationTransfer-r13 ULInformationTransfer-NB, rrcConnectionResumeComplete-r13 RRCConnectionResumeComplete-NB, spare8 NULL, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, messageClassExtension SEQUENCE {} } DLInformationTransfer-NB ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { dlInformationTransfer-r13 DLInformationTransfer-NB-r13-IEs, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } DLInformationTransfer-NB-r13-IEs ::= SEQUENCE { dedicatedInfoNAS-r13 DedicatedInfoNAS, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } MasterInformationBlock-NB ::= SEQUENCE { systemFrameNumber-MSB-r13 BIT STRING (SIZE (4)), hyperSFN-LSB-r13 BIT STRING (SIZE (2)), schedulingInfoSIB1-r13 INTEGER (0..15), systemInfoValueTag-r13 INTEGER (0..31), ab-Enabled-r13 BOOLEAN, operationModeInfo-r13 CHOICE { inband-SamePCI-r13 Inband-SamePCI-NB-r13, inband-DifferentPCI-r13 Inband-DifferentPCI-NB-r13, guardband-r13 Guardband-NB-r13, standalone-r13 Standalone-NB-r13 }, spare BIT STRING (SIZE (11)) } ChannelRasterOffset-NB-r13 ::= ENUMERATED {khz-7dot5, khz-2dot5, khz2dot5, khz7dot5} Guardband-NB-r13 ::= SEQUENCE { rasterOffset-r13 ChannelRasterOffset-NB-r13, spare BIT STRING (SIZE (3)) } Inband-SamePCI-NB-r13 ::= SEQUENCE { eutra-CRS-SequenceInfo-r13 INTEGER (0..31) } Inband-DifferentPCI-NB-r13 ::= SEQUENCE { eutra-NumCRS-Ports-r13 ENUMERATED {same, four}, rasterOffset-r13 ChannelRasterOffset-NB-r13, spare BIT STRING (SIZE (2)) } Standalone-NB-r13 ::= SEQUENCE { spare BIT STRING (SIZE (5)) } Paging-NB ::= SEQUENCE { pagingRecordList-r13 PagingRecordList-NB-r13 OPTIONAL, -- Need ON systemInfoModification-r13 ENUMERATED {true} OPTIONAL, -- Need ON systemInfoModification-eDRX-r13 ENUMERATED {true} OPTIONAL, -- Need ON nonCriticalExtension SEQUENCE {} OPTIONAL } PagingRecordList-NB-r13 ::= SEQUENCE (SIZE (1..maxPageRec)) OF PagingRecord-NB-r13 PagingRecord-NB-r13 ::= SEQUENCE { ue-Identity-r13 PagingUE-Identity, ... } RRCConnectionReconfiguration-NB ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ rrcConnectionReconfiguration-r13 RRCConnectionReconfiguration-NB-r13-IEs, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReconfiguration-NB-r13-IEs ::= SEQUENCE { dedicatedInfoNASList-r13 SEQUENCE (SIZE(1..maxDRB-NB-r13)) OF DedicatedInfoNAS OPTIONAL, -- Need ON radioResourceConfigDedicated-r13 RadioResourceConfigDedicated-NB-r13 OPTIONAL, -- Need ON fullConfig-r13 ENUMERATED {true} OPTIONAL, -- Cond Reestab lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionReconfigurationComplete-NB ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { rrcConnectionReconfigurationComplete-r13 RRCConnectionReconfigurationComplete-NB-r13-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReconfigurationComplete-NB-r13-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionReestablishment-NB ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ rrcConnectionReestablishment-r13 RRCConnectionReestablishment-NB-r13-IEs, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReestablishment-NB-r13-IEs ::= SEQUENCE { radioResourceConfigDedicated-r13 RadioResourceConfigDedicated-NB-r13, nextHopChainingCount-r13 NextHopChainingCount, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension RRCConnectionReestablishment-NB-v1430-IEs OPTIONAL } RRCConnectionReestablishment-NB-v1430-IEs ::= SEQUENCE { dl-NAS-MAC BIT STRING (SIZE (16)), -- Cond Reestablish-CP nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionReestablishmentComplete-NB ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { rrcConnectionReestablishmentComplete-r13 RRCConnectionReestablishmentComplete-NB-r13-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReestablishmentComplete-NB-r13-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionReestablishmentRequest-NB ::= SEQUENCE { criticalExtensions CHOICE { rrcConnectionReestablishmentRequest-r13 RRCConnectionReestablishmentRequest-NB-r13-IEs, later CHOICE { rrcConnectionReestablishmentRequest-r14 RRCConnectionReestablishmentRequest-NB-r14-IEs, criticalExtensionsFuture SEQUENCE {} } } } RRCConnectionReestablishmentRequest-NB-r13-IEs ::= SEQUENCE { ue-Identity-r13 ReestabUE-Identity, reestablishmentCause-r13 ReestablishmentCause-NB-r13, spare BIT STRING (SIZE (25)) } RRCConnectionReestablishmentRequest-NB-r14-IEs ::= SEQUENCE { ue-Identity-r14 ReestabUE-Identity-CP-NB-r14, reestablishmentCause-r14 ReestablishmentCause-NB-r13, spare BIT STRING (SIZE (4)) } ReestablishmentCause-NB-r13 ::= ENUMERATED { reconfigurationFailure, otherFailure, spare2, spare1} ReestabUE-Identity-CP-NB-r14 ::= SEQUENCE { s-TMSI-r14 S-TMSI, ul-NAS-MAC-r14 BIT STRING (SIZE (16)), ul-NAS-Count-r14 BIT STRING (SIZE (5)) } RRCConnectionReject-NB ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { rrcConnectionReject-r13 RRCConnectionReject-NB-r13-IEs, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReject-NB-r13-IEs ::= SEQUENCE { extendedWaitTime-r13 INTEGER (1..1800), rrc-SuspendIndication-r13 ENUMERATED {true} OPTIONAL, -- Need ON lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionRelease-NB ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { rrcConnectionRelease-r13 RRCConnectionRelease-NB-r13-IEs, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionRelease-NB-r13-IEs ::= SEQUENCE { releaseCause-r13 ReleaseCause-NB-r13, resumeIdentity-r13 ResumeIdentity-r13 OPTIONAL, -- Need OR extendedWaitTime-r13 INTEGER (1..1800) OPTIONAL, -- Need ON redirectedCarrierInfo-r13 RedirectedCarrierInfo-NB-r13 OPTIONAL, -- Need ON lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension RRCConnectionRelease-NB-v1430-IEs OPTIONAL } RRCConnectionRelease-NB-v1430-IEs ::= SEQUENCE { redirectedCarrierInfo-v1430 RedirectedCarrierInfo-NB-v1430 OPTIONAL, -- Cond Redirection extendedWaitTime-CPdata-r14 INTEGER (1..1800) OPTIONAL, -- Cond NoExtendedWaitTime nonCriticalExtension SEQUENCE {} OPTIONAL } ReleaseCause-NB-r13 ::= ENUMERATED {loadBalancingTAUrequired, other, rrc-Suspend, spare1} RedirectedCarrierInfo-NB-r13::= CarrierFreq-NB-r13 RedirectedCarrierInfo-NB-v1430 ::= SEQUENCE { redirectedCarrierOffsetDedicated-r14 ENUMERATED{ dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, dB12, dB14, dB16, dB18, dB20, dB22, dB24, dB26}, t322-r14 ENUMERATED{ min5, min10, min20, min30, min60, min120, min180, spare1} } RRCConnectionRequest-NB ::= SEQUENCE { criticalExtensions CHOICE { rrcConnectionRequest-r13 RRCConnectionRequest-NB-r13-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionRequest-NB-r13-IEs ::= SEQUENCE { ue-Identity-r13 InitialUE-Identity, establishmentCause-r13 EstablishmentCause-NB-r13, multiToneSupport-r13 ENUMERATED {true} OPTIONAL, multiCarrierSupport-r13 ENUMERATED {true} OPTIONAL, spare BIT STRING (SIZE (22)) } RRCConnectionResume-NB ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { rrcConnectionResume-r13 RRCConnectionResume-NB-r13-IEs, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionResume-NB-r13-IEs ::= SEQUENCE { radioResourceConfigDedicated-r13 RadioResourceConfigDedicated-NB-r13 OPTIONAL, -- Need ON nextHopChainingCount-r13 NextHopChainingCount, drb-ContinueROHC-r13 ENUMERATED {true} OPTIONAL, -- Need OP lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionResumeComplete-NB ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { rrcConnectionResumeComplete-r13 RRCConnectionResumeComplete-NB-r13-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionResumeComplete-NB-r13-IEs ::= SEQUENCE { selectedPLMN-Identity-r13 INTEGER (1..maxPLMN-r11) OPTIONAL, dedicatedInfoNAS-r13 DedicatedInfoNAS OPTIONAL, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionResumeRequest-NB ::= SEQUENCE { criticalExtensions CHOICE { rrcConnectionResumeRequest-r13 RRCConnectionResumeRequest-NB-r13-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionResumeRequest-NB-r13-IEs ::= SEQUENCE { resumeID-r13 ResumeIdentity-r13, shortResumeMAC-I-r13 ShortMAC-I, resumeCause-r13 EstablishmentCause-NB-r13, spare BIT STRING (SIZE (9)) } RRCConnectionSetup-NB ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { rrcConnectionSetup-r13 RRCConnectionSetup-NB-r13-IEs, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionSetup-NB-r13-IEs ::= SEQUENCE { radioResourceConfigDedicated-r13 RadioResourceConfigDedicated-NB-r13, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionSetupComplete-NB ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE{ rrcConnectionSetupComplete-r13 RRCConnectionSetupComplete-NB-r13-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionSetupComplete-NB-r13-IEs ::= SEQUENCE { selectedPLMN-Identity-r13 INTEGER (1..maxPLMN-r11), s-TMSI-r13 S-TMSI OPTIONAL, registeredMME-r13 RegisteredMME OPTIONAL, dedicatedInfoNAS-r13 DedicatedInfoNAS, attachWithoutPDN-Connectivity-r13 ENUMERATED {true} OPTIONAL, up-CIoT-EPS-Optimisation-r13 ENUMERATED {true} OPTIONAL, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension RRCConnectionSetupComplete-NB-v1430-IEs OPTIONAL } RRCConnectionSetupComplete-NB-v1430-IEs ::= SEQUENCE { gummei-Type-r14 ENUMERATED { mapped} OPTIONAL, dcn-ID-r14 INTEGER (0..65535) OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } SCPTMConfiguration-NB-r14 ::= SEQUENCE { sc-mtch-InfoList-r14 SC-MTCH-InfoList-NB-r14, scptm-NeighbourCellList-r14 SCPTM-NeighbourCellList-NB-r14 OPTIONAL, -- Need OP lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } SystemInformation-NB ::= SEQUENCE { criticalExtensions CHOICE { systemInformation-r13 SystemInformation-NB-r13-IEs, criticalExtensionsFuture SEQUENCE {} } } SystemInformation-NB-r13-IEs ::= SEQUENCE { sib-TypeAndInfo-r13 SEQUENCE (SIZE (1..maxSIB)) OF CHOICE { sib2-r13 SystemInformationBlockType2-NB-r13, sib3-r13 SystemInformationBlockType3-NB-r13, sib4-r13 SystemInformationBlockType4-NB-r13, sib5-r13 SystemInformationBlockType5-NB-r13, sib14-r13 SystemInformationBlockType14-NB-r13, sib16-r13 SystemInformationBlockType16-NB-r13, ..., sib15-v1430 SystemInformationBlockType15-NB-r14, sib20-v1430 SystemInformationBlockType20-NB-r14, sib22-v1430 SystemInformationBlockType22-NB-r14 }, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } SystemInformationBlockType1-NB ::= SEQUENCE { hyperSFN-MSB-r13 BIT STRING (SIZE (8)), cellAccessRelatedInfo-r13 SEQUENCE { plmn-IdentityList-r13 PLMN-IdentityList-NB-r13, trackingAreaCode-r13 TrackingAreaCode, cellIdentity-r13 CellIdentity, cellBarred-r13 ENUMERATED {barred, notBarred}, intraFreqReselection-r13 ENUMERATED {allowed, notAllowed} }, cellSelectionInfo-r13 SEQUENCE { q-RxLevMin-r13 Q-RxLevMin, q-QualMin-r13 Q-QualMin-r9 }, p-Max-r13 P-Max OPTIONAL, -- Need OP freqBandIndicator-r13 FreqBandIndicator-NB-r13, freqBandInfo-r13 NS-PmaxList-NB-r13 OPTIONAL, -- Need OR multiBandInfoList-r13 MultiBandInfoList-NB-r13 OPTIONAL, -- Need OR downlinkBitmap-r13 DL-Bitmap-NB-r13 OPTIONAL, -- Need OP, eutraControlRegionSize-r13 ENUMERATED {n1, n2, n3} OPTIONAL, -- Cond inband nrs-CRS-PowerOffset-r13 ENUMERATED {dB-6, dB-4dot77, dB-3, dB-1dot77, dB0, dB1, dB1dot23, dB2, dB3, dB4, dB4dot23, dB5, dB6, dB7, dB8, dB9} OPTIONAL, -- Cond inband-SamePCI schedulingInfoList-r13 SchedulingInfoList-NB-r13, si-WindowLength-r13 ENUMERATED {ms160, ms320, ms480, ms640, ms960, ms1280, ms1600, spare1}, si-RadioFrameOffset-r13 INTEGER (1..15) OPTIONAL, -- Need OP systemInfoValueTagList-r13 SystemInfoValueTagList-NB-r13 OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SystemInformationBlockType1-NB-v1350 OPTIONAL } SystemInformationBlockType1-NB-v1350 ::= SEQUENCE { cellSelectionInfo-v1350 CellSelectionInfo-NB-v1350 OPTIONAL, -- Cond Qrxlevmin nonCriticalExtension SystemInformationBlockType1-NB-v1430 OPTIONAL } SystemInformationBlockType1-NB-v1430 ::= SEQUENCE { cellSelectionInfo-v1430 CellSelectionInfo-NB-v1430 OPTIONAL, -- Need OR nonCriticalExtension SEQUENCE {} OPTIONAL } PLMN-IdentityList-NB-r13 ::= SEQUENCE (SIZE (1..maxPLMN-r11)) OF PLMN-IdentityInfo-NB-r13 PLMN-IdentityInfo-NB-r13 ::= SEQUENCE { plmn-Identity-r13 PLMN-Identity, cellReservedForOperatorUse-r13 ENUMERATED {reserved, notReserved}, attachWithoutPDN-Connectivity-r13 ENUMERATED {true} OPTIONAL -- Need OP } SchedulingInfoList-NB-r13 ::= SEQUENCE (SIZE (1..maxSI-Message-NB-r13)) OF SchedulingInfo-NB-r13 SchedulingInfo-NB-r13::= SEQUENCE { si-Periodicity-r13 ENUMERATED {rf64, rf128, rf256, rf512, rf1024, rf2048, rf4096, spare}, si-RepetitionPattern-r13 ENUMERATED {every2ndRF, every4thRF, every8thRF, every16thRF}, sib-MappingInfo-r13 SIB-MappingInfo-NB-r13, si-TB-r13 ENUMERATED {b56, b120, b208, b256, b328, b440, b552, b680} } SystemInfoValueTagList-NB-r13 ::= SEQUENCE (SIZE (1.. maxSI-Message-NB-r13)) OF SystemInfoValueTagSI-r13 SIB-MappingInfo-NB-r13 ::= SEQUENCE (SIZE (0..maxSIB-1)) OF SIB-Type-NB-r13 SIB-Type-NB-r13 ::= ENUMERATED { sibType3-NB-r13, sibType4-NB-r13, sibType5-NB-r13, sibType14-NB-r13, sibType16-NB-r13, sibType15-NB-r14, sibType20-NB-r14, sibType22-NB-r14} CellSelectionInfo-NB-v1350 ::= SEQUENCE { delta-RxLevMin-v1350 INTEGER (-8..-1) } CellSelectionInfo-NB-v1430 ::= SEQUENCE { powerClass14dBm-Offset-r14 ENUMERATED {dB-6, dB-3, dB3, dB6, dB9, dB12} OPTIONAL, -- Need OP ce-authorisationOffset-r14 ENUMERATED {dB5, dB10, dB15, dB20, dB25, dB30, dB35} OPTIONAL -- Need OP } UECapabilityEnquiry-NB ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { ueCapabilityEnquiry-r13 UECapabilityEnquiry-NB-r13-IEs, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UECapabilityEnquiry-NB-r13-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } UECapabilityInformation-NB ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE{ ueCapabilityInformation-r13 UECapabilityInformation-NB-r13-IEs, criticalExtensionsFuture SEQUENCE {} } } UECapabilityInformation-NB-r13-IEs ::= SEQUENCE { ue-Capability-Container-r13 UE-Capability-NB-r13, ue-RadioPagingInfo-r13 UE-RadioPagingInfo-NB-r13, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } ULInformationTransfer-NB ::= SEQUENCE { criticalExtensions CHOICE { ulInformationTransfer-r13 ULInformationTransfer-NB-r13-IEs, criticalExtensionsFuture SEQUENCE {} } } ULInformationTransfer-NB-r13-IEs ::= SEQUENCE { dedicatedInfoNAS-r13 DedicatedInfoNAS, lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } SystemInformationBlockType2-NB-r13 ::= SEQUENCE { radioResourceConfigCommon-r13 RadioResourceConfigCommonSIB-NB-r13, ue-TimersAndConstants-r13 UE-TimersAndConstants-NB-r13, freqInfo-r13 SEQUENCE { ul-CarrierFreq-r13 CarrierFreq-NB-r13 OPTIONAL, -- Need OP additionalSpectrumEmission-r13 AdditionalSpectrumEmission }, timeAlignmentTimerCommon-r13 TimeAlignmentTimer, multiBandInfoList-r13 SEQUENCE (SIZE (1..maxMultiBands)) OF AdditionalSpectrumEmission OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, ..., [[ cp-Reestablishment-r14 ENUMERATED {true} OPTIONAL -- Need OP ]] } SystemInformationBlockType3-NB-r13 ::= SEQUENCE { cellReselectionInfoCommon-r13 SEQUENCE { q-Hyst-r13 ENUMERATED { dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, dB12, dB14, dB16, dB18, dB20, dB22, dB24 } }, cellReselectionServingFreqInfo-r13 SEQUENCE { s-NonIntraSearch-r13 ReselectionThreshold }, intraFreqCellReselectionInfo-r13 SEQUENCE { q-RxLevMin-r13 Q-RxLevMin, q-QualMin-r13 Q-QualMin-r9 OPTIONAL, -- Need OP p-Max-r13 P-Max OPTIONAL, -- Need OP s-IntraSearchP-r13 ReselectionThreshold, t-Reselection-r13 T-Reselection-NB-r13 }, freqBandInfo-r13 NS-PmaxList-NB-r13 OPTIONAL, -- Need OR multiBandInfoList-r13 SEQUENCE (SIZE (1..maxMultiBands)) OF NS-PmaxList-NB-r13 OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, ..., [[ intraFreqCellReselectionInfo-v1350 IntraFreqCellReselectionInfo-NB-v1350 OPTIONAL -- Cond Qrxlevmin ]], [[ intraFreqCellReselectionInfo-v1360 IntraFreqCellReselectionInfo-NB-v1360 OPTIONAL -- Need OR ]], [[ intraFreqCellReselectionInfo-v1430 IntraFreqCellReselectionInfo-NB-v1430 OPTIONAL -- Need OR ]] } IntraFreqCellReselectionInfo-NB-v1350 ::= SEQUENCE { delta-RxLevMin-v1350 INTEGER (-8..-1) } IntraFreqCellReselectionInfo-NB-v1360 ::= SEQUENCE { s-IntraSearchP-v1360 ReselectionThreshold-NB-v1360 } IntraFreqCellReselectionInfo-NB-v1430 ::= SEQUENCE { powerClass14dBm-Offset-r14 ENUMERATED {dB-6, dB-3, dB3, dB6, dB9, dB12} OPTIONAL, -- Need OP ce-AuthorisationOffset-r14 ENUMERATED {dB5, dB10, dB15, dB20, dB25, dB30, dB35} OPTIONAL -- Need OP } SystemInformationBlockType4-NB-r13 ::= SEQUENCE { intraFreqNeighCellList-r13 IntraFreqNeighCellList OPTIONAL, -- Need OR intraFreqBlackCellList-r13 IntraFreqBlackCellList OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, ... } SystemInformationBlockType5-NB-r13 ::= SEQUENCE { interFreqCarrierFreqList-r13 InterFreqCarrierFreqList-NB-r13, t-Reselection-r13 T-Reselection-NB-r13, lateNonCriticalExtension OCTET STRING OPTIONAL, ..., [[ scptm-FreqOffset-r14 INTEGER (1..8) OPTIONAL -- Need OP ]] } InterFreqCarrierFreqList-NB-r13 ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo-NB-r13 InterFreqCarrierFreqInfo-NB-r13 ::= SEQUENCE { dl-CarrierFreq-r13 CarrierFreq-NB-r13, q-RxLevMin-r13 Q-RxLevMin, q-QualMin-r13 Q-QualMin-r9 OPTIONAL, -- Need OP p-Max-r13 P-Max OPTIONAL, -- Need OP q-OffsetFreq-r13 Q-OffsetRange DEFAULT dB0, interFreqNeighCellList-r13 InterFreqNeighCellList-NB-r13 OPTIONAL, -- Need OR interFreqBlackCellList-r13 InterFreqBlackCellList-NB-r13 OPTIONAL, -- Need OR multiBandInfoList-r13 MultiBandInfoList-NB-r13 OPTIONAL, -- Need OR ..., [[ delta-RxLevMin-v1350 INTEGER (-8..-1) OPTIONAL -- Cond Qrxlevmin ]], [[ powerClass14dBm-Offset-r14 ENUMERATED {dB-6, dB-3, dB3, dB6, dB9, dB12} OPTIONAL, -- Need OP ce-AuthorisationOffset-r14 ENUMERATED {dB5, dB10, dB15, dB20, dB25, dB30, dB35} OPTIONAL -- Need OP ]] } InterFreqNeighCellList-NB-r13 ::= SEQUENCE (SIZE (1..maxCellInter)) OF PhysCellId InterFreqBlackCellList-NB-r13 ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellId SystemInformationBlockType14-NB-r13 ::= SEQUENCE { ab-Param-r13 CHOICE { ab-Common-r13 AB-Config-NB-r13, ab-PerPLMN-List-r13 SEQUENCE (SIZE (1..maxPLMN-r11)) OF AB-ConfigPLMN-NB-r13 } OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, ... } AB-ConfigPLMN-NB-r13 ::= SEQUENCE { ab-Config-r13 AB-Config-NB-r13 OPTIONAL -- Need OR } AB-Config-NB-r13 ::= SEQUENCE { ab-Category-r13 ENUMERATED {a, b, c}, ab-BarringBitmap-r13 BIT STRING (SIZE(10)), ab-BarringForExceptionData-r13 ENUMERATED {true} OPTIONAL, -- Need OP ab-BarringForSpecialAC-r13 BIT STRING (SIZE(5)) } SystemInformationBlockType15-NB-r14 ::= SEQUENCE { mbms-SAI-IntraFreq-r14 MBMS-SAI-List-r11 OPTIONAL, -- Need OR mbms-SAI-InterFreqList-r14 MBMS-SAI-InterFreqList-NB-r14 OPTIONAL, -- Need OR lateNonCriticalExtension OCTET STRING OPTIONAL, ... } MBMS-SAI-InterFreqList-NB-r14 ::= SEQUENCE (SIZE (1..maxFreq)) OF MBMS-SAI-InterFreq-NB-r14 MBMS-SAI-InterFreq-NB-r14 ::= SEQUENCE { dl-CarrierFreq-r14 CarrierFreq-NB-r13, mbms-SAI-List-r14 MBMS-SAI-List-r11, multiBandInfoList-r14 AdditionalBandInfoList-NB-r14 OPTIONAL -- Need OR } SystemInformationBlockType16-NB-r13 ::= SystemInformationBlockType16-r11 SystemInformationBlockType20-NB-r14 ::= SEQUENCE { npdcch-SC-MCCH-Config-r14 NPDCCH-SC-MCCH-Config-NB-r14, sc-mcch-CarrierConfig-r14 CHOICE { dl-CarrierConfig-r14 DL-CarrierConfigCommon-NB-r14, dl-CarrierIndex-r14 INTEGER (0.. maxNonAnchorCarriers-NB-r14) }, sc-mcch-RepetitionPeriod-r14 ENUMERATED {rf32, rf128, rf512, rf1024, rf2048, rf4096, rf8192, rf16384}, sc-mcch-Offset-r14 INTEGER (0..10), sc-mcch-ModificationPeriod-r14 ENUMERATED { rf32, rf128, rf256, rf512, rf1024, rf2048, rf4096, rf8192, rf16384, rf32768, rf65536, rf131072, rf262144, rf524288, rf1048576, spare1}, sc-mcch-SchedulingInfo-r14 SC-MCCH-SchedulingInfo-NB-r14 OPTIONAL, -- Need OP lateNonCriticalExtension OCTET STRING OPTIONAL, ... } NPDCCH-SC-MCCH-Config-NB-r14 ::= SEQUENCE { npdcch-NumRepetitions-SC-MCCH-r14 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128, r256, r512, r1024, r2048}, npdcch-StartSF-SC-MCCH-r14 ENUMERATED {v1dot5, v2, v4, v8, v16, v32, v48, v64}, npdcch-Offset-SC-MCCH-r14 ENUMERATED {zero, oneEighth, oneQuarter, threeEighth, oneHalf, fiveEighth, threeQuarter, sevenEighth} } SC-MCCH-SchedulingInfo-NB-r14::= SEQUENCE { onDurationTimerSCPTM-r14 ENUMERATED { pp1, pp2, pp3, pp4, pp8, pp16, pp32, spare}, drx-InactivityTimerSCPTM-r14 ENUMERATED { pp0, pp1, pp2, pp3, pp4, pp8, pp16, pp32}, schedulingPeriodStartOffsetSCPTM-r14 CHOICE { sf10 INTEGER(0..9), sf20 INTEGER(0..19), sf32 INTEGER(0..31), sf40 INTEGER(0..39), sf64 INTEGER(0..63), sf80 INTEGER(0..79), sf128 INTEGER(0..127), sf160 INTEGER(0..159), sf256 INTEGER(0..255), sf320 INTEGER(0..319), sf512 INTEGER(0..511), sf640 INTEGER(0..639), sf1024 INTEGER(0..1023), sf2048 INTEGER(0..2047), sf4096 INTEGER(0..4095), sf8192 INTEGER(0..8191) }, ... } SystemInformationBlockType22-NB-r14 ::= SEQUENCE { dl-ConfigList-r14 DL-ConfigCommonList-NB-r14 OPTIONAL, -- Need OR ul-ConfigList-r14 UL-ConfigCommonList-NB-r14 OPTIONAL, -- Need OR pagingWeightAnchor-r14 PagingWeight-NB-r14 OPTIONAL, -- Cond pcch-config nprach-ProbabilityAnchorList-r14 NPRACH-ProbabilityAnchorList-NB-r14 OPTIONAL, -- Cond nprach-config lateNonCriticalExtension OCTET STRING OPTIONAL, ... } DL-ConfigCommonList-NB-r14 ::= SEQUENCE (SIZE (1.. maxNonAnchorCarriers-NB-r14)) OF DL-ConfigCommon-NB-r14 UL-ConfigCommonList-NB-r14 ::= SEQUENCE (SIZE (1.. maxNonAnchorCarriers-NB-r14)) OF UL-ConfigCommon-NB-r14 DL-ConfigCommon-NB-r14 ::= SEQUENCE { dl-CarrierConfig-r14 DL-CarrierConfigCommon-NB-r14, pcch-Config-r14 PCCH-Config-NB-r14 OPTIONAL, -- Need OR ... } PCCH-Config-NB-r14 ::= SEQUENCE { npdcch-NumRepetitionPaging-r14 ENUMERATED { r1, r2, r4, r8, r16, r32, r64, r128, r256, r512, r1024, r2048, spare4, spare3, spare2, spare1} OPTIONAL, -- Need OP pagingWeight-r14 PagingWeight-NB-r14 DEFAULT w1, ... } PagingWeight-NB-r14 ::= ENUMERATED {w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15, w16} UL-ConfigCommon-NB-r14 ::= SEQUENCE { ul-CarrierFreq-r14 CarrierFreq-NB-r13, nprach-ParametersList-r14 NPRACH-ParametersList-NB-r14 OPTIONAL, -- Need OR ... } NPRACH-ParametersList-NB-r14 ::= SEQUENCE (SIZE (1.. maxNPRACH-Resources-NB-r13)) OF NPRACH-Parameters-NB-r14 NPRACH-Parameters-NB-r14 ::= SEQUENCE { nprach-Parameters-r14 SEQUENCE { nprach-Periodicity-r14 ENUMERATED {ms40, ms80, ms160, ms240, ms320, ms640, ms1280, ms2560} OPTIONAL, -- NEED OP nprach-StartTime-r14 ENUMERATED {ms8, ms16, ms32, ms64, ms128, ms256, ms512, ms1024} OPTIONAL, -- NEED OP nprach-SubcarrierOffset-r14 ENUMERATED {n0, n12, n24, n36, n2, n18, n34, spare1} OPTIONAL, -- NEED OP nprach-NumSubcarriers-r14 ENUMERATED {n12, n24, n36, n48} OPTIONAL, -- NEED OP nprach-SubcarrierMSG3-RangeStart-r14 ENUMERATED {zero, oneThird, twoThird, one} OPTIONAL, -- NEED OP npdcch-NumRepetitions-RA-r14 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128, r256, r512, r1024, r2048, spare4, spare3, spare2, spare1} OPTIONAL, -- NEED OP npdcch-StartSF-CSS-RA-r14 ENUMERATED {v1dot5, v2, v4, v8, v16, v32, v48, v64} OPTIONAL, -- NEED OP npdcch-Offset-RA-r14 ENUMERATED {zero, oneEighth, oneFourth, threeEighth} OPTIONAL, -- NEED OP nprach-NumCBRA-StartSubcarriers-r14 ENUMERATED {n8, n10, n11, n12, n20, n22, n23, n24, n32, n34, n35, n36, n40, n44, n46, n48} OPTIONAL, -- NEED OP npdcch-CarrierIndex-r14 INTEGER (1..maxNonAnchorCarriers-NB-r14) OPTIONAL, -- Need OP ... } OPTIONAL -- Need OR } NPRACH-ProbabilityAnchorList-NB-r14 ::= SEQUENCE (SIZE (1.. maxNPRACH-Resources-NB-r13)) OF NPRACH-ProbabilityAnchor-NB-r14 NPRACH-ProbabilityAnchor-NB-r14 ::= SEQUENCE { nprach-ProbabilityAnchor-r14 ENUMERATED { zero, oneSixteenth, oneFifteenth, oneFourteenth, oneThirteenth, oneTwelfth, oneEleventh, oneTenth, oneNinth, oneEighth, oneSeventh, oneSixth, oneFifth, oneFourth, oneThird, oneHalf} OPTIONAL -- Need OP } CarrierConfigDedicated-NB-r13 ::= SEQUENCE { dl-CarrierConfig-r13 DL-CarrierConfigDedicated-NB-r13, ul-CarrierConfig-r13 UL-CarrierConfigDedicated-NB-r13 } DL-CarrierConfigDedicated-NB-r13 ::= SEQUENCE { dl-CarrierFreq-r13 CarrierFreq-NB-r13, downlinkBitmapNonAnchor-r13 CHOICE { useNoBitmap-r13 NULL, useAnchorBitmap-r13 NULL, explicitBitmapConfiguration-r13 DL-Bitmap-NB-r13, spare NULL } OPTIONAL, -- Need ON dl-GapNonAnchor-r13 CHOICE { useNoGap-r13 NULL, useAnchorGapConfig-r13 NULL, explicitGapConfiguration-r13 DL-GapConfig-NB-r13, spare NULL } OPTIONAL, -- Need ON inbandCarrierInfo-r13 SEQUENCE { samePCI-Indicator-r13 CHOICE { samePCI-r13 SEQUENCE { indexToMidPRB-r13 INTEGER (-55..54) }, differentPCI-r13 SEQUENCE { eutra-NumCRS-Ports-r13 ENUMERATED {same, four} } } OPTIONAL, -- Cond anchor-guardband eutraControlRegionSize-r13 ENUMERATED {n1, n2, n3} } OPTIONAL, -- Cond non-anchor-inband ..., [[ nrs-PowerOffsetNonAnchor-v1330 ENUMERATED {dB-12, dB-10, dB-8, dB-6, dB-4, dB-2, dB0, dB3} OPTIONAL -- Need ON ]] } UL-CarrierConfigDedicated-NB-r13 ::= SEQUENCE { ul-CarrierFreq-r13 CarrierFreq-NB-r13 OPTIONAL, -- Need OP ... } CarrierFreq-NB-r13 ::= SEQUENCE { carrierFreq-r13 ARFCN-ValueEUTRA-r9, carrierFreqOffset-r13 ENUMERATED { v-10, v-9, v-8, v-7, v-6, v-5, v-4, v-3, v-2, v-1, v-0dot5, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9 } OPTIONAL -- Need ON } DL-Bitmap-NB-r13 ::= CHOICE { subframePattern10-r13 BIT STRING (SIZE (10)), subframePattern40-r13 BIT STRING (SIZE (40)) } DL-CarrierConfigCommon-NB-r14 ::= SEQUENCE { dl-CarrierFreq-r14 CarrierFreq-NB-r13, downlinkBitmapNonAnchor-r14 CHOICE { useNoBitmap-r14 NULL, useAnchorBitmap-r14 NULL, explicitBitmapConfiguration-r14 DL-Bitmap-NB-r13 }, dl-GapNonAnchor-r14 CHOICE { useNoGap-r14 NULL, useAnchorGapConfig-r14 NULL, explicitGapConfiguration-r14 DL-GapConfig-NB-r13 }, inbandCarrierInfo-r14 SEQUENCE { samePCI-Indicator-r14 CHOICE { samePCI-r14 SEQUENCE { indexToMidPRB-r14 INTEGER (-55..54) }, differentPCI-r14 SEQUENCE { eutra-NumCRS-Ports-r14 ENUMERATED {same, four} } } OPTIONAL, -- Cond anchor-guardband eutraControlRegionSize-r14 ENUMERATED {n1, n2, n3} } OPTIONAL, -- Cond non-anchor-inband nrs-PowerOffsetNonAnchor-r14 ENUMERATED {dB-12, dB-10, dB-8, dB-6, dB-4, dB-2, dB0, dB3} DEFAULT dB0, ... } DL-GapConfig-NB-r13 ::= SEQUENCE { dl-GapThreshold-r13 ENUMERATED {n32, n64, n128, n256}, dl-GapPeriodicity-r13 ENUMERATED {sf64, sf128, sf256, sf512}, dl-GapDurationCoeff-r13 ENUMERATED {oneEighth, oneFourth, threeEighth, oneHalf} } LogicalChannelConfig-NB-r13 ::= SEQUENCE { priority-r13 INTEGER (1..16) OPTIONAL, -- Cond UL logicalChannelSR-Prohibit-r13 BOOLEAN OPTIONAL, -- Need ON ... } MAC-MainConfig-NB-r13 ::= SEQUENCE { ul-SCH-Config-r13 SEQUENCE { periodicBSR-Timer-r13 PeriodicBSR-Timer-NB-r13 OPTIONAL, -- Need ON retxBSR-Timer-r13 RetxBSR-Timer-NB-r13 } OPTIONAL, -- Need ON drx-Config-r13 DRX-Config-NB-r13 OPTIONAL, -- Need ON timeAlignmentTimerDedicated-r13 TimeAlignmentTimer, logicalChannelSR-Config-r13 CHOICE { release NULL, setup SEQUENCE { logicalChannelSR-ProhibitTimer-r13 ENUMERATED { pp2, pp8, pp32, pp128, pp512, pp1024, pp2048, spare} } } OPTIONAL, -- Need ON ..., [[ rai-Activation-r14 ENUMERATED {true} OPTIONAL, -- Need OR dataInactivityTimerConfig-r14 CHOICE { release NULL, setup SEQUENCE { dataInactivityTimer-r14 DataInactivityTimer-r14 } } OPTIONAL -- Need ON ]], [[ drx-Cycle-v1430 ENUMERATED { sf1280, sf2560, sf5120, sf10240} OPTIONAL -- Need ON ]], [[ ra-CFRA-Config-r14 ENUMERATED {true} OPTIONAL -- Need ON ]] } PeriodicBSR-Timer-NB-r13 ::= ENUMERATED { pp2, pp4, pp8, pp16, pp64, pp128, infinity, spare} RetxBSR-Timer-NB-r13 ::= ENUMERATED { pp4, pp16, pp64, pp128, pp256, pp512, infinity, spare} DRX-Config-NB-r13 ::= CHOICE { release NULL, setup SEQUENCE { onDurationTimer-r13 ENUMERATED { pp1, pp2, pp3, pp4, pp8, pp16, pp32, spare}, drx-InactivityTimer-r13 ENUMERATED { pp0, pp1, pp2, pp3, pp4, pp8, pp16, pp32}, drx-RetransmissionTimer-r13 ENUMERATED { pp0, pp1, pp2, pp4, pp6, pp8, pp16, pp24, pp33, spare7, spare6, spare5, spare4, spare3, spare2, spare1}, drx-Cycle-r13 ENUMERATED { sf256, sf512, sf1024, sf1536, sf2048, sf3072, sf4096, sf4608, sf6144, sf7680, sf8192, sf9216, spare4, spare3, spare2, spare1}, drx-StartOffset-r13 INTEGER (0..255), drx-ULRetransmissionTimer-r13 ENUMERATED { pp0, pp1, pp2, pp4, pp6, pp8, pp16, pp24, pp33, pp40, pp64, pp80, pp96, pp112, pp128, pp160, pp320} } } NPDCCH-ConfigDedicated-NB-r13 ::= SEQUENCE { npdcch-NumRepetitions-r13 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128, r256, r512, r1024, r2048, spare4, spare3, spare2, spare1}, npdcch-StartSF-USS-r13 ENUMERATED {v1dot5, v2, v4, v8, v16, v32, v48, v64}, npdcch-Offset-USS-r13 ENUMERATED {zero, oneEighth, oneFourth, threeEighth} } NPDSCH-ConfigCommon-NB-r13 ::= SEQUENCE { nrs-Power-r13 INTEGER (-60..50) } NPRACH-ConfigSIB-NB-r13 ::= SEQUENCE { nprach-CP-Length-r13 ENUMERATED {us66dot7, us266dot7}, rsrp-ThresholdsPrachInfoList-r13 RSRP-ThresholdsNPRACH-InfoList-NB-r13 OPTIONAL, -- need OR nprach-ParametersList-r13 NPRACH-ParametersList-NB-r13 } NPRACH-ConfigSIB-NB-v1330 ::= SEQUENCE { nprach-ParametersList-v1330 NPRACH-ParametersList-NB-v1330 } NPRACH-ParametersList-NB-r13 ::= SEQUENCE (SIZE (1.. maxNPRACH-Resources-NB-r13)) OF NPRACH-Parameters-NB-r13 NPRACH-ParametersList-NB-v1330 ::= SEQUENCE (SIZE (1.. maxNPRACH-Resources-NB-r13)) OF NPRACH-Parameters-NB-v1330 NPRACH-Parameters-NB-r13::= SEQUENCE { nprach-Periodicity-r13 ENUMERATED {ms40, ms80, ms160, ms240, ms320, ms640, ms1280, ms2560}, nprach-StartTime-r13 ENUMERATED {ms8, ms16, ms32, ms64, ms128, ms256, ms512, ms1024}, nprach-SubcarrierOffset-r13 ENUMERATED {n0, n12, n24, n36, n2, n18, n34, spare1}, nprach-NumSubcarriers-r13 ENUMERATED {n12, n24, n36, n48}, nprach-SubcarrierMSG3-RangeStart-r13 ENUMERATED {zero, oneThird, twoThird, one}, maxNumPreambleAttemptCE-r13 ENUMERATED {n3, n4, n5, n6, n7, n8, n10, spare1}, numRepetitionsPerPreambleAttempt-r13 ENUMERATED {n1, n2, n4, n8, n16, n32, n64, n128}, npdcch-NumRepetitions-RA-r13 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128, r256, r512, r1024, r2048, spare4, spare3, spare2, spare1}, npdcch-StartSF-CSS-RA-r13 ENUMERATED {v1dot5, v2, v4, v8, v16, v32, v48, v64}, npdcch-Offset-RA-r13 ENUMERATED {zero, oneEighth, oneFourth, threeEighth} } NPRACH-Parameters-NB-v1330 ::= SEQUENCE { nprach-NumCBRA-StartSubcarriers-r13 ENUMERATED {n8, n10, n11, n12, n20, n22, n23, n24, n32, n34, n35, n36, n40, n44, n46, n48} } RSRP-ThresholdsNPRACH-InfoList-NB-r13 ::= SEQUENCE (SIZE(1..2)) OF RSRP-Range NPUSCH-ConfigCommon-NB-r13 ::= SEQUENCE { ack-NACK-NumRepetitions-Msg4-r13 SEQUENCE (SIZE(1.. maxNPRACH-Resources-NB-r13)) OF ACK-NACK-NumRepetitions-NB-r13, srs-SubframeConfig-r13 ENUMERATED { sc0, sc1, sc2, sc3, sc4, sc5, sc6, sc7, sc8, sc9, sc10, sc11, sc12, sc13, sc14, sc15 } OPTIONAL, -- Need OR dmrs-Config-r13 SEQUENCE { threeTone-BaseSequence-r13 INTEGER (0..12) OPTIONAL, -- Need OP threeTone-CyclicShift-r13 INTEGER (0..2), sixTone-BaseSequence-r13 INTEGER (0..14) OPTIONAL, -- Need OP sixTone-CyclicShift-r13 INTEGER (0..3), twelveTone-BaseSequence-r13 INTEGER (0..30) OPTIONAL -- Need OP } OPTIONAL, -- Need OR ul-ReferenceSignalsNPUSCH-r13 UL-ReferenceSignalsNPUSCH-NB-r13 } UL-ReferenceSignalsNPUSCH-NB-r13 ::= SEQUENCE { groupHoppingEnabled-r13 BOOLEAN, groupAssignmentNPUSCH-r13 INTEGER (0..29) } NPUSCH-ConfigDedicated-NB-r13 ::= SEQUENCE { ack-NACK-NumRepetitions-r13 ACK-NACK-NumRepetitions-NB-r13 OPTIONAL, -- Need ON npusch-AllSymbols-r13 BOOLEAN OPTIONAL, -- Cond SRS groupHoppingDisabled-r13 ENUMERATED {true} OPTIONAL -- Need OR } ACK-NACK-NumRepetitions-NB-r13 ::= ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128} PDCP-Config-NB-r13 ::= SEQUENCE { discardTimer-r13 ENUMERATED { ms5120, ms10240, ms20480, ms40960, ms81920, infinity, spare2, spare1 } OPTIONAL, -- Cond Setup headerCompression-r13 CHOICE { notUsed NULL, rohc SEQUENCE { maxCID-r13 INTEGER (1..16383) DEFAULT 15, profiles-r13 SEQUENCE { profile0x0002 BOOLEAN, profile0x0003 BOOLEAN, profile0x0004 BOOLEAN, profile0x0006 BOOLEAN, profile0x0102 BOOLEAN, profile0x0103 BOOLEAN, profile0x0104 BOOLEAN }, ... } }, ... } PhysicalConfigDedicated-NB-r13 ::= SEQUENCE { carrierConfigDedicated-r13 CarrierConfigDedicated-NB-r13 OPTIONAL, -- Need ON npdcch-ConfigDedicated-r13 NPDCCH-ConfigDedicated-NB-r13 OPTIONAL, -- Need ON npusch-ConfigDedicated-r13 NPUSCH-ConfigDedicated-NB-r13 OPTIONAL, -- Need ON uplinkPowerControlDedicated-r13 UplinkPowerControlDedicated-NB-r13 OPTIONAL, -- Need ON ..., [[ twoHARQ-ProcessesConfig-r14 ENUMERATED {true} OPTIONAL -- Need OR ]], [[ interferenceRandomisationConfig-r14 ENUMERATED {true} OPTIONAL -- Need OR ]] } RACH-ConfigCommon-NB-r13 ::= SEQUENCE { preambleTransMax-CE-r13 PreambleTransMax, powerRampingParameters-r13 PowerRampingParameters, rach-InfoList-r13 RACH-InfoList-NB-r13, connEstFailOffset-r13 INTEGER (0..15) OPTIONAL, -- Need OP ... } RACH-InfoList-NB-r13 ::= SEQUENCE (SIZE (1.. maxNPRACH-Resources-NB-r13)) OF RACH-Info-NB-r13 RACH-Info-NB-r13 ::= SEQUENCE { ra-ResponseWindowSize-r13 ENUMERATED { pp2, pp3, pp4, pp5, pp6, pp7, pp8, pp10}, mac-ContentionResolutionTimer-r13 ENUMERATED { pp1, pp2, pp3, pp4, pp8, pp16, pp32, pp64} } RadioResourceConfigCommonSIB-NB-r13 ::= SEQUENCE { rach-ConfigCommon-r13 RACH-ConfigCommon-NB-r13, bcch-Config-r13 BCCH-Config-NB-r13, pcch-Config-r13 PCCH-Config-NB-r13, nprach-Config-r13 NPRACH-ConfigSIB-NB-r13, npdsch-ConfigCommon-r13 NPDSCH-ConfigCommon-NB-r13, npusch-ConfigCommon-r13 NPUSCH-ConfigCommon-NB-r13, dl-Gap-r13 DL-GapConfig-NB-r13 OPTIONAL, -- Need OP uplinkPowerControlCommon-r13 UplinkPowerControlCommon-NB-r13, ..., [[ nprach-Config-v1330 NPRACH-ConfigSIB-NB-v1330 OPTIONAL -- Need OR ]] } BCCH-Config-NB-r13 ::= SEQUENCE { modificationPeriodCoeff-r13 ENUMERATED {n16, n32, n64, n128} } PCCH-Config-NB-r13 ::= SEQUENCE { defaultPagingCycle-r13 ENUMERATED {rf128, rf256, rf512, rf1024}, nB-r13 ENUMERATED { fourT, twoT, oneT, halfT, quarterT, one8thT, one16thT, one32ndT, one64thT, one128thT, one256thT, one512thT, one1024thT, spare3, spare2, spare1}, npdcch-NumRepetitionPaging-r13 ENUMERATED { r1, r2, r4, r8, r16, r32, r64, r128, r256, r512, r1024, r2048, spare4, spare3, spare2, spare1} } RadioResourceConfigDedicated-NB-r13 ::= SEQUENCE { srb-ToAddModList-r13 SRB-ToAddModList-NB-r13 OPTIONAL, -- Need ON drb-ToAddModList-r13 DRB-ToAddModList-NB-r13 OPTIONAL, -- Need ON drb-ToReleaseList-r13 DRB-ToReleaseList-NB-r13 OPTIONAL, -- Need ON mac-MainConfig-r13 CHOICE { explicitValue-r13 MAC-MainConfig-NB-r13, defaultValue-r13 NULL } OPTIONAL, -- Need ON physicalConfigDedicated-r13 PhysicalConfigDedicated-NB-r13 OPTIONAL, -- Need ON rlf-TimersAndConstants-r13 RLF-TimersAndConstants-NB-r13 OPTIONAL, -- Need ON ... } SRB-ToAddModList-NB-r13 ::= SEQUENCE (SIZE (1)) OF SRB-ToAddMod-NB-r13 SRB-ToAddMod-NB-r13 ::= SEQUENCE { rlc-Config-r13 CHOICE { explicitValue RLC-Config-NB-r13, defaultValue NULL } OPTIONAL, -- Cond Setup logicalChannelConfig-r13 CHOICE { explicitValue LogicalChannelConfig-NB-r13, defaultValue NULL } OPTIONAL, -- Cond Setup ..., [[ rlc-Config-v1430 RLC-Config-NB-v1430 OPTIONAL -- Need ON ]] } DRB-ToAddModList-NB-r13 ::= SEQUENCE (SIZE (1..maxDRB-NB-r13)) OF DRB-ToAddMod-NB-r13 DRB-ToAddMod-NB-r13 ::= SEQUENCE { eps-BearerIdentity-r13 INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup drb-Identity-r13 DRB-Identity, pdcp-Config-r13 PDCP-Config-NB-r13 OPTIONAL, -- Cond Setup rlc-Config-r13 RLC-Config-NB-r13 OPTIONAL, -- Cond Setup logicalChannelIdentity-r13 INTEGER (3..10) OPTIONAL, -- Cond DRB-Setup logicalChannelConfig-r13 LogicalChannelConfig-NB-r13 OPTIONAL, -- Cond Setup ..., [[ rlc-Config-v1430 RLC-Config-NB-v1430 OPTIONAL -- Need ON ]] } DRB-ToReleaseList-NB-r13 ::= SEQUENCE (SIZE (1..maxDRB-NB-r13)) OF DRB-Identity 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 }, ... } RLC-Config-NB-v1430 ::= SEQUENCE { t-Reordering-r14 T-Reordering OPTIONAL -- Cond twoHARQ } UL-AM-RLC-NB-r13 ::= SEQUENCE { t-PollRetransmit-r13 T-PollRetransmit-NB-r13, maxRetxThreshold-r13 ENUMERATED {t1, t2, t3, t4, t6, t8, t16, t32} } DL-AM-RLC-NB-r13 ::= SEQUENCE { enableStatusReportSN-Gap-r13 ENUMERATED {true} OPTIONAL } T-PollRetransmit-NB-r13 ::= ENUMERATED { ms250, ms500, ms1000, ms2000, ms3000, ms4000, ms6000, ms10000, ms15000, ms25000, ms40000, ms60000, ms90000, ms120000, ms180000, spare1} RLF-TimersAndConstants-NB-r13 ::= CHOICE { release NULL, setup SEQUENCE { t301-r13 ENUMERATED { ms2500, ms4000, ms6000, ms10000, ms15000, ms25000, ms40000, ms60000}, t310-r13 ENUMERATED { ms0, ms200, ms500, ms1000, ms2000, ms4000, ms8000}, n310-r13 ENUMERATED { n1, n2, n3, n4, n6, n8, n10, n20}, t311-r13 ENUMERATED { ms1000, ms3000, ms5000, ms10000, ms15000, ms20000, ms30000}, n311-r13 ENUMERATED { n1, n2, n3, n4, n5, n6, n8, n10}, ..., [[ t311-v1350 ENUMERATED { ms40000, ms60000, ms90000, ms120000} OPTIONAL -- Need OR ]] } } UplinkPowerControlCommon-NB-r13 ::= SEQUENCE { p0-NominalNPUSCH-r13 INTEGER (-126..24), alpha-r13 ENUMERATED {al0, al04, al05, al06, al07, al08, al09, al1}, deltaPreambleMsg3-r13 INTEGER (-1..6) } UplinkPowerControlDedicated-NB-r13 ::= SEQUENCE { p0-UE-NPUSCH-r13 INTEGER (-8..7) } AdditionalBandInfoList-NB-r14 ::= SEQUENCE (SIZE (1..maxMultiBands)) OF FreqBandIndicator-NB-r13 FreqBandIndicator-NB-r13 ::= INTEGER (1.. maxFBI2) MultiBandInfoList-NB-r13 ::= SEQUENCE (SIZE (1..maxMultiBands)) OF MultiBandInfo-NB-r13 MultiBandInfo-NB-r13 ::= SEQUENCE { freqBandIndicator-r13 FreqBandIndicator-NB-r13 OPTIONAL, -- Need OR freqBandInfo-r13 NS-PmaxList-NB-r13 OPTIONAL -- Need OR } NS-PmaxList-NB-r13 ::= SEQUENCE (SIZE (1..maxNS-Pmax-NB-r13)) OF NS-PmaxValue-NB-r13 NS-PmaxValue-NB-r13 ::= SEQUENCE { additionalPmax-r13 P-Max OPTIONAL, -- Need OR additionalSpectrumEmission-r13 AdditionalSpectrumEmission } ReselectionThreshold-NB-v1360 ::= INTEGER (32..63) T-Reselection-NB-r13 ::= ENUMERATED {s0, s3, s6, s9, s12, s15, s18, s21} EstablishmentCause-NB-r13 ::= ENUMERATED { mt-Access, mo-Signalling, mo-Data, mo-ExceptionData, delayTolerantAccess-v1330, spare3, spare2, spare1} UE-Capability-NB-r13 ::= SEQUENCE { accessStratumRelease-r13 AccessStratumRelease-NB-r13, ue-Category-NB-r13 ENUMERATED {nb1} OPTIONAL, multipleDRB-r13 ENUMERATED {supported} OPTIONAL, pdcp-Parameters-r13 PDCP-Parameters-NB-r13 OPTIONAL, phyLayerParameters-r13 PhyLayerParameters-NB-r13, rf-Parameters-r13 RF-Parameters-NB-r13, nonCriticalExtension UE-Capability-NB-v1430-IEs OPTIONAL } UE-Capability-NB-v1430-IEs ::= SEQUENCE { ue-Category-NB-r14 ENUMERATED {nb2} OPTIONAL, mac-Parameters-r14 MAC-Parameters-NB-r14 OPTIONAL, phyLayerParameters-v1430 PhyLayerParameters-NB-v1430 OPTIONAL, rf-Parameters-v1430 RF-Parameters-NB-v1430, nonCriticalExtension UE-Capability-NB-v1440-IEs OPTIONAL } UE-Capability-NB-v1440-IEs ::= SEQUENCE { phyLayerParameters-v1440 PhyLayerParameters-NB-v1440 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } AccessStratumRelease-NB-r13 ::= ENUMERATED {rel13, rel14, spare6, spare5, spare4, spare3, spare2, spare1, ...} PDCP-Parameters-NB-r13 ::= SEQUENCE { supportedROHC-Profiles-r13 SEQUENCE { profile0x0002 BOOLEAN, profile0x0003 BOOLEAN, profile0x0004 BOOLEAN, profile0x0006 BOOLEAN, profile0x0102 BOOLEAN, profile0x0103 BOOLEAN, profile0x0104 BOOLEAN }, maxNumberROHC-ContextSessions-r13 ENUMERATED {cs2, cs4, cs8, cs12} DEFAULT cs2, ... } MAC-Parameters-NB-r14 ::= SEQUENCE { dataInactMon-r14 ENUMERATED {supported} OPTIONAL, rai-Support-r14 ENUMERATED {supported} OPTIONAL } PhyLayerParameters-NB-r13 ::= SEQUENCE { multiTone-r13 ENUMERATED {supported} OPTIONAL, multiCarrier-r13 ENUMERATED {supported} OPTIONAL } PhyLayerParameters-NB-v1430 ::= SEQUENCE { multiCarrier-NPRACH-r14 ENUMERATED {supported} OPTIONAL, twoHARQ-Processes-r14 ENUMERATED {supported} OPTIONAL } PhyLayerParameters-NB-v1440 ::= SEQUENCE { interferenceRandomisation-r14 ENUMERATED {supported} OPTIONAL } RF-Parameters-NB-r13 ::= SEQUENCE { supportedBandList-r13 SupportedBandList-NB-r13, multiNS-Pmax-r13 ENUMERATED {supported} OPTIONAL } RF-Parameters-NB-v1430 ::= SEQUENCE { powerClassNB-14dBm-r14 ENUMERATED {supported} OPTIONAL } SupportedBandList-NB-r13 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBand-NB-r13 SupportedBand-NB-r13 ::= SEQUENCE { band-r13 FreqBandIndicator-NB-r13, powerClassNB-20dBm-r13 ENUMERATED {supported} OPTIONAL } UE-RadioPagingInfo-NB-r13 ::= SEQUENCE { ue-Category-NB-r13 ENUMERATED {nb1} OPTIONAL, ..., [[ multiCarrierPaging-r14 ENUMERATED {true} OPTIONAL ]] } UE-TimersAndConstants-NB-r13 ::= SEQUENCE { t300-r13 ENUMERATED { ms2500, ms4000, ms6000, ms10000, ms15000, ms25000, ms40000, ms60000}, t301-r13 ENUMERATED { ms2500, ms4000, ms6000, ms10000, ms15000, ms25000, ms40000, ms60000}, t310-r13 ENUMERATED { ms0, ms200, ms500, ms1000, ms2000, ms4000, ms8000}, n310-r13 ENUMERATED { n1, n2, n3, n4, n6, n8, n10, n20}, t311-r13 ENUMERATED { ms1000, ms3000, ms5000, ms10000, ms15000, ms20000, ms30000}, n311-r13 ENUMERATED { n1, n2, n3, n4, n5, n6, n8, n10}, ..., [[ t311-v1350 ENUMERATED { ms40000, ms60000, ms90000, ms120000} OPTIONAL -- Need OR ]] } SC-MTCH-InfoList-NB-r14 ::= SEQUENCE (SIZE (0.. maxSC-MTCH-NB-r14)) OF SC-MTCH-Info-NB-r14 SC-MTCH-Info-NB-r14 ::= SEQUENCE { sc-mtch-CarrierConfig-r14 CHOICE { dl-CarrierConfig-r14 DL-CarrierConfigCommon-NB-r14, dl-CarrierIndex-r14 INTEGER (0.. maxNonAnchorCarriers-NB-r14) }, mbmsSessionInfo-r14 MBMSSessionInfo-r13, g-RNTI-r14 BIT STRING(SIZE(16)), sc-mtch-SchedulingInfo-r14 SC-MTCH-SchedulingInfo-NB-r14 OPTIONAL, -- Need OP sc-mtch-NeighbourCell-r14 BIT STRING (SIZE(maxNeighCell-SCPTM-NB-r14)) OPTIONAL, -- Need OP npdcch-NPDSCH-MaxTBS-SC-MTCH-r14 ENUMERATED {n680, n2536}, npdcch-NumRepetitions-SC-MTCH-r14 ENUMERATED {r1, r2, r4, r8, r16, r32, r64, r128, r256, r512, r1024, r2048, spare4, spare3, spare2, spare1}, npdcch-StartSF-SC-MTCH-r14 ENUMERATED {v1dot5, v2, v4, v8, v16, v32, v48, v64}, npdcch-Offset-SC-MTCH-r14 ENUMERATED {zero, oneEighth, oneQuarter, threeEighth, oneHalf, fiveEighth, threeQuarter, sevenEighth}, ... } SC-MTCH-SchedulingInfo-NB-r14 ::= SEQUENCE { onDurationTimerSCPTM-r14 ENUMERATED { pp1, pp2, pp3, pp4, pp8, pp16, pp32, spare}, drx-InactivityTimerSCPTM-r14 ENUMERATED { pp0, pp1, pp2, pp3, pp4, pp8, pp16, pp32}, schedulingPeriodStartOffsetSCPTM-r14 CHOICE { sf10 INTEGER(0..9), sf20 INTEGER(0..19), sf32 INTEGER(0..31), sf40 INTEGER(0..39), sf64 INTEGER(0..63), sf80 INTEGER(0..79), sf128 INTEGER(0..127), sf160 INTEGER(0..159), sf256 INTEGER(0..255), sf320 INTEGER(0..319), sf512 INTEGER(0..511), sf640 INTEGER(0..639), sf1024 INTEGER(0..1023), sf2048 INTEGER(0..2047), sf4096 INTEGER(0..4095), sf8192 INTEGER(0..8191) }, ... } SCPTM-NeighbourCellList-NB-r14 ::= SEQUENCE (SIZE (1..maxNeighCell-SCPTM-NB-r14)) OF PCI-ARFCN-NB-r14 PCI-ARFCN-NB-r14 ::= SEQUENCE { physCellId-r14 PhysCellId, carrierFreq-r14 CarrierFreq-NB-r13 OPTIONAL -- Need OP } maxNPRACH-Resources-NB-r13 INTEGER ::= 3 -- Maximum number of NPRACH resources for NB-IoT maxNonAnchorCarriers-NB-r14 INTEGER ::= 15 -- Maximum number of non-anchor carriers for NB-IoT maxDRB-NB-r13 INTEGER ::= 2 -- Maximum number of Data Radio Bearers for NB-IoT maxNeighCell-SCPTM-NB-r14 INTEGER ::= 8 -- Maximum number of SCPTM neighbour cells maxNS-Pmax-NB-r13 INTEGER ::= 4 -- Maximum number of NS and P-Max values per band maxSC-MTCH-NB-r14 INTEGER ::= 64 -- Maximum number of SC-MTCHs in one cell for NB-IoT maxSI-Message-NB-r13 INTEGER ::= 8 -- Maximum number of SI messages for NB-IoT END EUTRA-UE-Variables DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS AbsoluteTimeInfo-r10, AreaConfiguration-r10, AreaConfiguration-v1130, CarrierFreqGERAN, CellIdentity, ConnEstFailReport-r11, SpeedStateScaleFactors, C-RNTI, LoggingDuration-r10, LoggingInterval-r10, LogMeasInfo-r10, MeasCSI-RS-Id-r12, MeasId, MeasId-v1250, MeasIdToAddModList, MeasIdToAddModListExt-r12, MeasIdToAddModList-v1310, MeasIdToAddModListExt-v1310, MeasObjectToAddModList, MeasObjectToAddModList-v9e0, MeasObjectToAddModListExt-r13, MeasScaleFactor-r12, MobilityStateParameters, NeighCellConfig, PhysCellId, PhysCellIdCDMA2000, PhysCellIdGERAN, PhysCellIdUTRA-FDD, PhysCellIdUTRA-TDD, PLMN-Identity, PLMN-IdentityList3-r11, QuantityConfig, ReportConfigToAddModList, RLF-Report-r9, TargetMBSFN-AreaList-r12, TraceReference-r10, Tx-ResourcePoolMeasList-r14, VisitedCellInfoList-r12, maxCellMeas, maxCSI-RS-Meas-r12, maxMeasId, maxMeasId-r12, UL-DelayConfig-r13, WLAN-CarrierInfo-r13, WLAN-Identifiers-r12, WLAN-Id-List-r13, WLAN-Status-r13, WLAN-Status-v1430, WLAN-SuspendConfig-r14 FROM EUTRA-RRC-Definitions; VarConnEstFailReport-r11 ::= SEQUENCE { connEstFailReport-r11 ConnEstFailReport-r11, plmn-Identity-r11 PLMN-Identity } VarLogMeasConfig-r10 ::= SEQUENCE { areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, loggingDuration-r10 LoggingDuration-r10, loggingInterval-r10 LoggingInterval-r10 } VarLogMeasConfig-r11 ::= SEQUENCE { areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, areaConfiguration-v1130 AreaConfiguration-v1130 OPTIONAL, loggingDuration-r10 LoggingDuration-r10, loggingInterval-r10 LoggingInterval-r10 } VarLogMeasConfig-r12 ::= SEQUENCE { areaConfiguration-r10 AreaConfiguration-r10 OPTIONAL, areaConfiguration-v1130 AreaConfiguration-v1130 OPTIONAL, loggingDuration-r10 LoggingDuration-r10, loggingInterval-r10 LoggingInterval-r10, targetMBSFN-AreaList-r12 TargetMBSFN-AreaList-r12 OPTIONAL } VarLogMeasReport-r10 ::= SEQUENCE { traceReference-r10 TraceReference-r10, traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), tce-Id-r10 OCTET STRING (SIZE (1)), plmn-Identity-r10 PLMN-Identity, absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, logMeasInfoList-r10 LogMeasInfoList2-r10 } VarLogMeasReport-r11 ::= SEQUENCE { traceReference-r10 TraceReference-r10, traceRecordingSessionRef-r10 OCTET STRING (SIZE (2)), tce-Id-r10 OCTET STRING (SIZE (1)), plmn-IdentityList-r11 PLMN-IdentityList3-r11, absoluteTimeInfo-r10 AbsoluteTimeInfo-r10, logMeasInfoList-r10 LogMeasInfoList2-r10 } LogMeasInfoList2-r10 ::= SEQUENCE (SIZE (1..maxLogMeas-r10)) OF LogMeasInfo-r10 VarMeasConfig ::= SEQUENCE { -- Measurement identities measIdList MeasIdToAddModList OPTIONAL, measIdListExt-r12 MeasIdToAddModListExt-r12 OPTIONAL, measIdList-v1310 MeasIdToAddModList-v1310 OPTIONAL, measIdListExt-v1310 MeasIdToAddModListExt-v1310 OPTIONAL, -- Measurement objects measObjectList MeasObjectToAddModList OPTIONAL, measObjectListExt-r13 MeasObjectToAddModListExt-r13 OPTIONAL, measObjectList-v9i0 MeasObjectToAddModList-v9e0 OPTIONAL, -- Reporting configurations reportConfigList ReportConfigToAddModList OPTIONAL, -- Other parameters quantityConfig QuantityConfig OPTIONAL, measScaleFactor-r12 MeasScaleFactor-r12 OPTIONAL, s-Measure INTEGER (-140..-44) OPTIONAL, speedStatePars CHOICE { release NULL, setup SEQUENCE { mobilityStateParameters MobilityStateParameters, timeToTrigger-SF SpeedStateScaleFactors } } OPTIONAL, allowInterruptions-r11 BOOLEAN OPTIONAL } VarMeasReportList ::= SEQUENCE (SIZE (1..maxMeasId)) OF VarMeasReport VarMeasReportList-r12 ::= SEQUENCE (SIZE (1..maxMeasId-r12)) OF VarMeasReport VarMeasReport ::= SEQUENCE { -- List of measurement that have been triggered measId MeasId, measId-v1250 MeasId-v1250 OPTIONAL, cellsTriggeredList CellsTriggeredList OPTIONAL, csi-RS-TriggeredList-r12 CSI-RS-TriggeredList-r12 OPTIONAL, poolsTriggeredList-r14 Tx-ResourcePoolMeasList-r14 OPTIONAL, numberOfReportsSent INTEGER } CellsTriggeredList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CHOICE { physCellIdEUTRA PhysCellId, physCellIdUTRA CHOICE { fdd PhysCellIdUTRA-FDD, tdd PhysCellIdUTRA-TDD }, physCellIdGERAN SEQUENCE { carrierFreq CarrierFreqGERAN, physCellId PhysCellIdGERAN }, physCellIdCDMA2000 PhysCellIdCDMA2000, wlan-Identifiers-r13 WLAN-Identifiers-r12 } CSI-RS-TriggeredList-r12 ::= SEQUENCE (SIZE (1..maxCSI-RS-Meas-r12)) OF MeasCSI-RS-Id-r12 VarMobilityHistoryReport-r12 ::= VisitedCellInfoList-r12 VarRLF-Report-r10 ::= SEQUENCE { rlf-Report-r10 RLF-Report-r9, plmn-Identity-r10 PLMN-Identity } VarRLF-Report-r11 ::= SEQUENCE { rlf-Report-r10 RLF-Report-r9, plmn-IdentityList-r11 PLMN-IdentityList3-r11 } VarShortMAC-Input ::= SEQUENCE { cellIdentity CellIdentity, physCellId PhysCellId, c-RNTI C-RNTI } VarShortResumeMAC-Input-r13 ::= SEQUENCE { cellIdentity-r13 CellIdentity, physCellId-r13 PhysCellId, c-RNTI-r13 C-RNTI, resumeDiscriminator-r13 BIT STRING(SIZE(1)) } VarWLAN-MobilityConfig ::= SEQUENCE { wlan-MobilitySet-r13 WLAN-Id-List-r13 OPTIONAL, successReportRequested ENUMERATED {true} OPTIONAL, wlan-SuspendConfig-r14 WLAN-SuspendConfig-r14 OPTIONAL } VarWLAN-Status-r13 ::= SEQUENCE { status-r13 WLAN-Status-r13, status-r14 WLAN-Status-v1430 OPTIONAL } maxLogMeas-r10 INTEGER ::= 4060-- Maximum number of logged measurement entries -- that can be stored by the UE END NBIOT-UE-Variables DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS VarShortMAC-Input, VarShortResumeMAC-Input-r13 FROM EUTRA-UE-Variables; VarShortMAC-Input-NB-r13 ::= VarShortMAC-Input VarShortResumeMAC-Input-NB-r13 ::= VarShortResumeMAC-Input-r13 END EUTRA-Sidelink-Preconf DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS AdditionalSpectrumEmission, AdditionalSpectrumEmission-v10l0, ARFCN-ValueEUTRA-r9, FilterCoefficient, maxCBR-Level-r14, maxCBR-Level-1-r14, maxFreq, maxFreqV2X-r14, maxSL-TxPool-r12, maxSL-CommRxPoolPreconf-v1310, maxSL-CommTxPoolPreconf-v1310, maxSL-DiscRxPoolPreconf-r13, maxSL-DiscTxPoolPreconf-r13, maxSL-V2X-CBRConfig2-r14, maxSL-V2X-CBRConfig2-1-r14, maxSL-V2X-RxPoolPreconf-r14, maxSL-V2X-TxConfig2-r14, maxSL-V2X-TxConfig2-1-r14, maxSL-V2X-TxPoolPreconf-r14, P-Max, ReselectionInfoRelay-r13, SL-AnchorCarrierFreqList-V2X-r14, SL-CBR-Levels-Config-r14, SL-CBR-PSSCH-TxConfig-r14, SL-CommTxPoolSensingConfig-r14, SL-CP-Len-r12, SL-HoppingConfigComm-r12, SL-OffsetIndicator-r12, SL-OffsetIndicatorSync-r12, SL-OffsetIndicatorSync-v1430, SL-PeriodComm-r12, RSRP-RangeSL3-r12, SL-PriorityList-r13, SL-TF-ResourceConfig-r12, SL-TRPT-Subset-r12, SL-TxParameters-r12, SL-ZoneConfig-r14, P0-SL-r12, TDD-ConfigSL-r12, SubframeBitmapSL-r14, SL-P2X-ResourceSelectionConfig-r14, SL-RestrictResourceReservationPeriodList-r14, SL-SyncAllowed-r14, SL-OffsetIndicatorSync-r14, SL-Priority-r13 FROM EUTRA-RRC-Definitions; SL-Preconfiguration-r12 ::= SEQUENCE { preconfigGeneral-r12 SL-PreconfigGeneral-r12, preconfigSync-r12 SL-PreconfigSync-r12, preconfigComm-r12 SL-PreconfigCommPoolList4-r12, ..., [[ preconfigComm-v1310 SEQUENCE { commRxPoolList-r13 SL-PreconfigCommRxPoolList-r13, commTxPoolList-r13 SL-PreconfigCommTxPoolList-r13 OPTIONAL } OPTIONAL, preconfigDisc-r13 SEQUENCE { discRxPoolList-r13 SL-PreconfigDiscRxPoolList-r13, discTxPoolList-r13 SL-PreconfigDiscTxPoolList-r13 OPTIONAL } OPTIONAL, preconfigRelay-r13 SL-PreconfigRelay-r13 OPTIONAL ]] } SL-PreconfigGeneral-r12 ::= SEQUENCE { -- PDCP configuration rohc-Profiles-r12 SEQUENCE { profile0x0001-r12 BOOLEAN, profile0x0002-r12 BOOLEAN, profile0x0004-r12 BOOLEAN, profile0x0006-r12 BOOLEAN, profile0x0101-r12 BOOLEAN, profile0x0102-r12 BOOLEAN, profile0x0104-r12 BOOLEAN }, -- Physical configuration carrierFreq-r12 ARFCN-ValueEUTRA-r9, maxTxPower-r12 P-Max, additionalSpectrumEmission-r12 AdditionalSpectrumEmission, sl-bandwidth-r12 ENUMERATED {n6, n15, n25, n50, n75, n100}, tdd-ConfigSL-r12 TDD-ConfigSL-r12, reserved-r12 BIT STRING (SIZE (19)), ..., [[ additionalSpectrumEmission-v1440 AdditionalSpectrumEmission-v10l0 OPTIONAL ]] } SL-PreconfigSync-r12 ::= SEQUENCE { syncCP-Len-r12 SL-CP-Len-r12, syncOffsetIndicator1-r12 SL-OffsetIndicatorSync-r12, syncOffsetIndicator2-r12 SL-OffsetIndicatorSync-r12, syncTxParameters-r12 P0-SL-r12, syncTxThreshOoC-r12 RSRP-RangeSL3-r12, filterCoefficient-r12 FilterCoefficient, syncRefMinHyst-r12 ENUMERATED {dB0, dB3, dB6, dB9, dB12}, syncRefDiffHyst-r12 ENUMERATED {dB0, dB3, dB6, dB9, dB12, dBinf}, ..., [[ syncTxPeriodic-r13 ENUMERATED {true} OPTIONAL ]] } SL-PreconfigCommPoolList4-r12 ::= SEQUENCE (SIZE (1..maxSL-TxPool-r12)) OF SL-PreconfigCommPool-r12 SL-PreconfigCommRxPoolList-r13 ::= SEQUENCE (SIZE (1..maxSL-CommRxPoolPreconf-v1310)) OF SL-PreconfigCommPool-r12 SL-PreconfigCommTxPoolList-r13 ::= SEQUENCE (SIZE (1..maxSL-CommTxPoolPreconf-v1310)) OF SL-PreconfigCommPool-r12 SL-PreconfigCommPool-r12 ::= SEQUENCE { -- This IE is same as SL-CommResourcePool with rxParametersNCell absent sc-CP-Len-r12 SL-CP-Len-r12, sc-Period-r12 SL-PeriodComm-r12, sc-TF-ResourceConfig-r12 SL-TF-ResourceConfig-r12, sc-TxParameters-r12 P0-SL-r12, data-CP-Len-r12 SL-CP-Len-r12, data-TF-ResourceConfig-r12 SL-TF-ResourceConfig-r12, dataHoppingConfig-r12 SL-HoppingConfigComm-r12, dataTxParameters-r12 P0-SL-r12, trpt-Subset-r12 SL-TRPT-Subset-r12, ..., [[ priorityList-r13 SL-PriorityList-r13 OPTIONAL -- For Tx ]] } SL-PreconfigDiscRxPoolList-r13 ::= SEQUENCE (SIZE (1..maxSL-DiscRxPoolPreconf-r13)) OF SL-PreconfigDiscPool-r13 SL-PreconfigDiscTxPoolList-r13 ::= SEQUENCE (SIZE (1..maxSL-DiscTxPoolPreconf-r13)) OF SL-PreconfigDiscPool-r13 SL-PreconfigDiscPool-r13 ::= SEQUENCE { -- This IE is same as SL-DiscResourcePool with rxParameters absent cp-Len-r13 SL-CP-Len-r12, discPeriod-r13 ENUMERATED {rf4, rf6, rf7, rf8, rf12, rf14, rf16, rf24, rf28, rf32, rf64, rf128, rf256, rf512, rf1024, spare}, numRetx-r13 INTEGER (0..3), numRepetition-r13 INTEGER (1..50), tf-ResourceConfig-r13 SL-TF-ResourceConfig-r12, txParameters-r13 SEQUENCE { txParametersGeneral-r13 P0-SL-r12, txProbability-r13 ENUMERATED {p25, p50, p75, p100} } OPTIONAL, ... } SL-PreconfigRelay-r13 ::= SEQUENCE { reselectionInfoOoC-r13 ReselectionInfoRelay-r13 } SL-V2X-Preconfiguration-r14 ::= SEQUENCE { v2x-PreconfigFreqList-r14 SL-V2X-PreconfigFreqList-r14, anchorCarrierFreqList-r14 SL-AnchorCarrierFreqList-V2X-r14 OPTIONAL, cbr-PreconfigList-r14 SL-CBR-PreconfigTxConfigList-r14 OPTIONAL, ... } SL-CBR-PreconfigTxConfigList-r14 ::= SEQUENCE { cbr-RangeCommonConfigList-r14 SEQUENCE (SIZE (1..maxSL-V2X-CBRConfig2-r14)) OF SL-CBR-Levels-Config-r14, sl-CBR-PSSCH-TxConfigList-r14 SEQUENCE (SIZE (1..maxSL-V2X-TxConfig2-r14)) OF SL-CBR-PSSCH-TxConfig-r14 } SL-V2X-PreconfigFreqList-r14 ::= SEQUENCE (SIZE (1..maxFreqV2X-r14)) OF SL-V2X-PreconfigFreqInfo-r14 SL-V2X-PreconfigFreqInfo-r14 ::= SEQUENCE { v2x-CommPreconfigGeneral-r14 SL-PreconfigGeneral-r12, v2x-CommPreconfigSync-r14 SL-PreconfigV2X-Sync-r14 OPTIONAL, v2x-CommRxPoolList-r14 SL-PreconfigV2X-RxPoolList-r14, v2x-CommTxPoolList-r14 SL-PreconfigV2X-TxPoolList-r14, p2x-CommTxPoolList-r14 SL-PreconfigV2X-TxPoolList-r14, v2x-ResourceSelectionConfig-r14 SL-CommTxPoolSensingConfig-r14 OPTIONAL, zoneConfig-r14 SL-ZoneConfig-r14 OPTIONAL, syncPriority-r14 ENUMERATED {gnss, enb}, thresSL-TxPrioritization-r14 SL-Priority-r13 OPTIONAL, offsetDFN-r14 INTEGER (0..1000) OPTIONAL, ... } SL-PreconfigV2X-RxPoolList-r14 ::= SEQUENCE (SIZE (1..maxSL-V2X-RxPoolPreconf-r14)) OF SL-V2X-PreconfigCommPool-r14 SL-PreconfigV2X-TxPoolList-r14 ::= SEQUENCE (SIZE (1..maxSL-V2X-TxPoolPreconf-r14)) OF SL-V2X-PreconfigCommPool-r14 SL-V2X-PreconfigCommPool-r14 ::= SEQUENCE { -- This IE is same as SL-CommResourcePoolV2X with rxParametersNCell absent sl-OffsetIndicator-r14 SL-OffsetIndicator-r12 OPTIONAL, sl-Subframe-r14 SubframeBitmapSL-r14, adjacencyPSCCH-PSSCH-r14 BOOLEAN, sizeSubchannel-r14 ENUMERATED { n4, n5, n6, n8, n9, n10, n12, n15, n16, n18, n20, n25, n30, n48, n50, n72, n75, n96, n100, spare13, spare12, spare11, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}, numSubchannel-r14 ENUMERATED {n1, n3, n5, n8, n10, n15, n20, spare1}, startRB-Subchannel-r14 INTEGER (0..99), startRB-PSCCH-Pool-r14 INTEGER (0..99) OPTIONAL, dataTxParameters-r14 P0-SL-r12, zoneID-r14 INTEGER (0..7) OPTIONAL, threshS-RSSI-CBR-r14 INTEGER (0..45) OPTIONAL, cbr-pssch-TxConfigList-r14 SL-CBR-PPPP-TxPreconfigList-r14 OPTIONAL, resourceSelectionConfigP2X-r14 SL-P2X-ResourceSelectionConfig-r14 OPTIONAL, syncAllowed-r14 SL-SyncAllowed-r14 OPTIONAL, restrictResourceReservationPeriod-r14 SL-RestrictResourceReservationPeriodList-r14 OPTIONAL, -- Need OR ... } SL-PreconfigV2X-Sync-r14 ::= SEQUENCE { syncOffsetIndicators-r14 SL-V2X-SyncOffsetIndicators-r14, syncTxParameters-r14 P0-SL-r12, syncTxThreshOoC-r14 RSRP-RangeSL3-r12, filterCoefficient-r14 FilterCoefficient, syncRefMinHyst-r14 ENUMERATED {dB0, dB3, dB6, dB9, dB12}, syncRefDiffHyst-r14 ENUMERATED {dB0, dB3, dB6, dB9, dB12, dBinf}, ... } SL-V2X-SyncOffsetIndicators-r14 ::= SEQUENCE { syncOffsetIndicator1-r14 SL-OffsetIndicatorSync-r14, syncOffsetIndicator2-r14 SL-OffsetIndicatorSync-r14, syncOffsetIndicator3-r14 SL-OffsetIndicatorSync-r14 OPTIONAL } SL-CBR-PPPP-TxPreconfigList-r14 ::= SEQUENCE (SIZE (1..8)) OF SL-PPPP-TxPreconfigIndex-r14 SL-PPPP-TxPreconfigIndex-r14 ::= SEQUENCE { priorityThreshold-r14 SL-Priority-r13, defaultTxConfigIndex-r14 INTEGER(0..maxCBR-Level-1-r14), cbr-ConfigIndex-r14 INTEGER(0..maxSL-V2X-CBRConfig2-1-r14), tx-ConfigIndexList-r14 SEQUENCE (SIZE (1..maxCBR-Level-r14)) OF Tx-PreconfigIndex-r14 } Tx-PreconfigIndex-r14 ::= INTEGER(0..maxSL-V2X-TxConfig2-1-r14) END EUTRA-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS AntennaInfoCommon, AntennaInfoDedicated-v10i0, ARFCN-ValueEUTRA, ARFCN-ValueEUTRA-v9e0, ARFCN-ValueEUTRA-r9, CellIdentity, C-RNTI, DL-DCCH-Message, DRB-Identity, DRB-ToReleaseList, FreqBandIndicator-r11, InDeviceCoexIndication-r11, LWA-Config-r13, MasterInformationBlock, maxBands, maxFreq, maxDRB, maxSCell-r10, maxSCell-r13, maxServCell-r10, maxServCell-r13, MBMSInterestIndication-r11, MeasConfig, MeasGapConfig, MeasGapConfigPerCC-List-r14, MeasResultForRSSI-r13, MeasResultListWLAN-r13, OtherConfig-r9, PhysCellId, P-Max, PowerCoordinationInfo-r12, SidelinkUEInformation-r12, SL-CommConfig-r12, SL-DiscConfig-r12, RadioResourceConfigDedicated, RCLWI-Configuration-r13, RSRP-Range, RSRQ-Range, RSRQ-Range-v1250, RS-SINR-Range-r13, SCellToAddModList-r10, SCellToAddModListExt-r13, SCG-ConfigPartSCG-r12, SecurityAlgorithmConfig, SCellIndex-r10, SCellIndex-r13, SCellToReleaseList-r10, SCellToReleaseListExt-r13, ServCellIndex-r10, ServCellIndex-r13, ShortMAC-I, MeasResultSSTD-r13, SL-V2X-ConfigDedicated-r14, SystemInformationBlockType1, SystemInformationBlockType1-v890-IEs, SystemInformationBlockType2, UEAssistanceInformation-r11, UECapabilityInformation, UE-CapabilityRAT-ContainerList, UE-RadioPagingInfo-r12, WLANConnectionStatusReport-r13, WLAN-OffloadConfig-r12 FROM EUTRA-RRC-Definitions; HandoverCommand ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ handoverCommand-r8 HandoverCommand-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } HandoverCommand-r8-IEs ::= SEQUENCE { handoverCommandMessage OCTET STRING (CONTAINING DL-DCCH-Message), nonCriticalExtension SEQUENCE {} OPTIONAL } HandoverPreparationInformation ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ handoverPreparationInformation-r8 HandoverPreparationInformation-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } HandoverPreparationInformation-r8-IEs ::= SEQUENCE { ue-RadioAccessCapabilityInfo UE-CapabilityRAT-ContainerList, as-Config AS-Config OPTIONAL, -- Cond HO rrm-Config RRM-Config OPTIONAL, as-Context AS-Context OPTIONAL, -- Cond HO nonCriticalExtension HandoverPreparationInformation-v920-IEs OPTIONAL } HandoverPreparationInformation-v920-IEs ::= SEQUENCE { ue-ConfigRelease-r9 ENUMERATED { rel9, rel10, rel11, rel12, v10j0, v11e0, v1280, rel13, ..., rel14} OPTIONAL, -- Cond HO2 nonCriticalExtension HandoverPreparationInformation-v9d0-IEs OPTIONAL } HandoverPreparationInformation-v9d0-IEs ::= SEQUENCE { lateNonCriticalExtension OCTET STRING (CONTAINING HandoverPreparationInformation-v9j0-IEs) OPTIONAL, nonCriticalExtension HandoverPreparationInformation-v9e0-IEs OPTIONAL } -- Late non-critical extensions: HandoverPreparationInformation-v9j0-IEs ::= SEQUENCE { -- Following field is only for pre REL-10 late non-critical extensions lateNonCriticalExtension OCTET STRING OPTIONAL, nonCriticalExtension HandoverPreparationInformation-v10j0-IEs OPTIONAL } HandoverPreparationInformation-v10j0-IEs ::= SEQUENCE { as-Config-v10j0 AS-Config-v10j0 OPTIONAL, -- Following field is only for late non-critical extensions from REL-10 nonCriticalExtension SEQUENCE {} OPTIONAL } -- Regular non-critical extensions: HandoverPreparationInformation-v9e0-IEs ::= SEQUENCE { as-Config-v9e0 AS-Config-v9e0 OPTIONAL, -- Cond HO2 nonCriticalExtension HandoverPreparationInformation-v1130-IEs OPTIONAL } HandoverPreparationInformation-v1130-IEs ::= SEQUENCE { as-Context-v1130 AS-Context-v1130 OPTIONAL, -- Cond HO2 nonCriticalExtension HandoverPreparationInformation-v1250-IEs OPTIONAL } HandoverPreparationInformation-v1250-IEs ::= SEQUENCE { ue-SupportedEARFCN-r12 ARFCN-ValueEUTRA-r9 OPTIONAL, -- Cond HO3 as-Config-v1250 AS-Config-v1250 OPTIONAL, -- Cond HO2 nonCriticalExtension HandoverPreparationInformation-v1320-IEs OPTIONAL } HandoverPreparationInformation-v1320-IEs ::= SEQUENCE { as-Config-v1320 AS-Config-v1320 OPTIONAL, -- Cond HO2 as-Context-v1320 AS-Context-v1320 OPTIONAL, -- Cond HO2 nonCriticalExtension HandoverPreparationInformation-v1430-IEs OPTIONAL } HandoverPreparationInformation-v1430-IEs ::= SEQUENCE { as-Config-v1430 AS-Config-v1430 OPTIONAL, -- Cond HO2 makeBeforeBreakReq-r14 ENUMERATED {true} OPTIONAL, -- Cond HO2 nonCriticalExtension SEQUENCE {} OPTIONAL } SCG-Config-r12 ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ scg-Config-r12 SCG-Config-r12-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } SCG-Config-r12-IEs ::= SEQUENCE { scg-RadioConfig-r12 SCG-ConfigPartSCG-r12 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } SCG-ConfigInfo-r12 ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ scg-ConfigInfo-r12 SCG-ConfigInfo-r12-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } SCG-ConfigInfo-r12-IEs ::= SEQUENCE { radioResourceConfigDedMCG-r12 RadioResourceConfigDedicated OPTIONAL, sCellToAddModListMCG-r12 SCellToAddModList-r10 OPTIONAL, measGapConfig-r12 MeasGapConfig OPTIONAL, powerCoordinationInfo-r12 PowerCoordinationInfo-r12 OPTIONAL, scg-RadioConfig-r12 SCG-ConfigPartSCG-r12 OPTIONAL, eutra-CapabilityInfo-r12 OCTET STRING (CONTAINING UECapabilityInformation) OPTIONAL, scg-ConfigRestrictInfo-r12 SCG-ConfigRestrictInfo-r12 OPTIONAL, mbmsInterestIndication-r12 OCTET STRING (CONTAINING MBMSInterestIndication-r11) OPTIONAL, measResultServCellListSCG-r12 MeasResultServCellListSCG-r12 OPTIONAL, drb-ToAddModListSCG-r12 DRB-InfoListSCG-r12 OPTIONAL, drb-ToReleaseListSCG-r12 DRB-ToReleaseList OPTIONAL, sCellToAddModListSCG-r12 SCellToAddModListSCG-r12 OPTIONAL, sCellToReleaseListSCG-r12 SCellToReleaseList-r10 OPTIONAL, p-Max-r12 P-Max OPTIONAL, nonCriticalExtension SCG-ConfigInfo-v1310-IEs OPTIONAL } SCG-ConfigInfo-v1310-IEs ::= SEQUENCE { measResultSSTD-r13 MeasResultSSTD-r13 OPTIONAL, sCellToAddModListMCG-Ext-r13 SCellToAddModListExt-r13 OPTIONAL, measResultServCellListSCG-Ext-r13 MeasResultServCellListSCG-Ext-r13 OPTIONAL, sCellToAddModListSCG-Ext-r13 SCellToAddModListSCG-Ext-r13 OPTIONAL, sCellToReleaseListSCG-Ext-r13 SCellToReleaseListExt-r13 OPTIONAL, nonCriticalExtension SCG-ConfigInfo-v1330-IEs OPTIONAL } SCG-ConfigInfo-v1330-IEs ::= SEQUENCE { measResultListRSSI-SCG-r13 MeasResultListRSSI-SCG-r13 OPTIONAL, nonCriticalExtension SCG-ConfigInfo-v1430-IEs OPTIONAL } SCG-ConfigInfo-v1430-IEs ::= SEQUENCE { makeBeforeBreakSCG-Req-r14 ENUMERATED {true} OPTIONAL, measGapConfigPerCC-List MeasGapConfigPerCC-List-r14 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } DRB-InfoListSCG-r12 ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-InfoSCG-r12 DRB-InfoSCG-r12 ::= SEQUENCE { eps-BearerIdentity-r12 INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup drb-Identity-r12 DRB-Identity, drb-Type-r12 ENUMERATED {split, scg} OPTIONAL, -- Cond DRB-Setup ... } SCellToAddModListSCG-r12 ::= SEQUENCE (SIZE (1..maxSCell-r10)) OF Cell-ToAddMod-r12 SCellToAddModListSCG-Ext-r13 ::= SEQUENCE (SIZE (1..maxSCell-r13)) OF Cell-ToAddMod-r12 Cell-ToAddMod-r12 ::= SEQUENCE { sCellIndex-r12 SCellIndex-r10, cellIdentification-r12 SEQUENCE { physCellId-r12 PhysCellId, dl-CarrierFreq-r12 ARFCN-ValueEUTRA-r9 } OPTIONAL, -- Cond SCellAdd measResultCellToAdd-r12 SEQUENCE { rsrpResult-r12 RSRP-Range, rsrqResult-r12 RSRQ-Range } OPTIONAL, -- Cond SCellAdd2 ..., [[ sCellIndex-r13 SCellIndex-r13 OPTIONAL, measResultCellToAdd-v1310 SEQUENCE { rs-sinr-Result-r13 RS-SINR-Range-r13 } OPTIONAL -- Cond SCellAdd2 ]] } MeasResultServCellListSCG-r12 ::= SEQUENCE (SIZE (1..maxServCell-r10)) OF MeasResultServCellSCG-r12 MeasResultServCellListSCG-Ext-r13 ::= SEQUENCE (SIZE (1..maxServCell-r13)) OF MeasResultServCellSCG-r12 MeasResultServCellSCG-r12 ::= SEQUENCE { servCellId-r12 ServCellIndex-r10, measResultSCell-r12 SEQUENCE { rsrpResultSCell-r12 RSRP-Range, rsrqResultSCell-r12 RSRQ-Range }, ..., [[ servCellId-r13 ServCellIndex-r13 OPTIONAL, measResultSCell-v1310 SEQUENCE { rs-sinr-ResultSCell-r13 RS-SINR-Range-r13 } OPTIONAL ]] } MeasResultListRSSI-SCG-r13 ::= SEQUENCE (SIZE (1..maxServCell-r13)) OF MeasResultRSSI-SCG-r13 MeasResultRSSI-SCG-r13 ::= SEQUENCE { servCellId-r13 ServCellIndex-r13, measResultForRSSI-r13 MeasResultForRSSI-r13 } SCG-ConfigRestrictInfo-r12 ::= SEQUENCE { maxSCH-TB-BitsDL-r12 INTEGER (1..100), maxSCH-TB-BitsUL-r12 INTEGER (1..100) } UEPagingCoverageInformation ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ uePagingCoverageInformation-r13 UEPagingCoverageInformation-r13-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UEPagingCoverageInformation-r13-IEs ::= SEQUENCE { mpdcch-NumRepetition-r13 INTEGER (1..256) OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } UERadioAccessCapabilityInformation ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ ueRadioAccessCapabilityInformation-r8 UERadioAccessCapabilityInformation-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UERadioAccessCapabilityInformation-r8-IEs ::= SEQUENCE { ue-RadioAccessCapabilityInfo OCTET STRING (CONTAINING UECapabilityInformation), nonCriticalExtension SEQUENCE {} OPTIONAL } UERadioPagingInformation ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ ueRadioPagingInformation-r12 UERadioPagingInformation-r12-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UERadioPagingInformation-r12-IEs ::= SEQUENCE { ue-RadioPagingInfo-r12 OCTET STRING (CONTAINING UE-RadioPagingInfo-r12), nonCriticalExtension UERadioPagingInformation-v1310-IEs OPTIONAL } UERadioPagingInformation-v1310-IEs ::= SEQUENCE { supportedBandListEUTRAForPaging-r13 SEQUENCE (SIZE (1..maxBands)) OF FreqBandIndicator-r11 OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } AS-Config ::= SEQUENCE { sourceMeasConfig MeasConfig, sourceRadioResourceConfig RadioResourceConfigDedicated, sourceSecurityAlgorithmConfig SecurityAlgorithmConfig, sourceUE-Identity C-RNTI, sourceMasterInformationBlock MasterInformationBlock, sourceSystemInformationBlockType1 SystemInformationBlockType1(WITH COMPONENTS {..., nonCriticalExtension ABSENT}), sourceSystemInformationBlockType2 SystemInformationBlockType2, antennaInfoCommon AntennaInfoCommon, sourceDl-CarrierFreq ARFCN-ValueEUTRA, ..., [[ sourceSystemInformationBlockType1Ext OCTET STRING (CONTAINING SystemInformationBlockType1-v890-IEs) OPTIONAL, sourceOtherConfig-r9 OtherConfig-r9 -- sourceOtherConfig-r9 should have been optional. A target eNB compliant with this transfer -- syntax should support receiving an AS-Config not including this extension addition group -- e.g. from a legacy source eNB ]], [[ sourceSCellConfigList-r10 SCellToAddModList-r10 OPTIONAL ]], [[ sourceConfigSCG-r12 SCG-Config-r12 OPTIONAL ]] } AS-Config-v9e0 ::= SEQUENCE { sourceDl-CarrierFreq-v9e0 ARFCN-ValueEUTRA-v9e0 } AS-Config-v10j0 ::= SEQUENCE { antennaInfoDedicatedPCell-v10i0 AntennaInfoDedicated-v10i0 OPTIONAL } AS-Config-v1250 ::= SEQUENCE { sourceWlan-OffloadConfig-r12 WLAN-OffloadConfig-r12 OPTIONAL, sourceSL-CommConfig-r12 SL-CommConfig-r12 OPTIONAL, sourceSL-DiscConfig-r12 SL-DiscConfig-r12 OPTIONAL } AS-Config-v1320 ::= SEQUENCE { sourceSCellConfigList-r13 SCellToAddModListExt-r13 OPTIONAL, sourceRCLWI-Configuration-r13 RCLWI-Configuration-r13 OPTIONAL } AS-Config-v1430 ::= SEQUENCE { sourceSL-V2X-CommConfig-r14 SL-V2X-ConfigDedicated-r14 OPTIONAL, sourceLWA-Config-r14 LWA-Config-r13 OPTIONAL, sourceWLAN-MeasResult-r14 MeasResultListWLAN-r13 OPTIONAL } AS-Context ::= SEQUENCE { reestablishmentInfo ReestablishmentInfo OPTIONAL -- Cond HO } AS-Context-v1130 ::= SEQUENCE { idc-Indication-r11 OCTET STRING (CONTAINING InDeviceCoexIndication-r11) OPTIONAL, -- Cond HO2 mbmsInterestIndication-r11 OCTET STRING (CONTAINING MBMSInterestIndication-r11) OPTIONAL, -- Cond HO2 powerPrefIndication-r11 OCTET STRING (CONTAINING UEAssistanceInformation-r11) OPTIONAL, -- Cond HO2 ..., [[ sidelinkUEInformation-r12 OCTET STRING (CONTAINING SidelinkUEInformation-r12) OPTIONAL -- Cond HO2 ]] } AS-Context-v1320 ::= SEQUENCE { wlanConnectionStatusReport-r13 OCTET STRING (CONTAINING WLANConnectionStatusReport-r13) OPTIONAL -- Cond HO2 } ReestablishmentInfo ::= SEQUENCE { sourcePhysCellId PhysCellId, targetCellShortMAC-I ShortMAC-I, additionalReestabInfoList AdditionalReestabInfoList OPTIONAL, ... } AdditionalReestabInfoList ::= SEQUENCE ( SIZE (1..maxReestabInfo) ) OF AdditionalReestabInfo AdditionalReestabInfo ::= SEQUENCE{ cellIdentity CellIdentity, key-eNodeB-Star Key-eNodeB-Star, shortMAC-I ShortMAC-I } Key-eNodeB-Star ::= BIT STRING (SIZE (256)) RRM-Config ::= SEQUENCE { ue-InactiveTime ENUMERATED { s1, s2, s3, s5, s7, s10, s15, s20, s25, s30, s40, s50, min1, min1s20c, min1s40, min2, min2s30, min3, min3s30, min4, min5, min6, min7, min8, min9, min10, min12, min14, min17, min20, min24, min28, min33, min38, min44, min50, hr1, hr1min30, hr2, hr2min30, hr3, hr3min30, hr4, hr5, hr6, hr8, hr10, hr13, hr16, hr20, day1, day1hr12, day2, day2hr12, day3, day4, day5, day7, day10, day14, day19, day24, day30, dayMoreThan30} OPTIONAL, ..., [[ candidateCellInfoList-r10 CandidateCellInfoList-r10 OPTIONAL ]] } CandidateCellInfoList-r10 ::= SEQUENCE (SIZE (1..maxFreq)) OF CandidateCellInfo-r10 CandidateCellInfo-r10 ::= SEQUENCE { -- cellIdentification physCellId-r10 PhysCellId, dl-CarrierFreq-r10 ARFCN-ValueEUTRA, -- available measurement results rsrpResult-r10 RSRP-Range OPTIONAL, rsrqResult-r10 RSRQ-Range OPTIONAL, ..., [[ dl-CarrierFreq-v1090 ARFCN-ValueEUTRA-v9e0 OPTIONAL ]], [[ rsrqResult-v1250 RSRQ-Range-v1250 OPTIONAL ]], [[ rs-sinr-Result-r13 RS-SINR-Range-r13 OPTIONAL ]] } maxReestabInfo INTEGER ::= 32 -- Maximum number of KeNB* and shortMAC-I forwarded -- at handover for re-establishment preparation END NBIOT-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS C-RNTI, PhysCellId, SecurityAlgorithmConfig, ShortMAC-I FROM EUTRA-RRC-Definitions AdditionalReestabInfoList FROM EUTRA-InterNodeDefinitions CarrierFreq-NB-r13, RadioResourceConfigDedicated-NB-r13, UE-Capability-NB-r13, UE-RadioPagingInfo-NB-r13 FROM NBIOT-RRC-Definitions; HandoverPreparationInformation-NB ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ handoverPreparationInformation-r13 HandoverPreparationInformation-NB-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } HandoverPreparationInformation-NB-IEs ::= SEQUENCE { ue-RadioAccessCapabilityInfo-r13 UE-Capability-NB-r13, as-Config-r13 AS-Config-NB, rrm-Config-r13 RRM-Config-NB OPTIONAL, as-Context-r13 AS-Context-NB OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } UEPagingCoverageInformation-NB ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ uePagingCoverageInformation-r13 UEPagingCoverageInformation-NB-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UEPagingCoverageInformation-NB-IEs ::= SEQUENCE { -- the possible value(s) can differ from those sent on Uu npdcch-NumRepetitionPaging-r13 INTEGER (1..2048) OPTIONAL, nonCriticalExtension SEQUENCE {} OPTIONAL } UERadioAccessCapabilityInformation-NB ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ ueRadioAccessCapabilityInformation-r13 UERadioAccessCapabilityInformation-NB-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UERadioAccessCapabilityInformation-NB-IEs ::= SEQUENCE { ue-RadioAccessCapabilityInfo-r13 OCTET STRING (CONTAINING UE-Capability-NB-r13), nonCriticalExtension SEQUENCE {} OPTIONAL } UERadioPagingInformation-NB ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ ueRadioPagingInformation-r13 UERadioPagingInformation-NB-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UERadioPagingInformation-NB-IEs ::= SEQUENCE { ue-RadioPagingInfo-r13 OCTET STRING (CONTAINING UE-RadioPagingInfo-NB-r13), nonCriticalExtension SEQUENCE {} OPTIONAL } AS-Config-NB ::= SEQUENCE { sourceRadioResourceConfig-r13 RadioResourceConfigDedicated-NB-r13, sourceSecurityAlgorithmConfig-r13 SecurityAlgorithmConfig, sourceUE-Identity-r13 C-RNTI, sourceDl-CarrierFreq-r13 CarrierFreq-NB-r13, ... } AS-Context-NB ::= SEQUENCE { reestablishmentInfo-r13 ReestablishmentInfo-NB OPTIONAL, ... } ReestablishmentInfo-NB ::= SEQUENCE { sourcePhysCellId-r13 PhysCellId, targetCellShortMAC-I-r13 ShortMAC-I, additionalReestabInfoList-r13 AdditionalReestabInfoList OPTIONAL, ... } RRM-Config-NB ::= SEQUENCE { ue-InactiveTime ENUMERATED { s1, s2, s3, s5, s7, s10, s15, s20, s25, s30, s40, s50, min1, min1s20, min1s40, min2, min2s30, min3, min3s30, min4, min5, min6, min7, min8, min9, min10, min12, min14, min17, min20, min24, min28, min33, min38, min44, min50, hr1, hr1min30, hr2, hr2min30, hr3, hr3min30, hr4, hr5, hr6, hr8, hr10, hr13, hr16, hr20, day1, day1hr12, day2, day2hr12, day3, day4, day5, day7, day10, day14, day19, day24, day30, dayMoreThan30} OPTIONAL, ... } END asn1tools-0.169.0/tests/files/3gpp/rrc_14_4_0.py000066400000000000000000145340241524544274600210670ustar00rootroot00000000000000EXPECTED = {'EUTRA-InterNodeDefinitions': {'extensibility-implied': False, 'imports': {'EUTRA-RRC-Definitions': ['ARFCN-ValueEUTRA', 'ARFCN-ValueEUTRA-r9', 'ARFCN-ValueEUTRA-v9e0', 'AntennaInfoCommon', 'AntennaInfoDedicated-v10i0', 'C-RNTI', 'CellIdentity', 'DL-DCCH-Message', 'DRB-Identity', 'DRB-ToReleaseList', 'FreqBandIndicator-r11', 'InDeviceCoexIndication-r11', 'LWA-Config-r13', 'MBMSInterestIndication-r11', 'MasterInformationBlock', 'MeasConfig', 'MeasGapConfig', 'MeasGapConfigPerCC-List-r14', 'MeasResultForRSSI-r13', 'MeasResultListWLAN-r13', 'MeasResultSSTD-r13', 'OtherConfig-r9', 'P-Max', 'PhysCellId', 'PowerCoordinationInfo-r12', 'RCLWI-Configuration-r13', 'RS-SINR-Range-r13', 'RSRP-Range', 'RSRQ-Range', 'RSRQ-Range-v1250', 'RadioResourceConfigDedicated', 'SCG-ConfigPartSCG-r12', 'SCellIndex-r10', 'SCellIndex-r13', 'SCellToAddModList-r10', 'SCellToAddModListExt-r13', 'SCellToReleaseList-r10', 'SCellToReleaseListExt-r13', 'SL-CommConfig-r12', 'SL-DiscConfig-r12', 'SL-V2X-ConfigDedicated-r14', 'SecurityAlgorithmConfig', 'ServCellIndex-r10', 'ServCellIndex-r13', 'ShortMAC-I', 'SidelinkUEInformation-r12', 'SystemInformationBlockType1', 'SystemInformationBlockType1-v890-IEs', 'SystemInformationBlockType2', 'UE-CapabilityRAT-ContainerList', 'UE-RadioPagingInfo-r12', 'UEAssistanceInformation-r11', 'UECapabilityInformation', 'WLAN-OffloadConfig-r12', 'WLANConnectionStatusReport-r13', 'maxBands', 'maxDRB', 'maxFreq', 'maxSCell-r10', 'maxSCell-r13', 'maxServCell-r10', 'maxServCell-r13']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AS-Config': {'members': [{'name': 'sourceMeasConfig', 'type': 'MeasConfig'}, {'name': 'sourceRadioResourceConfig', 'type': 'RadioResourceConfigDedicated'}, {'name': 'sourceSecurityAlgorithmConfig', 'type': 'SecurityAlgorithmConfig'}, {'name': 'sourceUE-Identity', 'type': 'C-RNTI'}, {'name': 'sourceMasterInformationBlock', 'type': 'MasterInformationBlock'}, {'name': 'sourceSystemInformationBlockType1', 'type': 'SystemInformationBlockType1', 'with-components': [None, ('nonCriticalExtension', 'ABSENT')]}, {'name': 'sourceSystemInformationBlockType2', 'type': 'SystemInformationBlockType2'}, {'name': 'antennaInfoCommon', 'type': 'AntennaInfoCommon'}, {'name': 'sourceDl-CarrierFreq', 'type': 'ARFCN-ValueEUTRA'}, None, [{'name': 'sourceSystemInformationBlockType1Ext', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'sourceOtherConfig-r9', 'type': 'OtherConfig-r9'}], [{'name': 'sourceSCellConfigList-r10', 'optional': True, 'type': 'SCellToAddModList-r10'}], [{'name': 'sourceConfigSCG-r12', 'optional': True, 'type': 'SCG-Config-r12'}]], 'type': 'SEQUENCE'}, 'AS-Config-v10j0': {'members': [{'name': 'antennaInfoDedicatedPCell-v10i0', 'optional': True, 'type': 'AntennaInfoDedicated-v10i0'}], 'type': 'SEQUENCE'}, 'AS-Config-v1250': {'members': [{'name': 'sourceWlan-OffloadConfig-r12', 'optional': True, 'type': 'WLAN-OffloadConfig-r12'}, {'name': 'sourceSL-CommConfig-r12', 'optional': True, 'type': 'SL-CommConfig-r12'}, {'name': 'sourceSL-DiscConfig-r12', 'optional': True, 'type': 'SL-DiscConfig-r12'}], 'type': 'SEQUENCE'}, 'AS-Config-v1320': {'members': [{'name': 'sourceSCellConfigList-r13', 'optional': True, 'type': 'SCellToAddModListExt-r13'}, {'name': 'sourceRCLWI-Configuration-r13', 'optional': True, 'type': 'RCLWI-Configuration-r13'}], 'type': 'SEQUENCE'}, 'AS-Config-v1430': {'members': [{'name': 'sourceSL-V2X-CommConfig-r14', 'optional': True, 'type': 'SL-V2X-ConfigDedicated-r14'}, {'name': 'sourceLWA-Config-r14', 'optional': True, 'type': 'LWA-Config-r13'}, {'name': 'sourceWLAN-MeasResult-r14', 'optional': True, 'type': 'MeasResultListWLAN-r13'}], 'type': 'SEQUENCE'}, 'AS-Config-v9e0': {'members': [{'name': 'sourceDl-CarrierFreq-v9e0', 'type': 'ARFCN-ValueEUTRA-v9e0'}], 'type': 'SEQUENCE'}, 'AS-Context': {'members': [{'name': 'reestablishmentInfo', 'optional': True, 'type': 'ReestablishmentInfo'}], 'type': 'SEQUENCE'}, 'AS-Context-v1130': {'members': [{'name': 'idc-Indication-r11', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'mbmsInterestIndication-r11', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'powerPrefIndication-r11', 'optional': True, 'type': 'OCTET ' 'STRING'}, None, [{'name': 'sidelinkUEInformation-r12', 'optional': True, 'type': 'OCTET ' 'STRING'}]], 'type': 'SEQUENCE'}, 'AS-Context-v1320': {'members': [{'name': 'wlanConnectionStatusReport-r13', 'optional': True, 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'AdditionalReestabInfo': {'members': [{'name': 'cellIdentity', 'type': 'CellIdentity'}, {'name': 'key-eNodeB-Star', 'type': 'Key-eNodeB-Star'}, {'name': 'shortMAC-I', 'type': 'ShortMAC-I'}], 'type': 'SEQUENCE'}, 'AdditionalReestabInfoList': {'element': {'type': 'AdditionalReestabInfo'}, 'size': [(1, 'maxReestabInfo')], 'type': 'SEQUENCE ' 'OF'}, 'CandidateCellInfo-r10': {'members': [{'name': 'physCellId-r10', 'type': 'PhysCellId'}, {'name': 'dl-CarrierFreq-r10', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'rsrpResult-r10', 'optional': True, 'type': 'RSRP-Range'}, {'name': 'rsrqResult-r10', 'optional': True, 'type': 'RSRQ-Range'}, None, [{'name': 'dl-CarrierFreq-v1090', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9e0'}], [{'name': 'rsrqResult-v1250', 'optional': True, 'type': 'RSRQ-Range-v1250'}], [{'name': 'rs-sinr-Result-r13', 'optional': True, 'type': 'RS-SINR-Range-r13'}]], 'type': 'SEQUENCE'}, 'CandidateCellInfoList-r10': {'element': {'type': 'CandidateCellInfo-r10'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'Cell-ToAddMod-r12': {'members': [{'name': 'sCellIndex-r12', 'type': 'SCellIndex-r10'}, {'members': [{'name': 'physCellId-r12', 'type': 'PhysCellId'}, {'name': 'dl-CarrierFreq-r12', 'type': 'ARFCN-ValueEUTRA-r9'}], 'name': 'cellIdentification-r12', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'rsrpResult-r12', 'type': 'RSRP-Range'}, {'name': 'rsrqResult-r12', 'type': 'RSRQ-Range'}], 'name': 'measResultCellToAdd-r12', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'sCellIndex-r13', 'optional': True, 'type': 'SCellIndex-r13'}, {'members': [{'name': 'rs-sinr-Result-r13', 'type': 'RS-SINR-Range-r13'}], 'name': 'measResultCellToAdd-v1310', 'optional': True, 'type': 'SEQUENCE'}]], 'type': 'SEQUENCE'}, 'DRB-InfoListSCG-r12': {'element': {'type': 'DRB-InfoSCG-r12'}, 'size': [(1, 'maxDRB')], 'type': 'SEQUENCE ' 'OF'}, 'DRB-InfoSCG-r12': {'members': [{'name': 'eps-BearerIdentity-r12', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'drb-Identity-r12', 'type': 'DRB-Identity'}, {'name': 'drb-Type-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('split', 0), ('scg', 1)]}, None], 'type': 'SEQUENCE'}, 'HandoverCommand': {'members': [{'members': [{'members': [{'name': 'handoverCommand-r8', 'type': 'HandoverCommand-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'HandoverCommand-r8-IEs': {'members': [{'name': 'handoverCommandMessage', 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation': {'members': [{'members': [{'members': [{'name': 'handoverPreparationInformation-r8', 'type': 'HandoverPreparationInformation-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-r8-IEs': {'members': [{'name': 'ue-RadioAccessCapabilityInfo', 'type': 'UE-CapabilityRAT-ContainerList'}, {'name': 'as-Config', 'optional': True, 'type': 'AS-Config'}, {'name': 'rrm-Config', 'optional': True, 'type': 'RRM-Config'}, {'name': 'as-Context', 'optional': True, 'type': 'AS-Context'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'HandoverPreparationInformation-v920-IEs'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-v10j0-IEs': {'members': [{'name': 'as-Config-v10j0', 'optional': True, 'type': 'AS-Config-v10j0'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-v1130-IEs': {'members': [{'name': 'as-Context-v1130', 'optional': True, 'type': 'AS-Context-v1130'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'HandoverPreparationInformation-v1250-IEs'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-v1250-IEs': {'members': [{'name': 'ue-SupportedEARFCN-r12', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'as-Config-v1250', 'optional': True, 'type': 'AS-Config-v1250'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'HandoverPreparationInformation-v1320-IEs'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-v1320-IEs': {'members': [{'name': 'as-Config-v1320', 'optional': True, 'type': 'AS-Config-v1320'}, {'name': 'as-Context-v1320', 'optional': True, 'type': 'AS-Context-v1320'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'HandoverPreparationInformation-v1430-IEs'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-v1430-IEs': {'members': [{'name': 'as-Config-v1430', 'optional': True, 'type': 'AS-Config-v1430'}, {'name': 'makeBeforeBreakReq-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-v920-IEs': {'members': [{'name': 'ue-ConfigRelease-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('rel9', 0), ('rel10', 1), ('rel11', 2), ('rel12', 3), ('v10j0', 4), ('v11e0', 5), ('v1280', 6), ('rel13', 7), None, ('rel14', 8)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'HandoverPreparationInformation-v9d0-IEs'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-v9d0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'HandoverPreparationInformation-v9e0-IEs'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-v9e0-IEs': {'members': [{'name': 'as-Config-v9e0', 'optional': True, 'type': 'AS-Config-v9e0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'HandoverPreparationInformation-v1130-IEs'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-v9j0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'HandoverPreparationInformation-v10j0-IEs'}], 'type': 'SEQUENCE'}, 'Key-eNodeB-Star': {'size': [256], 'type': 'BIT ' 'STRING'}, 'MeasResultListRSSI-SCG-r13': {'element': {'type': 'MeasResultRSSI-SCG-r13'}, 'size': [(1, 'maxServCell-r13')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultRSSI-SCG-r13': {'members': [{'name': 'servCellId-r13', 'type': 'ServCellIndex-r13'}, {'name': 'measResultForRSSI-r13', 'type': 'MeasResultForRSSI-r13'}], 'type': 'SEQUENCE'}, 'MeasResultServCellListSCG-Ext-r13': {'element': {'type': 'MeasResultServCellSCG-r12'}, 'size': [(1, 'maxServCell-r13')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultServCellListSCG-r12': {'element': {'type': 'MeasResultServCellSCG-r12'}, 'size': [(1, 'maxServCell-r10')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultServCellSCG-r12': {'members': [{'name': 'servCellId-r12', 'type': 'ServCellIndex-r10'}, {'members': [{'name': 'rsrpResultSCell-r12', 'type': 'RSRP-Range'}, {'name': 'rsrqResultSCell-r12', 'type': 'RSRQ-Range'}], 'name': 'measResultSCell-r12', 'type': 'SEQUENCE'}, None, [{'name': 'servCellId-r13', 'optional': True, 'type': 'ServCellIndex-r13'}, {'members': [{'name': 'rs-sinr-ResultSCell-r13', 'type': 'RS-SINR-Range-r13'}], 'name': 'measResultSCell-v1310', 'optional': True, 'type': 'SEQUENCE'}]], 'type': 'SEQUENCE'}, 'RRM-Config': {'members': [{'name': 'ue-InactiveTime', 'optional': True, 'type': 'ENUMERATED', 'values': [('s1', 0), ('s2', 1), ('s3', 2), ('s5', 3), ('s7', 4), ('s10', 5), ('s15', 6), ('s20', 7), ('s25', 8), ('s30', 9), ('s40', 10), ('s50', 11), ('min1', 12), ('min1s20c', 13), ('min1s40', 14), ('min2', 15), ('min2s30', 16), ('min3', 17), ('min3s30', 18), ('min4', 19), ('min5', 20), ('min6', 21), ('min7', 22), ('min8', 23), ('min9', 24), ('min10', 25), ('min12', 26), ('min14', 27), ('min17', 28), ('min20', 29), ('min24', 30), ('min28', 31), ('min33', 32), ('min38', 33), ('min44', 34), ('min50', 35), ('hr1', 36), ('hr1min30', 37), ('hr2', 38), ('hr2min30', 39), ('hr3', 40), ('hr3min30', 41), ('hr4', 42), ('hr5', 43), ('hr6', 44), ('hr8', 45), ('hr10', 46), ('hr13', 47), ('hr16', 48), ('hr20', 49), ('day1', 50), ('day1hr12', 51), ('day2', 52), ('day2hr12', 53), ('day3', 54), ('day4', 55), ('day5', 56), ('day7', 57), ('day10', 58), ('day14', 59), ('day19', 60), ('day24', 61), ('day30', 62), ('dayMoreThan30', 63)]}, None, [{'name': 'candidateCellInfoList-r10', 'optional': True, 'type': 'CandidateCellInfoList-r10'}]], 'type': 'SEQUENCE'}, 'ReestablishmentInfo': {'members': [{'name': 'sourcePhysCellId', 'type': 'PhysCellId'}, {'name': 'targetCellShortMAC-I', 'type': 'ShortMAC-I'}, {'name': 'additionalReestabInfoList', 'optional': True, 'type': 'AdditionalReestabInfoList'}, None], 'type': 'SEQUENCE'}, 'SCG-Config-r12': {'members': [{'members': [{'members': [{'name': 'scg-Config-r12', 'type': 'SCG-Config-r12-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SCG-Config-r12-IEs': {'members': [{'name': 'scg-RadioConfig-r12', 'optional': True, 'type': 'SCG-ConfigPartSCG-r12'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SCG-ConfigInfo-r12': {'members': [{'members': [{'members': [{'name': 'scg-ConfigInfo-r12', 'type': 'SCG-ConfigInfo-r12-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SCG-ConfigInfo-r12-IEs': {'members': [{'name': 'radioResourceConfigDedMCG-r12', 'optional': True, 'type': 'RadioResourceConfigDedicated'}, {'name': 'sCellToAddModListMCG-r12', 'optional': True, 'type': 'SCellToAddModList-r10'}, {'name': 'measGapConfig-r12', 'optional': True, 'type': 'MeasGapConfig'}, {'name': 'powerCoordinationInfo-r12', 'optional': True, 'type': 'PowerCoordinationInfo-r12'}, {'name': 'scg-RadioConfig-r12', 'optional': True, 'type': 'SCG-ConfigPartSCG-r12'}, {'name': 'eutra-CapabilityInfo-r12', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'scg-ConfigRestrictInfo-r12', 'optional': True, 'type': 'SCG-ConfigRestrictInfo-r12'}, {'name': 'mbmsInterestIndication-r12', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'measResultServCellListSCG-r12', 'optional': True, 'type': 'MeasResultServCellListSCG-r12'}, {'name': 'drb-ToAddModListSCG-r12', 'optional': True, 'type': 'DRB-InfoListSCG-r12'}, {'name': 'drb-ToReleaseListSCG-r12', 'optional': True, 'type': 'DRB-ToReleaseList'}, {'name': 'sCellToAddModListSCG-r12', 'optional': True, 'type': 'SCellToAddModListSCG-r12'}, {'name': 'sCellToReleaseListSCG-r12', 'optional': True, 'type': 'SCellToReleaseList-r10'}, {'name': 'p-Max-r12', 'optional': True, 'type': 'P-Max'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SCG-ConfigInfo-v1310-IEs'}], 'type': 'SEQUENCE'}, 'SCG-ConfigInfo-v1310-IEs': {'members': [{'name': 'measResultSSTD-r13', 'optional': True, 'type': 'MeasResultSSTD-r13'}, {'name': 'sCellToAddModListMCG-Ext-r13', 'optional': True, 'type': 'SCellToAddModListExt-r13'}, {'name': 'measResultServCellListSCG-Ext-r13', 'optional': True, 'type': 'MeasResultServCellListSCG-Ext-r13'}, {'name': 'sCellToAddModListSCG-Ext-r13', 'optional': True, 'type': 'SCellToAddModListSCG-Ext-r13'}, {'name': 'sCellToReleaseListSCG-Ext-r13', 'optional': True, 'type': 'SCellToReleaseListExt-r13'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SCG-ConfigInfo-v1330-IEs'}], 'type': 'SEQUENCE'}, 'SCG-ConfigInfo-v1330-IEs': {'members': [{'name': 'measResultListRSSI-SCG-r13', 'optional': True, 'type': 'MeasResultListRSSI-SCG-r13'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SCG-ConfigInfo-v1430-IEs'}], 'type': 'SEQUENCE'}, 'SCG-ConfigInfo-v1430-IEs': {'members': [{'name': 'makeBeforeBreakSCG-Req-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'measGapConfigPerCC-List', 'optional': True, 'type': 'MeasGapConfigPerCC-List-r14'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SCG-ConfigRestrictInfo-r12': {'members': [{'name': 'maxSCH-TB-BitsDL-r12', 'restricted-to': [(1, 100)], 'type': 'INTEGER'}, {'name': 'maxSCH-TB-BitsUL-r12', 'restricted-to': [(1, 100)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'SCellToAddModListSCG-Ext-r13': {'element': {'type': 'Cell-ToAddMod-r12'}, 'size': [(1, 'maxSCell-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SCellToAddModListSCG-r12': {'element': {'type': 'Cell-ToAddMod-r12'}, 'size': [(1, 'maxSCell-r10')], 'type': 'SEQUENCE ' 'OF'}, 'UEPagingCoverageInformation': {'members': [{'members': [{'members': [{'name': 'uePagingCoverageInformation-r13', 'type': 'UEPagingCoverageInformation-r13-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UEPagingCoverageInformation-r13-IEs': {'members': [{'name': 'mpdcch-NumRepetition-r13', 'optional': True, 'restricted-to': [(1, 256)], 'type': 'INTEGER'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UERadioAccessCapabilityInformation': {'members': [{'members': [{'members': [{'name': 'ueRadioAccessCapabilityInformation-r8', 'type': 'UERadioAccessCapabilityInformation-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UERadioAccessCapabilityInformation-r8-IEs': {'members': [{'name': 'ue-RadioAccessCapabilityInfo', 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UERadioPagingInformation': {'members': [{'members': [{'members': [{'name': 'ueRadioPagingInformation-r12', 'type': 'UERadioPagingInformation-r12-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UERadioPagingInformation-r12-IEs': {'members': [{'name': 'ue-RadioPagingInfo-r12', 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UERadioPagingInformation-v1310-IEs'}], 'type': 'SEQUENCE'}, 'UERadioPagingInformation-v1310-IEs': {'members': [{'element': {'type': 'FreqBandIndicator-r11'}, 'name': 'supportedBandListEUTRAForPaging-r13', 'optional': True, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}}, 'values': {'maxReestabInfo': {'type': 'INTEGER', 'value': 32}}}, 'EUTRA-RRC-Definitions': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AC-BarringConfig': {'members': [{'name': 'ac-BarringFactor', 'type': 'ENUMERATED', 'values': [('p00', 0), ('p05', 1), ('p10', 2), ('p15', 3), ('p20', 4), ('p25', 5), ('p30', 6), ('p40', 7), ('p50', 8), ('p60', 9), ('p70', 10), ('p75', 11), ('p80', 12), ('p85', 13), ('p90', 14), ('p95', 15)]}, {'name': 'ac-BarringTime', 'type': 'ENUMERATED', 'values': [('s4', 0), ('s8', 1), ('s16', 2), ('s32', 3), ('s64', 4), ('s128', 5), ('s256', 6), ('s512', 7)]}, {'name': 'ac-BarringForSpecialAC', 'size': [5], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'AC-BarringConfig1XRTT-r9': {'members': [{'name': 'ac-Barring0to9-r9', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'ac-Barring10-r9', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'ac-Barring11-r9', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'ac-Barring12-r9', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'ac-Barring13-r9', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'ac-Barring14-r9', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'ac-Barring15-r9', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'ac-BarringMsg-r9', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'ac-BarringReg-r9', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'ac-BarringEmg-r9', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'AC-BarringPerPLMN-List-r12': {'element': {'type': 'AC-BarringPerPLMN-r12'}, 'size': [(1, 'maxPLMN-r11')], 'type': 'SEQUENCE ' 'OF'}, 'AC-BarringPerPLMN-r12': {'members': [{'name': 'plmn-IdentityIndex-r12', 'restricted-to': [(1, 'maxPLMN-r11')], 'type': 'INTEGER'}, {'members': [{'name': 'ac-BarringForEmergency-r12', 'type': 'BOOLEAN'}, {'name': 'ac-BarringForMO-Signalling-r12', 'optional': True, 'type': 'AC-BarringConfig'}, {'name': 'ac-BarringForMO-Data-r12', 'optional': True, 'type': 'AC-BarringConfig'}], 'name': 'ac-BarringInfo-r12', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'ac-BarringSkipForMMTELVoice-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'ac-BarringSkipForMMTELVideo-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'ac-BarringSkipForSMS-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'ac-BarringForCSFB-r12', 'optional': True, 'type': 'AC-BarringConfig'}, {'name': 'ssac-BarringForMMTEL-Voice-r12', 'optional': True, 'type': 'AC-BarringConfig'}, {'name': 'ssac-BarringForMMTEL-Video-r12', 'optional': True, 'type': 'AC-BarringConfig'}], 'type': 'SEQUENCE'}, 'ACDC-BarringForCommon-r13': {'members': [{'name': 'acdc-HPLMNonly-r13', 'type': 'BOOLEAN'}, {'name': 'barringPerACDC-CategoryList-r13', 'type': 'BarringPerACDC-CategoryList-r13'}], 'type': 'SEQUENCE'}, 'ACDC-BarringPerPLMN-List-r13': {'element': {'type': 'ACDC-BarringPerPLMN-r13'}, 'size': [(1, 'maxPLMN-r11')], 'type': 'SEQUENCE ' 'OF'}, 'ACDC-BarringPerPLMN-r13': {'members': [{'name': 'plmn-IdentityIndex-r13', 'restricted-to': [(1, 'maxPLMN-r11')], 'type': 'INTEGER'}, {'name': 'acdc-OnlyForHPLMN-r13', 'type': 'BOOLEAN'}, {'name': 'barringPerACDC-CategoryList-r13', 'type': 'BarringPerACDC-CategoryList-r13'}], 'type': 'SEQUENCE'}, 'ARFCN-ValueCDMA2000': {'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, 'ARFCN-ValueEUTRA': {'restricted-to': [(0, 'maxEARFCN')], 'type': 'INTEGER'}, 'ARFCN-ValueEUTRA-r9': {'restricted-to': [(0, 'maxEARFCN2')], 'type': 'INTEGER'}, 'ARFCN-ValueEUTRA-v9e0': {'restricted-to': [('maxEARFCN-Plus1', 'maxEARFCN2')], 'type': 'INTEGER'}, 'ARFCN-ValueGERAN': {'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, 'ARFCN-ValueUTRA': {'restricted-to': [(0, 16383)], 'type': 'INTEGER'}, 'AbsoluteTimeInfo-r10': {'size': [48], 'type': 'BIT ' 'STRING'}, 'AccessStratumRelease': {'type': 'ENUMERATED', 'values': [('rel8', 0), ('rel9', 1), ('rel10', 2), ('rel11', 3), ('rel12', 4), ('rel13', 5), ('rel14', 6), ('spare1', 7), None]}, 'AdditionalSI-Info-r9': {'members': [{'name': 'csg-MemberStatus-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('member', 0)]}, {'name': 'csg-Identity-r9', 'optional': True, 'type': 'CSG-Identity'}], 'type': 'SEQUENCE'}, 'AdditionalSpectrumEmission': {'restricted-to': [(1, 32)], 'type': 'INTEGER'}, 'AdditionalSpectrumEmission-v10l0': {'restricted-to': [(33, 288)], 'type': 'INTEGER'}, 'AffectedCarrierFreq-r11': {'members': [{'name': 'carrierFreq-r11', 'type': 'MeasObjectId'}, {'name': 'interferenceDirection-r11', 'type': 'ENUMERATED', 'values': [('eutra', 0), ('other', 1), ('both', 2), ('spare', 3)]}], 'type': 'SEQUENCE'}, 'AffectedCarrierFreq-v1310': {'members': [{'name': 'carrierFreq-v1310', 'optional': True, 'type': 'MeasObjectId-v1310'}], 'type': 'SEQUENCE'}, 'AffectedCarrierFreqComb-r11': {'element': {'type': 'MeasObjectId'}, 'size': [(2, 'maxServCell-r10')], 'type': 'SEQUENCE ' 'OF'}, 'AffectedCarrierFreqComb-r13': {'element': {'type': 'MeasObjectId-r13'}, 'size': [(2, 'maxServCell-r13')], 'type': 'SEQUENCE ' 'OF'}, 'AffectedCarrierFreqCombList-r11': {'element': {'type': 'AffectedCarrierFreqComb-r11'}, 'size': [(1, 'maxCombIDC-r11')], 'type': 'SEQUENCE ' 'OF'}, 'AffectedCarrierFreqCombList-r13': {'element': {'type': 'AffectedCarrierFreqComb-r13'}, 'size': [(1, 'maxCombIDC-r11')], 'type': 'SEQUENCE ' 'OF'}, 'AffectedCarrierFreqList-r11': {'element': {'type': 'AffectedCarrierFreq-r11'}, 'size': [(1, 'maxFreqIDC-r11')], 'type': 'SEQUENCE ' 'OF'}, 'AffectedCarrierFreqList-v1310': {'element': {'type': 'AffectedCarrierFreq-v1310'}, 'size': [(1, 'maxFreqIDC-r11')], 'type': 'SEQUENCE ' 'OF'}, 'AllowedMeasBandwidth': {'type': 'ENUMERATED', 'values': [('mbw6', 0), ('mbw15', 1), ('mbw25', 2), ('mbw50', 3), ('mbw75', 4), ('mbw100', 5)]}, 'Alpha-r12': {'type': 'ENUMERATED', 'values': [('al0', 0), ('al04', 1), ('al05', 2), ('al06', 3), ('al07', 4), ('al08', 5), ('al09', 6), ('al1', 7)]}, 'AltTTT-CellsToAddMod-r12': {'members': [{'name': 'cellIndex-r12', 'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, {'name': 'physCellIdRange-r12', 'type': 'PhysCellIdRange'}], 'type': 'SEQUENCE'}, 'AltTTT-CellsToAddModList-r12': {'element': {'type': 'AltTTT-CellsToAddMod-r12'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'AntennaInfoCommon': {'members': [{'name': 'antennaPortsCount', 'type': 'ENUMERATED', 'values': [('an1', 0), ('an2', 1), ('an4', 2), ('spare1', 3)]}], 'type': 'SEQUENCE'}, 'AntennaInfoDedicated': {'members': [{'name': 'transmissionMode', 'type': 'ENUMERATED', 'values': [('tm1', 0), ('tm2', 1), ('tm3', 2), ('tm4', 3), ('tm5', 4), ('tm6', 5), ('tm7', 6), ('tm8-v920', 7)]}, {'members': [{'name': 'n2TxAntenna-tm3', 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'n4TxAntenna-tm3', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'n2TxAntenna-tm4', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'n4TxAntenna-tm4', 'size': [64], 'type': 'BIT ' 'STRING'}, {'name': 'n2TxAntenna-tm5', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'n4TxAntenna-tm5', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'n2TxAntenna-tm6', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'n4TxAntenna-tm6', 'size': [16], 'type': 'BIT ' 'STRING'}], 'name': 'codebookSubsetRestriction', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'ENUMERATED', 'values': [('closedLoop', 0), ('openLoop', 1)]}], 'name': 'ue-TransmitAntennaSelection', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'AntennaInfoDedicated-r10': {'members': [{'name': 'transmissionMode-r10', 'type': 'ENUMERATED', 'values': [('tm1', 0), ('tm2', 1), ('tm3', 2), ('tm4', 3), ('tm5', 4), ('tm6', 5), ('tm7', 6), ('tm8-v920', 7), ('tm9-v1020', 8), ('tm10-v1130', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'codebookSubsetRestriction-r10', 'optional': True, 'type': 'BIT ' 'STRING'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'ENUMERATED', 'values': [('closedLoop', 0), ('openLoop', 1)]}], 'name': 'ue-TransmitAntennaSelection', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'AntennaInfoDedicated-v10i0': {'members': [{'name': 'maxLayersMIMO-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('twoLayers', 0), ('fourLayers', 1), ('eightLayers', 2)]}], 'type': 'SEQUENCE'}, 'AntennaInfoDedicated-v1250': {'members': [{'name': 'alternativeCodebookEnabledFor4TX-r12', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'AntennaInfoDedicated-v1430': {'members': [{'name': 'ce-UE-TxAntennaSelection-config-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('on', 0)]}], 'type': 'SEQUENCE'}, 'AntennaInfoDedicated-v920': {'members': [{'members': [{'name': 'n2TxAntenna-tm8-r9', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'n4TxAntenna-tm8-r9', 'size': [32], 'type': 'BIT ' 'STRING'}], 'name': 'codebookSubsetRestriction-v920', 'optional': True, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'AntennaInfoUL-r10': {'members': [{'name': 'transmissionModeUL-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('tm1', 0), ('tm2', 1), ('spare6', 2), ('spare5', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 'fourAntennaPortActivated-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], 'type': 'SEQUENCE'}, 'AreaConfiguration-r10': {'members': [{'name': 'cellGlobalIdList-r10', 'type': 'CellGlobalIdList-r10'}, {'name': 'trackingAreaCodeList-r10', 'type': 'TrackingAreaCodeList-r10'}], 'type': 'CHOICE'}, 'AreaConfiguration-v1130': {'members': [{'name': 'trackingAreaCodeList-v1130', 'type': 'TrackingAreaCodeList-v1130'}], 'type': 'SEQUENCE'}, 'BCCH-BCH-Message': {'members': [{'name': 'message', 'type': 'BCCH-BCH-MessageType'}], 'type': 'SEQUENCE'}, 'BCCH-BCH-Message-MBMS': {'members': [{'name': 'message', 'type': 'BCCH-BCH-MessageType-MBMS-r14'}], 'type': 'SEQUENCE'}, 'BCCH-BCH-MessageType': {'type': 'MasterInformationBlock'}, 'BCCH-BCH-MessageType-MBMS-r14': {'type': 'MasterInformationBlock-MBMS-r14'}, 'BCCH-Config': {'members': [{'name': 'modificationPeriodCoeff', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1), ('n8', 2), ('n16', 3)]}], 'type': 'SEQUENCE'}, 'BCCH-Config-v1310': {'members': [{'name': 'modificationPeriodCoeff-v1310', 'type': 'ENUMERATED', 'values': [('n64', 0)]}], 'type': 'SEQUENCE'}, 'BCCH-DL-SCH-Message': {'members': [{'name': 'message', 'type': 'BCCH-DL-SCH-MessageType'}], 'type': 'SEQUENCE'}, 'BCCH-DL-SCH-Message-BR': {'members': [{'name': 'message', 'type': 'BCCH-DL-SCH-MessageType-BR-r13'}], 'type': 'SEQUENCE'}, 'BCCH-DL-SCH-Message-MBMS': {'members': [{'name': 'message', 'type': 'BCCH-DL-SCH-MessageType-MBMS-r14'}], 'type': 'SEQUENCE'}, 'BCCH-DL-SCH-MessageType': {'members': [{'members': [{'name': 'systemInformation', 'type': 'SystemInformation'}, {'name': 'systemInformationBlockType1', 'type': 'SystemInformationBlockType1'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'BCCH-DL-SCH-MessageType-BR-r13': {'members': [{'members': [{'name': 'systemInformation-BR-r13', 'type': 'SystemInformation-BR-r13'}, {'name': 'systemInformationBlockType1-BR-r13', 'type': 'SystemInformationBlockType1-BR-r13'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'BCCH-DL-SCH-MessageType-MBMS-r14': {'members': [{'members': [{'name': 'systemInformation-MBMS-r14', 'type': 'SystemInformation-MBMS-r14'}, {'name': 'systemInformationBlockType1-MBMS-r14', 'type': 'SystemInformationBlockType1-MBMS-r14'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'BLER-Range-r12': {'restricted-to': [(0, 31)], 'type': 'INTEGER'}, 'BLER-Result-r12': {'members': [{'name': 'bler-r12', 'type': 'BLER-Range-r12'}, {'members': [{'name': 'n-r12', 'size': [3], 'type': 'BIT ' 'STRING'}, {'name': 'm-r12', 'size': [8], 'type': 'BIT ' 'STRING'}], 'name': 'blocksReceived-r12', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'BW-Preference-r14': {'members': [{'name': 'dl-Preference-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('mhz1dot4', 0), ('mhz5', 1), ('mhz20', 2)]}, {'name': 'ul-Preference-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('mhz1dot4', 0), ('mhz5', 1)]}], 'type': 'SEQUENCE'}, 'BandClassInfoCDMA2000': {'members': [{'name': 'bandClass', 'type': 'BandclassCDMA2000'}, {'name': 'cellReselectionPriority', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'threshX-High', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'threshX-Low', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'BandClassListCDMA2000': {'element': {'type': 'BandClassInfoCDMA2000'}, 'size': [(1, 'maxCDMA-BandClass')], 'type': 'SEQUENCE ' 'OF'}, 'BandClassPriority1XRTT': {'members': [{'name': 'bandClass', 'type': 'BandclassCDMA2000'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'BandClassPriorityHRPD': {'members': [{'name': 'bandClass', 'type': 'BandclassCDMA2000'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'BandClassPriorityList1XRTT': {'element': {'type': 'BandClassPriority1XRTT'}, 'size': [(1, 'maxCDMA-BandClass')], 'type': 'SEQUENCE ' 'OF'}, 'BandClassPriorityListHRPD': {'element': {'type': 'BandClassPriorityHRPD'}, 'size': [(1, 'maxCDMA-BandClass')], 'type': 'SEQUENCE ' 'OF'}, 'BandCombination-r14': {'element': {'type': 'BandIndication-r14'}, 'size': [(1, 'maxSimultaneousBands-r10')], 'type': 'SEQUENCE ' 'OF'}, 'BandCombinationList-r14': {'element': {'type': 'BandCombination-r14'}, 'size': [(1, 'maxBandComb-r13')], 'type': 'SEQUENCE ' 'OF'}, 'BandCombinationListEUTRA-r10': {'element': {'type': 'BandInfoEUTRA'}, 'size': [(1, 'maxBandComb-r10')], 'type': 'SEQUENCE ' 'OF'}, 'BandCombinationParameters-r10': {'element': {'type': 'BandParameters-r10'}, 'size': [(1, 'maxSimultaneousBands-r10')], 'type': 'SEQUENCE ' 'OF'}, 'BandCombinationParameters-r11': {'members': [{'element': {'type': 'BandParameters-r11'}, 'name': 'bandParameterList-r11', 'size': [(1, 'maxSimultaneousBands-r10')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'supportedBandwidthCombinationSet-r11', 'optional': True, 'type': 'SupportedBandwidthCombinationSet-r10'}, {'name': 'multipleTimingAdvance-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'simultaneousRx-Tx-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'bandInfoEUTRA-r11', 'type': 'BandInfoEUTRA'}, None], 'type': 'SEQUENCE'}, 'BandCombinationParameters-r13': {'members': [{'name': 'differentFallbackSupported-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'element': {'type': 'BandParameters-r13'}, 'name': 'bandParameterList-r13', 'size': [(1, 'maxSimultaneousBands-r10')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'supportedBandwidthCombinationSet-r13', 'optional': True, 'type': 'SupportedBandwidthCombinationSet-r10'}, {'name': 'multipleTimingAdvance-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'simultaneousRx-Tx-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'bandInfoEUTRA-r13', 'type': 'BandInfoEUTRA'}, {'members': [{'name': 'asynchronous-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'members': [{'name': 'threeEntries-r13', 'size': [3], 'type': 'BIT ' 'STRING'}, {'name': 'fourEntries-r13', 'size': [7], 'type': 'BIT ' 'STRING'}, {'name': 'fiveEntries-r13', 'size': [15], 'type': 'BIT ' 'STRING'}], 'name': 'supportedCellGrouping-r13', 'optional': True, 'type': 'CHOICE'}], 'name': 'dc-Support-r13', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'supportedNAICS-2CRS-AP-r13', 'optional': True, 'size': [(1, 'maxNAICS-Entries-r12')], 'type': 'BIT ' 'STRING'}, {'name': 'commSupportedBandsPerBC-r13', 'optional': True, 'size': [(1, 'maxBands')], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'BandCombinationParameters-v1090': {'element': {'type': 'BandParameters-v1090'}, 'size': [(1, 'maxSimultaneousBands-r10')], 'type': 'SEQUENCE ' 'OF'}, 'BandCombinationParameters-v10i0': {'members': [{'element': {'type': 'BandParameters-v10i0'}, 'name': 'bandParameterList-v10i0', 'optional': True, 'size': [(1, 'maxSimultaneousBands-r10')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'BandCombinationParameters-v1130': {'members': [{'name': 'multipleTimingAdvance-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'simultaneousRx-Tx-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'element': {'type': 'BandParameters-v1130'}, 'name': 'bandParameterList-r11', 'optional': True, 'size': [(1, 'maxSimultaneousBands-r10')], 'type': 'SEQUENCE ' 'OF'}, None], 'type': 'SEQUENCE'}, 'BandCombinationParameters-v1250': {'members': [{'members': [{'name': 'asynchronous-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'members': [{'name': 'threeEntries-r12', 'size': [3], 'type': 'BIT ' 'STRING'}, {'name': 'fourEntries-r12', 'size': [7], 'type': 'BIT ' 'STRING'}, {'name': 'fiveEntries-r12', 'size': [15], 'type': 'BIT ' 'STRING'}], 'name': 'supportedCellGrouping-r12', 'optional': True, 'type': 'CHOICE'}], 'name': 'dc-Support-r12', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'supportedNAICS-2CRS-AP-r12', 'optional': True, 'size': [(1, 'maxNAICS-Entries-r12')], 'type': 'BIT ' 'STRING'}, {'name': 'commSupportedBandsPerBC-r12', 'optional': True, 'size': [(1, 'maxBands')], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'BandCombinationParameters-v1270': {'members': [{'element': {'type': 'BandParameters-v1270'}, 'name': 'bandParameterList-v1270', 'optional': True, 'size': [(1, 'maxSimultaneousBands-r10')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'BandCombinationParameters-v1320': {'members': [{'element': {'type': 'BandParameters-v1320'}, 'name': 'bandParameterList-v1320', 'optional': True, 'size': [(1, 'maxSimultaneousBands-r10')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'additionalRx-Tx-PerformanceReq-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'BandCombinationParameters-v1430': {'members': [{'element': {'type': 'BandParameters-v1430'}, 'name': 'bandParameterList-v1430', 'optional': True, 'size': [(1, 'maxSimultaneousBands-r10')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'v2x-SupportedTxBandCombListPerBC-r14', 'optional': True, 'size': [(1, 'maxBandComb-r13')], 'type': 'BIT ' 'STRING'}, {'name': 'v2x-SupportedRxBandCombListPerBC-r14', 'optional': True, 'size': [(1, 'maxBandComb-r13')], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'BandCombinationParametersExt-r10': {'members': [{'name': 'supportedBandwidthCombinationSet-r10', 'optional': True, 'type': 'SupportedBandwidthCombinationSet-r10'}], 'type': 'SEQUENCE'}, 'BandIndication-r14': {'members': [{'name': 'bandEUTRA-r14', 'type': 'FreqBandIndicator-r11'}, {'name': 'ca-BandwidthClassDL-r14', 'type': 'CA-BandwidthClass-r10'}, {'name': 'ca-BandwidthClassUL-r14', 'optional': True, 'type': 'CA-BandwidthClass-r10'}], 'type': 'SEQUENCE'}, 'BandIndicatorGERAN': {'type': 'ENUMERATED', 'values': [('dcs1800', 0), ('pcs1900', 1)]}, 'BandInfoEUTRA': {'members': [{'name': 'interFreqBandList', 'type': 'InterFreqBandList'}, {'name': 'interRAT-BandList', 'optional': True, 'type': 'InterRAT-BandList'}], 'type': 'SEQUENCE'}, 'BandListEUTRA': {'element': {'type': 'BandInfoEUTRA'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE OF'}, 'BandParameters-r10': {'members': [{'name': 'bandEUTRA-r10', 'type': 'FreqBandIndicator'}, {'name': 'bandParametersUL-r10', 'optional': True, 'type': 'BandParametersUL-r10'}, {'name': 'bandParametersDL-r10', 'optional': True, 'type': 'BandParametersDL-r10'}], 'type': 'SEQUENCE'}, 'BandParameters-r11': {'members': [{'name': 'bandEUTRA-r11', 'type': 'FreqBandIndicator-r11'}, {'name': 'bandParametersUL-r11', 'optional': True, 'type': 'BandParametersUL-r10'}, {'name': 'bandParametersDL-r11', 'optional': True, 'type': 'BandParametersDL-r10'}, {'name': 'supportedCSI-Proc-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('n1', 0), ('n3', 1), ('n4', 2)]}], 'type': 'SEQUENCE'}, 'BandParameters-r13': {'members': [{'name': 'bandEUTRA-r13', 'type': 'FreqBandIndicator-r11'}, {'name': 'bandParametersUL-r13', 'optional': True, 'type': 'BandParametersUL-r13'}, {'name': 'bandParametersDL-r13', 'optional': True, 'type': 'BandParametersDL-r13'}, {'name': 'supportedCSI-Proc-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n1', 0), ('n3', 1), ('n4', 2)]}], 'type': 'SEQUENCE'}, 'BandParameters-v1090': {'members': [{'name': 'bandEUTRA-v1090', 'optional': True, 'type': 'FreqBandIndicator-v9e0'}, None], 'type': 'SEQUENCE'}, 'BandParameters-v10i0': {'members': [{'element': {'type': 'CA-MIMO-ParametersDL-v10i0'}, 'name': 'bandParametersDL-v10i0', 'size': [(1, 'maxBandwidthClass-r10')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'BandParameters-v1130': {'members': [{'name': 'supportedCSI-Proc-r11', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n3', 1), ('n4', 2)]}], 'type': 'SEQUENCE'}, 'BandParameters-v1270': {'members': [{'element': {'type': 'CA-MIMO-ParametersDL-v1270'}, 'name': 'bandParametersDL-v1270', 'size': [(1, 'maxBandwidthClass-r10')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'BandParameters-v1320': {'members': [{'name': 'bandParametersDL-v1320', 'type': 'MIMO-CA-ParametersPerBoBC-r13'}], 'type': 'SEQUENCE'}, 'BandParameters-v1430': {'members': [{'name': 'bandParametersDL-v1430', 'optional': True, 'type': 'MIMO-CA-ParametersPerBoBC-v1430'}, {'name': 'ul-256QAM-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'element': {'type': 'UL-256QAM-perCC-Info-r14'}, 'name': 'ul-256QAM-perCC-InfoList-r14', 'optional': True, 'size': [(2, 'maxServCell-r13')], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'RetuningTimeInfo-r14'}, 'name': 'retuningTimeInfoBandList-r14', 'optional': True, 'size': [(1, 'maxSimultaneousBands-r10')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'BandParametersDL-r10': {'element': {'type': 'CA-MIMO-ParametersDL-r10'}, 'size': [(1, 'maxBandwidthClass-r10')], 'type': 'SEQUENCE ' 'OF'}, 'BandParametersDL-r13': {'type': 'CA-MIMO-ParametersDL-r13'}, 'BandParametersRxSL-r14': {'members': [{'name': 'v2x-BandwidthClassRxSL-r14', 'type': 'V2X-BandwidthClassSL-r14'}, {'name': 'v2x-HighReception-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'BandParametersTxSL-r14': {'members': [{'name': 'v2x-BandwidthClassTxSL-r14', 'type': 'V2X-BandwidthClassSL-r14'}, {'name': 'v2x-eNB-Scheduled-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'v2x-HighPower-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'BandParametersUL-r10': {'element': {'type': 'CA-MIMO-ParametersUL-r10'}, 'size': [(1, 'maxBandwidthClass-r10')], 'type': 'SEQUENCE ' 'OF'}, 'BandParametersUL-r13': {'type': 'CA-MIMO-ParametersUL-r10'}, 'BandclassCDMA2000': {'type': 'ENUMERATED', 'values': [('bc0', 0), ('bc1', 1), ('bc2', 2), ('bc3', 3), ('bc4', 4), ('bc5', 5), ('bc6', 6), ('bc7', 7), ('bc8', 8), ('bc9', 9), ('bc10', 10), ('bc11', 11), ('bc12', 12), ('bc13', 13), ('bc14', 14), ('bc15', 15), ('bc16', 16), ('bc17', 17), ('bc18-v9a0', 18), ('bc19-v9a0', 19), ('bc20-v9a0', 20), ('bc21-v9a0', 21), ('spare10', 22), ('spare9', 23), ('spare8', 24), ('spare7', 25), ('spare6', 26), ('spare5', 27), ('spare4', 28), ('spare3', 29), ('spare2', 30), ('spare1', 31), None]}, 'BarringPerACDC-Category-r13': {'members': [{'name': 'acdc-Category-r13', 'restricted-to': [(1, 'maxACDC-Cat-r13')], 'type': 'INTEGER'}, {'members': [{'name': 'ac-BarringFactor-r13', 'type': 'ENUMERATED', 'values': [('p00', 0), ('p05', 1), ('p10', 2), ('p15', 3), ('p20', 4), ('p25', 5), ('p30', 6), ('p40', 7), ('p50', 8), ('p60', 9), ('p70', 10), ('p75', 11), ('p80', 12), ('p85', 13), ('p90', 14), ('p95', 15)]}, {'name': 'ac-BarringTime-r13', 'type': 'ENUMERATED', 'values': [('s4', 0), ('s8', 1), ('s16', 2), ('s32', 3), ('s64', 4), ('s128', 5), ('s256', 6), ('s512', 7)]}], 'name': 'acdc-BarringConfig-r13', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'BarringPerACDC-CategoryList-r13': {'element': {'type': 'BarringPerACDC-Category-r13'}, 'size': [(1, 'maxACDC-Cat-r13')], 'type': 'SEQUENCE ' 'OF'}, 'BlackCellsToAddMod': {'members': [{'name': 'cellIndex', 'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, {'name': 'physCellIdRange', 'type': 'PhysCellIdRange'}], 'type': 'SEQUENCE'}, 'BlackCellsToAddModList': {'element': {'type': 'BlackCellsToAddMod'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'C-RNTI': {'size': [16], 'type': 'BIT STRING'}, 'CA-BandwidthClass-r10': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), None]}, 'CA-MIMO-ParametersDL-r10': {'members': [{'name': 'ca-BandwidthClassDL-r10', 'type': 'CA-BandwidthClass-r10'}, {'name': 'supportedMIMO-CapabilityDL-r10', 'optional': True, 'type': 'MIMO-CapabilityDL-r10'}], 'type': 'SEQUENCE'}, 'CA-MIMO-ParametersDL-r13': {'members': [{'name': 'ca-BandwidthClassDL-r13', 'type': 'CA-BandwidthClass-r10'}, {'name': 'supportedMIMO-CapabilityDL-r13', 'optional': True, 'type': 'MIMO-CapabilityDL-r10'}, {'name': 'fourLayerTM3-TM4-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'element': {'type': 'IntraBandContiguousCC-Info-r12'}, 'name': 'intraBandContiguousCC-InfoList-r13', 'size': [(1, 'maxServCell-r13')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'CA-MIMO-ParametersDL-v10i0': {'members': [{'name': 'fourLayerTM3-TM4-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'CA-MIMO-ParametersDL-v1270': {'members': [{'element': {'type': 'IntraBandContiguousCC-Info-r12'}, 'name': 'intraBandContiguousCC-InfoList-r12', 'size': [(1, 'maxServCell-r10')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'CA-MIMO-ParametersUL-r10': {'members': [{'name': 'ca-BandwidthClassUL-r10', 'type': 'CA-BandwidthClass-r10'}, {'name': 'supportedMIMO-CapabilityUL-r10', 'optional': True, 'type': 'MIMO-CapabilityUL-r10'}], 'type': 'SEQUENCE'}, 'CDMA2000-Type': {'type': 'ENUMERATED', 'values': [('type1XRTT', 0), ('typeHRPD', 1)]}, 'CE-Parameters-r13': {'members': [{'name': 'ce-ModeA-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ce-ModeB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'CE-Parameters-v1320': {'members': [{'name': 'intraFreqA3-CE-ModeA-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'intraFreqA3-CE-ModeB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'intraFreqHO-CE-ModeA-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'intraFreqHO-CE-ModeB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'CE-Parameters-v1350': {'members': [{'name': 'unicastFrequencyHopping-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'CE-Parameters-v1370': {'members': [{'name': 'tm9-CE-ModeA-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'tm9-CE-ModeB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'CE-Parameters-v1430': {'members': [{'name': 'ce-SwitchWithoutHO-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'CIOT-EPS-OptimisationInfo-r13': {'element': {'type': 'CIOT-OptimisationPLMN-r13'}, 'size': [(1, 'maxPLMN-r11')], 'type': 'SEQUENCE ' 'OF'}, 'CIOT-OptimisationPLMN-r13': {'members': [{'name': 'up-CIoT-EPS-Optimisation-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'cp-CIoT-EPS-Optimisation-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'attachWithoutPDN-Connectivity-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'CQI-ReportAperiodic-r10': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'cqi-ReportModeAperiodic-r10', 'type': 'CQI-ReportModeAperiodic'}, {'members': [{'name': 'trigger1-r10', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'trigger2-r10', 'size': [8], 'type': 'BIT ' 'STRING'}], 'name': 'aperiodicCSI-Trigger-r10', 'optional': True, 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'CQI-ReportAperiodic-v1250': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'trigger-SubframeSetIndicator-r12', 'type': 'ENUMERATED', 'values': [('s1', 0), ('s2', 1)]}, {'name': 'trigger1-SubframeSetIndicator-r12', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'trigger2-SubframeSetIndicator-r12', 'size': [8], 'type': 'BIT ' 'STRING'}], 'name': 'aperiodicCSI-Trigger-v1250', 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'CQI-ReportAperiodic-v1310': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'trigger1-r13', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger2-r13', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger3-r13', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger4-r13', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger5-r13', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger6-r13', 'size': [32], 'type': 'BIT ' 'STRING'}], 'name': 'aperiodicCSI-Trigger-v1310', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'trigger1-SubframeSetIndicator-r13', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger2-SubframeSetIndicator-r13', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger3-SubframeSetIndicator-r13', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger4-SubframeSetIndicator-r13', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger5-SubframeSetIndicator-r13', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger6-SubframeSetIndicator-r13', 'size': [32], 'type': 'BIT ' 'STRING'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'aperiodicCSI-Trigger2-r13', 'optional': True, 'type': 'CHOICE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'CQI-ReportAperiodicHybrid-r14': {'members': [{'members': [{'members': [{'name': 'trigger1-Indicator-r14', 'size': [8], 'type': 'BIT ' 'STRING'}], 'name': 'oneBit-r14', 'type': 'SEQUENCE'}, {'members': [{'name': 'trigger01-Indicator-r14', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'trigger10-Indicator-r14', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'trigger11-Indicator-r14', 'size': [8], 'type': 'BIT ' 'STRING'}], 'name': 'twoBit-r14', 'type': 'SEQUENCE'}, {'members': [{'name': 'trigger001-Indicator-r14', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger010-Indicator-r14', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger011-Indicator-r14', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger100-Indicator-r14', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger101-Indicator-r14', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger110-Indicator-r14', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'trigger111-Indicator-r14', 'size': [32], 'type': 'BIT ' 'STRING'}], 'name': 'threeBit-r14', 'type': 'SEQUENCE'}], 'name': 'triggers-r14', 'optional': True, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CQI-ReportAperiodicProc-r11': {'members': [{'name': 'cqi-ReportModeAperiodic-r11', 'type': 'CQI-ReportModeAperiodic'}, {'name': 'trigger01-r11', 'type': 'BOOLEAN'}, {'name': 'trigger10-r11', 'type': 'BOOLEAN'}, {'name': 'trigger11-r11', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'CQI-ReportAperiodicProc-v1310': {'members': [{'name': 'trigger001-r13', 'type': 'BOOLEAN'}, {'name': 'trigger010-r13', 'type': 'BOOLEAN'}, {'name': 'trigger011-r13', 'type': 'BOOLEAN'}, {'name': 'trigger100-r13', 'type': 'BOOLEAN'}, {'name': 'trigger101-r13', 'type': 'BOOLEAN'}, {'name': 'trigger110-r13', 'type': 'BOOLEAN'}, {'name': 'trigger111-r13', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'CQI-ReportBoth-r11': {'members': [{'name': 'csi-IM-ConfigToReleaseList-r11', 'optional': True, 'type': 'CSI-IM-ConfigToReleaseList-r11'}, {'name': 'csi-IM-ConfigToAddModList-r11', 'optional': True, 'type': 'CSI-IM-ConfigToAddModList-r11'}, {'name': 'csi-ProcessToReleaseList-r11', 'optional': True, 'type': 'CSI-ProcessToReleaseList-r11'}, {'name': 'csi-ProcessToAddModList-r11', 'optional': True, 'type': 'CSI-ProcessToAddModList-r11'}], 'type': 'SEQUENCE'}, 'CQI-ReportBoth-v1250': {'members': [{'name': 'csi-IM-ConfigToReleaseListExt-r12', 'optional': True, 'type': 'CSI-IM-ConfigId-v1250'}, {'name': 'csi-IM-ConfigToAddModListExt-r12', 'optional': True, 'type': 'CSI-IM-ConfigExt-r12'}], 'type': 'SEQUENCE'}, 'CQI-ReportBoth-v1310': {'members': [{'name': 'csi-IM-ConfigToReleaseListExt-r13', 'optional': True, 'type': 'CSI-IM-ConfigToReleaseListExt-r13'}, {'name': 'csi-IM-ConfigToAddModListExt-r13', 'optional': True, 'type': 'CSI-IM-ConfigToAddModListExt-r13'}], 'type': 'SEQUENCE'}, 'CQI-ReportBothProc-r11': {'members': [{'name': 'ri-Ref-CSI-ProcessId-r11', 'optional': True, 'type': 'CSI-ProcessId-r11'}, {'name': 'pmi-RI-Report-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], 'type': 'SEQUENCE'}, 'CQI-ReportConfig': {'members': [{'name': 'cqi-ReportModeAperiodic', 'optional': True, 'type': 'CQI-ReportModeAperiodic'}, {'name': 'nomPDSCH-RS-EPRE-Offset', 'restricted-to': [(-1, 6)], 'type': 'INTEGER'}, {'name': 'cqi-ReportPeriodic', 'optional': True, 'type': 'CQI-ReportPeriodic'}], 'type': 'SEQUENCE'}, 'CQI-ReportConfig-r10': {'members': [{'name': 'cqi-ReportAperiodic-r10', 'optional': True, 'type': 'CQI-ReportAperiodic-r10'}, {'name': 'nomPDSCH-RS-EPRE-Offset', 'restricted-to': [(-1, 6)], 'type': 'INTEGER'}, {'name': 'cqi-ReportPeriodic-r10', 'optional': True, 'type': 'CQI-ReportPeriodic-r10'}, {'name': 'pmi-RI-Report-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'csi-MeasSubframeSet1-r10', 'type': 'MeasSubframePattern-r10'}, {'name': 'csi-MeasSubframeSet2-r10', 'type': 'MeasSubframePattern-r10'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'csi-SubframePatternConfig-r10', 'optional': True, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CQI-ReportConfig-v1130': {'members': [{'name': 'cqi-ReportPeriodic-v1130', 'type': 'CQI-ReportPeriodic-v1130'}, {'name': 'cqi-ReportBoth-r11', 'type': 'CQI-ReportBoth-r11'}], 'type': 'SEQUENCE'}, 'CQI-ReportConfig-v1250': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'csi-MeasSubframeSets-r12', 'size': [10], 'type': 'BIT ' 'STRING'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'csi-SubframePatternConfig-r12', 'optional': True, 'type': 'CHOICE'}, {'name': 'cqi-ReportBoth-v1250', 'optional': True, 'type': 'CQI-ReportBoth-v1250'}, {'name': 'cqi-ReportAperiodic-v1250', 'optional': True, 'type': 'CQI-ReportAperiodic-v1250'}, {'name': 'altCQI-Table-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('allSubframes', 0), ('csi-SubframeSet1', 1), ('csi-SubframeSet2', 2), ('spare1', 3)]}], 'type': 'SEQUENCE'}, 'CQI-ReportConfig-v1310': {'members': [{'name': 'cqi-ReportBoth-v1310', 'optional': True, 'type': 'CQI-ReportBoth-v1310'}, {'name': 'cqi-ReportAperiodic-v1310', 'optional': True, 'type': 'CQI-ReportAperiodic-v1310'}, {'name': 'cqi-ReportPeriodic-v1310', 'optional': True, 'type': 'CQI-ReportPeriodic-v1310'}], 'type': 'SEQUENCE'}, 'CQI-ReportConfig-v1320': {'members': [{'name': 'cqi-ReportPeriodic-v1320', 'optional': True, 'type': 'CQI-ReportPeriodic-v1320'}], 'type': 'SEQUENCE'}, 'CQI-ReportConfig-v1430': {'members': [{'name': 'cqi-ReportAperiodicHybrid-r14', 'optional': True, 'type': 'CQI-ReportAperiodicHybrid-r14'}], 'type': 'SEQUENCE'}, 'CQI-ReportConfig-v920': {'members': [{'name': 'cqi-Mask-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}, {'name': 'pmi-RI-Report-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], 'type': 'SEQUENCE'}, 'CQI-ReportConfigSCell-r10': {'members': [{'name': 'cqi-ReportModeAperiodic-r10', 'optional': True, 'type': 'CQI-ReportModeAperiodic'}, {'name': 'nomPDSCH-RS-EPRE-Offset-r10', 'restricted-to': [(-1, 6)], 'type': 'INTEGER'}, {'name': 'cqi-ReportPeriodicSCell-r10', 'optional': True, 'type': 'CQI-ReportPeriodic-r10'}, {'name': 'pmi-RI-Report-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], 'type': 'SEQUENCE'}, 'CQI-ReportModeAperiodic': {'type': 'ENUMERATED', 'values': [('rm12', 0), ('rm20', 1), ('rm22', 2), ('rm30', 3), ('rm31', 4), ('rm32-v1250', 5), ('rm10-v1310', 6), ('rm11-v1310', 7)]}, 'CQI-ReportPeriodic': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'cqi-PUCCH-ResourceIndex', 'restricted-to': [(0, 1185)], 'type': 'INTEGER'}, {'name': 'cqi-pmi-ConfigIndex', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'members': [{'name': 'widebandCQI', 'type': 'NULL'}, {'members': [{'name': 'k', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}], 'name': 'subbandCQI', 'type': 'SEQUENCE'}], 'name': 'cqi-FormatIndicatorPeriodic', 'type': 'CHOICE'}, {'name': 'ri-ConfigIndex', 'optional': True, 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'simultaneousAckNackAndCQI', 'type': 'BOOLEAN'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'CQI-ReportPeriodic-r10': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'cqi-PUCCH-ResourceIndex-r10', 'restricted-to': [(0, 1184)], 'type': 'INTEGER'}, {'name': 'cqi-PUCCH-ResourceIndexP1-r10', 'optional': True, 'restricted-to': [(0, 1184)], 'type': 'INTEGER'}, {'name': 'cqi-pmi-ConfigIndex', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'members': [{'members': [{'name': 'csi-ReportMode-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('submode1', 0), ('submode2', 1)]}], 'name': 'widebandCQI-r10', 'type': 'SEQUENCE'}, {'members': [{'name': 'k', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}, {'name': 'periodicityFactor-r10', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1)]}], 'name': 'subbandCQI-r10', 'type': 'SEQUENCE'}], 'name': 'cqi-FormatIndicatorPeriodic-r10', 'type': 'CHOICE'}, {'name': 'ri-ConfigIndex', 'optional': True, 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'simultaneousAckNackAndCQI', 'type': 'BOOLEAN'}, {'name': 'cqi-Mask-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'cqi-pmi-ConfigIndex2-r10', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'ri-ConfigIndex2-r10', 'optional': True, 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'csi-ConfigIndex-r10', 'optional': True, 'type': 'CHOICE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'CQI-ReportPeriodic-v1130': {'members': [{'name': 'simultaneousAckNackAndCQI-Format3-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}, {'name': 'cqi-ReportPeriodicProcExtToReleaseList-r11', 'optional': True, 'type': 'CQI-ReportPeriodicProcExtToReleaseList-r11'}, {'name': 'cqi-ReportPeriodicProcExtToAddModList-r11', 'optional': True, 'type': 'CQI-ReportPeriodicProcExtToAddModList-r11'}], 'type': 'SEQUENCE'}, 'CQI-ReportPeriodic-v1310': {'members': [{'name': 'cri-ReportConfig-r13', 'optional': True, 'type': 'CRI-ReportConfig-r13'}, {'name': 'simultaneousAckNackAndCQI-Format4-Format5-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], 'type': 'SEQUENCE'}, 'CQI-ReportPeriodic-v1320': {'members': [{'name': 'periodicityFactorWB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1)]}], 'type': 'SEQUENCE'}, 'CQI-ReportPeriodicProcExt-r11': {'members': [{'name': 'cqi-ReportPeriodicProcExtId-r11', 'type': 'CQI-ReportPeriodicProcExtId-r11'}, {'name': 'cqi-pmi-ConfigIndex-r11', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'members': [{'members': [{'name': 'csi-ReportMode-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('submode1', 0), ('submode2', 1)]}], 'name': 'widebandCQI-r11', 'type': 'SEQUENCE'}, {'members': [{'name': 'k', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}, {'name': 'periodicityFactor-r11', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1)]}], 'name': 'subbandCQI-r11', 'type': 'SEQUENCE'}], 'name': 'cqi-FormatIndicatorPeriodic-r11', 'type': 'CHOICE'}, {'name': 'ri-ConfigIndex-r11', 'optional': True, 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'cqi-pmi-ConfigIndex2-r11', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'ri-ConfigIndex2-r11', 'optional': True, 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'csi-ConfigIndex-r11', 'optional': True, 'type': 'CHOICE'}, None, [{'name': 'cri-ReportConfig-r13', 'optional': True, 'type': 'CRI-ReportConfig-r13'}], [{'name': 'periodicityFactorWB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1)]}]], 'type': 'SEQUENCE'}, 'CQI-ReportPeriodicProcExtId-r11': {'restricted-to': [(1, 'maxCQI-ProcExt-r11')], 'type': 'INTEGER'}, 'CQI-ReportPeriodicProcExtToAddModList-r11': {'element': {'type': 'CQI-ReportPeriodicProcExt-r11'}, 'size': [(1, 'maxCQI-ProcExt-r11')], 'type': 'SEQUENCE ' 'OF'}, 'CQI-ReportPeriodicProcExtToReleaseList-r11': {'element': {'type': 'CQI-ReportPeriodicProcExtId-r11'}, 'size': [(1, 'maxCQI-ProcExt-r11')], 'type': 'SEQUENCE ' 'OF'}, 'CRI-ConfigIndex-r13': {'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, 'CRI-ReportConfig-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'cri-ConfigIndex-r13', 'type': 'CRI-ConfigIndex-r13'}, {'name': 'cri-ConfigIndex2-r13', 'optional': True, 'type': 'CRI-ConfigIndex-r13'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'CRS-AssistanceInfo-r11': {'members': [{'name': 'physCellId-r11', 'type': 'PhysCellId'}, {'name': 'antennaPortsCount-r11', 'type': 'ENUMERATED', 'values': [('an1', 0), ('an2', 1), ('an4', 2), ('spare1', 3)]}, {'name': 'mbsfn-SubframeConfigList-r11', 'type': 'MBSFN-SubframeConfigList'}, None, [{'name': 'mbsfn-SubframeConfigList-v1430', 'optional': True, 'type': 'MBSFN-SubframeConfigList-v1430'}]], 'type': 'SEQUENCE'}, 'CRS-AssistanceInfo-r13': {'members': [{'name': 'physCellId-r13', 'type': 'PhysCellId'}, {'name': 'antennaPortsCount-r13', 'type': 'ENUMERATED', 'values': [('an1', 0), ('an2', 1), ('an4', 2), ('spare1', 3)]}, {'name': 'mbsfn-SubframeConfigList-r13', 'optional': True, 'type': 'MBSFN-SubframeConfigList'}, None, [{'name': 'mbsfn-SubframeConfigList-v1430', 'optional': True, 'type': 'MBSFN-SubframeConfigList-v1430'}]], 'type': 'SEQUENCE'}, 'CRS-AssistanceInfoList-r11': {'element': {'type': 'CRS-AssistanceInfo-r11'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'CRS-AssistanceInfoList-r13': {'element': {'type': 'CRS-AssistanceInfo-r13'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'CSFB-RegistrationParam1XRTT': {'members': [{'name': 'sid', 'size': [15], 'type': 'BIT ' 'STRING'}, {'name': 'nid', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'multipleSID', 'type': 'BOOLEAN'}, {'name': 'multipleNID', 'type': 'BOOLEAN'}, {'name': 'homeReg', 'type': 'BOOLEAN'}, {'name': 'foreignSIDReg', 'type': 'BOOLEAN'}, {'name': 'foreignNIDReg', 'type': 'BOOLEAN'}, {'name': 'parameterReg', 'type': 'BOOLEAN'}, {'name': 'powerUpReg', 'type': 'BOOLEAN'}, {'name': 'registrationPeriod', 'size': [7], 'type': 'BIT ' 'STRING'}, {'name': 'registrationZone', 'size': [12], 'type': 'BIT ' 'STRING'}, {'name': 'totalZone', 'size': [3], 'type': 'BIT ' 'STRING'}, {'name': 'zoneTimer', 'size': [3], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'CSFB-RegistrationParam1XRTT-v920': {'members': [{'name': 'powerDownReg-r9', 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'CSFBParametersRequestCDMA2000': {'members': [{'members': [{'name': 'csfbParametersRequestCDMA2000-r8', 'type': 'CSFBParametersRequestCDMA2000-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CSFBParametersRequestCDMA2000-r8-IEs': {'members': [{'name': 'nonCriticalExtension', 'optional': True, 'type': 'CSFBParametersRequestCDMA2000-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'CSFBParametersRequestCDMA2000-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'CSFBParametersResponseCDMA2000': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'csfbParametersResponseCDMA2000-r8', 'type': 'CSFBParametersResponseCDMA2000-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CSFBParametersResponseCDMA2000-r8-IEs': {'members': [{'name': 'rand', 'type': 'RAND-CDMA2000'}, {'name': 'mobilityParameters', 'type': 'MobilityParametersCDMA2000'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'CSFBParametersResponseCDMA2000-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'CSFBParametersResponseCDMA2000-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'CSG-AllowedReportingCells-r9': {'members': [{'name': 'physCellIdRangeUTRA-FDDList-r9', 'optional': True, 'type': 'PhysCellIdRangeUTRA-FDDList-r9'}], 'type': 'SEQUENCE'}, 'CSG-Identity': {'size': [27], 'type': 'BIT STRING'}, 'CSG-ProximityIndicationParameters-r9': {'members': [{'name': 'intraFreqProximityIndication-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'interFreqProximityIndication-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'utran-ProximityIndication-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'CSI-IM-Config-r11': {'members': [{'name': 'csi-IM-ConfigId-r11', 'type': 'CSI-IM-ConfigId-r11'}, {'name': 'resourceConfig-r11', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'subframeConfig-r11', 'restricted-to': [(0, 154)], 'type': 'INTEGER'}, None, [{'name': 'interferenceMeasRestriction-r13', 'optional': True, 'type': 'BOOLEAN'}]], 'type': 'SEQUENCE'}, 'CSI-IM-ConfigExt-r12': {'members': [{'name': 'csi-IM-ConfigId-v1250', 'type': 'CSI-IM-ConfigId-v1250'}, {'name': 'resourceConfig-r12', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'subframeConfig-r12', 'restricted-to': [(0, 154)], 'type': 'INTEGER'}, None, [{'name': 'interferenceMeasRestriction-r13', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'csi-IM-ConfigId-v1310', 'optional': True, 'type': 'CSI-IM-ConfigId-v1310'}]], 'type': 'SEQUENCE'}, 'CSI-IM-ConfigId-r11': {'restricted-to': [(1, 'maxCSI-IM-r11')], 'type': 'INTEGER'}, 'CSI-IM-ConfigId-r12': {'restricted-to': [(1, 'maxCSI-IM-r12')], 'type': 'INTEGER'}, 'CSI-IM-ConfigId-r13': {'restricted-to': [(1, 'maxCSI-IM-r13')], 'type': 'INTEGER'}, 'CSI-IM-ConfigId-v1250': {'restricted-to': ['maxCSI-IM-r12'], 'type': 'INTEGER'}, 'CSI-IM-ConfigId-v1310': {'restricted-to': [('minCSI-IM-r13', 'maxCSI-IM-r13')], 'type': 'INTEGER'}, 'CSI-IM-ConfigToAddModList-r11': {'element': {'type': 'CSI-IM-Config-r11'}, 'size': [(1, 'maxCSI-IM-r11')], 'type': 'SEQUENCE ' 'OF'}, 'CSI-IM-ConfigToAddModListExt-r13': {'element': {'type': 'CSI-IM-ConfigExt-r12'}, 'size': [(1, 'maxCSI-IM-v1310')], 'type': 'SEQUENCE ' 'OF'}, 'CSI-IM-ConfigToReleaseList-r11': {'element': {'type': 'CSI-IM-ConfigId-r11'}, 'size': [(1, 'maxCSI-IM-r11')], 'type': 'SEQUENCE ' 'OF'}, 'CSI-IM-ConfigToReleaseListExt-r13': {'element': {'type': 'CSI-IM-ConfigId-v1310'}, 'size': [(1, 'maxCSI-IM-v1310')], 'type': 'SEQUENCE ' 'OF'}, 'CSI-Process-r11': {'members': [{'name': 'csi-ProcessId-r11', 'type': 'CSI-ProcessId-r11'}, {'name': 'csi-RS-ConfigNZPId-r11', 'type': 'CSI-RS-ConfigNZPId-r11'}, {'name': 'csi-IM-ConfigId-r11', 'type': 'CSI-IM-ConfigId-r11'}, {'name': 'p-C-AndCBSRList-r11', 'type': 'P-C-AndCBSR-Pair-r13a'}, {'name': 'cqi-ReportBothProc-r11', 'optional': True, 'type': 'CQI-ReportBothProc-r11'}, {'name': 'cqi-ReportPeriodicProcId-r11', 'optional': True, 'restricted-to': [(0, 'maxCQI-ProcExt-r11')], 'type': 'INTEGER'}, {'name': 'cqi-ReportAperiodicProc-r11', 'optional': True, 'type': 'CQI-ReportAperiodicProc-r11'}, None, [{'name': 'alternativeCodebookEnabledFor4TXProc-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'members': [{'name': 'release', 'type': 'NULL'}, {'element': {'type': 'CSI-IM-ConfigId-r12'}, 'name': 'setup', 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}], 'name': 'csi-IM-ConfigIdList-r12', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'CQI-ReportAperiodicProc-r11'}], 'name': 'cqi-ReportAperiodicProc2-r12', 'optional': True, 'type': 'CHOICE'}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'CQI-ReportAperiodicProc-v1310'}], 'name': 'cqi-ReportAperiodicProc-v1310', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'CQI-ReportAperiodicProc-v1310'}], 'name': 'cqi-ReportAperiodicProc2-v1310', 'optional': True, 'type': 'CHOICE'}, {'name': 'eMIMO-Type-r13', 'optional': True, 'type': 'CSI-RS-ConfigEMIMO-r13'}], [{'name': 'eMIMO-Type-v1430', 'optional': True, 'type': 'CSI-RS-ConfigEMIMO-v1430'}, {'name': 'eMIMO-Hybrid-r14', 'optional': True, 'type': 'CSI-RS-ConfigEMIMO-Hybrid-r14'}, {'name': 'advancedCodebookEnabled-r14', 'optional': True, 'type': 'BOOLEAN'}]], 'type': 'SEQUENCE'}, 'CSI-ProcessId-r11': {'restricted-to': [(1, 'maxCSI-Proc-r11')], 'type': 'INTEGER'}, 'CSI-ProcessToAddModList-r11': {'element': {'type': 'CSI-Process-r11'}, 'size': [(1, 'maxCSI-Proc-r11')], 'type': 'SEQUENCE ' 'OF'}, 'CSI-ProcessToReleaseList-r11': {'element': {'type': 'CSI-ProcessId-r11'}, 'size': [(1, 'maxCSI-Proc-r11')], 'type': 'SEQUENCE ' 'OF'}, 'CSI-RS-Config-NZP-v1430': {'members': [{'name': 'transmissionComb-r14', 'optional': True, 'type': 'NZP-TransmissionComb-r14'}, {'name': 'frequencyDensity-r14', 'optional': True, 'type': 'NZP-FrequencyDensity-r14'}], 'type': 'SEQUENCE'}, 'CSI-RS-Config-r10': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'antennaPortsCount-r10', 'type': 'ENUMERATED', 'values': [('an1', 0), ('an2', 1), ('an4', 2), ('an8', 3)]}, {'name': 'resourceConfig-r10', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'subframeConfig-r10', 'restricted-to': [(0, 154)], 'type': 'INTEGER'}, {'name': 'p-C-r10', 'restricted-to': [(-8, 15)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'csi-RS-r10', 'optional': True, 'type': 'CHOICE'}, {'name': 'zeroTxPowerCSI-RS-r10', 'optional': True, 'type': 'ZeroTxPowerCSI-RS-Conf-r12'}], 'type': 'SEQUENCE'}, 'CSI-RS-Config-v1250': {'members': [{'name': 'zeroTxPowerCSI-RS2-r12', 'optional': True, 'type': 'ZeroTxPowerCSI-RS-Conf-r12'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'element': {'type': 'ZeroTxPowerCSI-RS-r12'}, 'name': 'zeroTxPowerCSI-RS-List-r12', 'size': [(1, 'maxDS-ZTP-CSI-RS-r12')], 'type': 'SEQUENCE ' 'OF'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'ds-ZeroTxPowerCSI-RS-r12', 'optional': True, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CSI-RS-Config-v1310': {'members': [{'name': 'eMIMO-Type-r13', 'optional': True, 'type': 'CSI-RS-ConfigEMIMO-r13'}], 'type': 'SEQUENCE'}, 'CSI-RS-Config-v1430': {'members': [{'name': 'eMIMO-Type-v1430', 'optional': True, 'type': 'CSI-RS-ConfigEMIMO-v1430'}, {'name': 'eMIMO-Hybrid-r14', 'optional': True, 'type': 'CSI-RS-ConfigEMIMO-Hybrid-r14'}, {'name': 'advancedCodebookEnabled-r14', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'CSI-RS-ConfigBeamformed-r13': {'members': [{'element': {'type': 'CSI-RS-ConfigNZPId-r13'}, 'name': 'csi-RS-ConfigNZPIdListExt-r13', 'optional': True, 'size': [(1, 7)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'CSI-IM-ConfigId-r13'}, 'name': 'csi-IM-ConfigIdList-r13', 'optional': True, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'P-C-AndCBSR-Pair-r13'}, 'name': 'p-C-AndCBSR-PerResourceConfigList-r13', 'optional': True, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'BOOLEAN'}, 'name': 'ace-For4Tx-PerResourceConfigList-r13', 'optional': True, 'size': [(1, 7)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'alternativeCodebookEnabledBeamformed-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'channelMeasRestriction-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('on', 0)]}], 'type': 'SEQUENCE'}, 'CSI-RS-ConfigBeamformed-r14': {'members': [{'element': {'type': 'CSI-RS-ConfigNZPId-r13'}, 'name': 'csi-RS-ConfigNZPIdListExt-r14', 'optional': True, 'size': [(1, 7)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'CSI-IM-ConfigId-r13'}, 'name': 'csi-IM-ConfigIdList-r14', 'optional': True, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'P-C-AndCBSR-Pair-r13'}, 'name': 'p-C-AndCBSR-PerResourceConfigList-r14', 'optional': True, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'BOOLEAN'}, 'name': 'ace-For4Tx-PerResourceConfigList-r14', 'optional': True, 'size': [(1, 7)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'alternativeCodebookEnabledBeamformed-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'channelMeasRestriction-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('on', 0)]}, {'element': {'type': 'CSI-RS-ConfigNZP-r11'}, 'name': 'csi-RS-ConfigNZP-ApList-r14', 'optional': True, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'nzp-ResourceConfigOriginal-v1430', 'optional': True, 'type': 'CSI-RS-Config-NZP-v1430'}, {'name': 'csi-RS-NZP-Activation-r14', 'optional': True, 'type': 'CSI-RS-ConfigNZP-Activation-r14'}], 'type': 'SEQUENCE'}, 'CSI-RS-ConfigBeamformed-v1430': {'members': [{'element': {'type': 'CSI-RS-ConfigNZP-r11'}, 'name': 'csi-RS-ConfigNZP-ApList-r14', 'optional': True, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'nzp-ResourceConfigOriginal-v1430', 'optional': True, 'type': 'CSI-RS-Config-NZP-v1430'}, {'name': 'csi-RS-NZP-Activation-r14', 'optional': True, 'type': 'CSI-RS-ConfigNZP-Activation-r14'}], 'type': 'SEQUENCE'}, 'CSI-RS-ConfigEMIMO-Hybrid-r14': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'periodicityOffsetIndex-r14', 'optional': True, 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'eMIMO-Type2-r14', 'optional': True, 'type': 'CSI-RS-ConfigEMIMO2-r14'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'CSI-RS-ConfigEMIMO-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'nonPrecoded-r13', 'type': 'CSI-RS-ConfigNonPrecoded-r13'}, {'name': 'beamformed-r13', 'type': 'CSI-RS-ConfigBeamformed-r13'}], 'name': 'setup', 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'CSI-RS-ConfigEMIMO-v1430': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'nonPrecoded-v1430', 'type': 'CSI-RS-ConfigNonPrecoded-v1430'}, {'name': 'beamformed-v1430', 'type': 'CSI-RS-ConfigBeamformed-v1430'}], 'name': 'setup', 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'CSI-RS-ConfigEMIMO2-r14': {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'CSI-RS-ConfigBeamformed-r14'}], 'type': 'CHOICE'}, 'CSI-RS-ConfigNZP-Activation-r14': {'members': [{'name': 'csi-RS-NZP-mode-r14', 'type': 'ENUMERATED', 'values': [('semiPersistent', 0), ('aperiodic', 1)]}, {'name': 'activatedResources-r14', 'restricted-to': [(0, 4)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'CSI-RS-ConfigNZP-EMIMO-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'element': {'type': 'NZP-ResourceConfig-r13'}, 'name': 'nzp-resourceConfigList-r13', 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'cdmType-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('cdm2', 0), ('cdm4', 1)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'CSI-RS-ConfigNZP-EMIMO-v1430': {'members': [{'element': {'type': 'NZP-ResourceConfig-r13'}, 'name': 'nzp-resourceConfigListExt-r14', 'size': [(0, 4)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'cdmType-v1430', 'optional': True, 'type': 'ENUMERATED', 'values': [('cdm8', 0)]}], 'type': 'SEQUENCE'}, 'CSI-RS-ConfigNZP-r11': {'members': [{'name': 'csi-RS-ConfigNZPId-r11', 'type': 'CSI-RS-ConfigNZPId-r11'}, {'name': 'antennaPortsCount-r11', 'type': 'ENUMERATED', 'values': [('an1', 0), ('an2', 1), ('an4', 2), ('an8', 3)]}, {'name': 'resourceConfig-r11', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'subframeConfig-r11', 'restricted-to': [(0, 154)], 'type': 'INTEGER'}, {'name': 'scramblingIdentity-r11', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'members': [{'name': 'qcl-ScramblingIdentity-r11', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'crs-PortsCount-r11', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n4', 2), ('spare1', 3)]}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'subframeConfigList', 'type': 'MBSFN-SubframeConfigList'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'mbsfn-SubframeConfigList-r11', 'optional': True, 'type': 'CHOICE'}], 'name': 'qcl-CRS-Info-r11', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'csi-RS-ConfigNZPId-v1310', 'optional': True, 'type': 'CSI-RS-ConfigNZPId-v1310'}], [{'name': 'transmissionComb-r14', 'optional': True, 'type': 'NZP-TransmissionComb-r14'}, {'name': 'frequencyDensity-r14', 'optional': True, 'type': 'NZP-FrequencyDensity-r14'}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'subframeConfigList-v1430', 'type': 'MBSFN-SubframeConfigList-v1430'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'mbsfn-SubframeConfigList-v1430', 'optional': True, 'type': 'CHOICE'}]], 'type': 'SEQUENCE'}, 'CSI-RS-ConfigNZPId-r11': {'restricted-to': [(1, 'maxCSI-RS-NZP-r11')], 'type': 'INTEGER'}, 'CSI-RS-ConfigNZPId-r13': {'restricted-to': [(1, 'maxCSI-RS-NZP-r13')], 'type': 'INTEGER'}, 'CSI-RS-ConfigNZPId-v1310': {'restricted-to': [('minCSI-RS-NZP-r13', 'maxCSI-RS-NZP-r13')], 'type': 'INTEGER'}, 'CSI-RS-ConfigNZPToAddModList-r11': {'element': {'type': 'CSI-RS-ConfigNZP-r11'}, 'size': [(1, 'maxCSI-RS-NZP-r11')], 'type': 'SEQUENCE ' 'OF'}, 'CSI-RS-ConfigNZPToAddModListExt-r13': {'element': {'type': 'CSI-RS-ConfigNZP-r11'}, 'size': [(1, 'maxCSI-RS-NZP-v1310')], 'type': 'SEQUENCE ' 'OF'}, 'CSI-RS-ConfigNZPToReleaseList-r11': {'element': {'type': 'CSI-RS-ConfigNZPId-r11'}, 'size': [(1, 'maxCSI-RS-NZP-r11')], 'type': 'SEQUENCE ' 'OF'}, 'CSI-RS-ConfigNZPToReleaseListExt-r13': {'element': {'type': 'CSI-RS-ConfigNZPId-v1310'}, 'size': [(1, 'maxCSI-RS-NZP-v1310')], 'type': 'SEQUENCE ' 'OF'}, 'CSI-RS-ConfigNonPrecoded-r13': {'members': [{'name': 'p-C-AndCBSRList-r13', 'optional': True, 'type': 'P-C-AndCBSR-Pair-r13'}, {'name': 'codebookConfigN1-r13', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n8', 4)]}, {'name': 'codebookConfigN2-r13', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n8', 4)]}, {'name': 'codebookOverSamplingRateConfig-O1-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1)]}, {'name': 'codebookOverSamplingRateConfig-O2-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1)]}, {'name': 'codebookConfig-r13', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}, {'element': {'type': 'CSI-IM-ConfigId-r13'}, 'name': 'csi-IM-ConfigIdList-r13', 'optional': True, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'csi-RS-ConfigNZP-EMIMO-r13', 'optional': True, 'type': 'CSI-RS-ConfigNZP-EMIMO-r13'}], 'type': 'SEQUENCE'}, 'CSI-RS-ConfigNonPrecoded-v1430': {'members': [{'name': 'csi-RS-ConfigNZP-EMIMO-v1430', 'optional': True, 'type': 'CSI-RS-ConfigNZP-EMIMO-v1430'}, {'name': 'codebookConfigN1-v1430', 'type': 'ENUMERATED', 'values': [('n5', 0), ('n6', 1), ('n7', 2), ('n10', 3), ('n12', 4), ('n14', 5), ('n16', 6)]}, {'name': 'codebookConfigN2-r1430', 'type': 'ENUMERATED', 'values': [('n5', 0), ('n6', 1), ('n7', 2)]}, {'name': 'nzp-ResourceConfigTM9-Original-v1430', 'type': 'CSI-RS-Config-NZP-v1430'}], 'type': 'SEQUENCE'}, 'CSI-RS-ConfigZP-ApList-r14': {'members': [{'name': 'release', 'type': 'NULL'}, {'element': {'type': 'CSI-RS-ConfigZP-r11'}, 'name': 'setup', 'size': [(1, 'maxCSI-RS-ZP-r11')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'CHOICE'}, 'CSI-RS-ConfigZP-r11': {'members': [{'name': 'csi-RS-ConfigZPId-r11', 'type': 'CSI-RS-ConfigZPId-r11'}, {'name': 'resourceConfigList-r11', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'subframeConfig-r11', 'restricted-to': [(0, 154)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'CSI-RS-ConfigZPId-r11': {'restricted-to': [(1, 'maxCSI-RS-ZP-r11')], 'type': 'INTEGER'}, 'CSI-RS-ConfigZPToAddModList-r11': {'element': {'type': 'CSI-RS-ConfigZP-r11'}, 'size': [(1, 'maxCSI-RS-ZP-r11')], 'type': 'SEQUENCE ' 'OF'}, 'CSI-RS-ConfigZPToReleaseList-r11': {'element': {'type': 'CSI-RS-ConfigZPId-r11'}, 'size': [(1, 'maxCSI-RS-ZP-r11')], 'type': 'SEQUENCE ' 'OF'}, 'CSI-RSRP-Range-r12': {'restricted-to': [(0, 97)], 'type': 'INTEGER'}, 'CarrierBandwidthEUTRA': {'members': [{'name': 'dl-Bandwidth', 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5), ('spare10', 6), ('spare9', 7), ('spare8', 8), ('spare7', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'ul-Bandwidth', 'optional': True, 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5), ('spare10', 6), ('spare9', 7), ('spare8', 8), ('spare7', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}], 'type': 'SEQUENCE'}, 'CarrierFreqCDMA2000': {'members': [{'name': 'bandClass', 'type': 'BandclassCDMA2000'}, {'name': 'arfcn', 'type': 'ARFCN-ValueCDMA2000'}], 'type': 'SEQUENCE'}, 'CarrierFreqEUTRA': {'members': [{'name': 'dl-CarrierFreq', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'ul-CarrierFreq', 'optional': True, 'type': 'ARFCN-ValueEUTRA'}], 'type': 'SEQUENCE'}, 'CarrierFreqEUTRA-v9e0': {'members': [{'name': 'dl-CarrierFreq-v9e0', 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'ul-CarrierFreq-v9e0', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r9'}], 'type': 'SEQUENCE'}, 'CarrierFreqGERAN': {'members': [{'name': 'arfcn', 'type': 'ARFCN-ValueGERAN'}, {'name': 'bandIndicator', 'type': 'BandIndicatorGERAN'}], 'type': 'SEQUENCE'}, 'CarrierFreqInfoUTRA-FDD-v8h0': {'members': [{'element': {'type': 'FreqBandIndicator-UTRA-FDD'}, 'name': 'multiBandInfoList', 'optional': True, 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'CarrierFreqInfoUTRA-v1250': {'members': [{'name': 'reducedMeasPerformance-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'CarrierFreqListMBMS-r11': {'element': {'type': 'ARFCN-ValueEUTRA-r9'}, 'size': [(1, 'maxFreqMBMS-r11')], 'type': 'SEQUENCE ' 'OF'}, 'CarrierFreqListUTRA-FDD': {'element': {'type': 'CarrierFreqUTRA-FDD'}, 'size': [(1, 'maxUTRA-FDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, 'CarrierFreqListUTRA-FDD-Ext-r12': {'element': {'type': 'CarrierFreqUTRA-FDD-Ext-r12'}, 'size': [(1, 'maxUTRA-FDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, 'CarrierFreqListUTRA-TDD': {'element': {'type': 'CarrierFreqUTRA-TDD'}, 'size': [(1, 'maxUTRA-TDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, 'CarrierFreqListUTRA-TDD-Ext-r12': {'element': {'type': 'CarrierFreqUTRA-TDD-r12'}, 'size': [(1, 'maxUTRA-TDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, 'CarrierFreqListUTRA-TDD-r10': {'element': {'type': 'ARFCN-ValueUTRA'}, 'size': [(1, 'maxFreqUTRA-TDD-r10')], 'type': 'SEQUENCE ' 'OF'}, 'CarrierFreqUTRA-FDD': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueUTRA'}, {'name': 'cellReselectionPriority', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'threshX-High', 'type': 'ReselectionThreshold'}, {'name': 'threshX-Low', 'type': 'ReselectionThreshold'}, {'name': 'q-RxLevMin', 'restricted-to': [(-60, -13)], 'type': 'INTEGER'}, {'name': 'p-MaxUTRA', 'restricted-to': [(-50, 33)], 'type': 'INTEGER'}, {'name': 'q-QualMin', 'restricted-to': [(-24, 0)], 'type': 'INTEGER'}, None, [{'members': [{'name': 'threshX-HighQ-r9', 'type': 'ReselectionThresholdQ-r9'}, {'name': 'threshX-LowQ-r9', 'type': 'ReselectionThresholdQ-r9'}], 'name': 'threshX-Q-r9', 'optional': True, 'type': 'SEQUENCE'}]], 'type': 'SEQUENCE'}, 'CarrierFreqUTRA-FDD-Ext-r12': {'members': [{'name': 'carrierFreq-r12', 'type': 'ARFCN-ValueUTRA'}, {'name': 'cellReselectionPriority-r12', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'threshX-High-r12', 'type': 'ReselectionThreshold'}, {'name': 'threshX-Low-r12', 'type': 'ReselectionThreshold'}, {'name': 'q-RxLevMin-r12', 'restricted-to': [(-60, -13)], 'type': 'INTEGER'}, {'name': 'p-MaxUTRA-r12', 'restricted-to': [(-50, 33)], 'type': 'INTEGER'}, {'name': 'q-QualMin-r12', 'restricted-to': [(-24, 0)], 'type': 'INTEGER'}, {'members': [{'name': 'threshX-HighQ-r12', 'type': 'ReselectionThresholdQ-r9'}, {'name': 'threshX-LowQ-r12', 'type': 'ReselectionThresholdQ-r9'}], 'name': 'threshX-Q-r12', 'optional': True, 'type': 'SEQUENCE'}, {'element': {'type': 'FreqBandIndicator-UTRA-FDD'}, 'name': 'multiBandInfoList-r12', 'optional': True, 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'reducedMeasPerformance-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, None], 'type': 'SEQUENCE'}, 'CarrierFreqUTRA-TDD': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueUTRA'}, {'name': 'cellReselectionPriority', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'threshX-High', 'type': 'ReselectionThreshold'}, {'name': 'threshX-Low', 'type': 'ReselectionThreshold'}, {'name': 'q-RxLevMin', 'restricted-to': [(-60, -13)], 'type': 'INTEGER'}, {'name': 'p-MaxUTRA', 'restricted-to': [(-50, 33)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'CarrierFreqUTRA-TDD-r12': {'members': [{'name': 'carrierFreq-r12', 'type': 'ARFCN-ValueUTRA'}, {'name': 'cellReselectionPriority-r12', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'threshX-High-r12', 'type': 'ReselectionThreshold'}, {'name': 'threshX-Low-r12', 'type': 'ReselectionThreshold'}, {'name': 'q-RxLevMin-r12', 'restricted-to': [(-60, -13)], 'type': 'INTEGER'}, {'name': 'p-MaxUTRA-r12', 'restricted-to': [(-50, 33)], 'type': 'INTEGER'}, {'name': 'reducedMeasPerformance-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, None], 'type': 'SEQUENCE'}, 'CarrierFreqsGERAN': {'members': [{'name': 'startingARFCN', 'type': 'ARFCN-ValueGERAN'}, {'name': 'bandIndicator', 'type': 'BandIndicatorGERAN'}, {'members': [{'name': 'explicitListOfARFCNs', 'type': 'ExplicitListOfARFCNs'}, {'members': [{'name': 'arfcn-Spacing', 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, {'name': 'numberOfFollowingARFCNs', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}], 'name': 'equallySpacedARFCNs', 'type': 'SEQUENCE'}, {'name': 'variableBitMapOfARFCNs', 'size': [(1, 16)], 'type': 'OCTET ' 'STRING'}], 'name': 'followingARFCNs', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CarrierFreqsInfoGERAN': {'members': [{'name': 'carrierFreqs', 'type': 'CarrierFreqsGERAN'}, {'members': [{'name': 'cellReselectionPriority', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'ncc-Permitted', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'q-RxLevMin', 'restricted-to': [(0, 45)], 'type': 'INTEGER'}, {'name': 'p-MaxGERAN', 'optional': True, 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'threshX-High', 'type': 'ReselectionThreshold'}, {'name': 'threshX-Low', 'type': 'ReselectionThreshold'}], 'name': 'commonInfo', 'type': 'SEQUENCE'}, None], 'type': 'SEQUENCE'}, 'CarrierFreqsInfoListGERAN': {'element': {'type': 'CarrierFreqsInfoGERAN'}, 'size': [(1, 'maxGNFG')], 'type': 'SEQUENCE ' 'OF'}, 'CellAccessRelatedInfo-r14': {'members': [{'name': 'plmn-IdentityList-r14', 'type': 'PLMN-IdentityList'}, {'name': 'trackingAreaCode-r14', 'type': 'TrackingAreaCode'}, {'name': 'cellIdentity-r14', 'type': 'CellIdentity'}], 'type': 'SEQUENCE'}, 'CellChangeOrder': {'members': [{'name': 't304', 'type': 'ENUMERATED', 'values': [('ms100', 0), ('ms200', 1), ('ms500', 2), ('ms1000', 3), ('ms2000', 4), ('ms4000', 5), ('ms8000', 6), ('ms10000-v1310', 7)]}, {'members': [{'members': [{'name': 'physCellId', 'type': 'PhysCellIdGERAN'}, {'name': 'carrierFreq', 'type': 'CarrierFreqGERAN'}, {'name': 'networkControlOrder', 'optional': True, 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'systemInformation', 'optional': True, 'type': 'SI-OrPSI-GERAN'}], 'name': 'geran', 'type': 'SEQUENCE'}, None], 'name': 'targetRAT-Type', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CellGlobalIdCDMA2000': {'members': [{'name': 'cellGlobalId1XRTT', 'size': [47], 'type': 'BIT ' 'STRING'}, {'name': 'cellGlobalIdHRPD', 'size': [128], 'type': 'BIT ' 'STRING'}], 'type': 'CHOICE'}, 'CellGlobalIdEUTRA': {'members': [{'name': 'plmn-Identity', 'type': 'PLMN-Identity'}, {'name': 'cellIdentity', 'type': 'CellIdentity'}], 'type': 'SEQUENCE'}, 'CellGlobalIdGERAN': {'members': [{'name': 'plmn-Identity', 'type': 'PLMN-Identity'}, {'name': 'locationAreaCode', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'cellIdentity', 'size': [16], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'CellGlobalIdList-r10': {'element': {'type': 'CellGlobalIdEUTRA'}, 'size': [(1, 32)], 'type': 'SEQUENCE ' 'OF'}, 'CellGlobalIdUTRA': {'members': [{'name': 'plmn-Identity', 'type': 'PLMN-Identity'}, {'name': 'cellIdentity', 'size': [28], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'CellIdentity': {'size': [28], 'type': 'BIT STRING'}, 'CellIndex': {'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, 'CellIndexList': {'element': {'type': 'CellIndex'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE OF'}, 'CellInfoGERAN-r9': {'members': [{'name': 'physCellId-r9', 'type': 'PhysCellIdGERAN'}, {'name': 'carrierFreq-r9', 'type': 'CarrierFreqGERAN'}, {'name': 'systemInformation-r9', 'type': 'SystemInfoListGERAN'}], 'type': 'SEQUENCE'}, 'CellInfoListGERAN-r9': {'element': {'type': 'CellInfoGERAN-r9'}, 'size': [(1, 'maxCellInfoGERAN-r9')], 'type': 'SEQUENCE ' 'OF'}, 'CellInfoListUTRA-FDD-r9': {'element': {'type': 'CellInfoUTRA-FDD-r9'}, 'size': [(1, 'maxCellInfoUTRA-r9')], 'type': 'SEQUENCE ' 'OF'}, 'CellInfoListUTRA-TDD-r10': {'element': {'type': 'CellInfoUTRA-TDD-r10'}, 'size': [(1, 'maxCellInfoUTRA-r9')], 'type': 'SEQUENCE ' 'OF'}, 'CellInfoListUTRA-TDD-r9': {'element': {'type': 'CellInfoUTRA-TDD-r9'}, 'size': [(1, 'maxCellInfoUTRA-r9')], 'type': 'SEQUENCE ' 'OF'}, 'CellInfoUTRA-FDD-r9': {'members': [{'name': 'physCellId-r9', 'type': 'PhysCellIdUTRA-FDD'}, {'name': 'utra-BCCH-Container-r9', 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'CellInfoUTRA-TDD-r10': {'members': [{'name': 'physCellId-r10', 'type': 'PhysCellIdUTRA-TDD'}, {'name': 'carrierFreq-r10', 'type': 'ARFCN-ValueUTRA'}, {'name': 'utra-BCCH-Container-r10', 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'CellInfoUTRA-TDD-r9': {'members': [{'name': 'physCellId-r9', 'type': 'PhysCellIdUTRA-TDD'}, {'name': 'utra-BCCH-Container-r9', 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'CellReselectionParametersCDMA2000': {'members': [{'name': 'bandClassList', 'type': 'BandClassListCDMA2000'}, {'name': 'neighCellList', 'type': 'NeighCellListCDMA2000'}, {'name': 't-ReselectionCDMA2000', 'type': 'T-Reselection'}, {'name': 't-ReselectionCDMA2000-SF', 'optional': True, 'type': 'SpeedStateScaleFactors'}], 'type': 'SEQUENCE'}, 'CellReselectionParametersCDMA2000-r11': {'members': [{'name': 'bandClassList', 'type': 'BandClassListCDMA2000'}, {'element': {'type': 'NeighCellCDMA2000-r11'}, 'name': 'neighCellList-r11', 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, {'name': 't-ReselectionCDMA2000', 'type': 'T-Reselection'}, {'name': 't-ReselectionCDMA2000-SF', 'optional': True, 'type': 'SpeedStateScaleFactors'}], 'type': 'SEQUENCE'}, 'CellReselectionParametersCDMA2000-v920': {'members': [{'name': 'neighCellList-v920', 'type': 'NeighCellListCDMA2000-v920'}], 'type': 'SEQUENCE'}, 'CellReselectionPriority': {'restricted-to': [(0, 7)], 'type': 'INTEGER'}, 'CellReselectionServingFreqInfo-v1310': {'members': [{'name': 'cellReselectionSubPriority-r13', 'type': 'CellReselectionSubPriority-r13'}], 'type': 'SEQUENCE'}, 'CellReselectionSubPriority-r13': {'type': 'ENUMERATED', 'values': [('oDot2', 0), ('oDot4', 1), ('oDot6', 2), ('oDot8', 3)]}, 'CellSelectionInfo-v1130': {'members': [{'name': 'q-QualMinWB-r11', 'type': 'Q-QualMin-r9'}], 'type': 'SEQUENCE'}, 'CellSelectionInfo-v1250': {'members': [{'name': 'q-QualMinRSRQ-OnAllSymbols-r12', 'type': 'Q-QualMin-r9'}], 'type': 'SEQUENCE'}, 'CellSelectionInfo-v920': {'members': [{'name': 'q-QualMin-r9', 'type': 'Q-QualMin-r9'}, {'name': 'q-QualMinOffset-r9', 'optional': True, 'restricted-to': [(1, 8)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'CellSelectionInfoCE-r13': {'members': [{'name': 'q-RxLevMinCE-r13', 'type': 'Q-RxLevMin'}, {'name': 'q-QualMinRSRQ-CE-r13', 'optional': True, 'type': 'Q-QualMin-r9'}], 'type': 'SEQUENCE'}, 'CellSelectionInfoCE1-r13': {'members': [{'name': 'q-RxLevMinCE1-r13', 'type': 'Q-RxLevMin'}, {'name': 'q-QualMinRSRQ-CE1-r13', 'optional': True, 'type': 'Q-QualMin-r9'}], 'type': 'SEQUENCE'}, 'CellSelectionInfoCE1-v1360': {'members': [{'name': 'delta-RxLevMinCE1-v1360', 'restricted-to': [(-8, -1)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'CellSelectionInfoNFreq-r13': {'members': [{'name': 'q-RxLevMin-r13', 'type': 'Q-RxLevMin'}, {'name': 'q-RxLevMinOffset', 'optional': True, 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, {'name': 'q-Hyst-r13', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB1', 1), ('dB2', 2), ('dB3', 3), ('dB4', 4), ('dB5', 5), ('dB6', 6), ('dB8', 7), ('dB10', 8), ('dB12', 9), ('dB14', 10), ('dB16', 11), ('dB18', 12), ('dB20', 13), ('dB22', 14), ('dB24', 15)]}, {'name': 'q-RxLevMinReselection-r13', 'type': 'Q-RxLevMin'}, {'name': 't-ReselectionEUTRA-r13', 'type': 'T-Reselection'}], 'type': 'SEQUENCE'}, 'CellsToAddMod': {'members': [{'name': 'cellIndex', 'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, {'name': 'physCellId', 'type': 'PhysCellId'}, {'name': 'cellIndividualOffset', 'type': 'Q-OffsetRange'}], 'type': 'SEQUENCE'}, 'CellsToAddModCDMA2000': {'members': [{'name': 'cellIndex', 'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, {'name': 'physCellId', 'type': 'PhysCellIdCDMA2000'}], 'type': 'SEQUENCE'}, 'CellsToAddModList': {'element': {'type': 'CellsToAddMod'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'CellsToAddModListCDMA2000': {'element': {'type': 'CellsToAddModCDMA2000'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'CellsToAddModListUTRA-FDD': {'element': {'type': 'CellsToAddModUTRA-FDD'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'CellsToAddModListUTRA-TDD': {'element': {'type': 'CellsToAddModUTRA-TDD'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'CellsToAddModUTRA-FDD': {'members': [{'name': 'cellIndex', 'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, {'name': 'physCellId', 'type': 'PhysCellIdUTRA-FDD'}], 'type': 'SEQUENCE'}, 'CellsToAddModUTRA-TDD': {'members': [{'name': 'cellIndex', 'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, {'name': 'physCellId', 'type': 'PhysCellIdUTRA-TDD'}], 'type': 'SEQUENCE'}, 'CipheringAlgorithm-r12': {'type': 'ENUMERATED', 'values': [('eea0', 0), ('eea1', 1), ('eea2', 2), ('eea3-v1130', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7), None]}, 'CommonSF-AllocPatternList-r14': {'element': {'type': 'MBSFN-SubframeConfig-v1430'}, 'size': [(1, 'maxMBSFN-Allocations')], 'type': 'SEQUENCE ' 'OF'}, 'CommonSF-AllocPatternList-r9': {'element': {'type': 'MBSFN-SubframeConfig'}, 'size': [(1, 'maxMBSFN-Allocations')], 'type': 'SEQUENCE ' 'OF'}, 'ConnEstFailReport-r11': {'members': [{'name': 'failedCellId-r11', 'type': 'CellGlobalIdEUTRA'}, {'name': 'locationInfo-r11', 'optional': True, 'type': 'LocationInfo-r10'}, {'members': [{'name': 'rsrpResult-r11', 'type': 'RSRP-Range'}, {'name': 'rsrqResult-r11', 'optional': True, 'type': 'RSRQ-Range'}], 'name': 'measResultFailedCell-r11', 'type': 'SEQUENCE'}, {'members': [{'name': 'measResultListEUTRA-r11', 'optional': True, 'type': 'MeasResultList2EUTRA-r9'}, {'name': 'measResultListUTRA-r11', 'optional': True, 'type': 'MeasResultList2UTRA-r9'}, {'name': 'measResultListGERAN-r11', 'optional': True, 'type': 'MeasResultListGERAN'}, {'name': 'measResultsCDMA2000-r11', 'optional': True, 'type': 'MeasResultList2CDMA2000-r9'}], 'name': 'measResultNeighCells-r11', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'numberOfPreamblesSent-r11', 'type': 'NumberOfPreamblesSent-r11'}, {'name': 'contentionDetected-r11', 'type': 'BOOLEAN'}, {'name': 'maxTxPowerReached-r11', 'type': 'BOOLEAN'}, {'name': 'timeSinceFailure-r11', 'type': 'TimeSinceFailure-r11'}, {'name': 'measResultListEUTRA-v1130', 'optional': True, 'type': 'MeasResultList2EUTRA-v9e0'}, None, [{'name': 'measResultFailedCell-v1250', 'optional': True, 'type': 'RSRQ-Range-v1250'}, {'name': 'failedCellRSRQ-Type-r12', 'optional': True, 'type': 'RSRQ-Type-r12'}, {'name': 'measResultListEUTRA-v1250', 'optional': True, 'type': 'MeasResultList2EUTRA-v1250'}], [{'name': 'measResultFailedCell-v1360', 'optional': True, 'type': 'RSRP-Range-v1360'}]], 'type': 'SEQUENCE'}, 'CounterCheck': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'counterCheck-r8', 'type': 'CounterCheck-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CounterCheck-r8-IEs': {'members': [{'name': 'drb-CountMSB-InfoList', 'type': 'DRB-CountMSB-InfoList'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'CounterCheck-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'CounterCheck-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'CounterCheckResponse': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'counterCheckResponse-r8', 'type': 'CounterCheckResponse-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CounterCheckResponse-r8-IEs': {'members': [{'name': 'drb-CountInfoList', 'type': 'DRB-CountInfoList'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'CounterCheckResponse-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'CounterCheckResponse-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'CountingRequestInfo-r10': {'members': [{'name': 'tmgi-r10', 'type': 'TMGI-r9'}, None], 'type': 'SEQUENCE'}, 'CountingRequestList-r10': {'element': {'type': 'CountingRequestInfo-r10'}, 'size': [(1, 'maxServiceCount')], 'type': 'SEQUENCE ' 'OF'}, 'CountingResponseInfo-r10': {'members': [{'name': 'countingResponseService-r10', 'restricted-to': [(0, 'maxServiceCount-1')], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'CountingResponseList-r10': {'element': {'type': 'CountingResponseInfo-r10'}, 'size': [(1, 'maxServiceCount')], 'type': 'SEQUENCE ' 'OF'}, 'CrossCarrierSchedulingConfig-r10': {'members': [{'members': [{'members': [{'name': 'cif-Presence-r10', 'type': 'BOOLEAN'}], 'name': 'own-r10', 'type': 'SEQUENCE'}, {'members': [{'name': 'schedulingCellId-r10', 'type': 'ServCellIndex-r10'}, {'name': 'pdsch-Start-r10', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}], 'name': 'other-r10', 'type': 'SEQUENCE'}], 'name': 'schedulingCellInfo-r10', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CrossCarrierSchedulingConfig-r13': {'members': [{'members': [{'members': [{'name': 'cif-Presence-r13', 'type': 'BOOLEAN'}], 'name': 'own-r13', 'type': 'SEQUENCE'}, {'members': [{'name': 'schedulingCellId-r13', 'type': 'ServCellIndex-r13'}, {'name': 'pdsch-Start-r13', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}, {'name': 'cif-InSchedulingCell-r13', 'restricted-to': [(1, 7)], 'type': 'INTEGER'}], 'name': 'other-r13', 'type': 'SEQUENCE'}], 'name': 'schedulingCellInfo-r13', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CrossCarrierSchedulingConfigLAA-UL-r14': {'members': [{'name': 'schedulingCellId-r14', 'type': 'ServCellIndex-r13'}, {'name': 'cif-InSchedulingCell-r14', 'restricted-to': [(1, 7)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'DC-Parameters-r12': {'members': [{'name': 'drb-TypeSplit-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'drb-TypeSCG-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'DC-Parameters-v1310': {'members': [{'name': 'pdcp-TransferSplitUL-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ue-SSTD-Meas-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'DL-AM-RLC': {'members': [{'name': 't-Reordering', 'type': 'T-Reordering'}, {'name': 't-StatusProhibit', 'type': 'T-StatusProhibit'}], 'type': 'SEQUENCE'}, 'DL-CCCH-Message': {'members': [{'name': 'message', 'type': 'DL-CCCH-MessageType'}], 'type': 'SEQUENCE'}, 'DL-CCCH-MessageType': {'members': [{'members': [{'name': 'rrcConnectionReestablishment', 'type': 'RRCConnectionReestablishment'}, {'name': 'rrcConnectionReestablishmentReject', 'type': 'RRCConnectionReestablishmentReject'}, {'name': 'rrcConnectionReject', 'type': 'RRCConnectionReject'}, {'name': 'rrcConnectionSetup', 'type': 'RRCConnectionSetup'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'DL-DCCH-Message': {'members': [{'name': 'message', 'type': 'DL-DCCH-MessageType'}], 'type': 'SEQUENCE'}, 'DL-DCCH-MessageType': {'members': [{'members': [{'name': 'csfbParametersResponseCDMA2000', 'type': 'CSFBParametersResponseCDMA2000'}, {'name': 'dlInformationTransfer', 'type': 'DLInformationTransfer'}, {'name': 'handoverFromEUTRAPreparationRequest', 'type': 'HandoverFromEUTRAPreparationRequest'}, {'name': 'mobilityFromEUTRACommand', 'type': 'MobilityFromEUTRACommand'}, {'name': 'rrcConnectionReconfiguration', 'type': 'RRCConnectionReconfiguration'}, {'name': 'rrcConnectionRelease', 'type': 'RRCConnectionRelease'}, {'name': 'securityModeCommand', 'type': 'SecurityModeCommand'}, {'name': 'ueCapabilityEnquiry', 'type': 'UECapabilityEnquiry'}, {'name': 'counterCheck', 'type': 'CounterCheck'}, {'name': 'ueInformationRequest-r9', 'type': 'UEInformationRequest-r9'}, {'name': 'loggedMeasurementConfiguration-r10', 'type': 'LoggedMeasurementConfiguration-r10'}, {'name': 'rnReconfiguration-r10', 'type': 'RNReconfiguration-r10'}, {'name': 'rrcConnectionResume-r13', 'type': 'RRCConnectionResume-r13'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'DL-UM-RLC': {'members': [{'name': 'sn-FieldLength', 'type': 'SN-FieldLength'}, {'name': 't-Reordering', 'type': 'T-Reordering'}], 'type': 'SEQUENCE'}, 'DLInformationTransfer': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'dlInformationTransfer-r8', 'type': 'DLInformationTransfer-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'DLInformationTransfer-r8-IEs': {'members': [{'members': [{'name': 'dedicatedInfoNAS', 'type': 'DedicatedInfoNAS'}, {'name': 'dedicatedInfoCDMA2000-1XRTT', 'type': 'DedicatedInfoCDMA2000'}, {'name': 'dedicatedInfoCDMA2000-HRPD', 'type': 'DedicatedInfoCDMA2000'}], 'name': 'dedicatedInfoType', 'type': 'CHOICE'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'DLInformationTransfer-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'DLInformationTransfer-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'DMRS-Config-r11': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'scramblingIdentity-r11', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'scramblingIdentity2-r11', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'DMRS-Config-v1310': {'members': [{'name': 'dmrs-tableAlt-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'DRB-CountInfo': {'members': [{'name': 'drb-Identity', 'type': 'DRB-Identity'}, {'name': 'count-Uplink', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}, {'name': 'count-Downlink', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'DRB-CountInfoList': {'element': {'type': 'DRB-CountInfo'}, 'size': [(0, 'maxDRB')], 'type': 'SEQUENCE ' 'OF'}, 'DRB-CountMSB-Info': {'members': [{'name': 'drb-Identity', 'type': 'DRB-Identity'}, {'name': 'countMSB-Uplink', 'restricted-to': [(0, 33554431)], 'type': 'INTEGER'}, {'name': 'countMSB-Downlink', 'restricted-to': [(0, 33554431)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'DRB-CountMSB-InfoList': {'element': {'type': 'DRB-CountMSB-Info'}, 'size': [(1, 'maxDRB')], 'type': 'SEQUENCE ' 'OF'}, 'DRB-Identity': {'restricted-to': [(1, 32)], 'type': 'INTEGER'}, 'DRB-ToAddMod': {'members': [{'name': 'eps-BearerIdentity', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'drb-Identity', 'type': 'DRB-Identity'}, {'name': 'pdcp-Config', 'optional': True, 'type': 'PDCP-Config'}, {'name': 'rlc-Config', 'optional': True, 'type': 'RLC-Config'}, {'name': 'logicalChannelIdentity', 'optional': True, 'restricted-to': [(3, 10)], 'type': 'INTEGER'}, {'name': 'logicalChannelConfig', 'optional': True, 'type': 'LogicalChannelConfig'}, None, [{'name': 'drb-TypeChange-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('toMCG', 0)]}, {'name': 'rlc-Config-v1250', 'optional': True, 'type': 'RLC-Config-v1250'}], [{'name': 'rlc-Config-v1310', 'optional': True, 'type': 'RLC-Config-v1310'}, {'name': 'drb-TypeLWA-r13', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'drb-TypeLWIP-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('lwip', 0), ('lwip-DL-only', 1), ('lwip-UL-only', 2), ('eutran', 3)]}], [{'name': 'rlc-Config-v1430', 'optional': True, 'type': 'RLC-Config-v1430'}, {'name': 'lwip-UL-Aggregation-r14', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'lwip-DL-Aggregation-r14', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'lwa-WLAN-AC-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('ac-bk', 0), ('ac-be', 1), ('ac-vi', 2), ('ac-vo', 3)]}]], 'type': 'SEQUENCE'}, 'DRB-ToAddModList': {'element': {'type': 'DRB-ToAddMod'}, 'size': [(1, 'maxDRB')], 'type': 'SEQUENCE ' 'OF'}, 'DRB-ToAddModListSCG-r12': {'element': {'type': 'DRB-ToAddModSCG-r12'}, 'size': [(1, 'maxDRB')], 'type': 'SEQUENCE ' 'OF'}, 'DRB-ToAddModSCG-r12': {'members': [{'name': 'drb-Identity-r12', 'type': 'DRB-Identity'}, {'members': [{'name': 'split-r12', 'type': 'NULL'}, {'members': [{'name': 'eps-BearerIdentity-r12', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'pdcp-Config-r12', 'optional': True, 'type': 'PDCP-Config'}], 'name': 'scg-r12', 'type': 'SEQUENCE'}], 'name': 'drb-Type-r12', 'optional': True, 'type': 'CHOICE'}, {'name': 'rlc-ConfigSCG-r12', 'optional': True, 'type': 'RLC-Config'}, {'name': 'rlc-Config-v1250', 'optional': True, 'type': 'RLC-Config-v1250'}, {'name': 'logicalChannelIdentitySCG-r12', 'optional': True, 'restricted-to': [(3, 10)], 'type': 'INTEGER'}, {'name': 'logicalChannelConfigSCG-r12', 'optional': True, 'type': 'LogicalChannelConfig'}, None, [{'name': 'rlc-Config-v1430', 'optional': True, 'type': 'RLC-Config-v1430'}]], 'type': 'SEQUENCE'}, 'DRB-ToReleaseList': {'element': {'type': 'DRB-Identity'}, 'size': [(1, 'maxDRB')], 'type': 'SEQUENCE ' 'OF'}, 'DRX-Config': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'onDurationTimer', 'type': 'ENUMERATED', 'values': [('psf1', 0), ('psf2', 1), ('psf3', 2), ('psf4', 3), ('psf5', 4), ('psf6', 5), ('psf8', 6), ('psf10', 7), ('psf20', 8), ('psf30', 9), ('psf40', 10), ('psf50', 11), ('psf60', 12), ('psf80', 13), ('psf100', 14), ('psf200', 15)]}, {'name': 'drx-InactivityTimer', 'type': 'ENUMERATED', 'values': [('psf1', 0), ('psf2', 1), ('psf3', 2), ('psf4', 3), ('psf5', 4), ('psf6', 5), ('psf8', 6), ('psf10', 7), ('psf20', 8), ('psf30', 9), ('psf40', 10), ('psf50', 11), ('psf60', 12), ('psf80', 13), ('psf100', 14), ('psf200', 15), ('psf300', 16), ('psf500', 17), ('psf750', 18), ('psf1280', 19), ('psf1920', 20), ('psf2560', 21), ('psf0-v1020', 22), ('spare9', 23), ('spare8', 24), ('spare7', 25), ('spare6', 26), ('spare5', 27), ('spare4', 28), ('spare3', 29), ('spare2', 30), ('spare1', 31)]}, {'name': 'drx-RetransmissionTimer', 'type': 'ENUMERATED', 'values': [('psf1', 0), ('psf2', 1), ('psf4', 2), ('psf6', 3), ('psf8', 4), ('psf16', 5), ('psf24', 6), ('psf33', 7)]}, {'members': [{'name': 'sf10', 'restricted-to': [(0, 9)], 'type': 'INTEGER'}, {'name': 'sf20', 'restricted-to': [(0, 19)], 'type': 'INTEGER'}, {'name': 'sf32', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'sf40', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'sf64', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'sf80', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, {'name': 'sf128', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'sf160', 'restricted-to': [(0, 159)], 'type': 'INTEGER'}, {'name': 'sf256', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'sf320', 'restricted-to': [(0, 319)], 'type': 'INTEGER'}, {'name': 'sf512', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, {'name': 'sf640', 'restricted-to': [(0, 639)], 'type': 'INTEGER'}, {'name': 'sf1024', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'sf1280', 'restricted-to': [(0, 1279)], 'type': 'INTEGER'}, {'name': 'sf2048', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'sf2560', 'restricted-to': [(0, 2559)], 'type': 'INTEGER'}], 'name': 'longDRX-CycleStartOffset', 'type': 'CHOICE'}, {'members': [{'name': 'shortDRX-Cycle', 'type': 'ENUMERATED', 'values': [('sf2', 0), ('sf5', 1), ('sf8', 2), ('sf10', 3), ('sf16', 4), ('sf20', 5), ('sf32', 6), ('sf40', 7), ('sf64', 8), ('sf80', 9), ('sf128', 10), ('sf160', 11), ('sf256', 12), ('sf320', 13), ('sf512', 14), ('sf640', 15)]}, {'name': 'drxShortCycleTimer', 'restricted-to': [(1, 16)], 'type': 'INTEGER'}], 'name': 'shortDRX', 'optional': True, 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'DRX-Config-r13': {'members': [{'name': 'onDurationTimer-v1310', 'optional': True, 'type': 'ENUMERATED', 'values': [('psf300', 0), ('psf400', 1), ('psf500', 2), ('psf600', 3), ('psf800', 4), ('psf1000', 5), ('psf1200', 6), ('psf1600', 7)]}, {'name': 'drx-RetransmissionTimer-v1310', 'optional': True, 'type': 'ENUMERATED', 'values': [('psf40', 0), ('psf64', 1), ('psf80', 2), ('psf96', 3), ('psf112', 4), ('psf128', 5), ('psf160', 6), ('psf320', 7)]}, {'name': 'drx-ULRetransmissionTimer-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('psf0', 0), ('psf1', 1), ('psf2', 2), ('psf4', 3), ('psf6', 4), ('psf8', 5), ('psf16', 6), ('psf24', 7), ('psf33', 8), ('psf40', 9), ('psf64', 10), ('psf80', 11), ('psf96', 12), ('psf112', 13), ('psf128', 14), ('psf160', 15), ('psf320', 16)]}], 'type': 'SEQUENCE'}, 'DRX-Config-v1130': {'members': [{'name': 'drx-RetransmissionTimer-v1130', 'optional': True, 'type': 'ENUMERATED', 'values': [('psf0-v1130', 0)]}, {'members': [{'name': 'sf60-v1130', 'restricted-to': [(0, 59)], 'type': 'INTEGER'}, {'name': 'sf70-v1130', 'restricted-to': [(0, 69)], 'type': 'INTEGER'}], 'name': 'longDRX-CycleStartOffset-v1130', 'optional': True, 'type': 'CHOICE'}, {'name': 'shortDRX-Cycle-v1130', 'optional': True, 'type': 'ENUMERATED', 'values': [('sf4-v1130', 0)]}], 'type': 'SEQUENCE'}, 'DRX-Config-v1310': {'members': [{'members': [{'name': 'sf60-v1310', 'restricted-to': [(0, 59)], 'type': 'INTEGER'}], 'name': 'longDRX-CycleStartOffset-v1310', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'DataBLER-MCH-Result-r12': {'members': [{'name': 'mch-Index-r12', 'restricted-to': [(1, 'maxPMCH-PerMBSFN')], 'type': 'INTEGER'}, {'name': 'dataBLER-Result-r12', 'type': 'BLER-Result-r12'}], 'type': 'SEQUENCE'}, 'DataBLER-MCH-ResultList-r12': {'element': {'type': 'DataBLER-MCH-Result-r12'}, 'size': [(1, 'maxPMCH-PerMBSFN')], 'type': 'SEQUENCE ' 'OF'}, 'DataInactivityTimer-r14': {'type': 'ENUMERATED', 'values': [('s1', 0), ('s2', 1), ('s3', 2), ('s5', 3), ('s7', 4), ('s10', 5), ('s15', 6), ('s20', 7), ('s40', 8), ('s50', 9), ('s60', 10), ('s80', 11), ('s100', 12), ('s120', 13), ('s150', 14), ('s180', 15)]}, 'DedicatedInfoCDMA2000': {'type': 'OCTET ' 'STRING'}, 'DedicatedInfoNAS': {'type': 'OCTET ' 'STRING'}, 'DelayBudgetReport-r14': {'members': [{'name': 'type1', 'type': 'ENUMERATED', 'values': [('msMinus1280', 0), ('msMinus640', 1), ('msMinus320', 2), ('msMinus160', 3), ('msMinus80', 4), ('msMinus60', 5), ('msMinus40', 6), ('msMinus20', 7), ('ms0', 8), ('ms20', 9), ('ms40', 10), ('ms60', 11), ('ms80', 12), ('ms160', 13), ('ms320', 14), ('ms640', 15), ('ms1280', 16)]}, {'name': 'type2', 'type': 'ENUMERATED', 'values': [('msMinus192', 0), ('msMinus168', 1), ('msMinus144', 2), ('msMinus120', 3), ('msMinus96', 4), ('msMinus72', 5), ('msMinus48', 6), ('msMinus24', 7), ('ms0', 8), ('ms24', 9), ('ms48', 10), ('ms72', 11), ('ms96', 12), ('ms120', 13), ('ms144', 14), ('ms168', 15), ('ms192', 16)]}], 'type': 'CHOICE'}, 'DeltaFList-PUCCH': {'members': [{'name': 'deltaF-PUCCH-Format1', 'type': 'ENUMERATED', 'values': [('deltaF-2', 0), ('deltaF0', 1), ('deltaF2', 2)]}, {'name': 'deltaF-PUCCH-Format1b', 'type': 'ENUMERATED', 'values': [('deltaF1', 0), ('deltaF3', 1), ('deltaF5', 2)]}, {'name': 'deltaF-PUCCH-Format2', 'type': 'ENUMERATED', 'values': [('deltaF-2', 0), ('deltaF0', 1), ('deltaF1', 2), ('deltaF2', 3)]}, {'name': 'deltaF-PUCCH-Format2a', 'type': 'ENUMERATED', 'values': [('deltaF-2', 0), ('deltaF0', 1), ('deltaF2', 2)]}, {'name': 'deltaF-PUCCH-Format2b', 'type': 'ENUMERATED', 'values': [('deltaF-2', 0), ('deltaF0', 1), ('deltaF2', 2)]}], 'type': 'SEQUENCE'}, 'DeltaTxD-OffsetListPUCCH-r10': {'members': [{'name': 'deltaTxD-OffsetPUCCH-Format1-r10', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB-2', 1)]}, {'name': 'deltaTxD-OffsetPUCCH-Format1a1b-r10', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB-2', 1)]}, {'name': 'deltaTxD-OffsetPUCCH-Format22a2b-r10', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB-2', 1)]}, {'name': 'deltaTxD-OffsetPUCCH-Format3-r10', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB-2', 1)]}, None], 'type': 'SEQUENCE'}, 'DeltaTxD-OffsetListPUCCH-v1130': {'members': [{'name': 'deltaTxD-OffsetPUCCH-Format1bCS-r11', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB-1', 1)]}], 'type': 'SEQUENCE'}, 'E-CSFB-r9': {'members': [{'name': 'messageContCDMA2000-1XRTT-r9', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'mobilityCDMA2000-HRPD-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('handover', 0), ('redirection', 1)]}, {'name': 'messageContCDMA2000-HRPD-r9', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'redirectCarrierCDMA2000-HRPD-r9', 'optional': True, 'type': 'CarrierFreqCDMA2000'}], 'type': 'SEQUENCE'}, 'EAB-Config-r11': {'members': [{'name': 'eab-Category-r11', 'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), ('c', 2)]}, {'name': 'eab-BarringBitmap-r11', 'size': [10], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'EAB-ConfigPLMN-r11': {'members': [{'name': 'eab-Config-r11', 'optional': True, 'type': 'EAB-Config-r11'}], 'type': 'SEQUENCE'}, 'EIMTA-MainConfig-r12': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'eimta-RNTI-r12', 'type': 'C-RNTI'}, {'name': 'eimta-CommandPeriodicity-r12', 'type': 'ENUMERATED', 'values': [('sf10', 0), ('sf20', 1), ('sf40', 2), ('sf80', 3)]}, {'name': 'eimta-CommandSubframeSet-r12', 'size': [10], 'type': 'BIT ' 'STRING'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'EIMTA-MainConfigServCell-r12': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'eimta-UL-DL-ConfigIndex-r12', 'restricted-to': [(1, 5)], 'type': 'INTEGER'}, {'name': 'eimta-HARQ-ReferenceConfig-r12', 'type': 'ENUMERATED', 'values': [('sa2', 0), ('sa4', 1), ('sa5', 2)]}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'subframeConfigList-r12', 'type': 'MBSFN-SubframeConfigList'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'mbsfn-SubframeConfigList-v1250', 'type': 'CHOICE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'EPDCCH-Config-r11': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'subframePattern-r11', 'type': 'MeasSubframePattern-r10'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'subframePatternConfig-r11', 'optional': True, 'type': 'CHOICE'}, {'name': 'startSymbol-r11', 'optional': True, 'restricted-to': [(1, 4)], 'type': 'INTEGER'}, {'name': 'setConfigToReleaseList-r11', 'optional': True, 'type': 'EPDCCH-SetConfigToReleaseList-r11'}, {'name': 'setConfigToAddModList-r11', 'optional': True, 'type': 'EPDCCH-SetConfigToAddModList-r11'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'config-r11', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'EPDCCH-SetConfig-r11': {'members': [{'name': 'setConfigId-r11', 'type': 'EPDCCH-SetConfigId-r11'}, {'name': 'transmissionType-r11', 'type': 'ENUMERATED', 'values': [('localised', 0), ('distributed', 1)]}, {'members': [{'name': 'numberPRB-Pairs-r11', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1), ('n8', 2)]}, {'name': 'resourceBlockAssignment-r11', 'size': [(4, 38)], 'type': 'BIT ' 'STRING'}], 'name': 'resourceBlockAssignment-r11', 'type': 'SEQUENCE'}, {'name': 'dmrs-ScramblingSequenceInt-r11', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'pucch-ResourceStartOffset-r11', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 're-MappingQCL-ConfigId-r11', 'optional': True, 'type': 'PDSCH-RE-MappingQCL-ConfigId-r11'}, None, [{'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'CSI-RS-ConfigZPId-r11'}], 'name': 'csi-RS-ConfigZPId2-r12', 'optional': True, 'type': 'CHOICE'}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'ENUMERATED', 'values': [('n6', 0)]}], 'name': 'numberPRB-Pairs-v1310', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'csi-NumRepetitionCE-r13', 'type': 'ENUMERATED', 'values': [('sf1', 0), ('sf2', 1), ('sf4', 2), ('sf8', 3), ('sf16', 4), ('sf32', 5)]}, {'name': 'mpdcch-pdsch-HoppingConfig-r13', 'type': 'ENUMERATED', 'values': [('on', 0), ('off', 1)]}, {'members': [{'name': 'fdd-r13', 'type': 'ENUMERATED', 'values': [('v1', 0), ('v1dot5', 1), ('v2', 2), ('v2dot5', 3), ('v4', 4), ('v5', 5), ('v8', 6), ('v10', 7)]}, {'name': 'tdd-r13', 'type': 'ENUMERATED', 'values': [('v1', 0), ('v2', 1), ('v4', 2), ('v5', 3), ('v8', 4), ('v10', 5), ('v20', 6), ('spare1', 7)]}], 'name': 'mpdcch-StartSF-UESS-r13', 'type': 'CHOICE'}, {'name': 'mpdcch-NumRepetition-r13', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7), ('r256', 8)]}, {'name': 'mpdcch-Narrowband-r13', 'restricted-to': [(1, 'maxAvailNarrowBands-r13')], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'mpdcch-config-r13', 'optional': True, 'type': 'CHOICE'}]], 'type': 'SEQUENCE'}, 'EPDCCH-SetConfigId-r11': {'restricted-to': [(0, 1)], 'type': 'INTEGER'}, 'EPDCCH-SetConfigToAddModList-r11': {'element': {'type': 'EPDCCH-SetConfig-r11'}, 'size': [(1, 'maxEPDCCH-Set-r11')], 'type': 'SEQUENCE ' 'OF'}, 'EPDCCH-SetConfigToReleaseList-r11': {'element': {'type': 'EPDCCH-SetConfigId-r11'}, 'size': [(1, 'maxEPDCCH-Set-r11')], 'type': 'SEQUENCE ' 'OF'}, 'Enable256QAM-r14': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'subframeSet1-DCI-Format0-r14', 'type': 'BOOLEAN'}, {'name': 'subframeSet1-DCI-Format4-r14', 'type': 'BOOLEAN'}, {'name': 'subframeSet2-DCI-Format0-r14', 'type': 'BOOLEAN'}, {'name': 'subframeSet2-DCI-Format4-r14', 'type': 'BOOLEAN'}], 'name': 'tpc-SubframeSet-Configured-r14', 'type': 'SEQUENCE'}, {'members': [{'name': 'dci-Format0-r14', 'type': 'BOOLEAN'}, {'name': 'dci-Format4-r14', 'type': 'BOOLEAN'}], 'name': 'tpc-SubframeSet-NotConfigured-r14', 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'EstablishmentCause': {'type': 'ENUMERATED', 'values': [('emergency', 0), ('highPriorityAccess', 1), ('mt-Access', 2), ('mo-Signalling', 3), ('mo-Data', 4), ('delayTolerantAccess-v1020', 5), ('mo-VoiceCall-v1280', 6), ('spare1', 7)]}, 'ExplicitListOfARFCNs': {'element': {'type': 'ARFCN-ValueGERAN'}, 'size': [(0, 31)], 'type': 'SEQUENCE ' 'OF'}, 'FailureReportSCG-r12': {'members': [{'name': 'failureType-r12', 'type': 'ENUMERATED', 'values': [('t313-Expiry', 0), ('randomAccessProblem', 1), ('rlc-MaxNumRetx', 2), ('scg-ChangeFailure', 3)]}, {'name': 'measResultServFreqList-r12', 'optional': True, 'type': 'MeasResultServFreqList-r10'}, {'name': 'measResultNeighCells-r12', 'optional': True, 'type': 'MeasResultList2EUTRA-r9'}, None, [{'name': 'failureType-v1290', 'optional': True, 'type': 'ENUMERATED', 'values': [('maxUL-TimingDiff-v1290', 0)]}], [{'name': 'measResultServFreqListExt-r13', 'optional': True, 'type': 'MeasResultServFreqListExt-r13'}]], 'type': 'SEQUENCE'}, 'FailureReportSCG-v12d0': {'members': [{'name': 'measResultNeighCells-v12d0', 'optional': True, 'type': 'MeasResultList2EUTRA-v9e0'}], 'type': 'SEQUENCE'}, 'FeMBMS-Unicast-Parameters-r14': {'members': [{'name': 'unicast-fembmsMixedSCell-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'emptyUnicastRegion-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'FilterCoefficient': {'type': 'ENUMERATED', 'values': [('fc0', 0), ('fc1', 1), ('fc2', 2), ('fc3', 3), ('fc4', 4), ('fc5', 5), ('fc6', 6), ('fc7', 7), ('fc8', 8), ('fc9', 9), ('fc11', 10), ('fc13', 11), ('fc15', 12), ('fc17', 13), ('fc19', 14), ('spare1', 15), None]}, 'Format4-resource-r13': {'members': [{'name': 'startingPRB-format4-r13', 'restricted-to': [(0, 109)], 'type': 'INTEGER'}, {'name': 'numberOfPRB-format4-r13', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Format5-resource-r13': {'members': [{'name': 'startingPRB-format5-r13', 'restricted-to': [(0, 109)], 'type': 'INTEGER'}, {'name': 'cdm-index-format5-r13', 'restricted-to': [(0, 1)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'FreqBandIndicator': {'restricted-to': [(1, 'maxFBI')], 'type': 'INTEGER'}, 'FreqBandIndicator-UTRA-FDD': {'restricted-to': [(1, 86)], 'type': 'INTEGER'}, 'FreqBandIndicator-r11': {'restricted-to': [(1, 'maxFBI2')], 'type': 'INTEGER'}, 'FreqBandIndicator-v9e0': {'restricted-to': [('maxFBI-Plus1', 'maxFBI2')], 'type': 'INTEGER'}, 'FreqBandIndicatorListEUTRA-r12': {'element': {'type': 'FreqBandIndicator-r11'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'FreqHoppingParameters-r13': {'members': [{'name': 'dummy', 'optional': True, 'type': 'ENUMERATED', 'values': [('nb2', 0), ('nb4', 1)]}, {'members': [{'name': 'interval-FDD-r13', 'type': 'ENUMERATED', 'values': [('int1', 0), ('int2', 1), ('int4', 2), ('int8', 3)]}, {'name': 'interval-TDD-r13', 'type': 'ENUMERATED', 'values': [('int1', 0), ('int5', 1), ('int10', 2), ('int20', 3)]}], 'name': 'dummy2', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'interval-FDD-r13', 'type': 'ENUMERATED', 'values': [('int2', 0), ('int4', 1), ('int8', 2), ('int16', 3)]}, {'name': 'interval-TDD-r13', 'type': 'ENUMERATED', 'values': [('int5', 0), ('int10', 1), ('int20', 2), ('int40', 3)]}], 'name': 'dummy3', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'interval-FDD-r13', 'type': 'ENUMERATED', 'values': [('int1', 0), ('int2', 1), ('int4', 2), ('int8', 3)]}, {'name': 'interval-TDD-r13', 'type': 'ENUMERATED', 'values': [('int1', 0), ('int5', 1), ('int10', 2), ('int20', 3)]}], 'name': 'interval-ULHoppingConfigCommonModeA-r13', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'interval-FDD-r13', 'type': 'ENUMERATED', 'values': [('int2', 0), ('int4', 1), ('int8', 2), ('int16', 3)]}, {'name': 'interval-TDD-r13', 'type': 'ENUMERATED', 'values': [('int5', 0), ('int10', 1), ('int20', 2), ('int40', 3)]}], 'name': 'interval-ULHoppingConfigCommonModeB-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'dummy4', 'optional': True, 'restricted-to': [(1, 'maxAvailNarrowBands-r13')], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'FreqPriorityEUTRA': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'FreqPriorityEUTRA-r12': {'members': [{'name': 'carrierFreq-r12', 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'cellReselectionPriority-r12', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'FreqPriorityEUTRA-v1310': {'members': [{'name': 'cellReselectionSubPriority-r13', 'optional': True, 'type': 'CellReselectionSubPriority-r13'}], 'type': 'SEQUENCE'}, 'FreqPriorityEUTRA-v9e0': {'members': [{'name': 'carrierFreq-v9e0', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9e0'}], 'type': 'SEQUENCE'}, 'FreqPriorityListEUTRA': {'element': {'type': 'FreqPriorityEUTRA'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'FreqPriorityListEUTRA-v1310': {'element': {'type': 'FreqPriorityEUTRA-v1310'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'FreqPriorityListExtEUTRA-r12': {'element': {'type': 'FreqPriorityEUTRA-r12'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'FreqPriorityListExtEUTRA-v1310': {'element': {'type': 'FreqPriorityEUTRA-v1310'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'FreqPriorityListUTRA-FDD': {'element': {'type': 'FreqPriorityUTRA-FDD'}, 'size': [(1, 'maxUTRA-FDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, 'FreqPriorityListUTRA-TDD': {'element': {'type': 'FreqPriorityUTRA-TDD'}, 'size': [(1, 'maxUTRA-TDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, 'FreqPriorityUTRA-FDD': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueUTRA'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'FreqPriorityUTRA-TDD': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueUTRA'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'FreqsPriorityGERAN': {'members': [{'name': 'carrierFreqs', 'type': 'CarrierFreqsGERAN'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'FreqsPriorityListGERAN': {'element': {'type': 'FreqsPriorityGERAN'}, 'size': [(1, 'maxGNFG')], 'type': 'SEQUENCE ' 'OF'}, 'Handover': {'members': [{'name': 'targetRAT-Type', 'type': 'ENUMERATED', 'values': [('utra', 0), ('geran', 1), ('cdma2000-1XRTT', 2), ('cdma2000-HRPD', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7), None]}, {'name': 'targetRAT-MessageContainer', 'type': 'OCTET ' 'STRING'}, {'name': 'nas-SecurityParamFromEUTRA', 'optional': True, 'size': [1], 'type': 'OCTET ' 'STRING'}, {'name': 'systemInformation', 'optional': True, 'type': 'SI-OrPSI-GERAN'}], 'type': 'SEQUENCE'}, 'HandoverFromEUTRAPreparationRequest': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'handoverFromEUTRAPreparationRequest-r8', 'type': 'HandoverFromEUTRAPreparationRequest-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'HandoverFromEUTRAPreparationRequest-r8-IEs': {'members': [{'name': 'cdma2000-Type', 'type': 'CDMA2000-Type'}, {'name': 'rand', 'optional': True, 'type': 'RAND-CDMA2000'}, {'name': 'mobilityParameters', 'optional': True, 'type': 'MobilityParametersCDMA2000'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'HandoverFromEUTRAPreparationRequest-v890-IEs'}], 'type': 'SEQUENCE'}, 'HandoverFromEUTRAPreparationRequest-v1020-IEs': {'members': [{'name': 'dualRxTxRedirectIndicator-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'redirectCarrierCDMA2000-1XRTT-r10', 'optional': True, 'type': 'CarrierFreqCDMA2000'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'HandoverFromEUTRAPreparationRequest-v890-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'HandoverFromEUTRAPreparationRequest-v920-IEs'}], 'type': 'SEQUENCE'}, 'HandoverFromEUTRAPreparationRequest-v920-IEs': {'members': [{'name': 'concurrPrepCDMA2000-HRPD-r9', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'HandoverFromEUTRAPreparationRequest-v1020-IEs'}], 'type': 'SEQUENCE'}, 'HighSpeedConfig-r14': {'members': [{'name': 'highSpeedEnhancedMeasFlag-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'highSpeedEnhancedDemodulationFlag-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'HighSpeedConfigSCell-r14': {'members': [{'name': 'highSpeedEnhancedDemodulationFlag-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'HighSpeedEnhParameters-r14': {'members': [{'name': 'measurementEnhancements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'demodulationEnhancements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'prach-Enhancements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'Hysteresis': {'restricted-to': [(0, 30)], 'type': 'INTEGER'}, 'IDC-Config-r11': {'members': [{'name': 'idc-Indication-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}, {'members': [{'name': 'autonomousDenialSubframes-r11', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n5', 1), ('n10', 2), ('n15', 3), ('n20', 4), ('n30', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 'autonomousDenialValidity-r11', 'type': 'ENUMERATED', 'values': [('sf200', 0), ('sf500', 1), ('sf1000', 2), ('sf2000', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}], 'name': 'autonomousDenialParameters-r11', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'idc-Indication-UL-CA-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], [{'name': 'idc-HardwareSharingIndication-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}]], 'type': 'SEQUENCE'}, 'IDC-SubframePattern-r11': {'members': [{'name': 'subframePatternFDD-r11', 'size': [4], 'type': 'BIT ' 'STRING'}, {'members': [{'name': 'subframeConfig0-r11', 'size': [70], 'type': 'BIT ' 'STRING'}, {'name': 'subframeConfig1-5-r11', 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'subframeConfig6-r11', 'size': [60], 'type': 'BIT ' 'STRING'}], 'name': 'subframePatternTDD-r11', 'type': 'CHOICE'}, None], 'type': 'CHOICE'}, 'IDC-SubframePatternList-r11': {'element': {'type': 'IDC-SubframePattern-r11'}, 'size': [(1, 'maxSubframePatternIDC-r11')], 'type': 'SEQUENCE ' 'OF'}, 'IKE-Identity-r13': {'members': [{'name': 'idI-r13', 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'IMSI': {'element': {'type': 'IMSI-Digit'}, 'size': [(6, 21)], 'type': 'SEQUENCE OF'}, 'IMSI-Digit': {'restricted-to': [(0, 9)], 'type': 'INTEGER'}, 'IP-Address-r13': {'members': [{'name': 'ipv4-r13', 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'ipv6-r13', 'size': [128], 'type': 'BIT ' 'STRING'}], 'type': 'CHOICE'}, 'IRAT-ParametersCDMA2000-1XRTT': {'members': [{'name': 'supportedBandList1XRTT', 'type': 'SupportedBandList1XRTT'}, {'name': 'tx-Config1XRTT', 'type': 'ENUMERATED', 'values': [('single', 0), ('dual', 1)]}, {'name': 'rx-Config1XRTT', 'type': 'ENUMERATED', 'values': [('single', 0), ('dual', 1)]}], 'type': 'SEQUENCE'}, 'IRAT-ParametersCDMA2000-1XRTT-v1020': {'members': [{'name': 'e-CSFB-dual-1XRTT-r10', 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'IRAT-ParametersCDMA2000-1XRTT-v920': {'members': [{'name': 'e-CSFB-1XRTT-r9', 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'e-CSFB-ConcPS-Mob1XRTT-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'IRAT-ParametersCDMA2000-HRPD': {'members': [{'name': 'supportedBandListHRPD', 'type': 'SupportedBandListHRPD'}, {'name': 'tx-ConfigHRPD', 'type': 'ENUMERATED', 'values': [('single', 0), ('dual', 1)]}, {'name': 'rx-ConfigHRPD', 'type': 'ENUMERATED', 'values': [('single', 0), ('dual', 1)]}], 'type': 'SEQUENCE'}, 'IRAT-ParametersCDMA2000-v1130': {'members': [{'name': 'cdma2000-NW-Sharing-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'IRAT-ParametersGERAN': {'members': [{'name': 'supportedBandListGERAN', 'type': 'SupportedBandListGERAN'}, {'name': 'interRAT-PS-HO-ToGERAN', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'IRAT-ParametersGERAN-v920': {'members': [{'name': 'dtm-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'e-RedirectionGERAN-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'IRAT-ParametersUTRA-FDD': {'members': [{'name': 'supportedBandListUTRA-FDD', 'type': 'SupportedBandListUTRA-FDD'}], 'type': 'SEQUENCE'}, 'IRAT-ParametersUTRA-TDD-v1020': {'members': [{'name': 'e-RedirectionUTRA-TDD-r10', 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'IRAT-ParametersUTRA-TDD128': {'members': [{'name': 'supportedBandListUTRA-TDD128', 'type': 'SupportedBandListUTRA-TDD128'}], 'type': 'SEQUENCE'}, 'IRAT-ParametersUTRA-TDD384': {'members': [{'name': 'supportedBandListUTRA-TDD384', 'type': 'SupportedBandListUTRA-TDD384'}], 'type': 'SEQUENCE'}, 'IRAT-ParametersUTRA-TDD768': {'members': [{'name': 'supportedBandListUTRA-TDD768', 'type': 'SupportedBandListUTRA-TDD768'}], 'type': 'SEQUENCE'}, 'IRAT-ParametersUTRA-v920': {'members': [{'name': 'e-RedirectionUTRA-r9', 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'IRAT-ParametersUTRA-v9c0': {'members': [{'name': 'voiceOverPS-HS-UTRA-FDD-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'voiceOverPS-HS-UTRA-TDD128-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'srvcc-FromUTRA-FDD-ToUTRA-FDD-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'srvcc-FromUTRA-FDD-ToGERAN-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'srvcc-FromUTRA-TDD128-ToUTRA-TDD128-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'srvcc-FromUTRA-TDD128-ToGERAN-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'IRAT-ParametersUTRA-v9h0': {'members': [{'name': 'mfbi-UTRA-r9', 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'IRAT-ParametersWLAN-r13': {'members': [{'element': {'type': 'WLAN-BandIndicator-r13'}, 'name': 'supportedBandListWLAN-r13', 'optional': True, 'size': [(1, 'maxWLAN-Bands-r13')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'IdleModeMobilityControlInfo': {'members': [{'name': 'freqPriorityListEUTRA', 'optional': True, 'type': 'FreqPriorityListEUTRA'}, {'name': 'freqPriorityListGERAN', 'optional': True, 'type': 'FreqsPriorityListGERAN'}, {'name': 'freqPriorityListUTRA-FDD', 'optional': True, 'type': 'FreqPriorityListUTRA-FDD'}, {'name': 'freqPriorityListUTRA-TDD', 'optional': True, 'type': 'FreqPriorityListUTRA-TDD'}, {'name': 'bandClassPriorityListHRPD', 'optional': True, 'type': 'BandClassPriorityListHRPD'}, {'name': 'bandClassPriorityList1XRTT', 'optional': True, 'type': 'BandClassPriorityList1XRTT'}, {'name': 't320', 'optional': True, 'type': 'ENUMERATED', 'values': [('min5', 0), ('min10', 1), ('min20', 2), ('min30', 3), ('min60', 4), ('min120', 5), ('min180', 6), ('spare1', 7)]}, None, [{'name': 'freqPriorityListExtEUTRA-r12', 'optional': True, 'type': 'FreqPriorityListExtEUTRA-r12'}], [{'name': 'freqPriorityListEUTRA-v1310', 'optional': True, 'type': 'FreqPriorityListEUTRA-v1310'}, {'name': 'freqPriorityListExtEUTRA-v1310', 'optional': True, 'type': 'FreqPriorityListExtEUTRA-v1310'}]], 'type': 'SEQUENCE'}, 'IdleModeMobilityControlInfo-v9e0': {'members': [{'element': {'type': 'FreqPriorityEUTRA-v9e0'}, 'name': 'freqPriorityListEUTRA-v9e0', 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'InDeviceCoexIndication-r11': {'members': [{'members': [{'members': [{'name': 'inDeviceCoexIndication-r11', 'type': 'InDeviceCoexIndication-r11-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'InDeviceCoexIndication-r11-IEs': {'members': [{'name': 'affectedCarrierFreqList-r11', 'optional': True, 'type': 'AffectedCarrierFreqList-r11'}, {'name': 'tdm-AssistanceInfo-r11', 'optional': True, 'type': 'TDM-AssistanceInfo-r11'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'InDeviceCoexIndication-v11d0-IEs'}], 'type': 'SEQUENCE'}, 'InDeviceCoexIndication-v11d0-IEs': {'members': [{'members': [{'name': 'affectedCarrierFreqCombList-r11', 'optional': True, 'type': 'AffectedCarrierFreqCombList-r11'}, {'name': 'victimSystemType-r11', 'type': 'VictimSystemType-r11'}], 'name': 'ul-CA-AssistanceInfo-r11', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'InDeviceCoexIndication-v1310-IEs'}], 'type': 'SEQUENCE'}, 'InDeviceCoexIndication-v1310-IEs': {'members': [{'name': 'affectedCarrierFreqList-v1310', 'optional': True, 'type': 'AffectedCarrierFreqList-v1310'}, {'name': 'affectedCarrierFreqCombList-r13', 'optional': True, 'type': 'AffectedCarrierFreqCombList-r13'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'InDeviceCoexIndication-v1360-IEs'}], 'type': 'SEQUENCE'}, 'InDeviceCoexIndication-v1360-IEs': {'members': [{'name': 'hardwareSharingProblem-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'InitialUE-Identity': {'members': [{'name': 's-TMSI', 'type': 'S-TMSI'}, {'name': 'randomValue', 'size': [40], 'type': 'BIT ' 'STRING'}], 'type': 'CHOICE'}, 'InterFreqBandInfo': {'members': [{'name': 'interFreqNeedForGaps', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'InterFreqBandList': {'element': {'type': 'InterFreqBandInfo'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqBlackCellList': {'element': {'type': 'PhysCellIdRange'}, 'size': [(1, 'maxCellBlack')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqCarrierFreqInfo': {'members': [{'name': 'dl-CarrierFreq', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'q-RxLevMin', 'type': 'Q-RxLevMin'}, {'name': 'p-Max', 'optional': True, 'type': 'P-Max'}, {'name': 't-ReselectionEUTRA', 'type': 'T-Reselection'}, {'name': 't-ReselectionEUTRA-SF', 'optional': True, 'type': 'SpeedStateScaleFactors'}, {'name': 'threshX-High', 'type': 'ReselectionThreshold'}, {'name': 'threshX-Low', 'type': 'ReselectionThreshold'}, {'name': 'allowedMeasBandwidth', 'type': 'AllowedMeasBandwidth'}, {'name': 'presenceAntennaPort1', 'type': 'PresenceAntennaPort1'}, {'name': 'cellReselectionPriority', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'neighCellConfig', 'type': 'NeighCellConfig'}, {'default': 'dB0', 'name': 'q-OffsetFreq', 'type': 'Q-OffsetRange'}, {'name': 'interFreqNeighCellList', 'optional': True, 'type': 'InterFreqNeighCellList'}, {'name': 'interFreqBlackCellList', 'optional': True, 'type': 'InterFreqBlackCellList'}, None, [{'name': 'q-QualMin-r9', 'optional': True, 'type': 'Q-QualMin-r9'}, {'members': [{'name': 'threshX-HighQ-r9', 'type': 'ReselectionThresholdQ-r9'}, {'name': 'threshX-LowQ-r9', 'type': 'ReselectionThresholdQ-r9'}], 'name': 'threshX-Q-r9', 'optional': True, 'type': 'SEQUENCE'}], [{'name': 'q-QualMinWB-r11', 'optional': True, 'type': 'Q-QualMin-r9'}]], 'type': 'SEQUENCE'}, 'InterFreqCarrierFreqInfo-r12': {'members': [{'name': 'dl-CarrierFreq-r12', 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'q-RxLevMin-r12', 'type': 'Q-RxLevMin'}, {'name': 'p-Max-r12', 'optional': True, 'type': 'P-Max'}, {'name': 't-ReselectionEUTRA-r12', 'type': 'T-Reselection'}, {'name': 't-ReselectionEUTRA-SF-r12', 'optional': True, 'type': 'SpeedStateScaleFactors'}, {'name': 'threshX-High-r12', 'type': 'ReselectionThreshold'}, {'name': 'threshX-Low-r12', 'type': 'ReselectionThreshold'}, {'name': 'allowedMeasBandwidth-r12', 'type': 'AllowedMeasBandwidth'}, {'name': 'presenceAntennaPort1-r12', 'type': 'PresenceAntennaPort1'}, {'name': 'cellReselectionPriority-r12', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'neighCellConfig-r12', 'type': 'NeighCellConfig'}, {'default': 'dB0', 'name': 'q-OffsetFreq-r12', 'type': 'Q-OffsetRange'}, {'name': 'interFreqNeighCellList-r12', 'optional': True, 'type': 'InterFreqNeighCellList'}, {'name': 'interFreqBlackCellList-r12', 'optional': True, 'type': 'InterFreqBlackCellList'}, {'name': 'q-QualMin-r12', 'optional': True, 'type': 'Q-QualMin-r9'}, {'members': [{'name': 'threshX-HighQ-r12', 'type': 'ReselectionThresholdQ-r9'}, {'name': 'threshX-LowQ-r12', 'type': 'ReselectionThresholdQ-r9'}], 'name': 'threshX-Q-r12', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'q-QualMinWB-r12', 'optional': True, 'type': 'Q-QualMin-r9'}, {'name': 'multiBandInfoList-r12', 'optional': True, 'type': 'MultiBandInfoList-r11'}, {'name': 'reducedMeasPerformance-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'q-QualMinRSRQ-OnAllSymbols-r12', 'optional': True, 'type': 'Q-QualMin-r9'}, None], 'type': 'SEQUENCE'}, 'InterFreqCarrierFreqInfo-v10j0': {'members': [{'name': 'freqBandInfo-r10', 'optional': True, 'type': 'NS-PmaxList-r10'}, {'name': 'multiBandInfoList-v10j0', 'optional': True, 'type': 'MultiBandInfoList-v10j0'}], 'type': 'SEQUENCE'}, 'InterFreqCarrierFreqInfo-v10l0': {'members': [{'name': 'freqBandInfo-v10l0', 'optional': True, 'type': 'NS-PmaxList-v10l0'}, {'name': 'multiBandInfoList-v10l0', 'optional': True, 'type': 'MultiBandInfoList-v10l0'}], 'type': 'SEQUENCE'}, 'InterFreqCarrierFreqInfo-v1250': {'members': [{'name': 'reducedMeasPerformance-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'q-QualMinRSRQ-OnAllSymbols-r12', 'optional': True, 'type': 'Q-QualMin-r9'}], 'type': 'SEQUENCE'}, 'InterFreqCarrierFreqInfo-v1310': {'members': [{'name': 'cellReselectionSubPriority-r13', 'optional': True, 'type': 'CellReselectionSubPriority-r13'}, {'name': 'redistributionInterFreqInfo-r13', 'optional': True, 'type': 'RedistributionInterFreqInfo-r13'}, {'name': 'cellSelectionInfoCE-r13', 'optional': True, 'type': 'CellSelectionInfoCE-r13'}, {'name': 't-ReselectionEUTRA-CE-r13', 'optional': True, 'type': 'T-ReselectionEUTRA-CE-r13'}], 'type': 'SEQUENCE'}, 'InterFreqCarrierFreqInfo-v1350': {'members': [{'name': 'cellSelectionInfoCE1-r13', 'optional': True, 'type': 'CellSelectionInfoCE1-r13'}], 'type': 'SEQUENCE'}, 'InterFreqCarrierFreqInfo-v1360': {'members': [{'name': 'cellSelectionInfoCE1-v1360', 'optional': True, 'type': 'CellSelectionInfoCE1-v1360'}], 'type': 'SEQUENCE'}, 'InterFreqCarrierFreqInfo-v8h0': {'members': [{'name': 'multiBandInfoList', 'optional': True, 'type': 'MultiBandInfoList'}], 'type': 'SEQUENCE'}, 'InterFreqCarrierFreqInfo-v9e0': {'members': [{'name': 'dl-CarrierFreq-v9e0', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9e0'}, {'name': 'multiBandInfoList-v9e0', 'optional': True, 'type': 'MultiBandInfoList-v9e0'}], 'type': 'SEQUENCE'}, 'InterFreqCarrierFreqList': {'element': {'type': 'InterFreqCarrierFreqInfo'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqCarrierFreqList-v1250': {'element': {'type': 'InterFreqCarrierFreqInfo-v1250'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqCarrierFreqList-v1310': {'element': {'type': 'InterFreqCarrierFreqInfo-v1310'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqCarrierFreqList-v1350': {'element': {'type': 'InterFreqCarrierFreqInfo-v1350'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqCarrierFreqListExt-r12': {'element': {'type': 'InterFreqCarrierFreqInfo-r12'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqCarrierFreqListExt-v1280': {'element': {'type': 'InterFreqCarrierFreqInfo-v10j0'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqCarrierFreqListExt-v1310': {'element': {'type': 'InterFreqCarrierFreqInfo-v1310'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqCarrierFreqListExt-v1350': {'element': {'type': 'InterFreqCarrierFreqInfo-v1350'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqCarrierFreqListExt-v1360': {'element': {'type': 'InterFreqCarrierFreqInfo-v1360'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqNeighCellInfo': {'members': [{'name': 'physCellId', 'type': 'PhysCellId'}, {'name': 'q-OffsetCell', 'type': 'Q-OffsetRange'}], 'type': 'SEQUENCE'}, 'InterFreqNeighCellList': {'element': {'type': 'InterFreqNeighCellInfo'}, 'size': [(1, 'maxCellInter')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqRSTDMeasurementIndication-r10': {'members': [{'members': [{'members': [{'name': 'interFreqRSTDMeasurementIndication-r10', 'type': 'InterFreqRSTDMeasurementIndication-r10-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'InterFreqRSTDMeasurementIndication-r10-IEs': {'members': [{'members': [{'members': [{'name': 'rstd-InterFreqInfoList-r10', 'type': 'RSTD-InterFreqInfoList-r10'}], 'name': 'start', 'type': 'SEQUENCE'}, {'name': 'stop', 'type': 'NULL'}], 'name': 'rstd-InterFreqIndication-r10', 'type': 'CHOICE'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'InterRAT-BandInfo': {'members': [{'name': 'interRAT-NeedForGaps', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'InterRAT-BandList': {'element': {'type': 'InterRAT-BandInfo'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'IntraBandContiguousCC-Info-r12': {'members': [{'name': 'fourLayerTM3-TM4-perCC-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'supportedMIMO-CapabilityDL-r12', 'optional': True, 'type': 'MIMO-CapabilityDL-r10'}, {'name': 'supportedCSI-Proc-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('n1', 0), ('n3', 1), ('n4', 2)]}], 'type': 'SEQUENCE'}, 'IntraFreqBlackCellList': {'element': {'type': 'PhysCellIdRange'}, 'size': [(1, 'maxCellBlack')], 'type': 'SEQUENCE ' 'OF'}, 'IntraFreqNeighCellInfo': {'members': [{'name': 'physCellId', 'type': 'PhysCellId'}, {'name': 'q-OffsetCell', 'type': 'Q-OffsetRange'}, None], 'type': 'SEQUENCE'}, 'IntraFreqNeighCellList': {'element': {'type': 'IntraFreqNeighCellInfo'}, 'size': [(1, 'maxCellIntra')], 'type': 'SEQUENCE ' 'OF'}, 'LAA-Parameters-r13': {'members': [{'name': 'crossCarrierSchedulingLAA-DL-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'csi-RS-DRS-RRM-MeasurementsLAA-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'downlinkLAA-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'endingDwPTS-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'secondSlotStartingPosition-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'tm9-LAA-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'tm10-LAA-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'LAA-Parameters-v1430': {'members': [{'name': 'crossCarrierSchedulingLAA-UL-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'uplinkLAA-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'twoStepSchedulingTimingInfo-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('nPlus1', 0), ('nPlus2', 1), ('nPlus3', 2)]}, {'name': 'uss-BlindDecodingAdjustment-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'uss-BlindDecodingReduction-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'outOfSequenceGrantHandling-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'LAA-SCellConfiguration-r13': {'members': [{'name': 'subframeStartPosition-r13', 'type': 'ENUMERATED', 'values': [('s0', 0), ('s07', 1)]}, {'name': 'laa-SCellSubframeConfig-r13', 'size': [8], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'LAA-SCellConfiguration-v1430': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'crossCarrierSchedulingConfigLAA-UL-r14', 'type': 'CrossCarrierSchedulingConfigLAA-UL-r14'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'crossCarrierSchedulingConfig-UL-r14', 'optional': True, 'type': 'CHOICE'}, {'name': 'lbt-Config-r14', 'optional': True, 'type': 'LBT-Config-r14'}, {'name': 'pdcch-ConfigLAA-r14', 'optional': True, 'type': 'PDCCH-ConfigLAA-r14'}, {'name': 'absenceOfAnyOtherTechnology-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'soundingRS-UL-ConfigDedicatedAperiodic-v1430', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicatedAperiodic-v1430'}], 'type': 'SEQUENCE'}, 'LBT-Config-r14': {'members': [{'name': 'maxEnergyDetectionThreshold-r14', 'restricted-to': [(-85, -52)], 'type': 'INTEGER'}, {'name': 'energyDetectionThresholdOffset-r14', 'restricted-to': [(-13, 20)], 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'LWA-Config-r13': {'members': [{'name': 'lwa-MobilityConfig-r13', 'optional': True, 'type': 'WLAN-MobilityConfig-r13'}, {'name': 'lwa-WT-Counter-r13', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, None, [{'name': 'wt-MAC-Address-r14', 'optional': True, 'size': [6], 'type': 'OCTET ' 'STRING'}]], 'type': 'SEQUENCE'}, 'LWA-Configuration-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'lwa-Config-r13', 'type': 'LWA-Config-r13'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'LWA-Parameters-r13': {'members': [{'name': 'lwa-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'lwa-SplitBearer-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'wlan-MAC-Address-r13', 'optional': True, 'size': [6], 'type': 'OCTET ' 'STRING'}, {'name': 'lwa-BufferSize-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'LWA-Parameters-v1430': {'members': [{'name': 'lwa-HO-WithoutWT-Change-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'lwa-UL-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'wlan-PeriodicMeas-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'wlan-ReportAnyWLAN-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'wlan-SupportedDataRate-r14', 'optional': True, 'restricted-to': [(1, 2048)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'LWA-Parameters-v1440': {'members': [{'name': 'lwa-RLC-UM-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'LWIP-Config-r13': {'members': [{'name': 'lwip-MobilityConfig-r13', 'optional': True, 'type': 'WLAN-MobilityConfig-r13'}, {'name': 'tunnelConfigLWIP-r13', 'optional': True, 'type': 'TunnelConfigLWIP-r13'}, None], 'type': 'SEQUENCE'}, 'LWIP-Configuration-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'lwip-Config-r13', 'type': 'LWIP-Config-r13'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'LWIP-Parameters-r13': {'members': [{'name': 'lwip-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'LWIP-Parameters-v1430': {'members': [{'name': 'lwip-Aggregation-DL-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'lwip-Aggregation-UL-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'LocationInfo-r10': {'members': [{'members': [{'name': 'ellipsoid-Point-r10', 'type': 'OCTET ' 'STRING'}, {'name': 'ellipsoidPointWithAltitude-r10', 'type': 'OCTET ' 'STRING'}, None, {'name': 'ellipsoidPointWithUncertaintyCircle-r11', 'type': 'OCTET ' 'STRING'}, {'name': 'ellipsoidPointWithUncertaintyEllipse-r11', 'type': 'OCTET ' 'STRING'}, {'name': 'ellipsoidPointWithAltitudeAndUncertaintyEllipsoid-r11', 'type': 'OCTET ' 'STRING'}, {'name': 'ellipsoidArc-r11', 'type': 'OCTET ' 'STRING'}, {'name': 'polygon-r11', 'type': 'OCTET ' 'STRING'}], 'name': 'locationCoordinates-r10', 'type': 'CHOICE'}, {'name': 'horizontalVelocity-r10', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'gnss-TOD-msec-r10', 'optional': True, 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'LogMeasInfo-r10': {'members': [{'name': 'locationInfo-r10', 'optional': True, 'type': 'LocationInfo-r10'}, {'name': 'relativeTimeStamp-r10', 'restricted-to': [(0, 7200)], 'type': 'INTEGER'}, {'name': 'servCellIdentity-r10', 'type': 'CellGlobalIdEUTRA'}, {'members': [{'name': 'rsrpResult-r10', 'type': 'RSRP-Range'}, {'name': 'rsrqResult-r10', 'type': 'RSRQ-Range'}], 'name': 'measResultServCell-r10', 'type': 'SEQUENCE'}, {'members': [{'name': 'measResultListEUTRA-r10', 'optional': True, 'type': 'MeasResultList2EUTRA-r9'}, {'name': 'measResultListUTRA-r10', 'optional': True, 'type': 'MeasResultList2UTRA-r9'}, {'name': 'measResultListGERAN-r10', 'optional': True, 'type': 'MeasResultList2GERAN-r10'}, {'name': 'measResultListCDMA2000-r10', 'optional': True, 'type': 'MeasResultList2CDMA2000-r9'}], 'name': 'measResultNeighCells-r10', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'measResultListEUTRA-v1090', 'optional': True, 'type': 'MeasResultList2EUTRA-v9e0'}], [{'name': 'measResultListMBSFN-r12', 'optional': True, 'type': 'MeasResultListMBSFN-r12'}, {'name': 'measResultServCell-v1250', 'optional': True, 'type': 'RSRQ-Range-v1250'}, {'name': 'servCellRSRQ-Type-r12', 'optional': True, 'type': 'RSRQ-Type-r12'}, {'name': 'measResultListEUTRA-v1250', 'optional': True, 'type': 'MeasResultList2EUTRA-v1250'}], [{'name': 'inDeviceCoexDetected-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], [{'name': 'measResultServCell-v1360', 'optional': True, 'type': 'RSRP-Range-v1360'}]], 'type': 'SEQUENCE'}, 'LogMeasInfoList-r10': {'element': {'type': 'LogMeasInfo-r10'}, 'size': [(1, 'maxLogMeasReport-r10')], 'type': 'SEQUENCE ' 'OF'}, 'LogMeasReport-r10': {'members': [{'name': 'absoluteTimeStamp-r10', 'type': 'AbsoluteTimeInfo-r10'}, {'name': 'traceReference-r10', 'type': 'TraceReference-r10'}, {'name': 'traceRecordingSessionRef-r10', 'size': [2], 'type': 'OCTET ' 'STRING'}, {'name': 'tce-Id-r10', 'size': [1], 'type': 'OCTET ' 'STRING'}, {'name': 'logMeasInfoList-r10', 'type': 'LogMeasInfoList-r10'}, {'name': 'logMeasAvailable-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, None], 'type': 'SEQUENCE'}, 'LoggedMeasurementConfiguration-r10': {'members': [{'members': [{'members': [{'name': 'loggedMeasurementConfiguration-r10', 'type': 'LoggedMeasurementConfiguration-r10-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'LoggedMeasurementConfiguration-r10-IEs': {'members': [{'name': 'traceReference-r10', 'type': 'TraceReference-r10'}, {'name': 'traceRecordingSessionRef-r10', 'size': [2], 'type': 'OCTET ' 'STRING'}, {'name': 'tce-Id-r10', 'size': [1], 'type': 'OCTET ' 'STRING'}, {'name': 'absoluteTimeInfo-r10', 'type': 'AbsoluteTimeInfo-r10'}, {'name': 'areaConfiguration-r10', 'optional': True, 'type': 'AreaConfiguration-r10'}, {'name': 'loggingDuration-r10', 'type': 'LoggingDuration-r10'}, {'name': 'loggingInterval-r10', 'type': 'LoggingInterval-r10'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'LoggedMeasurementConfiguration-v1080-IEs'}], 'type': 'SEQUENCE'}, 'LoggedMeasurementConfiguration-v1080-IEs': {'members': [{'name': 'lateNonCriticalExtension-r10', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'LoggedMeasurementConfiguration-v1130-IEs'}], 'type': 'SEQUENCE'}, 'LoggedMeasurementConfiguration-v1130-IEs': {'members': [{'name': 'plmn-IdentityList-r11', 'optional': True, 'type': 'PLMN-IdentityList3-r11'}, {'name': 'areaConfiguration-v1130', 'optional': True, 'type': 'AreaConfiguration-v1130'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'LoggedMeasurementConfiguration-v1250-IEs'}], 'type': 'SEQUENCE'}, 'LoggedMeasurementConfiguration-v1250-IEs': {'members': [{'name': 'targetMBSFN-AreaList-r12', 'optional': True, 'type': 'TargetMBSFN-AreaList-r12'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'LoggingDuration-r10': {'type': 'ENUMERATED', 'values': [('min10', 0), ('min20', 1), ('min40', 2), ('min60', 3), ('min90', 4), ('min120', 5), ('spare2', 6), ('spare1', 7)]}, 'LoggingInterval-r10': {'type': 'ENUMERATED', 'values': [('ms1280', 0), ('ms2560', 1), ('ms5120', 2), ('ms10240', 3), ('ms20480', 4), ('ms30720', 5), ('ms40960', 6), ('ms61440', 7)]}, 'LogicalChGroupInfoList-r13': {'element': {'type': 'SL-PriorityList-r13'}, 'size': [(1, 'maxLCG-r13')], 'type': 'SEQUENCE ' 'OF'}, 'LogicalChannelConfig': {'members': [{'members': [{'name': 'priority', 'restricted-to': [(1, 16)], 'type': 'INTEGER'}, {'name': 'prioritisedBitRate', 'type': 'ENUMERATED', 'values': [('kBps0', 0), ('kBps8', 1), ('kBps16', 2), ('kBps32', 3), ('kBps64', 4), ('kBps128', 5), ('kBps256', 6), ('infinity', 7), ('kBps512-v1020', 8), ('kBps1024-v1020', 9), ('kBps2048-v1020', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'bucketSizeDuration', 'type': 'ENUMERATED', 'values': [('ms50', 0), ('ms100', 1), ('ms150', 2), ('ms300', 3), ('ms500', 4), ('ms1000', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 'logicalChannelGroup', 'optional': True, 'restricted-to': [(0, 3)], 'type': 'INTEGER'}], 'name': 'ul-SpecificParameters', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'logicalChannelSR-Mask-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], [{'name': 'logicalChannelSR-Prohibit-r12', 'optional': True, 'type': 'BOOLEAN'}], [{'name': 'laa-UL-Allowed-r14', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'bitRateQueryProhibitTimer-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('s0', 0), ('s0dot4', 1), ('s0dot8', 2), ('s1dot6', 3), ('s3', 4), ('s6', 5), ('s12', 6), ('s30', 7)]}]], 'type': 'SEQUENCE'}, 'MAC-MainConfig': {'members': [{'members': [{'name': 'maxHARQ-Tx', 'optional': True, 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n5', 4), ('n6', 5), ('n7', 6), ('n8', 7), ('n10', 8), ('n12', 9), ('n16', 10), ('n20', 11), ('n24', 12), ('n28', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'periodicBSR-Timer', 'optional': True, 'type': 'PeriodicBSR-Timer-r12'}, {'name': 'retxBSR-Timer', 'type': 'RetxBSR-Timer-r12'}, {'name': 'ttiBundling', 'type': 'BOOLEAN'}], 'name': 'ul-SCH-Config', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'drx-Config', 'optional': True, 'type': 'DRX-Config'}, {'name': 'timeAlignmentTimerDedicated', 'type': 'TimeAlignmentTimer'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'periodicPHR-Timer', 'type': 'ENUMERATED', 'values': [('sf10', 0), ('sf20', 1), ('sf50', 2), ('sf100', 3), ('sf200', 4), ('sf500', 5), ('sf1000', 6), ('infinity', 7)]}, {'name': 'prohibitPHR-Timer', 'type': 'ENUMERATED', 'values': [('sf0', 0), ('sf10', 1), ('sf20', 2), ('sf50', 3), ('sf100', 4), ('sf200', 5), ('sf500', 6), ('sf1000', 7)]}, {'name': 'dl-PathlossChange', 'type': 'ENUMERATED', 'values': [('dB1', 0), ('dB3', 1), ('dB6', 2), ('infinity', 3)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'phr-Config', 'optional': True, 'type': 'CHOICE'}, None, [{'name': 'sr-ProhibitTimer-r9', 'optional': True, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}], [{'members': [{'name': 'sCellDeactivationTimer-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('rf2', 0), ('rf4', 1), ('rf8', 2), ('rf16', 3), ('rf32', 4), ('rf64', 5), ('rf128', 6), ('spare', 7)]}, {'name': 'extendedBSR-Sizes-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}, {'name': 'extendedPHR-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], 'name': 'mac-MainConfig-v1020', 'optional': True, 'type': 'SEQUENCE'}], [{'name': 'stag-ToReleaseList-r11', 'optional': True, 'type': 'STAG-ToReleaseList-r11'}, {'name': 'stag-ToAddModList-r11', 'optional': True, 'type': 'STAG-ToAddModList-r11'}, {'name': 'drx-Config-v1130', 'optional': True, 'type': 'DRX-Config-v1130'}], [{'name': 'e-HARQ-Pattern-r12', 'optional': True, 'type': 'BOOLEAN'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'phr-ModeOtherCG-r12', 'type': 'ENUMERATED', 'values': [('real', 0), ('virtual', 1)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'dualConnectivityPHR', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'logicalChannelSR-ProhibitTimer-r12', 'type': 'ENUMERATED', 'values': [('sf20', 0), ('sf40', 1), ('sf64', 2), ('sf128', 3), ('sf512', 4), ('sf1024', 5), ('sf2560', 6), ('spare1', 7)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'logicalChannelSR-Config-r12', 'optional': True, 'type': 'CHOICE'}], [{'name': 'drx-Config-v1310', 'optional': True, 'type': 'DRX-Config-v1310'}, {'name': 'extendedPHR2-r13', 'optional': True, 'type': 'BOOLEAN'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'sf5120', 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'sf10240', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'CHOICE'}], 'name': 'eDRX-Config-CycleStartOffset-r13', 'optional': True, 'type': 'CHOICE'}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'DRX-Config-r13'}], 'name': 'drx-Config-r13', 'optional': True, 'type': 'CHOICE'}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'skipUplinkTxSPS-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'skipUplinkTxDynamic-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'skipUplinkTx-r14', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'dataInactivityTimer-r14', 'type': 'DataInactivityTimer-r14'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'dataInactivityTimerConfig-r14', 'optional': True, 'type': 'CHOICE'}], [{'name': 'rai-Activation-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'type': 'SEQUENCE'}, 'MAC-MainConfigSCell-r11': {'members': [{'name': 'stag-Id-r11', 'optional': True, 'type': 'STAG-Id-r11'}, None], 'type': 'SEQUENCE'}, 'MAC-MainConfigSL-r12': {'members': [{'name': 'periodic-BSR-TimerSL', 'optional': True, 'type': 'PeriodicBSR-Timer-r12'}, {'name': 'retx-BSR-TimerSL', 'type': 'RetxBSR-Timer-r12'}], 'type': 'SEQUENCE'}, 'MAC-Parameters-r12': {'members': [{'name': 'logicalChannelSR-ProhibitTimer-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'longDRX-Command-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MAC-Parameters-v1310': {'members': [{'name': 'extendedMAC-LengthField-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'extendedLongDRX-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MAC-Parameters-v1430': {'members': [{'name': 'shortSPS-IntervalFDD-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'shortSPS-IntervalTDD-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'skipUplinkDynamic-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'skipUplinkSPS-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'multipleUplinkSPS-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'dataInactMon-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MAC-Parameters-v1440': {'members': [{'name': 'rai-Support-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MBMS-CarrierType-r14': {'members': [{'name': 'carrierType-r14', 'type': 'ENUMERATED', 'values': [('mbms', 0), ('fembmsMixed', 1), ('fembmsDedicated', 2)]}, {'name': 'frameOffset-r14', 'optional': True, 'restricted-to': [(0, 3)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'MBMS-InterFreqCarrierTypeList-r14': {'element': {'type': 'MBMS-CarrierType-r14'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'MBMS-NotificationConfig-r9': {'members': [{'name': 'notificationRepetitionCoeff-r9', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1)]}, {'name': 'notificationOffset-r9', 'restricted-to': [(0, 10)], 'type': 'INTEGER'}, {'name': 'notificationSF-Index-r9', 'restricted-to': [(1, 6)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'MBMS-NotificationConfig-v1430': {'members': [{'name': 'notificationSF-Index-v1430', 'restricted-to': [(7, 10)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'MBMS-Parameters-r11': {'members': [{'name': 'mbms-SCell-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'mbms-NonServingCell-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MBMS-Parameters-v1250': {'members': [{'name': 'mbms-AsyncDC-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MBMS-Parameters-v1430': {'members': [{'name': 'fembmsDedicatedCell-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'fembmsMixedCell-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'subcarrierSpacingMBMS-khz7dot5-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'subcarrierSpacingMBMS-khz1dot25-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MBMS-SAI-InterFreq-r11': {'members': [{'name': 'dl-CarrierFreq-r11', 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'mbms-SAI-List-r11', 'type': 'MBMS-SAI-List-r11'}], 'type': 'SEQUENCE'}, 'MBMS-SAI-InterFreq-v1140': {'members': [{'name': 'multiBandInfoList-r11', 'optional': True, 'type': 'MultiBandInfoList-r11'}], 'type': 'SEQUENCE'}, 'MBMS-SAI-InterFreqList-r11': {'element': {'type': 'MBMS-SAI-InterFreq-r11'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'MBMS-SAI-InterFreqList-v1140': {'element': {'type': 'MBMS-SAI-InterFreq-v1140'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'MBMS-SAI-List-r11': {'element': {'type': 'MBMS-SAI-r11'}, 'size': [(1, 'maxSAI-MBMS-r11')], 'type': 'SEQUENCE ' 'OF'}, 'MBMS-SAI-r11': {'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, 'MBMS-ServiceInfo-r13': {'members': [{'name': 'tmgi-r13', 'type': 'TMGI-r9'}], 'type': 'SEQUENCE'}, 'MBMS-ServiceList-r13': {'element': {'type': 'MBMS-ServiceInfo-r13'}, 'size': [(0, 'maxMBMS-ServiceListPerUE-r13')], 'type': 'SEQUENCE ' 'OF'}, 'MBMS-SessionInfo-r9': {'members': [{'name': 'tmgi-r9', 'type': 'TMGI-r9'}, {'name': 'sessionId-r9', 'optional': True, 'size': [1], 'type': 'OCTET ' 'STRING'}, {'name': 'logicalChannelIdentity-r9', 'restricted-to': [(0, 'maxSessionPerPMCH-1')], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'MBMS-SessionInfoList-r9': {'element': {'type': 'MBMS-SessionInfo-r9'}, 'size': [(0, 'maxSessionPerPMCH')], 'type': 'SEQUENCE ' 'OF'}, 'MBMSCountingRequest-r10': {'members': [{'name': 'countingRequestList-r10', 'type': 'CountingRequestList-r10'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MBMSCountingResponse-r10': {'members': [{'members': [{'members': [{'name': 'countingResponse-r10', 'type': 'MBMSCountingResponse-r10-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'MBMSCountingResponse-r10-IEs': {'members': [{'name': 'mbsfn-AreaIndex-r10', 'optional': True, 'restricted-to': [(0, 'maxMBSFN-Area-1')], 'type': 'INTEGER'}, {'name': 'countingResponseList-r10', 'optional': True, 'type': 'CountingResponseList-r10'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MBMSInterestIndication-r11': {'members': [{'members': [{'members': [{'name': 'interestIndication-r11', 'type': 'MBMSInterestIndication-r11-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'MBMSInterestIndication-r11-IEs': {'members': [{'name': 'mbms-FreqList-r11', 'optional': True, 'type': 'CarrierFreqListMBMS-r11'}, {'name': 'mbms-Priority-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'MBMSInterestIndication-v1310-IEs'}], 'type': 'SEQUENCE'}, 'MBMSInterestIndication-v1310-IEs': {'members': [{'name': 'mbms-Services-r13', 'optional': True, 'type': 'MBMS-ServiceList-r13'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MBMSSessionInfo-r13': {'members': [{'name': 'tmgi-r13', 'type': 'TMGI-r9'}, {'name': 'sessionId-r13', 'optional': True, 'size': [1], 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'MBSFN-AreaId-r12': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'MBSFN-AreaInfo-r9': {'members': [{'name': 'mbsfn-AreaId-r9', 'type': 'MBSFN-AreaId-r12'}, {'name': 'non-MBSFNregionLength', 'type': 'ENUMERATED', 'values': [('s1', 0), ('s2', 1)]}, {'name': 'notificationIndicator-r9', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'members': [{'name': 'mcch-RepetitionPeriod-r9', 'type': 'ENUMERATED', 'values': [('rf32', 0), ('rf64', 1), ('rf128', 2), ('rf256', 3)]}, {'name': 'mcch-Offset-r9', 'restricted-to': [(0, 10)], 'type': 'INTEGER'}, {'name': 'mcch-ModificationPeriod-r9', 'type': 'ENUMERATED', 'values': [('rf512', 0), ('rf1024', 1)]}, {'name': 'sf-AllocInfo-r9', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'signallingMCS-r9', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n7', 1), ('n13', 2), ('n19', 3)]}], 'name': 'mcch-Config-r9', 'type': 'SEQUENCE'}, None, [{'members': [{'name': 'mcch-RepetitionPeriod-v1430', 'optional': True, 'type': 'ENUMERATED', 'values': [('rf1', 0), ('rf2', 1), ('rf4', 2), ('rf8', 3), ('rf16', 4)]}, {'name': 'mcch-ModificationPeriod-v1430', 'optional': True, 'type': 'ENUMERATED', 'values': [('rf1', 0), ('rf2', 1), ('rf4', 2), ('rf8', 3), ('rf16', 4), ('rf32', 5), ('rf64', 6), ('rf128', 7), ('rf256', 8), ('spare7', 9)]}], 'name': 'mcch-Config-r14', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'subcarrierSpacingMBMS-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('khz-7dot5', 0), ('khz-1dot25', 1)]}]], 'type': 'SEQUENCE'}, 'MBSFN-AreaInfoList-r9': {'element': {'type': 'MBSFN-AreaInfo-r9'}, 'size': [(1, 'maxMBSFN-Area')], 'type': 'SEQUENCE ' 'OF'}, 'MBSFN-RSRQ-Range-r12': {'restricted-to': [(0, 31)], 'type': 'INTEGER'}, 'MBSFN-SubframeConfig': {'members': [{'name': 'radioframeAllocationPeriod', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n4', 2), ('n8', 3), ('n16', 4), ('n32', 5)]}, {'name': 'radioframeAllocationOffset', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'members': [{'name': 'oneFrame', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'fourFrames', 'size': [24], 'type': 'BIT ' 'STRING'}], 'name': 'subframeAllocation', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'MBSFN-SubframeConfig-v1430': {'members': [{'members': [{'name': 'oneFrame-v1430', 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'fourFrames-v1430', 'size': [8], 'type': 'BIT ' 'STRING'}], 'name': 'subframeAllocation-v1430', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'MBSFN-SubframeConfigList': {'element': {'type': 'MBSFN-SubframeConfig'}, 'size': [(1, 'maxMBSFN-Allocations')], 'type': 'SEQUENCE ' 'OF'}, 'MBSFN-SubframeConfigList-v1430': {'element': {'type': 'MBSFN-SubframeConfig-v1430'}, 'size': [(1, 'maxMBSFN-Allocations')], 'type': 'SEQUENCE ' 'OF'}, 'MBSFNAreaConfiguration-r9': {'members': [{'name': 'commonSF-Alloc-r9', 'type': 'CommonSF-AllocPatternList-r9'}, {'name': 'commonSF-AllocPeriod-r9', 'type': 'ENUMERATED', 'values': [('rf4', 0), ('rf8', 1), ('rf16', 2), ('rf32', 3), ('rf64', 4), ('rf128', 5), ('rf256', 6)]}, {'name': 'pmch-InfoList-r9', 'type': 'PMCH-InfoList-r9'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'MBSFNAreaConfiguration-v930-IEs'}], 'type': 'SEQUENCE'}, 'MBSFNAreaConfiguration-v1250-IEs': {'members': [{'name': 'pmch-InfoListExt-r12', 'optional': True, 'type': 'PMCH-InfoListExt-r12'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'MBSFNAreaConfiguration-v1430-IEs'}], 'type': 'SEQUENCE'}, 'MBSFNAreaConfiguration-v1430-IEs': {'members': [{'name': 'commonSF-Alloc-r14', 'type': 'CommonSF-AllocPatternList-r14'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MBSFNAreaConfiguration-v930-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'MBSFNAreaConfiguration-v1250-IEs'}], 'type': 'SEQUENCE'}, 'MCC': {'element': {'type': 'MCC-MNC-Digit'}, 'size': [3], 'type': 'SEQUENCE OF'}, 'MCC-MNC-Digit': {'restricted-to': [(0, 9)], 'type': 'INTEGER'}, 'MCCH-Message': {'members': [{'name': 'message', 'type': 'MCCH-MessageType'}], 'type': 'SEQUENCE'}, 'MCCH-MessageType': {'members': [{'members': [{'name': 'mbsfnAreaConfiguration-r9', 'type': 'MBSFNAreaConfiguration-r9'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [{'members': [{'name': 'mbmsCountingRequest-r10', 'type': 'MBMSCountingRequest-r10'}], 'name': 'c2', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'name': 'later', 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'MIMO-BeamformedCapabilities-r13': {'members': [{'name': 'k-Max-r13', 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, {'name': 'n-MaxList-r13', 'optional': True, 'size': [(1, 7)], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'MIMO-BeamformedCapabilityList-r13': {'element': {'type': 'MIMO-BeamformedCapabilities-r13'}, 'size': [(1, 'maxCSI-Proc-r11')], 'type': 'SEQUENCE ' 'OF'}, 'MIMO-CA-ParametersPerBoBC-r13': {'members': [{'name': 'parametersTM9-r13', 'optional': True, 'type': 'MIMO-CA-ParametersPerBoBCPerTM-r13'}, {'name': 'parametersTM10-r13', 'optional': True, 'type': 'MIMO-CA-ParametersPerBoBCPerTM-r13'}], 'type': 'SEQUENCE'}, 'MIMO-CA-ParametersPerBoBC-v1430': {'members': [{'name': 'parametersTM9-v1430', 'optional': True, 'type': 'MIMO-CA-ParametersPerBoBCPerTM-v1430'}, {'name': 'parametersTM10-v1430', 'optional': True, 'type': 'MIMO-CA-ParametersPerBoBCPerTM-v1430'}], 'type': 'SEQUENCE'}, 'MIMO-CA-ParametersPerBoBCPerTM-r13': {'members': [{'name': 'nonPrecoded-r13', 'optional': True, 'type': 'MIMO-NonPrecodedCapabilities-r13'}, {'name': 'beamformed-r13', 'optional': True, 'type': 'MIMO-BeamformedCapabilityList-r13'}, {'name': 'dmrs-Enhancements-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('different', 0)]}], 'type': 'SEQUENCE'}, 'MIMO-CA-ParametersPerBoBCPerTM-v1430': {'members': [{'name': 'csi-ReportingNP-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('different', 0)]}, {'name': 'csi-ReportingAdvanced-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('different', 0)]}], 'type': 'SEQUENCE'}, 'MIMO-CapabilityDL-r10': {'type': 'ENUMERATED', 'values': [('twoLayers', 0), ('fourLayers', 1), ('eightLayers', 2)]}, 'MIMO-CapabilityUL-r10': {'type': 'ENUMERATED', 'values': [('twoLayers', 0), ('fourLayers', 1)]}, 'MIMO-NonPrecodedCapabilities-r13': {'members': [{'name': 'config1-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'config2-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'config3-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'config4-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MIMO-UE-BeamformedCapabilities-r13': {'members': [{'name': 'altCodebook-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'mimo-BeamformedCapabilities-r13', 'type': 'MIMO-BeamformedCapabilityList-r13'}], 'type': 'SEQUENCE'}, 'MIMO-UE-Parameters-r13': {'members': [{'name': 'parametersTM9-r13', 'optional': True, 'type': 'MIMO-UE-ParametersPerTM-r13'}, {'name': 'parametersTM10-r13', 'optional': True, 'type': 'MIMO-UE-ParametersPerTM-r13'}, {'name': 'srs-EnhancementsTDD-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'srs-Enhancements-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'interferenceMeasRestriction-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MIMO-UE-Parameters-v1430': {'members': [{'name': 'parametersTM9-v1430', 'optional': True, 'type': 'MIMO-UE-ParametersPerTM-v1430'}, {'name': 'parametersTM10-v1430', 'optional': True, 'type': 'MIMO-UE-ParametersPerTM-v1430'}], 'type': 'SEQUENCE'}, 'MIMO-UE-ParametersPerTM-r13': {'members': [{'name': 'nonPrecoded-r13', 'optional': True, 'type': 'MIMO-NonPrecodedCapabilities-r13'}, {'name': 'beamformed-r13', 'optional': True, 'type': 'MIMO-UE-BeamformedCapabilities-r13'}, {'name': 'channelMeasRestriction-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'dmrs-Enhancements-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'csi-RS-EnhancementsTDD-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MIMO-UE-ParametersPerTM-v1430': {'members': [{'members': [{'name': 'nMaxProc-r14', 'restricted-to': [(5, 32)], 'type': 'INTEGER'}, {'name': 'nMaxResource-r14', 'type': 'ENUMERATED', 'values': [('ffs1', 0), ('ffs2', 1), ('ffs3', 2), ('ffs4', 3)]}], 'name': 'nzp-CSI-RS-AperiodicInfo-r14', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'nMaxResource-r14', 'type': 'ENUMERATED', 'values': [('ffs1', 0), ('ffs2', 1), ('ffs3', 2), ('ffs4', 3)]}], 'name': 'nzp-CSI-RS-PeriodicInfo-r14', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'zp-CSI-RS-AperiodicInfo-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ul-dmrs-Enhancements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'densityReductionNP-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'densityReductionBF-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'hybridCSI-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'semiOL-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'csi-ReportingNP-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'csi-ReportingAdvanced-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MMEC': {'size': [8], 'type': 'BIT STRING'}, 'MMTEL-Parameters-r14': {'members': [{'name': 'delayBudgetReporting-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'pusch-Enhancements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'recommendedBitRate-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'recommendedBitRateQuery-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MNC': {'element': {'type': 'MCC-MNC-Digit'}, 'size': [(2, 3)], 'type': 'SEQUENCE OF'}, 'MasterInformationBlock': {'members': [{'name': 'dl-Bandwidth', 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'phich-Config', 'type': 'PHICH-Config'}, {'name': 'systemFrameNumber', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'schedulingInfoSIB1-BR-r13', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'spare', 'size': [5], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'MasterInformationBlock-MBMS-r14': {'members': [{'name': 'dl-Bandwidth-MBMS-r14', 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'systemFrameNumber-r14', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'additionalNonMBSFNSubframes-r14', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'spare', 'size': [13], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'MeasCSI-RS-Config-r12': {'members': [{'name': 'measCSI-RS-Id-r12', 'type': 'MeasCSI-RS-Id-r12'}, {'name': 'physCellId-r12', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'scramblingIdentity-r12', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'resourceConfig-r12', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'subframeOffset-r12', 'restricted-to': [(0, 4)], 'type': 'INTEGER'}, {'name': 'csi-RS-IndividualOffset-r12', 'type': 'Q-OffsetRange'}, None], 'type': 'SEQUENCE'}, 'MeasCSI-RS-Id-r12': {'restricted-to': [(1, 'maxCSI-RS-Meas-r12')], 'type': 'INTEGER'}, 'MeasCSI-RS-ToAddModList-r12': {'element': {'type': 'MeasCSI-RS-Config-r12'}, 'size': [(1, 'maxCSI-RS-Meas-r12')], 'type': 'SEQUENCE ' 'OF'}, 'MeasCSI-RS-ToRemoveList-r12': {'element': {'type': 'MeasCSI-RS-Id-r12'}, 'size': [(1, 'maxCSI-RS-Meas-r12')], 'type': 'SEQUENCE ' 'OF'}, 'MeasConfig': {'members': [{'name': 'measObjectToRemoveList', 'optional': True, 'type': 'MeasObjectToRemoveList'}, {'name': 'measObjectToAddModList', 'optional': True, 'type': 'MeasObjectToAddModList'}, {'name': 'reportConfigToRemoveList', 'optional': True, 'type': 'ReportConfigToRemoveList'}, {'name': 'reportConfigToAddModList', 'optional': True, 'type': 'ReportConfigToAddModList'}, {'name': 'measIdToRemoveList', 'optional': True, 'type': 'MeasIdToRemoveList'}, {'name': 'measIdToAddModList', 'optional': True, 'type': 'MeasIdToAddModList'}, {'name': 'quantityConfig', 'optional': True, 'type': 'QuantityConfig'}, {'name': 'measGapConfig', 'optional': True, 'type': 'MeasGapConfig'}, {'name': 's-Measure', 'optional': True, 'type': 'RSRP-Range'}, {'name': 'preRegistrationInfoHRPD', 'optional': True, 'type': 'PreRegistrationInfoHRPD'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'mobilityStateParameters', 'type': 'MobilityStateParameters'}, {'name': 'timeToTrigger-SF', 'type': 'SpeedStateScaleFactors'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'speedStatePars', 'optional': True, 'type': 'CHOICE'}, None, [{'name': 'measObjectToAddModList-v9e0', 'optional': True, 'type': 'MeasObjectToAddModList-v9e0'}], [{'name': 'allowInterruptions-r11', 'optional': True, 'type': 'BOOLEAN'}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'MeasScaleFactor-r12'}], 'name': 'measScaleFactor-r12', 'optional': True, 'type': 'CHOICE'}, {'name': 'measIdToRemoveListExt-r12', 'optional': True, 'type': 'MeasIdToRemoveListExt-r12'}, {'name': 'measIdToAddModListExt-r12', 'optional': True, 'type': 'MeasIdToAddModListExt-r12'}, {'name': 'measRSRQ-OnAllSymbols-r12', 'optional': True, 'type': 'BOOLEAN'}], [{'name': 'measObjectToRemoveListExt-r13', 'optional': True, 'type': 'MeasObjectToRemoveListExt-r13'}, {'name': 'measObjectToAddModListExt-r13', 'optional': True, 'type': 'MeasObjectToAddModListExt-r13'}, {'name': 'measIdToAddModList-v1310', 'optional': True, 'type': 'MeasIdToAddModList-v1310'}, {'name': 'measIdToAddModListExt-v1310', 'optional': True, 'type': 'MeasIdToAddModListExt-v1310'}], [{'name': 'measGapConfigPerCC-List-r14', 'optional': True, 'type': 'MeasGapConfigPerCC-List-r14'}, {'name': 'measGapSharingConfig-r14', 'optional': True, 'type': 'MeasGapSharingConfig-r14'}]], 'type': 'SEQUENCE'}, 'MeasCycleSCell-r10': {'type': 'ENUMERATED', 'values': [('sf160', 0), ('sf256', 1), ('sf320', 2), ('sf512', 3), ('sf640', 4), ('sf1024', 5), ('sf1280', 6), ('spare1', 7)]}, 'MeasDS-Config-r12': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'ms40-r12', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'ms80-r12', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, {'name': 'ms160-r12', 'restricted-to': [(0, 159)], 'type': 'INTEGER'}, None], 'name': 'dmtc-PeriodOffset-r12', 'type': 'CHOICE'}, {'members': [{'name': 'durationFDD-r12', 'restricted-to': [(1, 'maxDS-Duration-r12')], 'type': 'INTEGER'}, {'name': 'durationTDD-r12', 'restricted-to': [(2, 'maxDS-Duration-r12')], 'type': 'INTEGER'}], 'name': 'ds-OccasionDuration-r12', 'type': 'CHOICE'}, {'name': 'measCSI-RS-ToRemoveList-r12', 'optional': True, 'type': 'MeasCSI-RS-ToRemoveList-r12'}, {'name': 'measCSI-RS-ToAddModList-r12', 'optional': True, 'type': 'MeasCSI-RS-ToAddModList-r12'}, None], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'MeasGapConfig': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'gp0', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'gp1', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, None, {'name': 'gp2-r14', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'gp3-r14', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, {'name': 'gp-ncsg0-r14', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'gp-ncsg1-r14', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, {'name': 'gp-ncsg2-r14', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'gp-ncsg3-r14', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, {'name': 'gp-nonUniform1-r14', 'restricted-to': [(0, 1279)], 'type': 'INTEGER'}, {'name': 'gp-nonUniform2-r14', 'restricted-to': [(0, 2559)], 'type': 'INTEGER'}, {'name': 'gp-nonUniform3-r14', 'restricted-to': [(0, 5119)], 'type': 'INTEGER'}, {'name': 'gp-nonUniform4-r14', 'restricted-to': [(0, 10239)], 'type': 'INTEGER'}], 'name': 'gapOffset', 'type': 'CHOICE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'MeasGapConfigPerCC-List-r14': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'measGapConfigToRemoveList-r14', 'optional': True, 'type': 'MeasGapConfigToRemoveList-r14'}, {'name': 'measGapConfigToAddModList-r14', 'optional': True, 'type': 'MeasGapConfigToAddModList-r14'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'MeasGapConfigPerCC-r14': {'members': [{'name': 'servCellId-r14', 'type': 'ServCellIndex-r13'}, {'name': 'measGapConfigCC-r14', 'type': 'MeasGapConfig'}], 'type': 'SEQUENCE'}, 'MeasGapConfigToAddModList-r14': {'element': {'type': 'MeasGapConfigPerCC-r14'}, 'size': [(1, 'maxServCell-r13')], 'type': 'SEQUENCE ' 'OF'}, 'MeasGapConfigToRemoveList-r14': {'element': {'type': 'ServCellIndex-r13'}, 'size': [(1, 'maxServCell-r13')], 'type': 'SEQUENCE ' 'OF'}, 'MeasGapSharingConfig-r14': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'measGapSharingScheme-r14', 'type': 'ENUMERATED', 'values': [('scheme00', 0), ('scheme01', 1), ('scheme10', 2), ('scheme11', 3)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'MeasId': {'restricted-to': [(1, 'maxMeasId')], 'type': 'INTEGER'}, 'MeasId-v1250': {'restricted-to': [('maxMeasId-Plus1', 'maxMeasId-r12')], 'type': 'INTEGER'}, 'MeasIdToAddMod': {'members': [{'name': 'measId', 'type': 'MeasId'}, {'name': 'measObjectId', 'type': 'MeasObjectId'}, {'name': 'reportConfigId', 'type': 'ReportConfigId'}], 'type': 'SEQUENCE'}, 'MeasIdToAddMod-v1310': {'members': [{'name': 'measObjectId-v1310', 'optional': True, 'type': 'MeasObjectId-v1310'}], 'type': 'SEQUENCE'}, 'MeasIdToAddModExt-r12': {'members': [{'name': 'measId-v1250', 'type': 'MeasId-v1250'}, {'name': 'measObjectId-r12', 'type': 'MeasObjectId'}, {'name': 'reportConfigId-r12', 'type': 'ReportConfigId'}], 'type': 'SEQUENCE'}, 'MeasIdToAddModList': {'element': {'type': 'MeasIdToAddMod'}, 'size': [(1, 'maxMeasId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasIdToAddModList-v1310': {'element': {'type': 'MeasIdToAddMod-v1310'}, 'size': [(1, 'maxMeasId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasIdToAddModListExt-r12': {'element': {'type': 'MeasIdToAddModExt-r12'}, 'size': [(1, 'maxMeasId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasIdToAddModListExt-v1310': {'element': {'type': 'MeasIdToAddMod-v1310'}, 'size': [(1, 'maxMeasId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasIdToRemoveList': {'element': {'type': 'MeasId'}, 'size': [(1, 'maxMeasId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasIdToRemoveListExt-r12': {'element': {'type': 'MeasId-v1250'}, 'size': [(1, 'maxMeasId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasObjectCDMA2000': {'members': [{'name': 'cdma2000-Type', 'type': 'CDMA2000-Type'}, {'name': 'carrierFreq', 'type': 'CarrierFreqCDMA2000'}, {'name': 'searchWindowSize', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'default': 0, 'name': 'offsetFreq', 'type': 'Q-OffsetRangeInterRAT'}, {'name': 'cellsToRemoveList', 'optional': True, 'type': 'CellIndexList'}, {'name': 'cellsToAddModList', 'optional': True, 'type': 'CellsToAddModListCDMA2000'}, {'name': 'cellForWhichToReportCGI', 'optional': True, 'type': 'PhysCellIdCDMA2000'}, None], 'type': 'SEQUENCE'}, 'MeasObjectEUTRA': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'allowedMeasBandwidth', 'type': 'AllowedMeasBandwidth'}, {'name': 'presenceAntennaPort1', 'type': 'PresenceAntennaPort1'}, {'name': 'neighCellConfig', 'type': 'NeighCellConfig'}, {'default': 'dB0', 'name': 'offsetFreq', 'type': 'Q-OffsetRange'}, {'name': 'cellsToRemoveList', 'optional': True, 'type': 'CellIndexList'}, {'name': 'cellsToAddModList', 'optional': True, 'type': 'CellsToAddModList'}, {'name': 'blackCellsToRemoveList', 'optional': True, 'type': 'CellIndexList'}, {'name': 'blackCellsToAddModList', 'optional': True, 'type': 'BlackCellsToAddModList'}, {'name': 'cellForWhichToReportCGI', 'optional': True, 'type': 'PhysCellId'}, None, [{'name': 'measCycleSCell-r10', 'optional': True, 'type': 'MeasCycleSCell-r10'}, {'name': 'measSubframePatternConfigNeigh-r10', 'optional': True, 'type': 'MeasSubframePatternConfigNeigh-r10'}], [{'name': 'widebandRSRQ-Meas-r11', 'optional': True, 'type': 'BOOLEAN'}], [{'name': 'altTTT-CellsToRemoveList-r12', 'optional': True, 'type': 'CellIndexList'}, {'name': 'altTTT-CellsToAddModList-r12', 'optional': True, 'type': 'AltTTT-CellsToAddModList-r12'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms50', 1), ('ms100', 2), ('ms200', 3), ('ms300', 4), ('ms400', 5), ('ms500', 6), ('ms1000', 7)]}], 'name': 't312-r12', 'optional': True, 'type': 'CHOICE'}, {'name': 'reducedMeasPerformance-r12', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'measDS-Config-r12', 'optional': True, 'type': 'MeasDS-Config-r12'}], [{'name': 'whiteCellsToRemoveList-r13', 'optional': True, 'type': 'CellIndexList'}, {'name': 'whiteCellsToAddModList-r13', 'optional': True, 'type': 'WhiteCellsToAddModList-r13'}, {'name': 'rmtc-Config-r13', 'optional': True, 'type': 'RMTC-Config-r13'}, {'name': 'carrierFreq-r13', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9e0'}], [{'name': 'tx-ResourcePoolToRemoveList-r14', 'optional': True, 'type': 'Tx-ResourcePoolMeasList-r14'}, {'name': 'tx-ResourcePoolToAddList-r14', 'optional': True, 'type': 'Tx-ResourcePoolMeasList-r14'}, {'name': 'fembms-MixedCarrier-r14', 'optional': True, 'type': 'BOOLEAN'}]], 'type': 'SEQUENCE'}, 'MeasObjectEUTRA-v9e0': {'members': [{'name': 'carrierFreq-v9e0', 'type': 'ARFCN-ValueEUTRA-v9e0'}], 'type': 'SEQUENCE'}, 'MeasObjectGERAN': {'members': [{'name': 'carrierFreqs', 'type': 'CarrierFreqsGERAN'}, {'default': 0, 'name': 'offsetFreq', 'type': 'Q-OffsetRangeInterRAT'}, {'default': '0b11111111', 'name': 'ncc-Permitted', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'cellForWhichToReportCGI', 'optional': True, 'type': 'PhysCellIdGERAN'}, None], 'type': 'SEQUENCE'}, 'MeasObjectId': {'restricted-to': [(1, 'maxObjectId')], 'type': 'INTEGER'}, 'MeasObjectId-r13': {'restricted-to': [(1, 'maxObjectId-r13')], 'type': 'INTEGER'}, 'MeasObjectId-v1310': {'restricted-to': [('maxObjectId-Plus1-r13', 'maxObjectId-r13')], 'type': 'INTEGER'}, 'MeasObjectToAddMod': {'members': [{'name': 'measObjectId', 'type': 'MeasObjectId'}, {'members': [{'name': 'measObjectEUTRA', 'type': 'MeasObjectEUTRA'}, {'name': 'measObjectUTRA', 'type': 'MeasObjectUTRA'}, {'name': 'measObjectGERAN', 'type': 'MeasObjectGERAN'}, {'name': 'measObjectCDMA2000', 'type': 'MeasObjectCDMA2000'}, None, {'name': 'measObjectWLAN-r13', 'type': 'MeasObjectWLAN-r13'}], 'name': 'measObject', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'MeasObjectToAddMod-v9e0': {'members': [{'name': 'measObjectEUTRA-v9e0', 'optional': True, 'type': 'MeasObjectEUTRA-v9e0'}], 'type': 'SEQUENCE'}, 'MeasObjectToAddModExt-r13': {'members': [{'name': 'measObjectId-r13', 'type': 'MeasObjectId-v1310'}, {'members': [{'name': 'measObjectEUTRA-r13', 'type': 'MeasObjectEUTRA'}, {'name': 'measObjectUTRA-r13', 'type': 'MeasObjectUTRA'}, {'name': 'measObjectGERAN-r13', 'type': 'MeasObjectGERAN'}, {'name': 'measObjectCDMA2000-r13', 'type': 'MeasObjectCDMA2000'}, None, {'name': 'measObjectWLAN-v1320', 'type': 'MeasObjectWLAN-r13'}], 'name': 'measObject-r13', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'MeasObjectToAddModList': {'element': {'type': 'MeasObjectToAddMod'}, 'size': [(1, 'maxObjectId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasObjectToAddModList-v9e0': {'element': {'type': 'MeasObjectToAddMod-v9e0'}, 'size': [(1, 'maxObjectId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasObjectToAddModListExt-r13': {'element': {'type': 'MeasObjectToAddModExt-r13'}, 'size': [(1, 'maxObjectId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasObjectToRemoveList': {'element': {'type': 'MeasObjectId'}, 'size': [(1, 'maxObjectId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasObjectToRemoveListExt-r13': {'element': {'type': 'MeasObjectId-v1310'}, 'size': [(1, 'maxObjectId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasObjectUTRA': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueUTRA'}, {'default': 0, 'name': 'offsetFreq', 'type': 'Q-OffsetRangeInterRAT'}, {'name': 'cellsToRemoveList', 'optional': True, 'type': 'CellIndexList'}, {'members': [{'name': 'cellsToAddModListUTRA-FDD', 'type': 'CellsToAddModListUTRA-FDD'}, {'name': 'cellsToAddModListUTRA-TDD', 'type': 'CellsToAddModListUTRA-TDD'}], 'name': 'cellsToAddModList', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'utra-FDD', 'type': 'PhysCellIdUTRA-FDD'}, {'name': 'utra-TDD', 'type': 'PhysCellIdUTRA-TDD'}], 'name': 'cellForWhichToReportCGI', 'optional': True, 'type': 'CHOICE'}, None, [{'name': 'csg-allowedReportingCells-v930', 'optional': True, 'type': 'CSG-AllowedReportingCells-r9'}], [{'name': 'reducedMeasPerformance-r12', 'optional': True, 'type': 'BOOLEAN'}]], 'type': 'SEQUENCE'}, 'MeasObjectWLAN-r13': {'members': [{'members': [{'element': {'type': 'WLAN-BandIndicator-r13'}, 'name': 'bandIndicatorListWLAN-r13', 'size': [(1, 'maxWLAN-Bands-r13')], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'WLAN-CarrierInfo-r13'}, 'name': 'carrierInfoListWLAN-r13', 'size': [(1, 'maxWLAN-CarrierInfo-r13')], 'type': 'SEQUENCE ' 'OF'}], 'name': 'carrierFreq-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'wlan-ToAddModList-r13', 'optional': True, 'type': 'WLAN-Id-List-r13'}, {'name': 'wlan-ToRemoveList-r13', 'optional': True, 'type': 'WLAN-Id-List-r13'}, None], 'type': 'SEQUENCE'}, 'MeasParameters': {'members': [{'name': 'bandListEUTRA', 'type': 'BandListEUTRA'}], 'type': 'SEQUENCE'}, 'MeasParameters-v1020': {'members': [{'name': 'bandCombinationListEUTRA-r10', 'type': 'BandCombinationListEUTRA-r10'}], 'type': 'SEQUENCE'}, 'MeasParameters-v1130': {'members': [{'name': 'rsrqMeasWideband-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MeasParameters-v11a0': {'members': [{'name': 'benefitsFromInterruption-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'MeasParameters-v1250': {'members': [{'name': 'timerT312-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'alternativeTimeToTrigger-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'incMonEUTRA-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'incMonUTRA-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'extendedMaxMeasId-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'extendedRSRQ-LowerRange-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'rsrq-OnAllSymbols-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'crs-DiscoverySignalsMeas-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'csi-RS-DiscoverySignalsMeas-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MeasParameters-v1310': {'members': [{'name': 'rs-SINR-Meas-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'whiteCellList-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'extendedMaxObjectId-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ul-PDCP-Delay-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'extendedFreqPriorities-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'multiBandInfoReport-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'rssi-AndChannelOccupancyReporting-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MeasParameters-v1430': {'members': [{'name': 'ceMeasurements-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ncsg-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'shortMeasurementGap-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'perServingCellMeasurementGap-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'nonUniformGap-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MeasRSSI-ReportConfig-r13': {'members': [{'name': 'channelOccupancyThreshold-r13', 'optional': True, 'type': 'RSSI-Range-r13'}], 'type': 'SEQUENCE'}, 'MeasResult2CDMA2000-r9': {'members': [{'name': 'carrierFreq-r9', 'type': 'CarrierFreqCDMA2000'}, {'name': 'measResultList-r9', 'type': 'MeasResultsCDMA2000'}], 'type': 'SEQUENCE'}, 'MeasResult2EUTRA-r9': {'members': [{'name': 'carrierFreq-r9', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'measResultList-r9', 'type': 'MeasResultListEUTRA'}], 'type': 'SEQUENCE'}, 'MeasResult2EUTRA-v1250': {'members': [{'name': 'rsrq-Type-r12', 'optional': True, 'type': 'RSRQ-Type-r12'}], 'type': 'SEQUENCE'}, 'MeasResult2EUTRA-v9e0': {'members': [{'name': 'carrierFreq-v9e0', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9e0'}], 'type': 'SEQUENCE'}, 'MeasResult2UTRA-r9': {'members': [{'name': 'carrierFreq-r9', 'type': 'ARFCN-ValueUTRA'}, {'name': 'measResultList-r9', 'type': 'MeasResultListUTRA'}], 'type': 'SEQUENCE'}, 'MeasResultCBR-r14': {'members': [{'name': 'poolIdentity-r14', 'type': 'SL-V2X-TxPoolReportIdentity-r14'}, {'name': 'cbr-PSSCH-r14', 'type': 'SL-CBR-r14'}, {'name': 'cbr-PSCCH-r14', 'optional': True, 'type': 'SL-CBR-r14'}], 'type': 'SEQUENCE'}, 'MeasResultCDMA2000': {'members': [{'name': 'physCellId', 'type': 'PhysCellIdCDMA2000'}, {'name': 'cgi-Info', 'optional': True, 'type': 'CellGlobalIdCDMA2000'}, {'members': [{'name': 'pilotPnPhase', 'optional': True, 'restricted-to': [(0, 32767)], 'type': 'INTEGER'}, {'name': 'pilotStrength', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, None], 'name': 'measResult', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MeasResultCSI-RS-List-r12': {'element': {'type': 'MeasResultCSI-RS-r12'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultCSI-RS-r12': {'members': [{'name': 'measCSI-RS-Id-r12', 'type': 'MeasCSI-RS-Id-r12'}, {'name': 'csi-RSRP-Result-r12', 'type': 'CSI-RSRP-Range-r12'}, None], 'type': 'SEQUENCE'}, 'MeasResultEUTRA': {'members': [{'name': 'physCellId', 'type': 'PhysCellId'}, {'members': [{'name': 'cellGlobalId', 'type': 'CellGlobalIdEUTRA'}, {'name': 'trackingAreaCode', 'type': 'TrackingAreaCode'}, {'name': 'plmn-IdentityList', 'optional': True, 'type': 'PLMN-IdentityList2'}], 'name': 'cgi-Info', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'rsrpResult', 'optional': True, 'type': 'RSRP-Range'}, {'name': 'rsrqResult', 'optional': True, 'type': 'RSRQ-Range'}, None, [{'name': 'additionalSI-Info-r9', 'optional': True, 'type': 'AdditionalSI-Info-r9'}], [{'name': 'primaryPLMN-Suitable-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'measResult-v1250', 'optional': True, 'type': 'RSRQ-Range-v1250'}], [{'name': 'rs-sinr-Result-r13', 'optional': True, 'type': 'RS-SINR-Range-r13'}, {'members': [{'name': 'freqBandIndicator-r13', 'optional': True, 'type': 'FreqBandIndicator-r11'}, {'name': 'multiBandInfoList-r13', 'optional': True, 'type': 'MultiBandInfoList-r11'}, {'name': 'freqBandIndicatorPriority-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'name': 'cgi-Info-v1310', 'optional': True, 'type': 'SEQUENCE'}], [{'name': 'measResult-v1360', 'optional': True, 'type': 'RSRP-Range-v1360'}]], 'name': 'measResult', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MeasResultForECID-r9': {'members': [{'name': 'ue-RxTxTimeDiffResult-r9', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'currentSFN-r9', 'size': [10], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'MeasResultForRSSI-r13': {'members': [{'name': 'rssi-Result-r13', 'type': 'RSSI-Range-r13'}, {'name': 'channelOccupancy-r13', 'restricted-to': [(0, 100)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'MeasResultGERAN': {'members': [{'name': 'carrierFreq', 'type': 'CarrierFreqGERAN'}, {'name': 'physCellId', 'type': 'PhysCellIdGERAN'}, {'members': [{'name': 'cellGlobalId', 'type': 'CellGlobalIdGERAN'}, {'name': 'routingAreaCode', 'optional': True, 'size': [8], 'type': 'BIT ' 'STRING'}], 'name': 'cgi-Info', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'rssi', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, None], 'name': 'measResult', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MeasResultList2CDMA2000-r9': {'element': {'type': 'MeasResult2CDMA2000-r9'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultList2EUTRA-r9': {'element': {'type': 'MeasResult2EUTRA-r9'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultList2EUTRA-v1250': {'element': {'type': 'MeasResult2EUTRA-v1250'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultList2EUTRA-v9e0': {'element': {'type': 'MeasResult2EUTRA-v9e0'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultList2GERAN-r10': {'element': {'type': 'MeasResultListGERAN'}, 'size': [(1, 'maxCellListGERAN')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultList2UTRA-r9': {'element': {'type': 'MeasResult2UTRA-r9'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultListCBR-r14': {'element': {'type': 'MeasResultCBR-r14'}, 'size': [(1, 'maxCBR-Report-r14')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultListCDMA2000': {'element': {'type': 'MeasResultCDMA2000'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultListEUTRA': {'element': {'type': 'MeasResultEUTRA'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultListGERAN': {'element': {'type': 'MeasResultGERAN'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultListMBSFN-r12': {'element': {'type': 'MeasResultMBSFN-r12'}, 'size': [(1, 'maxMBSFN-Area')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultListUTRA': {'element': {'type': 'MeasResultUTRA'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultListWLAN-r13': {'element': {'type': 'MeasResultWLAN-r13'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultListWLAN-r14': {'element': {'type': 'MeasResultWLAN-r13'}, 'size': [(1, 'maxWLAN-Id-Report-r14')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultMBSFN-r12': {'members': [{'members': [{'name': 'mbsfn-AreaId-r12', 'type': 'MBSFN-AreaId-r12'}, {'name': 'carrierFreq-r12', 'type': 'ARFCN-ValueEUTRA-r9'}], 'name': 'mbsfn-Area-r12', 'type': 'SEQUENCE'}, {'name': 'rsrpResultMBSFN-r12', 'type': 'RSRP-Range'}, {'name': 'rsrqResultMBSFN-r12', 'type': 'MBSFN-RSRQ-Range-r12'}, {'name': 'signallingBLER-Result-r12', 'optional': True, 'type': 'BLER-Result-r12'}, {'name': 'dataBLER-MCH-ResultList-r12', 'optional': True, 'type': 'DataBLER-MCH-ResultList-r12'}, None], 'type': 'SEQUENCE'}, 'MeasResultSSTD-r13': {'members': [{'name': 'sfn-OffsetResult-r13', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'frameBoundaryOffsetResult-r13', 'restricted-to': [(-5, 4)], 'type': 'INTEGER'}, {'name': 'subframeBoundaryOffsetResult-r13', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'MeasResultServFreq-r10': {'members': [{'name': 'servFreqId-r10', 'type': 'ServCellIndex-r10'}, {'members': [{'name': 'rsrpResultSCell-r10', 'type': 'RSRP-Range'}, {'name': 'rsrqResultSCell-r10', 'type': 'RSRQ-Range'}], 'name': 'measResultSCell-r10', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'physCellId-r10', 'type': 'PhysCellId'}, {'name': 'rsrpResultNCell-r10', 'type': 'RSRP-Range'}, {'name': 'rsrqResultNCell-r10', 'type': 'RSRQ-Range'}], 'name': 'measResultBestNeighCell-r10', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'measResultSCell-v1250', 'optional': True, 'type': 'RSRQ-Range-v1250'}, {'name': 'measResultBestNeighCell-v1250', 'optional': True, 'type': 'RSRQ-Range-v1250'}], [{'members': [{'name': 'rs-sinr-Result-r13', 'type': 'RS-SINR-Range-r13'}], 'name': 'measResultSCell-v1310', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'rs-sinr-Result-r13', 'type': 'RS-SINR-Range-r13'}], 'name': 'measResultBestNeighCell-v1310', 'optional': True, 'type': 'SEQUENCE'}]], 'type': 'SEQUENCE'}, 'MeasResultServFreq-r13': {'members': [{'name': 'servFreqId-r13', 'type': 'ServCellIndex-r13'}, {'members': [{'name': 'rsrpResultSCell-r13', 'type': 'RSRP-Range'}, {'name': 'rsrqResultSCell-r13', 'type': 'RSRQ-Range-r13'}, {'name': 'rs-sinr-Result-r13', 'optional': True, 'type': 'RS-SINR-Range-r13'}], 'name': 'measResultSCell-r13', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'physCellId-r13', 'type': 'PhysCellId'}, {'name': 'rsrpResultNCell-r13', 'type': 'RSRP-Range'}, {'name': 'rsrqResultNCell-r13', 'type': 'RSRQ-Range-r13'}, {'name': 'rs-sinr-Result-r13', 'optional': True, 'type': 'RS-SINR-Range-r13'}], 'name': 'measResultBestNeighCell-r13', 'optional': True, 'type': 'SEQUENCE'}, None, [{'members': [{'name': 'rsrpResultNCell-v1360', 'type': 'RSRP-Range-v1360'}], 'name': 'measResultBestNeighCell-v1360', 'optional': True, 'type': 'SEQUENCE'}]], 'type': 'SEQUENCE'}, 'MeasResultServFreqList-r10': {'element': {'type': 'MeasResultServFreq-r10'}, 'size': [(1, 'maxServCell-r10')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultServFreqListExt-r13': {'element': {'type': 'MeasResultServFreq-r13'}, 'size': [(1, 'maxServCell-r13')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultUTRA': {'members': [{'members': [{'name': 'fdd', 'type': 'PhysCellIdUTRA-FDD'}, {'name': 'tdd', 'type': 'PhysCellIdUTRA-TDD'}], 'name': 'physCellId', 'type': 'CHOICE'}, {'members': [{'name': 'cellGlobalId', 'type': 'CellGlobalIdUTRA'}, {'name': 'locationAreaCode', 'optional': True, 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'routingAreaCode', 'optional': True, 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'plmn-IdentityList', 'optional': True, 'type': 'PLMN-IdentityList2'}], 'name': 'cgi-Info', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'utra-RSCP', 'optional': True, 'restricted-to': [(-5, 91)], 'type': 'INTEGER'}, {'name': 'utra-EcN0', 'optional': True, 'restricted-to': [(0, 49)], 'type': 'INTEGER'}, None, [{'name': 'additionalSI-Info-r9', 'optional': True, 'type': 'AdditionalSI-Info-r9'}], [{'name': 'primaryPLMN-Suitable-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'name': 'measResult', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MeasResultWLAN-r13': {'members': [{'name': 'wlan-Identifiers-r13', 'type': 'WLAN-Identifiers-r12'}, {'name': 'carrierInfoWLAN-r13', 'optional': True, 'type': 'WLAN-CarrierInfo-r13'}, {'name': 'bandWLAN-r13', 'optional': True, 'type': 'WLAN-BandIndicator-r13'}, {'name': 'rssiWLAN-r13', 'type': 'WLAN-RSSI-Range-r13'}, {'name': 'availableAdmissionCapacityWLAN-r13', 'optional': True, 'restricted-to': [(0, 31250)], 'type': 'INTEGER'}, {'name': 'backhaulDL-BandwidthWLAN-r13', 'optional': True, 'type': 'WLAN-backhaulRate-r12'}, {'name': 'backhaulUL-BandwidthWLAN-r13', 'optional': True, 'type': 'WLAN-backhaulRate-r12'}, {'name': 'channelUtilizationWLAN-r13', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'stationCountWLAN-r13', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'connectedWLAN-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, None], 'type': 'SEQUENCE'}, 'MeasResults': {'members': [{'name': 'measId', 'type': 'MeasId'}, {'members': [{'name': 'rsrpResult', 'type': 'RSRP-Range'}, {'name': 'rsrqResult', 'type': 'RSRQ-Range'}], 'name': 'measResultPCell', 'type': 'SEQUENCE'}, {'members': [{'name': 'measResultListEUTRA', 'type': 'MeasResultListEUTRA'}, {'name': 'measResultListUTRA', 'type': 'MeasResultListUTRA'}, {'name': 'measResultListGERAN', 'type': 'MeasResultListGERAN'}, {'name': 'measResultsCDMA2000', 'type': 'MeasResultsCDMA2000'}, None], 'name': 'measResultNeighCells', 'optional': True, 'type': 'CHOICE'}, None, [{'name': 'measResultForECID-r9', 'optional': True, 'type': 'MeasResultForECID-r9'}], [{'name': 'locationInfo-r10', 'optional': True, 'type': 'LocationInfo-r10'}, {'name': 'measResultServFreqList-r10', 'optional': True, 'type': 'MeasResultServFreqList-r10'}], [{'name': 'measId-v1250', 'optional': True, 'type': 'MeasId-v1250'}, {'name': 'measResultPCell-v1250', 'optional': True, 'type': 'RSRQ-Range-v1250'}, {'name': 'measResultCSI-RS-List-r12', 'optional': True, 'type': 'MeasResultCSI-RS-List-r12'}], [{'name': 'measResultForRSSI-r13', 'optional': True, 'type': 'MeasResultForRSSI-r13'}, {'name': 'measResultServFreqListExt-r13', 'optional': True, 'type': 'MeasResultServFreqListExt-r13'}, {'name': 'measResultSSTD-r13', 'optional': True, 'type': 'MeasResultSSTD-r13'}, {'members': [{'name': 'rs-sinr-Result-r13', 'type': 'RS-SINR-Range-r13'}], 'name': 'measResultPCell-v1310', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'ul-PDCP-DelayResultList-r13', 'optional': True, 'type': 'UL-PDCP-DelayResultList-r13'}, {'name': 'measResultListWLAN-r13', 'optional': True, 'type': 'MeasResultListWLAN-r13'}], [{'name': 'measResultPCell-v1360', 'optional': True, 'type': 'RSRP-Range-v1360'}], [{'name': 'measResultListCBR-r14', 'optional': True, 'type': 'MeasResultListCBR-r14'}, {'name': 'measResultListWLAN-r14', 'optional': True, 'type': 'MeasResultListWLAN-r14'}]], 'type': 'SEQUENCE'}, 'MeasResultsCDMA2000': {'members': [{'name': 'preRegistrationStatusHRPD', 'type': 'BOOLEAN'}, {'name': 'measResultListCDMA2000', 'type': 'MeasResultListCDMA2000'}], 'type': 'SEQUENCE'}, 'MeasScaleFactor-r12': {'type': 'ENUMERATED', 'values': [('sf-EUTRA-cf1', 0), ('sf-EUTRA-cf2', 1)]}, 'MeasSubframeCellList-r10': {'element': {'type': 'PhysCellIdRange'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'MeasSubframePattern-r10': {'members': [{'name': 'subframePatternFDD-r10', 'size': [40], 'type': 'BIT ' 'STRING'}, {'members': [{'name': 'subframeConfig1-5-r10', 'size': [20], 'type': 'BIT ' 'STRING'}, {'name': 'subframeConfig0-r10', 'size': [70], 'type': 'BIT ' 'STRING'}, {'name': 'subframeConfig6-r10', 'size': [60], 'type': 'BIT ' 'STRING'}, None], 'name': 'subframePatternTDD-r10', 'type': 'CHOICE'}, None], 'type': 'CHOICE'}, 'MeasSubframePatternConfigNeigh-r10': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'measSubframePatternNeigh-r10', 'type': 'MeasSubframePattern-r10'}, {'name': 'measSubframeCellList-r10', 'optional': True, 'type': 'MeasSubframeCellList-r10'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'MeasSubframePatternPCell-r10': {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'MeasSubframePattern-r10'}], 'type': 'CHOICE'}, 'MeasurementReport': {'members': [{'members': [{'members': [{'name': 'measurementReport-r8', 'type': 'MeasurementReport-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'MeasurementReport-r8-IEs': {'members': [{'name': 'measResults', 'type': 'MeasResults'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'MeasurementReport-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'MeasurementReport-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MobilityControlInfo': {'members': [{'name': 'targetPhysCellId', 'type': 'PhysCellId'}, {'name': 'carrierFreq', 'optional': True, 'type': 'CarrierFreqEUTRA'}, {'name': 'carrierBandwidth', 'optional': True, 'type': 'CarrierBandwidthEUTRA'}, {'name': 'additionalSpectrumEmission', 'optional': True, 'type': 'AdditionalSpectrumEmission'}, {'name': 't304', 'type': 'ENUMERATED', 'values': [('ms50', 0), ('ms100', 1), ('ms150', 2), ('ms200', 3), ('ms500', 4), ('ms1000', 5), ('ms2000', 6), ('ms10000-v1310', 7)]}, {'name': 'newUE-Identity', 'type': 'C-RNTI'}, {'name': 'radioResourceConfigCommon', 'type': 'RadioResourceConfigCommon'}, {'name': 'rach-ConfigDedicated', 'optional': True, 'type': 'RACH-ConfigDedicated'}, None, [{'name': 'carrierFreq-v9e0', 'optional': True, 'type': 'CarrierFreqEUTRA-v9e0'}], [{'name': 'drb-ContinueROHC-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], [{'name': 'mobilityControlInfoV2X-r14', 'optional': True, 'type': 'MobilityControlInfoV2X-r14'}, {'name': 'handoverWithoutWT-Change-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('keepLWA-Config', 0), ('sendEndMarker', 1)]}, {'name': 'makeBeforeBreak-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'rach-Skip-r14', 'optional': True, 'type': 'RACH-Skip-r14'}, {'name': 'sameSFN-Indication-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'type': 'SEQUENCE'}, 'MobilityControlInfo-v10l0': {'members': [{'name': 'additionalSpectrumEmission-v10l0', 'optional': True, 'type': 'AdditionalSpectrumEmission-v10l0'}], 'type': 'SEQUENCE'}, 'MobilityControlInfoSCG-r12': {'members': [{'name': 't307-r12', 'type': 'ENUMERATED', 'values': [('ms50', 0), ('ms100', 1), ('ms150', 2), ('ms200', 3), ('ms500', 4), ('ms1000', 5), ('ms2000', 6), ('spare1', 7)]}, {'name': 'ue-IdentitySCG-r12', 'optional': True, 'type': 'C-RNTI'}, {'name': 'rach-ConfigDedicated-r12', 'optional': True, 'type': 'RACH-ConfigDedicated'}, {'name': 'cipheringAlgorithmSCG-r12', 'optional': True, 'type': 'CipheringAlgorithm-r12'}, None, [{'name': 'makeBeforeBreakSCG-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'rach-SkipSCG-r14', 'optional': True, 'type': 'RACH-Skip-r14'}]], 'type': 'SEQUENCE'}, 'MobilityControlInfoV2X-r14': {'members': [{'name': 'v2x-CommTxPoolExceptional-r14', 'optional': True, 'type': 'SL-CommResourcePoolV2X-r14'}, {'name': 'v2x-CommRxPool-r14', 'optional': True, 'type': 'SL-CommRxPoolListV2X-r14'}, {'name': 'v2x-CommSyncConfig-r14', 'optional': True, 'type': 'SL-SyncConfigListV2X-r14'}, {'name': 'cbr-MobilityTxConfigList-r14', 'optional': True, 'type': 'SL-CBR-CommonTxConfigList-r14'}], 'type': 'SEQUENCE'}, 'MobilityFromEUTRACommand': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'mobilityFromEUTRACommand-r8', 'type': 'MobilityFromEUTRACommand-r8-IEs'}, {'name': 'mobilityFromEUTRACommand-r9', 'type': 'MobilityFromEUTRACommand-r9-IEs'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'MobilityFromEUTRACommand-r8-IEs': {'members': [{'name': 'cs-FallbackIndicator', 'type': 'BOOLEAN'}, {'members': [{'name': 'handover', 'type': 'Handover'}, {'name': 'cellChangeOrder', 'type': 'CellChangeOrder'}], 'name': 'purpose', 'type': 'CHOICE'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'MobilityFromEUTRACommand-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'MobilityFromEUTRACommand-r9-IEs': {'members': [{'name': 'cs-FallbackIndicator', 'type': 'BOOLEAN'}, {'members': [{'name': 'handover', 'type': 'Handover'}, {'name': 'cellChangeOrder', 'type': 'CellChangeOrder'}, {'name': 'e-CSFB-r9', 'type': 'E-CSFB-r9'}, None], 'name': 'purpose', 'type': 'CHOICE'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'MobilityFromEUTRACommand-v930-IEs'}], 'type': 'SEQUENCE'}, 'MobilityFromEUTRACommand-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'MobilityFromEUTRACommand-v8d0-IEs'}], 'type': 'SEQUENCE'}, 'MobilityFromEUTRACommand-v8d0-IEs': {'members': [{'name': 'bandIndicator', 'optional': True, 'type': 'BandIndicatorGERAN'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MobilityFromEUTRACommand-v930-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'MobilityFromEUTRACommand-v960-IEs'}], 'type': 'SEQUENCE'}, 'MobilityFromEUTRACommand-v960-IEs': {'members': [{'name': 'bandIndicator', 'optional': True, 'type': 'BandIndicatorGERAN'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MobilityHistoryReport-r12': {'type': 'VisitedCellInfoList-r12'}, 'MobilityParameters-r14': {'members': [{'name': 'makeBeforeBreak-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'rach-Less-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MobilityParametersCDMA2000': {'type': 'OCTET ' 'STRING'}, 'MobilityStateParameters': {'members': [{'name': 't-Evaluation', 'type': 'ENUMERATED', 'values': [('s30', 0), ('s60', 1), ('s120', 2), ('s180', 3), ('s240', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 't-HystNormal', 'type': 'ENUMERATED', 'values': [('s30', 0), ('s60', 1), ('s120', 2), ('s180', 3), ('s240', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 'n-CellChangeMedium', 'restricted-to': [(1, 16)], 'type': 'INTEGER'}, {'name': 'n-CellChangeHigh', 'restricted-to': [(1, 16)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'MultiBandInfo-v9e0': {'members': [{'name': 'freqBandIndicator-v9e0', 'optional': True, 'type': 'FreqBandIndicator-v9e0'}], 'type': 'SEQUENCE'}, 'MultiBandInfoList': {'element': {'type': 'FreqBandIndicator'}, 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}, 'MultiBandInfoList-r11': {'element': {'type': 'FreqBandIndicator-r11'}, 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}, 'MultiBandInfoList-v10j0': {'element': {'type': 'NS-PmaxList-r10'}, 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}, 'MultiBandInfoList-v10l0': {'element': {'type': 'NS-PmaxList-v10l0'}, 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}, 'MultiBandInfoList-v9e0': {'element': {'type': 'MultiBandInfo-v9e0'}, 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}, 'N1PUCCH-AN-CS-r10': {'element': {'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}, 'N1PUCCH-AN-InfoList-r13': {'element': {'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, 'size': [(1, 'maxCE-Level-r13')], 'type': 'SEQUENCE ' 'OF'}, 'N1PUCCH-AN-PersistentList': {'element': {'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}, 'NAICS-AssistanceInfo-r12': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'neighCellsToReleaseList-r12', 'optional': True, 'type': 'NeighCellsToReleaseList-r12'}, {'name': 'neighCellsToAddModList-r12', 'optional': True, 'type': 'NeighCellsToAddModList-r12'}, {'name': 'servCellp-a-r12', 'optional': True, 'type': 'P-a'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'NAICS-Capability-Entry-r12': {'members': [{'name': 'numberOfNAICS-CapableCC-r12', 'restricted-to': [(1, 5)], 'type': 'INTEGER'}, {'name': 'numberOfAggregatedPRB-r12', 'type': 'ENUMERATED', 'values': [('n50', 0), ('n75', 1), ('n100', 2), ('n125', 3), ('n150', 4), ('n175', 5), ('n200', 6), ('n225', 7), ('n250', 8), ('n275', 9), ('n300', 10), ('n350', 11), ('n400', 12), ('n450', 13), ('n500', 14), ('spare', 15)]}, None], 'type': 'SEQUENCE'}, 'NAICS-Capability-List-r12': {'element': {'type': 'NAICS-Capability-Entry-r12'}, 'size': [(1, 'maxNAICS-Entries-r12')], 'type': 'SEQUENCE ' 'OF'}, 'NS-PmaxList-r10': {'element': {'type': 'NS-PmaxValue-r10'}, 'size': [(1, 'maxNS-Pmax-r10')], 'type': 'SEQUENCE OF'}, 'NS-PmaxList-v10l0': {'element': {'type': 'NS-PmaxValue-v10l0'}, 'size': [(1, 'maxNS-Pmax-r10')], 'type': 'SEQUENCE ' 'OF'}, 'NS-PmaxValue-r10': {'members': [{'name': 'additionalPmax-r10', 'optional': True, 'type': 'P-Max'}, {'name': 'additionalSpectrumEmission', 'type': 'AdditionalSpectrumEmission'}], 'type': 'SEQUENCE'}, 'NS-PmaxValue-v10l0': {'members': [{'name': 'additionalSpectrumEmission-v10l0', 'optional': True, 'type': 'AdditionalSpectrumEmission-v10l0'}], 'type': 'SEQUENCE'}, 'NZP-FrequencyDensity-r14': {'type': 'ENUMERATED', 'values': [('d1', 0), ('d2', 1), ('d3', 2)]}, 'NZP-ResourceConfig-r13': {'members': [{'name': 'resourceConfig-r13', 'type': 'ResourceConfig-r13'}, None, [{'name': 'transmissionComb-r14', 'optional': True, 'type': 'NZP-TransmissionComb-r14'}, {'name': 'frequencyDensity-r14', 'optional': True, 'type': 'NZP-FrequencyDensity-r14'}]], 'type': 'SEQUENCE'}, 'NZP-TransmissionComb-r14': {'restricted-to': [(0, 2)], 'type': 'INTEGER'}, 'NeighCellCDMA2000': {'members': [{'name': 'bandClass', 'type': 'BandclassCDMA2000'}, {'name': 'neighCellsPerFreqList', 'type': 'NeighCellsPerBandclassListCDMA2000'}], 'type': 'SEQUENCE'}, 'NeighCellCDMA2000-r11': {'members': [{'name': 'bandClass', 'type': 'BandclassCDMA2000'}, {'element': {'type': 'NeighCellsPerBandclassCDMA2000-r11'}, 'name': 'neighFreqInfoList-r11', 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'NeighCellCDMA2000-v920': {'members': [{'name': 'neighCellsPerFreqList-v920', 'type': 'NeighCellsPerBandclassListCDMA2000-v920'}], 'type': 'SEQUENCE'}, 'NeighCellConfig': {'size': [2], 'type': 'BIT STRING'}, 'NeighCellListCDMA2000': {'element': {'type': 'NeighCellCDMA2000'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'NeighCellListCDMA2000-v920': {'element': {'type': 'NeighCellCDMA2000-v920'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'NeighCellSI-AcquisitionParameters-r9': {'members': [{'name': 'intraFreqSI-AcquisitionForHO-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'interFreqSI-AcquisitionForHO-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'utran-SI-AcquisitionForHO-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'NeighCellsCRS-Info-r11': {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'CRS-AssistanceInfoList-r11'}], 'type': 'CHOICE'}, 'NeighCellsCRS-Info-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'CRS-AssistanceInfoList-r13'}], 'type': 'CHOICE'}, 'NeighCellsInfo-r12': {'members': [{'name': 'physCellId-r12', 'type': 'PhysCellId'}, {'name': 'p-b-r12', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'crs-PortsCount-r12', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n4', 2), ('spare', 3)]}, {'name': 'mbsfn-SubframeConfig-r12', 'optional': True, 'type': 'MBSFN-SubframeConfigList'}, {'element': {'type': 'P-a'}, 'name': 'p-aList-r12', 'size': [(1, 'maxP-a-PerNeighCell-r12')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'transmissionModeList-r12', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'resAllocGranularity-r12', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'NeighCellsPerBandclassCDMA2000': {'members': [{'name': 'arfcn', 'type': 'ARFCN-ValueCDMA2000'}, {'name': 'physCellIdList', 'type': 'PhysCellIdListCDMA2000'}], 'type': 'SEQUENCE'}, 'NeighCellsPerBandclassCDMA2000-r11': {'members': [{'name': 'arfcn', 'type': 'ARFCN-ValueCDMA2000'}, {'element': {'type': 'PhysCellIdCDMA2000'}, 'name': 'physCellIdList-r11', 'size': [(1, 40)], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'NeighCellsPerBandclassCDMA2000-v920': {'members': [{'name': 'physCellIdList-v920', 'type': 'PhysCellIdListCDMA2000-v920'}], 'type': 'SEQUENCE'}, 'NeighCellsPerBandclassListCDMA2000': {'element': {'type': 'NeighCellsPerBandclassCDMA2000'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'NeighCellsPerBandclassListCDMA2000-v920': {'element': {'type': 'NeighCellsPerBandclassCDMA2000-v920'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'NeighCellsToAddModList-r12': {'element': {'type': 'NeighCellsInfo-r12'}, 'size': [(1, 'maxNeighCell-r12')], 'type': 'SEQUENCE ' 'OF'}, 'NeighCellsToReleaseList-r12': {'element': {'type': 'PhysCellId'}, 'size': [(1, 'maxNeighCell-r12')], 'type': 'SEQUENCE ' 'OF'}, 'NextHopChainingCount': {'restricted-to': [(0, 7)], 'type': 'INTEGER'}, 'NonContiguousUL-RA-WithinCC-List-r10': {'element': {'type': 'NonContiguousUL-RA-WithinCC-r10'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'NonContiguousUL-RA-WithinCC-r10': {'members': [{'name': 'nonContiguousUL-RA-WithinCC-Info-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'NonMBSFN-SubframeConfig-r14': {'members': [{'name': 'radioFrameAllocationPeriod-r14', 'type': 'ENUMERATED', 'values': [('rf4', 0), ('rf8', 1), ('rf16', 2), ('rf32', 3), ('rf64', 4), ('rf128', 5), ('rf512', 6)]}, {'name': 'radioFrameAllocationOffset-r14', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'subframeAllocation-r14', 'size': [9], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'NumberOfPreamblesSent-r11': {'restricted-to': [(1, 200)], 'type': 'INTEGER'}, 'OTDOA-PositioningCapabilities-r10': {'members': [{'name': 'otdoa-UE-Assisted-r10', 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'interFreqRSTD-Measurement-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'ObtainLocationConfig-r11': {'members': [{'name': 'obtainLocation-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], 'type': 'SEQUENCE'}, 'Other-Parameters-r11': {'members': [{'name': 'inDeviceCoexInd-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'powerPrefInd-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ue-Rx-TxTimeDiffMeasurements-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'Other-Parameters-v11d0': {'members': [{'name': 'inDeviceCoexInd-UL-CA-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'Other-Parameters-v1360': {'members': [{'name': 'inDeviceCoexInd-HardwareSharingInd-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'Other-Parameters-v1430': {'members': [{'name': 'bwPrefInd-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'rlm-ReportSupport-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'OtherConfig-r9': {'members': [{'name': 'reportProximityConfig-r9', 'optional': True, 'type': 'ReportProximityConfig-r9'}, None, [{'name': 'idc-Config-r11', 'optional': True, 'type': 'IDC-Config-r11'}, {'name': 'powerPrefIndicationConfig-r11', 'optional': True, 'type': 'PowerPrefIndicationConfig-r11'}, {'name': 'obtainLocationConfig-r11', 'optional': True, 'type': 'ObtainLocationConfig-r11'}], [{'name': 'bw-PreferenceIndicationTimer-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('s0', 0), ('s0dot5', 1), ('s1', 2), ('s2', 3), ('s5', 4), ('s10', 5), ('s20', 6), ('s30', 7), ('s60', 8), ('s90', 9), ('s120', 10), ('s300', 11), ('s600', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'sps-AssistanceInfoReport-r14', 'optional': True, 'type': 'BOOLEAN'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'delayBudgetReportingProhibitTimer-r14', 'type': 'ENUMERATED', 'values': [('s0', 0), ('s0dot4', 1), ('s0dot8', 2), ('s1dot6', 3), ('s3', 4), ('s6', 5), ('s12', 6), ('s30', 7)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'delayBudgetReportingConfig-r14', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'rlmReportTimer-r14', 'type': 'ENUMERATED', 'values': [('s0', 0), ('s0dot5', 1), ('s1', 2), ('s2', 3), ('s5', 4), ('s10', 5), ('s20', 6), ('s30', 7), ('s60', 8), ('s90', 9), ('s120', 10), ('s300', 11), ('s600', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'rlmReportRep-MPDCCH-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'rlm-ReportConfig-r14', 'optional': True, 'type': 'CHOICE'}]], 'type': 'SEQUENCE'}, 'P-C-AndCBSR-Pair-r13': {'element': {'type': 'P-C-AndCBSR-r13'}, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, 'P-C-AndCBSR-Pair-r13a': {'element': {'type': 'P-C-AndCBSR-r11'}, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, 'P-C-AndCBSR-r11': {'members': [{'name': 'p-C-r11', 'restricted-to': [(-8, 15)], 'type': 'INTEGER'}, {'name': 'codebookSubsetRestriction-r11', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'P-C-AndCBSR-r13': {'members': [{'name': 'p-C-r13', 'restricted-to': [(-8, 15)], 'type': 'INTEGER'}, {'members': [{'members': [{'name': 'codebookSubsetRestriction1-r13', 'type': 'BIT ' 'STRING'}, {'name': 'codebookSubsetRestriction2-r13', 'type': 'BIT ' 'STRING'}], 'name': 'nonPrecoded-r13', 'type': 'SEQUENCE'}, {'members': [{'name': 'codebookSubsetRestriction3-r13', 'type': 'BIT ' 'STRING'}], 'name': 'beamformedK1a-r13', 'type': 'SEQUENCE'}, {'members': [{'name': 'codebookSubsetRestriction-r13', 'type': 'BIT ' 'STRING'}], 'name': 'beamformedKN-r13', 'type': 'SEQUENCE'}], 'name': 'cbsr-Selection-r13', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'P-Max': {'restricted-to': [(-30, 33)], 'type': 'INTEGER'}, 'P-a': {'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-4dot77', 1), ('dB-3', 2), ('dB-1dot77', 3), ('dB0', 4), ('dB1', 5), ('dB2', 6), ('dB3', 7)]}, 'P0-SL-r12': {'restricted-to': [(-126, 31)], 'type': 'INTEGER'}, 'PCCH-Config': {'members': [{'name': 'defaultPagingCycle', 'type': 'ENUMERATED', 'values': [('rf32', 0), ('rf64', 1), ('rf128', 2), ('rf256', 3)]}, {'name': 'nB', 'type': 'ENUMERATED', 'values': [('fourT', 0), ('twoT', 1), ('oneT', 2), ('halfT', 3), ('quarterT', 4), ('oneEighthT', 5), ('oneSixteenthT', 6), ('oneThirtySecondT', 7)]}], 'type': 'SEQUENCE'}, 'PCCH-Config-v1310': {'members': [{'name': 'paging-narrowBands-r13', 'restricted-to': [(1, 'maxAvailNarrowBands-r13')], 'type': 'INTEGER'}, {'name': 'mpdcch-NumRepetition-Paging-r13', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7), ('r256', 8)]}, {'name': 'nB-v1310', 'optional': True, 'type': 'ENUMERATED', 'values': [('one64thT', 0), ('one128thT', 1), ('one256thT', 2)]}], 'type': 'SEQUENCE'}, 'PCCH-Message': {'members': [{'name': 'message', 'type': 'PCCH-MessageType'}], 'type': 'SEQUENCE'}, 'PCCH-MessageType': {'members': [{'members': [{'name': 'paging', 'type': 'Paging'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'PCI-ARFCN-r13': {'members': [{'name': 'physCellId-r13', 'type': 'PhysCellId'}, {'name': 'carrierFreq-r13', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r9'}], 'type': 'SEQUENCE'}, 'PDCCH-CandidateReductionValue-r13': {'type': 'ENUMERATED', 'values': [('n0', 0), ('n33', 1), ('n66', 2), ('n100', 3)]}, 'PDCCH-CandidateReductionValue-r14': {'type': 'ENUMERATED', 'values': [('n0', 0), ('n50', 1), ('n100', 2), ('n150', 3)]}, 'PDCCH-CandidateReductions-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'pdcch-candidateReductionAL1-r13', 'type': 'PDCCH-CandidateReductionValue-r13'}, {'name': 'pdcch-candidateReductionAL2-r13', 'type': 'PDCCH-CandidateReductionValue-r13'}, {'name': 'pdcch-candidateReductionAL3-r13', 'type': 'PDCCH-CandidateReductionValue-r13'}, {'name': 'pdcch-candidateReductionAL4-r13', 'type': 'PDCCH-CandidateReductionValue-r13'}, {'name': 'pdcch-candidateReductionAL5-r13', 'type': 'PDCCH-CandidateReductionValue-r13'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'PDCCH-CandidateReductionsLAA-UL-r14': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'pdcch-candidateReductionAL1-r14', 'type': 'PDCCH-CandidateReductionValue-r13'}, {'name': 'pdcch-candidateReductionAL2-r14', 'type': 'PDCCH-CandidateReductionValue-r13'}, {'name': 'pdcch-candidateReductionAL3-r14', 'type': 'PDCCH-CandidateReductionValue-r14'}, {'name': 'pdcch-candidateReductionAL4-r14', 'type': 'PDCCH-CandidateReductionValue-r14'}, {'name': 'pdcch-candidateReductionAL5-r14', 'type': 'PDCCH-CandidateReductionValue-r14'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'PDCCH-ConfigLAA-r14': {'members': [{'name': 'maxNumberOfSchedSubframes-Format0B-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('sf2', 0), ('sf3', 1), ('sf4', 2)]}, {'name': 'maxNumberOfSchedSubframes-Format4B-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('sf2', 0), ('sf3', 1), ('sf4', 2)]}, {'name': 'skipMonitoringDCI-Format0A-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'skipMonitoringDCI-Format4A-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'pdcch-CandidateReductions-Format0A-r14', 'optional': True, 'type': 'PDCCH-CandidateReductions-r13'}, {'name': 'pdcch-CandidateReductions-Format4A-r14', 'optional': True, 'type': 'PDCCH-CandidateReductionsLAA-UL-r14'}, {'name': 'pdcch-CandidateReductions-Format0B-r14', 'optional': True, 'type': 'PDCCH-CandidateReductionsLAA-UL-r14'}, {'name': 'pdcch-CandidateReductions-Format4B-r14', 'optional': True, 'type': 'PDCCH-CandidateReductionsLAA-UL-r14'}], 'type': 'SEQUENCE'}, 'PDCCH-ConfigSCell-r13': {'members': [{'name': 'skipMonitoringDCI-format0-1A-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'PDCP-Config': {'members': [{'name': 'discardTimer', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms50', 0), ('ms100', 1), ('ms150', 2), ('ms300', 3), ('ms500', 4), ('ms750', 5), ('ms1500', 6), ('infinity', 7)]}, {'members': [{'name': 'statusReportRequired', 'type': 'BOOLEAN'}], 'name': 'rlc-AM', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'pdcp-SN-Size', 'type': 'ENUMERATED', 'values': [('len7bits', 0), ('len12bits', 1)]}], 'name': 'rlc-UM', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'notUsed', 'type': 'NULL'}, {'members': [{'default': 15, 'name': 'maxCID', 'restricted-to': [(1, 16383)], 'type': 'INTEGER'}, {'members': [{'name': 'profile0x0001', 'type': 'BOOLEAN'}, {'name': 'profile0x0002', 'type': 'BOOLEAN'}, {'name': 'profile0x0003', 'type': 'BOOLEAN'}, {'name': 'profile0x0004', 'type': 'BOOLEAN'}, {'name': 'profile0x0006', 'type': 'BOOLEAN'}, {'name': 'profile0x0101', 'type': 'BOOLEAN'}, {'name': 'profile0x0102', 'type': 'BOOLEAN'}, {'name': 'profile0x0103', 'type': 'BOOLEAN'}, {'name': 'profile0x0104', 'type': 'BOOLEAN'}], 'name': 'profiles', 'type': 'SEQUENCE'}, None], 'name': 'rohc', 'type': 'SEQUENCE'}], 'name': 'headerCompression', 'type': 'CHOICE'}, None, [{'name': 'rn-IntegrityProtection-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('enabled', 0)]}], [{'name': 'pdcp-SN-Size-v1130', 'optional': True, 'type': 'ENUMERATED', 'values': [('len15bits', 0)]}], [{'name': 'ul-DataSplitDRB-ViaSCG-r12', 'optional': True, 'type': 'BOOLEAN'}, {'name': 't-Reordering-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms20', 1), ('ms40', 2), ('ms60', 3), ('ms80', 4), ('ms100', 5), ('ms120', 6), ('ms140', 7), ('ms160', 8), ('ms180', 9), ('ms200', 10), ('ms220', 11), ('ms240', 12), ('ms260', 13), ('ms280', 14), ('ms300', 15), ('ms500', 16), ('ms750', 17), ('spare14', 18), ('spare13', 19), ('spare12', 20), ('spare11', 21), ('spare10', 22), ('spare9', 23), ('spare8', 24), ('spare7', 25), ('spare6', 26), ('spare5', 27), ('spare4', 28), ('spare3', 29), ('spare2', 30), ('spare1', 31)]}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'ENUMERATED', 'values': [('b0', 0), ('b100', 1), ('b200', 2), ('b400', 3), ('b800', 4), ('b1600', 5), ('b3200', 6), ('b6400', 7), ('b12800', 8), ('b25600', 9), ('b51200', 10), ('b102400', 11), ('b204800', 12), ('b409600', 13), ('b819200', 14), ('spare1', 15)]}], 'name': 'ul-DataSplitThreshold-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'pdcp-SN-Size-v1310', 'optional': True, 'type': 'ENUMERATED', 'values': [('len18bits', 0)]}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'statusPDU-TypeForPolling-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('type1', 0), ('type2', 1)]}, {'name': 'statusPDU-Periodicity-Type1-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms5', 0), ('ms10', 1), ('ms20', 2), ('ms30', 3), ('ms40', 4), ('ms50', 5), ('ms60', 6), ('ms70', 7), ('ms80', 8), ('ms90', 9), ('ms100', 10), ('ms150', 11), ('ms200', 12), ('ms300', 13), ('ms500', 14), ('ms1000', 15), ('ms2000', 16), ('ms5000', 17), ('ms10000', 18), ('ms20000', 19), ('ms50000', 20)]}, {'name': 'statusPDU-Periodicity-Type2-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms5', 0), ('ms10', 1), ('ms20', 2), ('ms30', 3), ('ms40', 4), ('ms50', 5), ('ms60', 6), ('ms70', 7), ('ms80', 8), ('ms90', 9), ('ms100', 10), ('ms150', 11), ('ms200', 12), ('ms300', 13), ('ms500', 14), ('ms1000', 15), ('ms2000', 16), ('ms5000', 17), ('ms10000', 18), ('ms20000', 19), ('ms50000', 20)]}, {'name': 'statusPDU-Periodicity-Offset-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms1', 0), ('ms2', 1), ('ms5', 2), ('ms10', 3), ('ms25', 4), ('ms50', 5), ('ms100', 6), ('ms250', 7), ('ms500', 8), ('ms2500', 9), ('ms5000', 10), ('ms25000', 11)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'statusFeedback-r13', 'optional': True, 'type': 'CHOICE'}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'ul-LWA-DRB-ViaWLAN-r14', 'type': 'BOOLEAN'}, {'name': 'ul-LWA-DataSplitThreshold-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('b0', 0), ('b100', 1), ('b200', 2), ('b400', 3), ('b800', 4), ('b1600', 5), ('b3200', 6), ('b6400', 7), ('b12800', 8), ('b25600', 9), ('b51200', 10), ('b102400', 11), ('b204800', 12), ('b409600', 13), ('b819200', 14)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'ul-LWA-Config-r14', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'notUsed-r14', 'type': 'NULL'}, {'members': [{'default': 15, 'name': 'maxCID-r14', 'restricted-to': [(1, 16383)], 'type': 'INTEGER'}, {'members': [{'name': 'profile0x0006-r14', 'type': 'BOOLEAN'}], 'name': 'profiles-r14', 'type': 'SEQUENCE'}, None], 'name': 'rohc-r14', 'type': 'SEQUENCE'}], 'name': 'uplinkOnlyHeaderCompression-r14', 'optional': True, 'type': 'CHOICE'}]], 'type': 'SEQUENCE'}, 'PDCP-Parameters': {'members': [{'members': [{'name': 'profile0x0001', 'type': 'BOOLEAN'}, {'name': 'profile0x0002', 'type': 'BOOLEAN'}, {'name': 'profile0x0003', 'type': 'BOOLEAN'}, {'name': 'profile0x0004', 'type': 'BOOLEAN'}, {'name': 'profile0x0006', 'type': 'BOOLEAN'}, {'name': 'profile0x0101', 'type': 'BOOLEAN'}, {'name': 'profile0x0102', 'type': 'BOOLEAN'}, {'name': 'profile0x0103', 'type': 'BOOLEAN'}, {'name': 'profile0x0104', 'type': 'BOOLEAN'}], 'name': 'supportedROHC-Profiles', 'type': 'SEQUENCE'}, {'default': 'cs16', 'name': 'maxNumberROHC-ContextSessions', 'type': 'ENUMERATED', 'values': [('cs2', 0), ('cs4', 1), ('cs8', 2), ('cs12', 3), ('cs16', 4), ('cs24', 5), ('cs32', 6), ('cs48', 7), ('cs64', 8), ('cs128', 9), ('cs256', 10), ('cs512', 11), ('cs1024', 12), ('cs16384', 13), ('spare2', 14), ('spare1', 15)]}, None], 'type': 'SEQUENCE'}, 'PDCP-Parameters-v1130': {'members': [{'name': 'pdcp-SN-Extension-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'supportRohcContextContinue-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'PDCP-Parameters-v1310': {'members': [{'name': 'pdcp-SN-Extension-18bits-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'PDCP-Parameters-v1430': {'members': [{'members': [{'name': 'profile0x0006-r14', 'type': 'BOOLEAN'}], 'name': 'supportedUplinkOnlyROHC-Profiles-r14', 'type': 'SEQUENCE'}, {'default': 'cs16', 'name': 'maxNumberROHC-ContextSessions-r14', 'type': 'ENUMERATED', 'values': [('cs2', 0), ('cs4', 1), ('cs8', 2), ('cs12', 3), ('cs16', 4), ('cs24', 5), ('cs32', 6), ('cs48', 7), ('cs64', 8), ('cs128', 9), ('cs256', 10), ('cs512', 11), ('cs1024', 12), ('cs16384', 13), ('spare2', 14), ('spare1', 15)]}], 'type': 'SEQUENCE'}, 'PDSCH-ConfigCommon': {'members': [{'name': 'referenceSignalPower', 'restricted-to': [(-60, 50)], 'type': 'INTEGER'}, {'name': 'p-b', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PDSCH-ConfigCommon-v1310': {'members': [{'name': 'pdsch-maxNumRepetitionCEmodeA-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('r16', 0), ('r32', 1)]}, {'name': 'pdsch-maxNumRepetitionCEmodeB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('r192', 0), ('r256', 1), ('r384', 2), ('r512', 3), ('r768', 4), ('r1024', 5), ('r1536', 6), ('r2048', 7)]}], 'type': 'SEQUENCE'}, 'PDSCH-ConfigDedicated': {'members': [{'name': 'p-a', 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-4dot77', 1), ('dB-3', 2), ('dB-1dot77', 3), ('dB0', 4), ('dB1', 5), ('dB2', 6), ('dB3', 7)]}], 'type': 'SEQUENCE'}, 'PDSCH-ConfigDedicated-v1130': {'members': [{'name': 'dmrs-ConfigPDSCH-r11', 'optional': True, 'type': 'DMRS-Config-r11'}, {'name': 'qcl-Operation', 'optional': True, 'type': 'ENUMERATED', 'values': [('typeA', 0), ('typeB', 1)]}, {'name': 're-MappingQCLConfigToReleaseList-r11', 'optional': True, 'type': 'RE-MappingQCLConfigToReleaseList-r11'}, {'name': 're-MappingQCLConfigToAddModList-r11', 'optional': True, 'type': 'RE-MappingQCLConfigToAddModList-r11'}], 'type': 'SEQUENCE'}, 'PDSCH-ConfigDedicated-v1280': {'members': [{'name': 'tbsIndexAlt-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('a26', 0), ('a33', 1)]}], 'type': 'SEQUENCE'}, 'PDSCH-ConfigDedicated-v1310': {'members': [{'name': 'dmrs-ConfigPDSCH-v1310', 'optional': True, 'type': 'DMRS-Config-v1310'}], 'type': 'SEQUENCE'}, 'PDSCH-ConfigDedicated-v1430': {'members': [{'name': 'ce-PDSCH-MaxBandwidth-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('bw5', 0), ('bw20', 1)]}, {'name': 'ce-PDSCH-TenProcesses-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('on', 0)]}, {'name': 'ce-HARQ-AckBundling-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('on', 0)]}, {'name': 'ce-SchedulingEnhancement-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('range1', 0), ('range2', 1)]}, {'name': 'tbsIndexAlt2-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('b33', 0)]}], 'type': 'SEQUENCE'}, 'PDSCH-ConfigDedicatedSCell-v1430': {'members': [{'name': 'tbsIndexAlt2-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('b33', 0)]}], 'type': 'SEQUENCE'}, 'PDSCH-RE-MappingQCL-Config-r11': {'members': [{'name': 'pdsch-RE-MappingQCL-ConfigId-r11', 'type': 'PDSCH-RE-MappingQCL-ConfigId-r11'}, {'members': [{'name': 'crs-PortsCount-r11', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n4', 2), ('spare1', 3)]}, {'name': 'crs-FreqShift-r11', 'restricted-to': [(0, 5)], 'type': 'INTEGER'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'subframeConfigList', 'type': 'MBSFN-SubframeConfigList'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'mbsfn-SubframeConfigList-r11', 'optional': True, 'type': 'CHOICE'}, {'name': 'pdsch-Start-r11', 'type': 'ENUMERATED', 'values': [('reserved', 0), ('n1', 1), ('n2', 2), ('n3', 3), ('n4', 4), ('assigned', 5)]}], 'name': 'optionalSetOfFields-r11', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'csi-RS-ConfigZPId-r11', 'type': 'CSI-RS-ConfigZPId-r11'}, {'name': 'qcl-CSI-RS-ConfigNZPId-r11', 'optional': True, 'type': 'CSI-RS-ConfigNZPId-r11'}, None, [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'subframeConfigList-v1430', 'type': 'MBSFN-SubframeConfigList-v1430'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'mbsfn-SubframeConfigList-v1430', 'optional': True, 'type': 'CHOICE'}]], 'type': 'SEQUENCE'}, 'PDSCH-RE-MappingQCL-ConfigId-r11': {'restricted-to': [(1, 'maxRE-MapQCL-r11')], 'type': 'INTEGER'}, 'PHICH-Config': {'members': [{'name': 'phich-Duration', 'type': 'ENUMERATED', 'values': [('normal', 0), ('extended', 1)]}, {'name': 'phich-Resource', 'type': 'ENUMERATED', 'values': [('oneSixth', 0), ('half', 1), ('one', 2), ('two', 3)]}], 'type': 'SEQUENCE'}, 'PLMN-Identity': {'members': [{'name': 'mcc', 'optional': True, 'type': 'MCC'}, {'name': 'mnc', 'type': 'MNC'}], 'type': 'SEQUENCE'}, 'PLMN-IdentityInfo': {'members': [{'name': 'plmn-Identity', 'type': 'PLMN-Identity'}, {'name': 'cellReservedForOperatorUse', 'type': 'ENUMERATED', 'values': [('reserved', 0), ('notReserved', 1)]}], 'type': 'SEQUENCE'}, 'PLMN-IdentityInfo2-r12': {'members': [{'name': 'plmn-Index-r12', 'restricted-to': [(1, 'maxPLMN-r11')], 'type': 'INTEGER'}, {'name': 'plmnIdentity-r12', 'type': 'PLMN-Identity'}], 'type': 'CHOICE'}, 'PLMN-IdentityList': {'element': {'type': 'PLMN-IdentityInfo'}, 'size': [(1, 'maxPLMN-r11')], 'type': 'SEQUENCE ' 'OF'}, 'PLMN-IdentityList-MBMS-r14': {'element': {'type': 'PLMN-Identity'}, 'size': [(1, 'maxPLMN-r11')], 'type': 'SEQUENCE ' 'OF'}, 'PLMN-IdentityList2': {'element': {'type': 'PLMN-Identity'}, 'size': [(1, 5)], 'type': 'SEQUENCE ' 'OF'}, 'PLMN-IdentityList3-r11': {'element': {'type': 'PLMN-Identity'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'PLMN-IdentityList4-r12': {'element': {'type': 'PLMN-IdentityInfo2-r12'}, 'size': [(1, 'maxPLMN-r11')], 'type': 'SEQUENCE ' 'OF'}, 'PMCH-Config-r12': {'members': [{'name': 'sf-AllocEnd-r12', 'restricted-to': [(0, 1535)], 'type': 'INTEGER'}, {'members': [{'name': 'normal-r12', 'restricted-to': [(0, 28)], 'type': 'INTEGER'}, {'name': 'higerOrder-r12', 'restricted-to': [(0, 27)], 'type': 'INTEGER'}], 'name': 'dataMCS-r12', 'type': 'CHOICE'}, {'name': 'mch-SchedulingPeriod-r12', 'type': 'ENUMERATED', 'values': [('rf4', 0), ('rf8', 1), ('rf16', 2), ('rf32', 3), ('rf64', 4), ('rf128', 5), ('rf256', 6), ('rf512', 7), ('rf1024', 8)]}, None, [{'name': 'mch-SchedulingPeriod-v1430', 'optional': True, 'type': 'ENUMERATED', 'values': [('rf1', 0), ('rf2', 1)]}]], 'type': 'SEQUENCE'}, 'PMCH-Config-r9': {'members': [{'name': 'sf-AllocEnd-r9', 'restricted-to': [(0, 1535)], 'type': 'INTEGER'}, {'name': 'dataMCS-r9', 'restricted-to': [(0, 28)], 'type': 'INTEGER'}, {'name': 'mch-SchedulingPeriod-r9', 'type': 'ENUMERATED', 'values': [('rf8', 0), ('rf16', 1), ('rf32', 2), ('rf64', 3), ('rf128', 4), ('rf256', 5), ('rf512', 6), ('rf1024', 7)]}, None], 'type': 'SEQUENCE'}, 'PMCH-Info-r9': {'members': [{'name': 'pmch-Config-r9', 'type': 'PMCH-Config-r9'}, {'name': 'mbms-SessionInfoList-r9', 'type': 'MBMS-SessionInfoList-r9'}, None], 'type': 'SEQUENCE'}, 'PMCH-InfoExt-r12': {'members': [{'name': 'pmch-Config-r12', 'type': 'PMCH-Config-r12'}, {'name': 'mbms-SessionInfoList-r12', 'type': 'MBMS-SessionInfoList-r9'}, None], 'type': 'SEQUENCE'}, 'PMCH-InfoList-r9': {'element': {'type': 'PMCH-Info-r9'}, 'size': [(0, 'maxPMCH-PerMBSFN')], 'type': 'SEQUENCE ' 'OF'}, 'PMCH-InfoListExt-r12': {'element': {'type': 'PMCH-InfoExt-r12'}, 'size': [(0, 'maxPMCH-PerMBSFN')], 'type': 'SEQUENCE ' 'OF'}, 'PRACH-Config': {'members': [{'name': 'rootSequenceIndex', 'restricted-to': [(0, 837)], 'type': 'INTEGER'}, {'name': 'prach-ConfigInfo', 'optional': True, 'type': 'PRACH-ConfigInfo'}], 'type': 'SEQUENCE'}, 'PRACH-Config-v1310': {'members': [{'name': 'rsrp-ThresholdsPrachInfoList-r13', 'optional': True, 'type': 'RSRP-ThresholdsPrachInfoList-r13'}, {'members': [{'name': 'fdd-r13', 'type': 'ENUMERATED', 'values': [('v1', 0), ('v1dot5', 1), ('v2', 2), ('v2dot5', 3), ('v4', 4), ('v5', 5), ('v8', 6), ('v10', 7)]}, {'name': 'tdd-r13', 'type': 'ENUMERATED', 'values': [('v1', 0), ('v2', 1), ('v4', 2), ('v5', 3), ('v8', 4), ('v10', 5), ('v20', 6), ('spare', 7)]}], 'name': 'mpdcch-startSF-CSS-RA-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'prach-HoppingOffset-r13', 'optional': True, 'restricted-to': [(0, 94)], 'type': 'INTEGER'}, {'name': 'prach-ParametersListCE-r13', 'optional': True, 'type': 'PRACH-ParametersListCE-r13'}, {'name': 'initial-CE-level-r13', 'optional': True, 'restricted-to': [(0, 3)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PRACH-Config-v1430': {'members': [{'name': 'rootSequenceIndexHighSpeed-r14', 'restricted-to': [(0, 837)], 'type': 'INTEGER'}, {'name': 'zeroCorrelationZoneConfigHighSpeed-r14', 'restricted-to': [(0, 12)], 'type': 'INTEGER'}, {'name': 'prach-ConfigIndexHighSpeed-r14', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'prach-FreqOffsetHighSpeed-r14', 'restricted-to': [(0, 94)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PRACH-ConfigInfo': {'members': [{'name': 'prach-ConfigIndex', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'highSpeedFlag', 'type': 'BOOLEAN'}, {'name': 'zeroCorrelationZoneConfig', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'prach-FreqOffset', 'restricted-to': [(0, 94)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PRACH-ConfigSCell-r10': {'members': [{'name': 'prach-ConfigIndex-r10', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PRACH-ConfigSIB': {'members': [{'name': 'rootSequenceIndex', 'restricted-to': [(0, 837)], 'type': 'INTEGER'}, {'name': 'prach-ConfigInfo', 'type': 'PRACH-ConfigInfo'}], 'type': 'SEQUENCE'}, 'PRACH-ConfigSIB-v1310': {'members': [{'name': 'rsrp-ThresholdsPrachInfoList-r13', 'type': 'RSRP-ThresholdsPrachInfoList-r13'}, {'members': [{'name': 'fdd-r13', 'type': 'ENUMERATED', 'values': [('v1', 0), ('v1dot5', 1), ('v2', 2), ('v2dot5', 3), ('v4', 4), ('v5', 5), ('v8', 6), ('v10', 7)]}, {'name': 'tdd-r13', 'type': 'ENUMERATED', 'values': [('v1', 0), ('v2', 1), ('v4', 2), ('v5', 3), ('v8', 4), ('v10', 5), ('v20', 6), ('spare', 7)]}], 'name': 'mpdcch-startSF-CSS-RA-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'prach-HoppingOffset-r13', 'optional': True, 'restricted-to': [(0, 94)], 'type': 'INTEGER'}, {'name': 'prach-ParametersListCE-r13', 'type': 'PRACH-ParametersListCE-r13'}], 'type': 'SEQUENCE'}, 'PRACH-ParametersCE-r13': {'members': [{'name': 'prach-ConfigIndex-r13', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'prach-FreqOffset-r13', 'restricted-to': [(0, 94)], 'type': 'INTEGER'}, {'name': 'prach-StartingSubframe-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('sf2', 0), ('sf4', 1), ('sf8', 2), ('sf16', 3), ('sf32', 4), ('sf64', 5), ('sf128', 6), ('sf256', 7)]}, {'name': 'maxNumPreambleAttemptCE-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n3', 0), ('n4', 1), ('n5', 2), ('n6', 3), ('n7', 4), ('n8', 5), ('n10', 6)]}, {'name': 'numRepetitionPerPreambleAttempt-r13', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n4', 2), ('n8', 3), ('n16', 4), ('n32', 5), ('n64', 6), ('n128', 7)]}, {'element': {'restricted-to': [(1, 'maxAvailNarrowBands-r13')], 'type': 'INTEGER'}, 'name': 'mpdcch-NarrowbandsToMonitor-r13', 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'mpdcch-NumRepetition-RA-r13', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7), ('r256', 8)]}, {'name': 'prach-HoppingConfig-r13', 'type': 'ENUMERATED', 'values': [('on', 0), ('off', 1)]}], 'type': 'SEQUENCE'}, 'PRACH-ParametersListCE-r13': {'element': {'type': 'PRACH-ParametersCE-r13'}, 'size': [(1, 'maxCE-Level-r13')], 'type': 'SEQUENCE ' 'OF'}, 'PSCellToAddMod-r12': {'members': [{'name': 'sCellIndex-r12', 'type': 'SCellIndex-r10'}, {'members': [{'name': 'physCellId-r12', 'type': 'PhysCellId'}, {'name': 'dl-CarrierFreq-r12', 'type': 'ARFCN-ValueEUTRA-r9'}], 'name': 'cellIdentification-r12', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'radioResourceConfigCommonPSCell-r12', 'optional': True, 'type': 'RadioResourceConfigCommonPSCell-r12'}, {'name': 'radioResourceConfigDedicatedPSCell-r12', 'optional': True, 'type': 'RadioResourceConfigDedicatedPSCell-r12'}, None, [{'name': 'antennaInfoDedicatedPSCell-v1280', 'optional': True, 'type': 'AntennaInfoDedicated-v10i0'}], [{'name': 'sCellIndex-r13', 'optional': True, 'type': 'SCellIndex-r13'}], [{'name': 'radioResourceConfigDedicatedPSCell-v1370', 'optional': True, 'type': 'RadioResourceConfigDedicatedPSCell-v1370'}]], 'type': 'SEQUENCE'}, 'PSCellToAddMod-v12f0': {'members': [{'name': 'radioResourceConfigCommonPSCell-r12', 'optional': True, 'type': 'RadioResourceConfigCommonPSCell-v12f0'}], 'type': 'SEQUENCE'}, 'PSCellToAddMod-v1440': {'members': [{'name': 'radioResourceConfigCommonPSCell-r14', 'optional': True, 'type': 'RadioResourceConfigCommonPSCell-v1440'}], 'type': 'SEQUENCE'}, 'PUCCH-ConfigCommon': {'members': [{'name': 'deltaPUCCH-Shift', 'type': 'ENUMERATED', 'values': [('ds1', 0), ('ds2', 1), ('ds3', 2)]}, {'name': 'nRB-CQI', 'restricted-to': [(0, 98)], 'type': 'INTEGER'}, {'name': 'nCS-AN', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'n1PUCCH-AN', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PUCCH-ConfigCommon-v1310': {'members': [{'name': 'n1PUCCH-AN-InfoList-r13', 'optional': True, 'type': 'N1PUCCH-AN-InfoList-r13'}, {'name': 'pucch-NumRepetitionCE-Msg4-Level0-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n4', 2), ('n8', 3)]}, {'name': 'pucch-NumRepetitionCE-Msg4-Level1-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n4', 2), ('n8', 3)]}, {'name': 'pucch-NumRepetitionCE-Msg4-Level2-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1), ('n16', 2), ('n32', 3)]}, {'name': 'pucch-NumRepetitionCE-Msg4-Level3-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1), ('n16', 2), ('n32', 3)]}], 'type': 'SEQUENCE'}, 'PUCCH-ConfigCommon-v1430': {'members': [{'name': 'pucch-NumRepetitionCE-Msg4-Level3-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n64', 0), ('n128', 1)]}], 'type': 'SEQUENCE'}, 'PUCCH-ConfigDedicated': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'repetitionFactor', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1), ('n6', 2), ('spare1', 3)]}, {'name': 'n1PUCCH-AN-Rep', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'ackNackRepetition', 'type': 'CHOICE'}, {'name': 'tdd-AckNackFeedbackMode', 'optional': True, 'type': 'ENUMERATED', 'values': [('bundling', 0), ('multiplexing', 1)]}], 'type': 'SEQUENCE'}, 'PUCCH-ConfigDedicated-r13': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'repetitionFactor-r13', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1), ('n6', 2), ('spare1', 3)]}, {'name': 'n1PUCCH-AN-Rep-r13', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'ackNackRepetition-r13', 'type': 'CHOICE'}, {'name': 'tdd-AckNackFeedbackMode-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('bundling', 0), ('multiplexing', 1)]}, {'members': [{'members': [{'element': {'restricted-to': [(0, 549)], 'type': 'INTEGER'}, 'name': 'n3PUCCH-AN-List-r13', 'optional': True, 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'element': {'restricted-to': [(0, 549)], 'type': 'INTEGER'}, 'name': 'n3PUCCH-AN-ListP1-r13', 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'twoAntennaPortActivatedPUCCH-Format3-r13', 'optional': True, 'type': 'CHOICE'}], 'name': 'format3-r13', 'type': 'SEQUENCE'}, {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'element': {'type': 'N1PUCCH-AN-CS-r10'}, 'name': 'n1PUCCH-AN-CS-List-r13', 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, 'name': 'n1PUCCH-AN-CS-ListP1-r13', 'size': [(2, 4)], 'type': 'SEQUENCE ' 'OF'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'n1PUCCH-AN-CS-r13', 'optional': True, 'type': 'CHOICE'}], 'name': 'channelSelection-r13', 'type': 'SEQUENCE'}, {'members': [{'element': {'type': 'Format4-resource-r13'}, 'name': 'format4-resourceConfiguration-r13', 'size': [4], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'Format4-resource-r13'}, 'name': 'format4-MultiCSI-resourceConfiguration-r13', 'optional': True, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}], 'name': 'format4-r13', 'type': 'SEQUENCE'}, {'members': [{'element': {'type': 'Format5-resource-r13'}, 'name': 'format5-resourceConfiguration-r13', 'size': [4], 'type': 'SEQUENCE ' 'OF'}, {'name': 'format5-MultiCSI-resourceConfiguration-r13', 'optional': True, 'type': 'Format5-resource-r13'}], 'name': 'format5-r13', 'type': 'SEQUENCE'}], 'name': 'pucch-Format-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'twoAntennaPortActivatedPUCCH-Format1a1b-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'simultaneousPUCCH-PUSCH-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'n1PUCCH-AN-RepP1-r13', 'optional': True, 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'nPUCCH-Identity-r13', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'n1PUCCH-AN-r13', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'nPUCCH-Param-r13', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'nkaPUCCH-AN-r13', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'nkaPUCCH-Param-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'spatialBundlingPUCCH-r13', 'type': 'BOOLEAN'}, {'name': 'spatialBundlingPUSCH-r13', 'type': 'BOOLEAN'}, {'name': 'harq-TimingTDD-r13', 'type': 'BOOLEAN'}, {'name': 'codebooksizeDetermination-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('dai', 0), ('cc', 1)]}, {'name': 'maximumPayloadCoderate-r13', 'optional': True, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'pucch-NumRepetitionCE-format1-r13', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3)]}, {'name': 'pucch-NumRepetitionCE-format2-r13', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3)]}], 'name': 'modeA', 'type': 'SEQUENCE'}, {'members': [{'name': 'pucch-NumRepetitionCE-format1-r13', 'type': 'ENUMERATED', 'values': [('r4', 0), ('r8', 1), ('r16', 2), ('r32', 3)]}, {'name': 'pucch-NumRepetitionCE-format2-r13', 'type': 'ENUMERATED', 'values': [('r4', 0), ('r8', 1), ('r16', 2), ('r32', 3)]}], 'name': 'modeB', 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'CHOICE'}], 'name': 'pucch-NumRepetitionCE-r13', 'optional': True, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'PUCCH-ConfigDedicated-v1020': {'members': [{'members': [{'name': 'format3-r10', 'type': 'PUCCH-Format3-Conf-r13'}, {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'element': {'type': 'N1PUCCH-AN-CS-r10'}, 'name': 'n1PUCCH-AN-CS-List-r10', 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'n1PUCCH-AN-CS-r10', 'optional': True, 'type': 'CHOICE'}], 'name': 'channelSelection-r10', 'type': 'SEQUENCE'}], 'name': 'pucch-Format-r10', 'optional': True, 'type': 'CHOICE'}, {'name': 'twoAntennaPortActivatedPUCCH-Format1a1b-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'simultaneousPUCCH-PUSCH-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'n1PUCCH-AN-RepP1-r10', 'optional': True, 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PUCCH-ConfigDedicated-v1130': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'element': {'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, 'name': 'n1PUCCH-AN-CS-ListP1-r11', 'size': [(2, 4)], 'type': 'SEQUENCE ' 'OF'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'n1PUCCH-AN-CS-v1130', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'nPUCCH-Identity-r11', 'restricted-to': [(0, 503)], 'type': 'INTEGER'}, {'name': 'n1PUCCH-AN-r11', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'nPUCCH-Param-r11', 'optional': True, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'PUCCH-ConfigDedicated-v1250': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'nkaPUCCH-AN-r12', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'nkaPUCCH-Param-r12', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'PUCCH-ConfigDedicated-v1370': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'PUCCH-Format3-Conf-r13'}], 'name': 'pucch-Format-v1370', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'PUCCH-ConfigDedicated-v1430': {'members': [{'name': 'pucch-NumRepetitionCE-format1-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('r64', 0), ('r128', 1)]}], 'type': 'SEQUENCE'}, 'PUCCH-Format3-Conf-r13': {'members': [{'element': {'restricted-to': [(0, 549)], 'type': 'INTEGER'}, 'name': 'n3PUCCH-AN-List-r13', 'optional': True, 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'element': {'restricted-to': [(0, 549)], 'type': 'INTEGER'}, 'name': 'n3PUCCH-AN-ListP1-r13', 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'twoAntennaPortActivatedPUCCH-Format3-r13', 'optional': True, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigCommon': {'members': [{'members': [{'name': 'n-SB', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}, {'name': 'hoppingMode', 'type': 'ENUMERATED', 'values': [('interSubFrame', 0), ('intraAndInterSubFrame', 1)]}, {'name': 'pusch-HoppingOffset', 'restricted-to': [(0, 98)], 'type': 'INTEGER'}, {'name': 'enable64QAM', 'type': 'BOOLEAN'}], 'name': 'pusch-ConfigBasic', 'type': 'SEQUENCE'}, {'name': 'ul-ReferenceSignalsPUSCH', 'type': 'UL-ReferenceSignalsPUSCH'}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigCommon-v1270': {'members': [{'name': 'enable64QAM-v1270', 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigCommon-v1310': {'members': [{'name': 'pusch-maxNumRepetitionCEmodeA-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('r8', 0), ('r16', 1), ('r32', 2)]}, {'name': 'pusch-maxNumRepetitionCEmodeB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('r192', 0), ('r256', 1), ('r384', 2), ('r512', 3), ('r768', 4), ('r1024', 5), ('r1536', 6), ('r2048', 7)]}, {'name': 'pusch-HoppingOffset-v1310', 'optional': True, 'restricted-to': [(1, 'maxAvailNarrowBands-r13')], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigDedicated': {'members': [{'name': 'betaOffset-ACK-Index', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-RI-Index', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-CQI-Index', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigDedicated-r13': {'members': [{'name': 'betaOffset-ACK-Index-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset2-ACK-Index-r13', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-RI-Index-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-CQI-Index-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'members': [{'name': 'betaOffset-ACK-Index-MC-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset2-ACK-Index-MC-r13', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-RI-Index-MC-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-CQI-Index-MC-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'name': 'betaOffsetMC-r13', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'groupHoppingDisabled-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'dmrs-WithOCC-Activated-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'nPUSCH-Identity-r13', 'restricted-to': [(0, 509)], 'type': 'INTEGER'}, {'name': 'nDMRS-CSH-Identity-r13', 'restricted-to': [(0, 509)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'pusch-DMRS-r11', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'betaOffset-ACK-Index-SubframeSet2-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset2-ACK-Index-SubframeSet2-r13', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-RI-Index-SubframeSet2-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-CQI-Index-SubframeSet2-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'members': [{'name': 'betaOffset-ACK-Index-MC-SubframeSet2-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset2-ACK-Index-MC-SubframeSet2-r13', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-RI-Index-MC-SubframeSet2-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-CQI-Index-MC-SubframeSet2-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'name': 'betaOffsetMC-r12', 'optional': True, 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'uciOnPUSCH', 'optional': True, 'type': 'CHOICE'}, {'name': 'pusch-HoppingConfig-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('on', 0)]}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigDedicated-v1020': {'members': [{'members': [{'name': 'betaOffset-ACK-Index-MC-r10', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-RI-Index-MC-r10', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-CQI-Index-MC-r10', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'name': 'betaOffsetMC-r10', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'groupHoppingDisabled-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'dmrs-WithOCC-Activated-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigDedicated-v1130': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'nPUSCH-Identity-r11', 'restricted-to': [(0, 509)], 'type': 'INTEGER'}, {'name': 'nDMRS-CSH-Identity-r11', 'restricted-to': [(0, 509)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'pusch-DMRS-r11', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigDedicated-v1250': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'betaOffset-ACK-Index-SubframeSet2-r12', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-RI-Index-SubframeSet2-r12', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-CQI-Index-SubframeSet2-r12', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'members': [{'name': 'betaOffset-ACK-Index-MC-SubframeSet2-r12', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-RI-Index-MC-SubframeSet2-r12', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-CQI-Index-MC-SubframeSet2-r12', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'name': 'betaOffsetMC-r12', 'optional': True, 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'uciOnPUSCH', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigDedicated-v1430': {'members': [{'name': 'ce-PUSCH-NB-MaxTBS-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('on', 0)]}, {'name': 'ce-PUSCH-MaxBandwidth-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('bw5', 0)]}, {'name': 'tdd-PUSCH-UpPTS-r14', 'optional': True, 'type': 'TDD-PUSCH-UpPTS-r14'}, {'name': 'ul-DMRS-IFDMA-r14', 'type': 'BOOLEAN'}, {'name': 'enable256QAM-r14', 'optional': True, 'type': 'Enable256QAM-r14'}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigDedicatedSCell-r10': {'members': [{'name': 'groupHoppingDisabled-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'dmrs-WithOCC-Activated-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigDedicatedSCell-v1430': {'members': [{'name': 'enable256QAM-r14', 'optional': True, 'type': 'Enable256QAM-r14'}], 'type': 'SEQUENCE'}, 'PUSCH-EnhancementsConfig-r14': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'pusch-HoppingOffsetPUSCH-Enh-r14', 'optional': True, 'restricted-to': [(1, 100)], 'type': 'INTEGER'}, {'members': [{'name': 'interval-FDD-PUSCH-Enh-r14', 'type': 'ENUMERATED', 'values': [('int1', 0), ('int2', 1), ('int4', 2), ('int8', 3)]}, {'name': 'interval-TDD-PUSCH-Enh-r14', 'type': 'ENUMERATED', 'values': [('int1', 0), ('int5', 1), ('int10', 2), ('int20', 3)]}], 'name': 'interval-ULHoppingPUSCH-Enh-r14', 'optional': True, 'type': 'CHOICE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'Paging': {'members': [{'name': 'pagingRecordList', 'optional': True, 'type': 'PagingRecordList'}, {'name': 'systemInfoModification', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'etws-Indication', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'Paging-v890-IEs'}], 'type': 'SEQUENCE'}, 'Paging-v1130-IEs': {'members': [{'name': 'eab-ParamModification-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'Paging-v1310-IEs'}], 'type': 'SEQUENCE'}, 'Paging-v1310-IEs': {'members': [{'name': 'redistributionIndication-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'systemInfoModification-eDRX-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'Paging-v890-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'Paging-v920-IEs'}], 'type': 'SEQUENCE'}, 'Paging-v920-IEs': {'members': [{'name': 'cmas-Indication-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'Paging-v1130-IEs'}], 'type': 'SEQUENCE'}, 'PagingRecord': {'members': [{'name': 'ue-Identity', 'type': 'PagingUE-Identity'}, {'name': 'cn-Domain', 'type': 'ENUMERATED', 'values': [('ps', 0), ('cs', 1)]}, None], 'type': 'SEQUENCE'}, 'PagingRecordList': {'element': {'type': 'PagingRecord'}, 'size': [(1, 'maxPageRec')], 'type': 'SEQUENCE ' 'OF'}, 'PagingUE-Identity': {'members': [{'name': 's-TMSI', 'type': 'S-TMSI'}, {'name': 'imsi', 'type': 'IMSI'}, None], 'type': 'CHOICE'}, 'ParametersCDMA2000-r11': {'members': [{'members': [{'name': 'explicitValue', 'type': 'SystemTimeInfoCDMA2000'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'systemTimeInfo-r11', 'optional': True, 'type': 'CHOICE'}, {'name': 'searchWindowSize-r11', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'members': [{'name': 'preRegistrationInfoHRPD-r11', 'type': 'PreRegistrationInfoHRPD'}, {'name': 'cellReselectionParametersHRPD-r11', 'optional': True, 'type': 'CellReselectionParametersCDMA2000-r11'}], 'name': 'parametersHRPD-r11', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'csfb-RegistrationParam1XRTT-r11', 'optional': True, 'type': 'CSFB-RegistrationParam1XRTT'}, {'name': 'csfb-RegistrationParam1XRTT-Ext-r11', 'optional': True, 'type': 'CSFB-RegistrationParam1XRTT-v920'}, {'name': 'longCodeState1XRTT-r11', 'optional': True, 'size': [42], 'type': 'BIT ' 'STRING'}, {'name': 'cellReselectionParameters1XRTT-r11', 'optional': True, 'type': 'CellReselectionParametersCDMA2000-r11'}, {'name': 'ac-BarringConfig1XRTT-r11', 'optional': True, 'type': 'AC-BarringConfig1XRTT-r9'}, {'name': 'csfb-SupportForDualRxUEs-r11', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'csfb-DualRxTxSupport-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'name': 'parameters1XRTT-r11', 'optional': True, 'type': 'SEQUENCE'}, None], 'type': 'SEQUENCE'}, 'PerCC-GapIndication-r14': {'members': [{'name': 'servCellId-r14', 'type': 'ServCellIndex-r13'}, {'name': 'gapIndication-r14', 'type': 'ENUMERATED', 'values': [('gap', 0), ('ncsg', 1), ('nogap-noNcsg', 2)]}], 'type': 'SEQUENCE'}, 'PerCC-GapIndicationList-r14': {'element': {'type': 'PerCC-GapIndication-r14'}, 'size': [(1, 'maxServCell-r13')], 'type': 'SEQUENCE ' 'OF'}, 'PeriodicBSR-Timer-r12': {'type': 'ENUMERATED', 'values': [('sf5', 0), ('sf10', 1), ('sf16', 2), ('sf20', 3), ('sf32', 4), ('sf40', 5), ('sf64', 6), ('sf80', 7), ('sf128', 8), ('sf160', 9), ('sf320', 10), ('sf640', 11), ('sf1280', 12), ('sf2560', 13), ('infinity', 14), ('spare1', 15)]}, 'PhyLayerParameters': {'members': [{'name': 'ue-TxAntennaSelectionSupported', 'type': 'BOOLEAN'}, {'name': 'ue-SpecificRefSigsSupported', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-v1020': {'members': [{'name': 'twoAntennaPortsForPUCCH-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'tm9-With-8Tx-FDD-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'pmi-Disabling-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'crossCarrierScheduling-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'simultaneousPUCCH-PUSCH-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'multiClusterPUSCH-WithinCC-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'nonContiguousUL-RA-WithinCC-List-r10', 'optional': True, 'type': 'NonContiguousUL-RA-WithinCC-List-r10'}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-v1130': {'members': [{'name': 'crs-InterfHandl-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ePDCCH-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'multiACK-CSI-Reporting-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ss-CCH-InterfHandl-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'tdd-SpecialSubframe-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'txDiv-PUCCH1b-ChSelect-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ul-CoMP-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-v1170': {'members': [{'name': 'interBandTDD-CA-WithDifferentConfig-r11', 'optional': True, 'size': [2], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-v1250': {'members': [{'name': 'e-HARQ-Pattern-FDD-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'enhanced-4TxCodebook-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'tdd-FDD-CA-PCellDuplex-r12', 'optional': True, 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'phy-TDD-ReConfig-TDD-PCell-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'phy-TDD-ReConfig-FDD-PCell-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'pusch-FeedbackMode-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'pusch-SRS-PowerControl-SubframeSet-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'csi-SubframeSet-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'noResourceRestrictionForTTIBundling-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'discoverySignalsInDeactSCell-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'naics-Capability-List-r12', 'optional': True, 'type': 'NAICS-Capability-List-r12'}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-v1280': {'members': [{'name': 'alternativeTBS-Indices-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-v1310': {'members': [{'name': 'aperiodicCSI-Reporting-r13', 'optional': True, 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'codebook-HARQ-ACK-r13', 'optional': True, 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'crossCarrierScheduling-B5C-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'fdd-HARQ-TimingTDD-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'maxNumberUpdatedCSI-Proc-r13', 'optional': True, 'restricted-to': [(5, 32)], 'type': 'INTEGER'}, {'name': 'pucch-Format4-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'pucch-Format5-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'pucch-SCell-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'spatialBundling-HARQ-ACK-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'members': [{'name': 'maxNumberDecoding-r13', 'optional': True, 'restricted-to': [(1, 32)], 'type': 'INTEGER'}, {'name': 'pdcch-CandidateReductions-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'skipMonitoringDCI-Format0-1A-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'name': 'supportedBlindDecoding-r13', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'uci-PUSCH-Ext-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'crs-InterfMitigationTM10-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'pdsch-CollisionHandling-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-v1320': {'members': [{'name': 'mimo-UE-Parameters-r13', 'optional': True, 'type': 'MIMO-UE-Parameters-r13'}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-v1330': {'members': [{'name': 'cch-InterfMitigation-RefRecTypeA-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'cch-InterfMitigation-RefRecTypeB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'cch-InterfMitigation-MaxNumCCs-r13', 'optional': True, 'restricted-to': [(1, 'maxServCell-r13')], 'type': 'INTEGER'}, {'name': 'crs-InterfMitigationTM1toTM9-r13', 'optional': True, 'restricted-to': [(1, 'maxServCell-r13')], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-v1430': {'members': [{'name': 'ce-PUSCH-NB-MaxTBS-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ce-PDSCH-PUSCH-MaxBandwidth-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('bw5', 0), ('bw20', 1)]}, {'name': 'ce-HARQ-AckBundling-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ce-PDSCH-TenProcesses-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ce-RetuningSymbols-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n0', 0), ('n1', 1)]}, {'name': 'ce-PDSCH-PUSCH-Enhancement-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ce-SchedulingEnhancement-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ce-SRS-Enhancement-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ce-PUCCH-Enhancement-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ce-ClosedLoopTxAntennaSelection-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'tdd-SpecialSubframe-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'tdd-TTI-Bundling-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'dmrs-LessUpPTS-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'mimo-UE-Parameters-v1430', 'optional': True, 'type': 'MIMO-UE-Parameters-v1430'}, {'name': 'alternativeTBS-Index-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'feMBMS-Unicast-Parameters-r14', 'optional': True, 'type': 'FeMBMS-Unicast-Parameters-r14'}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-v920': {'members': [{'name': 'enhancedDualLayerFDD-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'enhancedDualLayerTDD-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-v9d0': {'members': [{'name': 'tm5-FDD-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'tm5-TDD-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'PhysCellId': {'restricted-to': [(0, 503)], 'type': 'INTEGER'}, 'PhysCellIdCDMA2000': {'restricted-to': [(0, 'maxPNOffset')], 'type': 'INTEGER'}, 'PhysCellIdGERAN': {'members': [{'name': 'networkColourCode', 'size': [3], 'type': 'BIT ' 'STRING'}, {'name': 'baseStationColourCode', 'size': [3], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'PhysCellIdList-r13': {'element': {'type': 'PhysCellId'}, 'size': [(1, 'maxSL-DiscCells-r13')], 'type': 'SEQUENCE ' 'OF'}, 'PhysCellIdListCDMA2000': {'element': {'type': 'PhysCellIdCDMA2000'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'PhysCellIdListCDMA2000-v920': {'element': {'type': 'PhysCellIdCDMA2000'}, 'size': [(0, 24)], 'type': 'SEQUENCE ' 'OF'}, 'PhysCellIdRange': {'members': [{'name': 'start', 'type': 'PhysCellId'}, {'name': 'range', 'optional': True, 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1), ('n12', 2), ('n16', 3), ('n24', 4), ('n32', 5), ('n48', 6), ('n64', 7), ('n84', 8), ('n96', 9), ('n128', 10), ('n168', 11), ('n252', 12), ('n504', 13), ('spare2', 14), ('spare1', 15)]}], 'type': 'SEQUENCE'}, 'PhysCellIdRangeUTRA-FDD-r9': {'members': [{'name': 'start-r9', 'type': 'PhysCellIdUTRA-FDD'}, {'name': 'range-r9', 'optional': True, 'restricted-to': [(2, 512)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PhysCellIdRangeUTRA-FDDList-r9': {'element': {'type': 'PhysCellIdRangeUTRA-FDD-r9'}, 'size': [(1, 'maxPhysCellIdRange-r9')], 'type': 'SEQUENCE ' 'OF'}, 'PhysCellIdUTRA-FDD': {'restricted-to': [(0, 511)], 'type': 'INTEGER'}, 'PhysCellIdUTRA-TDD': {'restricted-to': [(0, 127)], 'type': 'INTEGER'}, 'PhysicalConfigDedicated': {'members': [{'name': 'pdsch-ConfigDedicated', 'optional': True, 'type': 'PDSCH-ConfigDedicated'}, {'name': 'pucch-ConfigDedicated', 'optional': True, 'type': 'PUCCH-ConfigDedicated'}, {'name': 'pusch-ConfigDedicated', 'optional': True, 'type': 'PUSCH-ConfigDedicated'}, {'name': 'uplinkPowerControlDedicated', 'optional': True, 'type': 'UplinkPowerControlDedicated'}, {'name': 'tpc-PDCCH-ConfigPUCCH', 'optional': True, 'type': 'TPC-PDCCH-Config'}, {'name': 'tpc-PDCCH-ConfigPUSCH', 'optional': True, 'type': 'TPC-PDCCH-Config'}, {'name': 'cqi-ReportConfig', 'optional': True, 'type': 'CQI-ReportConfig'}, {'name': 'soundingRS-UL-ConfigDedicated', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicated'}, {'members': [{'name': 'explicitValue', 'type': 'AntennaInfoDedicated'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'antennaInfo', 'optional': True, 'type': 'CHOICE'}, {'name': 'schedulingRequestConfig', 'optional': True, 'type': 'SchedulingRequestConfig'}, None, [{'name': 'cqi-ReportConfig-v920', 'optional': True, 'type': 'CQI-ReportConfig-v920'}, {'name': 'antennaInfo-v920', 'optional': True, 'type': 'AntennaInfoDedicated-v920'}], [{'members': [{'name': 'explicitValue-r10', 'type': 'AntennaInfoDedicated-r10'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'antennaInfo-r10', 'optional': True, 'type': 'CHOICE'}, {'name': 'antennaInfoUL-r10', 'optional': True, 'type': 'AntennaInfoUL-r10'}, {'name': 'cif-Presence-r10', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'cqi-ReportConfig-r10', 'optional': True, 'type': 'CQI-ReportConfig-r10'}, {'name': 'csi-RS-Config-r10', 'optional': True, 'type': 'CSI-RS-Config-r10'}, {'name': 'pucch-ConfigDedicated-v1020', 'optional': True, 'type': 'PUCCH-ConfigDedicated-v1020'}, {'name': 'pusch-ConfigDedicated-v1020', 'optional': True, 'type': 'PUSCH-ConfigDedicated-v1020'}, {'name': 'schedulingRequestConfig-v1020', 'optional': True, 'type': 'SchedulingRequestConfig-v1020'}, {'name': 'soundingRS-UL-ConfigDedicated-v1020', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicated-v1020'}, {'name': 'soundingRS-UL-ConfigDedicatedAperiodic-r10', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicatedAperiodic-r10'}, {'name': 'uplinkPowerControlDedicated-v1020', 'optional': True, 'type': 'UplinkPowerControlDedicated-v1020'}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'additionalSpectrumEmissionPCell-r10', 'type': 'AdditionalSpectrumEmission'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'additionalSpectrumEmissionCA-r10', 'optional': True, 'type': 'CHOICE'}], [{'name': 'csi-RS-ConfigNZPToReleaseList-r11', 'optional': True, 'type': 'CSI-RS-ConfigNZPToReleaseList-r11'}, {'name': 'csi-RS-ConfigNZPToAddModList-r11', 'optional': True, 'type': 'CSI-RS-ConfigNZPToAddModList-r11'}, {'name': 'csi-RS-ConfigZPToReleaseList-r11', 'optional': True, 'type': 'CSI-RS-ConfigZPToReleaseList-r11'}, {'name': 'csi-RS-ConfigZPToAddModList-r11', 'optional': True, 'type': 'CSI-RS-ConfigZPToAddModList-r11'}, {'name': 'epdcch-Config-r11', 'optional': True, 'type': 'EPDCCH-Config-r11'}, {'name': 'pdsch-ConfigDedicated-v1130', 'optional': True, 'type': 'PDSCH-ConfigDedicated-v1130'}, {'name': 'cqi-ReportConfig-v1130', 'optional': True, 'type': 'CQI-ReportConfig-v1130'}, {'name': 'pucch-ConfigDedicated-v1130', 'optional': True, 'type': 'PUCCH-ConfigDedicated-v1130'}, {'name': 'pusch-ConfigDedicated-v1130', 'optional': True, 'type': 'PUSCH-ConfigDedicated-v1130'}, {'name': 'uplinkPowerControlDedicated-v1130', 'optional': True, 'type': 'UplinkPowerControlDedicated-v1130'}], [{'name': 'antennaInfo-v1250', 'optional': True, 'type': 'AntennaInfoDedicated-v1250'}, {'name': 'eimta-MainConfig-r12', 'optional': True, 'type': 'EIMTA-MainConfig-r12'}, {'name': 'eimta-MainConfigPCell-r12', 'optional': True, 'type': 'EIMTA-MainConfigServCell-r12'}, {'name': 'pucch-ConfigDedicated-v1250', 'optional': True, 'type': 'PUCCH-ConfigDedicated-v1250'}, {'name': 'cqi-ReportConfigPCell-v1250', 'optional': True, 'type': 'CQI-ReportConfig-v1250'}, {'name': 'uplinkPowerControlDedicated-v1250', 'optional': True, 'type': 'UplinkPowerControlDedicated-v1250'}, {'name': 'pusch-ConfigDedicated-v1250', 'optional': True, 'type': 'PUSCH-ConfigDedicated-v1250'}, {'name': 'csi-RS-Config-v1250', 'optional': True, 'type': 'CSI-RS-Config-v1250'}], [{'name': 'pdsch-ConfigDedicated-v1280', 'optional': True, 'type': 'PDSCH-ConfigDedicated-v1280'}], [{'name': 'pdsch-ConfigDedicated-v1310', 'optional': True, 'type': 'PDSCH-ConfigDedicated-v1310'}, {'name': 'pucch-ConfigDedicated-r13', 'optional': True, 'type': 'PUCCH-ConfigDedicated-r13'}, {'name': 'pusch-ConfigDedicated-r13', 'optional': True, 'type': 'PUSCH-ConfigDedicated-r13'}, {'name': 'pdcch-CandidateReductions-r13', 'optional': True, 'type': 'PDCCH-CandidateReductions-r13'}, {'name': 'cqi-ReportConfig-v1310', 'optional': True, 'type': 'CQI-ReportConfig-v1310'}, {'name': 'soundingRS-UL-ConfigDedicated-v1310', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicated-v1310'}, {'name': 'soundingRS-UL-ConfigDedicatedUpPTsExt-r13', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicatedUpPTsExt-r13'}, {'name': 'soundingRS-UL-ConfigDedicatedAperiodic-v1310', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicatedAperiodic-v1310'}, {'name': 'soundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13'}, {'name': 'csi-RS-Config-v1310', 'optional': True, 'type': 'CSI-RS-Config-v1310'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'ENUMERATED', 'values': [('ce-ModeA', 0), ('ce-ModeB', 1)]}], 'name': 'ce-Mode-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'csi-RS-ConfigNZPToAddModListExt-r13', 'optional': True, 'type': 'CSI-RS-ConfigNZPToAddModListExt-r13'}, {'name': 'csi-RS-ConfigNZPToReleaseListExt-r13', 'optional': True, 'type': 'CSI-RS-ConfigNZPToReleaseListExt-r13'}], [{'name': 'cqi-ReportConfig-v1320', 'optional': True, 'type': 'CQI-ReportConfig-v1320'}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'element': {'type': 'SRS-TPC-PDCCH-Config-r14'}, 'name': 'setup', 'size': [(1, 32)], 'type': 'SEQUENCE ' 'OF'}], 'name': 'typeA-SRS-TPC-PDCCH-Group-r14', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'k-max-r14', 'type': 'ENUMERATED', 'values': [('l1', 0), ('l3', 1)]}, {'name': 'p-a-must-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-4dot77', 1), ('dB-3', 2), ('dB-1dot77', 3), ('dB0', 4), ('dB1', 5), ('dB2', 6), ('dB3', 7)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'must-Config-r14', 'optional': True, 'type': 'CHOICE'}, {'name': 'pusch-EnhancementsConfig-r14', 'optional': True, 'type': 'PUSCH-EnhancementsConfig-r14'}, {'name': 'ce-pdsch-pusch-EnhancementConfig-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('on', 0)]}, {'name': 'antennaInfo-v1430', 'optional': True, 'type': 'AntennaInfoDedicated-v1430'}, {'name': 'pucch-ConfigDedicated-v1430', 'optional': True, 'type': 'PUCCH-ConfigDedicated-v1430'}, {'name': 'pdsch-ConfigDedicated-v1430', 'optional': True, 'type': 'PDSCH-ConfigDedicated-v1430'}, {'name': 'pusch-ConfigDedicated-v1430', 'optional': True, 'type': 'PUSCH-ConfigDedicated-v1430'}, {'element': {'type': 'SoundingRS-UL-ConfigDedicated'}, 'name': 'soundingRS-UL-PeriodicConfigDedicatedList-r14', 'optional': True, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'SoundingRS-UL-ConfigDedicatedUpPTsExt-r13'}, 'name': 'soundingRS-UL-PeriodicConfigDedicatedUpPTsExtList-r14', 'optional': True, 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'SoundingRS-UL-ConfigDedicatedAperiodic-r10'}, 'name': 'soundingRS-UL-AperiodicConfigDedicatedList-r14', 'optional': True, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13'}, 'name': 'soundingRS-UL-ConfigDedicatedApUpPTsExtList-r14', 'optional': True, 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'csi-RS-Config-v1430', 'optional': True, 'type': 'CSI-RS-Config-v1430'}, {'name': 'csi-RS-ConfigZP-ApList-r14', 'optional': True, 'type': 'CSI-RS-ConfigZP-ApList-r14'}, {'name': 'cqi-ReportConfig-v1430', 'optional': True, 'type': 'CQI-ReportConfig-v1430'}, {'name': 'semiOpenLoop-r14', 'optional': True, 'type': 'BOOLEAN'}]], 'type': 'SEQUENCE'}, 'PhysicalConfigDedicated-v1370': {'members': [{'name': 'pucch-ConfigDedicated-v1370', 'optional': True, 'type': 'PUCCH-ConfigDedicated-v1370'}], 'type': 'SEQUENCE'}, 'PhysicalConfigDedicatedSCell-r10': {'members': [{'members': [{'name': 'antennaInfo-r10', 'optional': True, 'type': 'AntennaInfoDedicated-r10'}, {'name': 'crossCarrierSchedulingConfig-r10', 'optional': True, 'type': 'CrossCarrierSchedulingConfig-r10'}, {'name': 'csi-RS-Config-r10', 'optional': True, 'type': 'CSI-RS-Config-r10'}, {'name': 'pdsch-ConfigDedicated-r10', 'optional': True, 'type': 'PDSCH-ConfigDedicated'}], 'name': 'nonUL-Configuration-r10', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'antennaInfoUL-r10', 'optional': True, 'type': 'AntennaInfoUL-r10'}, {'name': 'pusch-ConfigDedicatedSCell-r10', 'optional': True, 'type': 'PUSCH-ConfigDedicatedSCell-r10'}, {'name': 'uplinkPowerControlDedicatedSCell-r10', 'optional': True, 'type': 'UplinkPowerControlDedicatedSCell-r10'}, {'name': 'cqi-ReportConfigSCell-r10', 'optional': True, 'type': 'CQI-ReportConfigSCell-r10'}, {'name': 'soundingRS-UL-ConfigDedicated-r10', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicated'}, {'name': 'soundingRS-UL-ConfigDedicated-v1020', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicated-v1020'}, {'name': 'soundingRS-UL-ConfigDedicatedAperiodic-r10', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicatedAperiodic-r10'}], 'name': 'ul-Configuration-r10', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'csi-RS-ConfigNZPToReleaseList-r11', 'optional': True, 'type': 'CSI-RS-ConfigNZPToReleaseList-r11'}, {'name': 'csi-RS-ConfigNZPToAddModList-r11', 'optional': True, 'type': 'CSI-RS-ConfigNZPToAddModList-r11'}, {'name': 'csi-RS-ConfigZPToReleaseList-r11', 'optional': True, 'type': 'CSI-RS-ConfigZPToReleaseList-r11'}, {'name': 'csi-RS-ConfigZPToAddModList-r11', 'optional': True, 'type': 'CSI-RS-ConfigZPToAddModList-r11'}, {'name': 'epdcch-Config-r11', 'optional': True, 'type': 'EPDCCH-Config-r11'}, {'name': 'pdsch-ConfigDedicated-v1130', 'optional': True, 'type': 'PDSCH-ConfigDedicated-v1130'}, {'name': 'cqi-ReportConfig-v1130', 'optional': True, 'type': 'CQI-ReportConfig-v1130'}, {'name': 'pusch-ConfigDedicated-v1130', 'optional': True, 'type': 'PUSCH-ConfigDedicated-v1130'}, {'name': 'uplinkPowerControlDedicatedSCell-v1130', 'optional': True, 'type': 'UplinkPowerControlDedicated-v1130'}], [{'name': 'antennaInfo-v1250', 'optional': True, 'type': 'AntennaInfoDedicated-v1250'}, {'name': 'eimta-MainConfigSCell-r12', 'optional': True, 'type': 'EIMTA-MainConfigServCell-r12'}, {'name': 'cqi-ReportConfigSCell-v1250', 'optional': True, 'type': 'CQI-ReportConfig-v1250'}, {'name': 'uplinkPowerControlDedicatedSCell-v1250', 'optional': True, 'type': 'UplinkPowerControlDedicated-v1250'}, {'name': 'csi-RS-Config-v1250', 'optional': True, 'type': 'CSI-RS-Config-v1250'}], [{'name': 'pdsch-ConfigDedicated-v1280', 'optional': True, 'type': 'PDSCH-ConfigDedicated-v1280'}], [{'name': 'pucch-Cell-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'pucch-ConfigDedicated-r13', 'optional': True, 'type': 'PUCCH-ConfigDedicated-r13'}, {'name': 'schedulingRequestConfig-r13', 'optional': True, 'type': 'SchedulingRequestConfigSCell-r13'}, {'name': 'tpc-PDCCH-ConfigPUCCH-SCell-r13', 'optional': True, 'type': 'TPC-PDCCH-ConfigSCell-r13'}, {'name': 'pusch-ConfigDedicated-r13', 'optional': True, 'type': 'PUSCH-ConfigDedicated-r13'}, {'name': 'uplinkPowerControlDedicated-r13', 'optional': True, 'type': 'UplinkPowerControlDedicatedSCell-v1310'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'pucch-SCell', 'optional': True, 'type': 'CHOICE'}, {'name': 'crossCarrierSchedulingConfig-r13', 'optional': True, 'type': 'CrossCarrierSchedulingConfig-r13'}, {'name': 'pdcch-ConfigSCell-r13', 'optional': True, 'type': 'PDCCH-ConfigSCell-r13'}, {'name': 'cqi-ReportConfig-v1310', 'optional': True, 'type': 'CQI-ReportConfig-v1310'}, {'name': 'pdsch-ConfigDedicated-v1310', 'optional': True, 'type': 'PDSCH-ConfigDedicated-v1310'}, {'name': 'soundingRS-UL-ConfigDedicated-v1310', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicated-v1310'}, {'name': 'soundingRS-UL-ConfigDedicatedUpPTsExt-r13', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicatedUpPTsExt-r13'}, {'name': 'soundingRS-UL-ConfigDedicatedAperiodic-v1310', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicatedAperiodic-v1310'}, {'name': 'soundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13'}, {'name': 'csi-RS-Config-v1310', 'optional': True, 'type': 'CSI-RS-Config-v1310'}, {'name': 'laa-SCellConfiguration-r13', 'optional': True, 'type': 'LAA-SCellConfiguration-r13'}, {'name': 'csi-RS-ConfigNZPToAddModListExt-r13', 'optional': True, 'type': 'CSI-RS-ConfigNZPToAddModListExt-r13'}, {'name': 'csi-RS-ConfigNZPToReleaseListExt-r13', 'optional': True, 'type': 'CSI-RS-ConfigNZPToReleaseListExt-r13'}], [{'name': 'cqi-ReportConfig-v1320', 'optional': True, 'type': 'CQI-ReportConfig-v1320'}], [{'name': 'laa-SCellConfiguration-v1430', 'optional': True, 'type': 'LAA-SCellConfiguration-v1430'}, {'name': 'typeB-SRS-TPC-PDCCH-Config-r14', 'optional': True, 'type': 'SRS-TPC-PDCCH-Config-r14'}, {'name': 'uplinkPUSCH-LessPowerControlDedicated-v1430', 'optional': True, 'type': 'UplinkPUSCH-LessPowerControlDedicated-v1430'}, {'element': {'type': 'SoundingRS-UL-ConfigDedicated'}, 'name': 'soundingRS-UL-PeriodicConfigDedicatedList-r14', 'optional': True, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'SoundingRS-UL-ConfigDedicatedUpPTsExt-r13'}, 'name': 'soundingRS-UL-PeriodicConfigDedicatedUpPTsExtList-r14', 'optional': True, 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'SoundingRS-AperiodicSet-r14'}, 'name': 'soundingRS-UL-AperiodicConfigDedicatedList-r14', 'optional': True, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'SoundingRS-AperiodicSetUpPTsExt-r14'}, 'name': 'soundingRS-UL-ConfigDedicatedApUpPTsExtList-r14', 'optional': True, 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'k-max-r14', 'type': 'ENUMERATED', 'values': [('l1', 0), ('l3', 1)]}, {'name': 'p-a-must-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-4dot77', 1), ('dB-3', 2), ('dB-1dot77', 3), ('dB0', 4), ('dB1', 5), ('dB2', 6), ('dB3', 7)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'must-Config-r14', 'optional': True, 'type': 'CHOICE'}, {'name': 'pusch-ConfigDedicated-v1430', 'optional': True, 'type': 'PUSCH-ConfigDedicatedSCell-v1430'}, {'name': 'csi-RS-Config-v1430', 'optional': True, 'type': 'CSI-RS-Config-v1430'}, {'name': 'csi-RS-ConfigZP-ApList-r14', 'optional': True, 'type': 'CSI-RS-ConfigZP-ApList-r14'}, {'name': 'cqi-ReportConfig-v1430', 'optional': True, 'type': 'CQI-ReportConfig-v1430'}, {'name': 'semiOpenLoop-r14', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'pdsch-ConfigDedicatedSCell-v1430', 'optional': True, 'type': 'PDSCH-ConfigDedicatedSCell-v1430'}]], 'type': 'SEQUENCE'}, 'PhysicalConfigDedicatedSCell-v1370': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'pucch-ConfigDedicated-v1370', 'optional': True, 'type': 'PUCCH-ConfigDedicated-v1370'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'pucch-SCell-v1370', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'PollByte': {'type': 'ENUMERATED', 'values': [('kB25', 0), ('kB50', 1), ('kB75', 2), ('kB100', 3), ('kB125', 4), ('kB250', 5), ('kB375', 6), ('kB500', 7), ('kB750', 8), ('kB1000', 9), ('kB1250', 10), ('kB1500', 11), ('kB2000', 12), ('kB3000', 13), ('kBinfinity', 14), ('spare1', 15)]}, 'PollByte-r14': {'type': 'ENUMERATED', 'values': [('kB1', 0), ('kB2', 1), ('kB5', 2), ('kB8', 3), ('kB10', 4), ('kB15', 5), ('kB3500', 6), ('kB4000', 7), ('kB4500', 8), ('kB5000', 9), ('kB5500', 10), ('kB6000', 11), ('kB6500', 12), ('kB7000', 13), ('kB7500', 14), ('kB8000', 15), ('kB9000', 16), ('kB10000', 17), ('kB11000', 18), ('kB12000', 19), ('kB13000', 20), ('kB14000', 21), ('kB15000', 22), ('kB16000', 23), ('kB17000', 24), ('kB18000', 25), ('kB19000', 26), ('kB20000', 27), ('kB25000', 28), ('kB30000', 29), ('kB35000', 30), ('kB40000', 31)]}, 'PollPDU': {'type': 'ENUMERATED', 'values': [('p4', 0), ('p8', 1), ('p16', 2), ('p32', 3), ('p64', 4), ('p128', 5), ('p256', 6), ('pInfinity', 7)]}, 'PollPDU-v1310': {'type': 'ENUMERATED', 'values': [('p512', 0), ('p1024', 1), ('p2048', 2), ('p4096', 3), ('p6144', 4), ('p8192', 5), ('p12288', 6), ('p16384', 7)]}, 'PowerCoordinationInfo-r12': {'members': [{'name': 'p-MeNB-r12', 'restricted-to': [(1, 16)], 'type': 'INTEGER'}, {'name': 'p-SeNB-r12', 'restricted-to': [(1, 16)], 'type': 'INTEGER'}, {'name': 'powerControlMode-r12', 'restricted-to': [(1, 2)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PowerPrefIndicationConfig-r11': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'powerPrefIndicationTimer-r11', 'type': 'ENUMERATED', 'values': [('s0', 0), ('s0dot5', 1), ('s1', 2), ('s2', 3), ('s5', 4), ('s10', 5), ('s20', 6), ('s30', 7), ('s60', 8), ('s90', 9), ('s120', 10), ('s300', 11), ('s600', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'PowerRampingParameters': {'members': [{'name': 'powerRampingStep', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB2', 1), ('dB4', 2), ('dB6', 3)]}, {'name': 'preambleInitialReceivedTargetPower', 'type': 'ENUMERATED', 'values': [('dBm-120', 0), ('dBm-118', 1), ('dBm-116', 2), ('dBm-114', 3), ('dBm-112', 4), ('dBm-110', 5), ('dBm-108', 6), ('dBm-106', 7), ('dBm-104', 8), ('dBm-102', 9), ('dBm-100', 10), ('dBm-98', 11), ('dBm-96', 12), ('dBm-94', 13), ('dBm-92', 14), ('dBm-90', 15)]}], 'type': 'SEQUENCE'}, 'PreRegistrationInfoHRPD': {'members': [{'name': 'preRegistrationAllowed', 'type': 'BOOLEAN'}, {'name': 'preRegistrationZoneId', 'optional': True, 'type': 'PreRegistrationZoneIdHRPD'}, {'name': 'secondaryPreRegistrationZoneIdList', 'optional': True, 'type': 'SecondaryPreRegistrationZoneIdListHRPD'}], 'type': 'SEQUENCE'}, 'PreRegistrationZoneIdHRPD': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'PreambleTransMax': {'type': 'ENUMERATED', 'values': [('n3', 0), ('n4', 1), ('n5', 2), ('n6', 3), ('n7', 4), ('n8', 5), ('n10', 6), ('n20', 7), ('n50', 8), ('n100', 9), ('n200', 10)]}, 'PresenceAntennaPort1': {'type': 'BOOLEAN'}, 'ProximityIndication-r9': {'members': [{'members': [{'members': [{'name': 'proximityIndication-r9', 'type': 'ProximityIndication-r9-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'ProximityIndication-r9-IEs': {'members': [{'name': 'type-r9', 'type': 'ENUMERATED', 'values': [('entering', 0), ('leaving', 1)]}, {'members': [{'name': 'eutra-r9', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'utra-r9', 'type': 'ARFCN-ValueUTRA'}, None, {'name': 'eutra2-v9e0', 'type': 'ARFCN-ValueEUTRA-v9e0'}], 'name': 'carrierFreq-r9', 'type': 'CHOICE'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'ProximityIndication-v930-IEs'}], 'type': 'SEQUENCE'}, 'ProximityIndication-v930-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'Q-OffsetRange': {'type': 'ENUMERATED', 'values': [('dB-24', 0), ('dB-22', 1), ('dB-20', 2), ('dB-18', 3), ('dB-16', 4), ('dB-14', 5), ('dB-12', 6), ('dB-10', 7), ('dB-8', 8), ('dB-6', 9), ('dB-5', 10), ('dB-4', 11), ('dB-3', 12), ('dB-2', 13), ('dB-1', 14), ('dB0', 15), ('dB1', 16), ('dB2', 17), ('dB3', 18), ('dB4', 19), ('dB5', 20), ('dB6', 21), ('dB8', 22), ('dB10', 23), ('dB12', 24), ('dB14', 25), ('dB16', 26), ('dB18', 27), ('dB20', 28), ('dB22', 29), ('dB24', 30)]}, 'Q-OffsetRangeInterRAT': {'restricted-to': [(-15, 15)], 'type': 'INTEGER'}, 'Q-QualMin-r9': {'restricted-to': [(-34, -3)], 'type': 'INTEGER'}, 'Q-RxLevMin': {'restricted-to': [(-70, -22)], 'type': 'INTEGER'}, 'QuantityConfig': {'members': [{'name': 'quantityConfigEUTRA', 'optional': True, 'type': 'QuantityConfigEUTRA'}, {'name': 'quantityConfigUTRA', 'optional': True, 'type': 'QuantityConfigUTRA'}, {'name': 'quantityConfigGERAN', 'optional': True, 'type': 'QuantityConfigGERAN'}, {'name': 'quantityConfigCDMA2000', 'optional': True, 'type': 'QuantityConfigCDMA2000'}, None, [{'name': 'quantityConfigUTRA-v1020', 'optional': True, 'type': 'QuantityConfigUTRA-v1020'}], [{'name': 'quantityConfigEUTRA-v1250', 'optional': True, 'type': 'QuantityConfigEUTRA-v1250'}], [{'name': 'quantityConfigEUTRA-v1310', 'optional': True, 'type': 'QuantityConfigEUTRA-v1310'}, {'name': 'quantityConfigWLAN-r13', 'optional': True, 'type': 'QuantityConfigWLAN-r13'}]], 'type': 'SEQUENCE'}, 'QuantityConfigCDMA2000': {'members': [{'name': 'measQuantityCDMA2000', 'type': 'ENUMERATED', 'values': [('pilotStrength', 0), ('pilotPnPhaseAndPilotStrength', 1)]}], 'type': 'SEQUENCE'}, 'QuantityConfigEUTRA': {'members': [{'default': 'fc4', 'name': 'filterCoefficientRSRP', 'type': 'FilterCoefficient'}, {'default': 'fc4', 'name': 'filterCoefficientRSRQ', 'type': 'FilterCoefficient'}], 'type': 'SEQUENCE'}, 'QuantityConfigEUTRA-v1250': {'members': [{'name': 'filterCoefficientCSI-RSRP-r12', 'optional': True, 'type': 'FilterCoefficient'}], 'type': 'SEQUENCE'}, 'QuantityConfigEUTRA-v1310': {'members': [{'default': 'fc4', 'name': 'filterCoefficientRS-SINR-r13', 'type': 'FilterCoefficient'}], 'type': 'SEQUENCE'}, 'QuantityConfigGERAN': {'members': [{'name': 'measQuantityGERAN', 'type': 'ENUMERATED', 'values': [('rssi', 0)]}, {'default': 'fc2', 'name': 'filterCoefficient', 'type': 'FilterCoefficient'}], 'type': 'SEQUENCE'}, 'QuantityConfigUTRA': {'members': [{'name': 'measQuantityUTRA-FDD', 'type': 'ENUMERATED', 'values': [('cpich-RSCP', 0), ('cpich-EcN0', 1)]}, {'name': 'measQuantityUTRA-TDD', 'type': 'ENUMERATED', 'values': [('pccpch-RSCP', 0)]}, {'default': 'fc4', 'name': 'filterCoefficient', 'type': 'FilterCoefficient'}], 'type': 'SEQUENCE'}, 'QuantityConfigUTRA-v1020': {'members': [{'default': 'fc4', 'name': 'filterCoefficient2-FDD-r10', 'type': 'FilterCoefficient'}], 'type': 'SEQUENCE'}, 'QuantityConfigWLAN-r13': {'members': [{'name': 'measQuantityWLAN-r13', 'type': 'ENUMERATED', 'values': [('rssiWLAN', 0)]}, {'default': 'fc4', 'name': 'filterCoefficient-r13', 'type': 'FilterCoefficient'}], 'type': 'SEQUENCE'}, 'RACH-CE-LevelInfo-r13': {'members': [{'members': [{'name': 'firstPreamble-r13', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'lastPreamble-r13', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}], 'name': 'preambleMappingInfo-r13', 'type': 'SEQUENCE'}, {'name': 'ra-ResponseWindowSize-r13', 'type': 'ENUMERATED', 'values': [('sf20', 0), ('sf50', 1), ('sf80', 2), ('sf120', 3), ('sf180', 4), ('sf240', 5), ('sf320', 6), ('sf400', 7)]}, {'name': 'mac-ContentionResolutionTimer-r13', 'type': 'ENUMERATED', 'values': [('sf80', 0), ('sf100', 1), ('sf120', 2), ('sf160', 3), ('sf200', 4), ('sf240', 5), ('sf480', 6), ('sf960', 7)]}, {'name': 'rar-HoppingConfig-r13', 'type': 'ENUMERATED', 'values': [('on', 0), ('off', 1)]}, None], 'type': 'SEQUENCE'}, 'RACH-CE-LevelInfoList-r13': {'element': {'type': 'RACH-CE-LevelInfo-r13'}, 'size': [(1, 'maxCE-Level-r13')], 'type': 'SEQUENCE ' 'OF'}, 'RACH-ConfigCommon': {'members': [{'members': [{'name': 'numberOfRA-Preambles', 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1), ('n12', 2), ('n16', 3), ('n20', 4), ('n24', 5), ('n28', 6), ('n32', 7), ('n36', 8), ('n40', 9), ('n44', 10), ('n48', 11), ('n52', 12), ('n56', 13), ('n60', 14), ('n64', 15)]}, {'members': [{'name': 'sizeOfRA-PreamblesGroupA', 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1), ('n12', 2), ('n16', 3), ('n20', 4), ('n24', 5), ('n28', 6), ('n32', 7), ('n36', 8), ('n40', 9), ('n44', 10), ('n48', 11), ('n52', 12), ('n56', 13), ('n60', 14)]}, {'name': 'messageSizeGroupA', 'type': 'ENUMERATED', 'values': [('b56', 0), ('b144', 1), ('b208', 2), ('b256', 3)]}, {'name': 'messagePowerOffsetGroupB', 'type': 'ENUMERATED', 'values': [('minusinfinity', 0), ('dB0', 1), ('dB5', 2), ('dB8', 3), ('dB10', 4), ('dB12', 5), ('dB15', 6), ('dB18', 7)]}, None], 'name': 'preamblesGroupAConfig', 'optional': True, 'type': 'SEQUENCE'}], 'name': 'preambleInfo', 'type': 'SEQUENCE'}, {'name': 'powerRampingParameters', 'type': 'PowerRampingParameters'}, {'members': [{'name': 'preambleTransMax', 'type': 'PreambleTransMax'}, {'name': 'ra-ResponseWindowSize', 'type': 'ENUMERATED', 'values': [('sf2', 0), ('sf3', 1), ('sf4', 2), ('sf5', 3), ('sf6', 4), ('sf7', 5), ('sf8', 6), ('sf10', 7)]}, {'name': 'mac-ContentionResolutionTimer', 'type': 'ENUMERATED', 'values': [('sf8', 0), ('sf16', 1), ('sf24', 2), ('sf32', 3), ('sf40', 4), ('sf48', 5), ('sf56', 6), ('sf64', 7)]}], 'name': 'ra-SupervisionInfo', 'type': 'SEQUENCE'}, {'name': 'maxHARQ-Msg3Tx', 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, None, [{'name': 'preambleTransMax-CE-r13', 'optional': True, 'type': 'PreambleTransMax'}, {'name': 'rach-CE-LevelInfoList-r13', 'optional': True, 'type': 'RACH-CE-LevelInfoList-r13'}]], 'type': 'SEQUENCE'}, 'RACH-ConfigCommon-v1250': {'members': [{'members': [{'name': 'connEstFailCount-r12', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3)]}, {'name': 'connEstFailOffsetValidity-r12', 'type': 'ENUMERATED', 'values': [('s30', 0), ('s60', 1), ('s120', 2), ('s240', 3), ('s300', 4), ('s420', 5), ('s600', 6), ('s900', 7)]}, {'name': 'connEstFailOffset-r12', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'name': 'txFailParams-r12', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RACH-ConfigCommonSCell-r11': {'members': [{'name': 'powerRampingParameters-r11', 'type': 'PowerRampingParameters'}, {'members': [{'name': 'preambleTransMax-r11', 'type': 'PreambleTransMax'}], 'name': 'ra-SupervisionInfo-r11', 'type': 'SEQUENCE'}, None], 'type': 'SEQUENCE'}, 'RACH-ConfigDedicated': {'members': [{'name': 'ra-PreambleIndex', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'ra-PRACH-MaskIndex', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'RACH-Skip-r14': {'members': [{'members': [{'name': 'ta0-r14', 'type': 'NULL'}, {'name': 'mcg-PTAG-r14', 'type': 'NULL'}, {'name': 'scg-PTAG-r14', 'type': 'NULL'}, {'name': 'mcg-STAG-r14', 'type': 'STAG-Id-r11'}, {'name': 'scg-STAG-r14', 'type': 'STAG-Id-r11'}], 'name': 'targetTA-r14', 'type': 'CHOICE'}, {'members': [{'name': 'numberOfConfUL-Processes-r14', 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, {'name': 'ul-SchedInterval-r14', 'type': 'ENUMERATED', 'values': [('sf2', 0), ('sf5', 1), ('sf10', 2)]}, {'name': 'ul-StartSubframe-r14', 'restricted-to': [(0, 9)], 'type': 'INTEGER'}, {'name': 'ul-Grant-r14', 'size': [16], 'type': 'BIT ' 'STRING'}], 'name': 'ul-ConfigInfo-r14', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RAND-CDMA2000': {'size': [32], 'type': 'BIT STRING'}, 'RAT-Type': {'type': 'ENUMERATED', 'values': [('eutra', 0), ('utra', 1), ('geran-cs', 2), ('geran-ps', 3), ('cdma2000-1XRTT', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7), None]}, 'RCLWI-Config-r13': {'members': [{'members': [{'members': [{'name': 'mobilityConfig-r13', 'type': 'WLAN-Id-List-r12'}], 'name': 'steerToWLAN-r13', 'type': 'SEQUENCE'}, {'name': 'steerToLTE-r13', 'type': 'NULL'}], 'name': 'command', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'RCLWI-Configuration-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'rclwi-Config-r13', 'type': 'RCLWI-Config-r13'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'RE-MappingQCLConfigToAddModList-r11': {'element': {'type': 'PDSCH-RE-MappingQCL-Config-r11'}, 'size': [(1, 'maxRE-MapQCL-r11')], 'type': 'SEQUENCE ' 'OF'}, 'RE-MappingQCLConfigToReleaseList-r11': {'element': {'type': 'PDSCH-RE-MappingQCL-ConfigId-r11'}, 'size': [(1, 'maxRE-MapQCL-r11')], 'type': 'SEQUENCE ' 'OF'}, 'RF-Parameters': {'members': [{'name': 'supportedBandListEUTRA', 'type': 'SupportedBandListEUTRA'}], 'type': 'SEQUENCE'}, 'RF-Parameters-v1020': {'members': [{'name': 'supportedBandCombination-r10', 'type': 'SupportedBandCombination-r10'}], 'type': 'SEQUENCE'}, 'RF-Parameters-v1060': {'members': [{'name': 'supportedBandCombinationExt-r10', 'type': 'SupportedBandCombinationExt-r10'}], 'type': 'SEQUENCE'}, 'RF-Parameters-v1090': {'members': [{'name': 'supportedBandCombination-v1090', 'optional': True, 'type': 'SupportedBandCombination-v1090'}], 'type': 'SEQUENCE'}, 'RF-Parameters-v10f0': {'members': [{'name': 'modifiedMPR-Behavior-r10', 'optional': True, 'size': [32], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'RF-Parameters-v10i0': {'members': [{'name': 'supportedBandCombination-v10i0', 'optional': True, 'type': 'SupportedBandCombination-v10i0'}], 'type': 'SEQUENCE'}, 'RF-Parameters-v10j0': {'members': [{'name': 'multiNS-Pmax-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'RF-Parameters-v1130': {'members': [{'name': 'supportedBandCombination-v1130', 'optional': True, 'type': 'SupportedBandCombination-v1130'}], 'type': 'SEQUENCE'}, 'RF-Parameters-v1180': {'members': [{'name': 'freqBandRetrieval-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'element': {'type': 'FreqBandIndicator-r11'}, 'name': 'requestedBands-r11', 'optional': True, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'supportedBandCombinationAdd-r11', 'optional': True, 'type': 'SupportedBandCombinationAdd-r11'}], 'type': 'SEQUENCE'}, 'RF-Parameters-v11d0': {'members': [{'name': 'supportedBandCombinationAdd-v11d0', 'optional': True, 'type': 'SupportedBandCombinationAdd-v11d0'}], 'type': 'SEQUENCE'}, 'RF-Parameters-v1250': {'members': [{'name': 'supportedBandListEUTRA-v1250', 'optional': True, 'type': 'SupportedBandListEUTRA-v1250'}, {'name': 'supportedBandCombination-v1250', 'optional': True, 'type': 'SupportedBandCombination-v1250'}, {'name': 'supportedBandCombinationAdd-v1250', 'optional': True, 'type': 'SupportedBandCombinationAdd-v1250'}, {'name': 'freqBandPriorityAdjustment-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'RF-Parameters-v1270': {'members': [{'name': 'supportedBandCombination-v1270', 'optional': True, 'type': 'SupportedBandCombination-v1270'}, {'name': 'supportedBandCombinationAdd-v1270', 'optional': True, 'type': 'SupportedBandCombinationAdd-v1270'}], 'type': 'SEQUENCE'}, 'RF-Parameters-v12b0': {'members': [{'name': 'maxLayersMIMO-Indication-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'RF-Parameters-v1310': {'members': [{'members': [{'name': 'reducedIntNonContCombRequested-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'requestedCCsDL-r13', 'optional': True, 'restricted-to': [(2, 32)], 'type': 'INTEGER'}, {'name': 'requestedCCsUL-r13', 'optional': True, 'restricted-to': [(2, 32)], 'type': 'INTEGER'}, {'name': 'skipFallbackCombRequested-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'name': 'eNB-RequestedParameters-r13', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'maximumCCsRetrieval-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'skipFallbackCombinations-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'reducedIntNonContComb-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'supportedBandListEUTRA-v1310', 'optional': True, 'type': 'SupportedBandListEUTRA-v1310'}, {'name': 'supportedBandCombinationReduced-r13', 'optional': True, 'type': 'SupportedBandCombinationReduced-r13'}], 'type': 'SEQUENCE'}, 'RF-Parameters-v1320': {'members': [{'name': 'supportedBandListEUTRA-v1320', 'optional': True, 'type': 'SupportedBandListEUTRA-v1320'}, {'name': 'supportedBandCombination-v1320', 'optional': True, 'type': 'SupportedBandCombination-v1320'}, {'name': 'supportedBandCombinationAdd-v1320', 'optional': True, 'type': 'SupportedBandCombinationAdd-v1320'}, {'name': 'supportedBandCombinationReduced-v1320', 'optional': True, 'type': 'SupportedBandCombinationReduced-v1320'}], 'type': 'SEQUENCE'}, 'RF-Parameters-v1430': {'members': [{'name': 'supportedBandCombination-v1430', 'optional': True, 'type': 'SupportedBandCombination-v1430'}, {'name': 'supportedBandCombinationAdd-v1430', 'optional': True, 'type': 'SupportedBandCombinationAdd-v1430'}, {'name': 'supportedBandCombinationReduced-v1430', 'optional': True, 'type': 'SupportedBandCombinationReduced-v1430'}, {'members': [{'name': 'requestedDiffFallbackCombList-r14', 'type': 'BandCombinationList-r14'}], 'name': 'eNB-RequestedParameters-v1430', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'diffFallbackCombReport-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'RF-Parameters-v9e0': {'members': [{'name': 'supportedBandListEUTRA-v9e0', 'optional': True, 'type': 'SupportedBandListEUTRA-v9e0'}], 'type': 'SEQUENCE'}, 'RLC-Config': {'members': [{'members': [{'name': 'ul-AM-RLC', 'type': 'UL-AM-RLC'}, {'name': 'dl-AM-RLC', 'type': 'DL-AM-RLC'}], 'name': 'am', 'type': 'SEQUENCE'}, {'members': [{'name': 'ul-UM-RLC', 'type': 'UL-UM-RLC'}, {'name': 'dl-UM-RLC', 'type': 'DL-UM-RLC'}], 'name': 'um-Bi-Directional', 'type': 'SEQUENCE'}, {'members': [{'name': 'ul-UM-RLC', 'type': 'UL-UM-RLC'}], 'name': 'um-Uni-Directional-UL', 'type': 'SEQUENCE'}, {'members': [{'name': 'dl-UM-RLC', 'type': 'DL-UM-RLC'}], 'name': 'um-Uni-Directional-DL', 'type': 'SEQUENCE'}, None], 'type': 'CHOICE'}, 'RLC-Config-v1250': {'members': [{'name': 'ul-extended-RLC-LI-Field-r12', 'type': 'BOOLEAN'}, {'name': 'dl-extended-RLC-LI-Field-r12', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'RLC-Config-v1310': {'members': [{'name': 'ul-extended-RLC-AM-SN-r13', 'type': 'BOOLEAN'}, {'name': 'dl-extended-RLC-AM-SN-r13', 'type': 'BOOLEAN'}, {'name': 'pollPDU-v1310', 'optional': True, 'type': 'PollPDU-v1310'}], 'type': 'SEQUENCE'}, 'RLC-Config-v1430': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'pollByte-r14', 'type': 'PollByte-r14'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'RLC-Parameters-r12': {'members': [{'name': 'extended-RLC-LI-Field-r12', 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'RLC-Parameters-v1310': {'members': [{'name': 'extendedRLC-SN-SO-Field-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'RLC-Parameters-v1430': {'members': [{'name': 'extendedPollByte-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'RLF-Report-r9': {'members': [{'members': [{'name': 'rsrpResult-r9', 'type': 'RSRP-Range'}, {'name': 'rsrqResult-r9', 'optional': True, 'type': 'RSRQ-Range'}], 'name': 'measResultLastServCell-r9', 'type': 'SEQUENCE'}, {'members': [{'name': 'measResultListEUTRA-r9', 'optional': True, 'type': 'MeasResultList2EUTRA-r9'}, {'name': 'measResultListUTRA-r9', 'optional': True, 'type': 'MeasResultList2UTRA-r9'}, {'name': 'measResultListGERAN-r9', 'optional': True, 'type': 'MeasResultListGERAN'}, {'name': 'measResultsCDMA2000-r9', 'optional': True, 'type': 'MeasResultList2CDMA2000-r9'}], 'name': 'measResultNeighCells-r9', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'locationInfo-r10', 'optional': True, 'type': 'LocationInfo-r10'}, {'members': [{'name': 'cellGlobalId-r10', 'type': 'CellGlobalIdEUTRA'}, {'members': [{'name': 'physCellId-r10', 'type': 'PhysCellId'}, {'name': 'carrierFreq-r10', 'type': 'ARFCN-ValueEUTRA'}], 'name': 'pci-arfcn-r10', 'type': 'SEQUENCE'}], 'name': 'failedPCellId-r10', 'optional': True, 'type': 'CHOICE'}, {'name': 'reestablishmentCellId-r10', 'optional': True, 'type': 'CellGlobalIdEUTRA'}, {'name': 'timeConnFailure-r10', 'optional': True, 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'connectionFailureType-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('rlf', 0), ('hof', 1)]}, {'name': 'previousPCellId-r10', 'optional': True, 'type': 'CellGlobalIdEUTRA'}], [{'members': [{'name': 'carrierFreq-v1090', 'type': 'ARFCN-ValueEUTRA-v9e0'}], 'name': 'failedPCellId-v1090', 'optional': True, 'type': 'SEQUENCE'}], [{'members': [{'name': 'c-RNTI-r11', 'type': 'C-RNTI'}, {'name': 'rlf-Cause-r11', 'type': 'ENUMERATED', 'values': [('t310-Expiry', 0), ('randomAccessProblem', 1), ('rlc-MaxNumRetx', 2), ('t312-Expiry-r12', 3)]}, {'name': 'timeSinceFailure-r11', 'type': 'TimeSinceFailure-r11'}], 'name': 'basicFields-r11', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'carrierFreq-r11', 'type': 'ARFCN-ValueUTRA'}, {'members': [{'name': 'fdd-r11', 'type': 'PhysCellIdUTRA-FDD'}, {'name': 'tdd-r11', 'type': 'PhysCellIdUTRA-TDD'}], 'name': 'physCellId-r11', 'type': 'CHOICE'}, {'name': 'cellGlobalId-r11', 'optional': True, 'type': 'CellGlobalIdUTRA'}], 'name': 'previousUTRA-CellId-r11', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'carrierFreq-r11', 'type': 'ARFCN-ValueUTRA'}, {'members': [{'name': 'fdd-r11', 'type': 'PhysCellIdUTRA-FDD'}, {'name': 'tdd-r11', 'type': 'PhysCellIdUTRA-TDD'}], 'name': 'physCellId-r11', 'type': 'CHOICE'}], 'name': 'selectedUTRA-CellId-r11', 'optional': True, 'type': 'SEQUENCE'}], [{'members': [{'name': 'tac-FailedPCell-r12', 'type': 'TrackingAreaCode'}], 'name': 'failedPCellId-v1250', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'measResultLastServCell-v1250', 'optional': True, 'type': 'RSRQ-Range-v1250'}, {'name': 'lastServCellRSRQ-Type-r12', 'optional': True, 'type': 'RSRQ-Type-r12'}, {'name': 'measResultListEUTRA-v1250', 'optional': True, 'type': 'MeasResultList2EUTRA-v1250'}], [{'name': 'drb-EstablishedWithQCI-1-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('qci1', 0)]}], [{'name': 'measResultLastServCell-v1360', 'optional': True, 'type': 'RSRP-Range-v1360'}]], 'type': 'SEQUENCE'}, 'RLF-Report-v9e0': {'members': [{'name': 'measResultListEUTRA-v9e0', 'type': 'MeasResultList2EUTRA-v9e0'}], 'type': 'SEQUENCE'}, 'RLF-TimersAndConstants-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 't301-v1310', 'type': 'ENUMERATED', 'values': [('ms2500', 0), ('ms3000', 1), ('ms3500', 2), ('ms4000', 3), ('ms5000', 4), ('ms6000', 5), ('ms8000', 6), ('ms10000', 7)]}, None, [{'name': 't310-v1330', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms4000', 0), ('ms6000', 1)]}]], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'RLF-TimersAndConstants-r9': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 't301-r9', 'type': 'ENUMERATED', 'values': [('ms100', 0), ('ms200', 1), ('ms300', 2), ('ms400', 3), ('ms600', 4), ('ms1000', 5), ('ms1500', 6), ('ms2000', 7)]}, {'name': 't310-r9', 'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms50', 1), ('ms100', 2), ('ms200', 3), ('ms500', 4), ('ms1000', 5), ('ms2000', 6)]}, {'name': 'n310-r9', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n6', 4), ('n8', 5), ('n10', 6), ('n20', 7)]}, {'name': 't311-r9', 'type': 'ENUMERATED', 'values': [('ms1000', 0), ('ms3000', 1), ('ms5000', 2), ('ms10000', 3), ('ms15000', 4), ('ms20000', 5), ('ms30000', 6)]}, {'name': 'n311-r9', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n5', 4), ('n6', 5), ('n8', 6), ('n10', 7)]}, None], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'RLF-TimersAndConstantsSCG-r12': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 't313-r12', 'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms50', 1), ('ms100', 2), ('ms200', 3), ('ms500', 4), ('ms1000', 5), ('ms2000', 6)]}, {'name': 'n313-r12', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n6', 4), ('n8', 5), ('n10', 6), ('n20', 7)]}, {'name': 'n314-r12', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n5', 4), ('n6', 5), ('n8', 6), ('n10', 7)]}, None], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'RMTC-Config-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'rmtc-Period-r13', 'type': 'ENUMERATED', 'values': [('ms40', 0), ('ms80', 1), ('ms160', 2), ('ms320', 3), ('ms640', 4)]}, {'name': 'rmtc-SubframeOffset-r13', 'optional': True, 'restricted-to': [(0, 639)], 'type': 'INTEGER'}, {'name': 'measDuration-r13', 'type': 'ENUMERATED', 'values': [('sym1', 0), ('sym14', 1), ('sym28', 2), ('sym42', 3), ('sym70', 4)]}, None], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'RN-SubframeConfig-r10': {'members': [{'members': [{'name': 'subframeConfigPatternFDD-r10', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'subframeConfigPatternTDD-r10', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}], 'name': 'subframeConfigPattern-r10', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'resourceAllocationType-r10', 'type': 'ENUMERATED', 'values': [('type0', 0), ('type1', 1), ('type2Localized', 2), ('type2Distributed', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}, {'members': [{'members': [{'name': 'nrb6-r10', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'nrb15-r10', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'nrb25-r10', 'size': [13], 'type': 'BIT ' 'STRING'}, {'name': 'nrb50-r10', 'size': [17], 'type': 'BIT ' 'STRING'}, {'name': 'nrb75-r10', 'size': [19], 'type': 'BIT ' 'STRING'}, {'name': 'nrb100-r10', 'size': [25], 'type': 'BIT ' 'STRING'}], 'name': 'type01-r10', 'type': 'CHOICE'}, {'members': [{'name': 'nrb6-r10', 'size': [5], 'type': 'BIT ' 'STRING'}, {'name': 'nrb15-r10', 'size': [7], 'type': 'BIT ' 'STRING'}, {'name': 'nrb25-r10', 'size': [9], 'type': 'BIT ' 'STRING'}, {'name': 'nrb50-r10', 'size': [11], 'type': 'BIT ' 'STRING'}, {'name': 'nrb75-r10', 'size': [12], 'type': 'BIT ' 'STRING'}, {'name': 'nrb100-r10', 'size': [13], 'type': 'BIT ' 'STRING'}], 'name': 'type2-r10', 'type': 'CHOICE'}, None], 'name': 'resourceBlockAssignment-r10', 'type': 'CHOICE'}, {'members': [{'name': 'interleaving-r10', 'type': 'ENUMERATED', 'values': [('crs', 0)]}, {'name': 'noInterleaving-r10', 'type': 'ENUMERATED', 'values': [('crs', 0), ('dmrs', 1)]}], 'name': 'demodulationRS-r10', 'type': 'CHOICE'}, {'name': 'pdsch-Start-r10', 'restricted-to': [(1, 3)], 'type': 'INTEGER'}, {'members': [{'members': [{'members': [{'element': {'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, 'name': 'n1PUCCH-AN-List-r10', 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}], 'name': 'channelSelectionMultiplexingBundling', 'type': 'SEQUENCE'}, {'members': [{'name': 'n1PUCCH-AN-P0-r10', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'n1PUCCH-AN-P1-r10', 'optional': True, 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'name': 'fallbackForFormat3', 'type': 'SEQUENCE'}], 'name': 'tdd', 'type': 'CHOICE'}, {'members': [{'name': 'n1PUCCH-AN-P0-r10', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'n1PUCCH-AN-P1-r10', 'optional': True, 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'name': 'fdd', 'type': 'SEQUENCE'}], 'name': 'pucch-Config-r10', 'type': 'CHOICE'}, None], 'name': 'rpdcch-Config-r10', 'optional': True, 'type': 'SEQUENCE'}, None], 'type': 'SEQUENCE'}, 'RN-SystemInfo-r10': {'members': [{'name': 'systemInformationBlockType1-r10', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'systemInformationBlockType2-r10', 'optional': True, 'type': 'SystemInformationBlockType2'}, None], 'type': 'SEQUENCE'}, 'RNReconfiguration-r10': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rnReconfiguration-r10', 'type': 'RNReconfiguration-r10-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RNReconfiguration-r10-IEs': {'members': [{'name': 'rn-SystemInfo-r10', 'optional': True, 'type': 'RN-SystemInfo-r10'}, {'name': 'rn-SubframeConfig-r10', 'optional': True, 'type': 'RN-SubframeConfig-r10'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RNReconfigurationComplete-r10': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rnReconfigurationComplete-r10', 'type': 'RNReconfigurationComplete-r10-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RNReconfigurationComplete-r10-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRC-TransactionIdentifier': {'restricted-to': [(0, 3)], 'type': 'INTEGER'}, 'RRCConnectionReconfiguration': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionReconfiguration-r8', 'type': 'RRCConnectionReconfiguration-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-r8-IEs': {'members': [{'name': 'measConfig', 'optional': True, 'type': 'MeasConfig'}, {'name': 'mobilityControlInfo', 'optional': True, 'type': 'MobilityControlInfo'}, {'element': {'type': 'DedicatedInfoNAS'}, 'name': 'dedicatedInfoNASList', 'optional': True, 'size': [(1, 'maxDRB')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'radioResourceConfigDedicated', 'optional': True, 'type': 'RadioResourceConfigDedicated'}, {'name': 'securityConfigHO', 'optional': True, 'type': 'SecurityConfigHO'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfiguration-v890-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-v1020-IEs': {'members': [{'name': 'sCellToReleaseList-r10', 'optional': True, 'type': 'SCellToReleaseList-r10'}, {'name': 'sCellToAddModList-r10', 'optional': True, 'type': 'SCellToAddModList-r10'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfiguration-v1130-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-v10i0-IEs': {'members': [{'name': 'antennaInfoDedicatedPCell-v10i0', 'optional': True, 'type': 'AntennaInfoDedicated-v10i0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfiguration-v10l0-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-v10l0-IEs': {'members': [{'name': 'mobilityControlInfo-v10l0', 'optional': True, 'type': 'MobilityControlInfo-v10l0'}, {'name': 'sCellToAddModList-v10l0', 'optional': True, 'type': 'SCellToAddModList-v10l0'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfiguration-v12f0-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-v1130-IEs': {'members': [{'name': 'systemInformationBlockType1Dedicated-r11', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfiguration-v1250-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-v1250-IEs': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'wlan-OffloadConfigDedicated-r12', 'type': 'WLAN-OffloadConfig-r12'}, {'name': 't350-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('min5', 0), ('min10', 1), ('min20', 2), ('min30', 3), ('min60', 4), ('min120', 5), ('min180', 6), ('spare1', 7)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'wlan-OffloadInfo-r12', 'optional': True, 'type': 'CHOICE'}, {'name': 'scg-Configuration-r12', 'optional': True, 'type': 'SCG-Configuration-r12'}, {'name': 'sl-SyncTxControl-r12', 'optional': True, 'type': 'SL-SyncTxControl-r12'}, {'name': 'sl-DiscConfig-r12', 'optional': True, 'type': 'SL-DiscConfig-r12'}, {'name': 'sl-CommConfig-r12', 'optional': True, 'type': 'SL-CommConfig-r12'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfiguration-v1310-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-v12f0-IEs': {'members': [{'name': 'scg-Configuration-v12f0', 'optional': True, 'type': 'SCG-Configuration-v12f0'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfiguration-v1370-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-v1310-IEs': {'members': [{'name': 'sCellToReleaseListExt-r13', 'optional': True, 'type': 'SCellToReleaseListExt-r13'}, {'name': 'sCellToAddModListExt-r13', 'optional': True, 'type': 'SCellToAddModListExt-r13'}, {'name': 'lwa-Configuration-r13', 'optional': True, 'type': 'LWA-Configuration-r13'}, {'name': 'lwip-Configuration-r13', 'optional': True, 'type': 'LWIP-Configuration-r13'}, {'name': 'rclwi-Configuration-r13', 'optional': True, 'type': 'RCLWI-Configuration-r13'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfiguration-v1430-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-v1370-IEs': {'members': [{'name': 'radioResourceConfigDedicated-v1370', 'optional': True, 'type': 'RadioResourceConfigDedicated-v1370'}, {'name': 'sCellToAddModListExt-v1370', 'optional': True, 'type': 'SCellToAddModListExt-v1370'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-v1430-IEs': {'members': [{'name': 'sl-V2X-ConfigDedicated-r14', 'optional': True, 'type': 'SL-V2X-ConfigDedicated-r14'}, {'name': 'sCellToAddModListExt-v1430', 'optional': True, 'type': 'SCellToAddModListExt-v1430'}, {'name': 'perCC-GapIndicationRequest-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'systemInformationBlockType2Dedicated-r14', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-v890-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfiguration-v920-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-v8m0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfiguration-v10i0-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-v920-IEs': {'members': [{'name': 'otherConfig-r9', 'optional': True, 'type': 'OtherConfig-r9'}, {'name': 'fullConfig-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfiguration-v1020-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfigurationComplete': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'rrcConnectionReconfigurationComplete-r8', 'type': 'RRCConnectionReconfigurationComplete-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfigurationComplete-r8-IEs': {'members': [{'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfigurationComplete-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfigurationComplete-v1020-IEs': {'members': [{'name': 'rlf-InfoAvailable-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'logMeasAvailable-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfigurationComplete-v1130-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfigurationComplete-v1130-IEs': {'members': [{'name': 'connEstFailInfoAvailable-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfigurationComplete-v1250-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfigurationComplete-v1250-IEs': {'members': [{'name': 'logMeasAvailableMBSFN-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfigurationComplete-v1430-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfigurationComplete-v1430-IEs': {'members': [{'name': 'perCC-GapIndicationList-r14', 'optional': True, 'type': 'PerCC-GapIndicationList-r14'}, {'name': 'numFreqEffective-r14', 'optional': True, 'restricted-to': [(1, 12)], 'type': 'INTEGER'}, {'name': 'numFreqEffectiveReduced-r14', 'optional': True, 'restricted-to': [(1, 12)], 'type': 'INTEGER'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfigurationComplete-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReconfigurationComplete-v1020-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishment': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionReestablishment-r8', 'type': 'RRCConnectionReestablishment-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishment-r8-IEs': {'members': [{'name': 'radioResourceConfigDedicated', 'type': 'RadioResourceConfigDedicated'}, {'name': 'nextHopChainingCount', 'type': 'NextHopChainingCount'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReestablishment-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishment-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentComplete': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'rrcConnectionReestablishmentComplete-r8', 'type': 'RRCConnectionReestablishmentComplete-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentComplete-r8-IEs': {'members': [{'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReestablishmentComplete-v920-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentComplete-v1020-IEs': {'members': [{'name': 'logMeasAvailable-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReestablishmentComplete-v1130-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentComplete-v1130-IEs': {'members': [{'name': 'connEstFailInfoAvailable-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReestablishmentComplete-v1250-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentComplete-v1250-IEs': {'members': [{'name': 'logMeasAvailableMBSFN-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentComplete-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReestablishmentComplete-v1020-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentComplete-v920-IEs': {'members': [{'name': 'rlf-InfoAvailable-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReestablishmentComplete-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentReject': {'members': [{'members': [{'name': 'rrcConnectionReestablishmentReject-r8', 'type': 'RRCConnectionReestablishmentReject-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentReject-r8-IEs': {'members': [{'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReestablishmentReject-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentReject-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentRequest': {'members': [{'members': [{'name': 'rrcConnectionReestablishmentRequest-r8', 'type': 'RRCConnectionReestablishmentRequest-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentRequest-r8-IEs': {'members': [{'name': 'ue-Identity', 'type': 'ReestabUE-Identity'}, {'name': 'reestablishmentCause', 'type': 'ReestablishmentCause'}, {'name': 'spare', 'size': [2], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'RRCConnectionReject': {'members': [{'members': [{'members': [{'name': 'rrcConnectionReject-r8', 'type': 'RRCConnectionReject-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReject-r8-IEs': {'members': [{'name': 'waitTime', 'restricted-to': [(1, 16)], 'type': 'INTEGER'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReject-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReject-v1020-IEs': {'members': [{'name': 'extendedWaitTime-r10', 'optional': True, 'restricted-to': [(1, 1800)], 'type': 'INTEGER'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReject-v1130-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReject-v1130-IEs': {'members': [{'members': [{'name': 'deprioritisationType-r11', 'type': 'ENUMERATED', 'values': [('frequency', 0), ('e-utra', 1)]}, {'name': 'deprioritisationTimer-r11', 'type': 'ENUMERATED', 'values': [('min5', 0), ('min10', 1), ('min15', 2), ('min30', 3)]}], 'name': 'deprioritisationReq-r11', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReject-v1320-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReject-v1320-IEs': {'members': [{'name': 'rrc-SuspendIndication-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReject-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReject-v1020-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionRelease': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionRelease-r8', 'type': 'RRCConnectionRelease-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionRelease-r8-IEs': {'members': [{'name': 'releaseCause', 'type': 'ReleaseCause'}, {'name': 'redirectedCarrierInfo', 'optional': True, 'type': 'RedirectedCarrierInfo'}, {'name': 'idleModeMobilityControlInfo', 'optional': True, 'type': 'IdleModeMobilityControlInfo'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionRelease-v890-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionRelease-v1020-IEs': {'members': [{'name': 'extendedWaitTime-r10', 'optional': True, 'restricted-to': [(1, 1800)], 'type': 'INTEGER'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionRelease-v1320-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionRelease-v1320-IEs': {'members': [{'name': 'resumeIdentity-r13', 'optional': True, 'type': 'ResumeIdentity-r13'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionRelease-v890-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionRelease-v920-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionRelease-v920-IEs': {'members': [{'members': [{'name': 'geran-r9', 'type': 'CellInfoListGERAN-r9'}, {'name': 'utra-FDD-r9', 'type': 'CellInfoListUTRA-FDD-r9'}, {'name': 'utra-TDD-r9', 'type': 'CellInfoListUTRA-TDD-r9'}, None, {'name': 'utra-TDD-r10', 'type': 'CellInfoListUTRA-TDD-r10'}], 'name': 'cellInfoList-r9', 'optional': True, 'type': 'CHOICE'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionRelease-v1020-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionRelease-v9e0-IEs': {'members': [{'name': 'redirectedCarrierInfo-v9e0', 'optional': True, 'type': 'RedirectedCarrierInfo-v9e0'}, {'name': 'idleModeMobilityControlInfo-v9e0', 'optional': True, 'type': 'IdleModeMobilityControlInfo-v9e0'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionRequest': {'members': [{'members': [{'name': 'rrcConnectionRequest-r8', 'type': 'RRCConnectionRequest-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionRequest-r8-IEs': {'members': [{'name': 'ue-Identity', 'type': 'InitialUE-Identity'}, {'name': 'establishmentCause', 'type': 'EstablishmentCause'}, {'name': 'spare', 'size': [1], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'RRCConnectionResume-r13': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionResume-r13', 'type': 'RRCConnectionResume-r13-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionResume-r13-IEs': {'members': [{'name': 'radioResourceConfigDedicated-r13', 'optional': True, 'type': 'RadioResourceConfigDedicated'}, {'name': 'nextHopChainingCount-r13', 'type': 'NextHopChainingCount'}, {'name': 'measConfig-r13', 'optional': True, 'type': 'MeasConfig'}, {'name': 'antennaInfoDedicatedPCell-r13', 'optional': True, 'type': 'AntennaInfoDedicated-v10i0'}, {'name': 'drb-ContinueROHC-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'rrcConnectionResume-v1430-IEs', 'optional': True, 'type': 'RRCConnectionResume-v1430-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionResume-v1430-IEs': {'members': [{'name': 'otherConfig-r14', 'optional': True, 'type': 'OtherConfig-r9'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionResumeComplete-r13': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'rrcConnectionResumeComplete-r13', 'type': 'RRCConnectionResumeComplete-r13-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionResumeComplete-r13-IEs': {'members': [{'name': 'selectedPLMN-Identity-r13', 'optional': True, 'restricted-to': [(1, 'maxPLMN-r11')], 'type': 'INTEGER'}, {'name': 'dedicatedInfoNAS-r13', 'optional': True, 'type': 'DedicatedInfoNAS'}, {'name': 'rlf-InfoAvailable-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'logMeasAvailable-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'connEstFailInfoAvailable-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'mobilityState-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('normal', 0), ('medium', 1), ('high', 2), ('spare', 3)]}, {'name': 'mobilityHistoryAvail-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'logMeasAvailableMBSFN-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionResumeRequest-r13': {'members': [{'members': [{'name': 'rrcConnectionResumeRequest-r13', 'type': 'RRCConnectionResumeRequest-r13-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionResumeRequest-r13-IEs': {'members': [{'members': [{'name': 'resumeID-r13', 'type': 'ResumeIdentity-r13'}, {'name': 'truncatedResumeID-r13', 'size': [24], 'type': 'BIT ' 'STRING'}], 'name': 'resumeIdentity-r13', 'type': 'CHOICE'}, {'name': 'shortResumeMAC-I-r13', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'resumeCause-r13', 'type': 'ResumeCause'}, {'name': 'spare', 'size': [1], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetup': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionSetup-r8', 'type': 'RRCConnectionSetup-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetup-r8-IEs': {'members': [{'name': 'radioResourceConfigDedicated', 'type': 'RadioResourceConfigDedicated'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionSetup-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetup-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionSetupComplete-r8', 'type': 'RRCConnectionSetupComplete-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete-r8-IEs': {'members': [{'name': 'selectedPLMN-Identity', 'restricted-to': [(1, 'maxPLMN-r11')], 'type': 'INTEGER'}, {'name': 'registeredMME', 'optional': True, 'type': 'RegisteredMME'}, {'name': 'dedicatedInfoNAS', 'type': 'DedicatedInfoNAS'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionSetupComplete-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete-v1020-IEs': {'members': [{'name': 'gummei-Type-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('native', 0), ('mapped', 1)]}, {'name': 'rlf-InfoAvailable-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'logMeasAvailable-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'rn-SubframeConfigReq-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('required', 0), ('notRequired', 1)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionSetupComplete-v1130-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete-v1130-IEs': {'members': [{'name': 'connEstFailInfoAvailable-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionSetupComplete-v1250-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete-v1250-IEs': {'members': [{'name': 'mobilityState-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('normal', 0), ('medium', 1), ('high', 2), ('spare', 3)]}, {'name': 'mobilityHistoryAvail-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'logMeasAvailableMBSFN-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionSetupComplete-v1320-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete-v1320-IEs': {'members': [{'name': 'ce-ModeB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 's-TMSI-r13', 'optional': True, 'type': 'S-TMSI'}, {'name': 'attachWithoutPDN-Connectivity-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'up-CIoT-EPS-Optimisation-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'cp-CIoT-EPS-Optimisation-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionSetupComplete-v1330-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete-v1330-IEs': {'members': [{'name': 'ue-CE-NeedULGaps-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionSetupComplete-v1430-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete-v1430-IEs': {'members': [{'name': 'dcn-ID-r14', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionSetupComplete-v1020-IEs'}], 'type': 'SEQUENCE'}, 'RS-SINR-Range-r13': {'restricted-to': [(0, 127)], 'type': 'INTEGER'}, 'RSRP-Range': {'restricted-to': [(0, 97)], 'type': 'INTEGER'}, 'RSRP-Range-v1360': {'restricted-to': [(-17, -1)], 'type': 'INTEGER'}, 'RSRP-RangeSL-r12': {'restricted-to': [(0, 13)], 'type': 'INTEGER'}, 'RSRP-RangeSL2-r12': {'restricted-to': [(0, 7)], 'type': 'INTEGER'}, 'RSRP-RangeSL3-r12': {'restricted-to': [(0, 11)], 'type': 'INTEGER'}, 'RSRP-RangeSL4-r13': {'restricted-to': [(0, 49)], 'type': 'INTEGER'}, 'RSRP-ThresholdsPrachInfoList-r13': {'element': {'type': 'RSRP-Range'}, 'size': [(1, 3)], 'type': 'SEQUENCE ' 'OF'}, 'RSRQ-Range': {'restricted-to': [(0, 34)], 'type': 'INTEGER'}, 'RSRQ-Range-r13': {'restricted-to': [(-30, 46)], 'type': 'INTEGER'}, 'RSRQ-Range-v1250': {'restricted-to': [(-30, 46)], 'type': 'INTEGER'}, 'RSRQ-RangeConfig-r12': {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'RSRQ-Range-v1250'}], 'type': 'CHOICE'}, 'RSRQ-Type-r12': {'members': [{'name': 'allSymbols-r12', 'type': 'BOOLEAN'}, {'name': 'wideBand-r12', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'RSSI-Range-r13': {'restricted-to': [(0, 76)], 'type': 'INTEGER'}, 'RSTD-InterFreqInfo-r10': {'members': [{'name': 'carrierFreq-r10', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'measPRS-Offset-r10', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, None, [{'name': 'carrierFreq-v1090', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9e0'}]], 'type': 'SEQUENCE'}, 'RSTD-InterFreqInfoList-r10': {'element': {'type': 'RSTD-InterFreqInfo-r10'}, 'size': [(1, 'maxRSTD-Freq-r10')], 'type': 'SEQUENCE ' 'OF'}, 'RadioResourceConfigCommon': {'members': [{'name': 'rach-ConfigCommon', 'optional': True, 'type': 'RACH-ConfigCommon'}, {'name': 'prach-Config', 'type': 'PRACH-Config'}, {'name': 'pdsch-ConfigCommon', 'optional': True, 'type': 'PDSCH-ConfigCommon'}, {'name': 'pusch-ConfigCommon', 'type': 'PUSCH-ConfigCommon'}, {'name': 'phich-Config', 'optional': True, 'type': 'PHICH-Config'}, {'name': 'pucch-ConfigCommon', 'optional': True, 'type': 'PUCCH-ConfigCommon'}, {'name': 'soundingRS-UL-ConfigCommon', 'optional': True, 'type': 'SoundingRS-UL-ConfigCommon'}, {'name': 'uplinkPowerControlCommon', 'optional': True, 'type': 'UplinkPowerControlCommon'}, {'name': 'antennaInfoCommon', 'optional': True, 'type': 'AntennaInfoCommon'}, {'name': 'p-Max', 'optional': True, 'type': 'P-Max'}, {'name': 'tdd-Config', 'optional': True, 'type': 'TDD-Config'}, {'name': 'ul-CyclicPrefixLength', 'type': 'UL-CyclicPrefixLength'}, None, [{'name': 'uplinkPowerControlCommon-v1020', 'optional': True, 'type': 'UplinkPowerControlCommon-v1020'}], [{'name': 'tdd-Config-v1130', 'optional': True, 'type': 'TDD-Config-v1130'}], [{'name': 'pusch-ConfigCommon-v1270', 'optional': True, 'type': 'PUSCH-ConfigCommon-v1270'}], [{'name': 'prach-Config-v1310', 'optional': True, 'type': 'PRACH-Config-v1310'}, {'name': 'freqHoppingParameters-r13', 'optional': True, 'type': 'FreqHoppingParameters-r13'}, {'name': 'pdsch-ConfigCommon-v1310', 'optional': True, 'type': 'PDSCH-ConfigCommon-v1310'}, {'name': 'pucch-ConfigCommon-v1310', 'optional': True, 'type': 'PUCCH-ConfigCommon-v1310'}, {'name': 'pusch-ConfigCommon-v1310', 'optional': True, 'type': 'PUSCH-ConfigCommon-v1310'}, {'name': 'uplinkPowerControlCommon-v1310', 'optional': True, 'type': 'UplinkPowerControlCommon-v1310'}], [{'name': 'highSpeedConfig-r14', 'optional': True, 'type': 'HighSpeedConfig-r14'}, {'name': 'prach-Config-v1430', 'optional': True, 'type': 'PRACH-Config-v1430'}, {'name': 'pucch-ConfigCommon-v1430', 'optional': True, 'type': 'PUCCH-ConfigCommon-v1430'}, {'name': 'tdd-Config-v1430', 'optional': True, 'type': 'TDD-Config-v1430'}]], 'type': 'SEQUENCE'}, 'RadioResourceConfigCommonPSCell-r12': {'members': [{'name': 'basicFields-r12', 'type': 'RadioResourceConfigCommonSCell-r10'}, {'name': 'pucch-ConfigCommon-r12', 'type': 'PUCCH-ConfigCommon'}, {'name': 'rach-ConfigCommon-r12', 'type': 'RACH-ConfigCommon'}, {'name': 'uplinkPowerControlCommonPSCell-r12', 'type': 'UplinkPowerControlCommonPSCell-r12'}, None, [{'name': 'uplinkPowerControlCommonPSCell-v1310', 'optional': True, 'type': 'UplinkPowerControlCommon-v1310'}]], 'type': 'SEQUENCE'}, 'RadioResourceConfigCommonPSCell-v12f0': {'members': [{'name': 'basicFields-v12f0', 'type': 'RadioResourceConfigCommonSCell-v10l0'}], 'type': 'SEQUENCE'}, 'RadioResourceConfigCommonPSCell-v1440': {'members': [{'name': 'basicFields-v1440', 'type': 'RadioResourceConfigCommonSCell-v1440'}], 'type': 'SEQUENCE'}, 'RadioResourceConfigCommonSCell-r10': {'members': [{'members': [{'name': 'dl-Bandwidth-r10', 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'antennaInfoCommon-r10', 'type': 'AntennaInfoCommon'}, {'name': 'mbsfn-SubframeConfigList-r10', 'optional': True, 'type': 'MBSFN-SubframeConfigList'}, {'name': 'phich-Config-r10', 'type': 'PHICH-Config'}, {'name': 'pdsch-ConfigCommon-r10', 'type': 'PDSCH-ConfigCommon'}, {'name': 'tdd-Config-r10', 'optional': True, 'type': 'TDD-Config'}], 'name': 'nonUL-Configuration-r10', 'type': 'SEQUENCE'}, {'members': [{'members': [{'name': 'ul-CarrierFreq-r10', 'optional': True, 'type': 'ARFCN-ValueEUTRA'}, {'name': 'ul-Bandwidth-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'additionalSpectrumEmissionSCell-r10', 'type': 'AdditionalSpectrumEmission'}], 'name': 'ul-FreqInfo-r10', 'type': 'SEQUENCE'}, {'name': 'p-Max-r10', 'optional': True, 'type': 'P-Max'}, {'name': 'uplinkPowerControlCommonSCell-r10', 'type': 'UplinkPowerControlCommonSCell-r10'}, {'name': 'soundingRS-UL-ConfigCommon-r10', 'type': 'SoundingRS-UL-ConfigCommon'}, {'name': 'ul-CyclicPrefixLength-r10', 'type': 'UL-CyclicPrefixLength'}, {'name': 'prach-ConfigSCell-r10', 'optional': True, 'type': 'PRACH-ConfigSCell-r10'}, {'name': 'pusch-ConfigCommon-r10', 'type': 'PUSCH-ConfigCommon'}], 'name': 'ul-Configuration-r10', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'ul-CarrierFreq-v1090', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9e0'}], [{'name': 'rach-ConfigCommonSCell-r11', 'optional': True, 'type': 'RACH-ConfigCommonSCell-r11'}, {'name': 'prach-ConfigSCell-r11', 'optional': True, 'type': 'PRACH-Config'}, {'name': 'tdd-Config-v1130', 'optional': True, 'type': 'TDD-Config-v1130'}, {'name': 'uplinkPowerControlCommonSCell-v1130', 'optional': True, 'type': 'UplinkPowerControlCommonSCell-v1130'}], [{'name': 'pusch-ConfigCommon-v1270', 'optional': True, 'type': 'PUSCH-ConfigCommon-v1270'}], [{'name': 'pucch-ConfigCommon-r13', 'optional': True, 'type': 'PUCCH-ConfigCommon'}, {'name': 'uplinkPowerControlCommonSCell-v1310', 'optional': True, 'type': 'UplinkPowerControlCommonSCell-v1310'}], [{'name': 'highSpeedConfigSCell-r14', 'optional': True, 'type': 'HighSpeedConfigSCell-r14'}, {'name': 'prach-Config-v1430', 'optional': True, 'type': 'PRACH-Config-v1430'}, {'members': [{'members': [{'name': 'ul-CarrierFreq-r14', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'ul-Bandwidth-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'additionalSpectrumEmissionSCell-r14', 'type': 'AdditionalSpectrumEmission'}], 'name': 'ul-FreqInfo-r14', 'type': 'SEQUENCE'}, {'name': 'p-Max-r14', 'optional': True, 'type': 'P-Max'}, {'name': 'soundingRS-UL-ConfigCommon-r14', 'type': 'SoundingRS-UL-ConfigCommon'}, {'name': 'ul-CyclicPrefixLength-r14', 'type': 'UL-CyclicPrefixLength'}, {'name': 'prach-ConfigSCell-r14', 'optional': True, 'type': 'PRACH-ConfigSCell-r10'}, {'name': 'uplinkPowerControlCommonPUSCH-LessCell-v1430', 'optional': True, 'type': 'UplinkPowerControlCommonPUSCH-LessCell-v1430'}], 'name': 'ul-Configuration-r14', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'harq-ReferenceConfig-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('sa2', 0), ('sa4', 1), ('sa5', 2)]}, {'name': 'soundingRS-FlexibleTiming-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], [{'name': 'mbsfn-SubframeConfigList-v1430', 'optional': True, 'type': 'MBSFN-SubframeConfigList-v1430'}]], 'type': 'SEQUENCE'}, 'RadioResourceConfigCommonSCell-v10l0': {'members': [{'members': [{'name': 'additionalSpectrumEmissionSCell-v10l0', 'type': 'AdditionalSpectrumEmission-v10l0'}], 'name': 'ul-Configuration-v10l0', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RadioResourceConfigCommonSCell-v1440': {'members': [{'members': [{'members': [{'name': 'additionalSpectrumEmissionSCell-v1440', 'type': 'AdditionalSpectrumEmission-v10l0'}], 'name': 'ul-FreqInfo-v1440', 'type': 'SEQUENCE'}], 'name': 'ul-Configuration-v1440', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RadioResourceConfigCommonSIB': {'members': [{'name': 'rach-ConfigCommon', 'type': 'RACH-ConfigCommon'}, {'name': 'bcch-Config', 'type': 'BCCH-Config'}, {'name': 'pcch-Config', 'type': 'PCCH-Config'}, {'name': 'prach-Config', 'type': 'PRACH-ConfigSIB'}, {'name': 'pdsch-ConfigCommon', 'type': 'PDSCH-ConfigCommon'}, {'name': 'pusch-ConfigCommon', 'type': 'PUSCH-ConfigCommon'}, {'name': 'pucch-ConfigCommon', 'type': 'PUCCH-ConfigCommon'}, {'name': 'soundingRS-UL-ConfigCommon', 'type': 'SoundingRS-UL-ConfigCommon'}, {'name': 'uplinkPowerControlCommon', 'type': 'UplinkPowerControlCommon'}, {'name': 'ul-CyclicPrefixLength', 'type': 'UL-CyclicPrefixLength'}, None, [{'name': 'uplinkPowerControlCommon-v1020', 'optional': True, 'type': 'UplinkPowerControlCommon-v1020'}], [{'name': 'rach-ConfigCommon-v1250', 'optional': True, 'type': 'RACH-ConfigCommon-v1250'}], [{'name': 'pusch-ConfigCommon-v1270', 'optional': True, 'type': 'PUSCH-ConfigCommon-v1270'}], [{'name': 'bcch-Config-v1310', 'optional': True, 'type': 'BCCH-Config-v1310'}, {'name': 'pcch-Config-v1310', 'optional': True, 'type': 'PCCH-Config-v1310'}, {'name': 'freqHoppingParameters-r13', 'optional': True, 'type': 'FreqHoppingParameters-r13'}, {'name': 'pdsch-ConfigCommon-v1310', 'optional': True, 'type': 'PDSCH-ConfigCommon-v1310'}, {'name': 'pusch-ConfigCommon-v1310', 'optional': True, 'type': 'PUSCH-ConfigCommon-v1310'}, {'name': 'prach-ConfigCommon-v1310', 'optional': True, 'type': 'PRACH-ConfigSIB-v1310'}, {'name': 'pucch-ConfigCommon-v1310', 'optional': True, 'type': 'PUCCH-ConfigCommon-v1310'}], [{'name': 'highSpeedConfig-r14', 'optional': True, 'type': 'HighSpeedConfig-r14'}, {'name': 'prach-Config-v1430', 'optional': True, 'type': 'PRACH-Config-v1430'}, {'name': 'pucch-ConfigCommon-v1430', 'optional': True, 'type': 'PUCCH-ConfigCommon-v1430'}]], 'type': 'SEQUENCE'}, 'RadioResourceConfigDedicated': {'members': [{'name': 'srb-ToAddModList', 'optional': True, 'type': 'SRB-ToAddModList'}, {'name': 'drb-ToAddModList', 'optional': True, 'type': 'DRB-ToAddModList'}, {'name': 'drb-ToReleaseList', 'optional': True, 'type': 'DRB-ToReleaseList'}, {'members': [{'name': 'explicitValue', 'type': 'MAC-MainConfig'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'mac-MainConfig', 'optional': True, 'type': 'CHOICE'}, {'name': 'sps-Config', 'optional': True, 'type': 'SPS-Config'}, {'name': 'physicalConfigDedicated', 'optional': True, 'type': 'PhysicalConfigDedicated'}, None, [{'name': 'rlf-TimersAndConstants-r9', 'optional': True, 'type': 'RLF-TimersAndConstants-r9'}], [{'name': 'measSubframePatternPCell-r10', 'optional': True, 'type': 'MeasSubframePatternPCell-r10'}], [{'name': 'neighCellsCRS-Info-r11', 'optional': True, 'type': 'NeighCellsCRS-Info-r11'}], [{'name': 'naics-Info-r12', 'optional': True, 'type': 'NAICS-AssistanceInfo-r12'}], [{'name': 'neighCellsCRS-Info-r13', 'optional': True, 'type': 'NeighCellsCRS-Info-r13'}, {'name': 'rlf-TimersAndConstants-r13', 'optional': True, 'type': 'RLF-TimersAndConstants-r13'}], [{'name': 'sps-Config-v1430', 'optional': True, 'type': 'SPS-Config-v1430'}]], 'type': 'SEQUENCE'}, 'RadioResourceConfigDedicated-v1370': {'members': [{'name': 'physicalConfigDedicated-v1370', 'optional': True, 'type': 'PhysicalConfigDedicated-v1370'}], 'type': 'SEQUENCE'}, 'RadioResourceConfigDedicatedPSCell-r12': {'members': [{'name': 'physicalConfigDedicatedPSCell-r12', 'optional': True, 'type': 'PhysicalConfigDedicated'}, {'name': 'sps-Config-r12', 'optional': True, 'type': 'SPS-Config'}, {'name': 'naics-Info-r12', 'optional': True, 'type': 'NAICS-AssistanceInfo-r12'}, None, [{'name': 'neighCellsCRS-InfoPSCell-r13', 'optional': True, 'type': 'NeighCellsCRS-Info-r13'}], [{'name': 'sps-Config-v1430', 'optional': True, 'type': 'SPS-Config-v1430'}]], 'type': 'SEQUENCE'}, 'RadioResourceConfigDedicatedPSCell-v1370': {'members': [{'name': 'physicalConfigDedicatedPSCell-v1370', 'optional': True, 'type': 'PhysicalConfigDedicated-v1370'}], 'type': 'SEQUENCE'}, 'RadioResourceConfigDedicatedSCG-r12': {'members': [{'name': 'drb-ToAddModListSCG-r12', 'optional': True, 'type': 'DRB-ToAddModListSCG-r12'}, {'name': 'mac-MainConfigSCG-r12', 'optional': True, 'type': 'MAC-MainConfig'}, {'name': 'rlf-TimersAndConstantsSCG-r12', 'optional': True, 'type': 'RLF-TimersAndConstantsSCG-r12'}, None], 'type': 'SEQUENCE'}, 'RadioResourceConfigDedicatedSCell-r10': {'members': [{'name': 'physicalConfigDedicatedSCell-r10', 'optional': True, 'type': 'PhysicalConfigDedicatedSCell-r10'}, None, [{'name': 'mac-MainConfigSCell-r11', 'optional': True, 'type': 'MAC-MainConfigSCell-r11'}], [{'name': 'naics-Info-r12', 'optional': True, 'type': 'NAICS-AssistanceInfo-r12'}], [{'name': 'neighCellsCRS-InfoSCell-r13', 'optional': True, 'type': 'NeighCellsCRS-Info-r13'}], [{'name': 'physicalConfigDedicatedSCell-v1370', 'optional': True, 'type': 'PhysicalConfigDedicatedSCell-v1370'}]], 'type': 'SEQUENCE'}, 'RedirectedCarrierInfo': {'members': [{'name': 'eutra', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'geran', 'type': 'CarrierFreqsGERAN'}, {'name': 'utra-FDD', 'type': 'ARFCN-ValueUTRA'}, {'name': 'utra-TDD', 'type': 'ARFCN-ValueUTRA'}, {'name': 'cdma2000-HRPD', 'type': 'CarrierFreqCDMA2000'}, {'name': 'cdma2000-1xRTT', 'type': 'CarrierFreqCDMA2000'}, None, {'name': 'utra-TDD-r10', 'type': 'CarrierFreqListUTRA-TDD-r10'}], 'type': 'CHOICE'}, 'RedirectedCarrierInfo-v9e0': {'members': [{'name': 'eutra-v9e0', 'type': 'ARFCN-ValueEUTRA-v9e0'}], 'type': 'SEQUENCE'}, 'RedistributionFactor-r13': {'restricted-to': [(1, 10)], 'type': 'INTEGER'}, 'RedistributionInterFreqInfo-r13': {'members': [{'name': 'redistributionFactorFreq-r13', 'optional': True, 'type': 'RedistributionFactor-r13'}, {'name': 'redistributionNeighCellList-r13', 'optional': True, 'type': 'RedistributionNeighCellList-r13'}], 'type': 'SEQUENCE'}, 'RedistributionNeighCell-r13': {'members': [{'name': 'physCellId-r13', 'type': 'PhysCellId'}, {'name': 'redistributionFactorCell-r13', 'type': 'RedistributionFactor-r13'}], 'type': 'SEQUENCE'}, 'RedistributionNeighCellList-r13': {'element': {'type': 'RedistributionNeighCell-r13'}, 'size': [(1, 'maxCellInter')], 'type': 'SEQUENCE ' 'OF'}, 'RedistributionServingInfo-r13': {'members': [{'name': 'redistributionFactorServing-r13', 'restricted-to': [(0, 10)], 'type': 'INTEGER'}, {'name': 'redistributionFactorCell-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 't360-r13', 'type': 'ENUMERATED', 'values': [('min4', 0), ('min8', 1), ('min16', 2), ('min32', 3), ('infinity', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 'redistrOnPagingOnly-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'ReestabUE-Identity': {'members': [{'name': 'c-RNTI', 'type': 'C-RNTI'}, {'name': 'physCellId', 'type': 'PhysCellId'}, {'name': 'shortMAC-I', 'type': 'ShortMAC-I'}], 'type': 'SEQUENCE'}, 'ReestablishmentCause': {'type': 'ENUMERATED', 'values': [('reconfigurationFailure', 0), ('handoverFailure', 1), ('otherFailure', 2), ('spare1', 3)]}, 'RegisteredMME': {'members': [{'name': 'plmn-Identity', 'optional': True, 'type': 'PLMN-Identity'}, {'name': 'mmegi', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'mmec', 'type': 'MMEC'}], 'type': 'SEQUENCE'}, 'ReleaseCause': {'type': 'ENUMERATED', 'values': [('loadBalancingTAUrequired', 0), ('other', 1), ('cs-FallbackHighPriority-v1020', 2), ('rrc-Suspend-v1320', 3)]}, 'ReportConfigEUTRA': {'members': [{'members': [{'members': [{'members': [{'members': [{'name': 'a1-Threshold', 'type': 'ThresholdEUTRA'}], 'name': 'eventA1', 'type': 'SEQUENCE'}, {'members': [{'name': 'a2-Threshold', 'type': 'ThresholdEUTRA'}], 'name': 'eventA2', 'type': 'SEQUENCE'}, {'members': [{'name': 'a3-Offset', 'restricted-to': [(-30, 30)], 'type': 'INTEGER'}, {'name': 'reportOnLeave', 'type': 'BOOLEAN'}], 'name': 'eventA3', 'type': 'SEQUENCE'}, {'members': [{'name': 'a4-Threshold', 'type': 'ThresholdEUTRA'}], 'name': 'eventA4', 'type': 'SEQUENCE'}, {'members': [{'name': 'a5-Threshold1', 'type': 'ThresholdEUTRA'}, {'name': 'a5-Threshold2', 'type': 'ThresholdEUTRA'}], 'name': 'eventA5', 'type': 'SEQUENCE'}, None, {'members': [{'name': 'a6-Offset-r10', 'restricted-to': [(-30, 30)], 'type': 'INTEGER'}, {'name': 'a6-ReportOnLeave-r10', 'type': 'BOOLEAN'}], 'name': 'eventA6-r10', 'type': 'SEQUENCE'}, {'members': [{'name': 'c1-Threshold-r12', 'type': 'ThresholdEUTRA-v1250'}, {'name': 'c1-ReportOnLeave-r12', 'type': 'BOOLEAN'}], 'name': 'eventC1-r12', 'type': 'SEQUENCE'}, {'members': [{'name': 'c2-RefCSI-RS-r12', 'type': 'MeasCSI-RS-Id-r12'}, {'name': 'c2-Offset-r12', 'restricted-to': [(-30, 30)], 'type': 'INTEGER'}, {'name': 'c2-ReportOnLeave-r12', 'type': 'BOOLEAN'}], 'name': 'eventC2-r12', 'type': 'SEQUENCE'}, {'members': [{'name': 'v1-Threshold-r14', 'type': 'SL-CBR-r14'}], 'name': 'eventV1-r14', 'type': 'SEQUENCE'}, {'members': [{'name': 'v2-Threshold-r14', 'type': 'SL-CBR-r14'}], 'name': 'eventV2-r14', 'type': 'SEQUENCE'}], 'name': 'eventId', 'type': 'CHOICE'}, {'name': 'hysteresis', 'type': 'Hysteresis'}, {'name': 'timeToTrigger', 'type': 'TimeToTrigger'}], 'name': 'event', 'type': 'SEQUENCE'}, {'members': [{'name': 'purpose', 'type': 'ENUMERATED', 'values': [('reportStrongestCells', 0), ('reportCGI', 1)]}], 'name': 'periodical', 'type': 'SEQUENCE'}], 'name': 'triggerType', 'type': 'CHOICE'}, {'name': 'triggerQuantity', 'type': 'ENUMERATED', 'values': [('rsrp', 0), ('rsrq', 1)]}, {'name': 'reportQuantity', 'type': 'ENUMERATED', 'values': [('sameAsTriggerQuantity', 0), ('both', 1)]}, {'name': 'maxReportCells', 'restricted-to': [(1, 'maxCellReport')], 'type': 'INTEGER'}, {'name': 'reportInterval', 'type': 'ReportInterval'}, {'name': 'reportAmount', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('infinity', 7)]}, None, [{'name': 'si-RequestForHO-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}, {'name': 'ue-RxTxTimeDiffPeriodical-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], [{'name': 'includeLocationInfo-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'reportAddNeighMeas-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'TimeToTrigger'}], 'name': 'alternativeTimeToTrigger-r12', 'optional': True, 'type': 'CHOICE'}, {'name': 'useT312-r12', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'usePSCell-r12', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'aN-Threshold1-v1250', 'optional': True, 'type': 'RSRQ-RangeConfig-r12'}, {'name': 'a5-Threshold2-v1250', 'optional': True, 'type': 'RSRQ-RangeConfig-r12'}, {'name': 'reportStrongestCSI-RSs-r12', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'reportCRS-Meas-r12', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'triggerQuantityCSI-RS-r12', 'optional': True, 'type': 'BOOLEAN'}], [{'name': 'reportSSTD-Meas-r13', 'optional': True, 'type': 'BOOLEAN'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'triggerQuantity-v1310', 'optional': True, 'type': 'ENUMERATED', 'values': [('sinr', 0)]}, {'name': 'aN-Threshold1-r13', 'optional': True, 'type': 'RS-SINR-Range-r13'}, {'name': 'a5-Threshold2-r13', 'optional': True, 'type': 'RS-SINR-Range-r13'}, {'name': 'reportQuantity-v1310', 'type': 'ENUMERATED', 'values': [('rsrpANDsinr', 0), ('rsrqANDsinr', 1), ('all', 2)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'rs-sinr-Config-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'useWhiteCellList-r13', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'measRSSI-ReportConfig-r13', 'optional': True, 'type': 'MeasRSSI-ReportConfig-r13'}, {'name': 'includeMultiBandInfo-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'ul-DelayConfig-r13', 'optional': True, 'type': 'UL-DelayConfig-r13'}], [{'name': 'ue-RxTxTimeDiffPeriodicalTDD-r13', 'optional': True, 'type': 'BOOLEAN'}], [{'name': 'purpose-v1430', 'optional': True, 'type': 'ENUMERATED', 'values': [('reportLocation', 0), ('sidelink', 1), ('spare2', 2), ('spare1', 3)]}]], 'type': 'SEQUENCE'}, 'ReportConfigId': {'restricted-to': [(1, 'maxReportConfigId')], 'type': 'INTEGER'}, 'ReportConfigInterRAT': {'members': [{'members': [{'members': [{'members': [{'members': [{'members': [{'name': 'b1-ThresholdUTRA', 'type': 'ThresholdUTRA'}, {'name': 'b1-ThresholdGERAN', 'type': 'ThresholdGERAN'}, {'name': 'b1-ThresholdCDMA2000', 'type': 'ThresholdCDMA2000'}], 'name': 'b1-Threshold', 'type': 'CHOICE'}], 'name': 'eventB1', 'type': 'SEQUENCE'}, {'members': [{'name': 'b2-Threshold1', 'type': 'ThresholdEUTRA'}, {'members': [{'name': 'b2-Threshold2UTRA', 'type': 'ThresholdUTRA'}, {'name': 'b2-Threshold2GERAN', 'type': 'ThresholdGERAN'}, {'name': 'b2-Threshold2CDMA2000', 'type': 'ThresholdCDMA2000'}], 'name': 'b2-Threshold2', 'type': 'CHOICE'}], 'name': 'eventB2', 'type': 'SEQUENCE'}, None, {'members': [{'name': 'w1-Threshold-r13', 'type': 'WLAN-RSSI-Range-r13'}], 'name': 'eventW1-r13', 'type': 'SEQUENCE'}, {'members': [{'name': 'w2-Threshold1-r13', 'type': 'WLAN-RSSI-Range-r13'}, {'name': 'w2-Threshold2-r13', 'type': 'WLAN-RSSI-Range-r13'}], 'name': 'eventW2-r13', 'type': 'SEQUENCE'}, {'members': [{'name': 'w3-Threshold-r13', 'type': 'WLAN-RSSI-Range-r13'}], 'name': 'eventW3-r13', 'type': 'SEQUENCE'}], 'name': 'eventId', 'type': 'CHOICE'}, {'name': 'hysteresis', 'type': 'Hysteresis'}, {'name': 'timeToTrigger', 'type': 'TimeToTrigger'}], 'name': 'event', 'type': 'SEQUENCE'}, {'members': [{'name': 'purpose', 'type': 'ENUMERATED', 'values': [('reportStrongestCells', 0), ('reportStrongestCellsForSON', 1), ('reportCGI', 2)]}], 'name': 'periodical', 'type': 'SEQUENCE'}], 'name': 'triggerType', 'type': 'CHOICE'}, {'name': 'maxReportCells', 'restricted-to': [(1, 'maxCellReport')], 'type': 'INTEGER'}, {'name': 'reportInterval', 'type': 'ReportInterval'}, {'name': 'reportAmount', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('infinity', 7)]}, None, [{'name': 'si-RequestForHO-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('setup', 0)]}], [{'name': 'reportQuantityUTRA-FDD-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('both', 0)]}], [{'name': 'includeLocationInfo-r11', 'optional': True, 'type': 'BOOLEAN'}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'RSRQ-Range-v1250'}], 'name': 'b2-Threshold1-v1250', 'optional': True, 'type': 'CHOICE'}], [{'name': 'reportQuantityWLAN-r13', 'optional': True, 'type': 'ReportQuantityWLAN-r13'}], [{'name': 'reportAnyWLAN-r14', 'optional': True, 'type': 'BOOLEAN'}]], 'type': 'SEQUENCE'}, 'ReportConfigToAddMod': {'members': [{'name': 'reportConfigId', 'type': 'ReportConfigId'}, {'members': [{'name': 'reportConfigEUTRA', 'type': 'ReportConfigEUTRA'}, {'name': 'reportConfigInterRAT', 'type': 'ReportConfigInterRAT'}], 'name': 'reportConfig', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'ReportConfigToAddModList': {'element': {'type': 'ReportConfigToAddMod'}, 'size': [(1, 'maxReportConfigId')], 'type': 'SEQUENCE ' 'OF'}, 'ReportConfigToRemoveList': {'element': {'type': 'ReportConfigId'}, 'size': [(1, 'maxReportConfigId')], 'type': 'SEQUENCE ' 'OF'}, 'ReportInterval': {'type': 'ENUMERATED', 'values': [('ms120', 0), ('ms240', 1), ('ms480', 2), ('ms640', 3), ('ms1024', 4), ('ms2048', 5), ('ms5120', 6), ('ms10240', 7), ('min1', 8), ('min6', 9), ('min12', 10), ('min30', 11), ('min60', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, 'ReportProximityConfig-r9': {'members': [{'name': 'proximityIndicationEUTRA-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('enabled', 0)]}, {'name': 'proximityIndicationUTRA-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('enabled', 0)]}], 'type': 'SEQUENCE'}, 'ReportQuantityWLAN-r13': {'members': [{'name': 'bandRequestWLAN-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'carrierInfoRequestWLAN-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'availableAdmissionCapacityRequestWLAN-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'backhaulDL-BandwidthRequestWLAN-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'backhaulUL-BandwidthRequestWLAN-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'channelUtilizationRequestWLAN-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'stationCountRequestWLAN-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, None], 'type': 'SEQUENCE'}, 'ReselectionInfoRelay-r13': {'members': [{'name': 'q-RxLevMin-r13', 'type': 'Q-RxLevMin'}, {'name': 'filterCoefficient-r13', 'type': 'FilterCoefficient'}, {'name': 'minHyst-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB3', 1), ('dB6', 2), ('dB9', 3), ('dB12', 4), ('dBinf', 5)]}], 'type': 'SEQUENCE'}, 'ReselectionThreshold': {'restricted-to': [(0, 31)], 'type': 'INTEGER'}, 'ReselectionThresholdQ-r9': {'restricted-to': [(0, 31)], 'type': 'INTEGER'}, 'ResourceConfig-r13': {'restricted-to': [(0, 31)], 'type': 'INTEGER'}, 'ResumeCause': {'type': 'ENUMERATED', 'values': [('emergency', 0), ('highPriorityAccess', 1), ('mt-Access', 2), ('mo-Signalling', 3), ('mo-Data', 4), ('delayTolerantAccess-v1020', 5), ('mo-VoiceCall-v1280', 6), ('spare1', 7)]}, 'ResumeIdentity-r13': {'size': [40], 'type': 'BIT ' 'STRING'}, 'RetuningTimeInfo-r14': {'members': [{'members': [{'name': 'rf-RetuningTimeDL-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n0', 0), ('n0dot5', 1), ('n1', 2), ('n1dot5', 3), ('n2', 4), ('n2dot5', 5), ('n3', 6), ('n3dot5', 7), ('n4', 8), ('n4dot5', 9), ('n5', 10), ('n5dot5', 11), ('n6', 12), ('n6dot5', 13), ('n7', 14), ('spare1', 15)]}, {'name': 'rf-RetuningTimeUL-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n0', 0), ('n0dot5', 1), ('n1', 2), ('n1dot5', 3), ('n2', 4), ('n2dot5', 5), ('n3', 6), ('n3dot5', 7), ('n4', 8), ('n4dot5', 9), ('n5', 10), ('n5dot5', 11), ('n6', 12), ('n6dot5', 13), ('n7', 14), ('spare1', 15)]}], 'name': 'retuningInfo', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RetxBSR-Timer-r12': {'type': 'ENUMERATED', 'values': [('sf320', 0), ('sf640', 1), ('sf1280', 2), ('sf2560', 3), ('sf5120', 4), ('sf10240', 5), ('spare2', 6), ('spare1', 7)]}, 'S-TMSI': {'members': [{'name': 'mmec', 'type': 'MMEC'}, {'name': 'm-TMSI', 'size': [32], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'SC-MCCH-Message-r13': {'members': [{'name': 'message', 'type': 'SC-MCCH-MessageType-r13'}], 'type': 'SEQUENCE'}, 'SC-MCCH-MessageType-r13': {'members': [{'members': [{'name': 'scptmConfiguration-r13', 'type': 'SCPTMConfiguration-r13'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [{'members': [{'name': 'scptmConfiguration-BR-r14', 'type': 'SCPTMConfiguration-BR-r14'}, {'name': 'spare', 'type': 'NULL'}], 'name': 'c2', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtensionFuture-r14', 'type': 'SEQUENCE'}], 'name': 'messageClassExtension', 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'SC-MCCH-SchedulingInfo-r14': {'members': [{'name': 'onDurationTimerSCPTM-r14', 'type': 'ENUMERATED', 'values': [('psf10', 0), ('psf20', 1), ('psf100', 2), ('psf300', 3), ('psf500', 4), ('psf1000', 5), ('psf1200', 6), ('psf1600', 7)]}, {'name': 'drx-InactivityTimerSCPTM-r14', 'type': 'ENUMERATED', 'values': [('psf0', 0), ('psf1', 1), ('psf2', 2), ('psf4', 3), ('psf8', 4), ('psf16', 5), ('psf32', 6), ('psf64', 7), ('psf128', 8), ('psf256', 9), ('ps512', 10), ('psf1024', 11), ('psf2048', 12), ('psf4096', 13), ('psf8192', 14), ('psf16384', 15)]}, {'members': [{'name': 'sf10', 'restricted-to': [(0, 9)], 'type': 'INTEGER'}, {'name': 'sf20', 'restricted-to': [(0, 19)], 'type': 'INTEGER'}, {'name': 'sf32', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'sf40', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'sf64', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'sf80', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, {'name': 'sf128', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'sf160', 'restricted-to': [(0, 159)], 'type': 'INTEGER'}, {'name': 'sf256', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'sf320', 'restricted-to': [(0, 319)], 'type': 'INTEGER'}, {'name': 'sf512', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, {'name': 'sf640', 'restricted-to': [(0, 639)], 'type': 'INTEGER'}, {'name': 'sf1024', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'sf2048', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'sf4096', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'sf8192', 'restricted-to': [(0, 8191)], 'type': 'INTEGER'}], 'name': 'schedulingPeriodStartOffsetSCPTM-r14', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'SC-MTCH-Info-BR-r14': {'members': [{'name': 'sc-mtch-CarrierFreq-r14', 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'mbmsSessionInfo-r14', 'type': 'MBMSSessionInfo-r13'}, {'name': 'g-RNTI-r14', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'sc-mtch-schedulingInfo-r14', 'optional': True, 'type': 'SC-MTCH-SchedulingInfo-BR-r14'}, {'name': 'sc-mtch-neighbourCell-r14', 'optional': True, 'size': ['maxNeighCell-SCPTM-r13'], 'type': 'BIT ' 'STRING'}, {'name': 'mpdcch-Narrowband-SC-MTCH-r14', 'restricted-to': [(1, 'maxAvailNarrowBands-r13')], 'type': 'INTEGER'}, {'name': 'mpdcch-NumRepetition-SC-MTCH-r14', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7), ('r256', 8)]}, {'members': [{'name': 'fdd-r14', 'type': 'ENUMERATED', 'values': [('v1', 0), ('v1dot5', 1), ('v2', 2), ('v2dot5', 3), ('v4', 4), ('v5', 5), ('v8', 6), ('v10', 7)]}, {'name': 'tdd-r14', 'type': 'ENUMERATED', 'values': [('v1', 0), ('v2', 1), ('v4', 2), ('v5', 3), ('v8', 4), ('v10', 5), ('v20', 6)]}], 'name': 'mpdcch-StartSF-SC-MTCH-r14', 'type': 'CHOICE'}, {'name': 'mpdcch-PDSCH-HoppingConfig-SC-MTCH-r14', 'type': 'ENUMERATED', 'values': [('on', 0), ('off', 1)]}, {'name': 'mpdcch-PDSCH-CEmodeConfig-SC-MTCH-r14', 'type': 'ENUMERATED', 'values': [('ce-ModeA', 0), ('ce-ModeB', 1)]}, {'name': 'mpdcch-PDSCH-MaxBandwidth-SC-MTCH-r14', 'type': 'ENUMERATED', 'values': [('bw1dot4', 0), ('bw5', 1)]}, {'name': 'mpdcch-Offset-SC-MTCH-r14', 'type': 'ENUMERATED', 'values': [('zero', 0), ('oneEighth', 1), ('oneQuarter', 2), ('threeEighth', 3), ('oneHalf', 4), ('fiveEighth', 5), ('threeQuarter', 6), ('sevenEighth', 7)]}, {'name': 'p-a-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-4dot77', 1), ('dB-3', 2), ('dB-1dot77', 3), ('dB0', 4), ('dB1', 5), ('dB2', 6), ('dB3', 7)]}, None], 'type': 'SEQUENCE'}, 'SC-MTCH-Info-r13': {'members': [{'name': 'mbmsSessionInfo-r13', 'type': 'MBMSSessionInfo-r13'}, {'name': 'g-RNTI-r13', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'sc-mtch-schedulingInfo-r13', 'optional': True, 'type': 'SC-MTCH-SchedulingInfo-r13'}, {'name': 'sc-mtch-neighbourCell-r13', 'optional': True, 'size': ['maxNeighCell-SCPTM-r13'], 'type': 'BIT ' 'STRING'}, None, [{'name': 'p-a-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-4dot77', 1), ('dB-3', 2), ('dB-1dot77', 3), ('dB0', 4), ('dB1', 5), ('dB2', 6), ('dB3', 7)]}]], 'type': 'SEQUENCE'}, 'SC-MTCH-InfoList-BR-r14': {'element': {'type': 'SC-MTCH-Info-BR-r14'}, 'size': [(0, 'maxSC-MTCH-BR-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SC-MTCH-InfoList-r13': {'element': {'type': 'SC-MTCH-Info-r13'}, 'size': [(0, 'maxSC-MTCH-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SC-MTCH-SchedulingInfo-BR-r14': {'members': [{'name': 'onDurationTimerSCPTM-r14', 'type': 'ENUMERATED', 'values': [('psf300', 0), ('psf400', 1), ('psf500', 2), ('psf600', 3), ('psf800', 4), ('psf1000', 5), ('psf1200', 6), ('psf1600', 7)]}, {'name': 'drx-InactivityTimerSCPTM-r14', 'type': 'ENUMERATED', 'values': [('psf0', 0), ('psf1', 1), ('psf2', 2), ('psf4', 3), ('psf8', 4), ('psf16', 5), ('psf32', 6), ('psf64', 7), ('psf128', 8), ('psf256', 9), ('ps512', 10), ('psf1024', 11), ('psf2048', 12), ('psf4096', 13), ('psf8192', 14), ('psf16384', 15)]}, {'members': [{'name': 'sf10', 'restricted-to': [(0, 9)], 'type': 'INTEGER'}, {'name': 'sf20', 'restricted-to': [(0, 19)], 'type': 'INTEGER'}, {'name': 'sf32', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'sf40', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'sf64', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'sf80', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, {'name': 'sf128', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'sf160', 'restricted-to': [(0, 159)], 'type': 'INTEGER'}, {'name': 'sf256', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'sf320', 'restricted-to': [(0, 319)], 'type': 'INTEGER'}, {'name': 'sf512', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, {'name': 'sf640', 'restricted-to': [(0, 639)], 'type': 'INTEGER'}, {'name': 'sf1024', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'sf2048', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'sf4096', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'sf8192', 'restricted-to': [(0, 8191)], 'type': 'INTEGER'}], 'name': 'schedulingPeriodStartOffsetSCPTM-r14', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'SC-MTCH-SchedulingInfo-r13': {'members': [{'name': 'onDurationTimerSCPTM-r13', 'type': 'ENUMERATED', 'values': [('psf1', 0), ('psf2', 1), ('psf3', 2), ('psf4', 3), ('psf5', 4), ('psf6', 5), ('psf8', 6), ('psf10', 7), ('psf20', 8), ('psf30', 9), ('psf40', 10), ('psf50', 11), ('psf60', 12), ('psf80', 13), ('psf100', 14), ('psf200', 15)]}, {'name': 'drx-InactivityTimerSCPTM-r13', 'type': 'ENUMERATED', 'values': [('psf0', 0), ('psf1', 1), ('psf2', 2), ('psf4', 3), ('psf8', 4), ('psf10', 5), ('psf20', 6), ('psf40', 7), ('psf80', 8), ('psf160', 9), ('ps320', 10), ('psf640', 11), ('psf960', 12), ('psf1280', 13), ('psf1920', 14), ('psf2560', 15)]}, {'members': [{'name': 'sf10', 'restricted-to': [(0, 9)], 'type': 'INTEGER'}, {'name': 'sf20', 'restricted-to': [(0, 19)], 'type': 'INTEGER'}, {'name': 'sf32', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'sf40', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'sf64', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'sf80', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, {'name': 'sf128', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'sf160', 'restricted-to': [(0, 159)], 'type': 'INTEGER'}, {'name': 'sf256', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'sf320', 'restricted-to': [(0, 319)], 'type': 'INTEGER'}, {'name': 'sf512', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, {'name': 'sf640', 'restricted-to': [(0, 639)], 'type': 'INTEGER'}, {'name': 'sf1024', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'sf2048', 'restricted-to': [(0, 2048)], 'type': 'INTEGER'}, {'name': 'sf4096', 'restricted-to': [(0, 4096)], 'type': 'INTEGER'}, {'name': 'sf8192', 'restricted-to': [(0, 8192)], 'type': 'INTEGER'}], 'name': 'schedulingPeriodStartOffsetSCPTM-r13', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'SCG-ConfigPartSCG-r12': {'members': [{'name': 'radioResourceConfigDedicatedSCG-r12', 'optional': True, 'type': 'RadioResourceConfigDedicatedSCG-r12'}, {'name': 'sCellToReleaseListSCG-r12', 'optional': True, 'type': 'SCellToReleaseList-r10'}, {'name': 'pSCellToAddMod-r12', 'optional': True, 'type': 'PSCellToAddMod-r12'}, {'name': 'sCellToAddModListSCG-r12', 'optional': True, 'type': 'SCellToAddModList-r10'}, {'name': 'mobilityControlInfoSCG-r12', 'optional': True, 'type': 'MobilityControlInfoSCG-r12'}, None, [{'name': 'sCellToReleaseListSCG-Ext-r13', 'optional': True, 'type': 'SCellToReleaseListExt-r13'}, {'name': 'sCellToAddModListSCG-Ext-r13', 'optional': True, 'type': 'SCellToAddModListExt-r13'}], [{'name': 'sCellToAddModListSCG-Ext-v1370', 'optional': True, 'type': 'SCellToAddModListExt-v1370'}], [{'name': 'pSCellToAddMod-v1440', 'optional': True, 'type': 'PSCellToAddMod-v1440'}]], 'type': 'SEQUENCE'}, 'SCG-ConfigPartSCG-v12f0': {'members': [{'name': 'pSCellToAddMod-v12f0', 'optional': True, 'type': 'PSCellToAddMod-v12f0'}, {'name': 'sCellToAddModListSCG-v12f0', 'optional': True, 'type': 'SCellToAddModList-v10l0'}], 'type': 'SEQUENCE'}, 'SCG-Configuration-r12': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'scg-Counter-r12', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'powerCoordinationInfo-r12', 'optional': True, 'type': 'PowerCoordinationInfo-r12'}, None], 'name': 'scg-ConfigPartMCG-r12', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'scg-ConfigPartSCG-r12', 'optional': True, 'type': 'SCG-ConfigPartSCG-r12'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SCG-Configuration-v12f0': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'scg-ConfigPartSCG-v12f0', 'optional': True, 'type': 'SCG-ConfigPartSCG-v12f0'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SCGFailureInformation-r12': {'members': [{'members': [{'members': [{'name': 'scgFailureInformation-r12', 'type': 'SCGFailureInformation-r12-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SCGFailureInformation-r12-IEs': {'members': [{'name': 'failureReportSCG-r12', 'optional': True, 'type': 'FailureReportSCG-r12'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SCGFailureInformation-v1310-IEs'}], 'type': 'SEQUENCE'}, 'SCGFailureInformation-v12d0-IEs': {'members': [{'name': 'failureReportSCG-v12d0', 'optional': True, 'type': 'FailureReportSCG-v12d0'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SCGFailureInformation-v1310-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SCPTM-NeighbourCellList-r13': {'element': {'type': 'PCI-ARFCN-r13'}, 'size': [(1, 'maxNeighCell-SCPTM-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SCPTM-Parameters-r13': {'members': [{'name': 'scptm-ParallelReception-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'scptm-SCell-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'scptm-NonServingCell-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'scptm-AsyncDC-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'SCPTMConfiguration-BR-r14': {'members': [{'name': 'sc-mtch-InfoList-r14', 'type': 'SC-MTCH-InfoList-BR-r14'}, {'name': 'scptm-NeighbourCellList-r14', 'optional': True, 'type': 'SCPTM-NeighbourCellList-r13'}, {'name': 'p-b-r14', 'optional': True, 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SCPTMConfiguration-r13': {'members': [{'name': 'sc-mtch-InfoList-r13', 'type': 'SC-MTCH-InfoList-r13'}, {'name': 'scptm-NeighbourCellList-r13', 'optional': True, 'type': 'SCPTM-NeighbourCellList-r13'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SCPTMConfiguration-v1340'}], 'type': 'SEQUENCE'}, 'SCPTMConfiguration-v1340': {'members': [{'name': 'p-b-r13', 'optional': True, 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SCellIndex-r10': {'restricted-to': [(1, 7)], 'type': 'INTEGER'}, 'SCellIndex-r13': {'restricted-to': [(1, 31)], 'type': 'INTEGER'}, 'SCellToAddMod-r10': {'members': [{'name': 'sCellIndex-r10', 'type': 'SCellIndex-r10'}, {'members': [{'name': 'physCellId-r10', 'type': 'PhysCellId'}, {'name': 'dl-CarrierFreq-r10', 'type': 'ARFCN-ValueEUTRA'}], 'name': 'cellIdentification-r10', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'radioResourceConfigCommonSCell-r10', 'optional': True, 'type': 'RadioResourceConfigCommonSCell-r10'}, {'name': 'radioResourceConfigDedicatedSCell-r10', 'optional': True, 'type': 'RadioResourceConfigDedicatedSCell-r10'}, None, [{'name': 'dl-CarrierFreq-v1090', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9e0'}], [{'name': 'antennaInfoDedicatedSCell-v10i0', 'optional': True, 'type': 'AntennaInfoDedicated-v10i0'}], [{'name': 'srs-SwitchFromServCellIndex-r14', 'optional': True, 'restricted-to': [(0, 31)], 'type': 'INTEGER'}]], 'type': 'SEQUENCE'}, 'SCellToAddMod-v10l0': {'members': [{'name': 'radioResourceConfigCommonSCell-v10l0', 'optional': True, 'type': 'RadioResourceConfigCommonSCell-v10l0'}], 'type': 'SEQUENCE'}, 'SCellToAddModExt-r13': {'members': [{'name': 'sCellIndex-r13', 'type': 'SCellIndex-r13'}, {'members': [{'name': 'physCellId-r13', 'type': 'PhysCellId'}, {'name': 'dl-CarrierFreq-r13', 'type': 'ARFCN-ValueEUTRA-r9'}], 'name': 'cellIdentification-r13', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'radioResourceConfigCommonSCell-r13', 'optional': True, 'type': 'RadioResourceConfigCommonSCell-r10'}, {'name': 'radioResourceConfigDedicatedSCell-r13', 'optional': True, 'type': 'RadioResourceConfigDedicatedSCell-r10'}, {'name': 'antennaInfoDedicatedSCell-r13', 'optional': True, 'type': 'AntennaInfoDedicated-v10i0'}], 'type': 'SEQUENCE'}, 'SCellToAddModExt-v1370': {'members': [{'name': 'radioResourceConfigCommonSCell-v1370', 'optional': True, 'type': 'RadioResourceConfigCommonSCell-v10l0'}], 'type': 'SEQUENCE'}, 'SCellToAddModExt-v1430': {'members': [{'name': 'srs-SwitchFromServCellIndex-r14', 'optional': True, 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'SCellToAddModList-r10': {'element': {'type': 'SCellToAddMod-r10'}, 'size': [(1, 'maxSCell-r10')], 'type': 'SEQUENCE ' 'OF'}, 'SCellToAddModList-v10l0': {'element': {'type': 'SCellToAddMod-v10l0'}, 'size': [(1, 'maxSCell-r10')], 'type': 'SEQUENCE ' 'OF'}, 'SCellToAddModListExt-r13': {'element': {'type': 'SCellToAddModExt-r13'}, 'size': [(1, 'maxSCell-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SCellToAddModListExt-v1370': {'element': {'type': 'SCellToAddModExt-v1370'}, 'size': [(1, 'maxSCell-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SCellToAddModListExt-v1430': {'element': {'type': 'SCellToAddModExt-v1430'}, 'size': [(1, 'maxSCell-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SCellToReleaseList-r10': {'element': {'type': 'SCellIndex-r10'}, 'size': [(1, 'maxSCell-r10')], 'type': 'SEQUENCE ' 'OF'}, 'SCellToReleaseListExt-r13': {'element': {'type': 'SCellIndex-r13'}, 'size': [(1, 'maxSCell-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SI-OrPSI-GERAN': {'members': [{'name': 'si', 'type': 'SystemInfoListGERAN'}, {'name': 'psi', 'type': 'SystemInfoListGERAN'}], 'type': 'CHOICE'}, 'SIB-MappingInfo': {'element': {'type': 'SIB-Type'}, 'size': [(0, 'maxSIB-1')], 'type': 'SEQUENCE OF'}, 'SIB-MappingInfo-MBMS-r14': {'element': {'type': 'SIB-Type-MBMS-r14'}, 'size': [(0, 'maxSIB-1')], 'type': 'SEQUENCE ' 'OF'}, 'SIB-Type': {'type': 'ENUMERATED', 'values': [('sibType3', 0), ('sibType4', 1), ('sibType5', 2), ('sibType6', 3), ('sibType7', 4), ('sibType8', 5), ('sibType9', 6), ('sibType10', 7), ('sibType11', 8), ('sibType12-v920', 9), ('sibType13-v920', 10), ('sibType14-v1130', 11), ('sibType15-v1130', 12), ('sibType16-v1130', 13), ('sibType17-v1250', 14), ('sibType18-v1250', 15), None, ('sibType19-v1250', 16), ('sibType20-v1310', 17), ('sibType21-v1430', 18)]}, 'SIB-Type-MBMS-r14': {'type': 'ENUMERATED', 'values': [('sibType10', 0), ('sibType11', 1), ('sibType12-v920', 2), ('sibType13-v920', 3), ('sibType15-v1130', 4), ('sibType16-v1130', 5), None]}, 'SIB8-PerPLMN-List-r11': {'element': {'type': 'SIB8-PerPLMN-r11'}, 'size': [(1, 'maxPLMN-r11')], 'type': 'SEQUENCE ' 'OF'}, 'SIB8-PerPLMN-r11': {'members': [{'name': 'plmn-Identity-r11', 'restricted-to': [(1, 'maxPLMN-r11')], 'type': 'INTEGER'}, {'members': [{'name': 'explicitValue', 'type': 'ParametersCDMA2000-r11'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'parametersCDMA2000-r11', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SL-AnchorCarrierFreqList-V2X-r14': {'element': {'type': 'ARFCN-ValueEUTRA-r9'}, 'size': [(1, 'maxFreqV2X-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-CBR-CommonTxConfigList-r14': {'members': [{'element': {'type': 'SL-CBR-Levels-Config-r14'}, 'name': 'cbr-RangeCommonConfigList-r14', 'size': [(1, 'maxSL-V2X-CBRConfig-r14')], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'SL-CBR-PSSCH-TxConfig-r14'}, 'name': 'sl-CBR-PSSCH-TxConfigList-r14', 'size': [(1, 'maxSL-V2X-TxConfig-r14')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'SL-CBR-Levels-Config-r14': {'element': {'type': 'SL-CBR-r14'}, 'size': [(1, 'maxCBR-Level-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-CBR-PPPP-TxConfigList-r14': {'element': {'type': 'SL-PPPP-TxConfigIndex-r14'}, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, 'SL-CBR-PSSCH-TxConfig-r14': {'members': [{'name': 'cr-Limit-r14', 'restricted-to': [(0, 10000)], 'type': 'INTEGER'}, {'name': 'tx-Parameters-r14', 'type': 'SL-PSSCH-TxParameters-r14'}], 'type': 'SEQUENCE'}, 'SL-CBR-r14': {'restricted-to': [(0, 100)], 'type': 'INTEGER'}, 'SL-CP-Len-r12': {'type': 'ENUMERATED', 'values': [('normal', 0), ('extended', 1)]}, 'SL-CarrierFreqInfo-r12': {'members': [{'name': 'carrierFreq-r12', 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'plmn-IdentityList-r12', 'optional': True, 'type': 'PLMN-IdentityList4-r12'}], 'type': 'SEQUENCE'}, 'SL-CarrierFreqInfo-v1310': {'members': [{'name': 'discResourcesNonPS-r13', 'optional': True, 'type': 'SL-ResourcesInterFreq-r13'}, {'name': 'discResourcesPS-r13', 'optional': True, 'type': 'SL-ResourcesInterFreq-r13'}, {'name': 'discConfigOther-r13', 'optional': True, 'type': 'SL-DiscConfigOtherInterFreq-r13'}, None], 'type': 'SEQUENCE'}, 'SL-CarrierFreqInfoList-r12': {'element': {'type': 'SL-CarrierFreqInfo-r12'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'SL-CarrierFreqInfoList-v1310': {'element': {'type': 'SL-CarrierFreqInfo-v1310'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'SL-CommConfig-r12': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'sl-RNTI-r12', 'type': 'C-RNTI'}, {'name': 'mac-MainConfig-r12', 'type': 'MAC-MainConfigSL-r12'}, {'name': 'sc-CommTxConfig-r12', 'type': 'SL-CommResourcePool-r12'}, {'name': 'mcs-r12', 'optional': True, 'restricted-to': [(0, 28)], 'type': 'INTEGER'}], 'name': 'scheduled-r12', 'type': 'SEQUENCE'}, {'members': [{'members': [{'name': 'poolToReleaseList-r12', 'optional': True, 'type': 'SL-TxPoolToReleaseList-r12'}, {'name': 'poolToAddModList-r12', 'optional': True, 'type': 'SL-CommTxPoolToAddModList-r12'}], 'name': 'commTxPoolNormalDedicated-r12', 'type': 'SEQUENCE'}], 'name': 'ue-Selected-r12', 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'CHOICE'}], 'name': 'commTxResources-r12', 'optional': True, 'type': 'CHOICE'}, None, [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'logicalChGroupInfoList-r13', 'type': 'LogicalChGroupInfoList-r13'}, {'name': 'multipleTx-r13', 'type': 'BOOLEAN'}], 'name': 'scheduled-v1310', 'type': 'SEQUENCE'}, {'members': [{'members': [{'name': 'poolToReleaseListExt-r13', 'optional': True, 'type': 'SL-TxPoolToReleaseListExt-r13'}, {'name': 'poolToAddModListExt-r13', 'optional': True, 'type': 'SL-CommTxPoolToAddModListExt-r13'}], 'name': 'commTxPoolNormalDedicatedExt-r13', 'type': 'SEQUENCE'}], 'name': 'ue-Selected-v1310', 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'CHOICE'}], 'name': 'commTxResources-v1310', 'optional': True, 'type': 'CHOICE'}, {'name': 'commTxAllowRelayDedicated-r13', 'optional': True, 'type': 'BOOLEAN'}]], 'type': 'SEQUENCE'}, 'SL-CommResourcePool-r12': {'members': [{'name': 'sc-CP-Len-r12', 'type': 'SL-CP-Len-r12'}, {'name': 'sc-Period-r12', 'type': 'SL-PeriodComm-r12'}, {'name': 'sc-TF-ResourceConfig-r12', 'type': 'SL-TF-ResourceConfig-r12'}, {'name': 'data-CP-Len-r12', 'type': 'SL-CP-Len-r12'}, {'name': 'dataHoppingConfig-r12', 'type': 'SL-HoppingConfigComm-r12'}, {'members': [{'name': 'data-TF-ResourceConfig-r12', 'type': 'SL-TF-ResourceConfig-r12'}, {'name': 'trpt-Subset-r12', 'optional': True, 'type': 'SL-TRPT-Subset-r12'}], 'name': 'ue-SelectedResourceConfig-r12', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'tdd-Config-r12', 'optional': True, 'type': 'TDD-Config'}, {'name': 'syncConfigIndex-r12', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'name': 'rxParametersNCell-r12', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'sc-TxParameters-r12', 'type': 'SL-TxParameters-r12'}, {'name': 'dataTxParameters-r12', 'type': 'SL-TxParameters-r12'}], 'name': 'txParameters-r12', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'priorityList-r13', 'optional': True, 'type': 'SL-PriorityList-r13'}]], 'type': 'SEQUENCE'}, 'SL-CommResourcePoolV2X-r14': {'members': [{'name': 'sl-OffsetIndicator-r14', 'optional': True, 'type': 'SL-OffsetIndicator-r12'}, {'name': 'sl-Subframe-r14', 'type': 'SubframeBitmapSL-r14'}, {'name': 'adjacencyPSCCH-PSSCH-r14', 'type': 'BOOLEAN'}, {'name': 'sizeSubchannel-r14', 'type': 'ENUMERATED', 'values': [('n4', 0), ('n5', 1), ('n6', 2), ('n8', 3), ('n9', 4), ('n10', 5), ('n12', 6), ('n15', 7), ('n16', 8), ('n18', 9), ('n20', 10), ('n25', 11), ('n30', 12), ('n48', 13), ('n50', 14), ('n72', 15), ('n75', 16), ('n96', 17), ('n100', 18), ('spare13', 19), ('spare12', 20), ('spare11', 21), ('spare10', 22), ('spare9', 23), ('spare8', 24), ('spare7', 25), ('spare6', 26), ('spare5', 27), ('spare4', 28), ('spare3', 29), ('spare2', 30), ('spare1', 31)]}, {'name': 'numSubchannel-r14', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n3', 1), ('n5', 2), ('n8', 3), ('n10', 4), ('n15', 5), ('n20', 6), ('spare1', 7)]}, {'name': 'startRB-Subchannel-r14', 'restricted-to': [(0, 99)], 'type': 'INTEGER'}, {'name': 'startRB-PSCCH-Pool-r14', 'optional': True, 'restricted-to': [(0, 99)], 'type': 'INTEGER'}, {'members': [{'name': 'tdd-Config-r14', 'optional': True, 'type': 'TDD-Config'}, {'name': 'syncConfigIndex-r14', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'name': 'rxParametersNCell-r14', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'dataTxParameters-r14', 'optional': True, 'type': 'SL-TxParameters-r12'}, {'name': 'zoneID-r14', 'optional': True, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'threshS-RSSI-CBR-r14', 'optional': True, 'restricted-to': [(0, 45)], 'type': 'INTEGER'}, {'name': 'poolReportId-r14', 'optional': True, 'type': 'SL-V2X-TxPoolReportIdentity-r14'}, {'name': 'cbr-pssch-TxConfigList-r14', 'optional': True, 'type': 'SL-CBR-PPPP-TxConfigList-r14'}, {'name': 'resourceSelectionConfigP2X-r14', 'optional': True, 'type': 'SL-P2X-ResourceSelectionConfig-r14'}, {'name': 'syncAllowed-r14', 'optional': True, 'type': 'SL-SyncAllowed-r14'}, {'name': 'restrictResourceReservationPeriod-r14', 'optional': True, 'type': 'SL-RestrictResourceReservationPeriodList-r14'}, None], 'type': 'SEQUENCE'}, 'SL-CommRxPoolList-r12': {'element': {'type': 'SL-CommResourcePool-r12'}, 'size': [(1, 'maxSL-RxPool-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-CommRxPoolListV2X-r14': {'element': {'type': 'SL-CommResourcePoolV2X-r14'}, 'size': [(1, 'maxSL-V2X-RxPool-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-CommTxPoolList-r12': {'element': {'type': 'SL-CommResourcePool-r12'}, 'size': [(1, 'maxSL-TxPool-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-CommTxPoolListExt-r13': {'element': {'type': 'SL-CommResourcePool-r12'}, 'size': [(1, 'maxSL-TxPool-v1310')], 'type': 'SEQUENCE ' 'OF'}, 'SL-CommTxPoolListV2X-r14': {'element': {'type': 'SL-CommResourcePoolV2X-r14'}, 'size': [(1, 'maxSL-V2X-TxPool-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-CommTxPoolSensingConfig-r14': {'members': [{'name': 'pssch-TxConfigList-r14', 'type': 'SL-PSSCH-TxConfigList-r14'}, {'name': 'thresPSSCH-RSRP-List-r14', 'type': 'SL-ThresPSSCH-RSRP-List-r14'}, {'name': 'restrictResourceReservationPeriod-r14', 'optional': True, 'type': 'SL-RestrictResourceReservationPeriodList-r14'}, {'name': 'probResourceKeep-r14', 'type': 'ENUMERATED', 'values': [('v0', 0), ('v0dot2', 1), ('v0dot4', 2), ('v0dot6', 3), ('v0dot8', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}, {'members': [{'name': 'minNumCandidateSF-r14', 'restricted-to': [(1, 13)], 'type': 'INTEGER'}, {'name': 'gapCandidateSensing-r14', 'size': [10], 'type': 'BIT ' 'STRING'}], 'name': 'p2x-SensingConfig-r14', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'sl-ReselectAfter-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n5', 4), ('n6', 5), ('n7', 6), ('n8', 7), ('n9', 8), ('spare7', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}], 'type': 'SEQUENCE'}, 'SL-CommTxPoolToAddMod-r12': {'members': [{'name': 'poolIdentity-r12', 'type': 'SL-TxPoolIdentity-r12'}, {'name': 'pool-r12', 'type': 'SL-CommResourcePool-r12'}], 'type': 'SEQUENCE'}, 'SL-CommTxPoolToAddModExt-r13': {'members': [{'name': 'poolIdentity-v1310', 'type': 'SL-TxPoolIdentity-v1310'}, {'name': 'pool-r13', 'type': 'SL-CommResourcePool-r12'}], 'type': 'SEQUENCE'}, 'SL-CommTxPoolToAddModList-r12': {'element': {'type': 'SL-CommTxPoolToAddMod-r12'}, 'size': [(1, 'maxSL-TxPool-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-CommTxPoolToAddModListExt-r13': {'element': {'type': 'SL-CommTxPoolToAddModExt-r13'}, 'size': [(1, 'maxSL-TxPool-v1310')], 'type': 'SEQUENCE ' 'OF'}, 'SL-CommTxResourceReq-r12': {'members': [{'name': 'carrierFreq-r12', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'destinationInfoList-r12', 'type': 'SL-DestinationInfoList-r12'}], 'type': 'SEQUENCE'}, 'SL-DestinationIdentity-r12': {'size': [24], 'type': 'BIT ' 'STRING'}, 'SL-DestinationInfoList-r12': {'element': {'type': 'SL-DestinationIdentity-r12'}, 'size': [(1, 'maxSL-Dest-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-DiscConfig-r12': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'discTxConfig-r12', 'optional': True, 'type': 'SL-DiscResourcePool-r12'}, {'name': 'discTF-IndexList-r12', 'optional': True, 'type': 'SL-TF-IndexPairList-r12'}, {'name': 'discHoppingConfig-r12', 'optional': True, 'type': 'SL-HoppingConfigDisc-r12'}], 'name': 'scheduled-r12', 'type': 'SEQUENCE'}, {'members': [{'members': [{'name': 'poolToReleaseList-r12', 'optional': True, 'type': 'SL-TxPoolToReleaseList-r12'}, {'name': 'poolToAddModList-r12', 'optional': True, 'type': 'SL-DiscTxPoolToAddModList-r12'}], 'name': 'discTxPoolDedicated-r12', 'optional': True, 'type': 'SEQUENCE'}], 'name': 'ue-Selected-r12', 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'CHOICE'}], 'name': 'discTxResources-r12', 'optional': True, 'type': 'CHOICE'}, None, [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'discTF-IndexList-r12b', 'type': 'SL-TF-IndexPairList-r12b'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'discTF-IndexList-v1260', 'optional': True, 'type': 'CHOICE'}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'scheduled-r13', 'type': 'SL-DiscTxConfigScheduled-r13'}, {'members': [{'name': 'discTxPoolPS-Dedicated-r13', 'type': 'SL-DiscTxPoolDedicated-r13'}], 'name': 'ue-Selected-r13', 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'CHOICE'}], 'name': 'discTxResourcesPS-r13', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'discTxCarrierFreq-r13', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'discTxRefCarrierDedicated-r13', 'optional': True, 'type': 'SL-DiscTxRefCarrierDedicated-r13'}, {'name': 'discTxInfoInterFreqListAdd-r13', 'optional': True, 'type': 'SL-DiscTxInfoInterFreqListAdd-r13'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'discTxInterFreqInfo-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'gapRequestsAllowedDedicated-r13', 'optional': True, 'type': 'BOOLEAN'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'SL-GapConfig-r13'}], 'name': 'discRxGapConfig-r13', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'SL-GapConfig-r13'}], 'name': 'discTxGapConfig-r13', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'SL-DiscSysInfoToReportFreqList-r13'}], 'name': 'discSysInfoToReportConfig-r13', 'optional': True, 'type': 'CHOICE'}]], 'type': 'SEQUENCE'}, 'SL-DiscConfigOtherInterFreq-r13': {'members': [{'name': 'txPowerInfo-r13', 'optional': True, 'type': 'SL-DiscTxPowerInfoList-r12'}, {'name': 'refCarrierCommon-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('pCell', 0)]}, {'name': 'discSyncConfig-r13', 'optional': True, 'type': 'SL-SyncConfigListNFreq-r13'}, {'name': 'discCellSelectionInfo-r13', 'optional': True, 'type': 'CellSelectionInfoNFreq-r13'}], 'type': 'SEQUENCE'}, 'SL-DiscConfigRelayUE-r13': {'members': [{'name': 'threshHigh-r13', 'optional': True, 'type': 'RSRP-RangeSL4-r13'}, {'name': 'threshLow-r13', 'optional': True, 'type': 'RSRP-RangeSL4-r13'}, {'name': 'hystMax-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB3', 1), ('dB6', 2), ('dB9', 3), ('dB12', 4), ('dBinf', 5)]}, {'name': 'hystMin-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB3', 1), ('dB6', 2), ('dB9', 3), ('dB12', 4)]}], 'type': 'SEQUENCE'}, 'SL-DiscConfigRemoteUE-r13': {'members': [{'name': 'threshHigh-r13', 'optional': True, 'type': 'RSRP-RangeSL4-r13'}, {'name': 'hystMax-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB3', 1), ('dB6', 2), ('dB9', 3), ('dB12', 4)]}, {'name': 'reselectionInfoIC-r13', 'type': 'ReselectionInfoRelay-r13'}], 'type': 'SEQUENCE'}, 'SL-DiscResourcePool-r12': {'members': [{'name': 'cp-Len-r12', 'type': 'SL-CP-Len-r12'}, {'name': 'discPeriod-r12', 'type': 'ENUMERATED', 'values': [('rf32', 0), ('rf64', 1), ('rf128', 2), ('rf256', 3), ('rf512', 4), ('rf1024', 5), ('rf16-v1310', 6), ('spare', 7)]}, {'name': 'numRetx-r12', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'numRepetition-r12', 'restricted-to': [(1, 50)], 'type': 'INTEGER'}, {'name': 'tf-ResourceConfig-r12', 'type': 'SL-TF-ResourceConfig-r12'}, {'members': [{'name': 'txParametersGeneral-r12', 'type': 'SL-TxParameters-r12'}, {'members': [{'members': [{'name': 'rsrpBased-r12', 'type': 'SL-PoolSelectionConfig-r12'}, {'name': 'random-r12', 'type': 'NULL'}], 'name': 'poolSelection-r12', 'type': 'CHOICE'}, {'name': 'txProbability-r12', 'type': 'ENUMERATED', 'values': [('p25', 0), ('p50', 1), ('p75', 2), ('p100', 3)]}], 'name': 'ue-SelectedResourceConfig-r12', 'optional': True, 'type': 'SEQUENCE'}], 'name': 'txParameters-r12', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'tdd-Config-r12', 'optional': True, 'type': 'TDD-Config'}, {'name': 'syncConfigIndex-r12', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'name': 'rxParameters-r12', 'optional': True, 'type': 'SEQUENCE'}, None, [{'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'ENUMERATED', 'values': [('rf4', 0), ('rf6', 1), ('rf7', 2), ('rf8', 3), ('rf12', 4), ('rf14', 5), ('rf24', 6), ('rf28', 7)]}], 'name': 'discPeriod-v1310', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'physCellId-r13', 'type': 'PhysCellIdList-r13'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'rxParamsAddNeighFreq-r13', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'physCellId-r13', 'type': 'PhysCellIdList-r13'}, {'name': 'p-Max', 'optional': True, 'type': 'P-Max'}, {'name': 'tdd-Config-r13', 'optional': True, 'type': 'TDD-Config'}, {'name': 'tdd-Config-v1130', 'optional': True, 'type': 'TDD-Config-v1130'}, {'members': [{'name': 'ul-CarrierFreq', 'optional': True, 'type': 'ARFCN-ValueEUTRA'}, {'name': 'ul-Bandwidth', 'optional': True, 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'additionalSpectrumEmission', 'type': 'AdditionalSpectrumEmission'}], 'name': 'freqInfo', 'type': 'SEQUENCE'}, {'name': 'referenceSignalPower', 'restricted-to': [(-60, 50)], 'type': 'INTEGER'}, {'name': 'syncConfigIndex-r13', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'txParamsAddNeighFreq-r13', 'optional': True, 'type': 'CHOICE'}], [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'additionalSpectrumEmission-v1370', 'type': 'AdditionalSpectrumEmission-v10l0'}], 'name': 'freqInfo-v1370', 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'txParamsAddNeighFreq-v1370', 'optional': True, 'type': 'CHOICE'}]], 'type': 'SEQUENCE'}, 'SL-DiscRxPoolList-r12': {'element': {'type': 'SL-DiscResourcePool-r12'}, 'size': [(1, 'maxSL-RxPool-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-DiscSysInfoReport-r13': {'members': [{'name': 'plmn-IdentityList-r13', 'optional': True, 'type': 'PLMN-IdentityList'}, {'name': 'cellIdentity-13', 'optional': True, 'type': 'CellIdentity'}, {'name': 'carrierFreqInfo-13', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'discRxResources-r13', 'optional': True, 'type': 'SL-DiscRxPoolList-r12'}, {'name': 'discTxPoolCommon-r13', 'optional': True, 'type': 'SL-DiscTxPoolList-r12'}, {'name': 'discTxPowerInfo-r13', 'optional': True, 'type': 'SL-DiscTxPowerInfoList-r12'}, {'name': 'discSyncConfig-r13', 'optional': True, 'type': 'SL-SyncConfigNFreq-r13'}, {'members': [{'name': 'q-RxLevMin-r13', 'type': 'Q-RxLevMin'}, {'name': 'q-RxLevMinOffset-r13', 'optional': True, 'restricted-to': [(1, 8)], 'type': 'INTEGER'}], 'name': 'discCellSelectionInfo-r13', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'q-Hyst-r13', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB1', 1), ('dB2', 2), ('dB3', 3), ('dB4', 4), ('dB5', 5), ('dB6', 6), ('dB8', 7), ('dB10', 8), ('dB12', 9), ('dB14', 10), ('dB16', 11), ('dB18', 12), ('dB20', 13), ('dB22', 14), ('dB24', 15)]}, {'name': 'q-RxLevMin-r13', 'type': 'Q-RxLevMin'}, {'name': 't-ReselectionEUTRA-r13', 'type': 'T-Reselection'}], 'name': 'cellReselectionInfo-r13', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'tdd-Config-r13', 'optional': True, 'type': 'TDD-Config'}, {'members': [{'name': 'ul-CarrierFreq-r13', 'optional': True, 'type': 'ARFCN-ValueEUTRA'}, {'name': 'ul-Bandwidth-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'additionalSpectrumEmission-r13', 'optional': True, 'type': 'AdditionalSpectrumEmission'}], 'name': 'freqInfo-r13', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'p-Max-r13', 'optional': True, 'type': 'P-Max'}, {'name': 'referenceSignalPower-r13', 'optional': True, 'restricted-to': [(-60, 50)], 'type': 'INTEGER'}, None, [{'members': [{'name': 'additionalSpectrumEmission-v1370', 'type': 'AdditionalSpectrumEmission-v10l0'}], 'name': 'freqInfo-v1370', 'optional': True, 'type': 'SEQUENCE'}]], 'type': 'SEQUENCE'}, 'SL-DiscSysInfoReportFreqList-r13': {'element': {'type': 'SL-DiscSysInfoReport-r13'}, 'size': [(1, 'maxSL-DiscSysInfoReportFreq-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SL-DiscSysInfoToReportFreqList-r13': {'element': {'type': 'ARFCN-ValueEUTRA-r9'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'SL-DiscTxConfigScheduled-r13': {'members': [{'name': 'discTxConfig-r13', 'optional': True, 'type': 'SL-DiscResourcePool-r12'}, {'name': 'discTF-IndexList-r13', 'optional': True, 'type': 'SL-TF-IndexPairList-r12b'}, {'name': 'discHoppingConfig-r13', 'optional': True, 'type': 'SL-HoppingConfigDisc-r12'}, None], 'type': 'SEQUENCE'}, 'SL-DiscTxInfoInterFreqListAdd-r13': {'members': [{'element': {'type': 'SL-DiscTxResourceInfoPerFreq-r13'}, 'name': 'discTxFreqToAddModList-r13', 'optional': True, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'ARFCN-ValueEUTRA-r9'}, 'name': 'discTxFreqToReleaseList-r13', 'optional': True, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, None], 'type': 'SEQUENCE'}, 'SL-DiscTxPoolDedicated-r13': {'members': [{'name': 'poolToReleaseList-r13', 'optional': True, 'type': 'SL-TxPoolToReleaseList-r12'}, {'name': 'poolToAddModList-r13', 'optional': True, 'type': 'SL-DiscTxPoolToAddModList-r12'}], 'type': 'SEQUENCE'}, 'SL-DiscTxPoolList-r12': {'element': {'type': 'SL-DiscResourcePool-r12'}, 'size': [(1, 'maxSL-TxPool-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-DiscTxPoolToAddMod-r12': {'members': [{'name': 'poolIdentity-r12', 'type': 'SL-TxPoolIdentity-r12'}, {'name': 'pool-r12', 'type': 'SL-DiscResourcePool-r12'}], 'type': 'SEQUENCE'}, 'SL-DiscTxPoolToAddModList-r12': {'element': {'type': 'SL-DiscTxPoolToAddMod-r12'}, 'size': [(1, 'maxSL-TxPool-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-DiscTxPowerInfo-r12': {'members': [{'name': 'discMaxTxPower-r12', 'type': 'P-Max'}, None], 'type': 'SEQUENCE'}, 'SL-DiscTxPowerInfoList-r12': {'element': {'type': 'SL-DiscTxPowerInfo-r12'}, 'size': ['maxSL-DiscPowerClass-r12'], 'type': 'SEQUENCE ' 'OF'}, 'SL-DiscTxRefCarrierDedicated-r13': {'members': [{'name': 'pCell', 'type': 'NULL'}, {'name': 'sCell', 'type': 'SCellIndex-r10'}], 'type': 'CHOICE'}, 'SL-DiscTxResource-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'scheduled-r13', 'type': 'SL-DiscTxConfigScheduled-r13'}, {'name': 'ue-Selected-r13', 'type': 'SL-DiscTxPoolDedicated-r13'}], 'name': 'setup', 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'SL-DiscTxResourceInfoPerFreq-r13': {'members': [{'name': 'discTxCarrierFreq-r13', 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'discTxResources-r13', 'optional': True, 'type': 'SL-DiscTxResource-r13'}, {'name': 'discTxResourcesPS-r13', 'optional': True, 'type': 'SL-DiscTxResource-r13'}, {'name': 'discTxRefCarrierDedicated-r13', 'optional': True, 'type': 'SL-DiscTxRefCarrierDedicated-r13'}, {'name': 'discCellSelectionInfo-r13', 'optional': True, 'type': 'CellSelectionInfoNFreq-r13'}, None], 'type': 'SEQUENCE'}, 'SL-DiscTxResourceReq-r13': {'members': [{'name': 'carrierFreqDiscTx-r13', 'optional': True, 'restricted-to': [(1, 'maxFreq')], 'type': 'INTEGER'}, {'name': 'discTxResourceReq-r13', 'restricted-to': [(1, 63)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'SL-DiscTxResourceReqPerFreqList-r13': {'element': {'type': 'SL-DiscTxResourceReq-r13'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'SL-DiscTxResourcesInterFreq-r13': {'members': [{'name': 'acquireSI-FromCarrier-r13', 'type': 'NULL'}, {'name': 'discTxPoolCommon-r13', 'type': 'SL-DiscTxPoolList-r12'}, {'name': 'requestDedicated-r13', 'type': 'NULL'}, {'name': 'noTxOnCarrier-r13', 'type': 'NULL'}], 'type': 'CHOICE'}, 'SL-GapConfig-r13': {'members': [{'name': 'gapPatternList-r13', 'type': 'SL-GapPatternList-r13'}], 'type': 'SEQUENCE'}, 'SL-GapFreqInfo-r13': {'members': [{'name': 'carrierFreq-r13', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'gapPatternList-r13', 'type': 'SL-GapPatternList-r13'}], 'type': 'SEQUENCE'}, 'SL-GapPattern-r13': {'members': [{'name': 'gapPeriod-r13', 'type': 'ENUMERATED', 'values': [('sf40', 0), ('sf60', 1), ('sf70', 2), ('sf80', 3), ('sf120', 4), ('sf140', 5), ('sf160', 6), ('sf240', 7), ('sf280', 8), ('sf320', 9), ('sf640', 10), ('sf1280', 11), ('sf2560', 12), ('sf5120', 13), ('sf10240', 14)]}, {'name': 'gapOffset-r12', 'type': 'SL-OffsetIndicator-r12'}, {'name': 'gapSubframeBitmap-r13', 'size': [(1, 10240)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SL-GapPatternList-r13': {'element': {'type': 'SL-GapPattern-r13'}, 'size': [(1, 'maxSL-GP-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SL-GapRequest-r13': {'element': {'type': 'SL-GapFreqInfo-r13'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'SL-HoppingConfigComm-r12': {'members': [{'name': 'hoppingParameter-r12', 'restricted-to': [(0, 504)], 'type': 'INTEGER'}, {'name': 'numSubbands-r12', 'type': 'ENUMERATED', 'values': [('ns1', 0), ('ns2', 1), ('ns4', 2)]}, {'name': 'rb-Offset-r12', 'restricted-to': [(0, 110)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'SL-HoppingConfigDisc-r12': {'members': [{'name': 'a-r12', 'restricted-to': [(1, 200)], 'type': 'INTEGER'}, {'name': 'b-r12', 'restricted-to': [(1, 10)], 'type': 'INTEGER'}, {'name': 'c-r12', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n5', 1)]}], 'type': 'SEQUENCE'}, 'SL-InterFreqInfoListV2X-r14': {'element': {'type': 'SL-InterFreqInfoV2X-r14'}, 'size': [(0, 'maxFreqV2X-1-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-InterFreqInfoV2X-r14': {'members': [{'name': 'plmn-IdentityList-r14', 'optional': True, 'type': 'PLMN-IdentityList'}, {'name': 'v2x-CommCarrierFreq-r14', 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'sl-MaxTxPower-r14', 'optional': True, 'type': 'P-Max'}, {'name': 'sl-Bandwidth-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'v2x-SchedulingPool-r14', 'optional': True, 'type': 'SL-CommResourcePoolV2X-r14'}, {'name': 'v2x-UE-ConfigList-r14', 'optional': True, 'type': 'SL-V2X-UE-ConfigList-r14'}, None, [{'members': [{'name': 'additionalSpectrumEmission-r14', 'type': 'AdditionalSpectrumEmission'}, {'name': 'additionalSpectrumEmission-v1440', 'type': 'AdditionalSpectrumEmission-v10l0'}], 'name': 'additionalSpectrumEmissionV2X-r14', 'optional': True, 'type': 'CHOICE'}]], 'type': 'SEQUENCE'}, 'SL-OffsetIndicator-r12': {'members': [{'name': 'small-r12', 'restricted-to': [(0, 319)], 'type': 'INTEGER'}, {'name': 'large-r12', 'restricted-to': [(0, 10239)], 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'SL-OffsetIndicatorSync-r12': {'restricted-to': [(0, 39)], 'type': 'INTEGER'}, 'SL-OffsetIndicatorSync-r14': {'restricted-to': [(0, 159)], 'type': 'INTEGER'}, 'SL-OffsetIndicatorSync-v1430': {'restricted-to': [(40, 159)], 'type': 'INTEGER'}, 'SL-P2X-ResourceSelectionConfig-r14': {'members': [{'name': 'partialSensing-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'randomSelection-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'SL-PPPP-TxConfigIndex-r14': {'members': [{'name': 'priorityThreshold-r14', 'type': 'SL-Priority-r13'}, {'name': 'defaultTxConfigIndex-r14', 'restricted-to': [(0, 'maxCBR-Level-1-r14')], 'type': 'INTEGER'}, {'name': 'cbr-ConfigIndex-r14', 'restricted-to': [(0, 'maxSL-V2X-CBRConfig-1-r14')], 'type': 'INTEGER'}, {'element': {'type': 'Tx-ConfigIndex-r14'}, 'name': 'tx-ConfigIndexList-r14', 'size': [(1, 'maxCBR-Level-r14')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'SL-PSSCH-TxConfig-r14': {'members': [{'name': 'typeTxSync-r14', 'optional': True, 'type': 'SL-TypeTxSync-r14'}, {'name': 'thresUE-Speed-r14', 'type': 'ENUMERATED', 'values': [('kmph60', 0), ('kmph80', 1), ('kmph100', 2), ('kmph120', 3), ('kmph140', 4), ('kmph160', 5), ('kmph180', 6), ('kmph200', 7)]}, {'name': 'parametersAboveThres-r14', 'type': 'SL-PSSCH-TxParameters-r14'}, {'name': 'parametersBelowThres-r14', 'type': 'SL-PSSCH-TxParameters-r14'}, None], 'type': 'SEQUENCE'}, 'SL-PSSCH-TxConfigList-r14': {'element': {'type': 'SL-PSSCH-TxConfig-r14'}, 'size': [(1, 'maxPSSCH-TxConfig-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-PSSCH-TxParameters-r14': {'members': [{'name': 'minMCS-PSSCH-r14', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'maxMCS-PSSCH-r14', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'minSubChannel-NumberPSSCH-r14', 'restricted-to': [(1, 20)], 'type': 'INTEGER'}, {'name': 'maxSubchannel-NumberPSSCH-r14', 'restricted-to': [(1, 20)], 'type': 'INTEGER'}, {'name': 'allowedRetxNumberPSSCH-r14', 'type': 'ENUMERATED', 'values': [('n0', 0), ('n1', 1), ('both', 2), ('spare1', 3)]}, {'name': 'maxTxPower-r14', 'optional': True, 'type': 'SL-TxPower-r14'}], 'type': 'SEQUENCE'}, 'SL-Parameters-r12': {'members': [{'name': 'commSimultaneousTx-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'commSupportedBands-r12', 'optional': True, 'type': 'FreqBandIndicatorListEUTRA-r12'}, {'name': 'discSupportedBands-r12', 'optional': True, 'type': 'SupportedBandInfoList-r12'}, {'name': 'discScheduledResourceAlloc-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'disc-UE-SelectedResourceAlloc-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'disc-SLSS-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'discSupportedProc-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('n50', 0), ('n400', 1)]}], 'type': 'SEQUENCE'}, 'SL-Parameters-v1310': {'members': [{'name': 'discSysInfoReporting-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'commMultipleTx-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'discInterFreqTx-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'discPeriodicSLSS-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'SL-Parameters-v1430': {'members': [{'name': 'zoneBasedPoolSelection-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ue-AutonomousWithFullSensing-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ue-AutonomousWithPartialSensing-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'sl-CongestionControl-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'v2x-TxWithShortResvInterval-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'v2x-numberTxRxTiming-r14', 'optional': True, 'restricted-to': [(1, 16)], 'type': 'INTEGER'}, {'name': 'v2x-nonAdjacentPSCCH-PSSCH-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'slss-TxRx-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'v2x-SupportedBandCombinationList-r14', 'optional': True, 'type': 'V2X-SupportedBandCombination-r14'}], 'type': 'SEQUENCE'}, 'SL-PeriodComm-r12': {'type': 'ENUMERATED', 'values': [('sf40', 0), ('sf60', 1), ('sf70', 2), ('sf80', 3), ('sf120', 4), ('sf140', 5), ('sf160', 6), ('sf240', 7), ('sf280', 8), ('sf320', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare', 15)]}, 'SL-PoolSelectionConfig-r12': {'members': [{'name': 'threshLow-r12', 'type': 'RSRP-RangeSL2-r12'}, {'name': 'threshHigh-r12', 'type': 'RSRP-RangeSL2-r12'}], 'type': 'SEQUENCE'}, 'SL-Priority-r13': {'restricted-to': [(1, 8)], 'type': 'INTEGER'}, 'SL-PriorityList-r13': {'element': {'type': 'SL-Priority-r13'}, 'size': [(1, 'maxSL-Prio-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SL-ResourcesInterFreq-r13': {'members': [{'name': 'discRxResourcesInterFreq-r13', 'optional': True, 'type': 'SL-DiscRxPoolList-r12'}, {'name': 'discTxResourcesInterFreq-r13', 'optional': True, 'type': 'SL-DiscTxResourcesInterFreq-r13'}], 'type': 'SEQUENCE'}, 'SL-RestrictResourceReservationPeriod-r14': {'type': 'ENUMERATED', 'values': [('v0dot2', 0), ('v0dot5', 1), ('v1', 2), ('v2', 3), ('v3', 4), ('v4', 5), ('v5', 6), ('v6', 7), ('v7', 8), ('v8', 9), ('v9', 10), ('v10', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, 'SL-RestrictResourceReservationPeriodList-r14': {'element': {'type': 'SL-RestrictResourceReservationPeriod-r14'}, 'size': [(1, 'maxReservationPeriod-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-SyncAllowed-r14': {'members': [{'name': 'gnss-Sync-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'enb-Sync-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'ue-Sync-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'SL-SyncConfig-r12': {'members': [{'name': 'syncCP-Len-r12', 'type': 'SL-CP-Len-r12'}, {'name': 'syncOffsetIndicator-r12', 'type': 'SL-OffsetIndicatorSync-r12'}, {'name': 'slssid-r12', 'type': 'SLSSID-r12'}, {'members': [{'name': 'syncTxParameters-r12', 'type': 'SL-TxParameters-r12'}, {'name': 'syncTxThreshIC-r12', 'type': 'RSRP-RangeSL-r12'}, {'name': 'syncInfoReserved-r12', 'optional': True, 'size': [19], 'type': 'BIT ' 'STRING'}], 'name': 'txParameters-r12', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'physCellId-r12', 'type': 'PhysCellId'}, {'name': 'discSyncWindow-r12', 'type': 'ENUMERATED', 'values': [('w1', 0), ('w2', 1)]}], 'name': 'rxParamsNCell-r12', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'syncTxPeriodic-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], [{'name': 'syncOffsetIndicator-v1430', 'optional': True, 'type': 'SL-OffsetIndicatorSync-v1430'}, {'name': 'gnss-Sync-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'type': 'SEQUENCE'}, 'SL-SyncConfigList-r12': {'element': {'type': 'SL-SyncConfig-r12'}, 'size': [(1, 'maxSL-SyncConfig-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-SyncConfigListNFreq-r13': {'element': {'type': 'SL-SyncConfigNFreq-r13'}, 'size': [(1, 'maxSL-SyncConfig-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-SyncConfigListNFreqV2X-r14': {'element': {'type': 'SL-SyncConfigNFreq-r13'}, 'size': [(1, 'maxSL-V2X-SyncConfig-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-SyncConfigListV2X-r14': {'element': {'type': 'SL-SyncConfig-r12'}, 'size': [(1, 'maxSL-V2X-SyncConfig-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-SyncConfigNFreq-r13': {'members': [{'members': [{'name': 'syncCP-Len-r13', 'type': 'SL-CP-Len-r12'}, {'name': 'syncOffsetIndicator-r13', 'type': 'SL-OffsetIndicatorSync-r12'}, {'name': 'slssid-r13', 'type': 'SLSSID-r12'}], 'name': 'asyncParameters-r13', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'syncTxParameters-r13', 'type': 'SL-TxParameters-r12'}, {'name': 'syncTxThreshIC-r13', 'type': 'RSRP-RangeSL-r12'}, {'name': 'syncInfoReserved-r13', 'optional': True, 'size': [19], 'type': 'BIT ' 'STRING'}, {'name': 'syncTxPeriodic-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'name': 'txParameters-r13', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'discSyncWindow-r13', 'type': 'ENUMERATED', 'values': [('w1', 0), ('w2', 1)]}], 'name': 'rxParameters-r13', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'syncOffsetIndicator-v1430', 'optional': True, 'type': 'SL-OffsetIndicatorSync-v1430'}, {'name': 'gnss-Sync-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'type': 'SEQUENCE'}, 'SL-SyncTxControl-r12': {'members': [{'name': 'networkControlledSyncTx-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('on', 0), ('off', 1)]}], 'type': 'SEQUENCE'}, 'SL-TF-IndexPair-r12': {'members': [{'name': 'discSF-Index-r12', 'optional': True, 'restricted-to': [(1, 200)], 'type': 'INTEGER'}, {'name': 'discPRB-Index-r12', 'optional': True, 'restricted-to': [(1, 50)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'SL-TF-IndexPair-r12b': {'members': [{'name': 'discSF-Index-r12b', 'optional': True, 'restricted-to': [(0, 209)], 'type': 'INTEGER'}, {'name': 'discPRB-Index-r12b', 'optional': True, 'restricted-to': [(0, 49)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'SL-TF-IndexPairList-r12': {'element': {'type': 'SL-TF-IndexPair-r12'}, 'size': [(1, 'maxSL-TF-IndexPair-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-TF-IndexPairList-r12b': {'element': {'type': 'SL-TF-IndexPair-r12b'}, 'size': [(1, 'maxSL-TF-IndexPair-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-TF-ResourceConfig-r12': {'members': [{'name': 'prb-Num-r12', 'restricted-to': [(1, 100)], 'type': 'INTEGER'}, {'name': 'prb-Start-r12', 'restricted-to': [(0, 99)], 'type': 'INTEGER'}, {'name': 'prb-End-r12', 'restricted-to': [(0, 99)], 'type': 'INTEGER'}, {'name': 'offsetIndicator-r12', 'type': 'SL-OffsetIndicator-r12'}, {'name': 'subframeBitmap-r12', 'type': 'SubframeBitmapSL-r12'}], 'type': 'SEQUENCE'}, 'SL-TRPT-Subset-r12': {'size': [(3, 5)], 'type': 'BIT ' 'STRING'}, 'SL-ThresPSSCH-RSRP-List-r14': {'element': {'type': 'SL-ThresPSSCH-RSRP-r14'}, 'size': [64], 'type': 'SEQUENCE ' 'OF'}, 'SL-ThresPSSCH-RSRP-r14': {'restricted-to': [(0, 66)], 'type': 'INTEGER'}, 'SL-TxParameters-r12': {'members': [{'name': 'alpha-r12', 'type': 'Alpha-r12'}, {'name': 'p0-r12', 'type': 'P0-SL-r12'}], 'type': 'SEQUENCE'}, 'SL-TxPoolIdentity-r12': {'restricted-to': [(1, 'maxSL-TxPool-r12')], 'type': 'INTEGER'}, 'SL-TxPoolIdentity-v1310': {'restricted-to': [('maxSL-TxPool-r12Plus1-r13', 'maxSL-TxPool-r13')], 'type': 'INTEGER'}, 'SL-TxPoolToAddMod-r14': {'members': [{'name': 'poolIdentity-r14', 'type': 'SL-V2X-TxPoolIdentity-r14'}, {'name': 'pool-r14', 'type': 'SL-CommResourcePoolV2X-r14'}], 'type': 'SEQUENCE'}, 'SL-TxPoolToAddModListV2X-r14': {'element': {'type': 'SL-TxPoolToAddMod-r14'}, 'size': [(1, 'maxSL-V2X-TxPool-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-TxPoolToReleaseList-r12': {'element': {'type': 'SL-TxPoolIdentity-r12'}, 'size': [(1, 'maxSL-TxPool-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-TxPoolToReleaseListExt-r13': {'element': {'type': 'SL-TxPoolIdentity-v1310'}, 'size': [(1, 'maxSL-TxPool-v1310')], 'type': 'SEQUENCE ' 'OF'}, 'SL-TxPoolToReleaseListV2X-r14': {'element': {'type': 'SL-V2X-TxPoolIdentity-r14'}, 'size': [(1, 'maxSL-V2X-TxPool-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-TxPower-r14': {'members': [{'name': 'minusinfinity-r14', 'type': 'NULL'}, {'name': 'txPower-r14', 'restricted-to': [(-41, 31)], 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'SL-TypeTxSync-r14': {'type': 'ENUMERATED', 'values': [('gnss', 0), ('enb', 1), ('ue', 2)]}, 'SL-V2X-CommFreqList-r14': {'element': {'restricted-to': [(0, 'maxFreqV2X-1-r14')], 'type': 'INTEGER'}, 'size': [(1, 'maxFreqV2X-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-V2X-CommTxFreqList-r14': {'element': {'type': 'SL-V2X-CommTxResourceReq-r14'}, 'size': [(1, 'maxFreqV2X-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-V2X-CommTxResourceReq-r14': {'members': [{'name': 'carrierFreqCommTx-r14', 'optional': True, 'restricted-to': [(0, 'maxFreqV2X-1-r14')], 'type': 'INTEGER'}, {'name': 'v2x-TypeTxSync-r14', 'optional': True, 'type': 'SL-TypeTxSync-r14'}, {'name': 'v2x-DestinationInfoList-r14', 'optional': True, 'type': 'SL-DestinationInfoList-r12'}], 'type': 'SEQUENCE'}, 'SL-V2X-ConfigCommon-r14': {'members': [{'name': 'v2x-CommRxPool-r14', 'optional': True, 'type': 'SL-CommRxPoolListV2X-r14'}, {'name': 'v2x-CommTxPoolNormalCommon-r14', 'optional': True, 'type': 'SL-CommTxPoolListV2X-r14'}, {'name': 'p2x-CommTxPoolNormalCommon-r14', 'optional': True, 'type': 'SL-CommTxPoolListV2X-r14'}, {'name': 'v2x-CommTxPoolExceptional-r14', 'optional': True, 'type': 'SL-CommResourcePoolV2X-r14'}, {'name': 'v2x-SyncConfig-r14', 'optional': True, 'type': 'SL-SyncConfigListV2X-r14'}, {'name': 'v2x-InterFreqInfoList-r14', 'optional': True, 'type': 'SL-InterFreqInfoListV2X-r14'}, {'name': 'v2x-ResourceSelectionConfig-r14', 'optional': True, 'type': 'SL-CommTxPoolSensingConfig-r14'}, {'name': 'zoneConfig-r14', 'optional': True, 'type': 'SL-ZoneConfig-r14'}, {'name': 'typeTxSync-r14', 'optional': True, 'type': 'SL-TypeTxSync-r14'}, {'name': 'thresSL-TxPrioritization-r14', 'optional': True, 'type': 'SL-Priority-r13'}, {'name': 'anchorCarrierFreqList-r14', 'optional': True, 'type': 'SL-AnchorCarrierFreqList-V2X-r14'}, {'name': 'offsetDFN-r14', 'optional': True, 'restricted-to': [(0, 1000)], 'type': 'INTEGER'}, {'name': 'cbr-CommonTxConfigList-r14', 'optional': True, 'type': 'SL-CBR-CommonTxConfigList-r14'}], 'type': 'SEQUENCE'}, 'SL-V2X-ConfigDedicated-r14': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'sl-V-RNTI-r14', 'type': 'C-RNTI'}, {'name': 'mac-MainConfig-r14', 'type': 'MAC-MainConfigSL-r12'}, {'name': 'v2x-SchedulingPool-r14', 'optional': True, 'type': 'SL-CommResourcePoolV2X-r14'}, {'name': 'mcs-r14', 'optional': True, 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'logicalChGroupInfoList-r14', 'type': 'LogicalChGroupInfoList-r13'}], 'name': 'scheduled-r14', 'type': 'SEQUENCE'}, {'members': [{'members': [{'name': 'poolToReleaseList-r14', 'optional': True, 'type': 'SL-TxPoolToReleaseListV2X-r14'}, {'name': 'poolToAddModList-r14', 'optional': True, 'type': 'SL-TxPoolToAddModListV2X-r14'}, {'name': 'v2x-CommTxPoolSensingConfig-r14', 'optional': True, 'type': 'SL-CommTxPoolSensingConfig-r14'}], 'name': 'v2x-CommTxPoolNormalDedicated-r14', 'type': 'SEQUENCE'}], 'name': 'ue-Selected-r14', 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'CHOICE'}], 'name': 'commTxResources-r14', 'optional': True, 'type': 'CHOICE'}, {'name': 'v2x-InterFreqInfoList-r14', 'optional': True, 'type': 'SL-InterFreqInfoListV2X-r14'}, {'name': 'thresSL-TxPrioritization-r14', 'optional': True, 'type': 'SL-Priority-r13'}, {'name': 'typeTxSync-r14', 'optional': True, 'type': 'SL-TypeTxSync-r14'}, {'name': 'cbr-DedicatedTxConfigList-r14', 'optional': True, 'type': 'SL-CBR-CommonTxConfigList-r14'}, None], 'type': 'SEQUENCE'}, 'SL-V2X-InterFreqUE-Config-r14': {'members': [{'name': 'physCellIdList-r14', 'optional': True, 'type': 'PhysCellIdList-r13'}, {'name': 'typeTxSync-r14', 'optional': True, 'type': 'SL-TypeTxSync-r14'}, {'name': 'v2x-SyncConfig-r14', 'optional': True, 'type': 'SL-SyncConfigListNFreqV2X-r14'}, {'name': 'v2x-CommRxPool-r14', 'optional': True, 'type': 'SL-CommRxPoolListV2X-r14'}, {'name': 'v2x-CommTxPoolNormal-r14', 'optional': True, 'type': 'SL-CommTxPoolListV2X-r14'}, {'name': 'p2x-CommTxPoolNormal-r14', 'optional': True, 'type': 'SL-CommTxPoolListV2X-r14'}, {'name': 'v2x-CommTxPoolExceptional-r14', 'optional': True, 'type': 'SL-CommResourcePoolV2X-r14'}, {'name': 'v2x-ResourceSelectionConfig-r14', 'optional': True, 'type': 'SL-CommTxPoolSensingConfig-r14'}, {'name': 'zoneConfig-r14', 'optional': True, 'type': 'SL-ZoneConfig-r14'}, {'name': 'offsetDFN-r14', 'optional': True, 'restricted-to': [(0, 1000)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'SL-V2X-TxPoolIdentity-r14': {'restricted-to': [(1, 'maxSL-V2X-TxPool-r14')], 'type': 'INTEGER'}, 'SL-V2X-TxPoolReportIdentity-r14': {'restricted-to': [(1, 'maxSL-PoolToMeasure-r14')], 'type': 'INTEGER'}, 'SL-V2X-UE-ConfigList-r14': {'element': {'type': 'SL-V2X-InterFreqUE-Config-r14'}, 'size': [(1, 'maxCellIntra')], 'type': 'SEQUENCE ' 'OF'}, 'SL-ZoneConfig-r14': {'members': [{'name': 'zoneLength-r14', 'type': 'ENUMERATED', 'values': [('m5', 0), ('m10', 1), ('m20', 2), ('m50', 3), ('m100', 4), ('m200', 5), ('m500', 6), ('spare1', 7)]}, {'name': 'zoneWidth-r14', 'type': 'ENUMERATED', 'values': [('m5', 0), ('m10', 1), ('m20', 2), ('m50', 3), ('m100', 4), ('m200', 5), ('m500', 6), ('spare1', 7)]}, {'name': 'zoneIdLongiMod-r14', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}, {'name': 'zoneIdLatiMod-r14', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'SLSSID-r12': {'restricted-to': [(0, 167)], 'type': 'INTEGER'}, 'SN-FieldLength': {'type': 'ENUMERATED', 'values': [('size5', 0), ('size10', 1)]}, 'SON-Parameters-r9': {'members': [{'name': 'rach-Report-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'SPS-Config': {'members': [{'name': 'semiPersistSchedC-RNTI', 'optional': True, 'type': 'C-RNTI'}, {'name': 'sps-ConfigDL', 'optional': True, 'type': 'SPS-ConfigDL'}, {'name': 'sps-ConfigUL', 'optional': True, 'type': 'SPS-ConfigUL'}], 'type': 'SEQUENCE'}, 'SPS-Config-v1430': {'members': [{'name': 'ul-SPS-V-RNTI-r14', 'optional': True, 'type': 'C-RNTI'}, {'name': 'sl-SPS-V-RNTI-r14', 'optional': True, 'type': 'C-RNTI'}, {'name': 'sps-ConfigUL-ToAddModList-r14', 'optional': True, 'type': 'SPS-ConfigUL-ToAddModList-r14'}, {'name': 'sps-ConfigUL-ToReleaseList-r14', 'optional': True, 'type': 'SPS-ConfigUL-ToReleaseList-r14'}, {'name': 'sps-ConfigSL-ToAddModList-r14', 'optional': True, 'type': 'SPS-ConfigSL-ToAddModList-r14'}, {'name': 'sps-ConfigSL-ToReleaseList-r14', 'optional': True, 'type': 'SPS-ConfigSL-ToReleaseList-r14'}], 'type': 'SEQUENCE'}, 'SPS-ConfigDL': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'semiPersistSchedIntervalDL', 'type': 'ENUMERATED', 'values': [('sf10', 0), ('sf20', 1), ('sf32', 2), ('sf40', 3), ('sf64', 4), ('sf80', 5), ('sf128', 6), ('sf160', 7), ('sf320', 8), ('sf640', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'numberOfConfSPS-Processes', 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, {'name': 'n1PUCCH-AN-PersistentList', 'type': 'N1PUCCH-AN-PersistentList'}, None, [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'n1PUCCH-AN-PersistentListP1-r10', 'type': 'N1PUCCH-AN-PersistentList'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'twoAntennaPortActivated-r10', 'optional': True, 'type': 'CHOICE'}]], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SPS-ConfigIndex-r14': {'restricted-to': [(1, 'maxConfigSPS-r14')], 'type': 'INTEGER'}, 'SPS-ConfigSL-ToAddModList-r14': {'element': {'type': 'SPS-ConfigSL-r14'}, 'size': [(1, 'maxConfigSPS-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SPS-ConfigSL-ToReleaseList-r14': {'element': {'type': 'SPS-ConfigIndex-r14'}, 'size': [(1, 'maxConfigSPS-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SPS-ConfigSL-r14': {'members': [{'name': 'sps-ConfigIndex-r14', 'type': 'SPS-ConfigIndex-r14'}, {'name': 'semiPersistSchedIntervalSL-r14', 'type': 'ENUMERATED', 'values': [('sf20', 0), ('sf50', 1), ('sf100', 2), ('sf200', 3), ('sf300', 4), ('sf400', 5), ('sf500', 6), ('sf600', 7), ('sf700', 8), ('sf800', 9), ('sf900', 10), ('sf1000', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}], 'type': 'SEQUENCE'}, 'SPS-ConfigUL': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'semiPersistSchedIntervalUL', 'type': 'ENUMERATED', 'values': [('sf10', 0), ('sf20', 1), ('sf32', 2), ('sf40', 3), ('sf64', 4), ('sf80', 5), ('sf128', 6), ('sf160', 7), ('sf320', 8), ('sf640', 9), ('sf1-v1430', 10), ('sf2-v1430', 11), ('sf3-v1430', 12), ('sf4-v1430', 13), ('sf5-v1430', 14), ('spare1', 15)]}, {'name': 'implicitReleaseAfter', 'type': 'ENUMERATED', 'values': [('e2', 0), ('e3', 1), ('e4', 2), ('e8', 3)]}, {'members': [{'name': 'p0-NominalPUSCH-Persistent', 'restricted-to': [(-126, 24)], 'type': 'INTEGER'}, {'name': 'p0-UE-PUSCH-Persistent', 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}], 'name': 'p0-Persistent', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'twoIntervalsConfig', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, None, [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'p0-NominalPUSCH-PersistentSubframeSet2-r12', 'restricted-to': [(-126, 24)], 'type': 'INTEGER'}, {'name': 'p0-UE-PUSCH-PersistentSubframeSet2-r12', 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'p0-PersistentSubframeSet2-r12', 'optional': True, 'type': 'CHOICE'}], [{'name': 'numberOfConfUlSPS-Processes-r13', 'optional': True, 'restricted-to': [(1, 8)], 'type': 'INTEGER'}], [{'name': 'fixedRV-NonAdaptive-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'sps-ConfigIndex-r14', 'optional': True, 'type': 'SPS-ConfigIndex-r14'}, {'name': 'semiPersistSchedIntervalUL-v1430', 'optional': True, 'type': 'ENUMERATED', 'values': [('sf50', 0), ('sf100', 1), ('sf200', 2), ('sf300', 3), ('sf400', 4), ('sf500', 5), ('sf600', 6), ('sf700', 7), ('sf800', 8), ('sf900', 9), ('sf1000', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}]], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SPS-ConfigUL-ToAddModList-r14': {'element': {'type': 'SPS-ConfigUL'}, 'size': [(1, 'maxConfigSPS-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SPS-ConfigUL-ToReleaseList-r14': {'element': {'type': 'SPS-ConfigIndex-r14'}, 'size': [(1, 'maxConfigSPS-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SRB-ToAddMod': {'members': [{'name': 'srb-Identity', 'restricted-to': [(1, 2)], 'type': 'INTEGER'}, {'members': [{'name': 'explicitValue', 'type': 'RLC-Config'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'rlc-Config', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'explicitValue', 'type': 'LogicalChannelConfig'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'logicalChannelConfig', 'optional': True, 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'SRB-ToAddModList': {'element': {'type': 'SRB-ToAddMod'}, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, 'SRS-AntennaPort': {'type': 'ENUMERATED', 'values': [('an1', 0), ('an2', 1), ('an4', 2), ('spare1', 3)]}, 'SRS-CC-SetIndex-r14': {'members': [{'name': 'cc-SetIndex-r14', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'cc-IndexInOneCC-Set-r14', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'SRS-ConfigAp-r10': {'members': [{'name': 'srs-AntennaPortAp-r10', 'type': 'SRS-AntennaPort'}, {'name': 'srs-BandwidthAp-r10', 'type': 'ENUMERATED', 'values': [('bw0', 0), ('bw1', 1), ('bw2', 2), ('bw3', 3)]}, {'name': 'freqDomainPositionAp-r10', 'restricted-to': [(0, 23)], 'type': 'INTEGER'}, {'name': 'transmissionCombAp-r10', 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'cyclicShiftAp-r10', 'type': 'ENUMERATED', 'values': [('cs0', 0), ('cs1', 1), ('cs2', 2), ('cs3', 3), ('cs4', 4), ('cs5', 5), ('cs6', 6), ('cs7', 7)]}], 'type': 'SEQUENCE'}, 'SRS-ConfigAp-r13': {'members': [{'name': 'srs-AntennaPortAp-r13', 'type': 'SRS-AntennaPort'}, {'name': 'srs-BandwidthAp-r13', 'type': 'ENUMERATED', 'values': [('bw0', 0), ('bw1', 1), ('bw2', 2), ('bw3', 3)]}, {'name': 'freqDomainPositionAp-r13', 'restricted-to': [(0, 23)], 'type': 'INTEGER'}, {'name': 'transmissionCombAp-r13', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'cyclicShiftAp-r13', 'type': 'ENUMERATED', 'values': [('cs0', 0), ('cs1', 1), ('cs2', 2), ('cs3', 3), ('cs4', 4), ('cs5', 5), ('cs6', 6), ('cs7', 7), ('cs8', 8), ('cs9', 9), ('cs10', 10), ('cs11', 11)]}, {'name': 'transmissionCombNum-r13', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1)]}], 'type': 'SEQUENCE'}, 'SRS-ConfigAp-v1310': {'members': [{'name': 'transmissionCombAp-v1310', 'optional': True, 'restricted-to': [(2, 3)], 'type': 'INTEGER'}, {'name': 'cyclicShiftAp-v1310', 'optional': True, 'type': 'ENUMERATED', 'values': [('cs8', 0), ('cs9', 1), ('cs10', 2), ('cs11', 3)]}, {'name': 'transmissionCombNum-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1)]}], 'type': 'SEQUENCE'}, 'SRS-TPC-PDCCH-Config-r14': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'srs-TPC-RNTI-r14', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'startingBitOfFormat3B-r14', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'fieldTypeFormat3B-r14', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}, {'element': {'type': 'SRS-CC-SetIndex-r14'}, 'name': 'srs-CC-SetIndexlist-r14', 'optional': True, 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'STAG-Id-r11': {'restricted-to': [(1, 'maxSTAG-r11')], 'type': 'INTEGER'}, 'STAG-ToAddMod-r11': {'members': [{'name': 'stag-Id-r11', 'type': 'STAG-Id-r11'}, {'name': 'timeAlignmentTimerSTAG-r11', 'type': 'TimeAlignmentTimer'}, None], 'type': 'SEQUENCE'}, 'STAG-ToAddModList-r11': {'element': {'type': 'STAG-ToAddMod-r11'}, 'size': [(1, 'maxSTAG-r11')], 'type': 'SEQUENCE ' 'OF'}, 'STAG-ToReleaseList-r11': {'element': {'type': 'STAG-Id-r11'}, 'size': [(1, 'maxSTAG-r11')], 'type': 'SEQUENCE ' 'OF'}, 'SchedulingInfo': {'members': [{'name': 'si-Periodicity', 'type': 'ENUMERATED', 'values': [('rf8', 0), ('rf16', 1), ('rf32', 2), ('rf64', 3), ('rf128', 4), ('rf256', 5), ('rf512', 6)]}, {'name': 'sib-MappingInfo', 'type': 'SIB-MappingInfo'}], 'type': 'SEQUENCE'}, 'SchedulingInfo-BR-r13': {'members': [{'name': 'si-Narrowband-r13', 'restricted-to': [(1, 'maxAvailNarrowBands-r13')], 'type': 'INTEGER'}, {'name': 'si-TBS-r13', 'type': 'ENUMERATED', 'values': [('b152', 0), ('b208', 1), ('b256', 2), ('b328', 3), ('b408', 4), ('b504', 5), ('b600', 6), ('b712', 7), ('b808', 8), ('b936', 9)]}], 'type': 'SEQUENCE'}, 'SchedulingInfo-MBMS-r14': {'members': [{'name': 'si-Periodicity-r14', 'type': 'ENUMERATED', 'values': [('rf16', 0), ('rf32', 1), ('rf64', 2), ('rf128', 3), ('rf256', 4), ('rf512', 5)]}, {'name': 'sib-MappingInfo-r14', 'type': 'SIB-MappingInfo-MBMS-r14'}], 'type': 'SEQUENCE'}, 'SchedulingInfoList': {'element': {'type': 'SchedulingInfo'}, 'size': [(1, 'maxSI-Message')], 'type': 'SEQUENCE ' 'OF'}, 'SchedulingInfoList-BR-r13': {'element': {'type': 'SchedulingInfo-BR-r13'}, 'size': [(1, 'maxSI-Message')], 'type': 'SEQUENCE ' 'OF'}, 'SchedulingInfoList-MBMS-r14': {'element': {'type': 'SchedulingInfo-MBMS-r14'}, 'size': [(1, 'maxSI-Message')], 'type': 'SEQUENCE ' 'OF'}, 'SchedulingRequestConfig': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'sr-PUCCH-ResourceIndex', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'sr-ConfigIndex', 'restricted-to': [(0, 157)], 'type': 'INTEGER'}, {'name': 'dsr-TransMax', 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1), ('n16', 2), ('n32', 3), ('n64', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SchedulingRequestConfig-v1020': {'members': [{'name': 'sr-PUCCH-ResourceIndexP1-r10', 'optional': True, 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'SchedulingRequestConfigSCell-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'sr-PUCCH-ResourceIndex-r13', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'sr-PUCCH-ResourceIndexP1-r13', 'optional': True, 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'sr-ConfigIndex-r13', 'restricted-to': [(0, 157)], 'type': 'INTEGER'}, {'name': 'dsr-TransMax-r13', 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1), ('n16', 2), ('n32', 3), ('n64', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SecondaryPreRegistrationZoneIdListHRPD': {'element': {'type': 'PreRegistrationZoneIdHRPD'}, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, 'SecurityAlgorithmConfig': {'members': [{'name': 'cipheringAlgorithm', 'type': 'CipheringAlgorithm-r12'}, {'name': 'integrityProtAlgorithm', 'type': 'ENUMERATED', 'values': [('eia0-v920', 0), ('eia1', 1), ('eia2', 2), ('eia3-v1130', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7), None]}], 'type': 'SEQUENCE'}, 'SecurityConfigHO': {'members': [{'members': [{'members': [{'name': 'securityAlgorithmConfig', 'optional': True, 'type': 'SecurityAlgorithmConfig'}, {'name': 'keyChangeIndicator', 'type': 'BOOLEAN'}, {'name': 'nextHopChainingCount', 'type': 'NextHopChainingCount'}], 'name': 'intraLTE', 'type': 'SEQUENCE'}, {'members': [{'name': 'securityAlgorithmConfig', 'type': 'SecurityAlgorithmConfig'}, {'name': 'nas-SecurityParamToEUTRA', 'size': [6], 'type': 'OCTET ' 'STRING'}], 'name': 'interRAT', 'type': 'SEQUENCE'}], 'name': 'handoverType', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'SecurityConfigSMC': {'members': [{'name': 'securityAlgorithmConfig', 'type': 'SecurityAlgorithmConfig'}, None], 'type': 'SEQUENCE'}, 'SecurityModeCommand': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'securityModeCommand-r8', 'type': 'SecurityModeCommand-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SecurityModeCommand-r8-IEs': {'members': [{'name': 'securityConfigSMC', 'type': 'SecurityConfigSMC'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SecurityModeCommand-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'SecurityModeCommand-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SecurityModeComplete': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'securityModeComplete-r8', 'type': 'SecurityModeComplete-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SecurityModeComplete-r8-IEs': {'members': [{'name': 'nonCriticalExtension', 'optional': True, 'type': 'SecurityModeComplete-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'SecurityModeComplete-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SecurityModeFailure': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'securityModeFailure-r8', 'type': 'SecurityModeFailure-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SecurityModeFailure-r8-IEs': {'members': [{'name': 'nonCriticalExtension', 'optional': True, 'type': 'SecurityModeFailure-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'SecurityModeFailure-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'ServCellIndex-r10': {'restricted-to': [(0, 7)], 'type': 'INTEGER'}, 'ServCellIndex-r13': {'restricted-to': [(0, 31)], 'type': 'INTEGER'}, 'ShortMAC-I': {'size': [16], 'type': 'BIT STRING'}, 'SidelinkUEInformation-r12': {'members': [{'members': [{'members': [{'name': 'sidelinkUEInformation-r12', 'type': 'SidelinkUEInformation-r12-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SidelinkUEInformation-r12-IEs': {'members': [{'name': 'commRxInterestedFreq-r12', 'optional': True, 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'commTxResourceReq-r12', 'optional': True, 'type': 'SL-CommTxResourceReq-r12'}, {'name': 'discRxInterest-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'discTxResourceReq-r12', 'optional': True, 'restricted-to': [(1, 63)], 'type': 'INTEGER'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SidelinkUEInformation-v1310-IEs'}], 'type': 'SEQUENCE'}, 'SidelinkUEInformation-v1310-IEs': {'members': [{'name': 'commTxResourceReqUC-r13', 'optional': True, 'type': 'SL-CommTxResourceReq-r12'}, {'members': [{'name': 'commTxResourceReqRelay-r13', 'optional': True, 'type': 'SL-CommTxResourceReq-r12'}, {'name': 'commTxResourceReqRelayUC-r13', 'optional': True, 'type': 'SL-CommTxResourceReq-r12'}, {'name': 'ue-Type-r13', 'type': 'ENUMERATED', 'values': [('relayUE', 0), ('remoteUE', 1)]}], 'name': 'commTxResourceInfoReqRelay-r13', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'carrierFreqDiscTx-r13', 'optional': True, 'restricted-to': [(1, 'maxFreq')], 'type': 'INTEGER'}, {'name': 'discTxResourceReqAddFreq-r13', 'optional': True, 'type': 'SL-DiscTxResourceReqPerFreqList-r13'}], 'name': 'discTxResourceReq-v1310', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'discTxResourceReqPS-r13', 'optional': True, 'type': 'SL-DiscTxResourceReq-r13'}, {'name': 'discRxGapReq-r13', 'optional': True, 'type': 'SL-GapRequest-r13'}, {'name': 'discTxGapReq-r13', 'optional': True, 'type': 'SL-GapRequest-r13'}, {'name': 'discSysInfoReportFreqList-r13', 'optional': True, 'type': 'SL-DiscSysInfoReportFreqList-r13'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SidelinkUEInformation-v1430-IEs'}], 'type': 'SEQUENCE'}, 'SidelinkUEInformation-v1430-IEs': {'members': [{'name': 'v2x-CommRxInterestedFreqList-r14', 'optional': True, 'type': 'SL-V2X-CommFreqList-r14'}, {'name': 'p2x-CommTxType-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'v2x-CommTxResourceReq-r14', 'optional': True, 'type': 'SL-V2X-CommTxFreqList-r14'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SoundingRS-AperiodicSet-r14': {'members': [{'element': {'type': 'SRS-CC-SetIndex-r14'}, 'name': 'srs-CC-SetIndexList-r14', 'optional': True, 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'soundingRS-UL-ConfigDedicatedAperiodic-r14', 'type': 'SoundingRS-UL-ConfigDedicatedAperiodic-r10'}], 'type': 'SEQUENCE'}, 'SoundingRS-AperiodicSetUpPTsExt-r14': {'members': [{'element': {'type': 'SRS-CC-SetIndex-r14'}, 'name': 'srs-CC-SetIndexList-r14', 'optional': True, 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'soundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r14', 'type': 'SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13'}], 'type': 'SEQUENCE'}, 'SoundingRS-UL-ConfigCommon': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'srs-BandwidthConfig', 'type': 'ENUMERATED', 'values': [('bw0', 0), ('bw1', 1), ('bw2', 2), ('bw3', 3), ('bw4', 4), ('bw5', 5), ('bw6', 6), ('bw7', 7)]}, {'name': 'srs-SubframeConfig', 'type': 'ENUMERATED', 'values': [('sc0', 0), ('sc1', 1), ('sc2', 2), ('sc3', 3), ('sc4', 4), ('sc5', 5), ('sc6', 6), ('sc7', 7), ('sc8', 8), ('sc9', 9), ('sc10', 10), ('sc11', 11), ('sc12', 12), ('sc13', 13), ('sc14', 14), ('sc15', 15)]}, {'name': 'ackNackSRS-SimultaneousTransmission', 'type': 'BOOLEAN'}, {'name': 'srs-MaxUpPts', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SoundingRS-UL-ConfigDedicated': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'srs-Bandwidth', 'type': 'ENUMERATED', 'values': [('bw0', 0), ('bw1', 1), ('bw2', 2), ('bw3', 3)]}, {'name': 'srs-HoppingBandwidth', 'type': 'ENUMERATED', 'values': [('hbw0', 0), ('hbw1', 1), ('hbw2', 2), ('hbw3', 3)]}, {'name': 'freqDomainPosition', 'restricted-to': [(0, 23)], 'type': 'INTEGER'}, {'name': 'duration', 'type': 'BOOLEAN'}, {'name': 'srs-ConfigIndex', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'transmissionComb', 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'cyclicShift', 'type': 'ENUMERATED', 'values': [('cs0', 0), ('cs1', 1), ('cs2', 2), ('cs3', 3), ('cs4', 4), ('cs5', 5), ('cs6', 6), ('cs7', 7)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SoundingRS-UL-ConfigDedicated-v1020': {'members': [{'name': 'srs-AntennaPort-r10', 'type': 'SRS-AntennaPort'}], 'type': 'SEQUENCE'}, 'SoundingRS-UL-ConfigDedicated-v1310': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'transmissionComb-v1310', 'optional': True, 'restricted-to': [(2, 3)], 'type': 'INTEGER'}, {'name': 'cyclicShift-v1310', 'optional': True, 'type': 'ENUMERATED', 'values': [('cs8', 0), ('cs9', 1), ('cs10', 2), ('cs11', 3)]}, {'name': 'transmissionCombNum-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SoundingRS-UL-ConfigDedicatedAperiodic-r10': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'srs-ConfigIndexAp-r10', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'element': {'type': 'SRS-ConfigAp-r10'}, 'name': 'srs-ConfigApDCI-Format4-r10', 'optional': True, 'size': [(1, 3)], 'type': 'SEQUENCE ' 'OF'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'srs-ConfigApDCI-Format0-r10', 'type': 'SRS-ConfigAp-r10'}, {'name': 'srs-ConfigApDCI-Format1a2b2c-r10', 'type': 'SRS-ConfigAp-r10'}, None], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'srs-ActivateAp-r10', 'optional': True, 'type': 'CHOICE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SoundingRS-UL-ConfigDedicatedAperiodic-v1310': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'element': {'type': 'SRS-ConfigAp-v1310'}, 'name': 'srs-ConfigApDCI-Format4-v1310', 'optional': True, 'size': [(1, 3)], 'type': 'SEQUENCE ' 'OF'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'srs-ConfigApDCI-Format0-v1310', 'optional': True, 'type': 'SRS-ConfigAp-v1310'}, {'name': 'srs-ConfigApDCI-Format1a2b2c-v1310', 'optional': True, 'type': 'SRS-ConfigAp-v1310'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'srs-ActivateAp-v1310', 'optional': True, 'type': 'CHOICE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SoundingRS-UL-ConfigDedicatedAperiodic-v1430': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'srs-SubframeIndication-r14', 'optional': True, 'restricted-to': [(1, 4)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SoundingRS-UL-ConfigDedicatedAperiodicUpPTsExt-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'srs-UpPtsAdd-r13', 'type': 'ENUMERATED', 'values': [('sym2', 0), ('sym4', 1)]}, {'name': 'srs-ConfigIndexAp-r13', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'element': {'type': 'SRS-ConfigAp-r13'}, 'name': 'srs-ConfigApDCI-Format4-r13', 'optional': True, 'size': [(1, 3)], 'type': 'SEQUENCE ' 'OF'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'srs-ConfigApDCI-Format0-r13', 'type': 'SRS-ConfigAp-r13'}, {'name': 'srs-ConfigApDCI-Format1a2b2c-r13', 'type': 'SRS-ConfigAp-r13'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'srs-ActivateAp-r13', 'optional': True, 'type': 'CHOICE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SoundingRS-UL-ConfigDedicatedUpPTsExt-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'srs-UpPtsAdd-r13', 'type': 'ENUMERATED', 'values': [('sym2', 0), ('sym4', 1)]}, {'name': 'srs-Bandwidth-r13', 'type': 'ENUMERATED', 'values': [('bw0', 0), ('bw1', 1), ('bw2', 2), ('bw3', 3)]}, {'name': 'srs-HoppingBandwidth-r13', 'type': 'ENUMERATED', 'values': [('hbw0', 0), ('hbw1', 1), ('hbw2', 2), ('hbw3', 3)]}, {'name': 'freqDomainPosition-r13', 'restricted-to': [(0, 23)], 'type': 'INTEGER'}, {'name': 'duration-r13', 'type': 'BOOLEAN'}, {'name': 'srs-ConfigIndex-r13', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'transmissionComb-r13', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'cyclicShift-r13', 'type': 'ENUMERATED', 'values': [('cs0', 0), ('cs1', 1), ('cs2', 2), ('cs3', 3), ('cs4', 4), ('cs5', 5), ('cs6', 6), ('cs7', 7), ('cs8', 8), ('cs9', 9), ('cs10', 10), ('cs11', 11)]}, {'name': 'srs-AntennaPort-r13', 'type': 'SRS-AntennaPort'}, {'name': 'transmissionCombNum-r13', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SpeedStateScaleFactors': {'members': [{'name': 'sf-Medium', 'type': 'ENUMERATED', 'values': [('oDot25', 0), ('oDot5', 1), ('oDot75', 2), ('lDot0', 3)]}, {'name': 'sf-High', 'type': 'ENUMERATED', 'values': [('oDot25', 0), ('oDot5', 1), ('oDot75', 2), ('lDot0', 3)]}], 'type': 'SEQUENCE'}, 'SubframeBitmapSL-r12': {'members': [{'name': 'bs4-r12', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'bs8-r12', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'bs12-r12', 'size': [12], 'type': 'BIT ' 'STRING'}, {'name': 'bs16-r12', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'bs30-r12', 'size': [30], 'type': 'BIT ' 'STRING'}, {'name': 'bs40-r12', 'size': [40], 'type': 'BIT ' 'STRING'}, {'name': 'bs42-r12', 'size': [42], 'type': 'BIT ' 'STRING'}], 'type': 'CHOICE'}, 'SubframeBitmapSL-r14': {'members': [{'name': 'bs10-r14', 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'bs16-r14', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'bs20-r14', 'size': [20], 'type': 'BIT ' 'STRING'}, {'name': 'bs30-r14', 'size': [30], 'type': 'BIT ' 'STRING'}, {'name': 'bs40-r14', 'size': [40], 'type': 'BIT ' 'STRING'}, {'name': 'bs50-r14', 'size': [50], 'type': 'BIT ' 'STRING'}, {'name': 'bs60-r14', 'size': [60], 'type': 'BIT ' 'STRING'}, {'name': 'bs100-r14', 'size': [100], 'type': 'BIT ' 'STRING'}], 'type': 'CHOICE'}, 'SupportedBandCombination-r10': {'element': {'type': 'BandCombinationParameters-r10'}, 'size': [(1, 'maxBandComb-r10')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombination-v1090': {'element': {'type': 'BandCombinationParameters-v1090'}, 'size': [(1, 'maxBandComb-r10')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombination-v10i0': {'element': {'type': 'BandCombinationParameters-v10i0'}, 'size': [(1, 'maxBandComb-r10')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombination-v1130': {'element': {'type': 'BandCombinationParameters-v1130'}, 'size': [(1, 'maxBandComb-r10')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombination-v1250': {'element': {'type': 'BandCombinationParameters-v1250'}, 'size': [(1, 'maxBandComb-r10')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombination-v1270': {'element': {'type': 'BandCombinationParameters-v1270'}, 'size': [(1, 'maxBandComb-r10')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombination-v1320': {'element': {'type': 'BandCombinationParameters-v1320'}, 'size': [(1, 'maxBandComb-r10')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombination-v1430': {'element': {'type': 'BandCombinationParameters-v1430'}, 'size': [(1, 'maxBandComb-r10')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombinationAdd-r11': {'element': {'type': 'BandCombinationParameters-r11'}, 'size': [(1, 'maxBandComb-r11')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombinationAdd-v11d0': {'element': {'type': 'BandCombinationParameters-v10i0'}, 'size': [(1, 'maxBandComb-r11')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombinationAdd-v1250': {'element': {'type': 'BandCombinationParameters-v1250'}, 'size': [(1, 'maxBandComb-r11')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombinationAdd-v1270': {'element': {'type': 'BandCombinationParameters-v1270'}, 'size': [(1, 'maxBandComb-r11')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombinationAdd-v1320': {'element': {'type': 'BandCombinationParameters-v1320'}, 'size': [(1, 'maxBandComb-r11')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombinationAdd-v1430': {'element': {'type': 'BandCombinationParameters-v1430'}, 'size': [(1, 'maxBandComb-r11')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombinationExt-r10': {'element': {'type': 'BandCombinationParametersExt-r10'}, 'size': [(1, 'maxBandComb-r10')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombinationReduced-r13': {'element': {'type': 'BandCombinationParameters-r13'}, 'size': [(1, 'maxBandComb-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombinationReduced-v1320': {'element': {'type': 'BandCombinationParameters-v1320'}, 'size': [(1, 'maxBandComb-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandCombinationReduced-v1430': {'element': {'type': 'BandCombinationParameters-v1430'}, 'size': [(1, 'maxBandComb-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandEUTRA': {'members': [{'name': 'bandEUTRA', 'type': 'FreqBandIndicator'}, {'name': 'halfDuplex', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'SupportedBandEUTRA-v1250': {'members': [{'name': 'dl-256QAM-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ul-64QAM-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'SupportedBandEUTRA-v1310': {'members': [{'name': 'ue-PowerClass-5-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'SupportedBandEUTRA-v1320': {'members': [{'name': 'intraFreq-CE-NeedForGaps-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'ue-PowerClass-N-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('class1', 0), ('class2', 1), ('class4', 2)]}], 'type': 'SEQUENCE'}, 'SupportedBandEUTRA-v9e0': {'members': [{'name': 'bandEUTRA-v9e0', 'optional': True, 'type': 'FreqBandIndicator-v9e0'}], 'type': 'SEQUENCE'}, 'SupportedBandGERAN': {'type': 'ENUMERATED', 'values': [('gsm450', 0), ('gsm480', 1), ('gsm710', 2), ('gsm750', 3), ('gsm810', 4), ('gsm850', 5), ('gsm900P', 6), ('gsm900E', 7), ('gsm900R', 8), ('gsm1800', 9), ('gsm1900', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15), None]}, 'SupportedBandInfo-r12': {'members': [{'name': 'support-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'SupportedBandInfoList-r12': {'element': {'type': 'SupportedBandInfo-r12'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandList1XRTT': {'element': {'type': 'BandclassCDMA2000'}, 'size': [(1, 'maxCDMA-BandClass')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListEUTRA': {'element': {'type': 'SupportedBandEUTRA'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListEUTRA-v1250': {'element': {'type': 'SupportedBandEUTRA-v1250'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListEUTRA-v1310': {'element': {'type': 'SupportedBandEUTRA-v1310'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListEUTRA-v1320': {'element': {'type': 'SupportedBandEUTRA-v1320'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListEUTRA-v9e0': {'element': {'type': 'SupportedBandEUTRA-v9e0'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListGERAN': {'element': {'type': 'SupportedBandGERAN'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListHRPD': {'element': {'type': 'BandclassCDMA2000'}, 'size': [(1, 'maxCDMA-BandClass')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListUTRA-FDD': {'element': {'type': 'SupportedBandUTRA-FDD'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListUTRA-TDD128': {'element': {'type': 'SupportedBandUTRA-TDD128'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListUTRA-TDD384': {'element': {'type': 'SupportedBandUTRA-TDD384'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListUTRA-TDD768': {'element': {'type': 'SupportedBandUTRA-TDD768'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandUTRA-FDD': {'type': 'ENUMERATED', 'values': [('bandI', 0), ('bandII', 1), ('bandIII', 2), ('bandIV', 3), ('bandV', 4), ('bandVI', 5), ('bandVII', 6), ('bandVIII', 7), ('bandIX', 8), ('bandX', 9), ('bandXI', 10), ('bandXII', 11), ('bandXIII', 12), ('bandXIV', 13), ('bandXV', 14), ('bandXVI', 15), None, ('bandXVII-8a0', 16), ('bandXVIII-8a0', 17), ('bandXIX-8a0', 18), ('bandXX-8a0', 19), ('bandXXI-8a0', 20), ('bandXXII-8a0', 21), ('bandXXIII-8a0', 22), ('bandXXIV-8a0', 23), ('bandXXV-8a0', 24), ('bandXXVI-8a0', 25), ('bandXXVII-8a0', 26), ('bandXXVIII-8a0', 27), ('bandXXIX-8a0', 28), ('bandXXX-8a0', 29), ('bandXXXI-8a0', 30), ('bandXXXII-8a0', 31)]}, 'SupportedBandUTRA-TDD128': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9), ('k', 10), ('l', 11), ('m', 12), ('n', 13), ('o', 14), ('p', 15), None]}, 'SupportedBandUTRA-TDD384': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9), ('k', 10), ('l', 11), ('m', 12), ('n', 13), ('o', 14), ('p', 15), None]}, 'SupportedBandUTRA-TDD768': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9), ('k', 10), ('l', 11), ('m', 12), ('n', 13), ('o', 14), ('p', 15), None]}, 'SupportedBandwidthCombinationSet-r10': {'size': [(1, 'maxBandwidthCombSet-r10')], 'type': 'BIT ' 'STRING'}, 'SystemInfoListGERAN': {'element': {'size': [(1, 23)], 'type': 'OCTET ' 'STRING'}, 'size': [(1, 'maxGERAN-SI')], 'type': 'SEQUENCE ' 'OF'}, 'SystemInfoValueTagList-r13': {'element': {'type': 'SystemInfoValueTagSI-r13'}, 'size': [(1, 'maxSI-Message')], 'type': 'SEQUENCE ' 'OF'}, 'SystemInfoValueTagSI-r13': {'restricted-to': [(0, 3)], 'type': 'INTEGER'}, 'SystemInformation': {'members': [{'members': [{'name': 'systemInformation-r8', 'type': 'SystemInformation-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SystemInformation-BR-r13': {'type': 'SystemInformation'}, 'SystemInformation-MBMS-r14': {'type': 'SystemInformation'}, 'SystemInformation-r8-IEs': {'members': [{'element': {'members': [{'name': 'sib2', 'type': 'SystemInformationBlockType2'}, {'name': 'sib3', 'type': 'SystemInformationBlockType3'}, {'name': 'sib4', 'type': 'SystemInformationBlockType4'}, {'name': 'sib5', 'type': 'SystemInformationBlockType5'}, {'name': 'sib6', 'type': 'SystemInformationBlockType6'}, {'name': 'sib7', 'type': 'SystemInformationBlockType7'}, {'name': 'sib8', 'type': 'SystemInformationBlockType8'}, {'name': 'sib9', 'type': 'SystemInformationBlockType9'}, {'name': 'sib10', 'type': 'SystemInformationBlockType10'}, {'name': 'sib11', 'type': 'SystemInformationBlockType11'}, None, {'name': 'sib12-v920', 'type': 'SystemInformationBlockType12-r9'}, {'name': 'sib13-v920', 'type': 'SystemInformationBlockType13-r9'}, {'name': 'sib14-v1130', 'type': 'SystemInformationBlockType14-r11'}, {'name': 'sib15-v1130', 'type': 'SystemInformationBlockType15-r11'}, {'name': 'sib16-v1130', 'type': 'SystemInformationBlockType16-r11'}, {'name': 'sib17-v1250', 'type': 'SystemInformationBlockType17-r12'}, {'name': 'sib18-v1250', 'type': 'SystemInformationBlockType18-r12'}, {'name': 'sib19-v1250', 'type': 'SystemInformationBlockType19-r12'}, {'name': 'sib20-v1310', 'type': 'SystemInformationBlockType20-r13'}, {'name': 'sib21-v1430', 'type': 'SystemInformationBlockType21-r14'}], 'type': 'CHOICE'}, 'name': 'sib-TypeAndInfo', 'size': [(1, 'maxSIB')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformation-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformation-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1': {'members': [{'members': [{'name': 'plmn-IdentityList', 'type': 'PLMN-IdentityList'}, {'name': 'trackingAreaCode', 'type': 'TrackingAreaCode'}, {'name': 'cellIdentity', 'type': 'CellIdentity'}, {'name': 'cellBarred', 'type': 'ENUMERATED', 'values': [('barred', 0), ('notBarred', 1)]}, {'name': 'intraFreqReselection', 'type': 'ENUMERATED', 'values': [('allowed', 0), ('notAllowed', 1)]}, {'name': 'csg-Indication', 'type': 'BOOLEAN'}, {'name': 'csg-Identity', 'optional': True, 'type': 'CSG-Identity'}], 'name': 'cellAccessRelatedInfo', 'type': 'SEQUENCE'}, {'members': [{'name': 'q-RxLevMin', 'type': 'Q-RxLevMin'}, {'name': 'q-RxLevMinOffset', 'optional': True, 'restricted-to': [(1, 8)], 'type': 'INTEGER'}], 'name': 'cellSelectionInfo', 'type': 'SEQUENCE'}, {'name': 'p-Max', 'optional': True, 'type': 'P-Max'}, {'name': 'freqBandIndicator', 'type': 'FreqBandIndicator'}, {'name': 'schedulingInfoList', 'type': 'SchedulingInfoList'}, {'name': 'tdd-Config', 'optional': True, 'type': 'TDD-Config'}, {'name': 'si-WindowLength', 'type': 'ENUMERATED', 'values': [('ms1', 0), ('ms2', 1), ('ms5', 2), ('ms10', 3), ('ms15', 4), ('ms20', 5), ('ms40', 6)]}, {'name': 'systemInfoValueTag', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-v890-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-BR-r13': {'type': 'SystemInformationBlockType1'}, 'SystemInformationBlockType1-MBMS-r14': {'members': [{'members': [{'name': 'plmn-IdentityList-r14', 'type': 'PLMN-IdentityList-MBMS-r14'}, {'name': 'trackingAreaCode-r14', 'type': 'TrackingAreaCode'}, {'name': 'cellIdentity-r14', 'type': 'CellIdentity'}], 'name': 'cellAccessRelatedInfo-r14', 'type': 'SEQUENCE'}, {'name': 'freqBandIndicator-r14', 'type': 'FreqBandIndicator-r11'}, {'name': 'multiBandInfoList-r14', 'optional': True, 'type': 'MultiBandInfoList-r11'}, {'name': 'schedulingInfoList-MBMS-r14', 'type': 'SchedulingInfoList-MBMS-r14'}, {'name': 'si-WindowLength-r14', 'type': 'ENUMERATED', 'values': [('ms1', 0), ('ms2', 1), ('ms5', 2), ('ms10', 3), ('ms15', 4), ('ms20', 5), ('ms40', 6), ('ms80', 7)]}, {'name': 'systemInfoValueTag-r14', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'nonMBSFN-SubframeConfig-r14', 'optional': True, 'type': 'NonMBSFN-SubframeConfig-r14'}, {'name': 'pdsch-ConfigCommon-r14', 'type': 'PDSCH-ConfigCommon'}, {'name': 'systemInformationBlockType13-r14', 'optional': True, 'type': 'SystemInformationBlockType13-r9'}, {'element': {'type': 'CellAccessRelatedInfo-r14'}, 'name': 'cellAccessRelatedInfoList-r14', 'optional': True, 'size': [(1, 'maxPLMN-1-r14')], 'type': 'SEQUENCE ' 'OF'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v10j0-IEs': {'members': [{'name': 'freqBandInfo-r10', 'optional': True, 'type': 'NS-PmaxList-r10'}, {'name': 'multiBandInfoList-v10j0', 'optional': True, 'type': 'MultiBandInfoList-v10j0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-v10l0-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v10l0-IEs': {'members': [{'name': 'freqBandInfo-v10l0', 'optional': True, 'type': 'NS-PmaxList-v10l0'}, {'name': 'multiBandInfoList-v10l0', 'optional': True, 'type': 'MultiBandInfoList-v10l0'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v1130-IEs': {'members': [{'name': 'tdd-Config-v1130', 'optional': True, 'type': 'TDD-Config-v1130'}, {'name': 'cellSelectionInfo-v1130', 'optional': True, 'type': 'CellSelectionInfo-v1130'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-v1250-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v1250-IEs': {'members': [{'members': [{'name': 'category0Allowed-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'name': 'cellAccessRelatedInfo-v1250', 'type': 'SEQUENCE'}, {'name': 'cellSelectionInfo-v1250', 'optional': True, 'type': 'CellSelectionInfo-v1250'}, {'name': 'freqBandIndicatorPriority-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-v1310-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v1310-IEs': {'members': [{'name': 'hyperSFN-r13', 'optional': True, 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'eDRX-Allowed-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'cellSelectionInfoCE-r13', 'optional': True, 'type': 'CellSelectionInfoCE-r13'}, {'members': [{'name': 'si-WindowLength-BR-r13', 'type': 'ENUMERATED', 'values': [('ms20', 0), ('ms40', 1), ('ms60', 2), ('ms80', 3), ('ms120', 4), ('ms160', 5), ('ms200', 6), ('spare', 7)]}, {'name': 'si-RepetitionPattern-r13', 'type': 'ENUMERATED', 'values': [('everyRF', 0), ('every2ndRF', 1), ('every4thRF', 2), ('every8thRF', 3)]}, {'name': 'schedulingInfoList-BR-r13', 'optional': True, 'type': 'SchedulingInfoList-BR-r13'}, {'members': [{'name': 'subframePattern10-r13', 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'subframePattern40-r13', 'size': [40], 'type': 'BIT ' 'STRING'}], 'name': 'fdd-DownlinkOrTddSubframeBitmapBR-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'fdd-UplinkSubframeBitmapBR-r13', 'optional': True, 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'startSymbolBR-r13', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}, {'name': 'si-HoppingConfigCommon-r13', 'type': 'ENUMERATED', 'values': [('on', 0), ('off', 1)]}, {'name': 'si-ValidityTime-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'systemInfoValueTagList-r13', 'optional': True, 'type': 'SystemInfoValueTagList-r13'}], 'name': 'bandwidthReducedAccessRelatedInfo-r13', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-v1320-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v1320-IEs': {'members': [{'members': [{'name': 'mpdcch-pdsch-HoppingNB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('nb2', 0), ('nb4', 1)]}, {'members': [{'name': 'interval-FDD-r13', 'type': 'ENUMERATED', 'values': [('int1', 0), ('int2', 1), ('int4', 2), ('int8', 3)]}, {'name': 'interval-TDD-r13', 'type': 'ENUMERATED', 'values': [('int1', 0), ('int5', 1), ('int10', 2), ('int20', 3)]}], 'name': 'interval-DLHoppingConfigCommonModeA-r13', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'interval-FDD-r13', 'type': 'ENUMERATED', 'values': [('int2', 0), ('int4', 1), ('int8', 2), ('int16', 3)]}, {'name': 'interval-TDD-r13', 'type': 'ENUMERATED', 'values': [('int5', 0), ('int10', 1), ('int20', 2), ('int40', 3)]}], 'name': 'interval-DLHoppingConfigCommonModeB-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'mpdcch-pdsch-HoppingOffset-r13', 'optional': True, 'restricted-to': [(1, 'maxAvailNarrowBands-r13')], 'type': 'INTEGER'}], 'name': 'freqHoppingParametersDL-r13', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-v1350-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v1350-IEs': {'members': [{'name': 'cellSelectionInfoCE1-r13', 'optional': True, 'type': 'CellSelectionInfoCE1-r13'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-v1360-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v1360-IEs': {'members': [{'name': 'cellSelectionInfoCE1-v1360', 'optional': True, 'type': 'CellSelectionInfoCE1-v1360'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-v1430-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v1430-IEs': {'members': [{'name': 'eCallOverIMS-Support-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'tdd-Config-v1430', 'optional': True, 'type': 'TDD-Config-v1430'}, {'element': {'type': 'CellAccessRelatedInfo-r14'}, 'name': 'cellAccessRelatedInfoList-r14', 'optional': True, 'size': [(1, 'maxPLMN-1-r14')], 'type': 'SEQUENCE ' 'OF'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v890-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-v920-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v8h0-IEs': {'members': [{'name': 'multiBandInfoList', 'optional': True, 'type': 'MultiBandInfoList'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-v9e0-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v920-IEs': {'members': [{'name': 'ims-EmergencySupport-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'cellSelectionInfo-v920', 'optional': True, 'type': 'CellSelectionInfo-v920'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-v1130-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-v9e0-IEs': {'members': [{'name': 'freqBandIndicator-v9e0', 'optional': True, 'type': 'FreqBandIndicator-v9e0'}, {'name': 'multiBandInfoList-v9e0', 'optional': True, 'type': 'MultiBandInfoList-v9e0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-v10j0-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType10': {'members': [{'name': 'messageIdentifier', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'serialNumber', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'warningType', 'size': [2], 'type': 'OCTET ' 'STRING'}, {'name': 'dummy', 'optional': True, 'size': [50], 'type': 'OCTET ' 'STRING'}, None, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType11': {'members': [{'name': 'messageIdentifier', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'serialNumber', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'warningMessageSegmentType', 'type': 'ENUMERATED', 'values': [('notLastSegment', 0), ('lastSegment', 1)]}, {'name': 'warningMessageSegmentNumber', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'warningMessageSegment', 'type': 'OCTET ' 'STRING'}, {'name': 'dataCodingScheme', 'optional': True, 'size': [1], 'type': 'OCTET ' 'STRING'}, None, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType12-r9': {'members': [{'name': 'messageIdentifier-r9', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'serialNumber-r9', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'warningMessageSegmentType-r9', 'type': 'ENUMERATED', 'values': [('notLastSegment', 0), ('lastSegment', 1)]}, {'name': 'warningMessageSegmentNumber-r9', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'warningMessageSegment-r9', 'type': 'OCTET ' 'STRING'}, {'name': 'dataCodingScheme-r9', 'optional': True, 'size': [1], 'type': 'OCTET ' 'STRING'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType13-r9': {'members': [{'name': 'mbsfn-AreaInfoList-r9', 'type': 'MBSFN-AreaInfoList-r9'}, {'name': 'notificationConfig-r9', 'type': 'MBMS-NotificationConfig-r9'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None, [{'name': 'notificationConfig-v1430', 'optional': True, 'type': 'MBMS-NotificationConfig-v1430'}]], 'type': 'SEQUENCE'}, 'SystemInformationBlockType14-r11': {'members': [{'members': [{'name': 'eab-Common-r11', 'type': 'EAB-Config-r11'}, {'element': {'type': 'EAB-ConfigPLMN-r11'}, 'name': 'eab-PerPLMN-List-r11', 'size': [(1, 'maxPLMN-r11')], 'type': 'SEQUENCE ' 'OF'}], 'name': 'eab-Param-r11', 'optional': True, 'type': 'CHOICE'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType15-r11': {'members': [{'name': 'mbms-SAI-IntraFreq-r11', 'optional': True, 'type': 'MBMS-SAI-List-r11'}, {'name': 'mbms-SAI-InterFreqList-r11', 'optional': True, 'type': 'MBMS-SAI-InterFreqList-r11'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None, [{'name': 'mbms-SAI-InterFreqList-v1140', 'optional': True, 'type': 'MBMS-SAI-InterFreqList-v1140'}], [{'name': 'mbms-IntraFreqCarrierType-r14', 'optional': True, 'type': 'MBMS-CarrierType-r14'}, {'name': 'mbms-InterFreqCarrierTypeList-r14', 'optional': True, 'type': 'MBMS-InterFreqCarrierTypeList-r14'}]], 'type': 'SEQUENCE'}, 'SystemInformationBlockType16-r11': {'members': [{'members': [{'name': 'timeInfoUTC-r11', 'restricted-to': [(0, 549755813887)], 'type': 'INTEGER'}, {'name': 'dayLightSavingTime-r11', 'optional': True, 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'leapSeconds-r11', 'optional': True, 'restricted-to': [(-127, 128)], 'type': 'INTEGER'}, {'name': 'localTimeOffset-r11', 'optional': True, 'restricted-to': [(-63, 64)], 'type': 'INTEGER'}], 'name': 'timeInfo-r11', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType17-r12': {'members': [{'element': {'type': 'WLAN-OffloadInfoPerPLMN-r12'}, 'name': 'wlan-OffloadInfoPerPLMN-List-r12', 'optional': True, 'size': [(1, 'maxPLMN-r11')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType18-r12': {'members': [{'members': [{'name': 'commRxPool-r12', 'type': 'SL-CommRxPoolList-r12'}, {'name': 'commTxPoolNormalCommon-r12', 'optional': True, 'type': 'SL-CommTxPoolList-r12'}, {'name': 'commTxPoolExceptional-r12', 'optional': True, 'type': 'SL-CommTxPoolList-r12'}, {'name': 'commSyncConfig-r12', 'optional': True, 'type': 'SL-SyncConfigList-r12'}], 'name': 'commConfig-r12', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None, [{'name': 'commTxPoolNormalCommonExt-r13', 'optional': True, 'type': 'SL-CommTxPoolListExt-r13'}, {'name': 'commTxResourceUC-ReqAllowed-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'commTxAllowRelayCommon-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'type': 'SEQUENCE'}, 'SystemInformationBlockType19-r12': {'members': [{'members': [{'name': 'discRxPool-r12', 'type': 'SL-DiscRxPoolList-r12'}, {'name': 'discTxPoolCommon-r12', 'optional': True, 'type': 'SL-DiscTxPoolList-r12'}, {'name': 'discTxPowerInfo-r12', 'optional': True, 'type': 'SL-DiscTxPowerInfoList-r12'}, {'name': 'discSyncConfig-r12', 'optional': True, 'type': 'SL-SyncConfigList-r12'}], 'name': 'discConfig-r12', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'discInterFreqList-r12', 'optional': True, 'type': 'SL-CarrierFreqInfoList-r12'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None, [{'members': [{'name': 'discInterFreqList-v1310', 'optional': True, 'type': 'SL-CarrierFreqInfoList-v1310'}, {'name': 'gapRequestsAllowedCommon', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'name': 'discConfig-v1310', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'relayUE-Config-r13', 'type': 'SL-DiscConfigRelayUE-r13'}, {'name': 'remoteUE-Config-r13', 'type': 'SL-DiscConfigRemoteUE-r13'}], 'name': 'discConfigRelay-r13', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'discRxPoolPS-r13', 'type': 'SL-DiscRxPoolList-r12'}, {'name': 'discTxPoolPS-Common-r13', 'optional': True, 'type': 'SL-DiscTxPoolList-r12'}], 'name': 'discConfigPS-13', 'optional': True, 'type': 'SEQUENCE'}]], 'type': 'SEQUENCE'}, 'SystemInformationBlockType2': {'members': [{'members': [{'name': 'ac-BarringForEmergency', 'type': 'BOOLEAN'}, {'name': 'ac-BarringForMO-Signalling', 'optional': True, 'type': 'AC-BarringConfig'}, {'name': 'ac-BarringForMO-Data', 'optional': True, 'type': 'AC-BarringConfig'}], 'name': 'ac-BarringInfo', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'radioResourceConfigCommon', 'type': 'RadioResourceConfigCommonSIB'}, {'name': 'ue-TimersAndConstants', 'type': 'UE-TimersAndConstants'}, {'members': [{'name': 'ul-CarrierFreq', 'optional': True, 'type': 'ARFCN-ValueEUTRA'}, {'name': 'ul-Bandwidth', 'optional': True, 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'additionalSpectrumEmission', 'type': 'AdditionalSpectrumEmission'}], 'name': 'freqInfo', 'type': 'SEQUENCE'}, {'name': 'mbsfn-SubframeConfigList', 'optional': True, 'type': 'MBSFN-SubframeConfigList'}, {'name': 'timeAlignmentTimerCommon', 'type': 'TimeAlignmentTimer'}, None, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, [{'name': 'ssac-BarringForMMTEL-Voice-r9', 'optional': True, 'type': 'AC-BarringConfig'}, {'name': 'ssac-BarringForMMTEL-Video-r9', 'optional': True, 'type': 'AC-BarringConfig'}], [{'name': 'ac-BarringForCSFB-r10', 'optional': True, 'type': 'AC-BarringConfig'}], [{'name': 'ac-BarringSkipForMMTELVoice-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'ac-BarringSkipForMMTELVideo-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'ac-BarringSkipForSMS-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'ac-BarringPerPLMN-List-r12', 'optional': True, 'type': 'AC-BarringPerPLMN-List-r12'}], [{'name': 'voiceServiceCauseIndication-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], [{'name': 'acdc-BarringForCommon-r13', 'optional': True, 'type': 'ACDC-BarringForCommon-r13'}, {'name': 'acdc-BarringPerPLMN-List-r13', 'optional': True, 'type': 'ACDC-BarringPerPLMN-List-r13'}], [{'name': 'udt-RestrictingForCommon-r13', 'optional': True, 'type': 'UDT-Restricting-r13'}, {'name': 'udt-RestrictingPerPLMN-List-r13', 'optional': True, 'type': 'UDT-RestrictingPerPLMN-List-r13'}, {'name': 'cIoT-EPS-OptimisationInfo-r13', 'optional': True, 'type': 'CIOT-EPS-OptimisationInfo-r13'}, {'name': 'useFullResumeID-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], [{'name': 'unicastFreqHoppingInd-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], [{'name': 'mbsfn-SubframeConfigList-v1430', 'optional': True, 'type': 'MBSFN-SubframeConfigList-v1430'}, {'name': 'videoServiceCauseIndication-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'type': 'SEQUENCE'}, 'SystemInformationBlockType2-v10l0-IEs': {'members': [{'members': [{'name': 'additionalSpectrumEmission-v10l0', 'type': 'AdditionalSpectrumEmission-v10l0'}], 'name': 'freqInfo-v10l0', 'type': 'SEQUENCE'}, {'element': {'type': 'AdditionalSpectrumEmission-v10l0'}, 'name': 'multiBandInfoList-v10l0', 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType2-v8h0-IEs': {'members': [{'element': {'type': 'AdditionalSpectrumEmission'}, 'name': 'multiBandInfoList', 'optional': True, 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType2-v9e0-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType2-v9e0-IEs': {'members': [{'name': 'ul-CarrierFreq-v9e0', 'optional': True, 'type': 'ARFCN-ValueEUTRA-v9e0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType2-v9i0-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType2-v9i0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType2-v10l0-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType20-r13': {'members': [{'name': 'sc-mcch-RepetitionPeriod-r13', 'type': 'ENUMERATED', 'values': [('rf2', 0), ('rf4', 1), ('rf8', 2), ('rf16', 3), ('rf32', 4), ('rf64', 5), ('rf128', 6), ('rf256', 7)]}, {'name': 'sc-mcch-Offset-r13', 'restricted-to': [(0, 10)], 'type': 'INTEGER'}, {'name': 'sc-mcch-FirstSubframe-r13', 'restricted-to': [(0, 9)], 'type': 'INTEGER'}, {'name': 'sc-mcch-duration-r13', 'optional': True, 'restricted-to': [(2, 9)], 'type': 'INTEGER'}, {'name': 'sc-mcch-ModificationPeriod-r13', 'type': 'ENUMERATED', 'values': [('rf2', 0), ('rf4', 1), ('rf8', 2), ('rf16', 3), ('rf32', 4), ('rf64', 5), ('rf128', 6), ('rf256', 7), ('rf512', 8), ('rf1024', 9), ('r2048', 10), ('rf4096', 11), ('rf8192', 12), ('rf16384', 13), ('rf32768', 14), ('rf65536', 15)]}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None, [{'members': [{'name': 'sc-mcch-RepetitionPeriod-v1430', 'type': 'ENUMERATED', 'values': [('rf1', 0)]}, {'name': 'sc-mcch-ModificationPeriod-v1430', 'type': 'ENUMERATED', 'values': [('rf1', 0)]}, {'name': 'mpdcch-Narrowband-SC-MCCH-r14', 'restricted-to': [(1, 'maxAvailNarrowBands-r13')], 'type': 'INTEGER'}, {'name': 'mpdcch-NumRepetition-SC-MCCH-r14', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7), ('r256', 8)]}, {'members': [{'name': 'fdd-r14', 'type': 'ENUMERATED', 'values': [('v1', 0), ('v1dot5', 1), ('v2', 2), ('v2dot5', 3), ('v4', 4), ('v5', 5), ('v8', 6), ('v10', 7)]}, {'name': 'tdd-r14', 'type': 'ENUMERATED', 'values': [('v1', 0), ('v2', 1), ('v4', 2), ('v5', 3), ('v8', 4), ('v10', 5), ('v20', 6)]}], 'name': 'mpdcch-StartSF-SC-MCCH-r14', 'type': 'CHOICE'}, {'name': 'mpdcch-PDSCH-HoppingConfig-SC-MCCH-r14', 'type': 'ENUMERATED', 'values': [('off', 0), ('ce-ModeA', 1), ('ce-ModeB', 2)]}, {'name': 'sc-mcch-CarrierFreq-r14', 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'sc-mcch-Offset-BR-r14', 'restricted-to': [(0, 10)], 'type': 'INTEGER'}, {'name': 'sc-mcch-RepetitionPeriod-BR-r14', 'type': 'ENUMERATED', 'values': [('rf32', 0), ('rf128', 1), ('rf512', 2), ('rf1024', 3), ('rf2048', 4), ('rf4096', 5), ('rf8192', 6), ('rf16384', 7)]}, {'name': 'sc-mcch-ModificationPeriod-BR-r14', 'type': 'ENUMERATED', 'values': [('rf32', 0), ('rf128', 1), ('rf256', 2), ('rf512', 3), ('rf1024', 4), ('rf2048', 5), ('rf4096', 6), ('rf8192', 7), ('rf16384', 8), ('rf32768', 9), ('rf65536', 10), ('rf131072', 11), ('rf262144', 12), ('rf524288', 13), ('rf1048576', 14)]}], 'name': 'br-BCCH-Config-r14', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'sc-mcch-SchedulingInfo-r14', 'optional': True, 'type': 'SC-MCCH-SchedulingInfo-r14'}, {'name': 'pdsch-maxNumRepetitionCEmodeA-SC-MTCH-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('r16', 0), ('r32', 1)]}, {'name': 'pdsch-maxNumRepetitionCEmodeB-SC-MTCH-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('r192', 0), ('r256', 1), ('r384', 2), ('r512', 3), ('r768', 4), ('r1024', 5), ('r1536', 6), ('r2048', 7)]}]], 'type': 'SEQUENCE'}, 'SystemInformationBlockType21-r14': {'members': [{'name': 'sl-V2X-ConfigCommon-r14', 'optional': True, 'type': 'SL-V2X-ConfigCommon-r14'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType3': {'members': [{'members': [{'name': 'q-Hyst', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB1', 1), ('dB2', 2), ('dB3', 3), ('dB4', 4), ('dB5', 5), ('dB6', 6), ('dB8', 7), ('dB10', 8), ('dB12', 9), ('dB14', 10), ('dB16', 11), ('dB18', 12), ('dB20', 13), ('dB22', 14), ('dB24', 15)]}, {'members': [{'name': 'mobilityStateParameters', 'type': 'MobilityStateParameters'}, {'members': [{'name': 'sf-Medium', 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-4', 1), ('dB-2', 2), ('dB0', 3)]}, {'name': 'sf-High', 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-4', 1), ('dB-2', 2), ('dB0', 3)]}], 'name': 'q-HystSF', 'type': 'SEQUENCE'}], 'name': 'speedStateReselectionPars', 'optional': True, 'type': 'SEQUENCE'}], 'name': 'cellReselectionInfoCommon', 'type': 'SEQUENCE'}, {'members': [{'name': 's-NonIntraSearch', 'optional': True, 'type': 'ReselectionThreshold'}, {'name': 'threshServingLow', 'type': 'ReselectionThreshold'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'name': 'cellReselectionServingFreqInfo', 'type': 'SEQUENCE'}, {'members': [{'name': 'q-RxLevMin', 'type': 'Q-RxLevMin'}, {'name': 'p-Max', 'optional': True, 'type': 'P-Max'}, {'name': 's-IntraSearch', 'optional': True, 'type': 'ReselectionThreshold'}, {'name': 'allowedMeasBandwidth', 'optional': True, 'type': 'AllowedMeasBandwidth'}, {'name': 'presenceAntennaPort1', 'type': 'PresenceAntennaPort1'}, {'name': 'neighCellConfig', 'type': 'NeighCellConfig'}, {'name': 't-ReselectionEUTRA', 'type': 'T-Reselection'}, {'name': 't-ReselectionEUTRA-SF', 'optional': True, 'type': 'SpeedStateScaleFactors'}], 'name': 'intraFreqCellReselectionInfo', 'type': 'SEQUENCE'}, None, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, [{'members': [{'name': 's-IntraSearchP-r9', 'type': 'ReselectionThreshold'}, {'name': 's-IntraSearchQ-r9', 'type': 'ReselectionThresholdQ-r9'}], 'name': 's-IntraSearch-v920', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 's-NonIntraSearchP-r9', 'type': 'ReselectionThreshold'}, {'name': 's-NonIntraSearchQ-r9', 'type': 'ReselectionThresholdQ-r9'}], 'name': 's-NonIntraSearch-v920', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'q-QualMin-r9', 'optional': True, 'type': 'Q-QualMin-r9'}, {'name': 'threshServingLowQ-r9', 'optional': True, 'type': 'ReselectionThresholdQ-r9'}], [{'name': 'q-QualMinWB-r11', 'optional': True, 'type': 'Q-QualMin-r9'}], [{'name': 'q-QualMinRSRQ-OnAllSymbols-r12', 'optional': True, 'type': 'Q-QualMin-r9'}], [{'name': 'cellReselectionServingFreqInfo-v1310', 'optional': True, 'type': 'CellReselectionServingFreqInfo-v1310'}, {'name': 'redistributionServingInfo-r13', 'optional': True, 'type': 'RedistributionServingInfo-r13'}, {'name': 'cellSelectionInfoCE-r13', 'optional': True, 'type': 'CellSelectionInfoCE-r13'}, {'name': 't-ReselectionEUTRA-CE-r13', 'optional': True, 'type': 'T-ReselectionEUTRA-CE-r13'}], [{'name': 'cellSelectionInfoCE1-r13', 'optional': True, 'type': 'CellSelectionInfoCE1-r13'}], [{'name': 'cellSelectionInfoCE1-v1360', 'optional': True, 'type': 'CellSelectionInfoCE1-v1360'}]], 'type': 'SEQUENCE'}, 'SystemInformationBlockType3-v10j0-IEs': {'members': [{'name': 'freqBandInfo-r10', 'optional': True, 'type': 'NS-PmaxList-r10'}, {'name': 'multiBandInfoList-v10j0', 'optional': True, 'type': 'MultiBandInfoList-v10j0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType3-v10l0-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType3-v10l0-IEs': {'members': [{'name': 'freqBandInfo-v10l0', 'optional': True, 'type': 'NS-PmaxList-v10l0'}, {'name': 'multiBandInfoList-v10l0', 'optional': True, 'type': 'MultiBandInfoList-v10l0'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType4': {'members': [{'name': 'intraFreqNeighCellList', 'optional': True, 'type': 'IntraFreqNeighCellList'}, {'name': 'intraFreqBlackCellList', 'optional': True, 'type': 'IntraFreqBlackCellList'}, {'name': 'csg-PhysCellIdRange', 'optional': True, 'type': 'PhysCellIdRange'}, None, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType5': {'members': [{'name': 'interFreqCarrierFreqList', 'type': 'InterFreqCarrierFreqList'}, None, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, [{'name': 'interFreqCarrierFreqList-v1250', 'optional': True, 'type': 'InterFreqCarrierFreqList-v1250'}, {'name': 'interFreqCarrierFreqListExt-r12', 'optional': True, 'type': 'InterFreqCarrierFreqListExt-r12'}], [{'name': 'interFreqCarrierFreqListExt-v1280', 'optional': True, 'type': 'InterFreqCarrierFreqListExt-v1280'}], [{'name': 'interFreqCarrierFreqList-v1310', 'optional': True, 'type': 'InterFreqCarrierFreqList-v1310'}, {'name': 'interFreqCarrierFreqListExt-v1310', 'optional': True, 'type': 'InterFreqCarrierFreqListExt-v1310'}], [{'name': 'interFreqCarrierFreqList-v1350', 'optional': True, 'type': 'InterFreqCarrierFreqList-v1350'}, {'name': 'interFreqCarrierFreqListExt-v1350', 'optional': True, 'type': 'InterFreqCarrierFreqListExt-v1350'}], [{'name': 'interFreqCarrierFreqListExt-v1360', 'optional': True, 'type': 'InterFreqCarrierFreqListExt-v1360'}], [{'name': 'scptm-FreqOffset-r14', 'optional': True, 'restricted-to': [(1, 8)], 'type': 'INTEGER'}]], 'type': 'SEQUENCE'}, 'SystemInformationBlockType5-v10j0-IEs': {'members': [{'element': {'type': 'InterFreqCarrierFreqInfo-v10j0'}, 'name': 'interFreqCarrierFreqList-v10j0', 'optional': True, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType5-v10l0-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType5-v10l0-IEs': {'members': [{'element': {'type': 'InterFreqCarrierFreqInfo-v10l0'}, 'name': 'interFreqCarrierFreqList-v10l0', 'optional': True, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType5-v8h0-IEs': {'members': [{'element': {'type': 'InterFreqCarrierFreqInfo-v8h0'}, 'name': 'interFreqCarrierFreqList-v8h0', 'optional': True, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType5-v9e0-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType5-v9e0-IEs': {'members': [{'element': {'type': 'InterFreqCarrierFreqInfo-v9e0'}, 'name': 'interFreqCarrierFreqList-v9e0', 'optional': True, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType5-v10j0-IEs'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType6': {'members': [{'name': 'carrierFreqListUTRA-FDD', 'optional': True, 'type': 'CarrierFreqListUTRA-FDD'}, {'name': 'carrierFreqListUTRA-TDD', 'optional': True, 'type': 'CarrierFreqListUTRA-TDD'}, {'name': 't-ReselectionUTRA', 'type': 'T-Reselection'}, {'name': 't-ReselectionUTRA-SF', 'optional': True, 'type': 'SpeedStateScaleFactors'}, None, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, [{'element': {'type': 'CarrierFreqInfoUTRA-v1250'}, 'name': 'carrierFreqListUTRA-FDD-v1250', 'optional': True, 'size': [(1, 'maxUTRA-FDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'CarrierFreqInfoUTRA-v1250'}, 'name': 'carrierFreqListUTRA-TDD-v1250', 'optional': True, 'size': [(1, 'maxUTRA-TDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'carrierFreqListUTRA-FDD-Ext-r12', 'optional': True, 'type': 'CarrierFreqListUTRA-FDD-Ext-r12'}, {'name': 'carrierFreqListUTRA-TDD-Ext-r12', 'optional': True, 'type': 'CarrierFreqListUTRA-TDD-Ext-r12'}]], 'type': 'SEQUENCE'}, 'SystemInformationBlockType6-v8h0-IEs': {'members': [{'element': {'type': 'CarrierFreqInfoUTRA-FDD-v8h0'}, 'name': 'carrierFreqListUTRA-FDD-v8h0', 'optional': True, 'size': [(1, 'maxUTRA-FDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType7': {'members': [{'name': 't-ReselectionGERAN', 'type': 'T-Reselection'}, {'name': 't-ReselectionGERAN-SF', 'optional': True, 'type': 'SpeedStateScaleFactors'}, {'name': 'carrierFreqsInfoList', 'optional': True, 'type': 'CarrierFreqsInfoListGERAN'}, None, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType8': {'members': [{'name': 'systemTimeInfo', 'optional': True, 'type': 'SystemTimeInfoCDMA2000'}, {'name': 'searchWindowSize', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'members': [{'name': 'preRegistrationInfoHRPD', 'type': 'PreRegistrationInfoHRPD'}, {'name': 'cellReselectionParametersHRPD', 'optional': True, 'type': 'CellReselectionParametersCDMA2000'}], 'name': 'parametersHRPD', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'csfb-RegistrationParam1XRTT', 'optional': True, 'type': 'CSFB-RegistrationParam1XRTT'}, {'name': 'longCodeState1XRTT', 'optional': True, 'size': [42], 'type': 'BIT ' 'STRING'}, {'name': 'cellReselectionParameters1XRTT', 'optional': True, 'type': 'CellReselectionParametersCDMA2000'}], 'name': 'parameters1XRTT', 'optional': True, 'type': 'SEQUENCE'}, None, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, [{'name': 'csfb-SupportForDualRxUEs-r9', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'cellReselectionParametersHRPD-v920', 'optional': True, 'type': 'CellReselectionParametersCDMA2000-v920'}, {'name': 'cellReselectionParameters1XRTT-v920', 'optional': True, 'type': 'CellReselectionParametersCDMA2000-v920'}, {'name': 'csfb-RegistrationParam1XRTT-v920', 'optional': True, 'type': 'CSFB-RegistrationParam1XRTT-v920'}, {'name': 'ac-BarringConfig1XRTT-r9', 'optional': True, 'type': 'AC-BarringConfig1XRTT-r9'}], [{'name': 'csfb-DualRxTxSupport-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], [{'name': 'sib8-PerPLMN-List-r11', 'optional': True, 'type': 'SIB8-PerPLMN-List-r11'}]], 'type': 'SEQUENCE'}, 'SystemInformationBlockType9': {'members': [{'name': 'hnb-Name', 'optional': True, 'size': [(1, 48)], 'type': 'OCTET ' 'STRING'}, None, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'SystemTimeInfoCDMA2000': {'members': [{'name': 'cdma-EUTRA-Synchronisation', 'type': 'BOOLEAN'}, {'members': [{'name': 'synchronousSystemTime', 'size': [39], 'type': 'BIT ' 'STRING'}, {'name': 'asynchronousSystemTime', 'size': [49], 'type': 'BIT ' 'STRING'}], 'name': 'cdma-SystemTime', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'T-PollRetransmit': {'type': 'ENUMERATED', 'values': [('ms5', 0), ('ms10', 1), ('ms15', 2), ('ms20', 3), ('ms25', 4), ('ms30', 5), ('ms35', 6), ('ms40', 7), ('ms45', 8), ('ms50', 9), ('ms55', 10), ('ms60', 11), ('ms65', 12), ('ms70', 13), ('ms75', 14), ('ms80', 15), ('ms85', 16), ('ms90', 17), ('ms95', 18), ('ms100', 19), ('ms105', 20), ('ms110', 21), ('ms115', 22), ('ms120', 23), ('ms125', 24), ('ms130', 25), ('ms135', 26), ('ms140', 27), ('ms145', 28), ('ms150', 29), ('ms155', 30), ('ms160', 31), ('ms165', 32), ('ms170', 33), ('ms175', 34), ('ms180', 35), ('ms185', 36), ('ms190', 37), ('ms195', 38), ('ms200', 39), ('ms205', 40), ('ms210', 41), ('ms215', 42), ('ms220', 43), ('ms225', 44), ('ms230', 45), ('ms235', 46), ('ms240', 47), ('ms245', 48), ('ms250', 49), ('ms300', 50), ('ms350', 51), ('ms400', 52), ('ms450', 53), ('ms500', 54), ('ms800-v1310', 55), ('ms1000-v1310', 56), ('ms2000-v1310', 57), ('ms4000-v1310', 58), ('spare5', 59), ('spare4', 60), ('spare3', 61), ('spare2', 62), ('spare1', 63)]}, 'T-Reordering': {'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms5', 1), ('ms10', 2), ('ms15', 3), ('ms20', 4), ('ms25', 5), ('ms30', 6), ('ms35', 7), ('ms40', 8), ('ms45', 9), ('ms50', 10), ('ms55', 11), ('ms60', 12), ('ms65', 13), ('ms70', 14), ('ms75', 15), ('ms80', 16), ('ms85', 17), ('ms90', 18), ('ms95', 19), ('ms100', 20), ('ms110', 21), ('ms120', 22), ('ms130', 23), ('ms140', 24), ('ms150', 25), ('ms160', 26), ('ms170', 27), ('ms180', 28), ('ms190', 29), ('ms200', 30), ('ms1600-v1310', 31)]}, 'T-Reselection': {'restricted-to': [(0, 7)], 'type': 'INTEGER'}, 'T-ReselectionEUTRA-CE-r13': {'restricted-to': [(0, 15)], 'type': 'INTEGER'}, 'T-StatusProhibit': {'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms5', 1), ('ms10', 2), ('ms15', 3), ('ms20', 4), ('ms25', 5), ('ms30', 6), ('ms35', 7), ('ms40', 8), ('ms45', 9), ('ms50', 10), ('ms55', 11), ('ms60', 12), ('ms65', 13), ('ms70', 14), ('ms75', 15), ('ms80', 16), ('ms85', 17), ('ms90', 18), ('ms95', 19), ('ms100', 20), ('ms105', 21), ('ms110', 22), ('ms115', 23), ('ms120', 24), ('ms125', 25), ('ms130', 26), ('ms135', 27), ('ms140', 28), ('ms145', 29), ('ms150', 30), ('ms155', 31), ('ms160', 32), ('ms165', 33), ('ms170', 34), ('ms175', 35), ('ms180', 36), ('ms185', 37), ('ms190', 38), ('ms195', 39), ('ms200', 40), ('ms205', 41), ('ms210', 42), ('ms215', 43), ('ms220', 44), ('ms225', 45), ('ms230', 46), ('ms235', 47), ('ms240', 48), ('ms245', 49), ('ms250', 50), ('ms300', 51), ('ms350', 52), ('ms400', 53), ('ms450', 54), ('ms500', 55), ('ms800-v1310', 56), ('ms1000-v1310', 57), ('ms1200-v1310', 58), ('ms1600-v1310', 59), ('ms2000-v1310', 60), ('ms2400-v1310', 61), ('spare2', 62), ('spare1', 63)]}, 'TDD-Config': {'members': [{'name': 'subframeAssignment', 'type': 'ENUMERATED', 'values': [('sa0', 0), ('sa1', 1), ('sa2', 2), ('sa3', 3), ('sa4', 4), ('sa5', 5), ('sa6', 6)]}, {'name': 'specialSubframePatterns', 'type': 'ENUMERATED', 'values': [('ssp0', 0), ('ssp1', 1), ('ssp2', 2), ('ssp3', 3), ('ssp4', 4), ('ssp5', 5), ('ssp6', 6), ('ssp7', 7), ('ssp8', 8)]}], 'type': 'SEQUENCE'}, 'TDD-Config-v1130': {'members': [{'name': 'specialSubframePatterns-v1130', 'type': 'ENUMERATED', 'values': [('ssp7', 0), ('ssp9', 1)]}], 'type': 'SEQUENCE'}, 'TDD-Config-v1430': {'members': [{'name': 'specialSubframePatterns-v1430', 'type': 'ENUMERATED', 'values': [('ssp10', 0)]}], 'type': 'SEQUENCE'}, 'TDD-ConfigSL-r12': {'members': [{'name': 'subframeAssignmentSL-r12', 'type': 'ENUMERATED', 'values': [('none', 0), ('sa0', 1), ('sa1', 2), ('sa2', 3), ('sa3', 4), ('sa4', 5), ('sa5', 6), ('sa6', 7)]}], 'type': 'SEQUENCE'}, 'TDD-PUSCH-UpPTS-r14': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'symPUSCH-UpPTS-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('sym1', 0), ('sym2', 1), ('sym3', 2), ('sym4', 3), ('sym5', 4), ('sym6', 5)]}, {'name': 'dmrs-LessUpPTS-Config-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'TDM-AssistanceInfo-r11': {'members': [{'members': [{'name': 'drx-CycleLength-r11', 'type': 'ENUMERATED', 'values': [('sf40', 0), ('sf64', 1), ('sf80', 2), ('sf128', 3), ('sf160', 4), ('sf256', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 'drx-Offset-r11', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'drx-ActiveTime-r11', 'type': 'ENUMERATED', 'values': [('sf20', 0), ('sf30', 1), ('sf40', 2), ('sf60', 3), ('sf80', 4), ('sf100', 5), ('spare2', 6), ('spare1', 7)]}], 'name': 'drx-AssistanceInfo-r11', 'type': 'SEQUENCE'}, {'name': 'idc-SubframePatternList-r11', 'type': 'IDC-SubframePatternList-r11'}, None], 'type': 'CHOICE'}, 'TMGI-r9': {'members': [{'members': [{'name': 'plmn-Index-r9', 'restricted-to': [(1, 'maxPLMN-r11')], 'type': 'INTEGER'}, {'name': 'explicitValue-r9', 'type': 'PLMN-Identity'}], 'name': 'plmn-Id-r9', 'type': 'CHOICE'}, {'name': 'serviceId-r9', 'size': [3], 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'TPC-Index': {'members': [{'name': 'indexOfFormat3', 'restricted-to': [(1, 15)], 'type': 'INTEGER'}, {'name': 'indexOfFormat3A', 'restricted-to': [(1, 31)], 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'TPC-PDCCH-Config': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'tpc-RNTI', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'tpc-Index', 'type': 'TPC-Index'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'TPC-PDCCH-ConfigSCell-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'tpc-Index-PUCCH-SCell-r13', 'type': 'TPC-Index'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'TargetMBSFN-Area-r12': {'members': [{'name': 'mbsfn-AreaId-r12', 'optional': True, 'type': 'MBSFN-AreaId-r12'}, {'name': 'carrierFreq-r12', 'type': 'ARFCN-ValueEUTRA-r9'}, None], 'type': 'SEQUENCE'}, 'TargetMBSFN-AreaList-r12': {'element': {'type': 'TargetMBSFN-Area-r12'}, 'size': [(0, 'maxMBSFN-Area')], 'type': 'SEQUENCE ' 'OF'}, 'ThresholdCDMA2000': {'restricted-to': [(0, 63)], 'type': 'INTEGER'}, 'ThresholdEUTRA': {'members': [{'name': 'threshold-RSRP', 'type': 'RSRP-Range'}, {'name': 'threshold-RSRQ', 'type': 'RSRQ-Range'}], 'type': 'CHOICE'}, 'ThresholdEUTRA-v1250': {'type': 'CSI-RSRP-Range-r12'}, 'ThresholdGERAN': {'restricted-to': [(0, 63)], 'type': 'INTEGER'}, 'ThresholdUTRA': {'members': [{'name': 'utra-RSCP', 'restricted-to': [(-5, 91)], 'type': 'INTEGER'}, {'name': 'utra-EcN0', 'restricted-to': [(0, 49)], 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'TimeAlignmentTimer': {'type': 'ENUMERATED', 'values': [('sf500', 0), ('sf750', 1), ('sf1280', 2), ('sf1920', 3), ('sf2560', 4), ('sf5120', 5), ('sf10240', 6), ('infinity', 7)]}, 'TimeSinceFailure-r11': {'restricted-to': [(0, 172800)], 'type': 'INTEGER'}, 'TimeToTrigger': {'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms40', 1), ('ms64', 2), ('ms80', 3), ('ms100', 4), ('ms128', 5), ('ms160', 6), ('ms256', 7), ('ms320', 8), ('ms480', 9), ('ms512', 10), ('ms640', 11), ('ms1024', 12), ('ms1280', 13), ('ms2560', 14), ('ms5120', 15)]}, 'TraceReference-r10': {'members': [{'name': 'plmn-Identity-r10', 'type': 'PLMN-Identity'}, {'name': 'traceId-r10', 'size': [3], 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'TrackingAreaCode': {'size': [16], 'type': 'BIT STRING'}, 'TrackingAreaCodeList-r10': {'element': {'type': 'TrackingAreaCode'}, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, 'TrackingAreaCodeList-v1130': {'members': [{'element': {'type': 'PLMN-Identity'}, 'name': 'plmn-Identity-perTAC-List-r11', 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'TrafficPatternInfo-r14': {'members': [{'name': 'trafficPeriodicity-r14', 'type': 'ENUMERATED', 'values': [('sf20', 0), ('sf50', 1), ('sf100', 2), ('sf200', 3), ('sf300', 4), ('sf400', 5), ('sf500', 6), ('sf600', 7), ('sf700', 8), ('sf800', 9), ('sf900', 10), ('sf1000', 11)]}, {'name': 'timingOffset-r14', 'restricted-to': [(0, 10239)], 'type': 'INTEGER'}, {'name': 'priorityInfoSL-r14', 'optional': True, 'type': 'SL-Priority-r13'}, {'name': 'logicalChannelIdentityUL-r14', 'optional': True, 'restricted-to': [(3, 10)], 'type': 'INTEGER'}, {'name': 'messageSize-r14', 'size': [6], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'TrafficPatternInfoList-r14': {'element': {'type': 'TrafficPatternInfo-r14'}, 'size': [(1, 'maxTrafficPattern-r14')], 'type': 'SEQUENCE ' 'OF'}, 'TunnelConfigLWIP-r13': {'members': [{'name': 'ip-Address-r13', 'type': 'IP-Address-r13'}, {'name': 'ike-Identity-r13', 'type': 'IKE-Identity-r13'}, None, [{'name': 'lwip-Counter-r13', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}]], 'type': 'SEQUENCE'}, 'Tx-ConfigIndex-r14': {'restricted-to': [(0, 'maxSL-V2X-TxConfig-1-r14')], 'type': 'INTEGER'}, 'Tx-ResourcePoolMeasList-r14': {'element': {'type': 'SL-V2X-TxPoolReportIdentity-r14'}, 'size': [(1, 'maxSL-PoolToMeasure-r14')], 'type': 'SEQUENCE ' 'OF'}, 'UDT-Restricting-r13': {'members': [{'name': 'udt-Restricting-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'udt-RestrictingTime-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('s4', 0), ('s8', 1), ('s16', 2), ('s32', 3), ('s64', 4), ('s128', 5), ('s256', 6), ('s512', 7)]}], 'type': 'SEQUENCE'}, 'UDT-RestrictingPerPLMN-List-r13': {'element': {'type': 'UDT-RestrictingPerPLMN-r13'}, 'size': [(1, 'maxPLMN-r11')], 'type': 'SEQUENCE ' 'OF'}, 'UDT-RestrictingPerPLMN-r13': {'members': [{'name': 'plmn-IdentityIndex-r13', 'restricted-to': [(1, 'maxPLMN-r11')], 'type': 'INTEGER'}, {'name': 'udt-Restricting-r13', 'optional': True, 'type': 'UDT-Restricting-r13'}], 'type': 'SEQUENCE'}, 'UE-BasedNetwPerfMeasParameters-r10': {'members': [{'name': 'loggedMeasurementsIdle-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'standaloneGNSS-Location-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'UE-BasedNetwPerfMeasParameters-v1250': {'members': [{'name': 'loggedMBSFNMeasurements-r12', 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'UE-BasedNetwPerfMeasParameters-v1430': {'members': [{'name': 'locationReport-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'UE-CapabilityRAT-Container': {'members': [{'name': 'rat-Type', 'type': 'RAT-Type'}, {'name': 'ueCapabilityRAT-Container', 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'UE-CapabilityRAT-ContainerList': {'element': {'type': 'UE-CapabilityRAT-Container'}, 'size': [(0, 'maxRAT-Capabilities')], 'type': 'SEQUENCE ' 'OF'}, 'UE-CapabilityRequest': {'element': {'type': 'RAT-Type'}, 'size': [(1, 'maxRAT-Capabilities')], 'type': 'SEQUENCE ' 'OF'}, 'UE-EUTRA-Capability': {'members': [{'name': 'accessStratumRelease', 'type': 'AccessStratumRelease'}, {'name': 'ue-Category', 'restricted-to': [(1, 5)], 'type': 'INTEGER'}, {'name': 'pdcp-Parameters', 'type': 'PDCP-Parameters'}, {'name': 'phyLayerParameters', 'type': 'PhyLayerParameters'}, {'name': 'rf-Parameters', 'type': 'RF-Parameters'}, {'name': 'measParameters', 'type': 'MeasParameters'}, {'name': 'featureGroupIndicators', 'optional': True, 'size': [32], 'type': 'BIT ' 'STRING'}, {'members': [{'name': 'utraFDD', 'optional': True, 'type': 'IRAT-ParametersUTRA-FDD'}, {'name': 'utraTDD128', 'optional': True, 'type': 'IRAT-ParametersUTRA-TDD128'}, {'name': 'utraTDD384', 'optional': True, 'type': 'IRAT-ParametersUTRA-TDD384'}, {'name': 'utraTDD768', 'optional': True, 'type': 'IRAT-ParametersUTRA-TDD768'}, {'name': 'geran', 'optional': True, 'type': 'IRAT-ParametersGERAN'}, {'name': 'cdma2000-HRPD', 'optional': True, 'type': 'IRAT-ParametersCDMA2000-HRPD'}, {'name': 'cdma2000-1xRTT', 'optional': True, 'type': 'IRAT-ParametersCDMA2000-1XRTT'}], 'name': 'interRAT-Parameters', 'type': 'SEQUENCE'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v920-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1020-IEs': {'members': [{'name': 'ue-Category-v1020', 'optional': True, 'restricted-to': [(6, 8)], 'type': 'INTEGER'}, {'name': 'phyLayerParameters-v1020', 'optional': True, 'type': 'PhyLayerParameters-v1020'}, {'name': 'rf-Parameters-v1020', 'optional': True, 'type': 'RF-Parameters-v1020'}, {'name': 'measParameters-v1020', 'optional': True, 'type': 'MeasParameters-v1020'}, {'name': 'featureGroupIndRel10-r10', 'optional': True, 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'interRAT-ParametersCDMA2000-v1020', 'optional': True, 'type': 'IRAT-ParametersCDMA2000-1XRTT-v1020'}, {'name': 'ue-BasedNetwPerfMeasParameters-r10', 'optional': True, 'type': 'UE-BasedNetwPerfMeasParameters-r10'}, {'name': 'interRAT-ParametersUTRA-TDD-v1020', 'optional': True, 'type': 'IRAT-ParametersUTRA-TDD-v1020'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1060-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1060-IEs': {'members': [{'name': 'fdd-Add-UE-EUTRA-Capabilities-v1060', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1060'}, {'name': 'tdd-Add-UE-EUTRA-Capabilities-v1060', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1060'}, {'name': 'rf-Parameters-v1060', 'optional': True, 'type': 'RF-Parameters-v1060'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1090-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1090-IEs': {'members': [{'name': 'rf-Parameters-v1090', 'optional': True, 'type': 'RF-Parameters-v1090'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1130-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v10c0-IEs': {'members': [{'name': 'otdoa-PositioningCapabilities-r10', 'optional': True, 'type': 'OTDOA-PositioningCapabilities-r10'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v10f0-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v10f0-IEs': {'members': [{'name': 'rf-Parameters-v10f0', 'optional': True, 'type': 'RF-Parameters-v10f0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v10i0-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v10i0-IEs': {'members': [{'name': 'rf-Parameters-v10i0', 'optional': True, 'type': 'RF-Parameters-v10i0'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v11d0-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v10j0-IEs': {'members': [{'name': 'rf-Parameters-v10j0', 'optional': True, 'type': 'RF-Parameters-v10j0'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1130-IEs': {'members': [{'name': 'pdcp-Parameters-v1130', 'type': 'PDCP-Parameters-v1130'}, {'name': 'phyLayerParameters-v1130', 'optional': True, 'type': 'PhyLayerParameters-v1130'}, {'name': 'rf-Parameters-v1130', 'type': 'RF-Parameters-v1130'}, {'name': 'measParameters-v1130', 'type': 'MeasParameters-v1130'}, {'name': 'interRAT-ParametersCDMA2000-v1130', 'type': 'IRAT-ParametersCDMA2000-v1130'}, {'name': 'otherParameters-r11', 'type': 'Other-Parameters-r11'}, {'name': 'fdd-Add-UE-EUTRA-Capabilities-v1130', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1130'}, {'name': 'tdd-Add-UE-EUTRA-Capabilities-v1130', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1130'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1170-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1170-IEs': {'members': [{'name': 'phyLayerParameters-v1170', 'optional': True, 'type': 'PhyLayerParameters-v1170'}, {'name': 'ue-Category-v1170', 'optional': True, 'restricted-to': [(9, 10)], 'type': 'INTEGER'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1180-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1180-IEs': {'members': [{'name': 'rf-Parameters-v1180', 'optional': True, 'type': 'RF-Parameters-v1180'}, {'name': 'mbms-Parameters-r11', 'optional': True, 'type': 'MBMS-Parameters-r11'}, {'name': 'fdd-Add-UE-EUTRA-Capabilities-v1180', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1180'}, {'name': 'tdd-Add-UE-EUTRA-Capabilities-v1180', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1180'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v11a0-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v11a0-IEs': {'members': [{'name': 'ue-Category-v11a0', 'optional': True, 'restricted-to': [(11, 12)], 'type': 'INTEGER'}, {'name': 'measParameters-v11a0', 'optional': True, 'type': 'MeasParameters-v11a0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1250-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v11d0-IEs': {'members': [{'name': 'rf-Parameters-v11d0', 'optional': True, 'type': 'RF-Parameters-v11d0'}, {'name': 'otherParameters-v11d0', 'optional': True, 'type': 'Other-Parameters-v11d0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v11x0-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v11x0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v12b0-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1250-IEs': {'members': [{'name': 'phyLayerParameters-v1250', 'optional': True, 'type': 'PhyLayerParameters-v1250'}, {'name': 'rf-Parameters-v1250', 'optional': True, 'type': 'RF-Parameters-v1250'}, {'name': 'rlc-Parameters-r12', 'optional': True, 'type': 'RLC-Parameters-r12'}, {'name': 'ue-BasedNetwPerfMeasParameters-v1250', 'optional': True, 'type': 'UE-BasedNetwPerfMeasParameters-v1250'}, {'name': 'ue-CategoryDL-r12', 'optional': True, 'restricted-to': [(0, 14)], 'type': 'INTEGER'}, {'name': 'ue-CategoryUL-r12', 'optional': True, 'restricted-to': [(0, 13)], 'type': 'INTEGER'}, {'name': 'wlan-IW-Parameters-r12', 'optional': True, 'type': 'WLAN-IW-Parameters-r12'}, {'name': 'measParameters-v1250', 'optional': True, 'type': 'MeasParameters-v1250'}, {'name': 'dc-Parameters-r12', 'optional': True, 'type': 'DC-Parameters-r12'}, {'name': 'mbms-Parameters-v1250', 'optional': True, 'type': 'MBMS-Parameters-v1250'}, {'name': 'mac-Parameters-r12', 'optional': True, 'type': 'MAC-Parameters-r12'}, {'name': 'fdd-Add-UE-EUTRA-Capabilities-v1250', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1250'}, {'name': 'tdd-Add-UE-EUTRA-Capabilities-v1250', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1250'}, {'name': 'sl-Parameters-r12', 'optional': True, 'type': 'SL-Parameters-r12'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1260-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1260-IEs': {'members': [{'name': 'ue-CategoryDL-v1260', 'optional': True, 'restricted-to': [(15, 16)], 'type': 'INTEGER'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1270-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1270-IEs': {'members': [{'name': 'rf-Parameters-v1270', 'optional': True, 'type': 'RF-Parameters-v1270'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1280-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1280-IEs': {'members': [{'name': 'phyLayerParameters-v1280', 'optional': True, 'type': 'PhyLayerParameters-v1280'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1310-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v12b0-IEs': {'members': [{'name': 'rf-Parameters-v12b0', 'optional': True, 'type': 'RF-Parameters-v12b0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v12x0-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v12x0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1370-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1310-IEs': {'members': [{'name': 'ue-CategoryDL-v1310', 'optional': True, 'type': 'ENUMERATED', 'values': [('n17', 0), ('m1', 1)]}, {'name': 'ue-CategoryUL-v1310', 'optional': True, 'type': 'ENUMERATED', 'values': [('n14', 0), ('m1', 1)]}, {'name': 'pdcp-Parameters-v1310', 'type': 'PDCP-Parameters-v1310'}, {'name': 'rlc-Parameters-v1310', 'type': 'RLC-Parameters-v1310'}, {'name': 'mac-Parameters-v1310', 'optional': True, 'type': 'MAC-Parameters-v1310'}, {'name': 'phyLayerParameters-v1310', 'optional': True, 'type': 'PhyLayerParameters-v1310'}, {'name': 'rf-Parameters-v1310', 'optional': True, 'type': 'RF-Parameters-v1310'}, {'name': 'measParameters-v1310', 'optional': True, 'type': 'MeasParameters-v1310'}, {'name': 'dc-Parameters-v1310', 'optional': True, 'type': 'DC-Parameters-v1310'}, {'name': 'sl-Parameters-v1310', 'optional': True, 'type': 'SL-Parameters-v1310'}, {'name': 'scptm-Parameters-r13', 'optional': True, 'type': 'SCPTM-Parameters-r13'}, {'name': 'ce-Parameters-r13', 'optional': True, 'type': 'CE-Parameters-r13'}, {'name': 'interRAT-ParametersWLAN-r13', 'type': 'IRAT-ParametersWLAN-r13'}, {'name': 'laa-Parameters-r13', 'optional': True, 'type': 'LAA-Parameters-r13'}, {'name': 'lwa-Parameters-r13', 'optional': True, 'type': 'LWA-Parameters-r13'}, {'name': 'wlan-IW-Parameters-v1310', 'type': 'WLAN-IW-Parameters-v1310'}, {'name': 'lwip-Parameters-r13', 'type': 'LWIP-Parameters-r13'}, {'name': 'fdd-Add-UE-EUTRA-Capabilities-v1310', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1310'}, {'name': 'tdd-Add-UE-EUTRA-Capabilities-v1310', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1310'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1320-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1320-IEs': {'members': [{'name': 'ce-Parameters-v1320', 'optional': True, 'type': 'CE-Parameters-v1320'}, {'name': 'phyLayerParameters-v1320', 'optional': True, 'type': 'PhyLayerParameters-v1320'}, {'name': 'rf-Parameters-v1320', 'optional': True, 'type': 'RF-Parameters-v1320'}, {'name': 'fdd-Add-UE-EUTRA-Capabilities-v1320', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1320'}, {'name': 'tdd-Add-UE-EUTRA-Capabilities-v1320', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1320'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1330-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1330-IEs': {'members': [{'name': 'ue-CategoryDL-v1330', 'optional': True, 'restricted-to': [(18, 19)], 'type': 'INTEGER'}, {'name': 'phyLayerParameters-v1330', 'optional': True, 'type': 'PhyLayerParameters-v1330'}, {'name': 'ue-CE-NeedULGaps-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1340-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1340-IEs': {'members': [{'name': 'ue-CategoryUL-v1340', 'optional': True, 'restricted-to': [15], 'type': 'INTEGER'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1350-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1350-IEs': {'members': [{'name': 'ue-CategoryDL-v1350', 'optional': True, 'type': 'ENUMERATED', 'values': [('oneBis', 0)]}, {'name': 'ue-CategoryUL-v1350', 'optional': True, 'type': 'ENUMERATED', 'values': [('oneBis', 0)]}, {'name': 'ce-Parameters-v1350', 'type': 'CE-Parameters-v1350'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1360-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1360-IEs': {'members': [{'name': 'other-Parameters-v1360', 'optional': True, 'type': 'Other-Parameters-v1360'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1430-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1370-IEs': {'members': [{'name': 'ce-Parameters-v1370', 'optional': True, 'type': 'CE-Parameters-v1370'}, {'name': 'fdd-Add-UE-EUTRA-Capabilities-v1370', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1370'}, {'name': 'tdd-Add-UE-EUTRA-Capabilities-v1370', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1370'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1430-IEs': {'members': [{'name': 'phyLayerParameters-v1430', 'type': 'PhyLayerParameters-v1430'}, {'name': 'ue-CategoryDL-v1430', 'optional': True, 'type': 'ENUMERATED', 'values': [('m2', 0)]}, {'name': 'ue-CategoryUL-v1430', 'optional': True, 'type': 'ENUMERATED', 'values': [('n16', 0), ('n17', 1), ('n18', 2), ('n19', 3), ('n20', 4), ('m2', 5)]}, {'name': 'ue-CategoryUL-v1430b', 'optional': True, 'type': 'ENUMERATED', 'values': [('n21', 0)]}, {'name': 'mac-Parameters-v1430', 'optional': True, 'type': 'MAC-Parameters-v1430'}, {'name': 'measParameters-v1430', 'optional': True, 'type': 'MeasParameters-v1430'}, {'name': 'pdcp-Parameters-v1430', 'optional': True, 'type': 'PDCP-Parameters-v1430'}, {'name': 'rlc-Parameters-v1430', 'type': 'RLC-Parameters-v1430'}, {'name': 'rf-Parameters-v1430', 'optional': True, 'type': 'RF-Parameters-v1430'}, {'name': 'laa-Parameters-v1430', 'optional': True, 'type': 'LAA-Parameters-v1430'}, {'name': 'lwa-Parameters-v1430', 'optional': True, 'type': 'LWA-Parameters-v1430'}, {'name': 'lwip-Parameters-v1430', 'optional': True, 'type': 'LWIP-Parameters-v1430'}, {'name': 'otherParameters-v1430', 'type': 'Other-Parameters-v1430'}, {'name': 'mmtel-Parameters-r14', 'optional': True, 'type': 'MMTEL-Parameters-r14'}, {'name': 'mobilityParameters-r14', 'optional': True, 'type': 'MobilityParameters-r14'}, {'name': 'ce-Parameters-v1430', 'type': 'CE-Parameters-v1430'}, {'name': 'fdd-Add-UE-EUTRA-Capabilities-v1430', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1430'}, {'name': 'tdd-Add-UE-EUTRA-Capabilities-v1430', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-v1430'}, {'name': 'mbms-Parameters-v1430', 'optional': True, 'type': 'MBMS-Parameters-v1430'}, {'name': 'sl-Parameters-v1430', 'optional': True, 'type': 'SL-Parameters-v1430'}, {'name': 'ue-BasedNetwPerfMeasParameters-v1430', 'optional': True, 'type': 'UE-BasedNetwPerfMeasParameters-v1430'}, {'name': 'highSpeedEnhParameters-r14', 'optional': True, 'type': 'HighSpeedEnhParameters-r14'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1440-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v1440-IEs': {'members': [{'name': 'lwa-Parameters-v1440', 'type': 'LWA-Parameters-v1440'}, {'name': 'mac-Parameters-v1440', 'type': 'MAC-Parameters-v1440'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v920-IEs': {'members': [{'name': 'phyLayerParameters-v920', 'type': 'PhyLayerParameters-v920'}, {'name': 'interRAT-ParametersGERAN-v920', 'type': 'IRAT-ParametersGERAN-v920'}, {'name': 'interRAT-ParametersUTRA-v920', 'optional': True, 'type': 'IRAT-ParametersUTRA-v920'}, {'name': 'interRAT-ParametersCDMA2000-v920', 'optional': True, 'type': 'IRAT-ParametersCDMA2000-1XRTT-v920'}, {'name': 'deviceType-r9', 'optional': True, 'type': 'ENUMERATED', 'values': [('noBenFromBatConsumpOpt', 0)]}, {'name': 'csg-ProximityIndicationParameters-r9', 'type': 'CSG-ProximityIndicationParameters-r9'}, {'name': 'neighCellSI-AcquisitionParameters-r9', 'type': 'NeighCellSI-AcquisitionParameters-r9'}, {'name': 'son-Parameters-r9', 'type': 'SON-Parameters-r9'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v940-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v940-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v1020-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v9a0-IEs': {'members': [{'name': 'featureGroupIndRel9Add-r9', 'optional': True, 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'fdd-Add-UE-EUTRA-Capabilities-r9', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-r9'}, {'name': 'tdd-Add-UE-EUTRA-Capabilities-r9', 'optional': True, 'type': 'UE-EUTRA-CapabilityAddXDD-Mode-r9'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v9c0-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v9c0-IEs': {'members': [{'name': 'interRAT-ParametersUTRA-v9c0', 'optional': True, 'type': 'IRAT-ParametersUTRA-v9c0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v9d0-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v9d0-IEs': {'members': [{'name': 'phyLayerParameters-v9d0', 'optional': True, 'type': 'PhyLayerParameters-v9d0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v9e0-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v9e0-IEs': {'members': [{'name': 'rf-Parameters-v9e0', 'optional': True, 'type': 'RF-Parameters-v9e0'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v9h0-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-Capability-v9h0-IEs': {'members': [{'name': 'interRAT-ParametersUTRA-v9h0', 'optional': True, 'type': 'IRAT-ParametersUTRA-v9h0'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-EUTRA-Capability-v10c0-IEs'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-CapabilityAddXDD-Mode-r9': {'members': [{'name': 'phyLayerParameters-r9', 'optional': True, 'type': 'PhyLayerParameters'}, {'name': 'featureGroupIndicators-r9', 'optional': True, 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'featureGroupIndRel9Add-r9', 'optional': True, 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'interRAT-ParametersGERAN-r9', 'optional': True, 'type': 'IRAT-ParametersGERAN'}, {'name': 'interRAT-ParametersUTRA-r9', 'optional': True, 'type': 'IRAT-ParametersUTRA-v920'}, {'name': 'interRAT-ParametersCDMA2000-r9', 'optional': True, 'type': 'IRAT-ParametersCDMA2000-1XRTT-v920'}, {'name': 'neighCellSI-AcquisitionParameters-r9', 'optional': True, 'type': 'NeighCellSI-AcquisitionParameters-r9'}, None], 'type': 'SEQUENCE'}, 'UE-EUTRA-CapabilityAddXDD-Mode-v1060': {'members': [{'name': 'phyLayerParameters-v1060', 'optional': True, 'type': 'PhyLayerParameters-v1020'}, {'name': 'featureGroupIndRel10-v1060', 'optional': True, 'size': [32], 'type': 'BIT ' 'STRING'}, {'name': 'interRAT-ParametersCDMA2000-v1060', 'optional': True, 'type': 'IRAT-ParametersCDMA2000-1XRTT-v1020'}, {'name': 'interRAT-ParametersUTRA-TDD-v1060', 'optional': True, 'type': 'IRAT-ParametersUTRA-TDD-v1020'}, None, [{'name': 'otdoa-PositioningCapabilities-r10', 'optional': True, 'type': 'OTDOA-PositioningCapabilities-r10'}]], 'type': 'SEQUENCE'}, 'UE-EUTRA-CapabilityAddXDD-Mode-v1130': {'members': [{'name': 'phyLayerParameters-v1130', 'optional': True, 'type': 'PhyLayerParameters-v1130'}, {'name': 'measParameters-v1130', 'optional': True, 'type': 'MeasParameters-v1130'}, {'name': 'otherParameters-r11', 'optional': True, 'type': 'Other-Parameters-r11'}, None], 'type': 'SEQUENCE'}, 'UE-EUTRA-CapabilityAddXDD-Mode-v1180': {'members': [{'name': 'mbms-Parameters-r11', 'type': 'MBMS-Parameters-r11'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-CapabilityAddXDD-Mode-v1250': {'members': [{'name': 'phyLayerParameters-v1250', 'optional': True, 'type': 'PhyLayerParameters-v1250'}, {'name': 'measParameters-v1250', 'optional': True, 'type': 'MeasParameters-v1250'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-CapabilityAddXDD-Mode-v1310': {'members': [{'name': 'phyLayerParameters-v1310', 'optional': True, 'type': 'PhyLayerParameters-v1310'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-CapabilityAddXDD-Mode-v1320': {'members': [{'name': 'phyLayerParameters-v1320', 'optional': True, 'type': 'PhyLayerParameters-v1320'}, {'name': 'scptm-Parameters-r13', 'optional': True, 'type': 'SCPTM-Parameters-r13'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-CapabilityAddXDD-Mode-v1370': {'members': [{'name': 'ce-Parameters-v1370', 'optional': True, 'type': 'CE-Parameters-v1370'}], 'type': 'SEQUENCE'}, 'UE-EUTRA-CapabilityAddXDD-Mode-v1430': {'members': [{'name': 'phyLayerParameters-v1430', 'optional': True, 'type': 'PhyLayerParameters-v1430'}, {'name': 'mmtel-Parameters-r14', 'optional': True, 'type': 'MMTEL-Parameters-r14'}], 'type': 'SEQUENCE'}, 'UE-RadioPagingInfo-r12': {'members': [{'name': 'ue-Category-v1250', 'optional': True, 'restricted-to': [0], 'type': 'INTEGER'}, None, [{'name': 'ue-CategoryDL-v1310', 'optional': True, 'type': 'ENUMERATED', 'values': [('m1', 0)]}, {'name': 'ce-ModeA-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'ce-ModeB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'type': 'SEQUENCE'}, 'UE-TimersAndConstants': {'members': [{'name': 't300', 'type': 'ENUMERATED', 'values': [('ms100', 0), ('ms200', 1), ('ms300', 2), ('ms400', 3), ('ms600', 4), ('ms1000', 5), ('ms1500', 6), ('ms2000', 7)]}, {'name': 't301', 'type': 'ENUMERATED', 'values': [('ms100', 0), ('ms200', 1), ('ms300', 2), ('ms400', 3), ('ms600', 4), ('ms1000', 5), ('ms1500', 6), ('ms2000', 7)]}, {'name': 't310', 'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms50', 1), ('ms100', 2), ('ms200', 3), ('ms500', 4), ('ms1000', 5), ('ms2000', 6)]}, {'name': 'n310', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n6', 4), ('n8', 5), ('n10', 6), ('n20', 7)]}, {'name': 't311', 'type': 'ENUMERATED', 'values': [('ms1000', 0), ('ms3000', 1), ('ms5000', 2), ('ms10000', 3), ('ms15000', 4), ('ms20000', 5), ('ms30000', 6)]}, {'name': 'n311', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n5', 4), ('n6', 5), ('n8', 6), ('n10', 7)]}, None, [{'name': 't300-v1310', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms2500', 0), ('ms3000', 1), ('ms3500', 2), ('ms4000', 3), ('ms5000', 4), ('ms6000', 5), ('ms8000', 6), ('ms10000', 7)]}, {'name': 't301-v1310', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms2500', 0), ('ms3000', 1), ('ms3500', 2), ('ms4000', 3), ('ms5000', 4), ('ms6000', 5), ('ms8000', 6), ('ms10000', 7)]}], [{'name': 't310-v1330', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms4000', 0), ('ms6000', 1)]}]], 'type': 'SEQUENCE'}, 'UEAssistanceInformation-r11': {'members': [{'members': [{'members': [{'name': 'ueAssistanceInformation-r11', 'type': 'UEAssistanceInformation-r11-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UEAssistanceInformation-r11-IEs': {'members': [{'name': 'powerPrefIndication-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('normal', 0), ('lowPowerConsumption', 1)]}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UEAssistanceInformation-v1430-IEs'}], 'type': 'SEQUENCE'}, 'UEAssistanceInformation-v1430-IEs': {'members': [{'name': 'bw-Preference-r14', 'optional': True, 'type': 'BW-Preference-r14'}, {'members': [{'name': 'trafficPatternInfoListSL-r14', 'optional': True, 'type': 'TrafficPatternInfoList-r14'}, {'name': 'trafficPatternInfoListUL-r14', 'optional': True, 'type': 'TrafficPatternInfoList-r14'}], 'name': 'sps-AssistanceInformation-r14', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'rlm-Event-r14', 'type': 'ENUMERATED', 'values': [('earlyOutOfSync', 0), ('earlyInSync', 1)]}, {'name': 'excessRep-MPDCCH-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('excessRep1', 0), ('excessRep2', 1)]}], 'name': 'rlm-Report-r14', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'delayBudgetReport-r14', 'optional': True, 'type': 'DelayBudgetReport-r14'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UECapabilityEnquiry': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'ueCapabilityEnquiry-r8', 'type': 'UECapabilityEnquiry-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UECapabilityEnquiry-r8-IEs': {'members': [{'name': 'ue-CapabilityRequest', 'type': 'UE-CapabilityRequest'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UECapabilityEnquiry-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'UECapabilityEnquiry-v1180-IEs': {'members': [{'element': {'type': 'FreqBandIndicator-r11'}, 'name': 'requestedFrequencyBands-r11', 'optional': True, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UECapabilityEnquiry-v1310-IEs'}], 'type': 'SEQUENCE'}, 'UECapabilityEnquiry-v1310-IEs': {'members': [{'name': 'requestReducedFormat-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'requestSkipFallbackComb-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'requestedMaxCCsDL-r13', 'optional': True, 'restricted-to': [(2, 32)], 'type': 'INTEGER'}, {'name': 'requestedMaxCCsUL-r13', 'optional': True, 'restricted-to': [(2, 32)], 'type': 'INTEGER'}, {'name': 'requestReducedIntNonContComb-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UECapabilityEnquiry-v1430-IEs'}], 'type': 'SEQUENCE'}, 'UECapabilityEnquiry-v1430-IEs': {'members': [{'name': 'requestDiffFallbackCombList-r14', 'optional': True, 'type': 'BandCombinationList-r14'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UECapabilityEnquiry-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UECapabilityEnquiry-v1180-IEs'}], 'type': 'SEQUENCE'}, 'UECapabilityInformation': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'ueCapabilityInformation-r8', 'type': 'UECapabilityInformation-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UECapabilityInformation-r8-IEs': {'members': [{'name': 'ue-CapabilityRAT-ContainerList', 'type': 'UE-CapabilityRAT-ContainerList'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UECapabilityInformation-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'UECapabilityInformation-v1250-IEs': {'members': [{'name': 'ue-RadioPagingInfo-r12', 'optional': True, 'type': 'UE-RadioPagingInfo-r12'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UECapabilityInformation-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UECapabilityInformation-v1250-IEs'}], 'type': 'SEQUENCE'}, 'UEInformationRequest-r9': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'ueInformationRequest-r9', 'type': 'UEInformationRequest-r9-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UEInformationRequest-r9-IEs': {'members': [{'name': 'rach-ReportReq-r9', 'type': 'BOOLEAN'}, {'name': 'rlf-ReportReq-r9', 'type': 'BOOLEAN'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UEInformationRequest-v930-IEs'}], 'type': 'SEQUENCE'}, 'UEInformationRequest-v1020-IEs': {'members': [{'name': 'logMeasReportReq-r10', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UEInformationRequest-v1130-IEs'}], 'type': 'SEQUENCE'}, 'UEInformationRequest-v1130-IEs': {'members': [{'name': 'connEstFailReportReq-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UEInformationRequest-v1250-IEs'}], 'type': 'SEQUENCE'}, 'UEInformationRequest-v1250-IEs': {'members': [{'name': 'mobilityHistoryReportReq-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UEInformationRequest-v930-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UEInformationRequest-v1020-IEs'}], 'type': 'SEQUENCE'}, 'UEInformationResponse-r9': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'ueInformationResponse-r9', 'type': 'UEInformationResponse-r9-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UEInformationResponse-r9-IEs': {'members': [{'members': [{'name': 'numberOfPreamblesSent-r9', 'type': 'NumberOfPreamblesSent-r11'}, {'name': 'contentionDetected-r9', 'type': 'BOOLEAN'}], 'name': 'rach-Report-r9', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'rlf-Report-r9', 'optional': True, 'type': 'RLF-Report-r9'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UEInformationResponse-v930-IEs'}], 'type': 'SEQUENCE'}, 'UEInformationResponse-v1020-IEs': {'members': [{'name': 'logMeasReport-r10', 'optional': True, 'type': 'LogMeasReport-r10'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UEInformationResponse-v1130-IEs'}], 'type': 'SEQUENCE'}, 'UEInformationResponse-v1130-IEs': {'members': [{'name': 'connEstFailReport-r11', 'optional': True, 'type': 'ConnEstFailReport-r11'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UEInformationResponse-v1250-IEs'}], 'type': 'SEQUENCE'}, 'UEInformationResponse-v1250-IEs': {'members': [{'name': 'mobilityHistoryReport-r12', 'optional': True, 'type': 'MobilityHistoryReport-r12'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UEInformationResponse-v930-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UEInformationResponse-v1020-IEs'}], 'type': 'SEQUENCE'}, 'UEInformationResponse-v9e0-IEs': {'members': [{'name': 'rlf-Report-v9e0', 'optional': True, 'type': 'RLF-Report-v9e0'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UL-256QAM-perCC-Info-r14': {'members': [{'name': 'ul-256QAM-perCC-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'UL-AM-RLC': {'members': [{'name': 't-PollRetransmit', 'type': 'T-PollRetransmit'}, {'name': 'pollPDU', 'type': 'PollPDU'}, {'name': 'pollByte', 'type': 'PollByte'}, {'name': 'maxRetxThreshold', 'type': 'ENUMERATED', 'values': [('t1', 0), ('t2', 1), ('t3', 2), ('t4', 3), ('t6', 4), ('t8', 5), ('t16', 6), ('t32', 7)]}], 'type': 'SEQUENCE'}, 'UL-CCCH-Message': {'members': [{'name': 'message', 'type': 'UL-CCCH-MessageType'}], 'type': 'SEQUENCE'}, 'UL-CCCH-MessageType': {'members': [{'members': [{'name': 'rrcConnectionReestablishmentRequest', 'type': 'RRCConnectionReestablishmentRequest'}, {'name': 'rrcConnectionRequest', 'type': 'RRCConnectionRequest'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [{'members': [{'name': 'rrcConnectionResumeRequest-r13', 'type': 'RRCConnectionResumeRequest-r13'}], 'name': 'c2', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtensionFuture-r13', 'type': 'SEQUENCE'}], 'name': 'messageClassExtension', 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'UL-CyclicPrefixLength': {'type': 'ENUMERATED', 'values': [('len1', 0), ('len2', 1)]}, 'UL-DCCH-Message': {'members': [{'name': 'message', 'type': 'UL-DCCH-MessageType'}], 'type': 'SEQUENCE'}, 'UL-DCCH-MessageType': {'members': [{'members': [{'name': 'csfbParametersRequestCDMA2000', 'type': 'CSFBParametersRequestCDMA2000'}, {'name': 'measurementReport', 'type': 'MeasurementReport'}, {'name': 'rrcConnectionReconfigurationComplete', 'type': 'RRCConnectionReconfigurationComplete'}, {'name': 'rrcConnectionReestablishmentComplete', 'type': 'RRCConnectionReestablishmentComplete'}, {'name': 'rrcConnectionSetupComplete', 'type': 'RRCConnectionSetupComplete'}, {'name': 'securityModeComplete', 'type': 'SecurityModeComplete'}, {'name': 'securityModeFailure', 'type': 'SecurityModeFailure'}, {'name': 'ueCapabilityInformation', 'type': 'UECapabilityInformation'}, {'name': 'ulHandoverPreparationTransfer', 'type': 'ULHandoverPreparationTransfer'}, {'name': 'ulInformationTransfer', 'type': 'ULInformationTransfer'}, {'name': 'counterCheckResponse', 'type': 'CounterCheckResponse'}, {'name': 'ueInformationResponse-r9', 'type': 'UEInformationResponse-r9'}, {'name': 'proximityIndication-r9', 'type': 'ProximityIndication-r9'}, {'name': 'rnReconfigurationComplete-r10', 'type': 'RNReconfigurationComplete-r10'}, {'name': 'mbmsCountingResponse-r10', 'type': 'MBMSCountingResponse-r10'}, {'name': 'interFreqRSTDMeasurementIndication-r10', 'type': 'InterFreqRSTDMeasurementIndication-r10'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [{'members': [{'name': 'ueAssistanceInformation-r11', 'type': 'UEAssistanceInformation-r11'}, {'name': 'inDeviceCoexIndication-r11', 'type': 'InDeviceCoexIndication-r11'}, {'name': 'mbmsInterestIndication-r11', 'type': 'MBMSInterestIndication-r11'}, {'name': 'scgFailureInformation-r12', 'type': 'SCGFailureInformation-r12'}, {'name': 'sidelinkUEInformation-r12', 'type': 'SidelinkUEInformation-r12'}, {'name': 'wlanConnectionStatusReport-r13', 'type': 'WLANConnectionStatusReport-r13'}, {'name': 'rrcConnectionResumeComplete-r13', 'type': 'RRCConnectionResumeComplete-r13'}, {'name': 'spare9', 'type': 'NULL'}, {'name': 'spare8', 'type': 'NULL'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c2', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtensionFuture-r11', 'type': 'SEQUENCE'}], 'name': 'messageClassExtension', 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'UL-DelayConfig-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'delayThreshold-r13', 'type': 'ENUMERATED', 'values': [('ms30', 0), ('ms40', 1), ('ms50', 2), ('ms60', 3), ('ms70', 4), ('ms80', 5), ('ms90', 6), ('ms100', 7), ('ms150', 8), ('ms300', 9), ('ms500', 10), ('ms750', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'UL-PDCP-DelayResult-r13': {'members': [{'name': 'qci-Id-r13', 'type': 'ENUMERATED', 'values': [('qci1', 0), ('qci2', 1), ('qci3', 2), ('qci4', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 'excessDelay-r13', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'UL-PDCP-DelayResultList-r13': {'element': {'type': 'UL-PDCP-DelayResult-r13'}, 'size': [(1, 'maxQCI-r13')], 'type': 'SEQUENCE ' 'OF'}, 'UL-ReferenceSignalsPUSCH': {'members': [{'name': 'groupHoppingEnabled', 'type': 'BOOLEAN'}, {'name': 'groupAssignmentPUSCH', 'restricted-to': [(0, 29)], 'type': 'INTEGER'}, {'name': 'sequenceHoppingEnabled', 'type': 'BOOLEAN'}, {'name': 'cyclicShift', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'UL-UM-RLC': {'members': [{'name': 'sn-FieldLength', 'type': 'SN-FieldLength'}], 'type': 'SEQUENCE'}, 'ULHandoverPreparationTransfer': {'members': [{'members': [{'members': [{'name': 'ulHandoverPreparationTransfer-r8', 'type': 'ULHandoverPreparationTransfer-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'ULHandoverPreparationTransfer-r8-IEs': {'members': [{'name': 'cdma2000-Type', 'type': 'CDMA2000-Type'}, {'name': 'meid', 'optional': True, 'size': [56], 'type': 'BIT ' 'STRING'}, {'name': 'dedicatedInfo', 'type': 'DedicatedInfoCDMA2000'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'ULHandoverPreparationTransfer-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'ULHandoverPreparationTransfer-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'ULInformationTransfer': {'members': [{'members': [{'members': [{'name': 'ulInformationTransfer-r8', 'type': 'ULInformationTransfer-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'ULInformationTransfer-r8-IEs': {'members': [{'members': [{'name': 'dedicatedInfoNAS', 'type': 'DedicatedInfoNAS'}, {'name': 'dedicatedInfoCDMA2000-1XRTT', 'type': 'DedicatedInfoCDMA2000'}, {'name': 'dedicatedInfoCDMA2000-HRPD', 'type': 'DedicatedInfoCDMA2000'}], 'name': 'dedicatedInfoType', 'type': 'CHOICE'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'ULInformationTransfer-v8a0-IEs'}], 'type': 'SEQUENCE'}, 'ULInformationTransfer-v8a0-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UplinkPUSCH-LessPowerControlDedicated-v1430': {'members': [{'name': 'p0-UE-PeriodicSRS-r14', 'optional': True, 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}, {'name': 'p0-UE-AperiodicSRS-r14', 'optional': True, 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}, {'name': 'accumulationEnabled-r14', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlCommon': {'members': [{'name': 'p0-NominalPUSCH', 'restricted-to': [(-126, 24)], 'type': 'INTEGER'}, {'name': 'alpha', 'type': 'Alpha-r12'}, {'name': 'p0-NominalPUCCH', 'restricted-to': [(-127, -96)], 'type': 'INTEGER'}, {'name': 'deltaFList-PUCCH', 'type': 'DeltaFList-PUCCH'}, {'name': 'deltaPreambleMsg3', 'restricted-to': [(-1, 6)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlCommon-v1020': {'members': [{'name': 'deltaF-PUCCH-Format3-r10', 'type': 'ENUMERATED', 'values': [('deltaF-1', 0), ('deltaF0', 1), ('deltaF1', 2), ('deltaF2', 3), ('deltaF3', 4), ('deltaF4', 5), ('deltaF5', 6), ('deltaF6', 7)]}, {'name': 'deltaF-PUCCH-Format1bCS-r10', 'type': 'ENUMERATED', 'values': [('deltaF1', 0), ('deltaF2', 1), ('spare2', 2), ('spare1', 3)]}], 'type': 'SEQUENCE'}, 'UplinkPowerControlCommon-v1310': {'members': [{'name': 'deltaF-PUCCH-Format4-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('deltaF16', 0), ('deltaF15', 1), ('deltaF14', 2), ('deltaF13', 3), ('deltaF12', 4), ('deltaF11', 5), ('deltaF10', 6), ('spare1', 7)]}, {'name': 'deltaF-PUCCH-Format5-13', 'optional': True, 'type': 'ENUMERATED', 'values': [('deltaF13', 0), ('deltaF12', 1), ('deltaF11', 2), ('deltaF10', 3), ('deltaF9', 4), ('deltaF8', 5), ('deltaF7', 6), ('spare1', 7)]}], 'type': 'SEQUENCE'}, 'UplinkPowerControlCommonPSCell-r12': {'members': [{'name': 'deltaF-PUCCH-Format3-r12', 'type': 'ENUMERATED', 'values': [('deltaF-1', 0), ('deltaF0', 1), ('deltaF1', 2), ('deltaF2', 3), ('deltaF3', 4), ('deltaF4', 5), ('deltaF5', 6), ('deltaF6', 7)]}, {'name': 'deltaF-PUCCH-Format1bCS-r12', 'type': 'ENUMERATED', 'values': [('deltaF1', 0), ('deltaF2', 1), ('spare2', 2), ('spare1', 3)]}, {'name': 'p0-NominalPUCCH-r12', 'restricted-to': [(-127, -96)], 'type': 'INTEGER'}, {'name': 'deltaFList-PUCCH-r12', 'type': 'DeltaFList-PUCCH'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlCommonPUSCH-LessCell-v1430': {'members': [{'name': 'p0-Nominal-PeriodicSRS-r14', 'optional': True, 'restricted-to': [(-126, 24)], 'type': 'INTEGER'}, {'name': 'p0-Nominal-AperiodicSRS-r14', 'optional': True, 'restricted-to': [(-126, 24)], 'type': 'INTEGER'}, {'name': 'alpha-SRS-r14', 'optional': True, 'type': 'Alpha-r12'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlCommonSCell-r10': {'members': [{'name': 'p0-NominalPUSCH-r10', 'restricted-to': [(-126, 24)], 'type': 'INTEGER'}, {'name': 'alpha-r10', 'type': 'Alpha-r12'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlCommonSCell-v1130': {'members': [{'name': 'deltaPreambleMsg3-r11', 'restricted-to': [(-1, 6)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlCommonSCell-v1310': {'members': [{'name': 'p0-NominalPUCCH', 'restricted-to': [(-127, -96)], 'type': 'INTEGER'}, {'name': 'deltaFList-PUCCH', 'type': 'DeltaFList-PUCCH'}, {'name': 'deltaF-PUCCH-Format3-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('deltaF-1', 0), ('deltaF0', 1), ('deltaF1', 2), ('deltaF2', 3), ('deltaF3', 4), ('deltaF4', 5), ('deltaF5', 6), ('deltaF6', 7)]}, {'name': 'deltaF-PUCCH-Format1bCS-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('deltaF1', 0), ('deltaF2', 1), ('spare2', 2), ('spare1', 3)]}, {'name': 'deltaF-PUCCH-Format4-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('deltaF16', 0), ('deltaF15', 1), ('deltaF14', 2), ('deltaF13', 3), ('deltaF12', 4), ('deltaF11', 5), ('deltaF10', 6), ('spare1', 7)]}, {'name': 'deltaF-PUCCH-Format5-13', 'optional': True, 'type': 'ENUMERATED', 'values': [('deltaF13', 0), ('deltaF12', 1), ('deltaF11', 2), ('deltaF10', 3), ('deltaF9', 4), ('deltaF8', 5), ('deltaF7', 6), ('spare1', 7)]}], 'type': 'SEQUENCE'}, 'UplinkPowerControlDedicated': {'members': [{'name': 'p0-UE-PUSCH', 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}, {'name': 'deltaMCS-Enabled', 'type': 'ENUMERATED', 'values': [('en0', 0), ('en1', 1)]}, {'name': 'accumulationEnabled', 'type': 'BOOLEAN'}, {'name': 'p0-UE-PUCCH', 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}, {'name': 'pSRS-Offset', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'default': 'fc4', 'name': 'filterCoefficient', 'type': 'FilterCoefficient'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlDedicated-v1020': {'members': [{'name': 'deltaTxD-OffsetListPUCCH-r10', 'optional': True, 'type': 'DeltaTxD-OffsetListPUCCH-r10'}, {'name': 'pSRS-OffsetAp-r10', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlDedicated-v1130': {'members': [{'name': 'pSRS-Offset-v1130', 'optional': True, 'restricted-to': [(16, 31)], 'type': 'INTEGER'}, {'name': 'pSRS-OffsetAp-v1130', 'optional': True, 'restricted-to': [(16, 31)], 'type': 'INTEGER'}, {'name': 'deltaTxD-OffsetListPUCCH-v1130', 'optional': True, 'type': 'DeltaTxD-OffsetListPUCCH-v1130'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlDedicated-v1250': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'tpc-SubframeSet-r12', 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'p0-NominalPUSCH-SubframeSet2-r12', 'restricted-to': [(-126, 24)], 'type': 'INTEGER'}, {'name': 'alpha-SubframeSet2-r12', 'type': 'Alpha-r12'}, {'name': 'p0-UE-PUSCH-SubframeSet2-r12', 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'set2PowerControlParameter', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlDedicatedSCell-r10': {'members': [{'name': 'p0-UE-PUSCH-r10', 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}, {'name': 'deltaMCS-Enabled-r10', 'type': 'ENUMERATED', 'values': [('en0', 0), ('en1', 1)]}, {'name': 'accumulationEnabled-r10', 'type': 'BOOLEAN'}, {'name': 'pSRS-Offset-r10', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'pSRS-OffsetAp-r10', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'default': 'fc4', 'name': 'filterCoefficient-r10', 'type': 'FilterCoefficient'}, {'name': 'pathlossReferenceLinking-r10', 'type': 'ENUMERATED', 'values': [('pCell', 0), ('sCell', 1)]}], 'type': 'SEQUENCE'}, 'UplinkPowerControlDedicatedSCell-v1310': {'members': [{'name': 'p0-UE-PUCCH', 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}, {'name': 'deltaTxD-OffsetListPUCCH-r10', 'optional': True, 'type': 'DeltaTxD-OffsetListPUCCH-r10'}], 'type': 'SEQUENCE'}, 'V2X-BandCombinationParameters-r14': {'element': {'type': 'V2X-BandParameters-r14'}, 'size': [(1, 'maxSimultaneousBands-r10')], 'type': 'SEQUENCE ' 'OF'}, 'V2X-BandParameters-r14': {'members': [{'name': 'v2x-FreqBandEUTRA-r14', 'type': 'FreqBandIndicator-r11'}, {'name': 'bandParametersTxSL-r14', 'optional': True, 'type': 'BandParametersTxSL-r14'}, {'name': 'bandParametersRxSL-r14', 'optional': True, 'type': 'BandParametersRxSL-r14'}], 'type': 'SEQUENCE'}, 'V2X-BandwidthClass-r14': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), None]}, 'V2X-BandwidthClassSL-r14': {'element': {'type': 'V2X-BandwidthClass-r14'}, 'size': [(1, 'maxBandwidthClass-r10')], 'type': 'SEQUENCE ' 'OF'}, 'V2X-SupportedBandCombination-r14': {'element': {'type': 'V2X-BandCombinationParameters-r14'}, 'size': [(1, 'maxBandComb-r13')], 'type': 'SEQUENCE ' 'OF'}, 'VictimSystemType-r11': {'members': [{'name': 'gps-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'glonass-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'bds-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'galileo-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'wlan-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'bluetooth-r11', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'VisitedCellInfo-r12': {'members': [{'members': [{'name': 'cellGlobalId-r12', 'type': 'CellGlobalIdEUTRA'}, {'members': [{'name': 'physCellId-r12', 'type': 'PhysCellId'}, {'name': 'carrierFreq-r12', 'type': 'ARFCN-ValueEUTRA-r9'}], 'name': 'pci-arfcn-r12', 'type': 'SEQUENCE'}], 'name': 'visitedCellId-r12', 'optional': True, 'type': 'CHOICE'}, {'name': 'timeSpent-r12', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'VisitedCellInfoList-r12': {'element': {'type': 'VisitedCellInfo-r12'}, 'size': [(1, 'maxCellHistory-r12')], 'type': 'SEQUENCE ' 'OF'}, 'WLAN-BandIndicator-r13': {'type': 'ENUMERATED', 'values': [('band2dot4', 0), ('band5', 1), ('band60-v1430', 2), ('spare5', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7), None]}, 'WLAN-CarrierInfo-r13': {'members': [{'name': 'operatingClass-r13', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'countryCode-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('unitedStates', 0), ('europe', 1), ('japan', 2), ('global', 3), None]}, {'name': 'channelNumbers-r13', 'optional': True, 'type': 'WLAN-ChannelList-r13'}, None], 'type': 'SEQUENCE'}, 'WLAN-Channel-r13': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'WLAN-ChannelList-r13': {'element': {'type': 'WLAN-Channel-r13'}, 'size': [(1, 'maxWLAN-Channels-r13')], 'type': 'SEQUENCE ' 'OF'}, 'WLAN-IW-Parameters-r12': {'members': [{'name': 'wlan-IW-RAN-Rules-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'wlan-IW-ANDSF-Policies-r12', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'WLAN-IW-Parameters-v1310': {'members': [{'name': 'rclwi-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'WLAN-Id-List-r12': {'element': {'type': 'WLAN-Identifiers-r12'}, 'size': [(1, 'maxWLAN-Id-r12')], 'type': 'SEQUENCE ' 'OF'}, 'WLAN-Id-List-r13': {'element': {'type': 'WLAN-Identifiers-r12'}, 'size': [(1, 'maxWLAN-Id-r13')], 'type': 'SEQUENCE ' 'OF'}, 'WLAN-Identifiers-r12': {'members': [{'name': 'ssid-r12', 'optional': True, 'size': [(1, 32)], 'type': 'OCTET ' 'STRING'}, {'name': 'bssid-r12', 'optional': True, 'size': [6], 'type': 'OCTET ' 'STRING'}, {'name': 'hessid-r12', 'optional': True, 'size': [6], 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'WLAN-MobilityConfig-r13': {'members': [{'name': 'wlan-ToReleaseList-r13', 'optional': True, 'type': 'WLAN-Id-List-r13'}, {'name': 'wlan-ToAddList-r13', 'optional': True, 'type': 'WLAN-Id-List-r13'}, {'name': 'associationTimer-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('s10', 0), ('s30', 1), ('s60', 2), ('s120', 3), ('s240', 4)]}, {'name': 'successReportRequested-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, None, [{'name': 'wlan-SuspendConfig-r14', 'optional': True, 'type': 'WLAN-SuspendConfig-r14'}]], 'type': 'SEQUENCE'}, 'WLAN-OffloadConfig-r12': {'members': [{'members': [{'name': 'thresholdRSRP-Low-r12', 'type': 'RSRP-Range'}, {'name': 'thresholdRSRP-High-r12', 'type': 'RSRP-Range'}], 'name': 'thresholdRSRP-r12', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'thresholdRSRQ-Low-r12', 'type': 'RSRQ-Range'}, {'name': 'thresholdRSRQ-High-r12', 'type': 'RSRQ-Range'}], 'name': 'thresholdRSRQ-r12', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'thresholdRSRQ-OnAllSymbolsWithWB-Low-r12', 'type': 'RSRQ-Range'}, {'name': 'thresholdRSRQ-OnAllSymbolsWithWB-High-r12', 'type': 'RSRQ-Range'}], 'name': 'thresholdRSRQ-OnAllSymbolsWithWB-r12', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'thresholdRSRQ-OnAllSymbolsLow-r12', 'type': 'RSRQ-Range'}, {'name': 'thresholdRSRQ-OnAllSymbolsHigh-r12', 'type': 'RSRQ-Range'}], 'name': 'thresholdRSRQ-OnAllSymbols-r12', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'thresholdRSRQ-WB-Low-r12', 'type': 'RSRQ-Range'}, {'name': 'thresholdRSRQ-WB-High-r12', 'type': 'RSRQ-Range'}], 'name': 'thresholdRSRQ-WB-r12', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'thresholdChannelUtilizationLow-r12', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'thresholdChannelUtilizationHigh-r12', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}], 'name': 'thresholdChannelUtilization-r12', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'thresholdBackhaulDL-BandwidthLow-r12', 'type': 'WLAN-backhaulRate-r12'}, {'name': 'thresholdBackhaulDL-BandwidthHigh-r12', 'type': 'WLAN-backhaulRate-r12'}, {'name': 'thresholdBackhaulUL-BandwidthLow-r12', 'type': 'WLAN-backhaulRate-r12'}, {'name': 'thresholdBackhaulUL-BandwidthHigh-r12', 'type': 'WLAN-backhaulRate-r12'}], 'name': 'thresholdBackhaul-Bandwidth-r12', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'thresholdWLAN-RSSI-Low-r12', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'thresholdWLAN-RSSI-High-r12', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}], 'name': 'thresholdWLAN-RSSI-r12', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'offloadPreferenceIndicator-r12', 'optional': True, 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 't-SteeringWLAN-r12', 'optional': True, 'type': 'T-Reselection'}, None], 'type': 'SEQUENCE'}, 'WLAN-OffloadInfoPerPLMN-r12': {'members': [{'name': 'wlan-OffloadConfigCommon-r12', 'optional': True, 'type': 'WLAN-OffloadConfig-r12'}, {'name': 'wlan-Id-List-r12', 'optional': True, 'type': 'WLAN-Id-List-r12'}, None], 'type': 'SEQUENCE'}, 'WLAN-RSSI-Range-r13': {'restricted-to': [(0, 141)], 'type': 'INTEGER'}, 'WLAN-Status-r13': {'type': 'ENUMERATED', 'values': [('successfulAssociation', 0), ('failureWlanRadioLink', 1), ('failureWlanUnavailable', 2), ('failureTimeout', 3)]}, 'WLAN-Status-v1430': {'type': 'ENUMERATED', 'values': [('suspended', 0), ('resumed', 1)]}, 'WLAN-SuspendConfig-r14': {'members': [{'name': 'wlan-SuspendResumeAllowed-r14', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'wlan-SuspendTriggersStatusReport-r14', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'WLAN-backhaulRate-r12': {'type': 'ENUMERATED', 'values': [('r0', 0), ('r4', 1), ('r8', 2), ('r16', 3), ('r32', 4), ('r64', 5), ('r128', 6), ('r256', 7), ('r512', 8), ('r1024', 9), ('r2048', 10), ('r4096', 11), ('r8192', 12), ('r16384', 13), ('r32768', 14), ('r65536', 15), ('r131072', 16), ('r262144', 17), ('r524288', 18), ('r1048576', 19), ('r2097152', 20), ('r4194304', 21), ('r8388608', 22), ('r16777216', 23), ('r33554432', 24), ('r67108864', 25), ('r134217728', 26), ('r268435456', 27), ('r536870912', 28), ('r1073741824', 29), ('r2147483648', 30), ('r4294967296', 31)]}, 'WLANConnectionStatusReport-r13': {'members': [{'members': [{'members': [{'name': 'wlanConnectionStatusReport-r13', 'type': 'WLANConnectionStatusReport-r13-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'WLANConnectionStatusReport-r13-IEs': {'members': [{'name': 'wlan-Status-r13', 'type': 'WLAN-Status-r13'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'WLANConnectionStatusReport-v1430-IEs'}], 'type': 'SEQUENCE'}, 'WLANConnectionStatusReport-v1430-IEs': {'members': [{'name': 'wlan-Status-v1430', 'type': 'WLAN-Status-v1430'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'WhiteCellsToAddMod-r13': {'members': [{'name': 'cellIndex-r13', 'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, {'name': 'physCellIdRange-r13', 'type': 'PhysCellIdRange'}], 'type': 'SEQUENCE'}, 'WhiteCellsToAddModList-r13': {'element': {'type': 'WhiteCellsToAddMod-r13'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'ZeroTxPowerCSI-RS-Conf-r12': {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'ZeroTxPowerCSI-RS-r12'}], 'type': 'CHOICE'}, 'ZeroTxPowerCSI-RS-r12': {'members': [{'name': 'zeroTxPowerResourceConfigList-r12', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'zeroTxPowerSubframeConfig-r12', 'restricted-to': [(0, 154)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}}, 'values': {'maxACDC-Cat-r13': {'type': 'INTEGER', 'value': 16}, 'maxAvailNarrowBands-r13': {'type': 'INTEGER', 'value': 16}, 'maxBandComb-r10': {'type': 'INTEGER', 'value': 128}, 'maxBandComb-r11': {'type': 'INTEGER', 'value': 256}, 'maxBandComb-r13': {'type': 'INTEGER', 'value': 384}, 'maxBands': {'type': 'INTEGER', 'value': 64}, 'maxBandwidthClass-r10': {'type': 'INTEGER', 'value': 16}, 'maxBandwidthCombSet-r10': {'type': 'INTEGER', 'value': 32}, 'maxCBR-Level-1-r14': {'type': 'INTEGER', 'value': 15}, 'maxCBR-Level-r14': {'type': 'INTEGER', 'value': 16}, 'maxCBR-Report-r14': {'type': 'INTEGER', 'value': 72}, 'maxCDMA-BandClass': {'type': 'INTEGER', 'value': 32}, 'maxCE-Level-r13': {'type': 'INTEGER', 'value': 4}, 'maxCQI-ProcExt-r11': {'type': 'INTEGER', 'value': 3}, 'maxCSI-IM-r11': {'type': 'INTEGER', 'value': 3}, 'maxCSI-IM-r12': {'type': 'INTEGER', 'value': 4}, 'maxCSI-IM-r13': {'type': 'INTEGER', 'value': 24}, 'maxCSI-IM-v1310': {'type': 'INTEGER', 'value': 20}, 'maxCSI-Proc-r11': {'type': 'INTEGER', 'value': 4}, 'maxCSI-RS-Meas-r12': {'type': 'INTEGER', 'value': 96}, 'maxCSI-RS-NZP-r11': {'type': 'INTEGER', 'value': 3}, 'maxCSI-RS-NZP-r13': {'type': 'INTEGER', 'value': 24}, 'maxCSI-RS-NZP-v1310': {'type': 'INTEGER', 'value': 21}, 'maxCSI-RS-ZP-r11': {'type': 'INTEGER', 'value': 4}, 'maxCellBlack': {'type': 'INTEGER', 'value': 16}, 'maxCellHistory-r12': {'type': 'INTEGER', 'value': 16}, 'maxCellInfoGERAN-r9': {'type': 'INTEGER', 'value': 32}, 'maxCellInfoUTRA-r9': {'type': 'INTEGER', 'value': 16}, 'maxCellInter': {'type': 'INTEGER', 'value': 16}, 'maxCellIntra': {'type': 'INTEGER', 'value': 16}, 'maxCellListGERAN': {'type': 'INTEGER', 'value': 3}, 'maxCellMeas': {'type': 'INTEGER', 'value': 32}, 'maxCellReport': {'type': 'INTEGER', 'value': 8}, 'maxCombIDC-r11': {'type': 'INTEGER', 'value': 128}, 'maxConfigSPS-r14': {'type': 'INTEGER', 'value': 8}, 'maxDRB': {'type': 'INTEGER', 'value': 11}, 'maxDS-Duration-r12': {'type': 'INTEGER', 'value': 5}, 'maxDS-ZTP-CSI-RS-r12': {'type': 'INTEGER', 'value': 5}, 'maxEARFCN': {'type': 'INTEGER', 'value': 65535}, 'maxEARFCN-Plus1': {'type': 'INTEGER', 'value': 65536}, 'maxEARFCN2': {'type': 'INTEGER', 'value': 262143}, 'maxEPDCCH-Set-r11': {'type': 'INTEGER', 'value': 2}, 'maxFBI': {'type': 'INTEGER', 'value': 64}, 'maxFBI-Plus1': {'type': 'INTEGER', 'value': 65}, 'maxFBI2': {'type': 'INTEGER', 'value': 256}, 'maxFreq': {'type': 'INTEGER', 'value': 8}, 'maxFreqIDC-r11': {'type': 'INTEGER', 'value': 32}, 'maxFreqMBMS-r11': {'type': 'INTEGER', 'value': 5}, 'maxFreqUTRA-TDD-r10': {'type': 'INTEGER', 'value': 6}, 'maxFreqV2X-1-r14': {'type': 'INTEGER', 'value': 7}, 'maxFreqV2X-r14': {'type': 'INTEGER', 'value': 8}, 'maxGERAN-SI': {'type': 'INTEGER', 'value': 10}, 'maxGNFG': {'type': 'INTEGER', 'value': 16}, 'maxLCG-r13': {'type': 'INTEGER', 'value': 4}, 'maxLogMeasReport-r10': {'type': 'INTEGER', 'value': 520}, 'maxMBMS-ServiceListPerUE-r13': {'type': 'INTEGER', 'value': 15}, 'maxMBSFN-Allocations': {'type': 'INTEGER', 'value': 8}, 'maxMBSFN-Area': {'type': 'INTEGER', 'value': 8}, 'maxMBSFN-Area-1': {'type': 'INTEGER', 'value': 7}, 'maxMeasId': {'type': 'INTEGER', 'value': 32}, 'maxMeasId-Plus1': {'type': 'INTEGER', 'value': 33}, 'maxMeasId-r12': {'type': 'INTEGER', 'value': 64}, 'maxMultiBands': {'type': 'INTEGER', 'value': 8}, 'maxNAICS-Entries-r12': {'type': 'INTEGER', 'value': 8}, 'maxNS-Pmax-r10': {'type': 'INTEGER', 'value': 8}, 'maxNeighCell-SCPTM-r13': {'type': 'INTEGER', 'value': 8}, 'maxNeighCell-r12': {'type': 'INTEGER', 'value': 8}, 'maxObjectId': {'type': 'INTEGER', 'value': 32}, 'maxObjectId-Plus1-r13': {'type': 'INTEGER', 'value': 33}, 'maxObjectId-r13': {'type': 'INTEGER', 'value': 64}, 'maxP-a-PerNeighCell-r12': {'type': 'INTEGER', 'value': 3}, 'maxPLMN-1-r14': {'type': 'INTEGER', 'value': 5}, 'maxPLMN-r11': {'type': 'INTEGER', 'value': 6}, 'maxPMCH-PerMBSFN': {'type': 'INTEGER', 'value': 15}, 'maxPNOffset': {'type': 'INTEGER', 'value': 511}, 'maxPSSCH-TxConfig-r14': {'type': 'INTEGER', 'value': 16}, 'maxPageRec': {'type': 'INTEGER', 'value': 16}, 'maxPhysCellIdRange-r9': {'type': 'INTEGER', 'value': 4}, 'maxQCI-r13': {'type': 'INTEGER', 'value': 6}, 'maxRAT-Capabilities': {'type': 'INTEGER', 'value': 8}, 'maxRE-MapQCL-r11': {'type': 'INTEGER', 'value': 4}, 'maxRSTD-Freq-r10': {'type': 'INTEGER', 'value': 3}, 'maxReportConfigId': {'type': 'INTEGER', 'value': 32}, 'maxReservationPeriod-r14': {'type': 'INTEGER', 'value': 16}, 'maxSAI-MBMS-r11': {'type': 'INTEGER', 'value': 64}, 'maxSC-MTCH-BR-r14': {'type': 'INTEGER', 'value': 128}, 'maxSC-MTCH-r13': {'type': 'INTEGER', 'value': 1023}, 'maxSCell-r10': {'type': 'INTEGER', 'value': 4}, 'maxSCell-r13': {'type': 'INTEGER', 'value': 31}, 'maxSI-Message': {'type': 'INTEGER', 'value': 32}, 'maxSIB': {'type': 'INTEGER', 'value': 32}, 'maxSIB-1': {'type': 'INTEGER', 'value': 31}, 'maxSL-CommRxPoolNFreq-r13': {'type': 'INTEGER', 'value': 32}, 'maxSL-CommRxPoolPreconf-v1310': {'type': 'INTEGER', 'value': 12}, 'maxSL-CommTxPoolPreconf-v1310': {'type': 'INTEGER', 'value': 7}, 'maxSL-Dest-r12': {'type': 'INTEGER', 'value': 16}, 'maxSL-DiscCells-r13': {'type': 'INTEGER', 'value': 16}, 'maxSL-DiscPowerClass-r12': {'type': 'INTEGER', 'value': 3}, 'maxSL-DiscRxPoolPreconf-r13': {'type': 'INTEGER', 'value': 16}, 'maxSL-DiscSysInfoReportFreq-r13': {'type': 'INTEGER', 'value': 8}, 'maxSL-DiscTxPoolPreconf-r13': {'type': 'INTEGER', 'value': 4}, 'maxSL-GP-r13': {'type': 'INTEGER', 'value': 8}, 'maxSL-PoolToMeasure-r14': {'type': 'INTEGER', 'value': 72}, 'maxSL-Prio-r13': {'type': 'INTEGER', 'value': 8}, 'maxSL-RxPool-r12': {'type': 'INTEGER', 'value': 16}, 'maxSL-SyncConfig-r12': {'type': 'INTEGER', 'value': 16}, 'maxSL-TF-IndexPair-r12': {'type': 'INTEGER', 'value': 64}, 'maxSL-TxPool-r12': {'type': 'INTEGER', 'value': 4}, 'maxSL-TxPool-r12Plus1-r13': {'type': 'INTEGER', 'value': 5}, 'maxSL-TxPool-r13': {'type': 'INTEGER', 'value': 8}, 'maxSL-TxPool-v1310': {'type': 'INTEGER', 'value': 4}, 'maxSL-V2X-CBRConfig-1-r14': {'type': 'INTEGER', 'value': 3}, 'maxSL-V2X-CBRConfig-r14': {'type': 'INTEGER', 'value': 4}, 'maxSL-V2X-CBRConfig2-1-r14': {'type': 'INTEGER', 'value': 7}, 'maxSL-V2X-CBRConfig2-r14': {'type': 'INTEGER', 'value': 8}, 'maxSL-V2X-RxPool-r14': {'type': 'INTEGER', 'value': 16}, 'maxSL-V2X-RxPoolPreconf-r14': {'type': 'INTEGER', 'value': 16}, 'maxSL-V2X-SyncConfig-r14': {'type': 'INTEGER', 'value': 16}, 'maxSL-V2X-TxConfig-1-r14': {'type': 'INTEGER', 'value': 63}, 'maxSL-V2X-TxConfig-r14': {'type': 'INTEGER', 'value': 64}, 'maxSL-V2X-TxConfig2-1-r14': {'type': 'INTEGER', 'value': 127}, 'maxSL-V2X-TxConfig2-r14': {'type': 'INTEGER', 'value': 128}, 'maxSL-V2X-TxPool-r14': {'type': 'INTEGER', 'value': 8}, 'maxSL-V2X-TxPoolPreconf-r14': {'type': 'INTEGER', 'value': 8}, 'maxSTAG-r11': {'type': 'INTEGER', 'value': 3}, 'maxServCell-r10': {'type': 'INTEGER', 'value': 5}, 'maxServCell-r13': {'type': 'INTEGER', 'value': 32}, 'maxServiceCount': {'type': 'INTEGER', 'value': 16}, 'maxServiceCount-1': {'type': 'INTEGER', 'value': 15}, 'maxSessionPerPMCH': {'type': 'INTEGER', 'value': 29}, 'maxSessionPerPMCH-1': {'type': 'INTEGER', 'value': 28}, 'maxSimultaneousBands-r10': {'type': 'INTEGER', 'value': 64}, 'maxSubframePatternIDC-r11': {'type': 'INTEGER', 'value': 8}, 'maxTrafficPattern-r14': {'type': 'INTEGER', 'value': 8}, 'maxUTRA-FDD-Carrier': {'type': 'INTEGER', 'value': 16}, 'maxUTRA-TDD-Carrier': {'type': 'INTEGER', 'value': 16}, 'maxWLAN-Bands-r13': {'type': 'INTEGER', 'value': 8}, 'maxWLAN-CarrierInfo-r13': {'type': 'INTEGER', 'value': 8}, 'maxWLAN-Channels-r13': {'type': 'INTEGER', 'value': 16}, 'maxWLAN-Id-Report-r14': {'type': 'INTEGER', 'value': 32}, 'maxWLAN-Id-r12': {'type': 'INTEGER', 'value': 16}, 'maxWLAN-Id-r13': {'type': 'INTEGER', 'value': 32}, 'minCSI-IM-r13': {'type': 'INTEGER', 'value': 5}, 'minCSI-RS-NZP-r13': {'type': 'INTEGER', 'value': 4}}}, 'EUTRA-Sidelink-Preconf': {'extensibility-implied': False, 'imports': {'EUTRA-RRC-Definitions': ['ARFCN-ValueEUTRA-r9', 'AdditionalSpectrumEmission', 'AdditionalSpectrumEmission-v10l0', 'FilterCoefficient', 'P-Max', 'P0-SL-r12', 'RSRP-RangeSL3-r12', 'ReselectionInfoRelay-r13', 'SL-AnchorCarrierFreqList-V2X-r14', 'SL-CBR-Levels-Config-r14', 'SL-CBR-PSSCH-TxConfig-r14', 'SL-CP-Len-r12', 'SL-CommTxPoolSensingConfig-r14', 'SL-HoppingConfigComm-r12', 'SL-OffsetIndicator-r12', 'SL-OffsetIndicatorSync-r12', 'SL-OffsetIndicatorSync-r14', 'SL-OffsetIndicatorSync-v1430', 'SL-P2X-ResourceSelectionConfig-r14', 'SL-PeriodComm-r12', 'SL-Priority-r13', 'SL-PriorityList-r13', 'SL-RestrictResourceReservationPeriodList-r14', 'SL-SyncAllowed-r14', 'SL-TF-ResourceConfig-r12', 'SL-TRPT-Subset-r12', 'SL-TxParameters-r12', 'SL-ZoneConfig-r14', 'SubframeBitmapSL-r14', 'TDD-ConfigSL-r12', 'maxCBR-Level-1-r14', 'maxCBR-Level-r14', 'maxFreq', 'maxFreqV2X-r14', 'maxSL-CommRxPoolPreconf-v1310', 'maxSL-CommTxPoolPreconf-v1310', 'maxSL-DiscRxPoolPreconf-r13', 'maxSL-DiscTxPoolPreconf-r13', 'maxSL-TxPool-r12', 'maxSL-V2X-CBRConfig2-1-r14', 'maxSL-V2X-CBRConfig2-r14', 'maxSL-V2X-RxPoolPreconf-r14', 'maxSL-V2X-TxConfig2-1-r14', 'maxSL-V2X-TxConfig2-r14', 'maxSL-V2X-TxPoolPreconf-r14']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'SL-CBR-PPPP-TxPreconfigList-r14': {'element': {'type': 'SL-PPPP-TxPreconfigIndex-r14'}, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, 'SL-CBR-PreconfigTxConfigList-r14': {'members': [{'element': {'type': 'SL-CBR-Levels-Config-r14'}, 'name': 'cbr-RangeCommonConfigList-r14', 'size': [(1, 'maxSL-V2X-CBRConfig2-r14')], 'type': 'SEQUENCE ' 'OF'}, {'element': {'type': 'SL-CBR-PSSCH-TxConfig-r14'}, 'name': 'sl-CBR-PSSCH-TxConfigList-r14', 'size': [(1, 'maxSL-V2X-TxConfig2-r14')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'SL-PPPP-TxPreconfigIndex-r14': {'members': [{'name': 'priorityThreshold-r14', 'type': 'SL-Priority-r13'}, {'name': 'defaultTxConfigIndex-r14', 'restricted-to': [(0, 'maxCBR-Level-1-r14')], 'type': 'INTEGER'}, {'name': 'cbr-ConfigIndex-r14', 'restricted-to': [(0, 'maxSL-V2X-CBRConfig2-1-r14')], 'type': 'INTEGER'}, {'element': {'type': 'Tx-PreconfigIndex-r14'}, 'name': 'tx-ConfigIndexList-r14', 'size': [(1, 'maxCBR-Level-r14')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'SL-PreconfigCommPool-r12': {'members': [{'name': 'sc-CP-Len-r12', 'type': 'SL-CP-Len-r12'}, {'name': 'sc-Period-r12', 'type': 'SL-PeriodComm-r12'}, {'name': 'sc-TF-ResourceConfig-r12', 'type': 'SL-TF-ResourceConfig-r12'}, {'name': 'sc-TxParameters-r12', 'type': 'P0-SL-r12'}, {'name': 'data-CP-Len-r12', 'type': 'SL-CP-Len-r12'}, {'name': 'data-TF-ResourceConfig-r12', 'type': 'SL-TF-ResourceConfig-r12'}, {'name': 'dataHoppingConfig-r12', 'type': 'SL-HoppingConfigComm-r12'}, {'name': 'dataTxParameters-r12', 'type': 'P0-SL-r12'}, {'name': 'trpt-Subset-r12', 'type': 'SL-TRPT-Subset-r12'}, None, [{'name': 'priorityList-r13', 'optional': True, 'type': 'SL-PriorityList-r13'}]], 'type': 'SEQUENCE'}, 'SL-PreconfigCommPoolList4-r12': {'element': {'type': 'SL-PreconfigCommPool-r12'}, 'size': [(1, 'maxSL-TxPool-r12')], 'type': 'SEQUENCE ' 'OF'}, 'SL-PreconfigCommRxPoolList-r13': {'element': {'type': 'SL-PreconfigCommPool-r12'}, 'size': [(1, 'maxSL-CommRxPoolPreconf-v1310')], 'type': 'SEQUENCE ' 'OF'}, 'SL-PreconfigCommTxPoolList-r13': {'element': {'type': 'SL-PreconfigCommPool-r12'}, 'size': [(1, 'maxSL-CommTxPoolPreconf-v1310')], 'type': 'SEQUENCE ' 'OF'}, 'SL-PreconfigDiscPool-r13': {'members': [{'name': 'cp-Len-r13', 'type': 'SL-CP-Len-r12'}, {'name': 'discPeriod-r13', 'type': 'ENUMERATED', 'values': [('rf4', 0), ('rf6', 1), ('rf7', 2), ('rf8', 3), ('rf12', 4), ('rf14', 5), ('rf16', 6), ('rf24', 7), ('rf28', 8), ('rf32', 9), ('rf64', 10), ('rf128', 11), ('rf256', 12), ('rf512', 13), ('rf1024', 14), ('spare', 15)]}, {'name': 'numRetx-r13', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'numRepetition-r13', 'restricted-to': [(1, 50)], 'type': 'INTEGER'}, {'name': 'tf-ResourceConfig-r13', 'type': 'SL-TF-ResourceConfig-r12'}, {'members': [{'name': 'txParametersGeneral-r13', 'type': 'P0-SL-r12'}, {'name': 'txProbability-r13', 'type': 'ENUMERATED', 'values': [('p25', 0), ('p50', 1), ('p75', 2), ('p100', 3)]}], 'name': 'txParameters-r13', 'optional': True, 'type': 'SEQUENCE'}, None], 'type': 'SEQUENCE'}, 'SL-PreconfigDiscRxPoolList-r13': {'element': {'type': 'SL-PreconfigDiscPool-r13'}, 'size': [(1, 'maxSL-DiscRxPoolPreconf-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SL-PreconfigDiscTxPoolList-r13': {'element': {'type': 'SL-PreconfigDiscPool-r13'}, 'size': [(1, 'maxSL-DiscTxPoolPreconf-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SL-PreconfigGeneral-r12': {'members': [{'members': [{'name': 'profile0x0001-r12', 'type': 'BOOLEAN'}, {'name': 'profile0x0002-r12', 'type': 'BOOLEAN'}, {'name': 'profile0x0004-r12', 'type': 'BOOLEAN'}, {'name': 'profile0x0006-r12', 'type': 'BOOLEAN'}, {'name': 'profile0x0101-r12', 'type': 'BOOLEAN'}, {'name': 'profile0x0102-r12', 'type': 'BOOLEAN'}, {'name': 'profile0x0104-r12', 'type': 'BOOLEAN'}], 'name': 'rohc-Profiles-r12', 'type': 'SEQUENCE'}, {'name': 'carrierFreq-r12', 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'maxTxPower-r12', 'type': 'P-Max'}, {'name': 'additionalSpectrumEmission-r12', 'type': 'AdditionalSpectrumEmission'}, {'name': 'sl-bandwidth-r12', 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'tdd-ConfigSL-r12', 'type': 'TDD-ConfigSL-r12'}, {'name': 'reserved-r12', 'size': [19], 'type': 'BIT ' 'STRING'}, None, [{'name': 'additionalSpectrumEmission-v1440', 'optional': True, 'type': 'AdditionalSpectrumEmission-v10l0'}]], 'type': 'SEQUENCE'}, 'SL-PreconfigRelay-r13': {'members': [{'name': 'reselectionInfoOoC-r13', 'type': 'ReselectionInfoRelay-r13'}], 'type': 'SEQUENCE'}, 'SL-PreconfigSync-r12': {'members': [{'name': 'syncCP-Len-r12', 'type': 'SL-CP-Len-r12'}, {'name': 'syncOffsetIndicator1-r12', 'type': 'SL-OffsetIndicatorSync-r12'}, {'name': 'syncOffsetIndicator2-r12', 'type': 'SL-OffsetIndicatorSync-r12'}, {'name': 'syncTxParameters-r12', 'type': 'P0-SL-r12'}, {'name': 'syncTxThreshOoC-r12', 'type': 'RSRP-RangeSL3-r12'}, {'name': 'filterCoefficient-r12', 'type': 'FilterCoefficient'}, {'name': 'syncRefMinHyst-r12', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB3', 1), ('dB6', 2), ('dB9', 3), ('dB12', 4)]}, {'name': 'syncRefDiffHyst-r12', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB3', 1), ('dB6', 2), ('dB9', 3), ('dB12', 4), ('dBinf', 5)]}, None, [{'name': 'syncTxPeriodic-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'type': 'SEQUENCE'}, 'SL-PreconfigV2X-RxPoolList-r14': {'element': {'type': 'SL-V2X-PreconfigCommPool-r14'}, 'size': [(1, 'maxSL-V2X-RxPoolPreconf-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-PreconfigV2X-Sync-r14': {'members': [{'name': 'syncOffsetIndicators-r14', 'type': 'SL-V2X-SyncOffsetIndicators-r14'}, {'name': 'syncTxParameters-r14', 'type': 'P0-SL-r12'}, {'name': 'syncTxThreshOoC-r14', 'type': 'RSRP-RangeSL3-r12'}, {'name': 'filterCoefficient-r14', 'type': 'FilterCoefficient'}, {'name': 'syncRefMinHyst-r14', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB3', 1), ('dB6', 2), ('dB9', 3), ('dB12', 4)]}, {'name': 'syncRefDiffHyst-r14', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB3', 1), ('dB6', 2), ('dB9', 3), ('dB12', 4), ('dBinf', 5)]}, None], 'type': 'SEQUENCE'}, 'SL-PreconfigV2X-TxPoolList-r14': {'element': {'type': 'SL-V2X-PreconfigCommPool-r14'}, 'size': [(1, 'maxSL-V2X-TxPoolPreconf-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-Preconfiguration-r12': {'members': [{'name': 'preconfigGeneral-r12', 'type': 'SL-PreconfigGeneral-r12'}, {'name': 'preconfigSync-r12', 'type': 'SL-PreconfigSync-r12'}, {'name': 'preconfigComm-r12', 'type': 'SL-PreconfigCommPoolList4-r12'}, None, [{'members': [{'name': 'commRxPoolList-r13', 'type': 'SL-PreconfigCommRxPoolList-r13'}, {'name': 'commTxPoolList-r13', 'optional': True, 'type': 'SL-PreconfigCommTxPoolList-r13'}], 'name': 'preconfigComm-v1310', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'discRxPoolList-r13', 'type': 'SL-PreconfigDiscRxPoolList-r13'}, {'name': 'discTxPoolList-r13', 'optional': True, 'type': 'SL-PreconfigDiscTxPoolList-r13'}], 'name': 'preconfigDisc-r13', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'preconfigRelay-r13', 'optional': True, 'type': 'SL-PreconfigRelay-r13'}]], 'type': 'SEQUENCE'}, 'SL-V2X-PreconfigCommPool-r14': {'members': [{'name': 'sl-OffsetIndicator-r14', 'optional': True, 'type': 'SL-OffsetIndicator-r12'}, {'name': 'sl-Subframe-r14', 'type': 'SubframeBitmapSL-r14'}, {'name': 'adjacencyPSCCH-PSSCH-r14', 'type': 'BOOLEAN'}, {'name': 'sizeSubchannel-r14', 'type': 'ENUMERATED', 'values': [('n4', 0), ('n5', 1), ('n6', 2), ('n8', 3), ('n9', 4), ('n10', 5), ('n12', 6), ('n15', 7), ('n16', 8), ('n18', 9), ('n20', 10), ('n25', 11), ('n30', 12), ('n48', 13), ('n50', 14), ('n72', 15), ('n75', 16), ('n96', 17), ('n100', 18), ('spare13', 19), ('spare12', 20), ('spare11', 21), ('spare10', 22), ('spare9', 23), ('spare8', 24), ('spare7', 25), ('spare6', 26), ('spare5', 27), ('spare4', 28), ('spare3', 29), ('spare2', 30), ('spare1', 31)]}, {'name': 'numSubchannel-r14', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n3', 1), ('n5', 2), ('n8', 3), ('n10', 4), ('n15', 5), ('n20', 6), ('spare1', 7)]}, {'name': 'startRB-Subchannel-r14', 'restricted-to': [(0, 99)], 'type': 'INTEGER'}, {'name': 'startRB-PSCCH-Pool-r14', 'optional': True, 'restricted-to': [(0, 99)], 'type': 'INTEGER'}, {'name': 'dataTxParameters-r14', 'type': 'P0-SL-r12'}, {'name': 'zoneID-r14', 'optional': True, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'threshS-RSSI-CBR-r14', 'optional': True, 'restricted-to': [(0, 45)], 'type': 'INTEGER'}, {'name': 'cbr-pssch-TxConfigList-r14', 'optional': True, 'type': 'SL-CBR-PPPP-TxPreconfigList-r14'}, {'name': 'resourceSelectionConfigP2X-r14', 'optional': True, 'type': 'SL-P2X-ResourceSelectionConfig-r14'}, {'name': 'syncAllowed-r14', 'optional': True, 'type': 'SL-SyncAllowed-r14'}, {'name': 'restrictResourceReservationPeriod-r14', 'optional': True, 'type': 'SL-RestrictResourceReservationPeriodList-r14'}, None], 'type': 'SEQUENCE'}, 'SL-V2X-PreconfigFreqInfo-r14': {'members': [{'name': 'v2x-CommPreconfigGeneral-r14', 'type': 'SL-PreconfigGeneral-r12'}, {'name': 'v2x-CommPreconfigSync-r14', 'optional': True, 'type': 'SL-PreconfigV2X-Sync-r14'}, {'name': 'v2x-CommRxPoolList-r14', 'type': 'SL-PreconfigV2X-RxPoolList-r14'}, {'name': 'v2x-CommTxPoolList-r14', 'type': 'SL-PreconfigV2X-TxPoolList-r14'}, {'name': 'p2x-CommTxPoolList-r14', 'type': 'SL-PreconfigV2X-TxPoolList-r14'}, {'name': 'v2x-ResourceSelectionConfig-r14', 'optional': True, 'type': 'SL-CommTxPoolSensingConfig-r14'}, {'name': 'zoneConfig-r14', 'optional': True, 'type': 'SL-ZoneConfig-r14'}, {'name': 'syncPriority-r14', 'type': 'ENUMERATED', 'values': [('gnss', 0), ('enb', 1)]}, {'name': 'thresSL-TxPrioritization-r14', 'optional': True, 'type': 'SL-Priority-r13'}, {'name': 'offsetDFN-r14', 'optional': True, 'restricted-to': [(0, 1000)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'SL-V2X-PreconfigFreqList-r14': {'element': {'type': 'SL-V2X-PreconfigFreqInfo-r14'}, 'size': [(1, 'maxFreqV2X-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SL-V2X-Preconfiguration-r14': {'members': [{'name': 'v2x-PreconfigFreqList-r14', 'type': 'SL-V2X-PreconfigFreqList-r14'}, {'name': 'anchorCarrierFreqList-r14', 'optional': True, 'type': 'SL-AnchorCarrierFreqList-V2X-r14'}, {'name': 'cbr-PreconfigList-r14', 'optional': True, 'type': 'SL-CBR-PreconfigTxConfigList-r14'}, None], 'type': 'SEQUENCE'}, 'SL-V2X-SyncOffsetIndicators-r14': {'members': [{'name': 'syncOffsetIndicator1-r14', 'type': 'SL-OffsetIndicatorSync-r14'}, {'name': 'syncOffsetIndicator2-r14', 'type': 'SL-OffsetIndicatorSync-r14'}, {'name': 'syncOffsetIndicator3-r14', 'optional': True, 'type': 'SL-OffsetIndicatorSync-r14'}], 'type': 'SEQUENCE'}, 'Tx-PreconfigIndex-r14': {'restricted-to': [(0, 'maxSL-V2X-TxConfig2-1-r14')], 'type': 'INTEGER'}}, 'values': {}}, 'EUTRA-UE-Variables': {'extensibility-implied': False, 'imports': {'EUTRA-RRC-Definitions': ['AbsoluteTimeInfo-r10', 'AreaConfiguration-r10', 'AreaConfiguration-v1130', 'C-RNTI', 'CarrierFreqGERAN', 'CellIdentity', 'ConnEstFailReport-r11', 'LogMeasInfo-r10', 'LoggingDuration-r10', 'LoggingInterval-r10', 'MeasCSI-RS-Id-r12', 'MeasId', 'MeasId-v1250', 'MeasIdToAddModList', 'MeasIdToAddModList-v1310', 'MeasIdToAddModListExt-r12', 'MeasIdToAddModListExt-v1310', 'MeasObjectToAddModList', 'MeasObjectToAddModList-v9e0', 'MeasObjectToAddModListExt-r13', 'MeasScaleFactor-r12', 'MobilityStateParameters', 'NeighCellConfig', 'PLMN-Identity', 'PLMN-IdentityList3-r11', 'PhysCellId', 'PhysCellIdCDMA2000', 'PhysCellIdGERAN', 'PhysCellIdUTRA-FDD', 'PhysCellIdUTRA-TDD', 'QuantityConfig', 'RLF-Report-r9', 'ReportConfigToAddModList', 'SpeedStateScaleFactors', 'TargetMBSFN-AreaList-r12', 'TraceReference-r10', 'Tx-ResourcePoolMeasList-r14', 'UL-DelayConfig-r13', 'VisitedCellInfoList-r12', 'WLAN-CarrierInfo-r13', 'WLAN-Id-List-r13', 'WLAN-Identifiers-r12', 'WLAN-Status-r13', 'WLAN-Status-v1430', 'WLAN-SuspendConfig-r14', 'maxCSI-RS-Meas-r12', 'maxCellMeas', 'maxMeasId', 'maxMeasId-r12']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'CSI-RS-TriggeredList-r12': {'element': {'type': 'MeasCSI-RS-Id-r12'}, 'size': [(1, 'maxCSI-RS-Meas-r12')], 'type': 'SEQUENCE ' 'OF'}, 'CellsTriggeredList': {'element': {'members': [{'name': 'physCellIdEUTRA', 'type': 'PhysCellId'}, {'members': [{'name': 'fdd', 'type': 'PhysCellIdUTRA-FDD'}, {'name': 'tdd', 'type': 'PhysCellIdUTRA-TDD'}], 'name': 'physCellIdUTRA', 'type': 'CHOICE'}, {'members': [{'name': 'carrierFreq', 'type': 'CarrierFreqGERAN'}, {'name': 'physCellId', 'type': 'PhysCellIdGERAN'}], 'name': 'physCellIdGERAN', 'type': 'SEQUENCE'}, {'name': 'physCellIdCDMA2000', 'type': 'PhysCellIdCDMA2000'}, {'name': 'wlan-Identifiers-r13', 'type': 'WLAN-Identifiers-r12'}], 'type': 'CHOICE'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE OF'}, 'LogMeasInfoList2-r10': {'element': {'type': 'LogMeasInfo-r10'}, 'size': [(1, 'maxLogMeas-r10')], 'type': 'SEQUENCE ' 'OF'}, 'VarConnEstFailReport-r11': {'members': [{'name': 'connEstFailReport-r11', 'type': 'ConnEstFailReport-r11'}, {'name': 'plmn-Identity-r11', 'type': 'PLMN-Identity'}], 'type': 'SEQUENCE'}, 'VarLogMeasConfig-r10': {'members': [{'name': 'areaConfiguration-r10', 'optional': True, 'type': 'AreaConfiguration-r10'}, {'name': 'loggingDuration-r10', 'type': 'LoggingDuration-r10'}, {'name': 'loggingInterval-r10', 'type': 'LoggingInterval-r10'}], 'type': 'SEQUENCE'}, 'VarLogMeasConfig-r11': {'members': [{'name': 'areaConfiguration-r10', 'optional': True, 'type': 'AreaConfiguration-r10'}, {'name': 'areaConfiguration-v1130', 'optional': True, 'type': 'AreaConfiguration-v1130'}, {'name': 'loggingDuration-r10', 'type': 'LoggingDuration-r10'}, {'name': 'loggingInterval-r10', 'type': 'LoggingInterval-r10'}], 'type': 'SEQUENCE'}, 'VarLogMeasConfig-r12': {'members': [{'name': 'areaConfiguration-r10', 'optional': True, 'type': 'AreaConfiguration-r10'}, {'name': 'areaConfiguration-v1130', 'optional': True, 'type': 'AreaConfiguration-v1130'}, {'name': 'loggingDuration-r10', 'type': 'LoggingDuration-r10'}, {'name': 'loggingInterval-r10', 'type': 'LoggingInterval-r10'}, {'name': 'targetMBSFN-AreaList-r12', 'optional': True, 'type': 'TargetMBSFN-AreaList-r12'}], 'type': 'SEQUENCE'}, 'VarLogMeasReport-r10': {'members': [{'name': 'traceReference-r10', 'type': 'TraceReference-r10'}, {'name': 'traceRecordingSessionRef-r10', 'size': [2], 'type': 'OCTET ' 'STRING'}, {'name': 'tce-Id-r10', 'size': [1], 'type': 'OCTET ' 'STRING'}, {'name': 'plmn-Identity-r10', 'type': 'PLMN-Identity'}, {'name': 'absoluteTimeInfo-r10', 'type': 'AbsoluteTimeInfo-r10'}, {'name': 'logMeasInfoList-r10', 'type': 'LogMeasInfoList2-r10'}], 'type': 'SEQUENCE'}, 'VarLogMeasReport-r11': {'members': [{'name': 'traceReference-r10', 'type': 'TraceReference-r10'}, {'name': 'traceRecordingSessionRef-r10', 'size': [2], 'type': 'OCTET ' 'STRING'}, {'name': 'tce-Id-r10', 'size': [1], 'type': 'OCTET ' 'STRING'}, {'name': 'plmn-IdentityList-r11', 'type': 'PLMN-IdentityList3-r11'}, {'name': 'absoluteTimeInfo-r10', 'type': 'AbsoluteTimeInfo-r10'}, {'name': 'logMeasInfoList-r10', 'type': 'LogMeasInfoList2-r10'}], 'type': 'SEQUENCE'}, 'VarMeasConfig': {'members': [{'name': 'measIdList', 'optional': True, 'type': 'MeasIdToAddModList'}, {'name': 'measIdListExt-r12', 'optional': True, 'type': 'MeasIdToAddModListExt-r12'}, {'name': 'measIdList-v1310', 'optional': True, 'type': 'MeasIdToAddModList-v1310'}, {'name': 'measIdListExt-v1310', 'optional': True, 'type': 'MeasIdToAddModListExt-v1310'}, {'name': 'measObjectList', 'optional': True, 'type': 'MeasObjectToAddModList'}, {'name': 'measObjectListExt-r13', 'optional': True, 'type': 'MeasObjectToAddModListExt-r13'}, {'name': 'measObjectList-v9i0', 'optional': True, 'type': 'MeasObjectToAddModList-v9e0'}, {'name': 'reportConfigList', 'optional': True, 'type': 'ReportConfigToAddModList'}, {'name': 'quantityConfig', 'optional': True, 'type': 'QuantityConfig'}, {'name': 'measScaleFactor-r12', 'optional': True, 'type': 'MeasScaleFactor-r12'}, {'name': 's-Measure', 'optional': True, 'restricted-to': [(-140, -44)], 'type': 'INTEGER'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'mobilityStateParameters', 'type': 'MobilityStateParameters'}, {'name': 'timeToTrigger-SF', 'type': 'SpeedStateScaleFactors'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'speedStatePars', 'optional': True, 'type': 'CHOICE'}, {'name': 'allowInterruptions-r11', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'VarMeasReport': {'members': [{'name': 'measId', 'type': 'MeasId'}, {'name': 'measId-v1250', 'optional': True, 'type': 'MeasId-v1250'}, {'name': 'cellsTriggeredList', 'optional': True, 'type': 'CellsTriggeredList'}, {'name': 'csi-RS-TriggeredList-r12', 'optional': True, 'type': 'CSI-RS-TriggeredList-r12'}, {'name': 'poolsTriggeredList-r14', 'optional': True, 'type': 'Tx-ResourcePoolMeasList-r14'}, {'name': 'numberOfReportsSent', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'VarMeasReportList': {'element': {'type': 'VarMeasReport'}, 'size': [(1, 'maxMeasId')], 'type': 'SEQUENCE OF'}, 'VarMeasReportList-r12': {'element': {'type': 'VarMeasReport'}, 'size': [(1, 'maxMeasId-r12')], 'type': 'SEQUENCE ' 'OF'}, 'VarMobilityHistoryReport-r12': {'type': 'VisitedCellInfoList-r12'}, 'VarRLF-Report-r10': {'members': [{'name': 'rlf-Report-r10', 'type': 'RLF-Report-r9'}, {'name': 'plmn-Identity-r10', 'type': 'PLMN-Identity'}], 'type': 'SEQUENCE'}, 'VarRLF-Report-r11': {'members': [{'name': 'rlf-Report-r10', 'type': 'RLF-Report-r9'}, {'name': 'plmn-IdentityList-r11', 'type': 'PLMN-IdentityList3-r11'}], 'type': 'SEQUENCE'}, 'VarShortMAC-Input': {'members': [{'name': 'cellIdentity', 'type': 'CellIdentity'}, {'name': 'physCellId', 'type': 'PhysCellId'}, {'name': 'c-RNTI', 'type': 'C-RNTI'}], 'type': 'SEQUENCE'}, 'VarShortResumeMAC-Input-r13': {'members': [{'name': 'cellIdentity-r13', 'type': 'CellIdentity'}, {'name': 'physCellId-r13', 'type': 'PhysCellId'}, {'name': 'c-RNTI-r13', 'type': 'C-RNTI'}, {'name': 'resumeDiscriminator-r13', 'size': [1], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'VarWLAN-MobilityConfig': {'members': [{'name': 'wlan-MobilitySet-r13', 'optional': True, 'type': 'WLAN-Id-List-r13'}, {'name': 'successReportRequested', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'wlan-SuspendConfig-r14', 'optional': True, 'type': 'WLAN-SuspendConfig-r14'}], 'type': 'SEQUENCE'}, 'VarWLAN-Status-r13': {'members': [{'name': 'status-r13', 'type': 'WLAN-Status-r13'}, {'name': 'status-r14', 'optional': True, 'type': 'WLAN-Status-v1430'}], 'type': 'SEQUENCE'}}, 'values': {'maxLogMeas-r10': {'type': 'INTEGER', 'value': 4060}}}, 'NBIOT-InterNodeDefinitions': {'extensibility-implied': False, 'imports': {'EUTRA-InterNodeDefinitions': ['AdditionalReestabInfoList'], 'EUTRA-RRC-Definitions': ['C-RNTI', 'PhysCellId', 'SecurityAlgorithmConfig', 'ShortMAC-I'], 'NBIOT-RRC-Definitions': ['CarrierFreq-NB-r13', 'RadioResourceConfigDedicated-NB-r13', 'UE-Capability-NB-r13', 'UE-RadioPagingInfo-NB-r13']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AS-Config-NB': {'members': [{'name': 'sourceRadioResourceConfig-r13', 'type': 'RadioResourceConfigDedicated-NB-r13'}, {'name': 'sourceSecurityAlgorithmConfig-r13', 'type': 'SecurityAlgorithmConfig'}, {'name': 'sourceUE-Identity-r13', 'type': 'C-RNTI'}, {'name': 'sourceDl-CarrierFreq-r13', 'type': 'CarrierFreq-NB-r13'}, None], 'type': 'SEQUENCE'}, 'AS-Context-NB': {'members': [{'name': 'reestablishmentInfo-r13', 'optional': True, 'type': 'ReestablishmentInfo-NB'}, None], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-NB': {'members': [{'members': [{'members': [{'name': 'handoverPreparationInformation-r13', 'type': 'HandoverPreparationInformation-NB-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-NB-IEs': {'members': [{'name': 'ue-RadioAccessCapabilityInfo-r13', 'type': 'UE-Capability-NB-r13'}, {'name': 'as-Config-r13', 'type': 'AS-Config-NB'}, {'name': 'rrm-Config-r13', 'optional': True, 'type': 'RRM-Config-NB'}, {'name': 'as-Context-r13', 'optional': True, 'type': 'AS-Context-NB'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRM-Config-NB': {'members': [{'name': 'ue-InactiveTime', 'optional': True, 'type': 'ENUMERATED', 'values': [('s1', 0), ('s2', 1), ('s3', 2), ('s5', 3), ('s7', 4), ('s10', 5), ('s15', 6), ('s20', 7), ('s25', 8), ('s30', 9), ('s40', 10), ('s50', 11), ('min1', 12), ('min1s20', 13), ('min1s40', 14), ('min2', 15), ('min2s30', 16), ('min3', 17), ('min3s30', 18), ('min4', 19), ('min5', 20), ('min6', 21), ('min7', 22), ('min8', 23), ('min9', 24), ('min10', 25), ('min12', 26), ('min14', 27), ('min17', 28), ('min20', 29), ('min24', 30), ('min28', 31), ('min33', 32), ('min38', 33), ('min44', 34), ('min50', 35), ('hr1', 36), ('hr1min30', 37), ('hr2', 38), ('hr2min30', 39), ('hr3', 40), ('hr3min30', 41), ('hr4', 42), ('hr5', 43), ('hr6', 44), ('hr8', 45), ('hr10', 46), ('hr13', 47), ('hr16', 48), ('hr20', 49), ('day1', 50), ('day1hr12', 51), ('day2', 52), ('day2hr12', 53), ('day3', 54), ('day4', 55), ('day5', 56), ('day7', 57), ('day10', 58), ('day14', 59), ('day19', 60), ('day24', 61), ('day30', 62), ('dayMoreThan30', 63)]}, None], 'type': 'SEQUENCE'}, 'ReestablishmentInfo-NB': {'members': [{'name': 'sourcePhysCellId-r13', 'type': 'PhysCellId'}, {'name': 'targetCellShortMAC-I-r13', 'type': 'ShortMAC-I'}, {'name': 'additionalReestabInfoList-r13', 'optional': True, 'type': 'AdditionalReestabInfoList'}, None], 'type': 'SEQUENCE'}, 'UEPagingCoverageInformation-NB': {'members': [{'members': [{'members': [{'name': 'uePagingCoverageInformation-r13', 'type': 'UEPagingCoverageInformation-NB-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UEPagingCoverageInformation-NB-IEs': {'members': [{'name': 'npdcch-NumRepetitionPaging-r13', 'optional': True, 'restricted-to': [(1, 2048)], 'type': 'INTEGER'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UERadioAccessCapabilityInformation-NB': {'members': [{'members': [{'members': [{'name': 'ueRadioAccessCapabilityInformation-r13', 'type': 'UERadioAccessCapabilityInformation-NB-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UERadioAccessCapabilityInformation-NB-IEs': {'members': [{'name': 'ue-RadioAccessCapabilityInfo-r13', 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UERadioPagingInformation-NB': {'members': [{'members': [{'members': [{'name': 'ueRadioPagingInformation-r13', 'type': 'UERadioPagingInformation-NB-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UERadioPagingInformation-NB-IEs': {'members': [{'name': 'ue-RadioPagingInfo-r13', 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}}, 'values': {}}, 'NBIOT-RRC-Definitions': {'extensibility-implied': False, 'imports': {'EUTRA-RRC-Definitions': ['ARFCN-ValueEUTRA-r9', 'AdditionalSpectrumEmission', 'CellIdentity', 'DRB-Identity', 'DataInactivityTimer-r14', 'DedicatedInfoNAS', 'InitialUE-Identity', 'IntraFreqBlackCellList', 'IntraFreqNeighCellList', 'MBMS-SAI-List-r11', 'MBMS-SAI-r11', 'MBMSSessionInfo-r13', 'NextHopChainingCount', 'P-Max', 'PLMN-Identity', 'PagingUE-Identity', 'PhysCellId', 'PowerRampingParameters', 'PreambleTransMax', 'Q-OffsetRange', 'Q-QualMin-r9', 'Q-RxLevMin', 'RRC-TransactionIdentifier', 'RRCConnectionReestablishmentReject', 'RSRP-Range', 'ReestabUE-Identity', 'RegisteredMME', 'ReselectionThreshold', 'ResumeIdentity-r13', 'S-TMSI', 'SecurityModeCommand', 'SecurityModeComplete', 'SecurityModeFailure', 'ShortMAC-I', 'SystemInfoValueTagSI-r13', 'SystemInformationBlockType16-r11', 'T-Reordering', 'TMGI-r9', 'TimeAlignmentTimer', 'TrackingAreaCode', 'maxBands', 'maxCellBlack', 'maxCellInter', 'maxFBI2', 'maxFreq', 'maxMultiBands', 'maxPLMN-r11', 'maxPageRec', 'maxSAI-MBMS-r11', 'maxSIB', 'maxSIB-1']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AB-Config-NB-r13': {'members': [{'name': 'ab-Category-r13', 'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), ('c', 2)]}, {'name': 'ab-BarringBitmap-r13', 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'ab-BarringForExceptionData-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'ab-BarringForSpecialAC-r13', 'size': [5], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'AB-ConfigPLMN-NB-r13': {'members': [{'name': 'ab-Config-r13', 'optional': True, 'type': 'AB-Config-NB-r13'}], 'type': 'SEQUENCE'}, 'ACK-NACK-NumRepetitions-NB-r13': {'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7)]}, 'AccessStratumRelease-NB-r13': {'type': 'ENUMERATED', 'values': [('rel13', 0), ('rel14', 1), ('spare6', 2), ('spare5', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7), None]}, 'AdditionalBandInfoList-NB-r14': {'element': {'type': 'FreqBandIndicator-NB-r13'}, 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}, 'BCCH-BCH-Message-NB': {'members': [{'name': 'message', 'type': 'BCCH-BCH-MessageType-NB'}], 'type': 'SEQUENCE'}, 'BCCH-BCH-MessageType-NB': {'type': 'MasterInformationBlock-NB'}, 'BCCH-Config-NB-r13': {'members': [{'name': 'modificationPeriodCoeff-r13', 'type': 'ENUMERATED', 'values': [('n16', 0), ('n32', 1), ('n64', 2), ('n128', 3)]}], 'type': 'SEQUENCE'}, 'BCCH-DL-SCH-Message-NB': {'members': [{'name': 'message', 'type': 'BCCH-DL-SCH-MessageType-NB'}], 'type': 'SEQUENCE'}, 'BCCH-DL-SCH-MessageType-NB': {'members': [{'members': [{'name': 'systemInformation-r13', 'type': 'SystemInformation-NB'}, {'name': 'systemInformationBlockType1-r13', 'type': 'SystemInformationBlockType1-NB'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'CarrierConfigDedicated-NB-r13': {'members': [{'name': 'dl-CarrierConfig-r13', 'type': 'DL-CarrierConfigDedicated-NB-r13'}, {'name': 'ul-CarrierConfig-r13', 'type': 'UL-CarrierConfigDedicated-NB-r13'}], 'type': 'SEQUENCE'}, 'CarrierFreq-NB-r13': {'members': [{'name': 'carrierFreq-r13', 'type': 'ARFCN-ValueEUTRA-r9'}, {'name': 'carrierFreqOffset-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('v-10', 0), ('v-9', 1), ('v-8', 2), ('v-7', 3), ('v-6', 4), ('v-5', 5), ('v-4', 6), ('v-3', 7), ('v-2', 8), ('v-1', 9), ('v-0dot5', 10), ('v0', 11), ('v1', 12), ('v2', 13), ('v3', 14), ('v4', 15), ('v5', 16), ('v6', 17), ('v7', 18), ('v8', 19), ('v9', 20)]}], 'type': 'SEQUENCE'}, 'CellSelectionInfo-NB-v1350': {'members': [{'name': 'delta-RxLevMin-v1350', 'restricted-to': [(-8, -1)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'CellSelectionInfo-NB-v1430': {'members': [{'name': 'powerClass14dBm-Offset-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-3', 1), ('dB3', 2), ('dB6', 3), ('dB9', 4), ('dB12', 5)]}, {'name': 'ce-authorisationOffset-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB5', 0), ('dB10', 1), ('dB15', 2), ('dB20', 3), ('dB25', 4), ('dB30', 5), ('dB35', 6)]}], 'type': 'SEQUENCE'}, 'ChannelRasterOffset-NB-r13': {'type': 'ENUMERATED', 'values': [('khz-7dot5', 0), ('khz-2dot5', 1), ('khz2dot5', 2), ('khz7dot5', 3)]}, 'DL-AM-RLC-NB-r13': {'members': [{'name': 'enableStatusReportSN-Gap-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'DL-Bitmap-NB-r13': {'members': [{'name': 'subframePattern10-r13', 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'subframePattern40-r13', 'size': [40], 'type': 'BIT ' 'STRING'}], 'type': 'CHOICE'}, 'DL-CCCH-Message-NB': {'members': [{'name': 'message', 'type': 'DL-CCCH-MessageType-NB'}], 'type': 'SEQUENCE'}, 'DL-CCCH-MessageType-NB': {'members': [{'members': [{'name': 'rrcConnectionReestablishment-r13', 'type': 'RRCConnectionReestablishment-NB'}, {'name': 'rrcConnectionReestablishmentReject-r13', 'type': 'RRCConnectionReestablishmentReject'}, {'name': 'rrcConnectionReject-r13', 'type': 'RRCConnectionReject-NB'}, {'name': 'rrcConnectionSetup-r13', 'type': 'RRCConnectionSetup-NB'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'DL-CarrierConfigCommon-NB-r14': {'members': [{'name': 'dl-CarrierFreq-r14', 'type': 'CarrierFreq-NB-r13'}, {'members': [{'name': 'useNoBitmap-r14', 'type': 'NULL'}, {'name': 'useAnchorBitmap-r14', 'type': 'NULL'}, {'name': 'explicitBitmapConfiguration-r14', 'type': 'DL-Bitmap-NB-r13'}], 'name': 'downlinkBitmapNonAnchor-r14', 'type': 'CHOICE'}, {'members': [{'name': 'useNoGap-r14', 'type': 'NULL'}, {'name': 'useAnchorGapConfig-r14', 'type': 'NULL'}, {'name': 'explicitGapConfiguration-r14', 'type': 'DL-GapConfig-NB-r13'}], 'name': 'dl-GapNonAnchor-r14', 'type': 'CHOICE'}, {'members': [{'members': [{'members': [{'name': 'indexToMidPRB-r14', 'restricted-to': [(-55, 54)], 'type': 'INTEGER'}], 'name': 'samePCI-r14', 'type': 'SEQUENCE'}, {'members': [{'name': 'eutra-NumCRS-Ports-r14', 'type': 'ENUMERATED', 'values': [('same', 0), ('four', 1)]}], 'name': 'differentPCI-r14', 'type': 'SEQUENCE'}], 'name': 'samePCI-Indicator-r14', 'optional': True, 'type': 'CHOICE'}, {'name': 'eutraControlRegionSize-r14', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2)]}], 'name': 'inbandCarrierInfo-r14', 'optional': True, 'type': 'SEQUENCE'}, {'default': 'dB0', 'name': 'nrs-PowerOffsetNonAnchor-r14', 'type': 'ENUMERATED', 'values': [('dB-12', 0), ('dB-10', 1), ('dB-8', 2), ('dB-6', 3), ('dB-4', 4), ('dB-2', 5), ('dB0', 6), ('dB3', 7)]}, None], 'type': 'SEQUENCE'}, 'DL-CarrierConfigDedicated-NB-r13': {'members': [{'name': 'dl-CarrierFreq-r13', 'type': 'CarrierFreq-NB-r13'}, {'members': [{'name': 'useNoBitmap-r13', 'type': 'NULL'}, {'name': 'useAnchorBitmap-r13', 'type': 'NULL'}, {'name': 'explicitBitmapConfiguration-r13', 'type': 'DL-Bitmap-NB-r13'}, {'name': 'spare', 'type': 'NULL'}], 'name': 'downlinkBitmapNonAnchor-r13', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'useNoGap-r13', 'type': 'NULL'}, {'name': 'useAnchorGapConfig-r13', 'type': 'NULL'}, {'name': 'explicitGapConfiguration-r13', 'type': 'DL-GapConfig-NB-r13'}, {'name': 'spare', 'type': 'NULL'}], 'name': 'dl-GapNonAnchor-r13', 'optional': True, 'type': 'CHOICE'}, {'members': [{'members': [{'members': [{'name': 'indexToMidPRB-r13', 'restricted-to': [(-55, 54)], 'type': 'INTEGER'}], 'name': 'samePCI-r13', 'type': 'SEQUENCE'}, {'members': [{'name': 'eutra-NumCRS-Ports-r13', 'type': 'ENUMERATED', 'values': [('same', 0), ('four', 1)]}], 'name': 'differentPCI-r13', 'type': 'SEQUENCE'}], 'name': 'samePCI-Indicator-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'eutraControlRegionSize-r13', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2)]}], 'name': 'inbandCarrierInfo-r13', 'optional': True, 'type': 'SEQUENCE'}, None, [{'name': 'nrs-PowerOffsetNonAnchor-v1330', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB-12', 0), ('dB-10', 1), ('dB-8', 2), ('dB-6', 3), ('dB-4', 4), ('dB-2', 5), ('dB0', 6), ('dB3', 7)]}]], 'type': 'SEQUENCE'}, 'DL-ConfigCommon-NB-r14': {'members': [{'name': 'dl-CarrierConfig-r14', 'type': 'DL-CarrierConfigCommon-NB-r14'}, {'name': 'pcch-Config-r14', 'optional': True, 'type': 'PCCH-Config-NB-r14'}, None], 'type': 'SEQUENCE'}, 'DL-ConfigCommonList-NB-r14': {'element': {'type': 'DL-ConfigCommon-NB-r14'}, 'size': [(1, 'maxNonAnchorCarriers-NB-r14')], 'type': 'SEQUENCE ' 'OF'}, 'DL-DCCH-Message-NB': {'members': [{'name': 'message', 'type': 'DL-DCCH-MessageType-NB'}], 'type': 'SEQUENCE'}, 'DL-DCCH-MessageType-NB': {'members': [{'members': [{'name': 'dlInformationTransfer-r13', 'type': 'DLInformationTransfer-NB'}, {'name': 'rrcConnectionReconfiguration-r13', 'type': 'RRCConnectionReconfiguration-NB'}, {'name': 'rrcConnectionRelease-r13', 'type': 'RRCConnectionRelease-NB'}, {'name': 'securityModeCommand-r13', 'type': 'SecurityModeCommand'}, {'name': 'ueCapabilityEnquiry-r13', 'type': 'UECapabilityEnquiry-NB'}, {'name': 'rrcConnectionResume-r13', 'type': 'RRCConnectionResume-NB'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'DL-GapConfig-NB-r13': {'members': [{'name': 'dl-GapThreshold-r13', 'type': 'ENUMERATED', 'values': [('n32', 0), ('n64', 1), ('n128', 2), ('n256', 3)]}, {'name': 'dl-GapPeriodicity-r13', 'type': 'ENUMERATED', 'values': [('sf64', 0), ('sf128', 1), ('sf256', 2), ('sf512', 3)]}, {'name': 'dl-GapDurationCoeff-r13', 'type': 'ENUMERATED', 'values': [('oneEighth', 0), ('oneFourth', 1), ('threeEighth', 2), ('oneHalf', 3)]}], 'type': 'SEQUENCE'}, 'DLInformationTransfer-NB': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'dlInformationTransfer-r13', 'type': 'DLInformationTransfer-NB-r13-IEs'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'DLInformationTransfer-NB-r13-IEs': {'members': [{'name': 'dedicatedInfoNAS-r13', 'type': 'DedicatedInfoNAS'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'DRB-ToAddMod-NB-r13': {'members': [{'name': 'eps-BearerIdentity-r13', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'drb-Identity-r13', 'type': 'DRB-Identity'}, {'name': 'pdcp-Config-r13', 'optional': True, 'type': 'PDCP-Config-NB-r13'}, {'name': 'rlc-Config-r13', 'optional': True, 'type': 'RLC-Config-NB-r13'}, {'name': 'logicalChannelIdentity-r13', 'optional': True, 'restricted-to': [(3, 10)], 'type': 'INTEGER'}, {'name': 'logicalChannelConfig-r13', 'optional': True, 'type': 'LogicalChannelConfig-NB-r13'}, None, [{'name': 'rlc-Config-v1430', 'optional': True, 'type': 'RLC-Config-NB-v1430'}]], 'type': 'SEQUENCE'}, 'DRB-ToAddModList-NB-r13': {'element': {'type': 'DRB-ToAddMod-NB-r13'}, 'size': [(1, 'maxDRB-NB-r13')], 'type': 'SEQUENCE ' 'OF'}, 'DRB-ToReleaseList-NB-r13': {'element': {'type': 'DRB-Identity'}, 'size': [(1, 'maxDRB-NB-r13')], 'type': 'SEQUENCE ' 'OF'}, 'DRX-Config-NB-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'onDurationTimer-r13', 'type': 'ENUMERATED', 'values': [('pp1', 0), ('pp2', 1), ('pp3', 2), ('pp4', 3), ('pp8', 4), ('pp16', 5), ('pp32', 6), ('spare', 7)]}, {'name': 'drx-InactivityTimer-r13', 'type': 'ENUMERATED', 'values': [('pp0', 0), ('pp1', 1), ('pp2', 2), ('pp3', 3), ('pp4', 4), ('pp8', 5), ('pp16', 6), ('pp32', 7)]}, {'name': 'drx-RetransmissionTimer-r13', 'type': 'ENUMERATED', 'values': [('pp0', 0), ('pp1', 1), ('pp2', 2), ('pp4', 3), ('pp6', 4), ('pp8', 5), ('pp16', 6), ('pp24', 7), ('pp33', 8), ('spare7', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'drx-Cycle-r13', 'type': 'ENUMERATED', 'values': [('sf256', 0), ('sf512', 1), ('sf1024', 2), ('sf1536', 3), ('sf2048', 4), ('sf3072', 5), ('sf4096', 6), ('sf4608', 7), ('sf6144', 8), ('sf7680', 9), ('sf8192', 10), ('sf9216', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'drx-StartOffset-r13', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'drx-ULRetransmissionTimer-r13', 'type': 'ENUMERATED', 'values': [('pp0', 0), ('pp1', 1), ('pp2', 2), ('pp4', 3), ('pp6', 4), ('pp8', 5), ('pp16', 6), ('pp24', 7), ('pp33', 8), ('pp40', 9), ('pp64', 10), ('pp80', 11), ('pp96', 12), ('pp112', 13), ('pp128', 14), ('pp160', 15), ('pp320', 16)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'EstablishmentCause-NB-r13': {'type': 'ENUMERATED', 'values': [('mt-Access', 0), ('mo-Signalling', 1), ('mo-Data', 2), ('mo-ExceptionData', 3), ('delayTolerantAccess-v1330', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}, 'FreqBandIndicator-NB-r13': {'restricted-to': [(1, 'maxFBI2')], 'type': 'INTEGER'}, 'Guardband-NB-r13': {'members': [{'name': 'rasterOffset-r13', 'type': 'ChannelRasterOffset-NB-r13'}, {'name': 'spare', 'size': [3], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'Inband-DifferentPCI-NB-r13': {'members': [{'name': 'eutra-NumCRS-Ports-r13', 'type': 'ENUMERATED', 'values': [('same', 0), ('four', 1)]}, {'name': 'rasterOffset-r13', 'type': 'ChannelRasterOffset-NB-r13'}, {'name': 'spare', 'size': [2], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'Inband-SamePCI-NB-r13': {'members': [{'name': 'eutra-CRS-SequenceInfo-r13', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'InterFreqBlackCellList-NB-r13': {'element': {'type': 'PhysCellId'}, 'size': [(1, 'maxCellBlack')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqCarrierFreqInfo-NB-r13': {'members': [{'name': 'dl-CarrierFreq-r13', 'type': 'CarrierFreq-NB-r13'}, {'name': 'q-RxLevMin-r13', 'type': 'Q-RxLevMin'}, {'name': 'q-QualMin-r13', 'optional': True, 'type': 'Q-QualMin-r9'}, {'name': 'p-Max-r13', 'optional': True, 'type': 'P-Max'}, {'default': 'dB0', 'name': 'q-OffsetFreq-r13', 'type': 'Q-OffsetRange'}, {'name': 'interFreqNeighCellList-r13', 'optional': True, 'type': 'InterFreqNeighCellList-NB-r13'}, {'name': 'interFreqBlackCellList-r13', 'optional': True, 'type': 'InterFreqBlackCellList-NB-r13'}, {'name': 'multiBandInfoList-r13', 'optional': True, 'type': 'MultiBandInfoList-NB-r13'}, None, [{'name': 'delta-RxLevMin-v1350', 'optional': True, 'restricted-to': [(-8, -1)], 'type': 'INTEGER'}], [{'name': 'powerClass14dBm-Offset-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-3', 1), ('dB3', 2), ('dB6', 3), ('dB9', 4), ('dB12', 5)]}, {'name': 'ce-AuthorisationOffset-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB5', 0), ('dB10', 1), ('dB15', 2), ('dB20', 3), ('dB25', 4), ('dB30', 5), ('dB35', 6)]}]], 'type': 'SEQUENCE'}, 'InterFreqCarrierFreqList-NB-r13': {'element': {'type': 'InterFreqCarrierFreqInfo-NB-r13'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqNeighCellList-NB-r13': {'element': {'type': 'PhysCellId'}, 'size': [(1, 'maxCellInter')], 'type': 'SEQUENCE ' 'OF'}, 'IntraFreqCellReselectionInfo-NB-v1350': {'members': [{'name': 'delta-RxLevMin-v1350', 'restricted-to': [(-8, -1)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'IntraFreqCellReselectionInfo-NB-v1360': {'members': [{'name': 's-IntraSearchP-v1360', 'type': 'ReselectionThreshold-NB-v1360'}], 'type': 'SEQUENCE'}, 'IntraFreqCellReselectionInfo-NB-v1430': {'members': [{'name': 'powerClass14dBm-Offset-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-3', 1), ('dB3', 2), ('dB6', 3), ('dB9', 4), ('dB12', 5)]}, {'name': 'ce-AuthorisationOffset-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB5', 0), ('dB10', 1), ('dB15', 2), ('dB20', 3), ('dB25', 4), ('dB30', 5), ('dB35', 6)]}], 'type': 'SEQUENCE'}, 'LogicalChannelConfig-NB-r13': {'members': [{'name': 'priority-r13', 'optional': True, 'restricted-to': [(1, 16)], 'type': 'INTEGER'}, {'name': 'logicalChannelSR-Prohibit-r13', 'optional': True, 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'MAC-MainConfig-NB-r13': {'members': [{'members': [{'name': 'periodicBSR-Timer-r13', 'optional': True, 'type': 'PeriodicBSR-Timer-NB-r13'}, {'name': 'retxBSR-Timer-r13', 'type': 'RetxBSR-Timer-NB-r13'}], 'name': 'ul-SCH-Config-r13', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'drx-Config-r13', 'optional': True, 'type': 'DRX-Config-NB-r13'}, {'name': 'timeAlignmentTimerDedicated-r13', 'type': 'TimeAlignmentTimer'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'logicalChannelSR-ProhibitTimer-r13', 'type': 'ENUMERATED', 'values': [('pp2', 0), ('pp8', 1), ('pp32', 2), ('pp128', 3), ('pp512', 4), ('pp1024', 5), ('pp2048', 6), ('spare', 7)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'logicalChannelSR-Config-r13', 'optional': True, 'type': 'CHOICE'}, None, [{'name': 'rai-Activation-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'dataInactivityTimer-r14', 'type': 'DataInactivityTimer-r14'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'dataInactivityTimerConfig-r14', 'optional': True, 'type': 'CHOICE'}], [{'name': 'drx-Cycle-v1430', 'optional': True, 'type': 'ENUMERATED', 'values': [('sf1280', 0), ('sf2560', 1), ('sf5120', 2), ('sf10240', 3)]}], [{'name': 'ra-CFRA-Config-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'type': 'SEQUENCE'}, 'MAC-Parameters-NB-r14': {'members': [{'name': 'dataInactMon-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'rai-Support-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'MBMS-SAI-InterFreq-NB-r14': {'members': [{'name': 'dl-CarrierFreq-r14', 'type': 'CarrierFreq-NB-r13'}, {'name': 'mbms-SAI-List-r14', 'type': 'MBMS-SAI-List-r11'}, {'name': 'multiBandInfoList-r14', 'optional': True, 'type': 'AdditionalBandInfoList-NB-r14'}], 'type': 'SEQUENCE'}, 'MBMS-SAI-InterFreqList-NB-r14': {'element': {'type': 'MBMS-SAI-InterFreq-NB-r14'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'MasterInformationBlock-NB': {'members': [{'name': 'systemFrameNumber-MSB-r13', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'hyperSFN-LSB-r13', 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'schedulingInfoSIB1-r13', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'systemInfoValueTag-r13', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'ab-Enabled-r13', 'type': 'BOOLEAN'}, {'members': [{'name': 'inband-SamePCI-r13', 'type': 'Inband-SamePCI-NB-r13'}, {'name': 'inband-DifferentPCI-r13', 'type': 'Inband-DifferentPCI-NB-r13'}, {'name': 'guardband-r13', 'type': 'Guardband-NB-r13'}, {'name': 'standalone-r13', 'type': 'Standalone-NB-r13'}], 'name': 'operationModeInfo-r13', 'type': 'CHOICE'}, {'name': 'spare', 'size': [11], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'MultiBandInfo-NB-r13': {'members': [{'name': 'freqBandIndicator-r13', 'optional': True, 'type': 'FreqBandIndicator-NB-r13'}, {'name': 'freqBandInfo-r13', 'optional': True, 'type': 'NS-PmaxList-NB-r13'}], 'type': 'SEQUENCE'}, 'MultiBandInfoList-NB-r13': {'element': {'type': 'MultiBandInfo-NB-r13'}, 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}, 'NPDCCH-ConfigDedicated-NB-r13': {'members': [{'name': 'npdcch-NumRepetitions-r13', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7), ('r256', 8), ('r512', 9), ('r1024', 10), ('r2048', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'npdcch-StartSF-USS-r13', 'type': 'ENUMERATED', 'values': [('v1dot5', 0), ('v2', 1), ('v4', 2), ('v8', 3), ('v16', 4), ('v32', 5), ('v48', 6), ('v64', 7)]}, {'name': 'npdcch-Offset-USS-r13', 'type': 'ENUMERATED', 'values': [('zero', 0), ('oneEighth', 1), ('oneFourth', 2), ('threeEighth', 3)]}], 'type': 'SEQUENCE'}, 'NPDCCH-SC-MCCH-Config-NB-r14': {'members': [{'name': 'npdcch-NumRepetitions-SC-MCCH-r14', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7), ('r256', 8), ('r512', 9), ('r1024', 10), ('r2048', 11)]}, {'name': 'npdcch-StartSF-SC-MCCH-r14', 'type': 'ENUMERATED', 'values': [('v1dot5', 0), ('v2', 1), ('v4', 2), ('v8', 3), ('v16', 4), ('v32', 5), ('v48', 6), ('v64', 7)]}, {'name': 'npdcch-Offset-SC-MCCH-r14', 'type': 'ENUMERATED', 'values': [('zero', 0), ('oneEighth', 1), ('oneQuarter', 2), ('threeEighth', 3), ('oneHalf', 4), ('fiveEighth', 5), ('threeQuarter', 6), ('sevenEighth', 7)]}], 'type': 'SEQUENCE'}, 'NPDSCH-ConfigCommon-NB-r13': {'members': [{'name': 'nrs-Power-r13', 'restricted-to': [(-60, 50)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'NPRACH-ConfigSIB-NB-r13': {'members': [{'name': 'nprach-CP-Length-r13', 'type': 'ENUMERATED', 'values': [('us66dot7', 0), ('us266dot7', 1)]}, {'name': 'rsrp-ThresholdsPrachInfoList-r13', 'optional': True, 'type': 'RSRP-ThresholdsNPRACH-InfoList-NB-r13'}, {'name': 'nprach-ParametersList-r13', 'type': 'NPRACH-ParametersList-NB-r13'}], 'type': 'SEQUENCE'}, 'NPRACH-ConfigSIB-NB-v1330': {'members': [{'name': 'nprach-ParametersList-v1330', 'type': 'NPRACH-ParametersList-NB-v1330'}], 'type': 'SEQUENCE'}, 'NPRACH-Parameters-NB-r13': {'members': [{'name': 'nprach-Periodicity-r13', 'type': 'ENUMERATED', 'values': [('ms40', 0), ('ms80', 1), ('ms160', 2), ('ms240', 3), ('ms320', 4), ('ms640', 5), ('ms1280', 6), ('ms2560', 7)]}, {'name': 'nprach-StartTime-r13', 'type': 'ENUMERATED', 'values': [('ms8', 0), ('ms16', 1), ('ms32', 2), ('ms64', 3), ('ms128', 4), ('ms256', 5), ('ms512', 6), ('ms1024', 7)]}, {'name': 'nprach-SubcarrierOffset-r13', 'type': 'ENUMERATED', 'values': [('n0', 0), ('n12', 1), ('n24', 2), ('n36', 3), ('n2', 4), ('n18', 5), ('n34', 6), ('spare1', 7)]}, {'name': 'nprach-NumSubcarriers-r13', 'type': 'ENUMERATED', 'values': [('n12', 0), ('n24', 1), ('n36', 2), ('n48', 3)]}, {'name': 'nprach-SubcarrierMSG3-RangeStart-r13', 'type': 'ENUMERATED', 'values': [('zero', 0), ('oneThird', 1), ('twoThird', 2), ('one', 3)]}, {'name': 'maxNumPreambleAttemptCE-r13', 'type': 'ENUMERATED', 'values': [('n3', 0), ('n4', 1), ('n5', 2), ('n6', 3), ('n7', 4), ('n8', 5), ('n10', 6), ('spare1', 7)]}, {'name': 'numRepetitionsPerPreambleAttempt-r13', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n4', 2), ('n8', 3), ('n16', 4), ('n32', 5), ('n64', 6), ('n128', 7)]}, {'name': 'npdcch-NumRepetitions-RA-r13', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7), ('r256', 8), ('r512', 9), ('r1024', 10), ('r2048', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'npdcch-StartSF-CSS-RA-r13', 'type': 'ENUMERATED', 'values': [('v1dot5', 0), ('v2', 1), ('v4', 2), ('v8', 3), ('v16', 4), ('v32', 5), ('v48', 6), ('v64', 7)]}, {'name': 'npdcch-Offset-RA-r13', 'type': 'ENUMERATED', 'values': [('zero', 0), ('oneEighth', 1), ('oneFourth', 2), ('threeEighth', 3)]}], 'type': 'SEQUENCE'}, 'NPRACH-Parameters-NB-r14': {'members': [{'members': [{'name': 'nprach-Periodicity-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms40', 0), ('ms80', 1), ('ms160', 2), ('ms240', 3), ('ms320', 4), ('ms640', 5), ('ms1280', 6), ('ms2560', 7)]}, {'name': 'nprach-StartTime-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms8', 0), ('ms16', 1), ('ms32', 2), ('ms64', 3), ('ms128', 4), ('ms256', 5), ('ms512', 6), ('ms1024', 7)]}, {'name': 'nprach-SubcarrierOffset-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n0', 0), ('n12', 1), ('n24', 2), ('n36', 3), ('n2', 4), ('n18', 5), ('n34', 6), ('spare1', 7)]}, {'name': 'nprach-NumSubcarriers-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n12', 0), ('n24', 1), ('n36', 2), ('n48', 3)]}, {'name': 'nprach-SubcarrierMSG3-RangeStart-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('zero', 0), ('oneThird', 1), ('twoThird', 2), ('one', 3)]}, {'name': 'npdcch-NumRepetitions-RA-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7), ('r256', 8), ('r512', 9), ('r1024', 10), ('r2048', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'npdcch-StartSF-CSS-RA-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('v1dot5', 0), ('v2', 1), ('v4', 2), ('v8', 3), ('v16', 4), ('v32', 5), ('v48', 6), ('v64', 7)]}, {'name': 'npdcch-Offset-RA-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('zero', 0), ('oneEighth', 1), ('oneFourth', 2), ('threeEighth', 3)]}, {'name': 'nprach-NumCBRA-StartSubcarriers-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('n8', 0), ('n10', 1), ('n11', 2), ('n12', 3), ('n20', 4), ('n22', 5), ('n23', 6), ('n24', 7), ('n32', 8), ('n34', 9), ('n35', 10), ('n36', 11), ('n40', 12), ('n44', 13), ('n46', 14), ('n48', 15)]}, {'name': 'npdcch-CarrierIndex-r14', 'optional': True, 'restricted-to': [(1, 'maxNonAnchorCarriers-NB-r14')], 'type': 'INTEGER'}, None], 'name': 'nprach-Parameters-r14', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'NPRACH-Parameters-NB-v1330': {'members': [{'name': 'nprach-NumCBRA-StartSubcarriers-r13', 'type': 'ENUMERATED', 'values': [('n8', 0), ('n10', 1), ('n11', 2), ('n12', 3), ('n20', 4), ('n22', 5), ('n23', 6), ('n24', 7), ('n32', 8), ('n34', 9), ('n35', 10), ('n36', 11), ('n40', 12), ('n44', 13), ('n46', 14), ('n48', 15)]}], 'type': 'SEQUENCE'}, 'NPRACH-ParametersList-NB-r13': {'element': {'type': 'NPRACH-Parameters-NB-r13'}, 'size': [(1, 'maxNPRACH-Resources-NB-r13')], 'type': 'SEQUENCE ' 'OF'}, 'NPRACH-ParametersList-NB-r14': {'element': {'type': 'NPRACH-Parameters-NB-r14'}, 'size': [(1, 'maxNPRACH-Resources-NB-r13')], 'type': 'SEQUENCE ' 'OF'}, 'NPRACH-ParametersList-NB-v1330': {'element': {'type': 'NPRACH-Parameters-NB-v1330'}, 'size': [(1, 'maxNPRACH-Resources-NB-r13')], 'type': 'SEQUENCE ' 'OF'}, 'NPRACH-ProbabilityAnchor-NB-r14': {'members': [{'name': 'nprach-ProbabilityAnchor-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('zero', 0), ('oneSixteenth', 1), ('oneFifteenth', 2), ('oneFourteenth', 3), ('oneThirteenth', 4), ('oneTwelfth', 5), ('oneEleventh', 6), ('oneTenth', 7), ('oneNinth', 8), ('oneEighth', 9), ('oneSeventh', 10), ('oneSixth', 11), ('oneFifth', 12), ('oneFourth', 13), ('oneThird', 14), ('oneHalf', 15)]}], 'type': 'SEQUENCE'}, 'NPRACH-ProbabilityAnchorList-NB-r14': {'element': {'type': 'NPRACH-ProbabilityAnchor-NB-r14'}, 'size': [(1, 'maxNPRACH-Resources-NB-r13')], 'type': 'SEQUENCE ' 'OF'}, 'NPUSCH-ConfigCommon-NB-r13': {'members': [{'element': {'type': 'ACK-NACK-NumRepetitions-NB-r13'}, 'name': 'ack-NACK-NumRepetitions-Msg4-r13', 'size': [(1, 'maxNPRACH-Resources-NB-r13')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'srs-SubframeConfig-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('sc0', 0), ('sc1', 1), ('sc2', 2), ('sc3', 3), ('sc4', 4), ('sc5', 5), ('sc6', 6), ('sc7', 7), ('sc8', 8), ('sc9', 9), ('sc10', 10), ('sc11', 11), ('sc12', 12), ('sc13', 13), ('sc14', 14), ('sc15', 15)]}, {'members': [{'name': 'threeTone-BaseSequence-r13', 'optional': True, 'restricted-to': [(0, 12)], 'type': 'INTEGER'}, {'name': 'threeTone-CyclicShift-r13', 'restricted-to': [(0, 2)], 'type': 'INTEGER'}, {'name': 'sixTone-BaseSequence-r13', 'optional': True, 'restricted-to': [(0, 14)], 'type': 'INTEGER'}, {'name': 'sixTone-CyclicShift-r13', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}, {'name': 'twelveTone-BaseSequence-r13', 'optional': True, 'restricted-to': [(0, 30)], 'type': 'INTEGER'}], 'name': 'dmrs-Config-r13', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'ul-ReferenceSignalsNPUSCH-r13', 'type': 'UL-ReferenceSignalsNPUSCH-NB-r13'}], 'type': 'SEQUENCE'}, 'NPUSCH-ConfigDedicated-NB-r13': {'members': [{'name': 'ack-NACK-NumRepetitions-r13', 'optional': True, 'type': 'ACK-NACK-NumRepetitions-NB-r13'}, {'name': 'npusch-AllSymbols-r13', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'groupHoppingDisabled-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'NS-PmaxList-NB-r13': {'element': {'type': 'NS-PmaxValue-NB-r13'}, 'size': [(1, 'maxNS-Pmax-NB-r13')], 'type': 'SEQUENCE ' 'OF'}, 'NS-PmaxValue-NB-r13': {'members': [{'name': 'additionalPmax-r13', 'optional': True, 'type': 'P-Max'}, {'name': 'additionalSpectrumEmission-r13', 'type': 'AdditionalSpectrumEmission'}], 'type': 'SEQUENCE'}, 'PCCH-Config-NB-r13': {'members': [{'name': 'defaultPagingCycle-r13', 'type': 'ENUMERATED', 'values': [('rf128', 0), ('rf256', 1), ('rf512', 2), ('rf1024', 3)]}, {'name': 'nB-r13', 'type': 'ENUMERATED', 'values': [('fourT', 0), ('twoT', 1), ('oneT', 2), ('halfT', 3), ('quarterT', 4), ('one8thT', 5), ('one16thT', 6), ('one32ndT', 7), ('one64thT', 8), ('one128thT', 9), ('one256thT', 10), ('one512thT', 11), ('one1024thT', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'npdcch-NumRepetitionPaging-r13', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7), ('r256', 8), ('r512', 9), ('r1024', 10), ('r2048', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}], 'type': 'SEQUENCE'}, 'PCCH-Config-NB-r14': {'members': [{'name': 'npdcch-NumRepetitionPaging-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7), ('r256', 8), ('r512', 9), ('r1024', 10), ('r2048', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'default': 'w1', 'name': 'pagingWeight-r14', 'type': 'PagingWeight-NB-r14'}, None], 'type': 'SEQUENCE'}, 'PCCH-Message-NB': {'members': [{'name': 'message', 'type': 'PCCH-MessageType-NB'}], 'type': 'SEQUENCE'}, 'PCCH-MessageType-NB': {'members': [{'members': [{'name': 'paging-r13', 'type': 'Paging-NB'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'PCI-ARFCN-NB-r14': {'members': [{'name': 'physCellId-r14', 'type': 'PhysCellId'}, {'name': 'carrierFreq-r14', 'optional': True, 'type': 'CarrierFreq-NB-r13'}], 'type': 'SEQUENCE'}, 'PDCP-Config-NB-r13': {'members': [{'name': 'discardTimer-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms5120', 0), ('ms10240', 1), ('ms20480', 2), ('ms40960', 3), ('ms81920', 4), ('infinity', 5), ('spare2', 6), ('spare1', 7)]}, {'members': [{'name': 'notUsed', 'type': 'NULL'}, {'members': [{'default': 15, 'name': 'maxCID-r13', 'restricted-to': [(1, 16383)], 'type': 'INTEGER'}, {'members': [{'name': 'profile0x0002', 'type': 'BOOLEAN'}, {'name': 'profile0x0003', 'type': 'BOOLEAN'}, {'name': 'profile0x0004', 'type': 'BOOLEAN'}, {'name': 'profile0x0006', 'type': 'BOOLEAN'}, {'name': 'profile0x0102', 'type': 'BOOLEAN'}, {'name': 'profile0x0103', 'type': 'BOOLEAN'}, {'name': 'profile0x0104', 'type': 'BOOLEAN'}], 'name': 'profiles-r13', 'type': 'SEQUENCE'}, None], 'name': 'rohc', 'type': 'SEQUENCE'}], 'name': 'headerCompression-r13', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'PDCP-Parameters-NB-r13': {'members': [{'members': [{'name': 'profile0x0002', 'type': 'BOOLEAN'}, {'name': 'profile0x0003', 'type': 'BOOLEAN'}, {'name': 'profile0x0004', 'type': 'BOOLEAN'}, {'name': 'profile0x0006', 'type': 'BOOLEAN'}, {'name': 'profile0x0102', 'type': 'BOOLEAN'}, {'name': 'profile0x0103', 'type': 'BOOLEAN'}, {'name': 'profile0x0104', 'type': 'BOOLEAN'}], 'name': 'supportedROHC-Profiles-r13', 'type': 'SEQUENCE'}, {'default': 'cs2', 'name': 'maxNumberROHC-ContextSessions-r13', 'type': 'ENUMERATED', 'values': [('cs2', 0), ('cs4', 1), ('cs8', 2), ('cs12', 3)]}, None], 'type': 'SEQUENCE'}, 'PLMN-IdentityInfo-NB-r13': {'members': [{'name': 'plmn-Identity-r13', 'type': 'PLMN-Identity'}, {'name': 'cellReservedForOperatorUse-r13', 'type': 'ENUMERATED', 'values': [('reserved', 0), ('notReserved', 1)]}, {'name': 'attachWithoutPDN-Connectivity-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'type': 'SEQUENCE'}, 'PLMN-IdentityList-NB-r13': {'element': {'type': 'PLMN-IdentityInfo-NB-r13'}, 'size': [(1, 'maxPLMN-r11')], 'type': 'SEQUENCE ' 'OF'}, 'Paging-NB': {'members': [{'name': 'pagingRecordList-r13', 'optional': True, 'type': 'PagingRecordList-NB-r13'}, {'name': 'systemInfoModification-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'systemInfoModification-eDRX-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'PagingRecord-NB-r13': {'members': [{'name': 'ue-Identity-r13', 'type': 'PagingUE-Identity'}, None], 'type': 'SEQUENCE'}, 'PagingRecordList-NB-r13': {'element': {'type': 'PagingRecord-NB-r13'}, 'size': [(1, 'maxPageRec')], 'type': 'SEQUENCE ' 'OF'}, 'PagingWeight-NB-r14': {'type': 'ENUMERATED', 'values': [('w1', 0), ('w2', 1), ('w3', 2), ('w4', 3), ('w5', 4), ('w6', 5), ('w7', 6), ('w8', 7), ('w9', 8), ('w10', 9), ('w11', 10), ('w12', 11), ('w13', 12), ('w14', 13), ('w15', 14), ('w16', 15)]}, 'PeriodicBSR-Timer-NB-r13': {'type': 'ENUMERATED', 'values': [('pp2', 0), ('pp4', 1), ('pp8', 2), ('pp16', 3), ('pp64', 4), ('pp128', 5), ('infinity', 6), ('spare', 7)]}, 'PhyLayerParameters-NB-r13': {'members': [{'name': 'multiTone-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'multiCarrier-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-NB-v1430': {'members': [{'name': 'multiCarrier-NPRACH-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'twoHARQ-Processes-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'PhyLayerParameters-NB-v1440': {'members': [{'name': 'interferenceRandomisation-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'PhysicalConfigDedicated-NB-r13': {'members': [{'name': 'carrierConfigDedicated-r13', 'optional': True, 'type': 'CarrierConfigDedicated-NB-r13'}, {'name': 'npdcch-ConfigDedicated-r13', 'optional': True, 'type': 'NPDCCH-ConfigDedicated-NB-r13'}, {'name': 'npusch-ConfigDedicated-r13', 'optional': True, 'type': 'NPUSCH-ConfigDedicated-NB-r13'}, {'name': 'uplinkPowerControlDedicated-r13', 'optional': True, 'type': 'UplinkPowerControlDedicated-NB-r13'}, None, [{'name': 'twoHARQ-ProcessesConfig-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], [{'name': 'interferenceRandomisationConfig-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'type': 'SEQUENCE'}, 'RACH-ConfigCommon-NB-r13': {'members': [{'name': 'preambleTransMax-CE-r13', 'type': 'PreambleTransMax'}, {'name': 'powerRampingParameters-r13', 'type': 'PowerRampingParameters'}, {'name': 'rach-InfoList-r13', 'type': 'RACH-InfoList-NB-r13'}, {'name': 'connEstFailOffset-r13', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'RACH-Info-NB-r13': {'members': [{'name': 'ra-ResponseWindowSize-r13', 'type': 'ENUMERATED', 'values': [('pp2', 0), ('pp3', 1), ('pp4', 2), ('pp5', 3), ('pp6', 4), ('pp7', 5), ('pp8', 6), ('pp10', 7)]}, {'name': 'mac-ContentionResolutionTimer-r13', 'type': 'ENUMERATED', 'values': [('pp1', 0), ('pp2', 1), ('pp3', 2), ('pp4', 3), ('pp8', 4), ('pp16', 5), ('pp32', 6), ('pp64', 7)]}], 'type': 'SEQUENCE'}, 'RACH-InfoList-NB-r13': {'element': {'type': 'RACH-Info-NB-r13'}, 'size': [(1, 'maxNPRACH-Resources-NB-r13')], 'type': 'SEQUENCE ' 'OF'}, 'RF-Parameters-NB-r13': {'members': [{'name': 'supportedBandList-r13', 'type': 'SupportedBandList-NB-r13'}, {'name': 'multiNS-Pmax-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'RF-Parameters-NB-v1430': {'members': [{'name': 'powerClassNB-14dBm-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'RLC-Config-NB-r13': {'members': [{'members': [{'name': 'ul-AM-RLC-r13', 'type': 'UL-AM-RLC-NB-r13'}, {'name': 'dl-AM-RLC-r13', 'type': 'DL-AM-RLC-NB-r13'}], 'name': 'am', 'type': 'SEQUENCE'}, None], 'type': 'CHOICE'}, 'RLC-Config-NB-v1430': {'members': [{'name': 't-Reordering-r14', 'optional': True, 'type': 'T-Reordering'}], 'type': 'SEQUENCE'}, 'RLF-TimersAndConstants-NB-r13': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 't301-r13', 'type': 'ENUMERATED', 'values': [('ms2500', 0), ('ms4000', 1), ('ms6000', 2), ('ms10000', 3), ('ms15000', 4), ('ms25000', 5), ('ms40000', 6), ('ms60000', 7)]}, {'name': 't310-r13', 'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms200', 1), ('ms500', 2), ('ms1000', 3), ('ms2000', 4), ('ms4000', 5), ('ms8000', 6)]}, {'name': 'n310-r13', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n6', 4), ('n8', 5), ('n10', 6), ('n20', 7)]}, {'name': 't311-r13', 'type': 'ENUMERATED', 'values': [('ms1000', 0), ('ms3000', 1), ('ms5000', 2), ('ms10000', 3), ('ms15000', 4), ('ms20000', 5), ('ms30000', 6)]}, {'name': 'n311-r13', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n5', 4), ('n6', 5), ('n8', 6), ('n10', 7)]}, None, [{'name': 't311-v1350', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms40000', 0), ('ms60000', 1), ('ms90000', 2), ('ms120000', 3)]}]], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'RRCConnectionReconfiguration-NB': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionReconfiguration-r13', 'type': 'RRCConnectionReconfiguration-NB-r13-IEs'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-NB-r13-IEs': {'members': [{'element': {'type': 'DedicatedInfoNAS'}, 'name': 'dedicatedInfoNASList-r13', 'optional': True, 'size': [(1, 'maxDRB-NB-r13')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'radioResourceConfigDedicated-r13', 'optional': True, 'type': 'RadioResourceConfigDedicated-NB-r13'}, {'name': 'fullConfig-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfigurationComplete-NB': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'rrcConnectionReconfigurationComplete-r13', 'type': 'RRCConnectionReconfigurationComplete-NB-r13-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfigurationComplete-NB-r13-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishment-NB': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionReestablishment-r13', 'type': 'RRCConnectionReestablishment-NB-r13-IEs'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishment-NB-r13-IEs': {'members': [{'name': 'radioResourceConfigDedicated-r13', 'type': 'RadioResourceConfigDedicated-NB-r13'}, {'name': 'nextHopChainingCount-r13', 'type': 'NextHopChainingCount'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionReestablishment-NB-v1430-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishment-NB-v1430-IEs': {'members': [{'name': 'dl-NAS-MAC', 'size': [16], 'type': 'BIT ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentComplete-NB': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'rrcConnectionReestablishmentComplete-r13', 'type': 'RRCConnectionReestablishmentComplete-NB-r13-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentComplete-NB-r13-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentRequest-NB': {'members': [{'members': [{'name': 'rrcConnectionReestablishmentRequest-r13', 'type': 'RRCConnectionReestablishmentRequest-NB-r13-IEs'}, {'members': [{'name': 'rrcConnectionReestablishmentRequest-r14', 'type': 'RRCConnectionReestablishmentRequest-NB-r14-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'later', 'type': 'CHOICE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentRequest-NB-r13-IEs': {'members': [{'name': 'ue-Identity-r13', 'type': 'ReestabUE-Identity'}, {'name': 'reestablishmentCause-r13', 'type': 'ReestablishmentCause-NB-r13'}, {'name': 'spare', 'size': [25], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentRequest-NB-r14-IEs': {'members': [{'name': 'ue-Identity-r14', 'type': 'ReestabUE-Identity-CP-NB-r14'}, {'name': 'reestablishmentCause-r14', 'type': 'ReestablishmentCause-NB-r13'}, {'name': 'spare', 'size': [4], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'RRCConnectionReject-NB': {'members': [{'members': [{'members': [{'name': 'rrcConnectionReject-r13', 'type': 'RRCConnectionReject-NB-r13-IEs'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReject-NB-r13-IEs': {'members': [{'name': 'extendedWaitTime-r13', 'restricted-to': [(1, 1800)], 'type': 'INTEGER'}, {'name': 'rrc-SuspendIndication-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionRelease-NB': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionRelease-r13', 'type': 'RRCConnectionRelease-NB-r13-IEs'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionRelease-NB-r13-IEs': {'members': [{'name': 'releaseCause-r13', 'type': 'ReleaseCause-NB-r13'}, {'name': 'resumeIdentity-r13', 'optional': True, 'type': 'ResumeIdentity-r13'}, {'name': 'extendedWaitTime-r13', 'optional': True, 'restricted-to': [(1, 1800)], 'type': 'INTEGER'}, {'name': 'redirectedCarrierInfo-r13', 'optional': True, 'type': 'RedirectedCarrierInfo-NB-r13'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionRelease-NB-v1430-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionRelease-NB-v1430-IEs': {'members': [{'name': 'redirectedCarrierInfo-v1430', 'optional': True, 'type': 'RedirectedCarrierInfo-NB-v1430'}, {'name': 'extendedWaitTime-CPdata-r14', 'optional': True, 'restricted-to': [(1, 1800)], 'type': 'INTEGER'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionRequest-NB': {'members': [{'members': [{'name': 'rrcConnectionRequest-r13', 'type': 'RRCConnectionRequest-NB-r13-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionRequest-NB-r13-IEs': {'members': [{'name': 'ue-Identity-r13', 'type': 'InitialUE-Identity'}, {'name': 'establishmentCause-r13', 'type': 'EstablishmentCause-NB-r13'}, {'name': 'multiToneSupport-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'multiCarrierSupport-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'spare', 'size': [22], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'RRCConnectionResume-NB': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionResume-r13', 'type': 'RRCConnectionResume-NB-r13-IEs'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionResume-NB-r13-IEs': {'members': [{'name': 'radioResourceConfigDedicated-r13', 'optional': True, 'type': 'RadioResourceConfigDedicated-NB-r13'}, {'name': 'nextHopChainingCount-r13', 'type': 'NextHopChainingCount'}, {'name': 'drb-ContinueROHC-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionResumeComplete-NB': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'rrcConnectionResumeComplete-r13', 'type': 'RRCConnectionResumeComplete-NB-r13-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionResumeComplete-NB-r13-IEs': {'members': [{'name': 'selectedPLMN-Identity-r13', 'optional': True, 'restricted-to': [(1, 'maxPLMN-r11')], 'type': 'INTEGER'}, {'name': 'dedicatedInfoNAS-r13', 'optional': True, 'type': 'DedicatedInfoNAS'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionResumeRequest-NB': {'members': [{'members': [{'name': 'rrcConnectionResumeRequest-r13', 'type': 'RRCConnectionResumeRequest-NB-r13-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionResumeRequest-NB-r13-IEs': {'members': [{'name': 'resumeID-r13', 'type': 'ResumeIdentity-r13'}, {'name': 'shortResumeMAC-I-r13', 'type': 'ShortMAC-I'}, {'name': 'resumeCause-r13', 'type': 'EstablishmentCause-NB-r13'}, {'name': 'spare', 'size': [9], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetup-NB': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionSetup-r13', 'type': 'RRCConnectionSetup-NB-r13-IEs'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetup-NB-r13-IEs': {'members': [{'name': 'radioResourceConfigDedicated-r13', 'type': 'RadioResourceConfigDedicated-NB-r13'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete-NB': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'rrcConnectionSetupComplete-r13', 'type': 'RRCConnectionSetupComplete-NB-r13-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete-NB-r13-IEs': {'members': [{'name': 'selectedPLMN-Identity-r13', 'restricted-to': [(1, 'maxPLMN-r11')], 'type': 'INTEGER'}, {'name': 's-TMSI-r13', 'optional': True, 'type': 'S-TMSI'}, {'name': 'registeredMME-r13', 'optional': True, 'type': 'RegisteredMME'}, {'name': 'dedicatedInfoNAS-r13', 'type': 'DedicatedInfoNAS'}, {'name': 'attachWithoutPDN-Connectivity-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'up-CIoT-EPS-Optimisation-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'RRCConnectionSetupComplete-NB-v1430-IEs'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete-NB-v1430-IEs': {'members': [{'name': 'gummei-Type-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('mapped', 0)]}, {'name': 'dcn-ID-r14', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RSRP-ThresholdsNPRACH-InfoList-NB-r13': {'element': {'type': 'RSRP-Range'}, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, 'RadioResourceConfigCommonSIB-NB-r13': {'members': [{'name': 'rach-ConfigCommon-r13', 'type': 'RACH-ConfigCommon-NB-r13'}, {'name': 'bcch-Config-r13', 'type': 'BCCH-Config-NB-r13'}, {'name': 'pcch-Config-r13', 'type': 'PCCH-Config-NB-r13'}, {'name': 'nprach-Config-r13', 'type': 'NPRACH-ConfigSIB-NB-r13'}, {'name': 'npdsch-ConfigCommon-r13', 'type': 'NPDSCH-ConfigCommon-NB-r13'}, {'name': 'npusch-ConfigCommon-r13', 'type': 'NPUSCH-ConfigCommon-NB-r13'}, {'name': 'dl-Gap-r13', 'optional': True, 'type': 'DL-GapConfig-NB-r13'}, {'name': 'uplinkPowerControlCommon-r13', 'type': 'UplinkPowerControlCommon-NB-r13'}, None, [{'name': 'nprach-Config-v1330', 'optional': True, 'type': 'NPRACH-ConfigSIB-NB-v1330'}]], 'type': 'SEQUENCE'}, 'RadioResourceConfigDedicated-NB-r13': {'members': [{'name': 'srb-ToAddModList-r13', 'optional': True, 'type': 'SRB-ToAddModList-NB-r13'}, {'name': 'drb-ToAddModList-r13', 'optional': True, 'type': 'DRB-ToAddModList-NB-r13'}, {'name': 'drb-ToReleaseList-r13', 'optional': True, 'type': 'DRB-ToReleaseList-NB-r13'}, {'members': [{'name': 'explicitValue-r13', 'type': 'MAC-MainConfig-NB-r13'}, {'name': 'defaultValue-r13', 'type': 'NULL'}], 'name': 'mac-MainConfig-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'physicalConfigDedicated-r13', 'optional': True, 'type': 'PhysicalConfigDedicated-NB-r13'}, {'name': 'rlf-TimersAndConstants-r13', 'optional': True, 'type': 'RLF-TimersAndConstants-NB-r13'}, None], 'type': 'SEQUENCE'}, 'RedirectedCarrierInfo-NB-r13': {'type': 'CarrierFreq-NB-r13'}, 'RedirectedCarrierInfo-NB-v1430': {'members': [{'name': 'redirectedCarrierOffsetDedicated-r14', 'type': 'ENUMERATED', 'values': [('dB1', 0), ('dB2', 1), ('dB3', 2), ('dB4', 3), ('dB5', 4), ('dB6', 5), ('dB8', 6), ('dB10', 7), ('dB12', 8), ('dB14', 9), ('dB16', 10), ('dB18', 11), ('dB20', 12), ('dB22', 13), ('dB24', 14), ('dB26', 15)]}, {'name': 't322-r14', 'type': 'ENUMERATED', 'values': [('min5', 0), ('min10', 1), ('min20', 2), ('min30', 3), ('min60', 4), ('min120', 5), ('min180', 6), ('spare1', 7)]}], 'type': 'SEQUENCE'}, 'ReestabUE-Identity-CP-NB-r14': {'members': [{'name': 's-TMSI-r14', 'type': 'S-TMSI'}, {'name': 'ul-NAS-MAC-r14', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'ul-NAS-Count-r14', 'size': [5], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'ReestablishmentCause-NB-r13': {'type': 'ENUMERATED', 'values': [('reconfigurationFailure', 0), ('otherFailure', 1), ('spare2', 2), ('spare1', 3)]}, 'ReleaseCause-NB-r13': {'type': 'ENUMERATED', 'values': [('loadBalancingTAUrequired', 0), ('other', 1), ('rrc-Suspend', 2), ('spare1', 3)]}, 'ReselectionThreshold-NB-v1360': {'restricted-to': [(32, 63)], 'type': 'INTEGER'}, 'RetxBSR-Timer-NB-r13': {'type': 'ENUMERATED', 'values': [('pp4', 0), ('pp16', 1), ('pp64', 2), ('pp128', 3), ('pp256', 4), ('pp512', 5), ('infinity', 6), ('spare', 7)]}, 'SC-MCCH-Message-NB': {'members': [{'name': 'message', 'type': 'SC-MCCH-MessageType-NB'}], 'type': 'SEQUENCE'}, 'SC-MCCH-MessageType-NB': {'members': [{'members': [{'name': 'scptmConfiguration-r14', 'type': 'SCPTMConfiguration-NB-r14'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SC-MCCH-SchedulingInfo-NB-r14': {'members': [{'name': 'onDurationTimerSCPTM-r14', 'type': 'ENUMERATED', 'values': [('pp1', 0), ('pp2', 1), ('pp3', 2), ('pp4', 3), ('pp8', 4), ('pp16', 5), ('pp32', 6), ('spare', 7)]}, {'name': 'drx-InactivityTimerSCPTM-r14', 'type': 'ENUMERATED', 'values': [('pp0', 0), ('pp1', 1), ('pp2', 2), ('pp3', 3), ('pp4', 4), ('pp8', 5), ('pp16', 6), ('pp32', 7)]}, {'members': [{'name': 'sf10', 'restricted-to': [(0, 9)], 'type': 'INTEGER'}, {'name': 'sf20', 'restricted-to': [(0, 19)], 'type': 'INTEGER'}, {'name': 'sf32', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'sf40', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'sf64', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'sf80', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, {'name': 'sf128', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'sf160', 'restricted-to': [(0, 159)], 'type': 'INTEGER'}, {'name': 'sf256', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'sf320', 'restricted-to': [(0, 319)], 'type': 'INTEGER'}, {'name': 'sf512', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, {'name': 'sf640', 'restricted-to': [(0, 639)], 'type': 'INTEGER'}, {'name': 'sf1024', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'sf2048', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'sf4096', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'sf8192', 'restricted-to': [(0, 8191)], 'type': 'INTEGER'}], 'name': 'schedulingPeriodStartOffsetSCPTM-r14', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'SC-MTCH-Info-NB-r14': {'members': [{'members': [{'name': 'dl-CarrierConfig-r14', 'type': 'DL-CarrierConfigCommon-NB-r14'}, {'name': 'dl-CarrierIndex-r14', 'restricted-to': [(0, 'maxNonAnchorCarriers-NB-r14')], 'type': 'INTEGER'}], 'name': 'sc-mtch-CarrierConfig-r14', 'type': 'CHOICE'}, {'name': 'mbmsSessionInfo-r14', 'type': 'MBMSSessionInfo-r13'}, {'name': 'g-RNTI-r14', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'sc-mtch-SchedulingInfo-r14', 'optional': True, 'type': 'SC-MTCH-SchedulingInfo-NB-r14'}, {'name': 'sc-mtch-NeighbourCell-r14', 'optional': True, 'size': ['maxNeighCell-SCPTM-NB-r14'], 'type': 'BIT ' 'STRING'}, {'name': 'npdcch-NPDSCH-MaxTBS-SC-MTCH-r14', 'type': 'ENUMERATED', 'values': [('n680', 0), ('n2536', 1)]}, {'name': 'npdcch-NumRepetitions-SC-MTCH-r14', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('r128', 7), ('r256', 8), ('r512', 9), ('r1024', 10), ('r2048', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'npdcch-StartSF-SC-MTCH-r14', 'type': 'ENUMERATED', 'values': [('v1dot5', 0), ('v2', 1), ('v4', 2), ('v8', 3), ('v16', 4), ('v32', 5), ('v48', 6), ('v64', 7)]}, {'name': 'npdcch-Offset-SC-MTCH-r14', 'type': 'ENUMERATED', 'values': [('zero', 0), ('oneEighth', 1), ('oneQuarter', 2), ('threeEighth', 3), ('oneHalf', 4), ('fiveEighth', 5), ('threeQuarter', 6), ('sevenEighth', 7)]}, None], 'type': 'SEQUENCE'}, 'SC-MTCH-InfoList-NB-r14': {'element': {'type': 'SC-MTCH-Info-NB-r14'}, 'size': [(0, 'maxSC-MTCH-NB-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SC-MTCH-SchedulingInfo-NB-r14': {'members': [{'name': 'onDurationTimerSCPTM-r14', 'type': 'ENUMERATED', 'values': [('pp1', 0), ('pp2', 1), ('pp3', 2), ('pp4', 3), ('pp8', 4), ('pp16', 5), ('pp32', 6), ('spare', 7)]}, {'name': 'drx-InactivityTimerSCPTM-r14', 'type': 'ENUMERATED', 'values': [('pp0', 0), ('pp1', 1), ('pp2', 2), ('pp3', 3), ('pp4', 4), ('pp8', 5), ('pp16', 6), ('pp32', 7)]}, {'members': [{'name': 'sf10', 'restricted-to': [(0, 9)], 'type': 'INTEGER'}, {'name': 'sf20', 'restricted-to': [(0, 19)], 'type': 'INTEGER'}, {'name': 'sf32', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'sf40', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'sf64', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'sf80', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, {'name': 'sf128', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'sf160', 'restricted-to': [(0, 159)], 'type': 'INTEGER'}, {'name': 'sf256', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'sf320', 'restricted-to': [(0, 319)], 'type': 'INTEGER'}, {'name': 'sf512', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, {'name': 'sf640', 'restricted-to': [(0, 639)], 'type': 'INTEGER'}, {'name': 'sf1024', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'sf2048', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'sf4096', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'sf8192', 'restricted-to': [(0, 8191)], 'type': 'INTEGER'}], 'name': 'schedulingPeriodStartOffsetSCPTM-r14', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'SCPTM-NeighbourCellList-NB-r14': {'element': {'type': 'PCI-ARFCN-NB-r14'}, 'size': [(1, 'maxNeighCell-SCPTM-NB-r14')], 'type': 'SEQUENCE ' 'OF'}, 'SCPTMConfiguration-NB-r14': {'members': [{'name': 'sc-mtch-InfoList-r14', 'type': 'SC-MTCH-InfoList-NB-r14'}, {'name': 'scptm-NeighbourCellList-r14', 'optional': True, 'type': 'SCPTM-NeighbourCellList-NB-r14'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SIB-MappingInfo-NB-r13': {'element': {'type': 'SIB-Type-NB-r13'}, 'size': [(0, 'maxSIB-1')], 'type': 'SEQUENCE ' 'OF'}, 'SIB-Type-NB-r13': {'type': 'ENUMERATED', 'values': [('sibType3-NB-r13', 0), ('sibType4-NB-r13', 1), ('sibType5-NB-r13', 2), ('sibType14-NB-r13', 3), ('sibType16-NB-r13', 4), ('sibType15-NB-r14', 5), ('sibType20-NB-r14', 6), ('sibType22-NB-r14', 7)]}, 'SRB-ToAddMod-NB-r13': {'members': [{'members': [{'name': 'explicitValue', 'type': 'RLC-Config-NB-r13'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'rlc-Config-r13', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'explicitValue', 'type': 'LogicalChannelConfig-NB-r13'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'logicalChannelConfig-r13', 'optional': True, 'type': 'CHOICE'}, None, [{'name': 'rlc-Config-v1430', 'optional': True, 'type': 'RLC-Config-NB-v1430'}]], 'type': 'SEQUENCE'}, 'SRB-ToAddModList-NB-r13': {'element': {'type': 'SRB-ToAddMod-NB-r13'}, 'size': [1], 'type': 'SEQUENCE ' 'OF'}, 'SchedulingInfo-NB-r13': {'members': [{'name': 'si-Periodicity-r13', 'type': 'ENUMERATED', 'values': [('rf64', 0), ('rf128', 1), ('rf256', 2), ('rf512', 3), ('rf1024', 4), ('rf2048', 5), ('rf4096', 6), ('spare', 7)]}, {'name': 'si-RepetitionPattern-r13', 'type': 'ENUMERATED', 'values': [('every2ndRF', 0), ('every4thRF', 1), ('every8thRF', 2), ('every16thRF', 3)]}, {'name': 'sib-MappingInfo-r13', 'type': 'SIB-MappingInfo-NB-r13'}, {'name': 'si-TB-r13', 'type': 'ENUMERATED', 'values': [('b56', 0), ('b120', 1), ('b208', 2), ('b256', 3), ('b328', 4), ('b440', 5), ('b552', 6), ('b680', 7)]}], 'type': 'SEQUENCE'}, 'SchedulingInfoList-NB-r13': {'element': {'type': 'SchedulingInfo-NB-r13'}, 'size': [(1, 'maxSI-Message-NB-r13')], 'type': 'SEQUENCE ' 'OF'}, 'Standalone-NB-r13': {'members': [{'name': 'spare', 'size': [5], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'SupportedBand-NB-r13': {'members': [{'name': 'band-r13', 'type': 'FreqBandIndicator-NB-r13'}, {'name': 'powerClassNB-20dBm-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}], 'type': 'SEQUENCE'}, 'SupportedBandList-NB-r13': {'element': {'type': 'SupportedBand-NB-r13'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SystemInfoValueTagList-NB-r13': {'element': {'type': 'SystemInfoValueTagSI-r13'}, 'size': [(1, 'maxSI-Message-NB-r13')], 'type': 'SEQUENCE ' 'OF'}, 'SystemInformation-NB': {'members': [{'members': [{'name': 'systemInformation-r13', 'type': 'SystemInformation-NB-r13-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SystemInformation-NB-r13-IEs': {'members': [{'element': {'members': [{'name': 'sib2-r13', 'type': 'SystemInformationBlockType2-NB-r13'}, {'name': 'sib3-r13', 'type': 'SystemInformationBlockType3-NB-r13'}, {'name': 'sib4-r13', 'type': 'SystemInformationBlockType4-NB-r13'}, {'name': 'sib5-r13', 'type': 'SystemInformationBlockType5-NB-r13'}, {'name': 'sib14-r13', 'type': 'SystemInformationBlockType14-NB-r13'}, {'name': 'sib16-r13', 'type': 'SystemInformationBlockType16-NB-r13'}, None, {'name': 'sib15-v1430', 'type': 'SystemInformationBlockType15-NB-r14'}, {'name': 'sib20-v1430', 'type': 'SystemInformationBlockType20-NB-r14'}, {'name': 'sib22-v1430', 'type': 'SystemInformationBlockType22-NB-r14'}], 'type': 'CHOICE'}, 'name': 'sib-TypeAndInfo-r13', 'size': [(1, 'maxSIB')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-NB': {'members': [{'name': 'hyperSFN-MSB-r13', 'size': [8], 'type': 'BIT ' 'STRING'}, {'members': [{'name': 'plmn-IdentityList-r13', 'type': 'PLMN-IdentityList-NB-r13'}, {'name': 'trackingAreaCode-r13', 'type': 'TrackingAreaCode'}, {'name': 'cellIdentity-r13', 'type': 'CellIdentity'}, {'name': 'cellBarred-r13', 'type': 'ENUMERATED', 'values': [('barred', 0), ('notBarred', 1)]}, {'name': 'intraFreqReselection-r13', 'type': 'ENUMERATED', 'values': [('allowed', 0), ('notAllowed', 1)]}], 'name': 'cellAccessRelatedInfo-r13', 'type': 'SEQUENCE'}, {'members': [{'name': 'q-RxLevMin-r13', 'type': 'Q-RxLevMin'}, {'name': 'q-QualMin-r13', 'type': 'Q-QualMin-r9'}], 'name': 'cellSelectionInfo-r13', 'type': 'SEQUENCE'}, {'name': 'p-Max-r13', 'optional': True, 'type': 'P-Max'}, {'name': 'freqBandIndicator-r13', 'type': 'FreqBandIndicator-NB-r13'}, {'name': 'freqBandInfo-r13', 'optional': True, 'type': 'NS-PmaxList-NB-r13'}, {'name': 'multiBandInfoList-r13', 'optional': True, 'type': 'MultiBandInfoList-NB-r13'}, {'name': 'downlinkBitmap-r13', 'optional': True, 'type': 'DL-Bitmap-NB-r13'}, {'name': 'eutraControlRegionSize-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2)]}, {'name': 'nrs-CRS-PowerOffset-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-4dot77', 1), ('dB-3', 2), ('dB-1dot77', 3), ('dB0', 4), ('dB1', 5), ('dB1dot23', 6), ('dB2', 7), ('dB3', 8), ('dB4', 9), ('dB4dot23', 10), ('dB5', 11), ('dB6', 12), ('dB7', 13), ('dB8', 14), ('dB9', 15)]}, {'name': 'schedulingInfoList-r13', 'type': 'SchedulingInfoList-NB-r13'}, {'name': 'si-WindowLength-r13', 'type': 'ENUMERATED', 'values': [('ms160', 0), ('ms320', 1), ('ms480', 2), ('ms640', 3), ('ms960', 4), ('ms1280', 5), ('ms1600', 6), ('spare1', 7)]}, {'name': 'si-RadioFrameOffset-r13', 'optional': True, 'restricted-to': [(1, 15)], 'type': 'INTEGER'}, {'name': 'systemInfoValueTagList-r13', 'optional': True, 'type': 'SystemInfoValueTagList-NB-r13'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-NB-v1350'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-NB-v1350': {'members': [{'name': 'cellSelectionInfo-v1350', 'optional': True, 'type': 'CellSelectionInfo-NB-v1350'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'SystemInformationBlockType1-NB-v1430'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1-NB-v1430': {'members': [{'name': 'cellSelectionInfo-v1430', 'optional': True, 'type': 'CellSelectionInfo-NB-v1430'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType14-NB-r13': {'members': [{'members': [{'name': 'ab-Common-r13', 'type': 'AB-Config-NB-r13'}, {'element': {'type': 'AB-ConfigPLMN-NB-r13'}, 'name': 'ab-PerPLMN-List-r13', 'size': [(1, 'maxPLMN-r11')], 'type': 'SEQUENCE ' 'OF'}], 'name': 'ab-Param-r13', 'optional': True, 'type': 'CHOICE'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType15-NB-r14': {'members': [{'name': 'mbms-SAI-IntraFreq-r14', 'optional': True, 'type': 'MBMS-SAI-List-r11'}, {'name': 'mbms-SAI-InterFreqList-r14', 'optional': True, 'type': 'MBMS-SAI-InterFreqList-NB-r14'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType16-NB-r13': {'type': 'SystemInformationBlockType16-r11'}, 'SystemInformationBlockType2-NB-r13': {'members': [{'name': 'radioResourceConfigCommon-r13', 'type': 'RadioResourceConfigCommonSIB-NB-r13'}, {'name': 'ue-TimersAndConstants-r13', 'type': 'UE-TimersAndConstants-NB-r13'}, {'members': [{'name': 'ul-CarrierFreq-r13', 'optional': True, 'type': 'CarrierFreq-NB-r13'}, {'name': 'additionalSpectrumEmission-r13', 'type': 'AdditionalSpectrumEmission'}], 'name': 'freqInfo-r13', 'type': 'SEQUENCE'}, {'name': 'timeAlignmentTimerCommon-r13', 'type': 'TimeAlignmentTimer'}, {'element': {'type': 'AdditionalSpectrumEmission'}, 'name': 'multiBandInfoList-r13', 'optional': True, 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None, [{'name': 'cp-Reestablishment-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'type': 'SEQUENCE'}, 'SystemInformationBlockType20-NB-r14': {'members': [{'name': 'npdcch-SC-MCCH-Config-r14', 'type': 'NPDCCH-SC-MCCH-Config-NB-r14'}, {'members': [{'name': 'dl-CarrierConfig-r14', 'type': 'DL-CarrierConfigCommon-NB-r14'}, {'name': 'dl-CarrierIndex-r14', 'restricted-to': [(0, 'maxNonAnchorCarriers-NB-r14')], 'type': 'INTEGER'}], 'name': 'sc-mcch-CarrierConfig-r14', 'type': 'CHOICE'}, {'name': 'sc-mcch-RepetitionPeriod-r14', 'type': 'ENUMERATED', 'values': [('rf32', 0), ('rf128', 1), ('rf512', 2), ('rf1024', 3), ('rf2048', 4), ('rf4096', 5), ('rf8192', 6), ('rf16384', 7)]}, {'name': 'sc-mcch-Offset-r14', 'restricted-to': [(0, 10)], 'type': 'INTEGER'}, {'name': 'sc-mcch-ModificationPeriod-r14', 'type': 'ENUMERATED', 'values': [('rf32', 0), ('rf128', 1), ('rf256', 2), ('rf512', 3), ('rf1024', 4), ('rf2048', 5), ('rf4096', 6), ('rf8192', 7), ('rf16384', 8), ('rf32768', 9), ('rf65536', 10), ('rf131072', 11), ('rf262144', 12), ('rf524288', 13), ('rf1048576', 14), ('spare1', 15)]}, {'name': 'sc-mcch-SchedulingInfo-r14', 'optional': True, 'type': 'SC-MCCH-SchedulingInfo-NB-r14'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType22-NB-r14': {'members': [{'name': 'dl-ConfigList-r14', 'optional': True, 'type': 'DL-ConfigCommonList-NB-r14'}, {'name': 'ul-ConfigList-r14', 'optional': True, 'type': 'UL-ConfigCommonList-NB-r14'}, {'name': 'pagingWeightAnchor-r14', 'optional': True, 'type': 'PagingWeight-NB-r14'}, {'name': 'nprach-ProbabilityAnchorList-r14', 'optional': True, 'type': 'NPRACH-ProbabilityAnchorList-NB-r14'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType3-NB-r13': {'members': [{'members': [{'name': 'q-Hyst-r13', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB1', 1), ('dB2', 2), ('dB3', 3), ('dB4', 4), ('dB5', 5), ('dB6', 6), ('dB8', 7), ('dB10', 8), ('dB12', 9), ('dB14', 10), ('dB16', 11), ('dB18', 12), ('dB20', 13), ('dB22', 14), ('dB24', 15)]}], 'name': 'cellReselectionInfoCommon-r13', 'type': 'SEQUENCE'}, {'members': [{'name': 's-NonIntraSearch-r13', 'type': 'ReselectionThreshold'}], 'name': 'cellReselectionServingFreqInfo-r13', 'type': 'SEQUENCE'}, {'members': [{'name': 'q-RxLevMin-r13', 'type': 'Q-RxLevMin'}, {'name': 'q-QualMin-r13', 'optional': True, 'type': 'Q-QualMin-r9'}, {'name': 'p-Max-r13', 'optional': True, 'type': 'P-Max'}, {'name': 's-IntraSearchP-r13', 'type': 'ReselectionThreshold'}, {'name': 't-Reselection-r13', 'type': 'T-Reselection-NB-r13'}], 'name': 'intraFreqCellReselectionInfo-r13', 'type': 'SEQUENCE'}, {'name': 'freqBandInfo-r13', 'optional': True, 'type': 'NS-PmaxList-NB-r13'}, {'element': {'type': 'NS-PmaxList-NB-r13'}, 'name': 'multiBandInfoList-r13', 'optional': True, 'size': [(1, 'maxMultiBands')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None, [{'name': 'intraFreqCellReselectionInfo-v1350', 'optional': True, 'type': 'IntraFreqCellReselectionInfo-NB-v1350'}], [{'name': 'intraFreqCellReselectionInfo-v1360', 'optional': True, 'type': 'IntraFreqCellReselectionInfo-NB-v1360'}], [{'name': 'intraFreqCellReselectionInfo-v1430', 'optional': True, 'type': 'IntraFreqCellReselectionInfo-NB-v1430'}]], 'type': 'SEQUENCE'}, 'SystemInformationBlockType4-NB-r13': {'members': [{'name': 'intraFreqNeighCellList-r13', 'optional': True, 'type': 'IntraFreqNeighCellList'}, {'name': 'intraFreqBlackCellList-r13', 'optional': True, 'type': 'IntraFreqBlackCellList'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType5-NB-r13': {'members': [{'name': 'interFreqCarrierFreqList-r13', 'type': 'InterFreqCarrierFreqList-NB-r13'}, {'name': 't-Reselection-r13', 'type': 'T-Reselection-NB-r13'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, None, [{'name': 'scptm-FreqOffset-r14', 'optional': True, 'restricted-to': [(1, 8)], 'type': 'INTEGER'}]], 'type': 'SEQUENCE'}, 'T-PollRetransmit-NB-r13': {'type': 'ENUMERATED', 'values': [('ms250', 0), ('ms500', 1), ('ms1000', 2), ('ms2000', 3), ('ms3000', 4), ('ms4000', 5), ('ms6000', 6), ('ms10000', 7), ('ms15000', 8), ('ms25000', 9), ('ms40000', 10), ('ms60000', 11), ('ms90000', 12), ('ms120000', 13), ('ms180000', 14), ('spare1', 15)]}, 'T-Reselection-NB-r13': {'type': 'ENUMERATED', 'values': [('s0', 0), ('s3', 1), ('s6', 2), ('s9', 3), ('s12', 4), ('s15', 5), ('s18', 6), ('s21', 7)]}, 'UE-Capability-NB-r13': {'members': [{'name': 'accessStratumRelease-r13', 'type': 'AccessStratumRelease-NB-r13'}, {'name': 'ue-Category-NB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('nb1', 0)]}, {'name': 'multipleDRB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('supported', 0)]}, {'name': 'pdcp-Parameters-r13', 'optional': True, 'type': 'PDCP-Parameters-NB-r13'}, {'name': 'phyLayerParameters-r13', 'type': 'PhyLayerParameters-NB-r13'}, {'name': 'rf-Parameters-r13', 'type': 'RF-Parameters-NB-r13'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-Capability-NB-v1430-IEs'}], 'type': 'SEQUENCE'}, 'UE-Capability-NB-v1430-IEs': {'members': [{'name': 'ue-Category-NB-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('nb2', 0)]}, {'name': 'mac-Parameters-r14', 'optional': True, 'type': 'MAC-Parameters-NB-r14'}, {'name': 'phyLayerParameters-v1430', 'optional': True, 'type': 'PhyLayerParameters-NB-v1430'}, {'name': 'rf-Parameters-v1430', 'type': 'RF-Parameters-NB-v1430'}, {'name': 'nonCriticalExtension', 'optional': True, 'type': 'UE-Capability-NB-v1440-IEs'}], 'type': 'SEQUENCE'}, 'UE-Capability-NB-v1440-IEs': {'members': [{'name': 'phyLayerParameters-v1440', 'optional': True, 'type': 'PhyLayerParameters-NB-v1440'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UE-RadioPagingInfo-NB-r13': {'members': [{'name': 'ue-Category-NB-r13', 'optional': True, 'type': 'ENUMERATED', 'values': [('nb1', 0)]}, None, [{'name': 'multiCarrierPaging-r14', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}]], 'type': 'SEQUENCE'}, 'UE-TimersAndConstants-NB-r13': {'members': [{'name': 't300-r13', 'type': 'ENUMERATED', 'values': [('ms2500', 0), ('ms4000', 1), ('ms6000', 2), ('ms10000', 3), ('ms15000', 4), ('ms25000', 5), ('ms40000', 6), ('ms60000', 7)]}, {'name': 't301-r13', 'type': 'ENUMERATED', 'values': [('ms2500', 0), ('ms4000', 1), ('ms6000', 2), ('ms10000', 3), ('ms15000', 4), ('ms25000', 5), ('ms40000', 6), ('ms60000', 7)]}, {'name': 't310-r13', 'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms200', 1), ('ms500', 2), ('ms1000', 3), ('ms2000', 4), ('ms4000', 5), ('ms8000', 6)]}, {'name': 'n310-r13', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n6', 4), ('n8', 5), ('n10', 6), ('n20', 7)]}, {'name': 't311-r13', 'type': 'ENUMERATED', 'values': [('ms1000', 0), ('ms3000', 1), ('ms5000', 2), ('ms10000', 3), ('ms15000', 4), ('ms20000', 5), ('ms30000', 6)]}, {'name': 'n311-r13', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n5', 4), ('n6', 5), ('n8', 6), ('n10', 7)]}, None, [{'name': 't311-v1350', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms40000', 0), ('ms60000', 1), ('ms90000', 2), ('ms120000', 3)]}]], 'type': 'SEQUENCE'}, 'UECapabilityEnquiry-NB': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'ueCapabilityEnquiry-r13', 'type': 'UECapabilityEnquiry-NB-r13-IEs'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UECapabilityEnquiry-NB-r13-IEs': {'members': [{'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UECapabilityInformation-NB': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'ueCapabilityInformation-r13', 'type': 'UECapabilityInformation-NB-r13-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UECapabilityInformation-NB-r13-IEs': {'members': [{'name': 'ue-Capability-Container-r13', 'type': 'UE-Capability-NB-r13'}, {'name': 'ue-RadioPagingInfo-r13', 'type': 'UE-RadioPagingInfo-NB-r13'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UL-AM-RLC-NB-r13': {'members': [{'name': 't-PollRetransmit-r13', 'type': 'T-PollRetransmit-NB-r13'}, {'name': 'maxRetxThreshold-r13', 'type': 'ENUMERATED', 'values': [('t1', 0), ('t2', 1), ('t3', 2), ('t4', 3), ('t6', 4), ('t8', 5), ('t16', 6), ('t32', 7)]}], 'type': 'SEQUENCE'}, 'UL-CCCH-Message-NB': {'members': [{'name': 'message', 'type': 'UL-CCCH-MessageType-NB'}], 'type': 'SEQUENCE'}, 'UL-CCCH-MessageType-NB': {'members': [{'members': [{'name': 'rrcConnectionReestablishmentRequest-r13', 'type': 'RRCConnectionReestablishmentRequest-NB'}, {'name': 'rrcConnectionRequest-r13', 'type': 'RRCConnectionRequest-NB'}, {'name': 'rrcConnectionResumeRequest-r13', 'type': 'RRCConnectionResumeRequest-NB'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'UL-CarrierConfigDedicated-NB-r13': {'members': [{'name': 'ul-CarrierFreq-r13', 'optional': True, 'type': 'CarrierFreq-NB-r13'}, None], 'type': 'SEQUENCE'}, 'UL-ConfigCommon-NB-r14': {'members': [{'name': 'ul-CarrierFreq-r14', 'type': 'CarrierFreq-NB-r13'}, {'name': 'nprach-ParametersList-r14', 'optional': True, 'type': 'NPRACH-ParametersList-NB-r14'}, None], 'type': 'SEQUENCE'}, 'UL-ConfigCommonList-NB-r14': {'element': {'type': 'UL-ConfigCommon-NB-r14'}, 'size': [(1, 'maxNonAnchorCarriers-NB-r14')], 'type': 'SEQUENCE ' 'OF'}, 'UL-DCCH-Message-NB': {'members': [{'name': 'message', 'type': 'UL-DCCH-MessageType-NB'}], 'type': 'SEQUENCE'}, 'UL-DCCH-MessageType-NB': {'members': [{'members': [{'name': 'rrcConnectionReconfigurationComplete-r13', 'type': 'RRCConnectionReconfigurationComplete-NB'}, {'name': 'rrcConnectionReestablishmentComplete-r13', 'type': 'RRCConnectionReestablishmentComplete-NB'}, {'name': 'rrcConnectionSetupComplete-r13', 'type': 'RRCConnectionSetupComplete-NB'}, {'name': 'securityModeComplete-r13', 'type': 'SecurityModeComplete'}, {'name': 'securityModeFailure-r13', 'type': 'SecurityModeFailure'}, {'name': 'ueCapabilityInformation-r13', 'type': 'UECapabilityInformation-NB'}, {'name': 'ulInformationTransfer-r13', 'type': 'ULInformationTransfer-NB'}, {'name': 'rrcConnectionResumeComplete-r13', 'type': 'RRCConnectionResumeComplete-NB'}, {'name': 'spare8', 'type': 'NULL'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'UL-ReferenceSignalsNPUSCH-NB-r13': {'members': [{'name': 'groupHoppingEnabled-r13', 'type': 'BOOLEAN'}, {'name': 'groupAssignmentNPUSCH-r13', 'restricted-to': [(0, 29)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'ULInformationTransfer-NB': {'members': [{'members': [{'name': 'ulInformationTransfer-r13', 'type': 'ULInformationTransfer-NB-r13-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'ULInformationTransfer-NB-r13-IEs': {'members': [{'name': 'dedicatedInfoNAS-r13', 'type': 'DedicatedInfoNAS'}, {'name': 'lateNonCriticalExtension', 'optional': True, 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlCommon-NB-r13': {'members': [{'name': 'p0-NominalNPUSCH-r13', 'restricted-to': [(-126, 24)], 'type': 'INTEGER'}, {'name': 'alpha-r13', 'type': 'ENUMERATED', 'values': [('al0', 0), ('al04', 1), ('al05', 2), ('al06', 3), ('al07', 4), ('al08', 5), ('al09', 6), ('al1', 7)]}, {'name': 'deltaPreambleMsg3-r13', 'restricted-to': [(-1, 6)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlDedicated-NB-r13': {'members': [{'name': 'p0-UE-NPUSCH-r13', 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}}, 'values': {'maxDRB-NB-r13': {'type': 'INTEGER', 'value': 2}, 'maxNPRACH-Resources-NB-r13': {'type': 'INTEGER', 'value': 3}, 'maxNS-Pmax-NB-r13': {'type': 'INTEGER', 'value': 4}, 'maxNeighCell-SCPTM-NB-r14': {'type': 'INTEGER', 'value': 8}, 'maxNonAnchorCarriers-NB-r14': {'type': 'INTEGER', 'value': 15}, 'maxSC-MTCH-NB-r14': {'type': 'INTEGER', 'value': 64}, 'maxSI-Message-NB-r13': {'type': 'INTEGER', 'value': 8}}}, 'NBIOT-UE-Variables': {'extensibility-implied': False, 'imports': {'EUTRA-UE-Variables': ['VarShortMAC-Input', 'VarShortResumeMAC-Input-r13']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'VarShortMAC-Input-NB-r13': {'type': 'VarShortMAC-Input'}, 'VarShortResumeMAC-Input-NB-r13': {'type': 'VarShortResumeMAC-Input-r13'}}, 'values': {}}, 'PC5-RRC-Definitions': {'extensibility-implied': False, 'imports': {'EUTRA-RRC-Definitions': ['TDD-ConfigSL-r12']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'MasterInformationBlock-SL': {'members': [{'name': 'sl-Bandwidth-r12', 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'tdd-ConfigSL-r12', 'type': 'TDD-ConfigSL-r12'}, {'name': 'directFrameNumber-r12', 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'directSubframeNumber-r12', 'restricted-to': [(0, 9)], 'type': 'INTEGER'}, {'name': 'inCoverage-r12', 'type': 'BOOLEAN'}, {'name': 'reserved-r12', 'size': [19], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'MasterInformationBlock-SL-V2X-r14': {'members': [{'name': 'sl-Bandwidth-r14', 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'tdd-ConfigSL-r14', 'type': 'TDD-ConfigSL-r12'}, {'name': 'directFrameNumber-r14', 'size': [10], 'type': 'BIT ' 'STRING'}, {'name': 'directSubframeNumber-r14', 'restricted-to': [(0, 9)], 'type': 'INTEGER'}, {'name': 'inCoverage-r14', 'type': 'BOOLEAN'}, {'name': 'reserved-r14', 'size': [27], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'SBCCH-SL-BCH-Message': {'members': [{'name': 'message', 'type': 'SBCCH-SL-BCH-MessageType'}], 'type': 'SEQUENCE'}, 'SBCCH-SL-BCH-Message-V2X-r14': {'members': [{'name': 'message', 'type': 'SBCCH-SL-BCH-MessageType-V2X-r14'}], 'type': 'SEQUENCE'}, 'SBCCH-SL-BCH-MessageType': {'type': 'MasterInformationBlock-SL'}, 'SBCCH-SL-BCH-MessageType-V2X-r14': {'type': 'MasterInformationBlock-SL-V2X-r14'}}, 'values': {}}}asn1tools-0.169.0/tests/files/3gpp/rrc_8_6_0.asn000066400000000000000000003573431524544274600211470ustar00rootroot00000000000000-- FILE: @(#)rrc.asn 16.1 11/07/04 -- TS 36.331 V8.12.0 (2010-12) EUTRA-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::= BEGIN BCCH-BCH-Message ::= SEQUENCE { message BCCH-BCH-MessageType } BCCH-BCH-MessageType ::= MasterInformationBlock BCCH-DL-SCH-Message ::= SEQUENCE { message BCCH-DL-SCH-MessageType } BCCH-DL-SCH-MessageType ::= CHOICE { c1 CHOICE { systemInformation SystemInformation, systemInformationBlockType1 SystemInformationBlockType1 }, messageClassExtension SEQUENCE {} } PCCH-Message ::= SEQUENCE { message PCCH-MessageType } PCCH-MessageType ::= CHOICE { c1 CHOICE { paging Paging }, messageClassExtension SEQUENCE {} } DL-CCCH-Message ::= SEQUENCE { message DL-CCCH-MessageType } DL-CCCH-MessageType ::= CHOICE { c1 CHOICE { rrcConnectionReestablishment RRCConnectionReestablishment, rrcConnectionReestablishmentReject RRCConnectionReestablishmentReject, rrcConnectionReject RRCConnectionReject, rrcConnectionSetup RRCConnectionSetup }, messageClassExtension SEQUENCE {} } DL-DCCH-Message ::= SEQUENCE { message DL-DCCH-MessageType } DL-DCCH-MessageType ::= CHOICE { c1 CHOICE { csfbParametersResponseCDMA2000 CSFBParametersResponseCDMA2000, dlInformationTransfer DLInformationTransfer, handoverFromEUTRAPreparationRequest HandoverFromEUTRAPreparationRequest, mobilityFromEUTRACommand MobilityFromEUTRACommand, rrcConnectionReconfiguration RRCConnectionReconfiguration, rrcConnectionRelease RRCConnectionRelease, securityModeCommand SecurityModeCommand, ueCapabilityEnquiry UECapabilityEnquiry, counterCheck CounterCheck, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, messageClassExtension SEQUENCE {} } UL-CCCH-Message ::= SEQUENCE { message UL-CCCH-MessageType } UL-CCCH-MessageType ::= CHOICE { c1 CHOICE { rrcConnectionReestablishmentRequest RRCConnectionReestablishmentRequest, rrcConnectionRequest RRCConnectionRequest }, messageClassExtension SEQUENCE {} } UL-DCCH-Message ::= SEQUENCE { message UL-DCCH-MessageType } UL-DCCH-MessageType ::= CHOICE { c1 CHOICE { csfbParametersRequestCDMA2000 CSFBParametersRequestCDMA2000, measurementReport MeasurementReport, rrcConnectionReconfigurationComplete RRCConnectionReconfigurationComplete, rrcConnectionReestablishmentComplete RRCConnectionReestablishmentComplete, rrcConnectionSetupComplete RRCConnectionSetupComplete, securityModeComplete SecurityModeComplete, securityModeFailure SecurityModeFailure, ueCapabilityInformation UECapabilityInformation, ulHandoverPreparationTransfer ULHandoverPreparationTransfer, ulInformationTransfer ULInformationTransfer, counterCheckResponse CounterCheckResponse, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, messageClassExtension SEQUENCE {} } CounterCheck ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { counterCheck-r8 CounterCheck-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } CounterCheck-r8-IEs ::= SEQUENCE { drb-CountMSB-InfoList DRB-CountMSB-InfoList, nonCriticalExtension SEQUENCE {} OPTIONAL --Need OP } DRB-CountMSB-InfoList::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-CountMSB-Info DRB-CountMSB-Info ::= SEQUENCE { drb-Identity DRB-Identity, countMSB-Uplink INTEGER(0..33554431), countMSB-Downlink INTEGER(0..33554431) } CounterCheckResponse ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { counterCheckResponse-r8 CounterCheckResponse-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } CounterCheckResponse-r8-IEs ::= SEQUENCE { drb-CountInfoList DRB-CountInfoList, nonCriticalExtension SEQUENCE {} OPTIONAL } DRB-CountInfoList ::= SEQUENCE (SIZE (0..maxDRB)) OF DRB-CountInfo DRB-CountInfo ::= SEQUENCE { drb-Identity DRB-Identity, count-Uplink INTEGER(0..4294967295), count-Downlink INTEGER(0..4294967295) } CSFBParametersRequestCDMA2000 ::= SEQUENCE { criticalExtensions CHOICE { csfbParametersRequestCDMA2000-r8 CSFBParametersRequestCDMA2000-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } CSFBParametersRequestCDMA2000-r8-IEs ::= SEQUENCE { nonCriticalExtension SEQUENCE {} OPTIONAL } CSFBParametersResponseCDMA2000 ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { csfbParametersResponseCDMA2000-r8 CSFBParametersResponseCDMA2000-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } CSFBParametersResponseCDMA2000-r8-IEs ::= SEQUENCE { rand RAND-CDMA2000, mobilityParameters MobilityParametersCDMA2000, nonCriticalExtension SEQUENCE {} OPTIONAL --Need OP } DLInformationTransfer ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { dlInformationTransfer-r8 DLInformationTransfer-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } DLInformationTransfer-r8-IEs ::= SEQUENCE { dedicatedInfoType CHOICE { dedicatedInfoNAS DedicatedInfoNAS, dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000, dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000 }, nonCriticalExtension SEQUENCE {} OPTIONAL --Need OP } HandoverFromEUTRAPreparationRequest ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { handoverFromEUTRAPreparationRequest-r8 HandoverFromEUTRAPreparationRequest-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } HandoverFromEUTRAPreparationRequest-r8-IEs ::= SEQUENCE { cdma2000-Type CDMA2000-Type, rand RAND-CDMA2000 OPTIONAL, -- Cond cdma2000-Type mobilityParameters MobilityParametersCDMA2000 OPTIONAL, -- Cond cdma2000-Type nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } MasterInformationBlock ::= SEQUENCE { dl-Bandwidth ENUMERATED { n6, n15, n25, n50, n75, n100}, phich-Config PHICH-Config, systemFrameNumber BIT STRING (SIZE (8)), spare BIT STRING (SIZE (10)) } MeasurementReport ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ measurementReport-r8 MeasurementReport-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } MeasurementReport-r8-IEs ::= SEQUENCE { measResults MeasResults, nonCriticalExtension SEQUENCE {} OPTIONAL } MobilityFromEUTRACommand ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ mobilityFromEUTRACommand-r8 MobilityFromEUTRACommand-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } MobilityFromEUTRACommand-r8-IEs ::= SEQUENCE { cs-FallbackIndicator BOOLEAN, purpose CHOICE{ handover Handover, cellChangeOrder CellChangeOrder }, nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } Handover ::= SEQUENCE { targetRAT-Type ENUMERATED { utra, geran, cdma2000-1XRTT, cdma2000-HRPD, spare4, spare3, spare2, spare1, ...}, targetRAT-MessageContainer OCTET STRING, nas-SecurityParamFromEUTRA OCTET STRING (SIZE (1)) OPTIONAL, -- Cond UTRAGERAN systemInformation SI-OrPSI-GERAN OPTIONAL -- Cond PSHO } CellChangeOrder ::= SEQUENCE { t304 ENUMERATED { ms100, ms200, ms500, ms1000, ms2000, ms4000, ms8000, spare1}, targetRAT-Type CHOICE { geran SEQUENCE { physCellId PhysCellIdGERAN, carrierFreq CarrierFreqGERAN, networkControlOrder BIT STRING (SIZE (2)) OPTIONAL, -- Need OP systemInformation SI-OrPSI-GERAN OPTIONAL -- Need OP }, ... } } SI-OrPSI-GERAN ::= CHOICE { si SystemInfoListGERAN, psi SystemInfoListGERAN } SystemInfoListGERAN ::= SEQUENCE (SIZE (1..maxGERAN-SI)) OF OCTET STRING (SIZE (1..23)) Paging ::= SEQUENCE { pagingRecordList PagingRecordList OPTIONAL, -- Need ON systemInfoModification ENUMERATED {true} OPTIONAL, -- Need ON etws-Indication ENUMERATED {true} OPTIONAL, -- Need ON nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } PagingRecordList ::= SEQUENCE (SIZE (1..maxPageRec)) OF PagingRecord PagingRecord ::= SEQUENCE { ue-Identity PagingUE-Identity, cn-Domain ENUMERATED {ps, cs}, ... } PagingUE-Identity ::= CHOICE { s-TMSI S-TMSI, imsi IMSI, ... } IMSI ::= SEQUENCE (SIZE (6..21)) OF IMSI-Digit IMSI-Digit::= INTEGER (0..9) RRCConnectionReconfiguration ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ rrcConnectionReconfiguration-r8 RRCConnectionReconfiguration-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReconfiguration-r8-IEs ::= SEQUENCE { measConfig MeasConfig OPTIONAL, -- Need ON mobilityControlInfo MobilityControlInfo OPTIONAL, -- Cond HO dedicatedInfoNASList SEQUENCE (SIZE(1..maxDRB)) OF DedicatedInfoNAS OPTIONAL, -- Cond nonHO radioResourceConfigDedicated RadioResourceConfigDedicated OPTIONAL, -- Cond HO-toEUTRA securityConfigHO SecurityConfigHO OPTIONAL, -- Cond HO nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } SecurityConfigHO ::= SEQUENCE { handoverType CHOICE { intraLTE SEQUENCE { securityAlgorithmConfig SecurityAlgorithmConfig OPTIONAL, -- Need OP keyChangeIndicator BOOLEAN, nextHopChainingCount NextHopChainingCount }, interRAT SEQUENCE { securityAlgorithmConfig SecurityAlgorithmConfig, nas-SecurityParamToEUTRA OCTET STRING (SIZE(6)) } }, ... } RRCConnectionReconfigurationComplete ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { rrcConnectionReconfigurationComplete-r8 RRCConnectionReconfigurationComplete-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReconfigurationComplete-r8-IEs ::= SEQUENCE { nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionReestablishment ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ rrcConnectionReestablishment-r8 RRCConnectionReestablishment-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReestablishment-r8-IEs ::= SEQUENCE { radioResourceConfigDedicated RadioResourceConfigDedicated, nextHopChainingCount NextHopChainingCount, nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } RRCConnectionReestablishmentComplete ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { rrcConnectionReestablishmentComplete-r8 RRCConnectionReestablishmentComplete-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReestablishmentComplete-r8-IEs ::= SEQUENCE { nonCriticalExtension SEQUENCE {} OPTIONAL } RRCConnectionReestablishmentReject ::= SEQUENCE { criticalExtensions CHOICE { rrcConnectionReestablishmentReject-r8 RRCConnectionReestablishmentReject-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReestablishmentReject-r8-IEs ::= SEQUENCE { nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } RRCConnectionReestablishmentRequest ::= SEQUENCE { criticalExtensions CHOICE { rrcConnectionReestablishmentRequest-r8 RRCConnectionReestablishmentRequest-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReestablishmentRequest-r8-IEs ::= SEQUENCE { ue-Identity ReestabUE-Identity, reestablishmentCause ReestablishmentCause, spare BIT STRING (SIZE (2)) } ReestabUE-Identity ::= SEQUENCE { c-RNTI C-RNTI, physCellId PhysCellId, shortMAC-I ShortMAC-I } ReestablishmentCause ::= ENUMERATED { reconfigurationFailure, handoverFailure, otherFailure, spare1} RRCConnectionReject ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { rrcConnectionReject-r8 RRCConnectionReject-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionReject-r8-IEs ::= SEQUENCE { waitTime INTEGER (1..16), nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } RRCConnectionRelease ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { rrcConnectionRelease-r8 RRCConnectionRelease-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionRelease-r8-IEs ::= SEQUENCE { releaseCause ReleaseCause, redirectedCarrierInfo RedirectedCarrierInfo OPTIONAL, -- Need ON idleModeMobilityControlInfo IdleModeMobilityControlInfo OPTIONAL, -- Need OP nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } ReleaseCause ::= ENUMERATED {loadBalancingTAUrequired, other,spare2, spare1 } RedirectedCarrierInfo ::= CHOICE { eutra ARFCN-ValueEUTRA, geran CarrierFreqsGERAN, utra-FDD ARFCN-ValueUTRA, utra-TDD ARFCN-ValueUTRA, cdma2000-HRPD CarrierFreqCDMA2000, cdma2000-1xRTT CarrierFreqCDMA2000, ... } IdleModeMobilityControlInfo ::= SEQUENCE { freqPriorityListEUTRA FreqPriorityListEUTRA OPTIONAL, -- Need ON freqPriorityListGERAN FreqsPriorityListGERAN OPTIONAL, -- Need ON freqPriorityListUTRA-FDD FreqPriorityListUTRA-FDD OPTIONAL, -- Need ON freqPriorityListUTRA-TDD FreqPriorityListUTRA-TDD OPTIONAL, -- Need ON bandClassPriorityListHRPD BandClassPriorityListHRPD OPTIONAL, -- Need ON bandClassPriorityList1XRTT BandClassPriorityList1XRTT OPTIONAL, -- Need ON t320 ENUMERATED { min5, min10, min20, min30, min60, min120, min180, spare1} OPTIONAL, -- Need OR ... } FreqPriorityListEUTRA ::= SEQUENCE (SIZE (1..maxFreq)) OF FreqPriorityEUTRA FreqPriorityEUTRA ::= SEQUENCE { carrierFreq ARFCN-ValueEUTRA, cellReselectionPriority CellReselectionPriority } FreqsPriorityListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF FreqsPriorityGERAN FreqsPriorityGERAN ::= SEQUENCE { carrierFreqs CarrierFreqsGERAN, cellReselectionPriority CellReselectionPriority } FreqPriorityListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF FreqPriorityUTRA-FDD FreqPriorityUTRA-FDD ::= SEQUENCE { carrierFreq ARFCN-ValueUTRA, cellReselectionPriority CellReselectionPriority } FreqPriorityListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF FreqPriorityUTRA-TDD FreqPriorityUTRA-TDD ::= SEQUENCE { carrierFreq ARFCN-ValueUTRA, cellReselectionPriority CellReselectionPriority } BandClassPriorityListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriorityHRPD BandClassPriorityHRPD ::= SEQUENCE { bandClass BandclassCDMA2000, cellReselectionPriority CellReselectionPriority } BandClassPriorityList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassPriority1XRTT BandClassPriority1XRTT ::= SEQUENCE { bandClass BandclassCDMA2000, cellReselectionPriority CellReselectionPriority } RRCConnectionRequest ::= SEQUENCE { criticalExtensions CHOICE { rrcConnectionRequest-r8 RRCConnectionRequest-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionRequest-r8-IEs ::= SEQUENCE { ue-Identity InitialUE-Identity, establishmentCause EstablishmentCause, spare BIT STRING (SIZE (1)) } InitialUE-Identity ::= CHOICE { s-TMSI S-TMSI, randomValue BIT STRING (SIZE (40)) } EstablishmentCause ::= ENUMERATED { emergency, highPriorityAccess, mt-Access, mo-Signalling, mo-Data, spare3, spare2, spare1} RRCConnectionSetup ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { rrcConnectionSetup-r8 RRCConnectionSetup-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionSetup-r8-IEs ::= SEQUENCE { radioResourceConfigDedicated RadioResourceConfigDedicated, nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } RRCConnectionSetupComplete ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ rrcConnectionSetupComplete-r8 RRCConnectionSetupComplete-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } RRCConnectionSetupComplete-r8-IEs ::= SEQUENCE { selectedPLMN-Identity INTEGER (1..6), registeredMME RegisteredMME OPTIONAL, dedicatedInfoNAS DedicatedInfoNAS, nonCriticalExtension SEQUENCE {} OPTIONAL } RegisteredMME ::= SEQUENCE { plmn-Identity PLMN-Identity OPTIONAL, mmegi BIT STRING (SIZE (16)), mmec MMEC } SecurityModeCommand ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ securityModeCommand-r8 SecurityModeCommand-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } SecurityModeCommand-r8-IEs ::= SEQUENCE { securityConfigSMC SecurityConfigSMC, nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } SecurityConfigSMC ::= SEQUENCE { securityAlgorithmConfig SecurityAlgorithmConfig, ... } SecurityModeComplete ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { securityModeComplete-r8 SecurityModeComplete-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } SecurityModeComplete-r8-IEs ::= SEQUENCE { nonCriticalExtension SEQUENCE {} OPTIONAL } SecurityModeFailure ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { securityModeFailure-r8 SecurityModeFailure-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } SecurityModeFailure-r8-IEs ::= SEQUENCE { nonCriticalExtension SEQUENCE {} OPTIONAL } SystemInformation ::= SEQUENCE { criticalExtensions CHOICE { systemInformation-r8 SystemInformation-r8-IEs, criticalExtensionsFuture SEQUENCE {} } } SystemInformation-r8-IEs ::= SEQUENCE { sib-TypeAndInfo SEQUENCE (SIZE (1..maxSIB)) OF CHOICE { sib2 SystemInformationBlockType2, sib3 SystemInformationBlockType3, sib4 SystemInformationBlockType4, sib5 SystemInformationBlockType5, sib6 SystemInformationBlockType6, sib7 SystemInformationBlockType7, sib8 SystemInformationBlockType8, sib9 SystemInformationBlockType9, sib10 SystemInformationBlockType10, sib11 SystemInformationBlockType11, ... }, nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } SystemInformationBlockType1 ::= SEQUENCE { cellAccessRelatedInfo SEQUENCE { plmn-IdentityList PLMN-IdentityList, trackingAreaCode TrackingAreaCode, cellIdentity CellIdentity, cellBarred ENUMERATED {barred, notBarred}, intraFreqReselection ENUMERATED {allowed, notAllowed}, csg-Indication BOOLEAN, csg-Identity BIT STRING (SIZE (27)) OPTIONAL -- Need OR }, cellSelectionInfo SEQUENCE { q-RxLevMin Q-RxLevMin, q-RxLevMinOffset INTEGER (1..8) OPTIONAL -- Need OP }, p-Max P-Max OPTIONAL, -- Need OP freqBandIndicator INTEGER (1..64), schedulingInfoList SchedulingInfoList, tdd-Config TDD-Config OPTIONAL, -- Cond TDD si-WindowLength ENUMERATED { ms1, ms2, ms5, ms10, ms15, ms20, ms40}, systemInfoValueTag INTEGER (0..31), nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } PLMN-IdentityList ::= SEQUENCE (SIZE (1..6)) OF PLMN-IdentityInfo PLMN-IdentityInfo ::= SEQUENCE { plmn-Identity PLMN-Identity, cellReservedForOperatorUse ENUMERATED {reserved, notReserved} } SchedulingInfoList ::= SEQUENCE (SIZE (1..maxSI-Message)) OF SchedulingInfo SchedulingInfo ::= SEQUENCE { si-Periodicity ENUMERATED { rf8, rf16, rf32, rf64, rf128, rf256, rf512}, sib-MappingInfo SIB-MappingInfo } SIB-MappingInfo ::= SEQUENCE (SIZE (0..maxSIB-1)) OF SIB-Type SIB-Type ::= ENUMERATED { sibType3, sibType4, sibType5, sibType6, sibType7, sibType8, sibType9, sibType10, sibType11, spare7, spare6, spare5, spare4, spare3, spare2, spare1, ...} UECapabilityEnquiry ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE { ueCapabilityEnquiry-r8 UECapabilityEnquiry-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UECapabilityEnquiry-r8-IEs ::= SEQUENCE { ue-CapabilityRequest UE-CapabilityRequest, nonCriticalExtension SEQUENCE {} OPTIONAL -- Need OP } UE-CapabilityRequest ::= SEQUENCE (SIZE (1..maxRAT-Capabilities)) OF RAT-Type UECapabilityInformation ::= SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { c1 CHOICE{ ueCapabilityInformation-r8 UECapabilityInformation-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UECapabilityInformation-r8-IEs ::= SEQUENCE { ue-CapabilityRAT-ContainerList UE-CapabilityRAT-ContainerList, nonCriticalExtension SEQUENCE {} OPTIONAL } ULHandoverPreparationTransfer ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { ulHandoverPreparationTransfer-r8 ULHandoverPreparationTransfer-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } ULHandoverPreparationTransfer-r8-IEs ::= SEQUENCE { cdma2000-Type CDMA2000-Type, meid BIT STRING (SIZE (56)) OPTIONAL, dedicatedInfo DedicatedInfoCDMA2000, nonCriticalExtension SEQUENCE {} OPTIONAL } ULInformationTransfer ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE { ulInformationTransfer-r8 ULInformationTransfer-r8-IEs, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } ULInformationTransfer-r8-IEs ::= SEQUENCE { dedicatedInfoType CHOICE { dedicatedInfoNAS DedicatedInfoNAS, dedicatedInfoCDMA2000-1XRTT DedicatedInfoCDMA2000, dedicatedInfoCDMA2000-HRPD DedicatedInfoCDMA2000 }, nonCriticalExtension SEQUENCE {} OPTIONAL } SystemInformationBlockType2 ::= SEQUENCE { ac-BarringInfo SEQUENCE { ac-BarringForEmergency BOOLEAN, ac-BarringForMO-Signalling AC-BarringConfig OPTIONAL, -- Need OP ac-BarringForMO-Data AC-BarringConfig OPTIONAL -- Need OP } OPTIONAL, -- Need OP radioResourceConfigCommon RadioResourceConfigCommonSIB, ue-TimersAndConstants UE-TimersAndConstants, freqInfo SEQUENCE { ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL, -- Need OP ul-Bandwidth ENUMERATED {n6, n15, n25, n50, n75, n100} OPTIONAL, -- Need OP additionalSpectrumEmission AdditionalSpectrumEmission }, mbsfn-SubframeConfigList MBSFN-SubframeConfigList OPTIONAL, -- Need OR timeAlignmentTimerCommon TimeAlignmentTimer, ... } AC-BarringConfig ::= SEQUENCE { ac-BarringFactor ENUMERATED { p00, p05, p10, p15, p20, p25, p30, p40, p50, p60, p70, p75, p80, p85, p90, p95}, ac-BarringTime ENUMERATED {s4, s8, s16, s32, s64, s128, s256, s512}, ac-BarringForSpecialAC BIT STRING (SIZE(5)) } MBSFN-SubframeConfigList ::= SEQUENCE (SIZE (1..maxMBSFN-Allocations)) OF MBSFN-SubframeConfig MBSFN-SubframeConfig ::= SEQUENCE { radioframeAllocationPeriod ENUMERATED {n1, n2, n4, n8, n16, n32}, radioframeAllocationOffset INTEGER (0..7), subframeAllocation CHOICE { oneFrame BIT STRING (SIZE(6)), fourFrames BIT STRING (SIZE(24)) } } SystemInformationBlockType3 ::= SEQUENCE { cellReselectionInfoCommon SEQUENCE { q-Hyst ENUMERATED { dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, dB12, dB14, dB16, dB18, dB20, dB22, dB24}, speedStateReselectionPars SEQUENCE { mobilityStateParameters MobilityStateParameters, q-HystSF SEQUENCE { sf-Medium ENUMERATED { dB-6, dB-4, dB-2, dB0}, sf-High ENUMERATED { dB-6, dB-4, dB-2, dB0} } } OPTIONAL -- Need OP }, cellReselectionServingFreqInfo SEQUENCE { s-NonIntraSearch ReselectionThreshold OPTIONAL, -- Need OP threshServingLow ReselectionThreshold, cellReselectionPriority CellReselectionPriority }, intraFreqCellReselectionInfo SEQUENCE { q-RxLevMin Q-RxLevMin, p-Max P-Max OPTIONAL, -- Need OP s-IntraSearch ReselectionThreshold OPTIONAL, -- Need OP allowedMeasBandwidth AllowedMeasBandwidth OPTIONAL, -- Need OP presenceAntennaPort1 PresenceAntennaPort1, neighCellConfig NeighCellConfig, t-ReselectionEUTRA T-Reselection, t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL -- Need OP }, ... } SystemInformationBlockType4 ::= SEQUENCE { intraFreqNeighCellList IntraFreqNeighCellList OPTIONAL, -- Need OR intraFreqBlackCellList IntraFreqBlackCellList OPTIONAL, -- Need OR csg-PhysCellIdRange PhysCellIdRange OPTIONAL, -- Cond CSG ... } IntraFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellIntra)) OF IntraFreqNeighCellInfo IntraFreqNeighCellInfo ::= SEQUENCE { physCellId PhysCellId, q-OffsetCell Q-OffsetRange, ... } IntraFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange SystemInformationBlockType5 ::= SEQUENCE { interFreqCarrierFreqList InterFreqCarrierFreqList, ... } InterFreqCarrierFreqList ::= SEQUENCE (SIZE (1..maxFreq)) OF InterFreqCarrierFreqInfo InterFreqCarrierFreqInfo ::= SEQUENCE { dl-CarrierFreq ARFCN-ValueEUTRA, q-RxLevMin Q-RxLevMin, p-Max P-Max OPTIONAL, -- Need OP t-ReselectionEUTRA T-Reselection, t-ReselectionEUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP threshX-High ReselectionThreshold, threshX-Low ReselectionThreshold, allowedMeasBandwidth AllowedMeasBandwidth, presenceAntennaPort1 PresenceAntennaPort1, cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP neighCellConfig NeighCellConfig, q-OffsetFreq Q-OffsetRange DEFAULT dB0, interFreqNeighCellList InterFreqNeighCellList OPTIONAL, -- Need OR interFreqBlackCellList InterFreqBlackCellList OPTIONAL, -- Need OR ... } InterFreqNeighCellList ::= SEQUENCE (SIZE (1..maxCellInter)) OF InterFreqNeighCellInfo InterFreqNeighCellInfo ::= SEQUENCE { physCellId PhysCellId, q-OffsetCell Q-OffsetRange } InterFreqBlackCellList ::= SEQUENCE (SIZE (1..maxCellBlack)) OF PhysCellIdRange SystemInformationBlockType6 ::= SEQUENCE { carrierFreqListUTRA-FDD CarrierFreqListUTRA-FDD OPTIONAL, -- Need OR carrierFreqListUTRA-TDD CarrierFreqListUTRA-TDD OPTIONAL, -- Need OR t-ReselectionUTRA T-Reselection, t-ReselectionUTRA-SF SpeedStateScaleFactors OPTIONAL, -- Need OP ... } CarrierFreqListUTRA-FDD ::= SEQUENCE (SIZE (1..maxUTRA-FDD-Carrier)) OF CarrierFreqUTRA-FDD CarrierFreqUTRA-FDD ::= SEQUENCE { carrierFreq ARFCN-ValueUTRA, cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP threshX-High ReselectionThreshold, threshX-Low ReselectionThreshold, q-RxLevMin INTEGER (-60..-13), p-MaxUTRA INTEGER (-50..33), q-QualMin INTEGER (-24..0), ... } CarrierFreqListUTRA-TDD ::= SEQUENCE (SIZE (1..maxUTRA-TDD-Carrier)) OF CarrierFreqUTRA-TDD CarrierFreqUTRA-TDD ::= SEQUENCE { carrierFreq ARFCN-ValueUTRA, cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP threshX-High ReselectionThreshold, threshX-Low ReselectionThreshold, q-RxLevMin INTEGER (-60..-13), p-MaxUTRA INTEGER (-50..33), ... } SystemInformationBlockType7 ::= SEQUENCE { t-ReselectionGERAN T-Reselection, t-ReselectionGERAN-SF SpeedStateScaleFactors OPTIONAL, -- Need OR carrierFreqsInfoList CarrierFreqsInfoListGERAN OPTIONAL, -- Need OR ... } CarrierFreqsInfoListGERAN ::= SEQUENCE (SIZE (1..maxGNFG)) OF CarrierFreqsInfoGERAN CarrierFreqsInfoGERAN ::= SEQUENCE { carrierFreqs CarrierFreqsGERAN, commonInfo SEQUENCE { cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP ncc-Permitted BIT STRING (SIZE (8)), q-RxLevMin INTEGER (0..45), p-MaxGERAN INTEGER (0..39) OPTIONAL, -- Need OP threshX-High ReselectionThreshold, threshX-Low ReselectionThreshold }, ... } SystemInformationBlockType8 ::= SEQUENCE { systemTimeInfo SystemTimeInfoCDMA2000 OPTIONAL, -- Need OR searchWindowSize INTEGER (0..15) OPTIONAL, -- Need OR parametersHRPD SEQUENCE { preRegistrationInfoHRPD PreRegistrationInfoHRPD, cellReselectionParametersHRPD CellReselectionParametersCDMA2000 OPTIONAL -- Need OR } OPTIONAL, -- Need OR parameters1XRTT SEQUENCE { csfb-RegistrationParam1XRTT CSFB-RegistrationParam1XRTT OPTIONAL, -- Need OP longCodeState1XRTT BIT STRING (SIZE (42)) OPTIONAL, -- Need OR cellReselectionParameters1XRTT CellReselectionParametersCDMA2000 OPTIONAL -- Need OR } OPTIONAL, -- Need OR ... } CellReselectionParametersCDMA2000 ::= SEQUENCE { bandClassList BandClassListCDMA2000, neighCellList NeighCellListCDMA2000, t-ReselectionCDMA2000 T-Reselection, t-ReselectionCDMA2000-SF SpeedStateScaleFactors OPTIONAL -- Need OP } NeighCellListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000 NeighCellCDMA2000 ::= SEQUENCE { bandClass BandclassCDMA2000, neighCellsPerFreqList NeighCellsPerBandclassListCDMA2000 } NeighCellsPerBandclassListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellsPerBandclassCDMA2000 NeighCellsPerBandclassCDMA2000 ::= SEQUENCE { arfcn ARFCN-ValueCDMA2000, physCellIdList PhysCellIdListCDMA2000 } PhysCellIdListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdCDMA2000 BandClassListCDMA2000 ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandClassInfoCDMA2000 BandClassInfoCDMA2000 ::= SEQUENCE { bandClass BandclassCDMA2000, cellReselectionPriority CellReselectionPriority OPTIONAL, -- Need OP threshX-High INTEGER (0..63), threshX-Low INTEGER (0..63), ... } SystemInformationBlockType9 ::= SEQUENCE { hnb-Name OCTET STRING (SIZE(1..48)) OPTIONAL, -- Need OR ... } SystemInformationBlockType10 ::= SEQUENCE { messageIdentifier BIT STRING (SIZE (16)), serialNumber BIT STRING (SIZE (16)), warningType OCTET STRING (SIZE (2)), warningSecurityInfo OCTET STRING (SIZE (50)) OPTIONAL, -- Need OP ... } SystemInformationBlockType11 ::= SEQUENCE { messageIdentifier BIT STRING (SIZE (16)), serialNumber BIT STRING (SIZE (16)), warningMessageSegmentType ENUMERATED {notLastSegment, lastSegment}, warningMessageSegmentNumber INTEGER (0..63), warningMessageSegment OCTET STRING, dataCodingScheme OCTET STRING (SIZE (1)) OPTIONAL, -- Cond Segment1 ... } AntennaInfoCommon ::= SEQUENCE { antennaPortsCount ENUMERATED {an1, an2, an4, spare1} } AntennaInfoDedicated ::= SEQUENCE { transmissionMode ENUMERATED { tm1, tm2, tm3, tm4, tm5, tm6, tm7, spare1}, codebookSubsetRestriction CHOICE { n2TxAntenna-tm3 BIT STRING (SIZE (2)), n4TxAntenna-tm3 BIT STRING (SIZE (4)), n2TxAntenna-tm4 BIT STRING (SIZE (6)), n4TxAntenna-tm4 BIT STRING (SIZE (64)), n2TxAntenna-tm5 BIT STRING (SIZE (4)), n4TxAntenna-tm5 BIT STRING (SIZE (16)), n2TxAntenna-tm6 BIT STRING (SIZE (4)), n4TxAntenna-tm6 BIT STRING (SIZE (16)) } OPTIONAL, -- Cond TM ue-TransmitAntennaSelection CHOICE{ release NULL, setup ENUMERATED {closedLoop, openLoop} } } CQI-ReportConfig ::= SEQUENCE { cqi-ReportModeAperiodic ENUMERATED { rm12, rm20, rm22, rm30, rm31, spare3, spare2, spare1} OPTIONAL, -- Need OR nomPDSCH-RS-EPRE-Offset INTEGER (-1..6), cqi-ReportPeriodic CQI-ReportPeriodic OPTIONAL -- Need ON } CQI-ReportPeriodic ::= CHOICE { release NULL, setup SEQUENCE { cqi-PUCCH-ResourceIndex INTEGER (0.. 1185), cqi-pmi-ConfigIndex INTEGER (0..1023), cqi-FormatIndicatorPeriodic CHOICE { widebandCQI NULL, subbandCQI SEQUENCE { k INTEGER (1..4) } }, ri-ConfigIndex INTEGER (0..1023) OPTIONAL, -- Need OR simultaneousAckNackAndCQI BOOLEAN } } DRB-Identity ::= INTEGER (1..32) LogicalChannelConfig ::= SEQUENCE { ul-SpecificParameters SEQUENCE { priority INTEGER (1..16), prioritisedBitRate ENUMERATED { kBps0, kBps8, kBps16, kBps32, kBps64, kBps128, kBps256, infinity, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}, bucketSizeDuration ENUMERATED { ms50, ms100, ms150, ms300, ms500, ms1000, spare2, spare1}, logicalChannelGroup INTEGER (0..3) OPTIONAL -- Need OR } OPTIONAL, -- Cond UL ... } MAC-MainConfig ::= SEQUENCE { ul-SCH-Config SEQUENCE { maxHARQ-Tx ENUMERATED { n1, n2, n3, n4, n5, n6, n7, n8, n10, n12, n16, n20, n24, n28, spare2, spare1} OPTIONAL, -- Need ON periodicBSR-Timer ENUMERATED { sf5, sf10, sf16, sf20, sf32, sf40, sf64, sf80, sf128, sf160, sf320, sf640, sf1280, sf2560, infinity, spare1} OPTIONAL, -- Need ON retxBSR-Timer ENUMERATED { sf320, sf640, sf1280, sf2560, sf5120, sf10240, spare2, spare1}, ttiBundling BOOLEAN } OPTIONAL, -- Need ON drx-Config DRX-Config OPTIONAL, -- Need ON timeAlignmentTimerDedicated TimeAlignmentTimer, phr-Config CHOICE { release NULL, setup SEQUENCE { periodicPHR-Timer ENUMERATED {sf10, sf20, sf50, sf100, sf200, sf500, sf1000, infinity}, prohibitPHR-Timer ENUMERATED {sf0, sf10, sf20, sf50, sf100, sf200, sf500, sf1000}, dl-PathlossChange ENUMERATED {dB1, dB3, dB6, infinity} } } OPTIONAL, -- Need ON ... } DRX-Config ::= CHOICE { release NULL, setup SEQUENCE { onDurationTimer ENUMERATED { psf1, psf2, psf3, psf4, psf5, psf6, psf8, psf10, psf20, psf30, psf40, psf50, psf60, psf80, psf100, psf200}, drx-InactivityTimer ENUMERATED { psf1, psf2, psf3, psf4, psf5, psf6, psf8, psf10, psf20, psf30, psf40, psf50, psf60, psf80, psf100, psf200, psf300, psf500, psf750, psf1280, psf1920, psf2560, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}, drx-RetransmissionTimer ENUMERATED { psf1, psf2, psf4, psf6, psf8, psf16, psf24, psf33}, longDRX-CycleStartOffset CHOICE { sf10 INTEGER(0..9), sf20 INTEGER(0..19), sf32 INTEGER(0..31), sf40 INTEGER(0..39), sf64 INTEGER(0..63), sf80 INTEGER(0..79), sf128 INTEGER(0..127), sf160 INTEGER(0..159), sf256 INTEGER(0..255), sf320 INTEGER(0..319), sf512 INTEGER(0..511), sf640 INTEGER(0..639), sf1024 INTEGER(0..1023), sf1280 INTEGER(0..1279), sf2048 INTEGER(0..2047), sf2560 INTEGER(0..2559) }, shortDRX SEQUENCE { shortDRX-Cycle ENUMERATED { sf2, sf5, sf8, sf10, sf16, sf20, sf32, sf40, sf64, sf80, sf128, sf160, sf256, sf320, sf512, sf640}, drxShortCycleTimer INTEGER (1..16) } OPTIONAL -- Need OR } } PDCP-Config ::= SEQUENCE { discardTimer ENUMERATED { ms50, ms100, ms150, ms300, ms500, ms750, ms1500, infinity } OPTIONAL, -- Cond Setup rlc-AM SEQUENCE { statusReportRequired BOOLEAN } OPTIONAL, -- Cond Rlc-AM rlc-UM SEQUENCE { pdcp-SN-Size ENUMERATED {len7bits, len12bits} } OPTIONAL, -- Cond Rlc-UM headerCompression CHOICE { notUsed NULL, rohc SEQUENCE { maxCID INTEGER (1..16383) DEFAULT 15, profiles SEQUENCE { profile0x0001 BOOLEAN, profile0x0002 BOOLEAN, profile0x0003 BOOLEAN, profile0x0004 BOOLEAN, profile0x0006 BOOLEAN, profile0x0101 BOOLEAN, profile0x0102 BOOLEAN, profile0x0103 BOOLEAN, profile0x0104 BOOLEAN }, ... } }, ... } PDSCH-ConfigCommon::= SEQUENCE { referenceSignalPower INTEGER (-60..50), p-b INTEGER (0..3) } PDSCH-ConfigDedicated::= SEQUENCE { p-a ENUMERATED { dB-6, dB-4dot77, dB-3, dB-1dot77, dB0, dB1, dB2, dB3 } } PHICH-Config ::= SEQUENCE { phich-Duration ENUMERATED {normal, extended}, phich-Resource ENUMERATED {oneSixth, half, one, two} } PhysicalConfigDedicated ::= SEQUENCE { pdsch-ConfigDedicated PDSCH-ConfigDedicated OPTIONAL, -- Need ON pucch-ConfigDedicated PUCCH-ConfigDedicated OPTIONAL, -- Need ON pusch-ConfigDedicated PUSCH-ConfigDedicated OPTIONAL, -- Need ON uplinkPowerControlDedicated UplinkPowerControlDedicated OPTIONAL, -- Need ON tpc-PDCCH-ConfigPUCCH TPC-PDCCH-Config OPTIONAL, -- Need ON tpc-PDCCH-ConfigPUSCH TPC-PDCCH-Config OPTIONAL, -- Need ON cqi-ReportConfig CQI-ReportConfig OPTIONAL, -- Need ON soundingRS-UL-ConfigDedicated SoundingRS-UL-ConfigDedicated OPTIONAL, -- Need ON antennaInfo CHOICE { explicitValue AntennaInfoDedicated, defaultValue NULL } OPTIONAL, -- Need ON schedulingRequestConfig SchedulingRequestConfig OPTIONAL, -- Need ON ... } P-Max ::= INTEGER (-30..33) PRACH-ConfigSIB ::= SEQUENCE { rootSequenceIndex INTEGER (0..837), prach-ConfigInfo PRACH-ConfigInfo } PRACH-Config ::= SEQUENCE { rootSequenceIndex INTEGER (0..837), prach-ConfigInfo PRACH-ConfigInfo OPTIONAL -- Need ON } PRACH-ConfigInfo ::= SEQUENCE { prach-ConfigIndex INTEGER (0..63), highSpeedFlag BOOLEAN, zeroCorrelationZoneConfig INTEGER (0..15), prach-FreqOffset INTEGER (0..94) } PresenceAntennaPort1 ::= BOOLEAN PUCCH-ConfigCommon ::= SEQUENCE { deltaPUCCH-Shift ENUMERATED {ds1, ds2, ds3}, nRB-CQI INTEGER (0..98), nCS-AN INTEGER (0..7), n1PUCCH-AN INTEGER (0..2047) } PUCCH-ConfigDedicated ::= SEQUENCE { ackNackRepetition CHOICE{ release NULL, setup SEQUENCE { repetitionFactor ENUMERATED { n2, n4, n6, spare1}, n1PUCCH-AN-Rep INTEGER (0..2047) } }, tdd-AckNackFeedbackMode ENUMERATED {bundling, multiplexing} OPTIONAL -- Cond TDD } PUSCH-ConfigCommon ::= SEQUENCE { pusch-ConfigBasic SEQUENCE { n-SB INTEGER (1..4), hoppingMode ENUMERATED {interSubFrame, intraAndInterSubFrame}, pusch-HoppingOffset INTEGER (0..98), enable64QAM BOOLEAN }, ul-ReferenceSignalsPUSCH UL-ReferenceSignalsPUSCH } PUSCH-ConfigDedicated ::= SEQUENCE { betaOffset-ACK-Index INTEGER (0..15), betaOffset-RI-Index INTEGER (0..15), betaOffset-CQI-Index INTEGER (0..15) } UL-ReferenceSignalsPUSCH ::= SEQUENCE { groupHoppingEnabled BOOLEAN, groupAssignmentPUSCH INTEGER (0..29), sequenceHoppingEnabled BOOLEAN, cyclicShift INTEGER (0..7) } RACH-ConfigCommon ::= SEQUENCE { preambleInfo SEQUENCE { numberOfRA-Preambles ENUMERATED { n4, n8, n12, n16 ,n20, n24, n28, n32, n36, n40, n44, n48, n52, n56, n60, n64}, preamblesGroupAConfig SEQUENCE { sizeOfRA-PreamblesGroupA ENUMERATED { n4, n8, n12, n16 ,n20, n24, n28, n32, n36, n40, n44, n48, n52, n56, n60}, messageSizeGroupA ENUMERATED {b56, b144, b208, b256}, messagePowerOffsetGroupB ENUMERATED { minusinfinity, dB0, dB5, dB8, dB10, dB12, dB15, dB18}, ... } OPTIONAL -- Need OP }, powerRampingParameters SEQUENCE { powerRampingStep ENUMERATED {dB0, dB2,dB4, dB6}, preambleInitialReceivedTargetPower ENUMERATED { dBm-120, dBm-118, dBm-116, dBm-114, dBm-112, dBm-110, dBm-108, dBm-106, dBm-104, dBm-102, dBm-100, dBm-98, dBm-96, dBm-94, dBm-92, dBm-90} }, ra-SupervisionInfo SEQUENCE { preambleTransMax ENUMERATED { n3, n4, n5, n6, n7, n8, n10, n20, n50, n100, n200}, ra-ResponseWindowSize ENUMERATED { sf2, sf3, sf4, sf5, sf6, sf7, sf8, sf10}, mac-ContentionResolutionTimer ENUMERATED { sf8, sf16, sf24, sf32, sf40, sf48, sf56, sf64} }, maxHARQ-Msg3Tx INTEGER (1..8), ... } RACH-ConfigDedicated ::= SEQUENCE { ra-PreambleIndex INTEGER (0..63), ra-PRACH-MaskIndex INTEGER (0..15) } RadioResourceConfigCommonSIB ::= SEQUENCE { rach-ConfigCommon RACH-ConfigCommon, bcch-Config BCCH-Config, pcch-Config PCCH-Config, prach-Config PRACH-ConfigSIB, pdsch-ConfigCommon PDSCH-ConfigCommon, pusch-ConfigCommon PUSCH-ConfigCommon, pucch-ConfigCommon PUCCH-ConfigCommon, soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon, uplinkPowerControlCommon UplinkPowerControlCommon, ul-CyclicPrefixLength UL-CyclicPrefixLength, ... } RadioResourceConfigCommon ::= SEQUENCE { rach-ConfigCommon RACH-ConfigCommon OPTIONAL, -- Need ON prach-Config PRACH-Config, pdsch-ConfigCommon PDSCH-ConfigCommon OPTIONAL, -- Need ON pusch-ConfigCommon PUSCH-ConfigCommon, phich-Config PHICH-Config OPTIONAL, -- Need ON pucch-ConfigCommon PUCCH-ConfigCommon OPTIONAL, -- Need ON soundingRS-UL-ConfigCommon SoundingRS-UL-ConfigCommon OPTIONAL, -- Need ON uplinkPowerControlCommon UplinkPowerControlCommon OPTIONAL, -- Need ON antennaInfoCommon AntennaInfoCommon OPTIONAL, -- Need ON p-Max P-Max OPTIONAL, -- Need OP tdd-Config TDD-Config OPTIONAL, -- Cond TDD ul-CyclicPrefixLength UL-CyclicPrefixLength, ... } BCCH-Config ::= SEQUENCE { modificationPeriodCoeff ENUMERATED {n2, n4, n8, n16} } PCCH-Config ::= SEQUENCE { defaultPagingCycle ENUMERATED { rf32, rf64, rf128, rf256}, nB ENUMERATED { fourT, twoT, oneT, halfT, quarterT, oneEighthT, oneSixteenthT, oneThirtySecondT} } UL-CyclicPrefixLength ::= ENUMERATED {len1, len2} RadioResourceConfigDedicated ::= SEQUENCE { srb-ToAddModList SRB-ToAddModList OPTIONAL, -- Cond HO-Conn drb-ToAddModList DRB-ToAddModList OPTIONAL, -- Cond HO-toEUTRA drb-ToReleaseList DRB-ToReleaseList OPTIONAL, -- Need ON mac-MainConfig CHOICE { explicitValue MAC-MainConfig, defaultValue NULL } OPTIONAL, -- Cond HO-toEUTRA2 sps-Config SPS-Config OPTIONAL, -- Need ON physicalConfigDedicated PhysicalConfigDedicated OPTIONAL, -- Need ON ... } SRB-ToAddModList ::= SEQUENCE (SIZE (1..2)) OF SRB-ToAddMod SRB-ToAddMod ::= SEQUENCE { srb-Identity INTEGER (1..2), rlc-Config CHOICE { explicitValue RLC-Config, defaultValue NULL } OPTIONAL, -- Cond Setup logicalChannelConfig CHOICE { explicitValue LogicalChannelConfig, defaultValue NULL } OPTIONAL, -- Cond Setup ... } DRB-ToAddModList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-ToAddMod DRB-ToAddMod ::= SEQUENCE { eps-BearerIdentity INTEGER (0..15) OPTIONAL, -- Cond DRB-Setup drb-Identity DRB-Identity, pdcp-Config PDCP-Config OPTIONAL, -- Cond PDCP rlc-Config RLC-Config OPTIONAL, -- Cond Setup logicalChannelIdentity INTEGER (3..10) OPTIONAL, -- Cond DRB-Setup logicalChannelConfig LogicalChannelConfig OPTIONAL, -- Cond Setup ... } DRB-ToReleaseList ::= SEQUENCE (SIZE (1..maxDRB)) OF DRB-Identity RLC-Config ::= CHOICE { am SEQUENCE { ul-AM-RLC UL-AM-RLC, dl-AM-RLC DL-AM-RLC }, um-Bi-Directional SEQUENCE { ul-UM-RLC UL-UM-RLC, dl-UM-RLC DL-UM-RLC }, um-Uni-Directional-UL SEQUENCE { ul-UM-RLC UL-UM-RLC }, um-Uni-Directional-DL SEQUENCE { dl-UM-RLC DL-UM-RLC }, ... } UL-AM-RLC ::= SEQUENCE { t-PollRetransmit T-PollRetransmit, pollPDU PollPDU, pollByte PollByte, maxRetxThreshold ENUMERATED { t1, t2, t3, t4, t6, t8, t16, t32} } DL-AM-RLC ::= SEQUENCE { t-Reordering T-Reordering, t-StatusProhibit T-StatusProhibit } UL-UM-RLC ::= SEQUENCE { sn-FieldLength SN-FieldLength } DL-UM-RLC ::= SEQUENCE { sn-FieldLength SN-FieldLength, t-Reordering T-Reordering } SN-FieldLength ::= ENUMERATED {size5, size10} T-PollRetransmit ::= ENUMERATED { ms5, ms10, ms15, ms20, ms25, ms30, ms35, ms40, ms45, ms50, ms55, ms60, ms65, ms70, ms75, ms80, ms85, ms90, ms95, ms100, ms105, ms110, ms115, ms120, ms125, ms130, ms135, ms140, ms145, ms150, ms155, ms160, ms165, ms170, ms175, ms180, ms185, ms190, ms195, ms200, ms205, ms210, ms215, ms220, ms225, ms230, ms235, ms240, ms245, ms250, ms300, ms350, ms400, ms450, ms500, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1} PollPDU ::= ENUMERATED { p4, p8, p16, p32, p64, p128, p256, pInfinity} PollByte ::= ENUMERATED { kB25, kB50, kB75, kB100, kB125, kB250, kB375, kB500, kB750, kB1000, kB1250, kB1500, kB2000, kB3000, kBinfinity, spare1} T-Reordering ::= ENUMERATED { ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, ms40, ms45, ms50, ms55, ms60, ms65, ms70, ms75, ms80, ms85, ms90, ms95, ms100, ms110, ms120, ms130, ms140, ms150, ms160, ms170, ms180, ms190, ms200, spare1} T-StatusProhibit ::= ENUMERATED { ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, ms40, ms45, ms50, ms55, ms60, ms65, ms70, ms75, ms80, ms85, ms90, ms95, ms100, ms105, ms110, ms115, ms120, ms125, ms130, ms135, ms140, ms145, ms150, ms155, ms160, ms165, ms170, ms175, ms180, ms185, ms190, ms195, ms200, ms205, ms210, ms215, ms220, ms225, ms230, ms235, ms240, ms245, ms250, ms300, ms350, ms400, ms450, ms500, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1} SchedulingRequestConfig ::= CHOICE { release NULL, setup SEQUENCE { sr-PUCCH-ResourceIndex INTEGER (0..2047), sr-ConfigIndex INTEGER (0..155), dsr-TransMax ENUMERATED { n4, n8, n16, n32, n64, spare3, spare2, spare1} } } SoundingRS-UL-ConfigCommon ::= CHOICE { release NULL, setup SEQUENCE { srs-BandwidthConfig ENUMERATED {bw0, bw1, bw2, bw3, bw4, bw5, bw6, bw7}, srs-SubframeConfig ENUMERATED { sc0, sc1, sc2, sc3, sc4, sc5, sc6, sc7, sc8, sc9, sc10, sc11, sc12, sc13, sc14, sc15}, ackNackSRS-SimultaneousTransmission BOOLEAN, srs-MaxUpPts ENUMERATED {true} OPTIONAL -- Cond TDD } } SoundingRS-UL-ConfigDedicated ::= CHOICE{ release NULL, setup SEQUENCE { srs-Bandwidth ENUMERATED {bw0, bw1, bw2, bw3}, srs-HoppingBandwidth ENUMERATED {hbw0, hbw1, hbw2, hbw3}, freqDomainPosition INTEGER (0..23), duration BOOLEAN, srs-ConfigIndex INTEGER (0..1023), transmissionComb INTEGER (0..1), cyclicShift ENUMERATED {cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7} } } SPS-Config ::= SEQUENCE { semiPersistSchedC-RNTI C-RNTI OPTIONAL, -- Need OR sps-ConfigDL SPS-ConfigDL OPTIONAL, -- Need ON sps-ConfigUL SPS-ConfigUL OPTIONAL -- Need ON } SPS-ConfigDL ::= CHOICE{ release NULL, setup SEQUENCE { semiPersistSchedIntervalDL ENUMERATED { sf10, sf20, sf32, sf40, sf64, sf80, sf128, sf160, sf320, sf640, spare6, spare5, spare4, spare3, spare2, spare1}, numberOfConfSPS-Processes INTEGER (1..8), n1-PUCCH-AN-PersistentList N1-PUCCH-AN-PersistentList, ... } } SPS-ConfigUL ::= CHOICE { release NULL, setup SEQUENCE { semiPersistSchedIntervalUL ENUMERATED { sf10, sf20, sf32, sf40, sf64, sf80, sf128, sf160, sf320, sf640, spare6, spare5, spare4, spare3, spare2, spare1}, implicitReleaseAfter ENUMERATED {e2, e3, e4, e8}, p0-Persistent SEQUENCE { p0-NominalPUSCH-Persistent INTEGER (-126..24), p0-UE-PUSCH-Persistent INTEGER (-8..7) } OPTIONAL, -- Need OP twoIntervalsConfig ENUMERATED {true} OPTIONAL, -- Cond TDD ... } } N1-PUCCH-AN-PersistentList ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) TDD-Config ::= SEQUENCE { subframeAssignment ENUMERATED { sa0, sa1, sa2, sa3, sa4, sa5, sa6}, specialSubframePatterns ENUMERATED { ssp0, ssp1, ssp2, ssp3, ssp4,ssp5, ssp6, ssp7, ssp8} } TimeAlignmentTimer ::= ENUMERATED { sf500, sf750, sf1280, sf1920, sf2560, sf5120, sf10240, infinity} TPC-PDCCH-Config::= CHOICE { release NULL, setup SEQUENCE { tpc-RNTI BIT STRING (SIZE (16)), tpc-Index TPC-Index } } TPC-Index ::= CHOICE { indexOfFormat3 INTEGER (1..15), indexOfFormat3A INTEGER (1..31) } UplinkPowerControlCommon ::= SEQUENCE { p0-NominalPUSCH INTEGER (-126..24), alpha ENUMERATED {al0, al04, al05, al06, al07, al08, al09, al1}, p0-NominalPUCCH INTEGER (-127..-96), deltaFList-PUCCH DeltaFList-PUCCH, deltaPreambleMsg3 INTEGER (-1..6) } UplinkPowerControlDedicated ::= SEQUENCE { p0-UE-PUSCH INTEGER (-8..7), deltaMCS-Enabled ENUMERATED {en0, en1}, accumulationEnabled BOOLEAN, p0-UE-PUCCH INTEGER (-8..7), pSRS-Offset INTEGER (0..15), filterCoefficient FilterCoefficient DEFAULT fc4 } DeltaFList-PUCCH ::= SEQUENCE { deltaF-PUCCH-Format1 ENUMERATED {deltaF-2, deltaF0, deltaF2}, deltaF-PUCCH-Format1b ENUMERATED {deltaF1, deltaF3, deltaF5}, deltaF-PUCCH-Format2 ENUMERATED {deltaF-2, deltaF0, deltaF1, deltaF2}, deltaF-PUCCH-Format2a ENUMERATED {deltaF-2, deltaF0, deltaF2}, deltaF-PUCCH-Format2b ENUMERATED {deltaF-2, deltaF0, deltaF2} } NextHopChainingCount ::= INTEGER (0..7) SecurityAlgorithmConfig ::= SEQUENCE { cipheringAlgorithm ENUMERATED { eea0, eea1, eea2, spare5, spare4, spare3, spare2, spare1, ...}, integrityProtAlgorithm ENUMERATED { reserved, eia1, eia2, spare5, spare4, spare3, spare2, spare1, ...} } ShortMAC-I ::= BIT STRING (SIZE (16)) AdditionalSpectrumEmission ::= INTEGER (1..32) ARFCN-ValueCDMA2000 ::= INTEGER (0..2047) ARFCN-ValueEUTRA ::= INTEGER (0..maxEARFCN) ARFCN-ValueGERAN ::= INTEGER (0..1023) ARFCN-ValueUTRA ::= INTEGER (0..16383) BandclassCDMA2000 ::= ENUMERATED { bc0, bc1, bc2, bc3, bc4, bc5, bc6, bc7, bc8, bc9, bc10, bc11, bc12, bc13, bc14, bc15, bc16, bc17, spare14, spare13, spare12, spare11, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1, ...} BandIndicatorGERAN ::= ENUMERATED {dcs1800, pcs1900} CarrierFreqCDMA2000 ::= SEQUENCE { bandClass BandclassCDMA2000, arfcn ARFCN-ValueCDMA2000 } CarrierFreqGERAN ::= SEQUENCE { arfcn ARFCN-ValueGERAN, bandIndicator BandIndicatorGERAN } CarrierFreqsGERAN ::= SEQUENCE { startingARFCN ARFCN-ValueGERAN, bandIndicator BandIndicatorGERAN, followingARFCNs CHOICE { explicitListOfARFCNs ExplicitListOfARFCNs, equallySpacedARFCNs SEQUENCE { arfcn-Spacing INTEGER (1..8), numberOfFollowingARFCNs INTEGER (0..31) }, variableBitMapOfARFCNs OCTET STRING (SIZE (1..16)) } } ExplicitListOfARFCNs ::= SEQUENCE (SIZE (0..31)) OF ARFCN-ValueGERAN CDMA2000-Type ::= ENUMERATED {type1XRTT, typeHRPD} CellIdentity ::= BIT STRING (SIZE (28)) CellIndexList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellIndex CellIndex ::= INTEGER (1..maxCellMeas) CellReselectionPriority ::= INTEGER (0..7) CSFB-RegistrationParam1XRTT ::= SEQUENCE { sid BIT STRING (SIZE (15)), nid BIT STRING (SIZE (16)), multipleSID BOOLEAN, multipleNID BOOLEAN, homeReg BOOLEAN, foreignSIDReg BOOLEAN, foreignNIDReg BOOLEAN, parameterReg BOOLEAN, powerUpReg BOOLEAN, registrationPeriod BIT STRING (SIZE (7)), registrationZone BIT STRING (SIZE (12)), totalZone BIT STRING (SIZE (3)), zoneTimer BIT STRING (SIZE (3)) } CellGlobalIdEUTRA ::= SEQUENCE { plmn-Identity PLMN-Identity, cellIdentity CellIdentity } CellGlobalIdUTRA ::= SEQUENCE { plmn-Identity PLMN-Identity, cellIdentity BIT STRING (SIZE (28)) } CellGlobalIdGERAN ::= SEQUENCE { plmn-Identity PLMN-Identity, locationAreaCode BIT STRING (SIZE (16)), cellIdentity BIT STRING (SIZE (16)) } CellGlobalIdCDMA2000 ::= CHOICE { cellGlobalId1XRTT BIT STRING (SIZE (47)), cellGlobalIdHRPD BIT STRING (SIZE (128)) } MobilityControlInfo ::= SEQUENCE { targetPhysCellId PhysCellId, carrierFreq CarrierFreqEUTRA OPTIONAL, -- Cond HO-toEUTRA carrierBandwidth CarrierBandwidthEUTRA OPTIONAL, -- Cond HO-toEUTRA additionalSpectrumEmission AdditionalSpectrumEmission OPTIONAL, -- Cond HO-toEUTRA t304 ENUMERATED { ms50, ms100, ms150, ms200, ms500, ms1000, ms2000, spare1}, newUE-Identity C-RNTI, radioResourceConfigCommon RadioResourceConfigCommon, rach-ConfigDedicated RACH-ConfigDedicated OPTIONAL, -- Need OP ... } CarrierBandwidthEUTRA ::= SEQUENCE { dl-Bandwidth ENUMERATED { n6, n15, n25, n50, n75, n100, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1}, ul-Bandwidth ENUMERATED { n6, n15, n25, n50, n75, n100, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1} OPTIONAL -- Need OP } CarrierFreqEUTRA ::= SEQUENCE { dl-CarrierFreq ARFCN-ValueEUTRA, ul-CarrierFreq ARFCN-ValueEUTRA OPTIONAL -- Cond FDD } MobilityParametersCDMA2000 ::= OCTET STRING MobilityStateParameters ::= SEQUENCE { t-Evaluation ENUMERATED { s30, s60, s120, s180, s240, spare3, spare2, spare1}, t-HystNormal ENUMERATED { s30, s60, s120, s180, s240, spare3, spare2, spare1}, n-CellChangeMedium INTEGER (1..16), n-CellChangeHigh INTEGER (1..16) } PhysCellId ::= INTEGER (0..503) PhysCellIdRange ::= SEQUENCE { start PhysCellId, range ENUMERATED { n4, n8, n12, n16, n24, n32, n48, n64, n84, n96, n128, n168, n252, n504, spare2, spare1} OPTIONAL -- Need OP } PhysCellIdCDMA2000 ::= INTEGER (0..maxPNOffset) PhysCellIdGERAN ::= SEQUENCE { networkColourCode BIT STRING (SIZE (3)), baseStationColourCode BIT STRING (SIZE (3)) } PhysCellIdUTRA-FDD ::= INTEGER (0..511) PhysCellIdUTRA-TDD ::= INTEGER (0..127) PLMN-Identity ::= SEQUENCE { mcc MCC OPTIONAL, -- Cond MCC mnc MNC } MCC ::= SEQUENCE (SIZE (3)) OF MCC-MNC-Digit MNC ::= SEQUENCE (SIZE (2..3)) OF MCC-MNC-Digit MCC-MNC-Digit ::= INTEGER (0..9) PreRegistrationInfoHRPD ::= SEQUENCE { preRegistrationAllowed BOOLEAN, preRegistrationZoneId PreRegistrationZoneIdHRPD OPTIONAL, -- cond PreRegAllowed secondaryPreRegistrationZoneIdList SecondaryPreRegistrationZoneIdListHRPD OPTIONAL -- Need OR } SecondaryPreRegistrationZoneIdListHRPD ::= SEQUENCE (SIZE (1..2)) OF PreRegistrationZoneIdHRPD PreRegistrationZoneIdHRPD ::= INTEGER (0..255) Q-RxLevMin ::= INTEGER (-70..-22) Q-OffsetRange ::= ENUMERATED { dB-24, dB-22, dB-20, dB-18, dB-16, dB-14, dB-12, dB-10, dB-8, dB-6, dB-5, dB-4, dB-3, dB-2, dB-1, dB0, dB1, dB2, dB3, dB4, dB5, dB6, dB8, dB10, dB12, dB14, dB16, dB18, dB20, dB22, dB24} Q-OffsetRangeInterRAT ::= INTEGER (-15..15) ReselectionThreshold ::= INTEGER (0..31) SpeedStateScaleFactors ::= SEQUENCE { sf-Medium ENUMERATED {oDot25, oDot5, oDot75, lDot0}, sf-High ENUMERATED {oDot25, oDot5, oDot75, lDot0} } SystemTimeInfoCDMA2000 ::= SEQUENCE { cdma-EUTRA-Synchronisation BOOLEAN, cdma-SystemTime CHOICE { synchronousSystemTime BIT STRING (SIZE (39)), asynchronousSystemTime BIT STRING (SIZE (49)) } } TrackingAreaCode ::= BIT STRING (SIZE (16)) T-Reselection ::= INTEGER (0..7) AllowedMeasBandwidth ::= ENUMERATED {mbw6, mbw15, mbw25, mbw50, mbw75, mbw100} Hysteresis ::= INTEGER (0..30) MeasConfig ::= SEQUENCE { -- Measurement objects measObjectToRemoveList MeasObjectToRemoveList OPTIONAL, -- Need ON measObjectToAddModList MeasObjectToAddModList OPTIONAL, -- Need ON -- Reporting configurations reportConfigToRemoveList ReportConfigToRemoveList OPTIONAL, -- Need ON reportConfigToAddModList ReportConfigToAddModList OPTIONAL, -- Need ON -- Measurement identities measIdToRemoveList MeasIdToRemoveList OPTIONAL, -- Need ON measIdToAddModList MeasIdToAddModList OPTIONAL, -- Need ON -- Other parameters quantityConfig QuantityConfig OPTIONAL, -- Need ON measGapConfig MeasGapConfig OPTIONAL, -- Need ON s-Measure RSRP-Range OPTIONAL, -- Need ON preRegistrationInfoHRPD PreRegistrationInfoHRPD OPTIONAL, -- Need OP speedStatePars CHOICE { release NULL, setup SEQUENCE { mobilityStateParameters MobilityStateParameters, timeToTrigger-SF SpeedStateScaleFactors } } OPTIONAL, -- Need ON ... } MeasIdToRemoveList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasId MeasObjectToRemoveList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectId ReportConfigToRemoveList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigId MeasGapConfig ::= CHOICE { release NULL, setup SEQUENCE { gapOffset CHOICE { gp0 INTEGER (0..39), gp1 INTEGER (0..79), ... } } } MeasId ::= INTEGER (1..maxMeasId) MeasIdToAddModList ::= SEQUENCE (SIZE (1..maxMeasId)) OF MeasIdToAddMod MeasIdToAddMod ::= SEQUENCE { measId MeasId, measObjectId MeasObjectId, reportConfigId ReportConfigId } MeasObjectCDMA2000 ::= SEQUENCE { cdma2000-Type CDMA2000-Type, carrierFreq CarrierFreqCDMA2000, searchWindowSize INTEGER (0..15) OPTIONAL, -- Need ON offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, cellsToRemoveList CellIndexList OPTIONAL, -- Need ON cellsToAddModList CellsToAddModListCDMA2000 OPTIONAL, -- Need ON cellForWhichToReportCGI PhysCellIdCDMA2000 OPTIONAL, -- Need ON ... } CellsToAddModListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModCDMA2000 CellsToAddModCDMA2000 ::= SEQUENCE { cellIndex INTEGER (1..maxCellMeas), physCellId PhysCellIdCDMA2000 } MeasObjectEUTRA ::= SEQUENCE { carrierFreq ARFCN-ValueEUTRA, allowedMeasBandwidth AllowedMeasBandwidth, presenceAntennaPort1 PresenceAntennaPort1, neighCellConfig NeighCellConfig, offsetFreq Q-OffsetRange DEFAULT dB0, -- Neighbour cell list cellsToRemoveList CellIndexList OPTIONAL, -- Need ON cellsToAddModList CellsToAddModList OPTIONAL, -- Need ON -- Black list blackCellsToRemoveList CellIndexList OPTIONAL, -- Need ON blackCellsToAddModList BlackCellsToAddModList OPTIONAL, -- Need ON cellForWhichToReportCGI PhysCellId OPTIONAL, -- Need ON ... } CellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddMod CellsToAddMod ::= SEQUENCE { cellIndex INTEGER (1..maxCellMeas), physCellId PhysCellId, cellIndividualOffset Q-OffsetRange } BlackCellsToAddModList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF BlackCellsToAddMod BlackCellsToAddMod ::= SEQUENCE { cellIndex INTEGER (1..maxCellMeas), physCellIdRange PhysCellIdRange } MeasObjectGERAN ::= SEQUENCE { carrierFreqs CarrierFreqsGERAN, offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, ncc-Permitted BIT STRING(SIZE (8)) DEFAULT '11111111'B, cellForWhichToReportCGI PhysCellIdGERAN OPTIONAL, -- Need ON ... } MeasObjectId ::= INTEGER (1..maxObjectId) MeasObjectToAddModList ::= SEQUENCE (SIZE (1..maxObjectId)) OF MeasObjectToAddMod MeasObjectToAddMod ::= SEQUENCE { measObjectId MeasObjectId, measObject CHOICE { measObjectEUTRA MeasObjectEUTRA, measObjectUTRA MeasObjectUTRA, measObjectGERAN MeasObjectGERAN, measObjectCDMA2000 MeasObjectCDMA2000, ... } } MeasObjectUTRA ::= SEQUENCE { carrierFreq ARFCN-ValueUTRA, offsetFreq Q-OffsetRangeInterRAT DEFAULT 0, cellsToRemoveList CellIndexList OPTIONAL, -- Need ON cellsToAddModList CHOICE { cellsToAddModListUTRA-FDD CellsToAddModListUTRA-FDD, cellsToAddModListUTRA-TDD CellsToAddModListUTRA-TDD } OPTIONAL, -- Need ON cellForWhichToReportCGI CHOICE { utra-FDD PhysCellIdUTRA-FDD, utra-TDD PhysCellIdUTRA-TDD } OPTIONAL, -- Need ON ... } CellsToAddModListUTRA-FDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-FDD CellsToAddModUTRA-FDD ::= SEQUENCE { cellIndex INTEGER (1..maxCellMeas), physCellId PhysCellIdUTRA-FDD } CellsToAddModListUTRA-TDD ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellsToAddModUTRA-TDD CellsToAddModUTRA-TDD ::= SEQUENCE { cellIndex INTEGER (1..maxCellMeas), physCellId PhysCellIdUTRA-TDD } MeasResults ::= SEQUENCE { measId MeasId, measResultServCell SEQUENCE { rsrpResult RSRP-Range, rsrqResult RSRQ-Range }, measResultNeighCells CHOICE { measResultListEUTRA MeasResultListEUTRA, measResultListUTRA MeasResultListUTRA, measResultListGERAN MeasResultListGERAN, measResultsCDMA2000 MeasResultsCDMA2000, ... } OPTIONAL, ... } MeasResultListEUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultEUTRA MeasResultEUTRA ::= SEQUENCE { physCellId PhysCellId, cgi-Info SEQUENCE { cellGlobalId CellGlobalIdEUTRA, trackingAreaCode TrackingAreaCode, plmn-IdentityList PLMN-IdentityList2 OPTIONAL } OPTIONAL, measResult SEQUENCE { rsrpResult RSRP-Range OPTIONAL, rsrqResult RSRQ-Range OPTIONAL, ... } } MeasResultListUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultUTRA MeasResultUTRA ::= SEQUENCE { physCellId CHOICE { fdd PhysCellIdUTRA-FDD, tdd PhysCellIdUTRA-TDD }, cgi-Info SEQUENCE { cellGlobalId CellGlobalIdUTRA, locationAreaCode BIT STRING (SIZE (16)) OPTIONAL, routingAreaCode BIT STRING (SIZE (8)) OPTIONAL, plmn-IdentityList PLMN-IdentityList2 OPTIONAL } OPTIONAL, measResult SEQUENCE { utra-RSCP INTEGER (-5..91) OPTIONAL, utra-EcN0 INTEGER (0..49) OPTIONAL, ... } } MeasResultListGERAN ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultGERAN MeasResultGERAN ::= SEQUENCE { carrierFreq CarrierFreqGERAN, physCellId PhysCellIdGERAN, cgi-Info SEQUENCE { cellGlobalId CellGlobalIdGERAN, routingAreaCode BIT STRING (SIZE (8)) OPTIONAL } OPTIONAL, measResult SEQUENCE { rssi INTEGER (0..63), ... } } MeasResultsCDMA2000 ::= SEQUENCE { preRegistrationStatusHRPD BOOLEAN, measResultListCDMA2000 MeasResultListCDMA2000 } MeasResultListCDMA2000 ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultCDMA2000 MeasResultCDMA2000 ::= SEQUENCE { physCellId PhysCellIdCDMA2000, cgi-Info CellGlobalIdCDMA2000 OPTIONAL, measResult SEQUENCE { pilotPnPhase INTEGER (0..32767) OPTIONAL, pilotStrength INTEGER (0..63), ... } } PLMN-IdentityList2 ::= SEQUENCE (SIZE (1..5)) OF PLMN-Identity QuantityConfig ::= SEQUENCE { quantityConfigEUTRA QuantityConfigEUTRA OPTIONAL, -- Need ON quantityConfigUTRA QuantityConfigUTRA OPTIONAL, -- Need ON quantityConfigGERAN QuantityConfigGERAN OPTIONAL, -- Need ON quantityConfigCDMA2000 QuantityConfigCDMA2000 OPTIONAL, -- Need ON ... } QuantityConfigEUTRA ::= SEQUENCE { filterCoefficientRSRP FilterCoefficient DEFAULT fc4, filterCoefficientRSRQ FilterCoefficient DEFAULT fc4 } QuantityConfigUTRA ::= SEQUENCE { measQuantityUTRA-FDD ENUMERATED {cpich-RSCP, cpich-EcN0}, measQuantityUTRA-TDD ENUMERATED {pccpch-RSCP}, filterCoefficient FilterCoefficient DEFAULT fc4 } QuantityConfigGERAN ::= SEQUENCE { measQuantityGERAN ENUMERATED {rssi}, filterCoefficient FilterCoefficient DEFAULT fc2 } QuantityConfigCDMA2000 ::= SEQUENCE { measQuantityCDMA2000 ENUMERATED {pilotStrength, pilotPnPhaseAndPilotStrength} } ReportConfigEUTRA ::= SEQUENCE { triggerType CHOICE { event SEQUENCE { eventId CHOICE { eventA1 SEQUENCE { a1-Threshold ThresholdEUTRA }, eventA2 SEQUENCE { a2-Threshold ThresholdEUTRA }, eventA3 SEQUENCE { a3-Offset INTEGER (-30..30), reportOnLeave BOOLEAN }, eventA4 SEQUENCE { a4-Threshold ThresholdEUTRA }, eventA5 SEQUENCE { a5-Threshold1 ThresholdEUTRA, a5-Threshold2 ThresholdEUTRA }, ... }, hysteresis Hysteresis, timeToTrigger TimeToTrigger }, periodical SEQUENCE { purpose ENUMERATED { reportStrongestCells, reportCGI} } }, triggerQuantity ENUMERATED {rsrp, rsrq}, reportQuantity ENUMERATED {sameAsTriggerQuantity, both}, maxReportCells INTEGER (1..maxCellReport), reportInterval ReportInterval, reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, ... } ThresholdEUTRA ::= CHOICE{ threshold-RSRP RSRP-Range, threshold-RSRQ RSRQ-Range } ReportConfigId ::= INTEGER (1..maxReportConfigId) ReportConfigInterRAT ::= SEQUENCE { triggerType CHOICE { event SEQUENCE { eventId CHOICE { eventB1 SEQUENCE { b1-Threshold CHOICE { b1-ThresholdUTRA ThresholdUTRA, b1-ThresholdGERAN ThresholdGERAN, b1-ThresholdCDMA2000 ThresholdCDMA2000 } }, eventB2 SEQUENCE { b2-Threshold1 ThresholdEUTRA, b2-Threshold2 CHOICE { b2-Threshold2UTRA ThresholdUTRA, b2-Threshold2GERAN ThresholdGERAN, b2-Threshold2CDMA2000 ThresholdCDMA2000 } }, ... }, hysteresis Hysteresis, timeToTrigger TimeToTrigger }, periodical SEQUENCE { purpose ENUMERATED { reportStrongestCells, reportStrongestCellsForSON, reportCGI} } }, maxReportCells INTEGER (1..maxCellReport), reportInterval ReportInterval, reportAmount ENUMERATED {r1, r2, r4, r8, r16, r32, r64, infinity}, ... } ThresholdUTRA ::= CHOICE{ utra-RSCP INTEGER (-5..91), utra-EcN0 INTEGER (0..49) } ThresholdGERAN ::= INTEGER (0..63) ThresholdCDMA2000 ::= INTEGER (0..63) ReportConfigToAddModList ::= SEQUENCE (SIZE (1..maxReportConfigId)) OF ReportConfigToAddMod ReportConfigToAddMod ::= SEQUENCE { reportConfigId ReportConfigId, reportConfig CHOICE { reportConfigEUTRA ReportConfigEUTRA, reportConfigInterRAT ReportConfigInterRAT } } ReportInterval ::= ENUMERATED { ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60, spare3, spare2, spare1} RSRP-Range ::= INTEGER(0..97) RSRQ-Range ::= INTEGER(0..34) TimeToTrigger ::= ENUMERATED { ms0, ms40, ms64, ms80, ms100, ms128, ms160, ms256, ms320, ms480, ms512, ms640, ms1024, ms1280, ms2560, ms5120} C-RNTI ::= BIT STRING (SIZE (16)) DedicatedInfoCDMA2000 ::= OCTET STRING DedicatedInfoNAS ::= OCTET STRING FilterCoefficient ::= ENUMERATED { fc0, fc1, fc2, fc3, fc4, fc5, fc6, fc7, fc8, fc9, fc11, fc13, fc15, fc17, fc19, spare1, ...} MMEC ::= BIT STRING (SIZE (8)) NeighCellConfig ::= BIT STRING (SIZE (2)) RAND-CDMA2000 ::= BIT STRING (SIZE (32)) RAT-Type ::= ENUMERATED { eutra, utra, geran-cs, geran-ps, cdma2000-1XRTT, spare3, spare2, spare1, ...} RRC-TransactionIdentifier ::= INTEGER (0..3) S-TMSI ::= SEQUENCE { mmec MMEC, m-TMSI BIT STRING (SIZE (32)) } UE-CapabilityRAT-ContainerList ::=SEQUENCE (SIZE (0..maxRAT-Capabilities)) OF UE-CapabilityRAT-Container UE-CapabilityRAT-Container ::= SEQUENCE { rat-Type RAT-Type, ueCapabilityRAT-Container OCTET STRING } UE-EUTRA-Capability ::= SEQUENCE { accessStratumRelease AccessStratumRelease, ue-Category INTEGER (1..5), pdcp-Parameters PDCP-Parameters, phyLayerParameters PhyLayerParameters, rf-Parameters RF-Parameters, measParameters MeasParameters, featureGroupIndicators BIT STRING (SIZE (32)) OPTIONAL, interRAT-Parameters SEQUENCE { utraFDD IRAT-ParametersUTRA-FDD OPTIONAL, utraTDD128 IRAT-ParametersUTRA-TDD128 OPTIONAL, utraTDD384 IRAT-ParametersUTRA-TDD384 OPTIONAL, utraTDD768 IRAT-ParametersUTRA-TDD768 OPTIONAL, geran IRAT-ParametersGERAN OPTIONAL, cdma2000-HRPD IRAT-ParametersCDMA2000-HRPD OPTIONAL, cdma2000-1xRTT IRAT-ParametersCDMA2000-1XRTT OPTIONAL }, nonCriticalExtension SEQUENCE {} OPTIONAL } AccessStratumRelease ::= ENUMERATED { rel8, spare7, spare6, spare5, spare4, spare3, spare2, spare1, ...} PDCP-Parameters ::= SEQUENCE { supportedROHC-Profiles SEQUENCE { profile0x0001 BOOLEAN, profile0x0002 BOOLEAN, profile0x0003 BOOLEAN, profile0x0004 BOOLEAN, profile0x0006 BOOLEAN, profile0x0101 BOOLEAN, profile0x0102 BOOLEAN, profile0x0103 BOOLEAN, profile0x0104 BOOLEAN }, maxNumberROHC-ContextSessions ENUMERATED { cs2, cs4, cs8, cs12, cs16, cs24, cs32, cs48, cs64, cs128, cs256, cs512, cs1024, cs16384, spare2, spare1} DEFAULT cs16, ... } PhyLayerParameters ::= SEQUENCE { ue-TxAntennaSelectionSupported BOOLEAN, ue-SpecificRefSigsSupported BOOLEAN } RF-Parameters ::= SEQUENCE { supportedBandListEUTRA SupportedBandListEUTRA } SupportedBandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandEUTRA SupportedBandEUTRA ::= SEQUENCE { bandEUTRA INTEGER (1..64), halfDuplex BOOLEAN } MeasParameters ::= SEQUENCE { bandListEUTRA BandListEUTRA } BandListEUTRA ::= SEQUENCE (SIZE (1..maxBands)) OF BandInfoEUTRA BandInfoEUTRA ::= SEQUENCE { interFreqBandList InterFreqBandList, interRAT-BandList InterRAT-BandList OPTIONAL } InterFreqBandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterFreqBandInfo InterFreqBandInfo ::= SEQUENCE { interFreqNeedForGaps BOOLEAN } InterRAT-BandList ::= SEQUENCE (SIZE (1..maxBands)) OF InterRAT-BandInfo InterRAT-BandInfo ::= SEQUENCE { interRAT-NeedForGaps BOOLEAN } IRAT-ParametersUTRA-FDD ::= SEQUENCE { supportedBandListUTRA-FDD SupportedBandListUTRA-FDD } SupportedBandListUTRA-FDD ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-FDD SupportedBandUTRA-FDD ::= ENUMERATED { bandI, bandII, bandIII, bandIV, bandV, bandVI, bandVII, bandVIII, bandIX, bandX, bandXI, bandXII, bandXIII, bandXIV, bandXV, bandXVI, ..., bandXVII-8a0, bandXVIII-8a0, bandXIX-8a0, bandXX-8a0, bandXXI-8a0, bandXXII-8a0, bandXXIII-8a0, bandXXIV-8a0, bandXXV-8a0, bandXXVI-8a0, bandXXVII-8a0, bandXXVIII-8a0, bandXXIX-8a0, bandXXX-8a0, bandXXXI-8a0, bandXXXII-8a0} IRAT-ParametersUTRA-TDD128 ::= SEQUENCE { supportedBandListUTRA-TDD128 SupportedBandListUTRA-TDD128 } SupportedBandListUTRA-TDD128 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD128 SupportedBandUTRA-TDD128 ::= ENUMERATED { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, ...} IRAT-ParametersUTRA-TDD384 ::= SEQUENCE { supportedBandListUTRA-TDD384 SupportedBandListUTRA-TDD384 } SupportedBandListUTRA-TDD384 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD384 SupportedBandUTRA-TDD384 ::= ENUMERATED { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, ...} IRAT-ParametersUTRA-TDD768 ::= SEQUENCE { supportedBandListUTRA-TDD768 SupportedBandListUTRA-TDD768 } SupportedBandListUTRA-TDD768 ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandUTRA-TDD768 SupportedBandUTRA-TDD768 ::= ENUMERATED { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, ...} IRAT-ParametersGERAN ::= SEQUENCE { supportedBandListGERAN SupportedBandListGERAN, interRAT-PS-HO-ToGERAN BOOLEAN } SupportedBandListGERAN ::= SEQUENCE (SIZE (1..maxBands)) OF SupportedBandGERAN SupportedBandGERAN ::= ENUMERATED { gsm450, gsm480, gsm710, gsm750, gsm810, gsm850, gsm900P, gsm900E, gsm900R, gsm1800, gsm1900, spare5, spare4, spare3, spare2, spare1, ...} IRAT-ParametersCDMA2000-HRPD ::= SEQUENCE { supportedBandListHRPD SupportedBandListHRPD, tx-ConfigHRPD ENUMERATED {single, dual}, rx-ConfigHRPD ENUMERATED {single, dual} } SupportedBandListHRPD ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000 IRAT-ParametersCDMA2000-1XRTT ::= SEQUENCE { supportedBandList1XRTT SupportedBandList1XRTT, tx-Config1XRTT ENUMERATED {single, dual}, rx-Config1XRTT ENUMERATED {single, dual} } SupportedBandList1XRTT ::= SEQUENCE (SIZE (1..maxCDMA-BandClass)) OF BandclassCDMA2000 UE-TimersAndConstants ::= SEQUENCE { t300 ENUMERATED { ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000}, t301 ENUMERATED { ms100, ms200, ms300, ms400, ms600, ms1000, ms1500, ms2000}, t310 ENUMERATED { ms0, ms50, ms100, ms200, ms500, ms1000, ms2000}, n310 ENUMERATED { n1, n2, n3, n4, n6, n8, n10, n20}, t311 ENUMERATED { ms1000, ms3000, ms5000, ms10000, ms15000, ms20000, ms30000}, n311 ENUMERATED { n1, n2, n3, n4, n5, n6, n8, n10}, ... } maxBands INTEGER ::= 64 -- Maximum number of bands listed in EUTRA UE caps maxCDMA-BandClass INTEGER ::= 32 -- Maximum value of the CDMA band classes maxCellBlack INTEGER ::= 16 -- Maximum number of blacklisted cells -- listed in SIB type 4 and 5 maxCellInter INTEGER ::= 16 -- Maximum number of neighbouring inter-frequency -- cells listed in SIB type 5 maxCellIntra INTEGER ::= 16 -- Maximum number of neighbouring intra-frequency -- cells listed in SIB type 4 maxCellMeas INTEGER ::= 32 -- Maximum number of entries in each of the neighbour -- cell lists in a measurement object maxCellReport INTEGER ::= 8 -- Maximum number of reported cells maxDRB INTEGER ::= 11 -- Maximum number of Data Radio Bearers maxEARFCN INTEGER ::= 65535 -- Maximum value of EUTRA carrier fequency maxFreq INTEGER ::= 8 -- Maximum number of EUTRA carrier frequencies maxGERAN-SI INTEGER ::= 10 -- Maximum number of GERAN SI blocks that can be -- provided as part of NACC information maxGNFG INTEGER ::= 16 -- Maximum number of GERAN neighbour freq groups maxMBSFN-Allocations INTEGER ::= 8 -- Maximum number of MBSFN frame allocations with -- different offset maxMCS-1 INTEGER ::= 16 -- Maximum number of PUCCH formats (MCS) maxMeasId INTEGER ::= 32 maxObjectId INTEGER ::= 32 maxPageRec INTEGER ::= 16 -- maxPNOffset INTEGER ::= 511 -- Maximum number of CDMA2000 PNOffsets maxRAT-Capabilities INTEGER ::= 8 -- Maximum number of interworking RATs (incl EUTRA) maxReportConfigId INTEGER ::= 32 maxSIB INTEGER ::= 32 -- Maximum number of SIBs maxSIB-1 INTEGER ::= 31 maxSI-Message INTEGER ::= 32 -- Maximum number of SI messages maxUTRA-FDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA FDD carrier frequencies maxUTRA-TDD-Carrier INTEGER ::= 16 -- Maximum number of UTRA TDD carrier frequencies END EUTRA-UE-Variables DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS CellIdentity, SpeedStateScaleFactors, C-RNTI, MeasId, MeasIdToAddModList, MeasObjectToAddModList, MobilityStateParameters, NeighCellConfig, PhysCellId, QuantityConfig, ReportConfigToAddModList, RSRP-Range, maxCellMeas, maxMeasId FROM EUTRA-RRC-Definitions; VarMeasConfig ::= SEQUENCE { -- Measurement identities measIdList MeasIdToAddModList OPTIONAL, -- Measurement objects measObjectList MeasObjectToAddModList OPTIONAL, -- Reporting configurations reportConfigList ReportConfigToAddModList OPTIONAL, -- Other parameters quantityConfig QuantityConfig OPTIONAL, s-Measure RSRP-Range OPTIONAL, speedStatePars CHOICE { release NULL, setup SEQUENCE { mobilityStateParameters MobilityStateParameters, timeToTrigger-SF SpeedStateScaleFactors } } OPTIONAL } VarMeasReportList ::= SEQUENCE (SIZE (1..maxMeasId)) OF VarMeasReport VarMeasReport ::= SEQUENCE { -- List of measurement that have been triggered measId MeasId, cellsTriggeredList CellsTriggeredList OPTIONAL, numberOfReportsSent INTEGER } CellsTriggeredList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF PhysCellId VarShortMAC-Input ::= SEQUENCE { cellIdentity CellIdentity, physCellId PhysCellId, c-RNTI C-RNTI } END EUTRA-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS AntennaInfoCommon, CellIdentity, C-RNTI, DL-DCCH-Message, ARFCN-ValueEUTRA, MasterInformationBlock, MeasConfig, PhysCellId, RadioResourceConfigDedicated, SecurityAlgorithmConfig, ShortMAC-I, SystemInformationBlockType1, SystemInformationBlockType2, UECapabilityInformation, UE-CapabilityRAT-ContainerList FROM EUTRA-RRC-Definitions; HandoverCommand ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ handoverCommand-r8 HandoverCommand-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } HandoverCommand-r8-IEs ::= SEQUENCE { handoverCommandMessage OCTET STRING (CONTAINING DL-DCCH-Message), nonCriticalExtension SEQUENCE {} OPTIONAL } HandoverPreparationInformation ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ handoverPreparationInformation-r8 HandoverPreparationInformation-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } HandoverPreparationInformation-r8-IEs ::= SEQUENCE { ue-RadioAccessCapabilityInfo UE-CapabilityRAT-ContainerList, as-Config AS-Config OPTIONAL, -- Cond HO rrm-Config RRM-Config OPTIONAL, as-Context AS-Context OPTIONAL, -- Cond HO nonCriticalExtension SEQUENCE {} OPTIONAL } UERadioAccessCapabilityInformation ::= SEQUENCE { criticalExtensions CHOICE { c1 CHOICE{ ueRadioAccessCapabilityInformation-r8 UERadioAccessCapabilityInformation-r8-IEs, spare7 NULL, spare6 NULL, spare5 NULL, spare4 NULL, spare3 NULL, spare2 NULL, spare1 NULL }, criticalExtensionsFuture SEQUENCE {} } } UERadioAccessCapabilityInformation-r8-IEs ::= SEQUENCE { ue-RadioAccessCapabilityInfo OCTET STRING (CONTAINING UECapabilityInformation), nonCriticalExtension SEQUENCE {} OPTIONAL } AS-Config ::= SEQUENCE { sourceMeasConfig MeasConfig, sourceRadioResourceConfig RadioResourceConfigDedicated, sourceSecurityAlgorithmConfig SecurityAlgorithmConfig, sourceUE-Identity C-RNTI, sourceMasterInformationBlock MasterInformationBlock, sourceSystemInformationBlockType1 SystemInformationBlockType1, sourceSystemInformationBlockType2 SystemInformationBlockType2, antennaInfoCommon AntennaInfoCommon, sourceDl-CarrierFreq ARFCN-ValueEUTRA, ... } AS-Context ::= SEQUENCE { reestablishmentInfo ReestablishmentInfo OPTIONAL -- Cond HO } ReestablishmentInfo ::= SEQUENCE { sourcePhysCellId PhysCellId, targetCellShortMAC-I ShortMAC-I, additionalReestabInfoList AdditionalReestabInfoList OPTIONAL, ... } AdditionalReestabInfoList ::= SEQUENCE ( SIZE (1..maxReestabInfo) ) OF AdditionalReestabInfo AdditionalReestabInfo ::= SEQUENCE{ cellIdentity CellIdentity, key-eNodeB-Star Key-eNodeB-Star, shortMAC-I ShortMAC-I } Key-eNodeB-Star ::= BIT STRING (SIZE (256)) RRM-Config ::= SEQUENCE { ue-InactiveTime ENUMERATED { s1, s2, s3, s5, s7, s10, s15, s20, s25, s30, s40, s50, min1, min1s20c, min1s40, min2, min2s30, min3, min3s30, min4, min5, min6, min7, min8, min9, min10, min12, min14, min17, min20, min24, min28, min33, min38, min44, min50, hr1, hr1min30, hr2, hr2min30, hr3, hr3min30, hr4, hr5, hr6, hr8, hr10, hr13, hr16, hr20, day1, day1hr12, day2, day2hr12, day3, day4, day5, day7, day10, day14, day19, day24, day30, dayMoreThan30} OPTIONAL, ... } maxReestabInfo INTEGER ::= 32 -- Maximum number of KeNB* and shortMAC-I forwarded -- at handover for re-establishment preparation END asn1tools-0.169.0/tests/files/3gpp/rrc_8_6_0.py000066400000000000000000023154411524544274600210110ustar00rootroot00000000000000EXPECTED = {'EUTRA-InterNodeDefinitions': {'extensibility-implied': False, 'imports': {'EUTRA-RRC-Definitions': ['ARFCN-ValueEUTRA', 'AntennaInfoCommon', 'C-RNTI', 'CellIdentity', 'DL-DCCH-Message', 'MasterInformationBlock', 'MeasConfig', 'PhysCellId', 'RadioResourceConfigDedicated', 'SecurityAlgorithmConfig', 'ShortMAC-I', 'SystemInformationBlockType1', 'SystemInformationBlockType2', 'UE-CapabilityRAT-ContainerList', 'UECapabilityInformation']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AS-Config': {'members': [{'name': 'sourceMeasConfig', 'type': 'MeasConfig'}, {'name': 'sourceRadioResourceConfig', 'type': 'RadioResourceConfigDedicated'}, {'name': 'sourceSecurityAlgorithmConfig', 'type': 'SecurityAlgorithmConfig'}, {'name': 'sourceUE-Identity', 'type': 'C-RNTI'}, {'name': 'sourceMasterInformationBlock', 'type': 'MasterInformationBlock'}, {'name': 'sourceSystemInformationBlockType1', 'type': 'SystemInformationBlockType1'}, {'name': 'sourceSystemInformationBlockType2', 'type': 'SystemInformationBlockType2'}, {'name': 'antennaInfoCommon', 'type': 'AntennaInfoCommon'}, {'name': 'sourceDl-CarrierFreq', 'type': 'ARFCN-ValueEUTRA'}, None], 'type': 'SEQUENCE'}, 'AS-Context': {'members': [{'name': 'reestablishmentInfo', 'optional': True, 'type': 'ReestablishmentInfo'}], 'type': 'SEQUENCE'}, 'AdditionalReestabInfo': {'members': [{'name': 'cellIdentity', 'type': 'CellIdentity'}, {'name': 'key-eNodeB-Star', 'type': 'Key-eNodeB-Star'}, {'name': 'shortMAC-I', 'type': 'ShortMAC-I'}], 'type': 'SEQUENCE'}, 'AdditionalReestabInfoList': {'element': {'type': 'AdditionalReestabInfo'}, 'size': [(1, 'maxReestabInfo')], 'type': 'SEQUENCE ' 'OF'}, 'HandoverCommand': {'members': [{'members': [{'members': [{'name': 'handoverCommand-r8', 'type': 'HandoverCommand-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'HandoverCommand-r8-IEs': {'members': [{'name': 'handoverCommandMessage', 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation': {'members': [{'members': [{'members': [{'name': 'handoverPreparationInformation-r8', 'type': 'HandoverPreparationInformation-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'HandoverPreparationInformation-r8-IEs': {'members': [{'name': 'ue-RadioAccessCapabilityInfo', 'type': 'UE-CapabilityRAT-ContainerList'}, {'name': 'as-Config', 'optional': True, 'type': 'AS-Config'}, {'name': 'rrm-Config', 'optional': True, 'type': 'RRM-Config'}, {'name': 'as-Context', 'optional': True, 'type': 'AS-Context'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'Key-eNodeB-Star': {'size': [256], 'type': 'BIT ' 'STRING'}, 'RRM-Config': {'members': [{'name': 'ue-InactiveTime', 'optional': True, 'type': 'ENUMERATED', 'values': [('s1', 0), ('s2', 1), ('s3', 2), ('s5', 3), ('s7', 4), ('s10', 5), ('s15', 6), ('s20', 7), ('s25', 8), ('s30', 9), ('s40', 10), ('s50', 11), ('min1', 12), ('min1s20c', 13), ('min1s40', 14), ('min2', 15), ('min2s30', 16), ('min3', 17), ('min3s30', 18), ('min4', 19), ('min5', 20), ('min6', 21), ('min7', 22), ('min8', 23), ('min9', 24), ('min10', 25), ('min12', 26), ('min14', 27), ('min17', 28), ('min20', 29), ('min24', 30), ('min28', 31), ('min33', 32), ('min38', 33), ('min44', 34), ('min50', 35), ('hr1', 36), ('hr1min30', 37), ('hr2', 38), ('hr2min30', 39), ('hr3', 40), ('hr3min30', 41), ('hr4', 42), ('hr5', 43), ('hr6', 44), ('hr8', 45), ('hr10', 46), ('hr13', 47), ('hr16', 48), ('hr20', 49), ('day1', 50), ('day1hr12', 51), ('day2', 52), ('day2hr12', 53), ('day3', 54), ('day4', 55), ('day5', 56), ('day7', 57), ('day10', 58), ('day14', 59), ('day19', 60), ('day24', 61), ('day30', 62), ('dayMoreThan30', 63)]}, None], 'type': 'SEQUENCE'}, 'ReestablishmentInfo': {'members': [{'name': 'sourcePhysCellId', 'type': 'PhysCellId'}, {'name': 'targetCellShortMAC-I', 'type': 'ShortMAC-I'}, {'name': 'additionalReestabInfoList', 'optional': True, 'type': 'AdditionalReestabInfoList'}, None], 'type': 'SEQUENCE'}, 'UERadioAccessCapabilityInformation': {'members': [{'members': [{'members': [{'name': 'ueRadioAccessCapabilityInformation-r8', 'type': 'UERadioAccessCapabilityInformation-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UERadioAccessCapabilityInformation-r8-IEs': {'members': [{'name': 'ue-RadioAccessCapabilityInfo', 'type': 'OCTET ' 'STRING'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}}, 'values': {'maxReestabInfo': {'type': 'INTEGER', 'value': 32}}}, 'EUTRA-RRC-Definitions': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AC-BarringConfig': {'members': [{'name': 'ac-BarringFactor', 'type': 'ENUMERATED', 'values': [('p00', 0), ('p05', 1), ('p10', 2), ('p15', 3), ('p20', 4), ('p25', 5), ('p30', 6), ('p40', 7), ('p50', 8), ('p60', 9), ('p70', 10), ('p75', 11), ('p80', 12), ('p85', 13), ('p90', 14), ('p95', 15)]}, {'name': 'ac-BarringTime', 'type': 'ENUMERATED', 'values': [('s4', 0), ('s8', 1), ('s16', 2), ('s32', 3), ('s64', 4), ('s128', 5), ('s256', 6), ('s512', 7)]}, {'name': 'ac-BarringForSpecialAC', 'size': [5], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'ARFCN-ValueCDMA2000': {'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, 'ARFCN-ValueEUTRA': {'restricted-to': [(0, 'maxEARFCN')], 'type': 'INTEGER'}, 'ARFCN-ValueGERAN': {'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, 'ARFCN-ValueUTRA': {'restricted-to': [(0, 16383)], 'type': 'INTEGER'}, 'AccessStratumRelease': {'type': 'ENUMERATED', 'values': [('rel8', 0), ('spare7', 1), ('spare6', 2), ('spare5', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7), None]}, 'AdditionalSpectrumEmission': {'restricted-to': [(1, 32)], 'type': 'INTEGER'}, 'AllowedMeasBandwidth': {'type': 'ENUMERATED', 'values': [('mbw6', 0), ('mbw15', 1), ('mbw25', 2), ('mbw50', 3), ('mbw75', 4), ('mbw100', 5)]}, 'AntennaInfoCommon': {'members': [{'name': 'antennaPortsCount', 'type': 'ENUMERATED', 'values': [('an1', 0), ('an2', 1), ('an4', 2), ('spare1', 3)]}], 'type': 'SEQUENCE'}, 'AntennaInfoDedicated': {'members': [{'name': 'transmissionMode', 'type': 'ENUMERATED', 'values': [('tm1', 0), ('tm2', 1), ('tm3', 2), ('tm4', 3), ('tm5', 4), ('tm6', 5), ('tm7', 6), ('spare1', 7)]}, {'members': [{'name': 'n2TxAntenna-tm3', 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'n4TxAntenna-tm3', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'n2TxAntenna-tm4', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'n4TxAntenna-tm4', 'size': [64], 'type': 'BIT ' 'STRING'}, {'name': 'n2TxAntenna-tm5', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'n4TxAntenna-tm5', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'n2TxAntenna-tm6', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'n4TxAntenna-tm6', 'size': [16], 'type': 'BIT ' 'STRING'}], 'name': 'codebookSubsetRestriction', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'name': 'setup', 'type': 'ENUMERATED', 'values': [('closedLoop', 0), ('openLoop', 1)]}], 'name': 'ue-TransmitAntennaSelection', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'BCCH-BCH-Message': {'members': [{'name': 'message', 'type': 'BCCH-BCH-MessageType'}], 'type': 'SEQUENCE'}, 'BCCH-BCH-MessageType': {'type': 'MasterInformationBlock'}, 'BCCH-Config': {'members': [{'name': 'modificationPeriodCoeff', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1), ('n8', 2), ('n16', 3)]}], 'type': 'SEQUENCE'}, 'BCCH-DL-SCH-Message': {'members': [{'name': 'message', 'type': 'BCCH-DL-SCH-MessageType'}], 'type': 'SEQUENCE'}, 'BCCH-DL-SCH-MessageType': {'members': [{'members': [{'name': 'systemInformation', 'type': 'SystemInformation'}, {'name': 'systemInformationBlockType1', 'type': 'SystemInformationBlockType1'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'BandClassInfoCDMA2000': {'members': [{'name': 'bandClass', 'type': 'BandclassCDMA2000'}, {'name': 'cellReselectionPriority', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'threshX-High', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'threshX-Low', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'BandClassListCDMA2000': {'element': {'type': 'BandClassInfoCDMA2000'}, 'size': [(1, 'maxCDMA-BandClass')], 'type': 'SEQUENCE ' 'OF'}, 'BandClassPriority1XRTT': {'members': [{'name': 'bandClass', 'type': 'BandclassCDMA2000'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'BandClassPriorityHRPD': {'members': [{'name': 'bandClass', 'type': 'BandclassCDMA2000'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'BandClassPriorityList1XRTT': {'element': {'type': 'BandClassPriority1XRTT'}, 'size': [(1, 'maxCDMA-BandClass')], 'type': 'SEQUENCE ' 'OF'}, 'BandClassPriorityListHRPD': {'element': {'type': 'BandClassPriorityHRPD'}, 'size': [(1, 'maxCDMA-BandClass')], 'type': 'SEQUENCE ' 'OF'}, 'BandIndicatorGERAN': {'type': 'ENUMERATED', 'values': [('dcs1800', 0), ('pcs1900', 1)]}, 'BandInfoEUTRA': {'members': [{'name': 'interFreqBandList', 'type': 'InterFreqBandList'}, {'name': 'interRAT-BandList', 'optional': True, 'type': 'InterRAT-BandList'}], 'type': 'SEQUENCE'}, 'BandListEUTRA': {'element': {'type': 'BandInfoEUTRA'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE OF'}, 'BandclassCDMA2000': {'type': 'ENUMERATED', 'values': [('bc0', 0), ('bc1', 1), ('bc2', 2), ('bc3', 3), ('bc4', 4), ('bc5', 5), ('bc6', 6), ('bc7', 7), ('bc8', 8), ('bc9', 9), ('bc10', 10), ('bc11', 11), ('bc12', 12), ('bc13', 13), ('bc14', 14), ('bc15', 15), ('bc16', 16), ('bc17', 17), ('spare14', 18), ('spare13', 19), ('spare12', 20), ('spare11', 21), ('spare10', 22), ('spare9', 23), ('spare8', 24), ('spare7', 25), ('spare6', 26), ('spare5', 27), ('spare4', 28), ('spare3', 29), ('spare2', 30), ('spare1', 31), None]}, 'BlackCellsToAddMod': {'members': [{'name': 'cellIndex', 'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, {'name': 'physCellIdRange', 'type': 'PhysCellIdRange'}], 'type': 'SEQUENCE'}, 'BlackCellsToAddModList': {'element': {'type': 'BlackCellsToAddMod'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'C-RNTI': {'size': [16], 'type': 'BIT STRING'}, 'CDMA2000-Type': {'type': 'ENUMERATED', 'values': [('type1XRTT', 0), ('typeHRPD', 1)]}, 'CQI-ReportConfig': {'members': [{'name': 'cqi-ReportModeAperiodic', 'optional': True, 'type': 'ENUMERATED', 'values': [('rm12', 0), ('rm20', 1), ('rm22', 2), ('rm30', 3), ('rm31', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 'nomPDSCH-RS-EPRE-Offset', 'restricted-to': [(-1, 6)], 'type': 'INTEGER'}, {'name': 'cqi-ReportPeriodic', 'optional': True, 'type': 'CQI-ReportPeriodic'}], 'type': 'SEQUENCE'}, 'CQI-ReportPeriodic': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'cqi-PUCCH-ResourceIndex', 'restricted-to': [(0, 1185)], 'type': 'INTEGER'}, {'name': 'cqi-pmi-ConfigIndex', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'members': [{'name': 'widebandCQI', 'type': 'NULL'}, {'members': [{'name': 'k', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}], 'name': 'subbandCQI', 'type': 'SEQUENCE'}], 'name': 'cqi-FormatIndicatorPeriodic', 'type': 'CHOICE'}, {'name': 'ri-ConfigIndex', 'optional': True, 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'simultaneousAckNackAndCQI', 'type': 'BOOLEAN'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'CSFB-RegistrationParam1XRTT': {'members': [{'name': 'sid', 'size': [15], 'type': 'BIT ' 'STRING'}, {'name': 'nid', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'multipleSID', 'type': 'BOOLEAN'}, {'name': 'multipleNID', 'type': 'BOOLEAN'}, {'name': 'homeReg', 'type': 'BOOLEAN'}, {'name': 'foreignSIDReg', 'type': 'BOOLEAN'}, {'name': 'foreignNIDReg', 'type': 'BOOLEAN'}, {'name': 'parameterReg', 'type': 'BOOLEAN'}, {'name': 'powerUpReg', 'type': 'BOOLEAN'}, {'name': 'registrationPeriod', 'size': [7], 'type': 'BIT ' 'STRING'}, {'name': 'registrationZone', 'size': [12], 'type': 'BIT ' 'STRING'}, {'name': 'totalZone', 'size': [3], 'type': 'BIT ' 'STRING'}, {'name': 'zoneTimer', 'size': [3], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'CSFBParametersRequestCDMA2000': {'members': [{'members': [{'name': 'csfbParametersRequestCDMA2000-r8', 'type': 'CSFBParametersRequestCDMA2000-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CSFBParametersRequestCDMA2000-r8-IEs': {'members': [{'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'CSFBParametersResponseCDMA2000': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'csfbParametersResponseCDMA2000-r8', 'type': 'CSFBParametersResponseCDMA2000-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CSFBParametersResponseCDMA2000-r8-IEs': {'members': [{'name': 'rand', 'type': 'RAND-CDMA2000'}, {'name': 'mobilityParameters', 'type': 'MobilityParametersCDMA2000'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'CarrierBandwidthEUTRA': {'members': [{'name': 'dl-Bandwidth', 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5), ('spare10', 6), ('spare9', 7), ('spare8', 8), ('spare7', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'ul-Bandwidth', 'optional': True, 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5), ('spare10', 6), ('spare9', 7), ('spare8', 8), ('spare7', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}], 'type': 'SEQUENCE'}, 'CarrierFreqCDMA2000': {'members': [{'name': 'bandClass', 'type': 'BandclassCDMA2000'}, {'name': 'arfcn', 'type': 'ARFCN-ValueCDMA2000'}], 'type': 'SEQUENCE'}, 'CarrierFreqEUTRA': {'members': [{'name': 'dl-CarrierFreq', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'ul-CarrierFreq', 'optional': True, 'type': 'ARFCN-ValueEUTRA'}], 'type': 'SEQUENCE'}, 'CarrierFreqGERAN': {'members': [{'name': 'arfcn', 'type': 'ARFCN-ValueGERAN'}, {'name': 'bandIndicator', 'type': 'BandIndicatorGERAN'}], 'type': 'SEQUENCE'}, 'CarrierFreqListUTRA-FDD': {'element': {'type': 'CarrierFreqUTRA-FDD'}, 'size': [(1, 'maxUTRA-FDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, 'CarrierFreqListUTRA-TDD': {'element': {'type': 'CarrierFreqUTRA-TDD'}, 'size': [(1, 'maxUTRA-TDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, 'CarrierFreqUTRA-FDD': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueUTRA'}, {'name': 'cellReselectionPriority', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'threshX-High', 'type': 'ReselectionThreshold'}, {'name': 'threshX-Low', 'type': 'ReselectionThreshold'}, {'name': 'q-RxLevMin', 'restricted-to': [(-60, -13)], 'type': 'INTEGER'}, {'name': 'p-MaxUTRA', 'restricted-to': [(-50, 33)], 'type': 'INTEGER'}, {'name': 'q-QualMin', 'restricted-to': [(-24, 0)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'CarrierFreqUTRA-TDD': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueUTRA'}, {'name': 'cellReselectionPriority', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'threshX-High', 'type': 'ReselectionThreshold'}, {'name': 'threshX-Low', 'type': 'ReselectionThreshold'}, {'name': 'q-RxLevMin', 'restricted-to': [(-60, -13)], 'type': 'INTEGER'}, {'name': 'p-MaxUTRA', 'restricted-to': [(-50, 33)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'CarrierFreqsGERAN': {'members': [{'name': 'startingARFCN', 'type': 'ARFCN-ValueGERAN'}, {'name': 'bandIndicator', 'type': 'BandIndicatorGERAN'}, {'members': [{'name': 'explicitListOfARFCNs', 'type': 'ExplicitListOfARFCNs'}, {'members': [{'name': 'arfcn-Spacing', 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, {'name': 'numberOfFollowingARFCNs', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}], 'name': 'equallySpacedARFCNs', 'type': 'SEQUENCE'}, {'name': 'variableBitMapOfARFCNs', 'size': [(1, 16)], 'type': 'OCTET ' 'STRING'}], 'name': 'followingARFCNs', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CarrierFreqsInfoGERAN': {'members': [{'name': 'carrierFreqs', 'type': 'CarrierFreqsGERAN'}, {'members': [{'name': 'cellReselectionPriority', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'ncc-Permitted', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'q-RxLevMin', 'restricted-to': [(0, 45)], 'type': 'INTEGER'}, {'name': 'p-MaxGERAN', 'optional': True, 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'threshX-High', 'type': 'ReselectionThreshold'}, {'name': 'threshX-Low', 'type': 'ReselectionThreshold'}], 'name': 'commonInfo', 'type': 'SEQUENCE'}, None], 'type': 'SEQUENCE'}, 'CarrierFreqsInfoListGERAN': {'element': {'type': 'CarrierFreqsInfoGERAN'}, 'size': [(1, 'maxGNFG')], 'type': 'SEQUENCE ' 'OF'}, 'CellChangeOrder': {'members': [{'name': 't304', 'type': 'ENUMERATED', 'values': [('ms100', 0), ('ms200', 1), ('ms500', 2), ('ms1000', 3), ('ms2000', 4), ('ms4000', 5), ('ms8000', 6), ('spare1', 7)]}, {'members': [{'members': [{'name': 'physCellId', 'type': 'PhysCellIdGERAN'}, {'name': 'carrierFreq', 'type': 'CarrierFreqGERAN'}, {'name': 'networkControlOrder', 'optional': True, 'size': [2], 'type': 'BIT ' 'STRING'}, {'name': 'systemInformation', 'optional': True, 'type': 'SI-OrPSI-GERAN'}], 'name': 'geran', 'type': 'SEQUENCE'}, None], 'name': 'targetRAT-Type', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CellGlobalIdCDMA2000': {'members': [{'name': 'cellGlobalId1XRTT', 'size': [47], 'type': 'BIT ' 'STRING'}, {'name': 'cellGlobalIdHRPD', 'size': [128], 'type': 'BIT ' 'STRING'}], 'type': 'CHOICE'}, 'CellGlobalIdEUTRA': {'members': [{'name': 'plmn-Identity', 'type': 'PLMN-Identity'}, {'name': 'cellIdentity', 'type': 'CellIdentity'}], 'type': 'SEQUENCE'}, 'CellGlobalIdGERAN': {'members': [{'name': 'plmn-Identity', 'type': 'PLMN-Identity'}, {'name': 'locationAreaCode', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'cellIdentity', 'size': [16], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'CellGlobalIdUTRA': {'members': [{'name': 'plmn-Identity', 'type': 'PLMN-Identity'}, {'name': 'cellIdentity', 'size': [28], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'CellIdentity': {'size': [28], 'type': 'BIT STRING'}, 'CellIndex': {'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, 'CellIndexList': {'element': {'type': 'CellIndex'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE OF'}, 'CellReselectionParametersCDMA2000': {'members': [{'name': 'bandClassList', 'type': 'BandClassListCDMA2000'}, {'name': 'neighCellList', 'type': 'NeighCellListCDMA2000'}, {'name': 't-ReselectionCDMA2000', 'type': 'T-Reselection'}, {'name': 't-ReselectionCDMA2000-SF', 'optional': True, 'type': 'SpeedStateScaleFactors'}], 'type': 'SEQUENCE'}, 'CellReselectionPriority': {'restricted-to': [(0, 7)], 'type': 'INTEGER'}, 'CellsToAddMod': {'members': [{'name': 'cellIndex', 'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, {'name': 'physCellId', 'type': 'PhysCellId'}, {'name': 'cellIndividualOffset', 'type': 'Q-OffsetRange'}], 'type': 'SEQUENCE'}, 'CellsToAddModCDMA2000': {'members': [{'name': 'cellIndex', 'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, {'name': 'physCellId', 'type': 'PhysCellIdCDMA2000'}], 'type': 'SEQUENCE'}, 'CellsToAddModList': {'element': {'type': 'CellsToAddMod'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'CellsToAddModListCDMA2000': {'element': {'type': 'CellsToAddModCDMA2000'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'CellsToAddModListUTRA-FDD': {'element': {'type': 'CellsToAddModUTRA-FDD'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'CellsToAddModListUTRA-TDD': {'element': {'type': 'CellsToAddModUTRA-TDD'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'CellsToAddModUTRA-FDD': {'members': [{'name': 'cellIndex', 'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, {'name': 'physCellId', 'type': 'PhysCellIdUTRA-FDD'}], 'type': 'SEQUENCE'}, 'CellsToAddModUTRA-TDD': {'members': [{'name': 'cellIndex', 'restricted-to': [(1, 'maxCellMeas')], 'type': 'INTEGER'}, {'name': 'physCellId', 'type': 'PhysCellIdUTRA-TDD'}], 'type': 'SEQUENCE'}, 'CounterCheck': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'counterCheck-r8', 'type': 'CounterCheck-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CounterCheck-r8-IEs': {'members': [{'name': 'drb-CountMSB-InfoList', 'type': 'DRB-CountMSB-InfoList'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'CounterCheckResponse': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'counterCheckResponse-r8', 'type': 'CounterCheckResponse-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CounterCheckResponse-r8-IEs': {'members': [{'name': 'drb-CountInfoList', 'type': 'DRB-CountInfoList'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'DL-AM-RLC': {'members': [{'name': 't-Reordering', 'type': 'T-Reordering'}, {'name': 't-StatusProhibit', 'type': 'T-StatusProhibit'}], 'type': 'SEQUENCE'}, 'DL-CCCH-Message': {'members': [{'name': 'message', 'type': 'DL-CCCH-MessageType'}], 'type': 'SEQUENCE'}, 'DL-CCCH-MessageType': {'members': [{'members': [{'name': 'rrcConnectionReestablishment', 'type': 'RRCConnectionReestablishment'}, {'name': 'rrcConnectionReestablishmentReject', 'type': 'RRCConnectionReestablishmentReject'}, {'name': 'rrcConnectionReject', 'type': 'RRCConnectionReject'}, {'name': 'rrcConnectionSetup', 'type': 'RRCConnectionSetup'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'DL-DCCH-Message': {'members': [{'name': 'message', 'type': 'DL-DCCH-MessageType'}], 'type': 'SEQUENCE'}, 'DL-DCCH-MessageType': {'members': [{'members': [{'name': 'csfbParametersResponseCDMA2000', 'type': 'CSFBParametersResponseCDMA2000'}, {'name': 'dlInformationTransfer', 'type': 'DLInformationTransfer'}, {'name': 'handoverFromEUTRAPreparationRequest', 'type': 'HandoverFromEUTRAPreparationRequest'}, {'name': 'mobilityFromEUTRACommand', 'type': 'MobilityFromEUTRACommand'}, {'name': 'rrcConnectionReconfiguration', 'type': 'RRCConnectionReconfiguration'}, {'name': 'rrcConnectionRelease', 'type': 'RRCConnectionRelease'}, {'name': 'securityModeCommand', 'type': 'SecurityModeCommand'}, {'name': 'ueCapabilityEnquiry', 'type': 'UECapabilityEnquiry'}, {'name': 'counterCheck', 'type': 'CounterCheck'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'DL-UM-RLC': {'members': [{'name': 'sn-FieldLength', 'type': 'SN-FieldLength'}, {'name': 't-Reordering', 'type': 'T-Reordering'}], 'type': 'SEQUENCE'}, 'DLInformationTransfer': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'dlInformationTransfer-r8', 'type': 'DLInformationTransfer-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'DLInformationTransfer-r8-IEs': {'members': [{'members': [{'name': 'dedicatedInfoNAS', 'type': 'DedicatedInfoNAS'}, {'name': 'dedicatedInfoCDMA2000-1XRTT', 'type': 'DedicatedInfoCDMA2000'}, {'name': 'dedicatedInfoCDMA2000-HRPD', 'type': 'DedicatedInfoCDMA2000'}], 'name': 'dedicatedInfoType', 'type': 'CHOICE'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'DRB-CountInfo': {'members': [{'name': 'drb-Identity', 'type': 'DRB-Identity'}, {'name': 'count-Uplink', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}, {'name': 'count-Downlink', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'DRB-CountInfoList': {'element': {'type': 'DRB-CountInfo'}, 'size': [(0, 'maxDRB')], 'type': 'SEQUENCE ' 'OF'}, 'DRB-CountMSB-Info': {'members': [{'name': 'drb-Identity', 'type': 'DRB-Identity'}, {'name': 'countMSB-Uplink', 'restricted-to': [(0, 33554431)], 'type': 'INTEGER'}, {'name': 'countMSB-Downlink', 'restricted-to': [(0, 33554431)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'DRB-CountMSB-InfoList': {'element': {'type': 'DRB-CountMSB-Info'}, 'size': [(1, 'maxDRB')], 'type': 'SEQUENCE ' 'OF'}, 'DRB-Identity': {'restricted-to': [(1, 32)], 'type': 'INTEGER'}, 'DRB-ToAddMod': {'members': [{'name': 'eps-BearerIdentity', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'drb-Identity', 'type': 'DRB-Identity'}, {'name': 'pdcp-Config', 'optional': True, 'type': 'PDCP-Config'}, {'name': 'rlc-Config', 'optional': True, 'type': 'RLC-Config'}, {'name': 'logicalChannelIdentity', 'optional': True, 'restricted-to': [(3, 10)], 'type': 'INTEGER'}, {'name': 'logicalChannelConfig', 'optional': True, 'type': 'LogicalChannelConfig'}, None], 'type': 'SEQUENCE'}, 'DRB-ToAddModList': {'element': {'type': 'DRB-ToAddMod'}, 'size': [(1, 'maxDRB')], 'type': 'SEQUENCE ' 'OF'}, 'DRB-ToReleaseList': {'element': {'type': 'DRB-Identity'}, 'size': [(1, 'maxDRB')], 'type': 'SEQUENCE ' 'OF'}, 'DRX-Config': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'onDurationTimer', 'type': 'ENUMERATED', 'values': [('psf1', 0), ('psf2', 1), ('psf3', 2), ('psf4', 3), ('psf5', 4), ('psf6', 5), ('psf8', 6), ('psf10', 7), ('psf20', 8), ('psf30', 9), ('psf40', 10), ('psf50', 11), ('psf60', 12), ('psf80', 13), ('psf100', 14), ('psf200', 15)]}, {'name': 'drx-InactivityTimer', 'type': 'ENUMERATED', 'values': [('psf1', 0), ('psf2', 1), ('psf3', 2), ('psf4', 3), ('psf5', 4), ('psf6', 5), ('psf8', 6), ('psf10', 7), ('psf20', 8), ('psf30', 9), ('psf40', 10), ('psf50', 11), ('psf60', 12), ('psf80', 13), ('psf100', 14), ('psf200', 15), ('psf300', 16), ('psf500', 17), ('psf750', 18), ('psf1280', 19), ('psf1920', 20), ('psf2560', 21), ('spare10', 22), ('spare9', 23), ('spare8', 24), ('spare7', 25), ('spare6', 26), ('spare5', 27), ('spare4', 28), ('spare3', 29), ('spare2', 30), ('spare1', 31)]}, {'name': 'drx-RetransmissionTimer', 'type': 'ENUMERATED', 'values': [('psf1', 0), ('psf2', 1), ('psf4', 2), ('psf6', 3), ('psf8', 4), ('psf16', 5), ('psf24', 6), ('psf33', 7)]}, {'members': [{'name': 'sf10', 'restricted-to': [(0, 9)], 'type': 'INTEGER'}, {'name': 'sf20', 'restricted-to': [(0, 19)], 'type': 'INTEGER'}, {'name': 'sf32', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'sf40', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'sf64', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'sf80', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, {'name': 'sf128', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'sf160', 'restricted-to': [(0, 159)], 'type': 'INTEGER'}, {'name': 'sf256', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'sf320', 'restricted-to': [(0, 319)], 'type': 'INTEGER'}, {'name': 'sf512', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, {'name': 'sf640', 'restricted-to': [(0, 639)], 'type': 'INTEGER'}, {'name': 'sf1024', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'sf1280', 'restricted-to': [(0, 1279)], 'type': 'INTEGER'}, {'name': 'sf2048', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'sf2560', 'restricted-to': [(0, 2559)], 'type': 'INTEGER'}], 'name': 'longDRX-CycleStartOffset', 'type': 'CHOICE'}, {'members': [{'name': 'shortDRX-Cycle', 'type': 'ENUMERATED', 'values': [('sf2', 0), ('sf5', 1), ('sf8', 2), ('sf10', 3), ('sf16', 4), ('sf20', 5), ('sf32', 6), ('sf40', 7), ('sf64', 8), ('sf80', 9), ('sf128', 10), ('sf160', 11), ('sf256', 12), ('sf320', 13), ('sf512', 14), ('sf640', 15)]}, {'name': 'drxShortCycleTimer', 'restricted-to': [(1, 16)], 'type': 'INTEGER'}], 'name': 'shortDRX', 'optional': True, 'type': 'SEQUENCE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'DedicatedInfoCDMA2000': {'type': 'OCTET ' 'STRING'}, 'DedicatedInfoNAS': {'type': 'OCTET ' 'STRING'}, 'DeltaFList-PUCCH': {'members': [{'name': 'deltaF-PUCCH-Format1', 'type': 'ENUMERATED', 'values': [('deltaF-2', 0), ('deltaF0', 1), ('deltaF2', 2)]}, {'name': 'deltaF-PUCCH-Format1b', 'type': 'ENUMERATED', 'values': [('deltaF1', 0), ('deltaF3', 1), ('deltaF5', 2)]}, {'name': 'deltaF-PUCCH-Format2', 'type': 'ENUMERATED', 'values': [('deltaF-2', 0), ('deltaF0', 1), ('deltaF1', 2), ('deltaF2', 3)]}, {'name': 'deltaF-PUCCH-Format2a', 'type': 'ENUMERATED', 'values': [('deltaF-2', 0), ('deltaF0', 1), ('deltaF2', 2)]}, {'name': 'deltaF-PUCCH-Format2b', 'type': 'ENUMERATED', 'values': [('deltaF-2', 0), ('deltaF0', 1), ('deltaF2', 2)]}], 'type': 'SEQUENCE'}, 'EstablishmentCause': {'type': 'ENUMERATED', 'values': [('emergency', 0), ('highPriorityAccess', 1), ('mt-Access', 2), ('mo-Signalling', 3), ('mo-Data', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}, 'ExplicitListOfARFCNs': {'element': {'type': 'ARFCN-ValueGERAN'}, 'size': [(0, 31)], 'type': 'SEQUENCE ' 'OF'}, 'FilterCoefficient': {'type': 'ENUMERATED', 'values': [('fc0', 0), ('fc1', 1), ('fc2', 2), ('fc3', 3), ('fc4', 4), ('fc5', 5), ('fc6', 6), ('fc7', 7), ('fc8', 8), ('fc9', 9), ('fc11', 10), ('fc13', 11), ('fc15', 12), ('fc17', 13), ('fc19', 14), ('spare1', 15), None]}, 'FreqPriorityEUTRA': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'FreqPriorityListEUTRA': {'element': {'type': 'FreqPriorityEUTRA'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'FreqPriorityListUTRA-FDD': {'element': {'type': 'FreqPriorityUTRA-FDD'}, 'size': [(1, 'maxUTRA-FDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, 'FreqPriorityListUTRA-TDD': {'element': {'type': 'FreqPriorityUTRA-TDD'}, 'size': [(1, 'maxUTRA-TDD-Carrier')], 'type': 'SEQUENCE ' 'OF'}, 'FreqPriorityUTRA-FDD': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueUTRA'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'FreqPriorityUTRA-TDD': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueUTRA'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'FreqsPriorityGERAN': {'members': [{'name': 'carrierFreqs', 'type': 'CarrierFreqsGERAN'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'type': 'SEQUENCE'}, 'FreqsPriorityListGERAN': {'element': {'type': 'FreqsPriorityGERAN'}, 'size': [(1, 'maxGNFG')], 'type': 'SEQUENCE ' 'OF'}, 'Handover': {'members': [{'name': 'targetRAT-Type', 'type': 'ENUMERATED', 'values': [('utra', 0), ('geran', 1), ('cdma2000-1XRTT', 2), ('cdma2000-HRPD', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7), None]}, {'name': 'targetRAT-MessageContainer', 'type': 'OCTET ' 'STRING'}, {'name': 'nas-SecurityParamFromEUTRA', 'optional': True, 'size': [1], 'type': 'OCTET ' 'STRING'}, {'name': 'systemInformation', 'optional': True, 'type': 'SI-OrPSI-GERAN'}], 'type': 'SEQUENCE'}, 'HandoverFromEUTRAPreparationRequest': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'handoverFromEUTRAPreparationRequest-r8', 'type': 'HandoverFromEUTRAPreparationRequest-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'HandoverFromEUTRAPreparationRequest-r8-IEs': {'members': [{'name': 'cdma2000-Type', 'type': 'CDMA2000-Type'}, {'name': 'rand', 'optional': True, 'type': 'RAND-CDMA2000'}, {'name': 'mobilityParameters', 'optional': True, 'type': 'MobilityParametersCDMA2000'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'Hysteresis': {'restricted-to': [(0, 30)], 'type': 'INTEGER'}, 'IMSI': {'element': {'type': 'IMSI-Digit'}, 'size': [(6, 21)], 'type': 'SEQUENCE OF'}, 'IMSI-Digit': {'restricted-to': [(0, 9)], 'type': 'INTEGER'}, 'IRAT-ParametersCDMA2000-1XRTT': {'members': [{'name': 'supportedBandList1XRTT', 'type': 'SupportedBandList1XRTT'}, {'name': 'tx-Config1XRTT', 'type': 'ENUMERATED', 'values': [('single', 0), ('dual', 1)]}, {'name': 'rx-Config1XRTT', 'type': 'ENUMERATED', 'values': [('single', 0), ('dual', 1)]}], 'type': 'SEQUENCE'}, 'IRAT-ParametersCDMA2000-HRPD': {'members': [{'name': 'supportedBandListHRPD', 'type': 'SupportedBandListHRPD'}, {'name': 'tx-ConfigHRPD', 'type': 'ENUMERATED', 'values': [('single', 0), ('dual', 1)]}, {'name': 'rx-ConfigHRPD', 'type': 'ENUMERATED', 'values': [('single', 0), ('dual', 1)]}], 'type': 'SEQUENCE'}, 'IRAT-ParametersGERAN': {'members': [{'name': 'supportedBandListGERAN', 'type': 'SupportedBandListGERAN'}, {'name': 'interRAT-PS-HO-ToGERAN', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'IRAT-ParametersUTRA-FDD': {'members': [{'name': 'supportedBandListUTRA-FDD', 'type': 'SupportedBandListUTRA-FDD'}], 'type': 'SEQUENCE'}, 'IRAT-ParametersUTRA-TDD128': {'members': [{'name': 'supportedBandListUTRA-TDD128', 'type': 'SupportedBandListUTRA-TDD128'}], 'type': 'SEQUENCE'}, 'IRAT-ParametersUTRA-TDD384': {'members': [{'name': 'supportedBandListUTRA-TDD384', 'type': 'SupportedBandListUTRA-TDD384'}], 'type': 'SEQUENCE'}, 'IRAT-ParametersUTRA-TDD768': {'members': [{'name': 'supportedBandListUTRA-TDD768', 'type': 'SupportedBandListUTRA-TDD768'}], 'type': 'SEQUENCE'}, 'IdleModeMobilityControlInfo': {'members': [{'name': 'freqPriorityListEUTRA', 'optional': True, 'type': 'FreqPriorityListEUTRA'}, {'name': 'freqPriorityListGERAN', 'optional': True, 'type': 'FreqsPriorityListGERAN'}, {'name': 'freqPriorityListUTRA-FDD', 'optional': True, 'type': 'FreqPriorityListUTRA-FDD'}, {'name': 'freqPriorityListUTRA-TDD', 'optional': True, 'type': 'FreqPriorityListUTRA-TDD'}, {'name': 'bandClassPriorityListHRPD', 'optional': True, 'type': 'BandClassPriorityListHRPD'}, {'name': 'bandClassPriorityList1XRTT', 'optional': True, 'type': 'BandClassPriorityList1XRTT'}, {'name': 't320', 'optional': True, 'type': 'ENUMERATED', 'values': [('min5', 0), ('min10', 1), ('min20', 2), ('min30', 3), ('min60', 4), ('min120', 5), ('min180', 6), ('spare1', 7)]}, None], 'type': 'SEQUENCE'}, 'InitialUE-Identity': {'members': [{'name': 's-TMSI', 'type': 'S-TMSI'}, {'name': 'randomValue', 'size': [40], 'type': 'BIT ' 'STRING'}], 'type': 'CHOICE'}, 'InterFreqBandInfo': {'members': [{'name': 'interFreqNeedForGaps', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'InterFreqBandList': {'element': {'type': 'InterFreqBandInfo'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqBlackCellList': {'element': {'type': 'PhysCellIdRange'}, 'size': [(1, 'maxCellBlack')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqCarrierFreqInfo': {'members': [{'name': 'dl-CarrierFreq', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'q-RxLevMin', 'type': 'Q-RxLevMin'}, {'name': 'p-Max', 'optional': True, 'type': 'P-Max'}, {'name': 't-ReselectionEUTRA', 'type': 'T-Reselection'}, {'name': 't-ReselectionEUTRA-SF', 'optional': True, 'type': 'SpeedStateScaleFactors'}, {'name': 'threshX-High', 'type': 'ReselectionThreshold'}, {'name': 'threshX-Low', 'type': 'ReselectionThreshold'}, {'name': 'allowedMeasBandwidth', 'type': 'AllowedMeasBandwidth'}, {'name': 'presenceAntennaPort1', 'type': 'PresenceAntennaPort1'}, {'name': 'cellReselectionPriority', 'optional': True, 'type': 'CellReselectionPriority'}, {'name': 'neighCellConfig', 'type': 'NeighCellConfig'}, {'default': 'dB0', 'name': 'q-OffsetFreq', 'type': 'Q-OffsetRange'}, {'name': 'interFreqNeighCellList', 'optional': True, 'type': 'InterFreqNeighCellList'}, {'name': 'interFreqBlackCellList', 'optional': True, 'type': 'InterFreqBlackCellList'}, None], 'type': 'SEQUENCE'}, 'InterFreqCarrierFreqList': {'element': {'type': 'InterFreqCarrierFreqInfo'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE ' 'OF'}, 'InterFreqNeighCellInfo': {'members': [{'name': 'physCellId', 'type': 'PhysCellId'}, {'name': 'q-OffsetCell', 'type': 'Q-OffsetRange'}], 'type': 'SEQUENCE'}, 'InterFreqNeighCellList': {'element': {'type': 'InterFreqNeighCellInfo'}, 'size': [(1, 'maxCellInter')], 'type': 'SEQUENCE ' 'OF'}, 'InterRAT-BandInfo': {'members': [{'name': 'interRAT-NeedForGaps', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'InterRAT-BandList': {'element': {'type': 'InterRAT-BandInfo'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'IntraFreqBlackCellList': {'element': {'type': 'PhysCellIdRange'}, 'size': [(1, 'maxCellBlack')], 'type': 'SEQUENCE ' 'OF'}, 'IntraFreqNeighCellInfo': {'members': [{'name': 'physCellId', 'type': 'PhysCellId'}, {'name': 'q-OffsetCell', 'type': 'Q-OffsetRange'}, None], 'type': 'SEQUENCE'}, 'IntraFreqNeighCellList': {'element': {'type': 'IntraFreqNeighCellInfo'}, 'size': [(1, 'maxCellIntra')], 'type': 'SEQUENCE ' 'OF'}, 'LogicalChannelConfig': {'members': [{'members': [{'name': 'priority', 'restricted-to': [(1, 16)], 'type': 'INTEGER'}, {'name': 'prioritisedBitRate', 'type': 'ENUMERATED', 'values': [('kBps0', 0), ('kBps8', 1), ('kBps16', 2), ('kBps32', 3), ('kBps64', 4), ('kBps128', 5), ('kBps256', 6), ('infinity', 7), ('spare8', 8), ('spare7', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'bucketSizeDuration', 'type': 'ENUMERATED', 'values': [('ms50', 0), ('ms100', 1), ('ms150', 2), ('ms300', 3), ('ms500', 4), ('ms1000', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 'logicalChannelGroup', 'optional': True, 'restricted-to': [(0, 3)], 'type': 'INTEGER'}], 'name': 'ul-SpecificParameters', 'optional': True, 'type': 'SEQUENCE'}, None], 'type': 'SEQUENCE'}, 'MAC-MainConfig': {'members': [{'members': [{'name': 'maxHARQ-Tx', 'optional': True, 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n5', 4), ('n6', 5), ('n7', 6), ('n8', 7), ('n10', 8), ('n12', 9), ('n16', 10), ('n20', 11), ('n24', 12), ('n28', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'periodicBSR-Timer', 'optional': True, 'type': 'ENUMERATED', 'values': [('sf5', 0), ('sf10', 1), ('sf16', 2), ('sf20', 3), ('sf32', 4), ('sf40', 5), ('sf64', 6), ('sf80', 7), ('sf128', 8), ('sf160', 9), ('sf320', 10), ('sf640', 11), ('sf1280', 12), ('sf2560', 13), ('infinity', 14), ('spare1', 15)]}, {'name': 'retxBSR-Timer', 'type': 'ENUMERATED', 'values': [('sf320', 0), ('sf640', 1), ('sf1280', 2), ('sf2560', 3), ('sf5120', 4), ('sf10240', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 'ttiBundling', 'type': 'BOOLEAN'}], 'name': 'ul-SCH-Config', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'drx-Config', 'optional': True, 'type': 'DRX-Config'}, {'name': 'timeAlignmentTimerDedicated', 'type': 'TimeAlignmentTimer'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'periodicPHR-Timer', 'type': 'ENUMERATED', 'values': [('sf10', 0), ('sf20', 1), ('sf50', 2), ('sf100', 3), ('sf200', 4), ('sf500', 5), ('sf1000', 6), ('infinity', 7)]}, {'name': 'prohibitPHR-Timer', 'type': 'ENUMERATED', 'values': [('sf0', 0), ('sf10', 1), ('sf20', 2), ('sf50', 3), ('sf100', 4), ('sf200', 5), ('sf500', 6), ('sf1000', 7)]}, {'name': 'dl-PathlossChange', 'type': 'ENUMERATED', 'values': [('dB1', 0), ('dB3', 1), ('dB6', 2), ('infinity', 3)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'phr-Config', 'optional': True, 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'MBSFN-SubframeConfig': {'members': [{'name': 'radioframeAllocationPeriod', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n4', 2), ('n8', 3), ('n16', 4), ('n32', 5)]}, {'name': 'radioframeAllocationOffset', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'members': [{'name': 'oneFrame', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'fourFrames', 'size': [24], 'type': 'BIT ' 'STRING'}], 'name': 'subframeAllocation', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'MBSFN-SubframeConfigList': {'element': {'type': 'MBSFN-SubframeConfig'}, 'size': [(1, 'maxMBSFN-Allocations')], 'type': 'SEQUENCE ' 'OF'}, 'MCC': {'element': {'type': 'MCC-MNC-Digit'}, 'size': [3], 'type': 'SEQUENCE OF'}, 'MCC-MNC-Digit': {'restricted-to': [(0, 9)], 'type': 'INTEGER'}, 'MMEC': {'size': [8], 'type': 'BIT STRING'}, 'MNC': {'element': {'type': 'MCC-MNC-Digit'}, 'size': [(2, 3)], 'type': 'SEQUENCE OF'}, 'MasterInformationBlock': {'members': [{'name': 'dl-Bandwidth', 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'phich-Config', 'type': 'PHICH-Config'}, {'name': 'systemFrameNumber', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'spare', 'size': [10], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'MeasConfig': {'members': [{'name': 'measObjectToRemoveList', 'optional': True, 'type': 'MeasObjectToRemoveList'}, {'name': 'measObjectToAddModList', 'optional': True, 'type': 'MeasObjectToAddModList'}, {'name': 'reportConfigToRemoveList', 'optional': True, 'type': 'ReportConfigToRemoveList'}, {'name': 'reportConfigToAddModList', 'optional': True, 'type': 'ReportConfigToAddModList'}, {'name': 'measIdToRemoveList', 'optional': True, 'type': 'MeasIdToRemoveList'}, {'name': 'measIdToAddModList', 'optional': True, 'type': 'MeasIdToAddModList'}, {'name': 'quantityConfig', 'optional': True, 'type': 'QuantityConfig'}, {'name': 'measGapConfig', 'optional': True, 'type': 'MeasGapConfig'}, {'name': 's-Measure', 'optional': True, 'type': 'RSRP-Range'}, {'name': 'preRegistrationInfoHRPD', 'optional': True, 'type': 'PreRegistrationInfoHRPD'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'mobilityStateParameters', 'type': 'MobilityStateParameters'}, {'name': 'timeToTrigger-SF', 'type': 'SpeedStateScaleFactors'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'speedStatePars', 'optional': True, 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'MeasGapConfig': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'members': [{'name': 'gp0', 'restricted-to': [(0, 39)], 'type': 'INTEGER'}, {'name': 'gp1', 'restricted-to': [(0, 79)], 'type': 'INTEGER'}, None], 'name': 'gapOffset', 'type': 'CHOICE'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'MeasId': {'restricted-to': [(1, 'maxMeasId')], 'type': 'INTEGER'}, 'MeasIdToAddMod': {'members': [{'name': 'measId', 'type': 'MeasId'}, {'name': 'measObjectId', 'type': 'MeasObjectId'}, {'name': 'reportConfigId', 'type': 'ReportConfigId'}], 'type': 'SEQUENCE'}, 'MeasIdToAddModList': {'element': {'type': 'MeasIdToAddMod'}, 'size': [(1, 'maxMeasId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasIdToRemoveList': {'element': {'type': 'MeasId'}, 'size': [(1, 'maxMeasId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasObjectCDMA2000': {'members': [{'name': 'cdma2000-Type', 'type': 'CDMA2000-Type'}, {'name': 'carrierFreq', 'type': 'CarrierFreqCDMA2000'}, {'name': 'searchWindowSize', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'default': 0, 'name': 'offsetFreq', 'type': 'Q-OffsetRangeInterRAT'}, {'name': 'cellsToRemoveList', 'optional': True, 'type': 'CellIndexList'}, {'name': 'cellsToAddModList', 'optional': True, 'type': 'CellsToAddModListCDMA2000'}, {'name': 'cellForWhichToReportCGI', 'optional': True, 'type': 'PhysCellIdCDMA2000'}, None], 'type': 'SEQUENCE'}, 'MeasObjectEUTRA': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'allowedMeasBandwidth', 'type': 'AllowedMeasBandwidth'}, {'name': 'presenceAntennaPort1', 'type': 'PresenceAntennaPort1'}, {'name': 'neighCellConfig', 'type': 'NeighCellConfig'}, {'default': 'dB0', 'name': 'offsetFreq', 'type': 'Q-OffsetRange'}, {'name': 'cellsToRemoveList', 'optional': True, 'type': 'CellIndexList'}, {'name': 'cellsToAddModList', 'optional': True, 'type': 'CellsToAddModList'}, {'name': 'blackCellsToRemoveList', 'optional': True, 'type': 'CellIndexList'}, {'name': 'blackCellsToAddModList', 'optional': True, 'type': 'BlackCellsToAddModList'}, {'name': 'cellForWhichToReportCGI', 'optional': True, 'type': 'PhysCellId'}, None], 'type': 'SEQUENCE'}, 'MeasObjectGERAN': {'members': [{'name': 'carrierFreqs', 'type': 'CarrierFreqsGERAN'}, {'default': 0, 'name': 'offsetFreq', 'type': 'Q-OffsetRangeInterRAT'}, {'default': '0b11111111', 'name': 'ncc-Permitted', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'cellForWhichToReportCGI', 'optional': True, 'type': 'PhysCellIdGERAN'}, None], 'type': 'SEQUENCE'}, 'MeasObjectId': {'restricted-to': [(1, 'maxObjectId')], 'type': 'INTEGER'}, 'MeasObjectToAddMod': {'members': [{'name': 'measObjectId', 'type': 'MeasObjectId'}, {'members': [{'name': 'measObjectEUTRA', 'type': 'MeasObjectEUTRA'}, {'name': 'measObjectUTRA', 'type': 'MeasObjectUTRA'}, {'name': 'measObjectGERAN', 'type': 'MeasObjectGERAN'}, {'name': 'measObjectCDMA2000', 'type': 'MeasObjectCDMA2000'}, None], 'name': 'measObject', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'MeasObjectToAddModList': {'element': {'type': 'MeasObjectToAddMod'}, 'size': [(1, 'maxObjectId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasObjectToRemoveList': {'element': {'type': 'MeasObjectId'}, 'size': [(1, 'maxObjectId')], 'type': 'SEQUENCE ' 'OF'}, 'MeasObjectUTRA': {'members': [{'name': 'carrierFreq', 'type': 'ARFCN-ValueUTRA'}, {'default': 0, 'name': 'offsetFreq', 'type': 'Q-OffsetRangeInterRAT'}, {'name': 'cellsToRemoveList', 'optional': True, 'type': 'CellIndexList'}, {'members': [{'name': 'cellsToAddModListUTRA-FDD', 'type': 'CellsToAddModListUTRA-FDD'}, {'name': 'cellsToAddModListUTRA-TDD', 'type': 'CellsToAddModListUTRA-TDD'}], 'name': 'cellsToAddModList', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'utra-FDD', 'type': 'PhysCellIdUTRA-FDD'}, {'name': 'utra-TDD', 'type': 'PhysCellIdUTRA-TDD'}], 'name': 'cellForWhichToReportCGI', 'optional': True, 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'MeasParameters': {'members': [{'name': 'bandListEUTRA', 'type': 'BandListEUTRA'}], 'type': 'SEQUENCE'}, 'MeasResultCDMA2000': {'members': [{'name': 'physCellId', 'type': 'PhysCellIdCDMA2000'}, {'name': 'cgi-Info', 'optional': True, 'type': 'CellGlobalIdCDMA2000'}, {'members': [{'name': 'pilotPnPhase', 'optional': True, 'restricted-to': [(0, 32767)], 'type': 'INTEGER'}, {'name': 'pilotStrength', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, None], 'name': 'measResult', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MeasResultEUTRA': {'members': [{'name': 'physCellId', 'type': 'PhysCellId'}, {'members': [{'name': 'cellGlobalId', 'type': 'CellGlobalIdEUTRA'}, {'name': 'trackingAreaCode', 'type': 'TrackingAreaCode'}, {'name': 'plmn-IdentityList', 'optional': True, 'type': 'PLMN-IdentityList2'}], 'name': 'cgi-Info', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'rsrpResult', 'optional': True, 'type': 'RSRP-Range'}, {'name': 'rsrqResult', 'optional': True, 'type': 'RSRQ-Range'}, None], 'name': 'measResult', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MeasResultGERAN': {'members': [{'name': 'carrierFreq', 'type': 'CarrierFreqGERAN'}, {'name': 'physCellId', 'type': 'PhysCellIdGERAN'}, {'members': [{'name': 'cellGlobalId', 'type': 'CellGlobalIdGERAN'}, {'name': 'routingAreaCode', 'optional': True, 'size': [8], 'type': 'BIT ' 'STRING'}], 'name': 'cgi-Info', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'rssi', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, None], 'name': 'measResult', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MeasResultListCDMA2000': {'element': {'type': 'MeasResultCDMA2000'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultListEUTRA': {'element': {'type': 'MeasResultEUTRA'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultListGERAN': {'element': {'type': 'MeasResultGERAN'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultListUTRA': {'element': {'type': 'MeasResultUTRA'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'MeasResultUTRA': {'members': [{'members': [{'name': 'fdd', 'type': 'PhysCellIdUTRA-FDD'}, {'name': 'tdd', 'type': 'PhysCellIdUTRA-TDD'}], 'name': 'physCellId', 'type': 'CHOICE'}, {'members': [{'name': 'cellGlobalId', 'type': 'CellGlobalIdUTRA'}, {'name': 'locationAreaCode', 'optional': True, 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'routingAreaCode', 'optional': True, 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'plmn-IdentityList', 'optional': True, 'type': 'PLMN-IdentityList2'}], 'name': 'cgi-Info', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'utra-RSCP', 'optional': True, 'restricted-to': [(-5, 91)], 'type': 'INTEGER'}, {'name': 'utra-EcN0', 'optional': True, 'restricted-to': [(0, 49)], 'type': 'INTEGER'}, None], 'name': 'measResult', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MeasResults': {'members': [{'name': 'measId', 'type': 'MeasId'}, {'members': [{'name': 'rsrpResult', 'type': 'RSRP-Range'}, {'name': 'rsrqResult', 'type': 'RSRQ-Range'}], 'name': 'measResultServCell', 'type': 'SEQUENCE'}, {'members': [{'name': 'measResultListEUTRA', 'type': 'MeasResultListEUTRA'}, {'name': 'measResultListUTRA', 'type': 'MeasResultListUTRA'}, {'name': 'measResultListGERAN', 'type': 'MeasResultListGERAN'}, {'name': 'measResultsCDMA2000', 'type': 'MeasResultsCDMA2000'}, None], 'name': 'measResultNeighCells', 'optional': True, 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'MeasResultsCDMA2000': {'members': [{'name': 'preRegistrationStatusHRPD', 'type': 'BOOLEAN'}, {'name': 'measResultListCDMA2000', 'type': 'MeasResultListCDMA2000'}], 'type': 'SEQUENCE'}, 'MeasurementReport': {'members': [{'members': [{'members': [{'name': 'measurementReport-r8', 'type': 'MeasurementReport-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'MeasurementReport-r8-IEs': {'members': [{'name': 'measResults', 'type': 'MeasResults'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MobilityControlInfo': {'members': [{'name': 'targetPhysCellId', 'type': 'PhysCellId'}, {'name': 'carrierFreq', 'optional': True, 'type': 'CarrierFreqEUTRA'}, {'name': 'carrierBandwidth', 'optional': True, 'type': 'CarrierBandwidthEUTRA'}, {'name': 'additionalSpectrumEmission', 'optional': True, 'type': 'AdditionalSpectrumEmission'}, {'name': 't304', 'type': 'ENUMERATED', 'values': [('ms50', 0), ('ms100', 1), ('ms150', 2), ('ms200', 3), ('ms500', 4), ('ms1000', 5), ('ms2000', 6), ('spare1', 7)]}, {'name': 'newUE-Identity', 'type': 'C-RNTI'}, {'name': 'radioResourceConfigCommon', 'type': 'RadioResourceConfigCommon'}, {'name': 'rach-ConfigDedicated', 'optional': True, 'type': 'RACH-ConfigDedicated'}, None], 'type': 'SEQUENCE'}, 'MobilityFromEUTRACommand': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'mobilityFromEUTRACommand-r8', 'type': 'MobilityFromEUTRACommand-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'MobilityFromEUTRACommand-r8-IEs': {'members': [{'name': 'cs-FallbackIndicator', 'type': 'BOOLEAN'}, {'members': [{'name': 'handover', 'type': 'Handover'}, {'name': 'cellChangeOrder', 'type': 'CellChangeOrder'}], 'name': 'purpose', 'type': 'CHOICE'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MobilityParametersCDMA2000': {'type': 'OCTET ' 'STRING'}, 'MobilityStateParameters': {'members': [{'name': 't-Evaluation', 'type': 'ENUMERATED', 'values': [('s30', 0), ('s60', 1), ('s120', 2), ('s180', 3), ('s240', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 't-HystNormal', 'type': 'ENUMERATED', 'values': [('s30', 0), ('s60', 1), ('s120', 2), ('s180', 3), ('s240', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}, {'name': 'n-CellChangeMedium', 'restricted-to': [(1, 16)], 'type': 'INTEGER'}, {'name': 'n-CellChangeHigh', 'restricted-to': [(1, 16)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'N1-PUCCH-AN-PersistentList': {'element': {'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, 'size': [(1, 4)], 'type': 'SEQUENCE ' 'OF'}, 'NeighCellCDMA2000': {'members': [{'name': 'bandClass', 'type': 'BandclassCDMA2000'}, {'name': 'neighCellsPerFreqList', 'type': 'NeighCellsPerBandclassListCDMA2000'}], 'type': 'SEQUENCE'}, 'NeighCellConfig': {'size': [2], 'type': 'BIT STRING'}, 'NeighCellListCDMA2000': {'element': {'type': 'NeighCellCDMA2000'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'NeighCellsPerBandclassCDMA2000': {'members': [{'name': 'arfcn', 'type': 'ARFCN-ValueCDMA2000'}, {'name': 'physCellIdList', 'type': 'PhysCellIdListCDMA2000'}], 'type': 'SEQUENCE'}, 'NeighCellsPerBandclassListCDMA2000': {'element': {'type': 'NeighCellsPerBandclassCDMA2000'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'NextHopChainingCount': {'restricted-to': [(0, 7)], 'type': 'INTEGER'}, 'P-Max': {'restricted-to': [(-30, 33)], 'type': 'INTEGER'}, 'PCCH-Config': {'members': [{'name': 'defaultPagingCycle', 'type': 'ENUMERATED', 'values': [('rf32', 0), ('rf64', 1), ('rf128', 2), ('rf256', 3)]}, {'name': 'nB', 'type': 'ENUMERATED', 'values': [('fourT', 0), ('twoT', 1), ('oneT', 2), ('halfT', 3), ('quarterT', 4), ('oneEighthT', 5), ('oneSixteenthT', 6), ('oneThirtySecondT', 7)]}], 'type': 'SEQUENCE'}, 'PCCH-Message': {'members': [{'name': 'message', 'type': 'PCCH-MessageType'}], 'type': 'SEQUENCE'}, 'PCCH-MessageType': {'members': [{'members': [{'name': 'paging', 'type': 'Paging'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'PDCP-Config': {'members': [{'name': 'discardTimer', 'optional': True, 'type': 'ENUMERATED', 'values': [('ms50', 0), ('ms100', 1), ('ms150', 2), ('ms300', 3), ('ms500', 4), ('ms750', 5), ('ms1500', 6), ('infinity', 7)]}, {'members': [{'name': 'statusReportRequired', 'type': 'BOOLEAN'}], 'name': 'rlc-AM', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'pdcp-SN-Size', 'type': 'ENUMERATED', 'values': [('len7bits', 0), ('len12bits', 1)]}], 'name': 'rlc-UM', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'notUsed', 'type': 'NULL'}, {'members': [{'default': 15, 'name': 'maxCID', 'restricted-to': [(1, 16383)], 'type': 'INTEGER'}, {'members': [{'name': 'profile0x0001', 'type': 'BOOLEAN'}, {'name': 'profile0x0002', 'type': 'BOOLEAN'}, {'name': 'profile0x0003', 'type': 'BOOLEAN'}, {'name': 'profile0x0004', 'type': 'BOOLEAN'}, {'name': 'profile0x0006', 'type': 'BOOLEAN'}, {'name': 'profile0x0101', 'type': 'BOOLEAN'}, {'name': 'profile0x0102', 'type': 'BOOLEAN'}, {'name': 'profile0x0103', 'type': 'BOOLEAN'}, {'name': 'profile0x0104', 'type': 'BOOLEAN'}], 'name': 'profiles', 'type': 'SEQUENCE'}, None], 'name': 'rohc', 'type': 'SEQUENCE'}], 'name': 'headerCompression', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'PDCP-Parameters': {'members': [{'members': [{'name': 'profile0x0001', 'type': 'BOOLEAN'}, {'name': 'profile0x0002', 'type': 'BOOLEAN'}, {'name': 'profile0x0003', 'type': 'BOOLEAN'}, {'name': 'profile0x0004', 'type': 'BOOLEAN'}, {'name': 'profile0x0006', 'type': 'BOOLEAN'}, {'name': 'profile0x0101', 'type': 'BOOLEAN'}, {'name': 'profile0x0102', 'type': 'BOOLEAN'}, {'name': 'profile0x0103', 'type': 'BOOLEAN'}, {'name': 'profile0x0104', 'type': 'BOOLEAN'}], 'name': 'supportedROHC-Profiles', 'type': 'SEQUENCE'}, {'default': 'cs16', 'name': 'maxNumberROHC-ContextSessions', 'type': 'ENUMERATED', 'values': [('cs2', 0), ('cs4', 1), ('cs8', 2), ('cs12', 3), ('cs16', 4), ('cs24', 5), ('cs32', 6), ('cs48', 7), ('cs64', 8), ('cs128', 9), ('cs256', 10), ('cs512', 11), ('cs1024', 12), ('cs16384', 13), ('spare2', 14), ('spare1', 15)]}, None], 'type': 'SEQUENCE'}, 'PDSCH-ConfigCommon': {'members': [{'name': 'referenceSignalPower', 'restricted-to': [(-60, 50)], 'type': 'INTEGER'}, {'name': 'p-b', 'restricted-to': [(0, 3)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PDSCH-ConfigDedicated': {'members': [{'name': 'p-a', 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-4dot77', 1), ('dB-3', 2), ('dB-1dot77', 3), ('dB0', 4), ('dB1', 5), ('dB2', 6), ('dB3', 7)]}], 'type': 'SEQUENCE'}, 'PHICH-Config': {'members': [{'name': 'phich-Duration', 'type': 'ENUMERATED', 'values': [('normal', 0), ('extended', 1)]}, {'name': 'phich-Resource', 'type': 'ENUMERATED', 'values': [('oneSixth', 0), ('half', 1), ('one', 2), ('two', 3)]}], 'type': 'SEQUENCE'}, 'PLMN-Identity': {'members': [{'name': 'mcc', 'optional': True, 'type': 'MCC'}, {'name': 'mnc', 'type': 'MNC'}], 'type': 'SEQUENCE'}, 'PLMN-IdentityInfo': {'members': [{'name': 'plmn-Identity', 'type': 'PLMN-Identity'}, {'name': 'cellReservedForOperatorUse', 'type': 'ENUMERATED', 'values': [('reserved', 0), ('notReserved', 1)]}], 'type': 'SEQUENCE'}, 'PLMN-IdentityList': {'element': {'type': 'PLMN-IdentityInfo'}, 'size': [(1, 6)], 'type': 'SEQUENCE ' 'OF'}, 'PLMN-IdentityList2': {'element': {'type': 'PLMN-Identity'}, 'size': [(1, 5)], 'type': 'SEQUENCE ' 'OF'}, 'PRACH-Config': {'members': [{'name': 'rootSequenceIndex', 'restricted-to': [(0, 837)], 'type': 'INTEGER'}, {'name': 'prach-ConfigInfo', 'optional': True, 'type': 'PRACH-ConfigInfo'}], 'type': 'SEQUENCE'}, 'PRACH-ConfigInfo': {'members': [{'name': 'prach-ConfigIndex', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'highSpeedFlag', 'type': 'BOOLEAN'}, {'name': 'zeroCorrelationZoneConfig', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'prach-FreqOffset', 'restricted-to': [(0, 94)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PRACH-ConfigSIB': {'members': [{'name': 'rootSequenceIndex', 'restricted-to': [(0, 837)], 'type': 'INTEGER'}, {'name': 'prach-ConfigInfo', 'type': 'PRACH-ConfigInfo'}], 'type': 'SEQUENCE'}, 'PUCCH-ConfigCommon': {'members': [{'name': 'deltaPUCCH-Shift', 'type': 'ENUMERATED', 'values': [('ds1', 0), ('ds2', 1), ('ds3', 2)]}, {'name': 'nRB-CQI', 'restricted-to': [(0, 98)], 'type': 'INTEGER'}, {'name': 'nCS-AN', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'n1PUCCH-AN', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PUCCH-ConfigDedicated': {'members': [{'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'repetitionFactor', 'type': 'ENUMERATED', 'values': [('n2', 0), ('n4', 1), ('n6', 2), ('spare1', 3)]}, {'name': 'n1PUCCH-AN-Rep', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'ackNackRepetition', 'type': 'CHOICE'}, {'name': 'tdd-AckNackFeedbackMode', 'optional': True, 'type': 'ENUMERATED', 'values': [('bundling', 0), ('multiplexing', 1)]}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigCommon': {'members': [{'members': [{'name': 'n-SB', 'restricted-to': [(1, 4)], 'type': 'INTEGER'}, {'name': 'hoppingMode', 'type': 'ENUMERATED', 'values': [('interSubFrame', 0), ('intraAndInterSubFrame', 1)]}, {'name': 'pusch-HoppingOffset', 'restricted-to': [(0, 98)], 'type': 'INTEGER'}, {'name': 'enable64QAM', 'type': 'BOOLEAN'}], 'name': 'pusch-ConfigBasic', 'type': 'SEQUENCE'}, {'name': 'ul-ReferenceSignalsPUSCH', 'type': 'UL-ReferenceSignalsPUSCH'}], 'type': 'SEQUENCE'}, 'PUSCH-ConfigDedicated': {'members': [{'name': 'betaOffset-ACK-Index', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-RI-Index', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'betaOffset-CQI-Index', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Paging': {'members': [{'name': 'pagingRecordList', 'optional': True, 'type': 'PagingRecordList'}, {'name': 'systemInfoModification', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'name': 'etws-Indication', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'PagingRecord': {'members': [{'name': 'ue-Identity', 'type': 'PagingUE-Identity'}, {'name': 'cn-Domain', 'type': 'ENUMERATED', 'values': [('ps', 0), ('cs', 1)]}, None], 'type': 'SEQUENCE'}, 'PagingRecordList': {'element': {'type': 'PagingRecord'}, 'size': [(1, 'maxPageRec')], 'type': 'SEQUENCE ' 'OF'}, 'PagingUE-Identity': {'members': [{'name': 's-TMSI', 'type': 'S-TMSI'}, {'name': 'imsi', 'type': 'IMSI'}, None], 'type': 'CHOICE'}, 'PhyLayerParameters': {'members': [{'name': 'ue-TxAntennaSelectionSupported', 'type': 'BOOLEAN'}, {'name': 'ue-SpecificRefSigsSupported', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'PhysCellId': {'restricted-to': [(0, 503)], 'type': 'INTEGER'}, 'PhysCellIdCDMA2000': {'restricted-to': [(0, 'maxPNOffset')], 'type': 'INTEGER'}, 'PhysCellIdGERAN': {'members': [{'name': 'networkColourCode', 'size': [3], 'type': 'BIT ' 'STRING'}, {'name': 'baseStationColourCode', 'size': [3], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'PhysCellIdListCDMA2000': {'element': {'type': 'PhysCellIdCDMA2000'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'PhysCellIdRange': {'members': [{'name': 'start', 'type': 'PhysCellId'}, {'name': 'range', 'optional': True, 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1), ('n12', 2), ('n16', 3), ('n24', 4), ('n32', 5), ('n48', 6), ('n64', 7), ('n84', 8), ('n96', 9), ('n128', 10), ('n168', 11), ('n252', 12), ('n504', 13), ('spare2', 14), ('spare1', 15)]}], 'type': 'SEQUENCE'}, 'PhysCellIdUTRA-FDD': {'restricted-to': [(0, 511)], 'type': 'INTEGER'}, 'PhysCellIdUTRA-TDD': {'restricted-to': [(0, 127)], 'type': 'INTEGER'}, 'PhysicalConfigDedicated': {'members': [{'name': 'pdsch-ConfigDedicated', 'optional': True, 'type': 'PDSCH-ConfigDedicated'}, {'name': 'pucch-ConfigDedicated', 'optional': True, 'type': 'PUCCH-ConfigDedicated'}, {'name': 'pusch-ConfigDedicated', 'optional': True, 'type': 'PUSCH-ConfigDedicated'}, {'name': 'uplinkPowerControlDedicated', 'optional': True, 'type': 'UplinkPowerControlDedicated'}, {'name': 'tpc-PDCCH-ConfigPUCCH', 'optional': True, 'type': 'TPC-PDCCH-Config'}, {'name': 'tpc-PDCCH-ConfigPUSCH', 'optional': True, 'type': 'TPC-PDCCH-Config'}, {'name': 'cqi-ReportConfig', 'optional': True, 'type': 'CQI-ReportConfig'}, {'name': 'soundingRS-UL-ConfigDedicated', 'optional': True, 'type': 'SoundingRS-UL-ConfigDedicated'}, {'members': [{'name': 'explicitValue', 'type': 'AntennaInfoDedicated'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'antennaInfo', 'optional': True, 'type': 'CHOICE'}, {'name': 'schedulingRequestConfig', 'optional': True, 'type': 'SchedulingRequestConfig'}, None], 'type': 'SEQUENCE'}, 'PollByte': {'type': 'ENUMERATED', 'values': [('kB25', 0), ('kB50', 1), ('kB75', 2), ('kB100', 3), ('kB125', 4), ('kB250', 5), ('kB375', 6), ('kB500', 7), ('kB750', 8), ('kB1000', 9), ('kB1250', 10), ('kB1500', 11), ('kB2000', 12), ('kB3000', 13), ('kBinfinity', 14), ('spare1', 15)]}, 'PollPDU': {'type': 'ENUMERATED', 'values': [('p4', 0), ('p8', 1), ('p16', 2), ('p32', 3), ('p64', 4), ('p128', 5), ('p256', 6), ('pInfinity', 7)]}, 'PreRegistrationInfoHRPD': {'members': [{'name': 'preRegistrationAllowed', 'type': 'BOOLEAN'}, {'name': 'preRegistrationZoneId', 'optional': True, 'type': 'PreRegistrationZoneIdHRPD'}, {'name': 'secondaryPreRegistrationZoneIdList', 'optional': True, 'type': 'SecondaryPreRegistrationZoneIdListHRPD'}], 'type': 'SEQUENCE'}, 'PreRegistrationZoneIdHRPD': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'PresenceAntennaPort1': {'type': 'BOOLEAN'}, 'Q-OffsetRange': {'type': 'ENUMERATED', 'values': [('dB-24', 0), ('dB-22', 1), ('dB-20', 2), ('dB-18', 3), ('dB-16', 4), ('dB-14', 5), ('dB-12', 6), ('dB-10', 7), ('dB-8', 8), ('dB-6', 9), ('dB-5', 10), ('dB-4', 11), ('dB-3', 12), ('dB-2', 13), ('dB-1', 14), ('dB0', 15), ('dB1', 16), ('dB2', 17), ('dB3', 18), ('dB4', 19), ('dB5', 20), ('dB6', 21), ('dB8', 22), ('dB10', 23), ('dB12', 24), ('dB14', 25), ('dB16', 26), ('dB18', 27), ('dB20', 28), ('dB22', 29), ('dB24', 30)]}, 'Q-OffsetRangeInterRAT': {'restricted-to': [(-15, 15)], 'type': 'INTEGER'}, 'Q-RxLevMin': {'restricted-to': [(-70, -22)], 'type': 'INTEGER'}, 'QuantityConfig': {'members': [{'name': 'quantityConfigEUTRA', 'optional': True, 'type': 'QuantityConfigEUTRA'}, {'name': 'quantityConfigUTRA', 'optional': True, 'type': 'QuantityConfigUTRA'}, {'name': 'quantityConfigGERAN', 'optional': True, 'type': 'QuantityConfigGERAN'}, {'name': 'quantityConfigCDMA2000', 'optional': True, 'type': 'QuantityConfigCDMA2000'}, None], 'type': 'SEQUENCE'}, 'QuantityConfigCDMA2000': {'members': [{'name': 'measQuantityCDMA2000', 'type': 'ENUMERATED', 'values': [('pilotStrength', 0), ('pilotPnPhaseAndPilotStrength', 1)]}], 'type': 'SEQUENCE'}, 'QuantityConfigEUTRA': {'members': [{'default': 'fc4', 'name': 'filterCoefficientRSRP', 'type': 'FilterCoefficient'}, {'default': 'fc4', 'name': 'filterCoefficientRSRQ', 'type': 'FilterCoefficient'}], 'type': 'SEQUENCE'}, 'QuantityConfigGERAN': {'members': [{'name': 'measQuantityGERAN', 'type': 'ENUMERATED', 'values': [('rssi', 0)]}, {'default': 'fc2', 'name': 'filterCoefficient', 'type': 'FilterCoefficient'}], 'type': 'SEQUENCE'}, 'QuantityConfigUTRA': {'members': [{'name': 'measQuantityUTRA-FDD', 'type': 'ENUMERATED', 'values': [('cpich-RSCP', 0), ('cpich-EcN0', 1)]}, {'name': 'measQuantityUTRA-TDD', 'type': 'ENUMERATED', 'values': [('pccpch-RSCP', 0)]}, {'default': 'fc4', 'name': 'filterCoefficient', 'type': 'FilterCoefficient'}], 'type': 'SEQUENCE'}, 'RACH-ConfigCommon': {'members': [{'members': [{'name': 'numberOfRA-Preambles', 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1), ('n12', 2), ('n16', 3), ('n20', 4), ('n24', 5), ('n28', 6), ('n32', 7), ('n36', 8), ('n40', 9), ('n44', 10), ('n48', 11), ('n52', 12), ('n56', 13), ('n60', 14), ('n64', 15)]}, {'members': [{'name': 'sizeOfRA-PreamblesGroupA', 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1), ('n12', 2), ('n16', 3), ('n20', 4), ('n24', 5), ('n28', 6), ('n32', 7), ('n36', 8), ('n40', 9), ('n44', 10), ('n48', 11), ('n52', 12), ('n56', 13), ('n60', 14)]}, {'name': 'messageSizeGroupA', 'type': 'ENUMERATED', 'values': [('b56', 0), ('b144', 1), ('b208', 2), ('b256', 3)]}, {'name': 'messagePowerOffsetGroupB', 'type': 'ENUMERATED', 'values': [('minusinfinity', 0), ('dB0', 1), ('dB5', 2), ('dB8', 3), ('dB10', 4), ('dB12', 5), ('dB15', 6), ('dB18', 7)]}, None], 'name': 'preamblesGroupAConfig', 'optional': True, 'type': 'SEQUENCE'}], 'name': 'preambleInfo', 'type': 'SEQUENCE'}, {'members': [{'name': 'powerRampingStep', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB2', 1), ('dB4', 2), ('dB6', 3)]}, {'name': 'preambleInitialReceivedTargetPower', 'type': 'ENUMERATED', 'values': [('dBm-120', 0), ('dBm-118', 1), ('dBm-116', 2), ('dBm-114', 3), ('dBm-112', 4), ('dBm-110', 5), ('dBm-108', 6), ('dBm-106', 7), ('dBm-104', 8), ('dBm-102', 9), ('dBm-100', 10), ('dBm-98', 11), ('dBm-96', 12), ('dBm-94', 13), ('dBm-92', 14), ('dBm-90', 15)]}], 'name': 'powerRampingParameters', 'type': 'SEQUENCE'}, {'members': [{'name': 'preambleTransMax', 'type': 'ENUMERATED', 'values': [('n3', 0), ('n4', 1), ('n5', 2), ('n6', 3), ('n7', 4), ('n8', 5), ('n10', 6), ('n20', 7), ('n50', 8), ('n100', 9), ('n200', 10)]}, {'name': 'ra-ResponseWindowSize', 'type': 'ENUMERATED', 'values': [('sf2', 0), ('sf3', 1), ('sf4', 2), ('sf5', 3), ('sf6', 4), ('sf7', 5), ('sf8', 6), ('sf10', 7)]}, {'name': 'mac-ContentionResolutionTimer', 'type': 'ENUMERATED', 'values': [('sf8', 0), ('sf16', 1), ('sf24', 2), ('sf32', 3), ('sf40', 4), ('sf48', 5), ('sf56', 6), ('sf64', 7)]}], 'name': 'ra-SupervisionInfo', 'type': 'SEQUENCE'}, {'name': 'maxHARQ-Msg3Tx', 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'RACH-ConfigDedicated': {'members': [{'name': 'ra-PreambleIndex', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'ra-PRACH-MaskIndex', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'RAND-CDMA2000': {'size': [32], 'type': 'BIT STRING'}, 'RAT-Type': {'type': 'ENUMERATED', 'values': [('eutra', 0), ('utra', 1), ('geran-cs', 2), ('geran-ps', 3), ('cdma2000-1XRTT', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7), None]}, 'RF-Parameters': {'members': [{'name': 'supportedBandListEUTRA', 'type': 'SupportedBandListEUTRA'}], 'type': 'SEQUENCE'}, 'RLC-Config': {'members': [{'members': [{'name': 'ul-AM-RLC', 'type': 'UL-AM-RLC'}, {'name': 'dl-AM-RLC', 'type': 'DL-AM-RLC'}], 'name': 'am', 'type': 'SEQUENCE'}, {'members': [{'name': 'ul-UM-RLC', 'type': 'UL-UM-RLC'}, {'name': 'dl-UM-RLC', 'type': 'DL-UM-RLC'}], 'name': 'um-Bi-Directional', 'type': 'SEQUENCE'}, {'members': [{'name': 'ul-UM-RLC', 'type': 'UL-UM-RLC'}], 'name': 'um-Uni-Directional-UL', 'type': 'SEQUENCE'}, {'members': [{'name': 'dl-UM-RLC', 'type': 'DL-UM-RLC'}], 'name': 'um-Uni-Directional-DL', 'type': 'SEQUENCE'}, None], 'type': 'CHOICE'}, 'RRC-TransactionIdentifier': {'restricted-to': [(0, 3)], 'type': 'INTEGER'}, 'RRCConnectionReconfiguration': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionReconfiguration-r8', 'type': 'RRCConnectionReconfiguration-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfiguration-r8-IEs': {'members': [{'name': 'measConfig', 'optional': True, 'type': 'MeasConfig'}, {'name': 'mobilityControlInfo', 'optional': True, 'type': 'MobilityControlInfo'}, {'element': {'type': 'DedicatedInfoNAS'}, 'name': 'dedicatedInfoNASList', 'optional': True, 'size': [(1, 'maxDRB')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'radioResourceConfigDedicated', 'optional': True, 'type': 'RadioResourceConfigDedicated'}, {'name': 'securityConfigHO', 'optional': True, 'type': 'SecurityConfigHO'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfigurationComplete': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'rrcConnectionReconfigurationComplete-r8', 'type': 'RRCConnectionReconfigurationComplete-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReconfigurationComplete-r8-IEs': {'members': [{'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishment': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionReestablishment-r8', 'type': 'RRCConnectionReestablishment-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishment-r8-IEs': {'members': [{'name': 'radioResourceConfigDedicated', 'type': 'RadioResourceConfigDedicated'}, {'name': 'nextHopChainingCount', 'type': 'NextHopChainingCount'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentComplete': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'rrcConnectionReestablishmentComplete-r8', 'type': 'RRCConnectionReestablishmentComplete-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentComplete-r8-IEs': {'members': [{'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentReject': {'members': [{'members': [{'name': 'rrcConnectionReestablishmentReject-r8', 'type': 'RRCConnectionReestablishmentReject-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentReject-r8-IEs': {'members': [{'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentRequest': {'members': [{'members': [{'name': 'rrcConnectionReestablishmentRequest-r8', 'type': 'RRCConnectionReestablishmentRequest-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReestablishmentRequest-r8-IEs': {'members': [{'name': 'ue-Identity', 'type': 'ReestabUE-Identity'}, {'name': 'reestablishmentCause', 'type': 'ReestablishmentCause'}, {'name': 'spare', 'size': [2], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'RRCConnectionReject': {'members': [{'members': [{'members': [{'name': 'rrcConnectionReject-r8', 'type': 'RRCConnectionReject-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionReject-r8-IEs': {'members': [{'name': 'waitTime', 'restricted-to': [(1, 16)], 'type': 'INTEGER'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionRelease': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionRelease-r8', 'type': 'RRCConnectionRelease-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionRelease-r8-IEs': {'members': [{'name': 'releaseCause', 'type': 'ReleaseCause'}, {'name': 'redirectedCarrierInfo', 'optional': True, 'type': 'RedirectedCarrierInfo'}, {'name': 'idleModeMobilityControlInfo', 'optional': True, 'type': 'IdleModeMobilityControlInfo'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionRequest': {'members': [{'members': [{'name': 'rrcConnectionRequest-r8', 'type': 'RRCConnectionRequest-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionRequest-r8-IEs': {'members': [{'name': 'ue-Identity', 'type': 'InitialUE-Identity'}, {'name': 'establishmentCause', 'type': 'EstablishmentCause'}, {'name': 'spare', 'size': [1], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetup': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionSetup-r8', 'type': 'RRCConnectionSetup-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetup-r8-IEs': {'members': [{'name': 'radioResourceConfigDedicated', 'type': 'RadioResourceConfigDedicated'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'rrcConnectionSetupComplete-r8', 'type': 'RRCConnectionSetupComplete-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'RRCConnectionSetupComplete-r8-IEs': {'members': [{'name': 'selectedPLMN-Identity', 'restricted-to': [(1, 6)], 'type': 'INTEGER'}, {'name': 'registeredMME', 'optional': True, 'type': 'RegisteredMME'}, {'name': 'dedicatedInfoNAS', 'type': 'DedicatedInfoNAS'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'RSRP-Range': {'restricted-to': [(0, 97)], 'type': 'INTEGER'}, 'RSRQ-Range': {'restricted-to': [(0, 34)], 'type': 'INTEGER'}, 'RadioResourceConfigCommon': {'members': [{'name': 'rach-ConfigCommon', 'optional': True, 'type': 'RACH-ConfigCommon'}, {'name': 'prach-Config', 'type': 'PRACH-Config'}, {'name': 'pdsch-ConfigCommon', 'optional': True, 'type': 'PDSCH-ConfigCommon'}, {'name': 'pusch-ConfigCommon', 'type': 'PUSCH-ConfigCommon'}, {'name': 'phich-Config', 'optional': True, 'type': 'PHICH-Config'}, {'name': 'pucch-ConfigCommon', 'optional': True, 'type': 'PUCCH-ConfigCommon'}, {'name': 'soundingRS-UL-ConfigCommon', 'optional': True, 'type': 'SoundingRS-UL-ConfigCommon'}, {'name': 'uplinkPowerControlCommon', 'optional': True, 'type': 'UplinkPowerControlCommon'}, {'name': 'antennaInfoCommon', 'optional': True, 'type': 'AntennaInfoCommon'}, {'name': 'p-Max', 'optional': True, 'type': 'P-Max'}, {'name': 'tdd-Config', 'optional': True, 'type': 'TDD-Config'}, {'name': 'ul-CyclicPrefixLength', 'type': 'UL-CyclicPrefixLength'}, None], 'type': 'SEQUENCE'}, 'RadioResourceConfigCommonSIB': {'members': [{'name': 'rach-ConfigCommon', 'type': 'RACH-ConfigCommon'}, {'name': 'bcch-Config', 'type': 'BCCH-Config'}, {'name': 'pcch-Config', 'type': 'PCCH-Config'}, {'name': 'prach-Config', 'type': 'PRACH-ConfigSIB'}, {'name': 'pdsch-ConfigCommon', 'type': 'PDSCH-ConfigCommon'}, {'name': 'pusch-ConfigCommon', 'type': 'PUSCH-ConfigCommon'}, {'name': 'pucch-ConfigCommon', 'type': 'PUCCH-ConfigCommon'}, {'name': 'soundingRS-UL-ConfigCommon', 'type': 'SoundingRS-UL-ConfigCommon'}, {'name': 'uplinkPowerControlCommon', 'type': 'UplinkPowerControlCommon'}, {'name': 'ul-CyclicPrefixLength', 'type': 'UL-CyclicPrefixLength'}, None], 'type': 'SEQUENCE'}, 'RadioResourceConfigDedicated': {'members': [{'name': 'srb-ToAddModList', 'optional': True, 'type': 'SRB-ToAddModList'}, {'name': 'drb-ToAddModList', 'optional': True, 'type': 'DRB-ToAddModList'}, {'name': 'drb-ToReleaseList', 'optional': True, 'type': 'DRB-ToReleaseList'}, {'members': [{'name': 'explicitValue', 'type': 'MAC-MainConfig'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'mac-MainConfig', 'optional': True, 'type': 'CHOICE'}, {'name': 'sps-Config', 'optional': True, 'type': 'SPS-Config'}, {'name': 'physicalConfigDedicated', 'optional': True, 'type': 'PhysicalConfigDedicated'}, None], 'type': 'SEQUENCE'}, 'RedirectedCarrierInfo': {'members': [{'name': 'eutra', 'type': 'ARFCN-ValueEUTRA'}, {'name': 'geran', 'type': 'CarrierFreqsGERAN'}, {'name': 'utra-FDD', 'type': 'ARFCN-ValueUTRA'}, {'name': 'utra-TDD', 'type': 'ARFCN-ValueUTRA'}, {'name': 'cdma2000-HRPD', 'type': 'CarrierFreqCDMA2000'}, {'name': 'cdma2000-1xRTT', 'type': 'CarrierFreqCDMA2000'}, None], 'type': 'CHOICE'}, 'ReestabUE-Identity': {'members': [{'name': 'c-RNTI', 'type': 'C-RNTI'}, {'name': 'physCellId', 'type': 'PhysCellId'}, {'name': 'shortMAC-I', 'type': 'ShortMAC-I'}], 'type': 'SEQUENCE'}, 'ReestablishmentCause': {'type': 'ENUMERATED', 'values': [('reconfigurationFailure', 0), ('handoverFailure', 1), ('otherFailure', 2), ('spare1', 3)]}, 'RegisteredMME': {'members': [{'name': 'plmn-Identity', 'optional': True, 'type': 'PLMN-Identity'}, {'name': 'mmegi', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'mmec', 'type': 'MMEC'}], 'type': 'SEQUENCE'}, 'ReleaseCause': {'type': 'ENUMERATED', 'values': [('loadBalancingTAUrequired', 0), ('other', 1), ('spare2', 2), ('spare1', 3)]}, 'ReportConfigEUTRA': {'members': [{'members': [{'members': [{'members': [{'members': [{'name': 'a1-Threshold', 'type': 'ThresholdEUTRA'}], 'name': 'eventA1', 'type': 'SEQUENCE'}, {'members': [{'name': 'a2-Threshold', 'type': 'ThresholdEUTRA'}], 'name': 'eventA2', 'type': 'SEQUENCE'}, {'members': [{'name': 'a3-Offset', 'restricted-to': [(-30, 30)], 'type': 'INTEGER'}, {'name': 'reportOnLeave', 'type': 'BOOLEAN'}], 'name': 'eventA3', 'type': 'SEQUENCE'}, {'members': [{'name': 'a4-Threshold', 'type': 'ThresholdEUTRA'}], 'name': 'eventA4', 'type': 'SEQUENCE'}, {'members': [{'name': 'a5-Threshold1', 'type': 'ThresholdEUTRA'}, {'name': 'a5-Threshold2', 'type': 'ThresholdEUTRA'}], 'name': 'eventA5', 'type': 'SEQUENCE'}, None], 'name': 'eventId', 'type': 'CHOICE'}, {'name': 'hysteresis', 'type': 'Hysteresis'}, {'name': 'timeToTrigger', 'type': 'TimeToTrigger'}], 'name': 'event', 'type': 'SEQUENCE'}, {'members': [{'name': 'purpose', 'type': 'ENUMERATED', 'values': [('reportStrongestCells', 0), ('reportCGI', 1)]}], 'name': 'periodical', 'type': 'SEQUENCE'}], 'name': 'triggerType', 'type': 'CHOICE'}, {'name': 'triggerQuantity', 'type': 'ENUMERATED', 'values': [('rsrp', 0), ('rsrq', 1)]}, {'name': 'reportQuantity', 'type': 'ENUMERATED', 'values': [('sameAsTriggerQuantity', 0), ('both', 1)]}, {'name': 'maxReportCells', 'restricted-to': [(1, 'maxCellReport')], 'type': 'INTEGER'}, {'name': 'reportInterval', 'type': 'ReportInterval'}, {'name': 'reportAmount', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('infinity', 7)]}, None], 'type': 'SEQUENCE'}, 'ReportConfigId': {'restricted-to': [(1, 'maxReportConfigId')], 'type': 'INTEGER'}, 'ReportConfigInterRAT': {'members': [{'members': [{'members': [{'members': [{'members': [{'members': [{'name': 'b1-ThresholdUTRA', 'type': 'ThresholdUTRA'}, {'name': 'b1-ThresholdGERAN', 'type': 'ThresholdGERAN'}, {'name': 'b1-ThresholdCDMA2000', 'type': 'ThresholdCDMA2000'}], 'name': 'b1-Threshold', 'type': 'CHOICE'}], 'name': 'eventB1', 'type': 'SEQUENCE'}, {'members': [{'name': 'b2-Threshold1', 'type': 'ThresholdEUTRA'}, {'members': [{'name': 'b2-Threshold2UTRA', 'type': 'ThresholdUTRA'}, {'name': 'b2-Threshold2GERAN', 'type': 'ThresholdGERAN'}, {'name': 'b2-Threshold2CDMA2000', 'type': 'ThresholdCDMA2000'}], 'name': 'b2-Threshold2', 'type': 'CHOICE'}], 'name': 'eventB2', 'type': 'SEQUENCE'}, None], 'name': 'eventId', 'type': 'CHOICE'}, {'name': 'hysteresis', 'type': 'Hysteresis'}, {'name': 'timeToTrigger', 'type': 'TimeToTrigger'}], 'name': 'event', 'type': 'SEQUENCE'}, {'members': [{'name': 'purpose', 'type': 'ENUMERATED', 'values': [('reportStrongestCells', 0), ('reportStrongestCellsForSON', 1), ('reportCGI', 2)]}], 'name': 'periodical', 'type': 'SEQUENCE'}], 'name': 'triggerType', 'type': 'CHOICE'}, {'name': 'maxReportCells', 'restricted-to': [(1, 'maxCellReport')], 'type': 'INTEGER'}, {'name': 'reportInterval', 'type': 'ReportInterval'}, {'name': 'reportAmount', 'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('infinity', 7)]}, None], 'type': 'SEQUENCE'}, 'ReportConfigToAddMod': {'members': [{'name': 'reportConfigId', 'type': 'ReportConfigId'}, {'members': [{'name': 'reportConfigEUTRA', 'type': 'ReportConfigEUTRA'}, {'name': 'reportConfigInterRAT', 'type': 'ReportConfigInterRAT'}], 'name': 'reportConfig', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'ReportConfigToAddModList': {'element': {'type': 'ReportConfigToAddMod'}, 'size': [(1, 'maxReportConfigId')], 'type': 'SEQUENCE ' 'OF'}, 'ReportConfigToRemoveList': {'element': {'type': 'ReportConfigId'}, 'size': [(1, 'maxReportConfigId')], 'type': 'SEQUENCE ' 'OF'}, 'ReportInterval': {'type': 'ENUMERATED', 'values': [('ms120', 0), ('ms240', 1), ('ms480', 2), ('ms640', 3), ('ms1024', 4), ('ms2048', 5), ('ms5120', 6), ('ms10240', 7), ('min1', 8), ('min6', 9), ('min12', 10), ('min30', 11), ('min60', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, 'ReselectionThreshold': {'restricted-to': [(0, 31)], 'type': 'INTEGER'}, 'S-TMSI': {'members': [{'name': 'mmec', 'type': 'MMEC'}, {'name': 'm-TMSI', 'size': [32], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'SI-OrPSI-GERAN': {'members': [{'name': 'si', 'type': 'SystemInfoListGERAN'}, {'name': 'psi', 'type': 'SystemInfoListGERAN'}], 'type': 'CHOICE'}, 'SIB-MappingInfo': {'element': {'type': 'SIB-Type'}, 'size': [(0, 'maxSIB-1')], 'type': 'SEQUENCE OF'}, 'SIB-Type': {'type': 'ENUMERATED', 'values': [('sibType3', 0), ('sibType4', 1), ('sibType5', 2), ('sibType6', 3), ('sibType7', 4), ('sibType8', 5), ('sibType9', 6), ('sibType10', 7), ('sibType11', 8), ('spare7', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15), None]}, 'SN-FieldLength': {'type': 'ENUMERATED', 'values': [('size5', 0), ('size10', 1)]}, 'SPS-Config': {'members': [{'name': 'semiPersistSchedC-RNTI', 'optional': True, 'type': 'C-RNTI'}, {'name': 'sps-ConfigDL', 'optional': True, 'type': 'SPS-ConfigDL'}, {'name': 'sps-ConfigUL', 'optional': True, 'type': 'SPS-ConfigUL'}], 'type': 'SEQUENCE'}, 'SPS-ConfigDL': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'semiPersistSchedIntervalDL', 'type': 'ENUMERATED', 'values': [('sf10', 0), ('sf20', 1), ('sf32', 2), ('sf40', 3), ('sf64', 4), ('sf80', 5), ('sf128', 6), ('sf160', 7), ('sf320', 8), ('sf640', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'numberOfConfSPS-Processes', 'restricted-to': [(1, 8)], 'type': 'INTEGER'}, {'name': 'n1-PUCCH-AN-PersistentList', 'type': 'N1-PUCCH-AN-PersistentList'}, None], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SPS-ConfigUL': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'semiPersistSchedIntervalUL', 'type': 'ENUMERATED', 'values': [('sf10', 0), ('sf20', 1), ('sf32', 2), ('sf40', 3), ('sf64', 4), ('sf80', 5), ('sf128', 6), ('sf160', 7), ('sf320', 8), ('sf640', 9), ('spare6', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15)]}, {'name': 'implicitReleaseAfter', 'type': 'ENUMERATED', 'values': [('e2', 0), ('e3', 1), ('e4', 2), ('e8', 3)]}, {'members': [{'name': 'p0-NominalPUSCH-Persistent', 'restricted-to': [(-126, 24)], 'type': 'INTEGER'}, {'name': 'p0-UE-PUSCH-Persistent', 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}], 'name': 'p0-Persistent', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'twoIntervalsConfig', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}, None], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SRB-ToAddMod': {'members': [{'name': 'srb-Identity', 'restricted-to': [(1, 2)], 'type': 'INTEGER'}, {'members': [{'name': 'explicitValue', 'type': 'RLC-Config'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'rlc-Config', 'optional': True, 'type': 'CHOICE'}, {'members': [{'name': 'explicitValue', 'type': 'LogicalChannelConfig'}, {'name': 'defaultValue', 'type': 'NULL'}], 'name': 'logicalChannelConfig', 'optional': True, 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'SRB-ToAddModList': {'element': {'type': 'SRB-ToAddMod'}, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, 'SchedulingInfo': {'members': [{'name': 'si-Periodicity', 'type': 'ENUMERATED', 'values': [('rf8', 0), ('rf16', 1), ('rf32', 2), ('rf64', 3), ('rf128', 4), ('rf256', 5), ('rf512', 6)]}, {'name': 'sib-MappingInfo', 'type': 'SIB-MappingInfo'}], 'type': 'SEQUENCE'}, 'SchedulingInfoList': {'element': {'type': 'SchedulingInfo'}, 'size': [(1, 'maxSI-Message')], 'type': 'SEQUENCE ' 'OF'}, 'SchedulingRequestConfig': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'sr-PUCCH-ResourceIndex', 'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, {'name': 'sr-ConfigIndex', 'restricted-to': [(0, 155)], 'type': 'INTEGER'}, {'name': 'dsr-TransMax', 'type': 'ENUMERATED', 'values': [('n4', 0), ('n8', 1), ('n16', 2), ('n32', 3), ('n64', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SecondaryPreRegistrationZoneIdListHRPD': {'element': {'type': 'PreRegistrationZoneIdHRPD'}, 'size': [(1, 2)], 'type': 'SEQUENCE ' 'OF'}, 'SecurityAlgorithmConfig': {'members': [{'name': 'cipheringAlgorithm', 'type': 'ENUMERATED', 'values': [('eea0', 0), ('eea1', 1), ('eea2', 2), ('spare5', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7), None]}, {'name': 'integrityProtAlgorithm', 'type': 'ENUMERATED', 'values': [('reserved', 0), ('eia1', 1), ('eia2', 2), ('spare5', 3), ('spare4', 4), ('spare3', 5), ('spare2', 6), ('spare1', 7), None]}], 'type': 'SEQUENCE'}, 'SecurityConfigHO': {'members': [{'members': [{'members': [{'name': 'securityAlgorithmConfig', 'optional': True, 'type': 'SecurityAlgorithmConfig'}, {'name': 'keyChangeIndicator', 'type': 'BOOLEAN'}, {'name': 'nextHopChainingCount', 'type': 'NextHopChainingCount'}], 'name': 'intraLTE', 'type': 'SEQUENCE'}, {'members': [{'name': 'securityAlgorithmConfig', 'type': 'SecurityAlgorithmConfig'}, {'name': 'nas-SecurityParamToEUTRA', 'size': [6], 'type': 'OCTET ' 'STRING'}], 'name': 'interRAT', 'type': 'SEQUENCE'}], 'name': 'handoverType', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'SecurityConfigSMC': {'members': [{'name': 'securityAlgorithmConfig', 'type': 'SecurityAlgorithmConfig'}, None], 'type': 'SEQUENCE'}, 'SecurityModeCommand': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'securityModeCommand-r8', 'type': 'SecurityModeCommand-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SecurityModeCommand-r8-IEs': {'members': [{'name': 'securityConfigSMC', 'type': 'SecurityConfigSMC'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SecurityModeComplete': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'securityModeComplete-r8', 'type': 'SecurityModeComplete-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SecurityModeComplete-r8-IEs': {'members': [{'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SecurityModeFailure': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'name': 'securityModeFailure-r8', 'type': 'SecurityModeFailure-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SecurityModeFailure-r8-IEs': {'members': [{'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'ShortMAC-I': {'size': [16], 'type': 'BIT STRING'}, 'SoundingRS-UL-ConfigCommon': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'srs-BandwidthConfig', 'type': 'ENUMERATED', 'values': [('bw0', 0), ('bw1', 1), ('bw2', 2), ('bw3', 3), ('bw4', 4), ('bw5', 5), ('bw6', 6), ('bw7', 7)]}, {'name': 'srs-SubframeConfig', 'type': 'ENUMERATED', 'values': [('sc0', 0), ('sc1', 1), ('sc2', 2), ('sc3', 3), ('sc4', 4), ('sc5', 5), ('sc6', 6), ('sc7', 7), ('sc8', 8), ('sc9', 9), ('sc10', 10), ('sc11', 11), ('sc12', 12), ('sc13', 13), ('sc14', 14), ('sc15', 15)]}, {'name': 'ackNackSRS-SimultaneousTransmission', 'type': 'BOOLEAN'}, {'name': 'srs-MaxUpPts', 'optional': True, 'type': 'ENUMERATED', 'values': [('true', 0)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SoundingRS-UL-ConfigDedicated': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'srs-Bandwidth', 'type': 'ENUMERATED', 'values': [('bw0', 0), ('bw1', 1), ('bw2', 2), ('bw3', 3)]}, {'name': 'srs-HoppingBandwidth', 'type': 'ENUMERATED', 'values': [('hbw0', 0), ('hbw1', 1), ('hbw2', 2), ('hbw3', 3)]}, {'name': 'freqDomainPosition', 'restricted-to': [(0, 23)], 'type': 'INTEGER'}, {'name': 'duration', 'type': 'BOOLEAN'}, {'name': 'srs-ConfigIndex', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'transmissionComb', 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'cyclicShift', 'type': 'ENUMERATED', 'values': [('cs0', 0), ('cs1', 1), ('cs2', 2), ('cs3', 3), ('cs4', 4), ('cs5', 5), ('cs6', 6), ('cs7', 7)]}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'SpeedStateScaleFactors': {'members': [{'name': 'sf-Medium', 'type': 'ENUMERATED', 'values': [('oDot25', 0), ('oDot5', 1), ('oDot75', 2), ('lDot0', 3)]}, {'name': 'sf-High', 'type': 'ENUMERATED', 'values': [('oDot25', 0), ('oDot5', 1), ('oDot75', 2), ('lDot0', 3)]}], 'type': 'SEQUENCE'}, 'SupportedBandEUTRA': {'members': [{'name': 'bandEUTRA', 'restricted-to': [(1, 64)], 'type': 'INTEGER'}, {'name': 'halfDuplex', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'SupportedBandGERAN': {'type': 'ENUMERATED', 'values': [('gsm450', 0), ('gsm480', 1), ('gsm710', 2), ('gsm750', 3), ('gsm810', 4), ('gsm850', 5), ('gsm900P', 6), ('gsm900E', 7), ('gsm900R', 8), ('gsm1800', 9), ('gsm1900', 10), ('spare5', 11), ('spare4', 12), ('spare3', 13), ('spare2', 14), ('spare1', 15), None]}, 'SupportedBandList1XRTT': {'element': {'type': 'BandclassCDMA2000'}, 'size': [(1, 'maxCDMA-BandClass')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListEUTRA': {'element': {'type': 'SupportedBandEUTRA'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListGERAN': {'element': {'type': 'SupportedBandGERAN'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListHRPD': {'element': {'type': 'BandclassCDMA2000'}, 'size': [(1, 'maxCDMA-BandClass')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListUTRA-FDD': {'element': {'type': 'SupportedBandUTRA-FDD'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListUTRA-TDD128': {'element': {'type': 'SupportedBandUTRA-TDD128'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListUTRA-TDD384': {'element': {'type': 'SupportedBandUTRA-TDD384'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandListUTRA-TDD768': {'element': {'type': 'SupportedBandUTRA-TDD768'}, 'size': [(1, 'maxBands')], 'type': 'SEQUENCE ' 'OF'}, 'SupportedBandUTRA-FDD': {'type': 'ENUMERATED', 'values': [('bandI', 0), ('bandII', 1), ('bandIII', 2), ('bandIV', 3), ('bandV', 4), ('bandVI', 5), ('bandVII', 6), ('bandVIII', 7), ('bandIX', 8), ('bandX', 9), ('bandXI', 10), ('bandXII', 11), ('bandXIII', 12), ('bandXIV', 13), ('bandXV', 14), ('bandXVI', 15), None, ('bandXVII-8a0', 16), ('bandXVIII-8a0', 17), ('bandXIX-8a0', 18), ('bandXX-8a0', 19), ('bandXXI-8a0', 20), ('bandXXII-8a0', 21), ('bandXXIII-8a0', 22), ('bandXXIV-8a0', 23), ('bandXXV-8a0', 24), ('bandXXVI-8a0', 25), ('bandXXVII-8a0', 26), ('bandXXVIII-8a0', 27), ('bandXXIX-8a0', 28), ('bandXXX-8a0', 29), ('bandXXXI-8a0', 30), ('bandXXXII-8a0', 31)]}, 'SupportedBandUTRA-TDD128': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9), ('k', 10), ('l', 11), ('m', 12), ('n', 13), ('o', 14), ('p', 15), None]}, 'SupportedBandUTRA-TDD384': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9), ('k', 10), ('l', 11), ('m', 12), ('n', 13), ('o', 14), ('p', 15), None]}, 'SupportedBandUTRA-TDD768': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4), ('f', 5), ('g', 6), ('h', 7), ('i', 8), ('j', 9), ('k', 10), ('l', 11), ('m', 12), ('n', 13), ('o', 14), ('p', 15), None]}, 'SystemInfoListGERAN': {'element': {'size': [(1, 23)], 'type': 'OCTET ' 'STRING'}, 'size': [(1, 'maxGERAN-SI')], 'type': 'SEQUENCE ' 'OF'}, 'SystemInformation': {'members': [{'members': [{'name': 'systemInformation-r8', 'type': 'SystemInformation-r8-IEs'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'SystemInformation-r8-IEs': {'members': [{'element': {'members': [{'name': 'sib2', 'type': 'SystemInformationBlockType2'}, {'name': 'sib3', 'type': 'SystemInformationBlockType3'}, {'name': 'sib4', 'type': 'SystemInformationBlockType4'}, {'name': 'sib5', 'type': 'SystemInformationBlockType5'}, {'name': 'sib6', 'type': 'SystemInformationBlockType6'}, {'name': 'sib7', 'type': 'SystemInformationBlockType7'}, {'name': 'sib8', 'type': 'SystemInformationBlockType8'}, {'name': 'sib9', 'type': 'SystemInformationBlockType9'}, {'name': 'sib10', 'type': 'SystemInformationBlockType10'}, {'name': 'sib11', 'type': 'SystemInformationBlockType11'}, None], 'type': 'CHOICE'}, 'name': 'sib-TypeAndInfo', 'size': [(1, 'maxSIB')], 'type': 'SEQUENCE ' 'OF'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType1': {'members': [{'members': [{'name': 'plmn-IdentityList', 'type': 'PLMN-IdentityList'}, {'name': 'trackingAreaCode', 'type': 'TrackingAreaCode'}, {'name': 'cellIdentity', 'type': 'CellIdentity'}, {'name': 'cellBarred', 'type': 'ENUMERATED', 'values': [('barred', 0), ('notBarred', 1)]}, {'name': 'intraFreqReselection', 'type': 'ENUMERATED', 'values': [('allowed', 0), ('notAllowed', 1)]}, {'name': 'csg-Indication', 'type': 'BOOLEAN'}, {'name': 'csg-Identity', 'optional': True, 'size': [27], 'type': 'BIT ' 'STRING'}], 'name': 'cellAccessRelatedInfo', 'type': 'SEQUENCE'}, {'members': [{'name': 'q-RxLevMin', 'type': 'Q-RxLevMin'}, {'name': 'q-RxLevMinOffset', 'optional': True, 'restricted-to': [(1, 8)], 'type': 'INTEGER'}], 'name': 'cellSelectionInfo', 'type': 'SEQUENCE'}, {'name': 'p-Max', 'optional': True, 'type': 'P-Max'}, {'name': 'freqBandIndicator', 'restricted-to': [(1, 64)], 'type': 'INTEGER'}, {'name': 'schedulingInfoList', 'type': 'SchedulingInfoList'}, {'name': 'tdd-Config', 'optional': True, 'type': 'TDD-Config'}, {'name': 'si-WindowLength', 'type': 'ENUMERATED', 'values': [('ms1', 0), ('ms2', 1), ('ms5', 2), ('ms10', 3), ('ms15', 4), ('ms20', 5), ('ms40', 6)]}, {'name': 'systemInfoValueTag', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'SystemInformationBlockType10': {'members': [{'name': 'messageIdentifier', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'serialNumber', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'warningType', 'size': [2], 'type': 'OCTET ' 'STRING'}, {'name': 'warningSecurityInfo', 'optional': True, 'size': [50], 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType11': {'members': [{'name': 'messageIdentifier', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'serialNumber', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'warningMessageSegmentType', 'type': 'ENUMERATED', 'values': [('notLastSegment', 0), ('lastSegment', 1)]}, {'name': 'warningMessageSegmentNumber', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'warningMessageSegment', 'type': 'OCTET ' 'STRING'}, {'name': 'dataCodingScheme', 'optional': True, 'size': [1], 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType2': {'members': [{'members': [{'name': 'ac-BarringForEmergency', 'type': 'BOOLEAN'}, {'name': 'ac-BarringForMO-Signalling', 'optional': True, 'type': 'AC-BarringConfig'}, {'name': 'ac-BarringForMO-Data', 'optional': True, 'type': 'AC-BarringConfig'}], 'name': 'ac-BarringInfo', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'radioResourceConfigCommon', 'type': 'RadioResourceConfigCommonSIB'}, {'name': 'ue-TimersAndConstants', 'type': 'UE-TimersAndConstants'}, {'members': [{'name': 'ul-CarrierFreq', 'optional': True, 'type': 'ARFCN-ValueEUTRA'}, {'name': 'ul-Bandwidth', 'optional': True, 'type': 'ENUMERATED', 'values': [('n6', 0), ('n15', 1), ('n25', 2), ('n50', 3), ('n75', 4), ('n100', 5)]}, {'name': 'additionalSpectrumEmission', 'type': 'AdditionalSpectrumEmission'}], 'name': 'freqInfo', 'type': 'SEQUENCE'}, {'name': 'mbsfn-SubframeConfigList', 'optional': True, 'type': 'MBSFN-SubframeConfigList'}, {'name': 'timeAlignmentTimerCommon', 'type': 'TimeAlignmentTimer'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType3': {'members': [{'members': [{'name': 'q-Hyst', 'type': 'ENUMERATED', 'values': [('dB0', 0), ('dB1', 1), ('dB2', 2), ('dB3', 3), ('dB4', 4), ('dB5', 5), ('dB6', 6), ('dB8', 7), ('dB10', 8), ('dB12', 9), ('dB14', 10), ('dB16', 11), ('dB18', 12), ('dB20', 13), ('dB22', 14), ('dB24', 15)]}, {'members': [{'name': 'mobilityStateParameters', 'type': 'MobilityStateParameters'}, {'members': [{'name': 'sf-Medium', 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-4', 1), ('dB-2', 2), ('dB0', 3)]}, {'name': 'sf-High', 'type': 'ENUMERATED', 'values': [('dB-6', 0), ('dB-4', 1), ('dB-2', 2), ('dB0', 3)]}], 'name': 'q-HystSF', 'type': 'SEQUENCE'}], 'name': 'speedStateReselectionPars', 'optional': True, 'type': 'SEQUENCE'}], 'name': 'cellReselectionInfoCommon', 'type': 'SEQUENCE'}, {'members': [{'name': 's-NonIntraSearch', 'optional': True, 'type': 'ReselectionThreshold'}, {'name': 'threshServingLow', 'type': 'ReselectionThreshold'}, {'name': 'cellReselectionPriority', 'type': 'CellReselectionPriority'}], 'name': 'cellReselectionServingFreqInfo', 'type': 'SEQUENCE'}, {'members': [{'name': 'q-RxLevMin', 'type': 'Q-RxLevMin'}, {'name': 'p-Max', 'optional': True, 'type': 'P-Max'}, {'name': 's-IntraSearch', 'optional': True, 'type': 'ReselectionThreshold'}, {'name': 'allowedMeasBandwidth', 'optional': True, 'type': 'AllowedMeasBandwidth'}, {'name': 'presenceAntennaPort1', 'type': 'PresenceAntennaPort1'}, {'name': 'neighCellConfig', 'type': 'NeighCellConfig'}, {'name': 't-ReselectionEUTRA', 'type': 'T-Reselection'}, {'name': 't-ReselectionEUTRA-SF', 'optional': True, 'type': 'SpeedStateScaleFactors'}], 'name': 'intraFreqCellReselectionInfo', 'type': 'SEQUENCE'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType4': {'members': [{'name': 'intraFreqNeighCellList', 'optional': True, 'type': 'IntraFreqNeighCellList'}, {'name': 'intraFreqBlackCellList', 'optional': True, 'type': 'IntraFreqBlackCellList'}, {'name': 'csg-PhysCellIdRange', 'optional': True, 'type': 'PhysCellIdRange'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType5': {'members': [{'name': 'interFreqCarrierFreqList', 'type': 'InterFreqCarrierFreqList'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType6': {'members': [{'name': 'carrierFreqListUTRA-FDD', 'optional': True, 'type': 'CarrierFreqListUTRA-FDD'}, {'name': 'carrierFreqListUTRA-TDD', 'optional': True, 'type': 'CarrierFreqListUTRA-TDD'}, {'name': 't-ReselectionUTRA', 'type': 'T-Reselection'}, {'name': 't-ReselectionUTRA-SF', 'optional': True, 'type': 'SpeedStateScaleFactors'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType7': {'members': [{'name': 't-ReselectionGERAN', 'type': 'T-Reselection'}, {'name': 't-ReselectionGERAN-SF', 'optional': True, 'type': 'SpeedStateScaleFactors'}, {'name': 'carrierFreqsInfoList', 'optional': True, 'type': 'CarrierFreqsInfoListGERAN'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType8': {'members': [{'name': 'systemTimeInfo', 'optional': True, 'type': 'SystemTimeInfoCDMA2000'}, {'name': 'searchWindowSize', 'optional': True, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'members': [{'name': 'preRegistrationInfoHRPD', 'type': 'PreRegistrationInfoHRPD'}, {'name': 'cellReselectionParametersHRPD', 'optional': True, 'type': 'CellReselectionParametersCDMA2000'}], 'name': 'parametersHRPD', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'csfb-RegistrationParam1XRTT', 'optional': True, 'type': 'CSFB-RegistrationParam1XRTT'}, {'name': 'longCodeState1XRTT', 'optional': True, 'size': [42], 'type': 'BIT ' 'STRING'}, {'name': 'cellReselectionParameters1XRTT', 'optional': True, 'type': 'CellReselectionParametersCDMA2000'}], 'name': 'parameters1XRTT', 'optional': True, 'type': 'SEQUENCE'}, None], 'type': 'SEQUENCE'}, 'SystemInformationBlockType9': {'members': [{'name': 'hnb-Name', 'optional': True, 'size': [(1, 48)], 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'SystemTimeInfoCDMA2000': {'members': [{'name': 'cdma-EUTRA-Synchronisation', 'type': 'BOOLEAN'}, {'members': [{'name': 'synchronousSystemTime', 'size': [39], 'type': 'BIT ' 'STRING'}, {'name': 'asynchronousSystemTime', 'size': [49], 'type': 'BIT ' 'STRING'}], 'name': 'cdma-SystemTime', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'T-PollRetransmit': {'type': 'ENUMERATED', 'values': [('ms5', 0), ('ms10', 1), ('ms15', 2), ('ms20', 3), ('ms25', 4), ('ms30', 5), ('ms35', 6), ('ms40', 7), ('ms45', 8), ('ms50', 9), ('ms55', 10), ('ms60', 11), ('ms65', 12), ('ms70', 13), ('ms75', 14), ('ms80', 15), ('ms85', 16), ('ms90', 17), ('ms95', 18), ('ms100', 19), ('ms105', 20), ('ms110', 21), ('ms115', 22), ('ms120', 23), ('ms125', 24), ('ms130', 25), ('ms135', 26), ('ms140', 27), ('ms145', 28), ('ms150', 29), ('ms155', 30), ('ms160', 31), ('ms165', 32), ('ms170', 33), ('ms175', 34), ('ms180', 35), ('ms185', 36), ('ms190', 37), ('ms195', 38), ('ms200', 39), ('ms205', 40), ('ms210', 41), ('ms215', 42), ('ms220', 43), ('ms225', 44), ('ms230', 45), ('ms235', 46), ('ms240', 47), ('ms245', 48), ('ms250', 49), ('ms300', 50), ('ms350', 51), ('ms400', 52), ('ms450', 53), ('ms500', 54), ('spare9', 55), ('spare8', 56), ('spare7', 57), ('spare6', 58), ('spare5', 59), ('spare4', 60), ('spare3', 61), ('spare2', 62), ('spare1', 63)]}, 'T-Reordering': {'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms5', 1), ('ms10', 2), ('ms15', 3), ('ms20', 4), ('ms25', 5), ('ms30', 6), ('ms35', 7), ('ms40', 8), ('ms45', 9), ('ms50', 10), ('ms55', 11), ('ms60', 12), ('ms65', 13), ('ms70', 14), ('ms75', 15), ('ms80', 16), ('ms85', 17), ('ms90', 18), ('ms95', 19), ('ms100', 20), ('ms110', 21), ('ms120', 22), ('ms130', 23), ('ms140', 24), ('ms150', 25), ('ms160', 26), ('ms170', 27), ('ms180', 28), ('ms190', 29), ('ms200', 30), ('spare1', 31)]}, 'T-Reselection': {'restricted-to': [(0, 7)], 'type': 'INTEGER'}, 'T-StatusProhibit': {'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms5', 1), ('ms10', 2), ('ms15', 3), ('ms20', 4), ('ms25', 5), ('ms30', 6), ('ms35', 7), ('ms40', 8), ('ms45', 9), ('ms50', 10), ('ms55', 11), ('ms60', 12), ('ms65', 13), ('ms70', 14), ('ms75', 15), ('ms80', 16), ('ms85', 17), ('ms90', 18), ('ms95', 19), ('ms100', 20), ('ms105', 21), ('ms110', 22), ('ms115', 23), ('ms120', 24), ('ms125', 25), ('ms130', 26), ('ms135', 27), ('ms140', 28), ('ms145', 29), ('ms150', 30), ('ms155', 31), ('ms160', 32), ('ms165', 33), ('ms170', 34), ('ms175', 35), ('ms180', 36), ('ms185', 37), ('ms190', 38), ('ms195', 39), ('ms200', 40), ('ms205', 41), ('ms210', 42), ('ms215', 43), ('ms220', 44), ('ms225', 45), ('ms230', 46), ('ms235', 47), ('ms240', 48), ('ms245', 49), ('ms250', 50), ('ms300', 51), ('ms350', 52), ('ms400', 53), ('ms450', 54), ('ms500', 55), ('spare8', 56), ('spare7', 57), ('spare6', 58), ('spare5', 59), ('spare4', 60), ('spare3', 61), ('spare2', 62), ('spare1', 63)]}, 'TDD-Config': {'members': [{'name': 'subframeAssignment', 'type': 'ENUMERATED', 'values': [('sa0', 0), ('sa1', 1), ('sa2', 2), ('sa3', 3), ('sa4', 4), ('sa5', 5), ('sa6', 6)]}, {'name': 'specialSubframePatterns', 'type': 'ENUMERATED', 'values': [('ssp0', 0), ('ssp1', 1), ('ssp2', 2), ('ssp3', 3), ('ssp4', 4), ('ssp5', 5), ('ssp6', 6), ('ssp7', 7), ('ssp8', 8)]}], 'type': 'SEQUENCE'}, 'TPC-Index': {'members': [{'name': 'indexOfFormat3', 'restricted-to': [(1, 15)], 'type': 'INTEGER'}, {'name': 'indexOfFormat3A', 'restricted-to': [(1, 31)], 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'TPC-PDCCH-Config': {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'tpc-RNTI', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'tpc-Index', 'type': 'TPC-Index'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'ThresholdCDMA2000': {'restricted-to': [(0, 63)], 'type': 'INTEGER'}, 'ThresholdEUTRA': {'members': [{'name': 'threshold-RSRP', 'type': 'RSRP-Range'}, {'name': 'threshold-RSRQ', 'type': 'RSRQ-Range'}], 'type': 'CHOICE'}, 'ThresholdGERAN': {'restricted-to': [(0, 63)], 'type': 'INTEGER'}, 'ThresholdUTRA': {'members': [{'name': 'utra-RSCP', 'restricted-to': [(-5, 91)], 'type': 'INTEGER'}, {'name': 'utra-EcN0', 'restricted-to': [(0, 49)], 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'TimeAlignmentTimer': {'type': 'ENUMERATED', 'values': [('sf500', 0), ('sf750', 1), ('sf1280', 2), ('sf1920', 3), ('sf2560', 4), ('sf5120', 5), ('sf10240', 6), ('infinity', 7)]}, 'TimeToTrigger': {'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms40', 1), ('ms64', 2), ('ms80', 3), ('ms100', 4), ('ms128', 5), ('ms160', 6), ('ms256', 7), ('ms320', 8), ('ms480', 9), ('ms512', 10), ('ms640', 11), ('ms1024', 12), ('ms1280', 13), ('ms2560', 14), ('ms5120', 15)]}, 'TrackingAreaCode': {'size': [16], 'type': 'BIT STRING'}, 'UE-CapabilityRAT-Container': {'members': [{'name': 'rat-Type', 'type': 'RAT-Type'}, {'name': 'ueCapabilityRAT-Container', 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'UE-CapabilityRAT-ContainerList': {'element': {'type': 'UE-CapabilityRAT-Container'}, 'size': [(0, 'maxRAT-Capabilities')], 'type': 'SEQUENCE ' 'OF'}, 'UE-CapabilityRequest': {'element': {'type': 'RAT-Type'}, 'size': [(1, 'maxRAT-Capabilities')], 'type': 'SEQUENCE ' 'OF'}, 'UE-EUTRA-Capability': {'members': [{'name': 'accessStratumRelease', 'type': 'AccessStratumRelease'}, {'name': 'ue-Category', 'restricted-to': [(1, 5)], 'type': 'INTEGER'}, {'name': 'pdcp-Parameters', 'type': 'PDCP-Parameters'}, {'name': 'phyLayerParameters', 'type': 'PhyLayerParameters'}, {'name': 'rf-Parameters', 'type': 'RF-Parameters'}, {'name': 'measParameters', 'type': 'MeasParameters'}, {'name': 'featureGroupIndicators', 'optional': True, 'size': [32], 'type': 'BIT ' 'STRING'}, {'members': [{'name': 'utraFDD', 'optional': True, 'type': 'IRAT-ParametersUTRA-FDD'}, {'name': 'utraTDD128', 'optional': True, 'type': 'IRAT-ParametersUTRA-TDD128'}, {'name': 'utraTDD384', 'optional': True, 'type': 'IRAT-ParametersUTRA-TDD384'}, {'name': 'utraTDD768', 'optional': True, 'type': 'IRAT-ParametersUTRA-TDD768'}, {'name': 'geran', 'optional': True, 'type': 'IRAT-ParametersGERAN'}, {'name': 'cdma2000-HRPD', 'optional': True, 'type': 'IRAT-ParametersCDMA2000-HRPD'}, {'name': 'cdma2000-1xRTT', 'optional': True, 'type': 'IRAT-ParametersCDMA2000-1XRTT'}], 'name': 'interRAT-Parameters', 'type': 'SEQUENCE'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UE-TimersAndConstants': {'members': [{'name': 't300', 'type': 'ENUMERATED', 'values': [('ms100', 0), ('ms200', 1), ('ms300', 2), ('ms400', 3), ('ms600', 4), ('ms1000', 5), ('ms1500', 6), ('ms2000', 7)]}, {'name': 't301', 'type': 'ENUMERATED', 'values': [('ms100', 0), ('ms200', 1), ('ms300', 2), ('ms400', 3), ('ms600', 4), ('ms1000', 5), ('ms1500', 6), ('ms2000', 7)]}, {'name': 't310', 'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms50', 1), ('ms100', 2), ('ms200', 3), ('ms500', 4), ('ms1000', 5), ('ms2000', 6)]}, {'name': 'n310', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n6', 4), ('n8', 5), ('n10', 6), ('n20', 7)]}, {'name': 't311', 'type': 'ENUMERATED', 'values': [('ms1000', 0), ('ms3000', 1), ('ms5000', 2), ('ms10000', 3), ('ms15000', 4), ('ms20000', 5), ('ms30000', 6)]}, {'name': 'n311', 'type': 'ENUMERATED', 'values': [('n1', 0), ('n2', 1), ('n3', 2), ('n4', 3), ('n5', 4), ('n6', 5), ('n8', 6), ('n10', 7)]}, None], 'type': 'SEQUENCE'}, 'UECapabilityEnquiry': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'ueCapabilityEnquiry-r8', 'type': 'UECapabilityEnquiry-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UECapabilityEnquiry-r8-IEs': {'members': [{'name': 'ue-CapabilityRequest', 'type': 'UE-CapabilityRequest'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UECapabilityInformation': {'members': [{'name': 'rrc-TransactionIdentifier', 'type': 'RRC-TransactionIdentifier'}, {'members': [{'members': [{'name': 'ueCapabilityInformation-r8', 'type': 'UECapabilityInformation-r8-IEs'}, {'name': 'spare7', 'type': 'NULL'}, {'name': 'spare6', 'type': 'NULL'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'UECapabilityInformation-r8-IEs': {'members': [{'name': 'ue-CapabilityRAT-ContainerList', 'type': 'UE-CapabilityRAT-ContainerList'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UL-AM-RLC': {'members': [{'name': 't-PollRetransmit', 'type': 'T-PollRetransmit'}, {'name': 'pollPDU', 'type': 'PollPDU'}, {'name': 'pollByte', 'type': 'PollByte'}, {'name': 'maxRetxThreshold', 'type': 'ENUMERATED', 'values': [('t1', 0), ('t2', 1), ('t3', 2), ('t4', 3), ('t6', 4), ('t8', 5), ('t16', 6), ('t32', 7)]}], 'type': 'SEQUENCE'}, 'UL-CCCH-Message': {'members': [{'name': 'message', 'type': 'UL-CCCH-MessageType'}], 'type': 'SEQUENCE'}, 'UL-CCCH-MessageType': {'members': [{'members': [{'name': 'rrcConnectionReestablishmentRequest', 'type': 'RRCConnectionReestablishmentRequest'}, {'name': 'rrcConnectionRequest', 'type': 'RRCConnectionRequest'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'UL-CyclicPrefixLength': {'type': 'ENUMERATED', 'values': [('len1', 0), ('len2', 1)]}, 'UL-DCCH-Message': {'members': [{'name': 'message', 'type': 'UL-DCCH-MessageType'}], 'type': 'SEQUENCE'}, 'UL-DCCH-MessageType': {'members': [{'members': [{'name': 'csfbParametersRequestCDMA2000', 'type': 'CSFBParametersRequestCDMA2000'}, {'name': 'measurementReport', 'type': 'MeasurementReport'}, {'name': 'rrcConnectionReconfigurationComplete', 'type': 'RRCConnectionReconfigurationComplete'}, {'name': 'rrcConnectionReestablishmentComplete', 'type': 'RRCConnectionReestablishmentComplete'}, {'name': 'rrcConnectionSetupComplete', 'type': 'RRCConnectionSetupComplete'}, {'name': 'securityModeComplete', 'type': 'SecurityModeComplete'}, {'name': 'securityModeFailure', 'type': 'SecurityModeFailure'}, {'name': 'ueCapabilityInformation', 'type': 'UECapabilityInformation'}, {'name': 'ulHandoverPreparationTransfer', 'type': 'ULHandoverPreparationTransfer'}, {'name': 'ulInformationTransfer', 'type': 'ULInformationTransfer'}, {'name': 'counterCheckResponse', 'type': 'CounterCheckResponse'}, {'name': 'spare5', 'type': 'NULL'}, {'name': 'spare4', 'type': 'NULL'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'messageClassExtension', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'UL-ReferenceSignalsPUSCH': {'members': [{'name': 'groupHoppingEnabled', 'type': 'BOOLEAN'}, {'name': 'groupAssignmentPUSCH', 'restricted-to': [(0, 29)], 'type': 'INTEGER'}, {'name': 'sequenceHoppingEnabled', 'type': 'BOOLEAN'}, {'name': 'cyclicShift', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'UL-UM-RLC': {'members': [{'name': 'sn-FieldLength', 'type': 'SN-FieldLength'}], 'type': 'SEQUENCE'}, 'ULHandoverPreparationTransfer': {'members': [{'members': [{'members': [{'name': 'ulHandoverPreparationTransfer-r8', 'type': 'ULHandoverPreparationTransfer-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'ULHandoverPreparationTransfer-r8-IEs': {'members': [{'name': 'cdma2000-Type', 'type': 'CDMA2000-Type'}, {'name': 'meid', 'optional': True, 'size': [56], 'type': 'BIT ' 'STRING'}, {'name': 'dedicatedInfo', 'type': 'DedicatedInfoCDMA2000'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'ULInformationTransfer': {'members': [{'members': [{'members': [{'name': 'ulInformationTransfer-r8', 'type': 'ULInformationTransfer-r8-IEs'}, {'name': 'spare3', 'type': 'NULL'}, {'name': 'spare2', 'type': 'NULL'}, {'name': 'spare1', 'type': 'NULL'}], 'name': 'c1', 'type': 'CHOICE'}, {'members': [], 'name': 'criticalExtensionsFuture', 'type': 'SEQUENCE'}], 'name': 'criticalExtensions', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'ULInformationTransfer-r8-IEs': {'members': [{'members': [{'name': 'dedicatedInfoNAS', 'type': 'DedicatedInfoNAS'}, {'name': 'dedicatedInfoCDMA2000-1XRTT', 'type': 'DedicatedInfoCDMA2000'}, {'name': 'dedicatedInfoCDMA2000-HRPD', 'type': 'DedicatedInfoCDMA2000'}], 'name': 'dedicatedInfoType', 'type': 'CHOICE'}, {'members': [], 'name': 'nonCriticalExtension', 'optional': True, 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlCommon': {'members': [{'name': 'p0-NominalPUSCH', 'restricted-to': [(-126, 24)], 'type': 'INTEGER'}, {'name': 'alpha', 'type': 'ENUMERATED', 'values': [('al0', 0), ('al04', 1), ('al05', 2), ('al06', 3), ('al07', 4), ('al08', 5), ('al09', 6), ('al1', 7)]}, {'name': 'p0-NominalPUCCH', 'restricted-to': [(-127, -96)], 'type': 'INTEGER'}, {'name': 'deltaFList-PUCCH', 'type': 'DeltaFList-PUCCH'}, {'name': 'deltaPreambleMsg3', 'restricted-to': [(-1, 6)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'UplinkPowerControlDedicated': {'members': [{'name': 'p0-UE-PUSCH', 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}, {'name': 'deltaMCS-Enabled', 'type': 'ENUMERATED', 'values': [('en0', 0), ('en1', 1)]}, {'name': 'accumulationEnabled', 'type': 'BOOLEAN'}, {'name': 'p0-UE-PUCCH', 'restricted-to': [(-8, 7)], 'type': 'INTEGER'}, {'name': 'pSRS-Offset', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'default': 'fc4', 'name': 'filterCoefficient', 'type': 'FilterCoefficient'}], 'type': 'SEQUENCE'}}, 'values': {'maxBands': {'type': 'INTEGER', 'value': 64}, 'maxCDMA-BandClass': {'type': 'INTEGER', 'value': 32}, 'maxCellBlack': {'type': 'INTEGER', 'value': 16}, 'maxCellInter': {'type': 'INTEGER', 'value': 16}, 'maxCellIntra': {'type': 'INTEGER', 'value': 16}, 'maxCellMeas': {'type': 'INTEGER', 'value': 32}, 'maxCellReport': {'type': 'INTEGER', 'value': 8}, 'maxDRB': {'type': 'INTEGER', 'value': 11}, 'maxEARFCN': {'type': 'INTEGER', 'value': 65535}, 'maxFreq': {'type': 'INTEGER', 'value': 8}, 'maxGERAN-SI': {'type': 'INTEGER', 'value': 10}, 'maxGNFG': {'type': 'INTEGER', 'value': 16}, 'maxMBSFN-Allocations': {'type': 'INTEGER', 'value': 8}, 'maxMCS-1': {'type': 'INTEGER', 'value': 16}, 'maxMeasId': {'type': 'INTEGER', 'value': 32}, 'maxObjectId': {'type': 'INTEGER', 'value': 32}, 'maxPNOffset': {'type': 'INTEGER', 'value': 511}, 'maxPageRec': {'type': 'INTEGER', 'value': 16}, 'maxRAT-Capabilities': {'type': 'INTEGER', 'value': 8}, 'maxReportConfigId': {'type': 'INTEGER', 'value': 32}, 'maxSI-Message': {'type': 'INTEGER', 'value': 32}, 'maxSIB': {'type': 'INTEGER', 'value': 32}, 'maxSIB-1': {'type': 'INTEGER', 'value': 31}, 'maxUTRA-FDD-Carrier': {'type': 'INTEGER', 'value': 16}, 'maxUTRA-TDD-Carrier': {'type': 'INTEGER', 'value': 16}}}, 'EUTRA-UE-Variables': {'extensibility-implied': False, 'imports': {'EUTRA-RRC-Definitions': ['C-RNTI', 'CellIdentity', 'MeasId', 'MeasIdToAddModList', 'MeasObjectToAddModList', 'MobilityStateParameters', 'NeighCellConfig', 'PhysCellId', 'QuantityConfig', 'RSRP-Range', 'ReportConfigToAddModList', 'SpeedStateScaleFactors', 'maxCellMeas', 'maxMeasId']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'CellsTriggeredList': {'element': {'type': 'PhysCellId'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE OF'}, 'VarMeasConfig': {'members': [{'name': 'measIdList', 'optional': True, 'type': 'MeasIdToAddModList'}, {'name': 'measObjectList', 'optional': True, 'type': 'MeasObjectToAddModList'}, {'name': 'reportConfigList', 'optional': True, 'type': 'ReportConfigToAddModList'}, {'name': 'quantityConfig', 'optional': True, 'type': 'QuantityConfig'}, {'name': 's-Measure', 'optional': True, 'type': 'RSRP-Range'}, {'members': [{'name': 'release', 'type': 'NULL'}, {'members': [{'name': 'mobilityStateParameters', 'type': 'MobilityStateParameters'}, {'name': 'timeToTrigger-SF', 'type': 'SpeedStateScaleFactors'}], 'name': 'setup', 'type': 'SEQUENCE'}], 'name': 'speedStatePars', 'optional': True, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'VarMeasReport': {'members': [{'name': 'measId', 'type': 'MeasId'}, {'name': 'cellsTriggeredList', 'optional': True, 'type': 'CellsTriggeredList'}, {'name': 'numberOfReportsSent', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'VarMeasReportList': {'element': {'type': 'VarMeasReport'}, 'size': [(1, 'maxMeasId')], 'type': 'SEQUENCE OF'}, 'VarShortMAC-Input': {'members': [{'name': 'cellIdentity', 'type': 'CellIdentity'}, {'name': 'physCellId', 'type': 'PhysCellId'}, {'name': 'c-RNTI', 'type': 'C-RNTI'}], 'type': 'SEQUENCE'}}, 'values': {}}}asn1tools-0.169.0/tests/files/3gpp/s1ap_14_4_0.asn000066400000000000000000007417171524544274600213020ustar00rootroot00000000000000-- ************************************************************** -- -- Elementary Procedure definitions -- -- ************************************************************** S1AP-PDU-Descriptions { itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-PDU-Descriptions (0) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- ************************************************************** -- -- IE parameter types from other modules. -- -- ************************************************************** IMPORTS Criticality, ProcedureCode FROM S1AP-CommonDataTypes CellTrafficTrace, DeactivateTrace, DownlinkUEAssociatedLPPaTransport, DownlinkNASTransport, DownlinkNonUEAssociatedLPPaTransport, DownlinkS1cdma2000tunnelling, ENBDirectInformationTransfer, ENBStatusTransfer, ENBConfigurationUpdate, ENBConfigurationUpdateAcknowledge, ENBConfigurationUpdateFailure, ErrorIndication, HandoverCancel, HandoverCancelAcknowledge, HandoverCommand, HandoverFailure, HandoverNotify, HandoverPreparationFailure, HandoverRequest, HandoverRequestAcknowledge, HandoverRequired, InitialContextSetupFailure, InitialContextSetupRequest, InitialContextSetupResponse, InitialUEMessage, KillRequest, KillResponse, LocationReportingControl, LocationReportingFailureIndication, LocationReport, MMEConfigurationUpdate, MMEConfigurationUpdateAcknowledge, MMEConfigurationUpdateFailure, MMEDirectInformationTransfer, MMEStatusTransfer, NASNonDeliveryIndication, OverloadStart, OverloadStop, Paging, PathSwitchRequest, PathSwitchRequestAcknowledge, PathSwitchRequestFailure, PrivateMessage, Reset, ResetAcknowledge, S1SetupFailure, S1SetupRequest, S1SetupResponse, E-RABModifyRequest, E-RABModifyResponse, E-RABModificationIndication, E-RABModificationConfirm, E-RABReleaseCommand, E-RABReleaseResponse, E-RABReleaseIndication, E-RABSetupRequest, E-RABSetupResponse, TraceFailureIndication, TraceStart, UECapabilityInfoIndication, UEContextModificationFailure, UEContextModificationRequest, UEContextModificationResponse, UEContextReleaseCommand, UEContextReleaseComplete, UEContextReleaseRequest, UERadioCapabilityMatchRequest, UERadioCapabilityMatchResponse, UplinkUEAssociatedLPPaTransport, UplinkNASTransport, UplinkNonUEAssociatedLPPaTransport, UplinkS1cdma2000tunnelling, WriteReplaceWarningRequest, WriteReplaceWarningResponse, ENBConfigurationTransfer, MMEConfigurationTransfer, PWSRestartIndication, UEContextModificationIndication, UEContextModificationConfirm, RerouteNASRequest, PWSFailureIndication, UEContextSuspendRequest, UEContextSuspendResponse, UEContextResumeRequest, UEContextResumeResponse, UEContextResumeFailure, ConnectionEstablishmentIndication, NASDeliveryIndication, RetrieveUEInformation, UEInformationTransfer, ENBCPRelocationIndication, MMECPRelocationIndication FROM S1AP-PDU-Contents id-CellTrafficTrace, id-DeactivateTrace, id-downlinkUEAssociatedLPPaTransport, id-downlinkNASTransport, id-downlinkNonUEAssociatedLPPaTransport, id-DownlinkS1cdma2000tunnelling, id-eNBStatusTransfer, id-ErrorIndication, id-HandoverCancel, id-HandoverNotification, id-HandoverPreparation, id-HandoverResourceAllocation, id-InitialContextSetup, id-initialUEMessage, id-ENBConfigurationUpdate, id-Kill, id-LocationReportingControl, id-LocationReportingFailureIndication, id-LocationReport, id-eNBDirectInformationTransfer, id-MMEConfigurationUpdate, id-MMEDirectInformationTransfer, id-MMEStatusTransfer, id-NASNonDeliveryIndication, id-OverloadStart, id-OverloadStop, id-Paging, id-PathSwitchRequest, id-PrivateMessage, id-Reset, id-S1Setup, id-E-RABModify, id-E-RABModificationIndication, id-E-RABRelease, id-E-RABReleaseIndication, id-E-RABSetup, id-TraceFailureIndication, id-TraceStart, id-UECapabilityInfoIndication, id-UEContextModification, id-UEContextRelease, id-UEContextReleaseRequest, id-UERadioCapabilityMatch, id-uplinkUEAssociatedLPPaTransport, id-uplinkNASTransport, id-uplinkNonUEAssociatedLPPaTransport, id-UplinkS1cdma2000tunnelling, id-WriteReplaceWarning, id-eNBConfigurationTransfer, id-MMEConfigurationTransfer, id-PWSRestartIndication, id-UEContextModificationIndication, id-RerouteNASRequest, id-PWSFailureIndication, id-UEContextSuspend, id-UEContextResume, id-ConnectionEstablishmentIndication, id-NASDeliveryIndication, id-RetrieveUEInformation, id-UEInformationTransfer, id-eNBCPRelocationIndication, id-MMECPRelocationIndication FROM S1AP-Constants; -- ************************************************************** -- -- Interface Elementary Procedure Class -- -- ************************************************************** S1AP-ELEMENTARY-PROCEDURE ::= CLASS { &InitiatingMessage, &SuccessfulOutcome OPTIONAL, &UnsuccessfulOutcome OPTIONAL, &procedureCode ProcedureCode UNIQUE, &criticality Criticality DEFAULT ignore } WITH SYNTAX { INITIATING MESSAGE &InitiatingMessage [SUCCESSFUL OUTCOME &SuccessfulOutcome] [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] PROCEDURE CODE &procedureCode [CRITICALITY &criticality] } -- ************************************************************** -- -- Interface PDU Definition -- -- ************************************************************** S1AP-PDU ::= CHOICE { initiatingMessage InitiatingMessage, successfulOutcome SuccessfulOutcome, unsuccessfulOutcome UnsuccessfulOutcome, ... } InitiatingMessage ::= SEQUENCE { procedureCode S1AP-ELEMENTARY-PROCEDURE.&procedureCode ({S1AP-ELEMENTARY-PROCEDURES}), criticality S1AP-ELEMENTARY-PROCEDURE.&criticality ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}), value S1AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}) } SuccessfulOutcome ::= SEQUENCE { procedureCode S1AP-ELEMENTARY-PROCEDURE.&procedureCode ({S1AP-ELEMENTARY-PROCEDURES}), criticality S1AP-ELEMENTARY-PROCEDURE.&criticality ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}), value S1AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}) } UnsuccessfulOutcome ::= SEQUENCE { procedureCode S1AP-ELEMENTARY-PROCEDURE.&procedureCode ({S1AP-ELEMENTARY-PROCEDURES}), criticality S1AP-ELEMENTARY-PROCEDURE.&criticality ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}), value S1AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({S1AP-ELEMENTARY-PROCEDURES}{@procedureCode}) } -- ************************************************************** -- -- Interface Elementary Procedure List -- -- ************************************************************** S1AP-ELEMENTARY-PROCEDURES S1AP-ELEMENTARY-PROCEDURE ::= { S1AP-ELEMENTARY-PROCEDURES-CLASS-1 | S1AP-ELEMENTARY-PROCEDURES-CLASS-2, ... } S1AP-ELEMENTARY-PROCEDURES-CLASS-1 S1AP-ELEMENTARY-PROCEDURE ::= { handoverPreparation | handoverResourceAllocation | pathSwitchRequest | e-RABSetup | e-RABModify | e-RABRelease | initialContextSetup | handoverCancel | kill | reset | s1Setup | uEContextModification | uEContextRelease | eNBConfigurationUpdate | mMEConfigurationUpdate | writeReplaceWarning , ..., uERadioCapabilityMatch | e-RABModificationIndication | uEContextModificationIndication | uEContextSuspend | uEContextResume } S1AP-ELEMENTARY-PROCEDURES-CLASS-2 S1AP-ELEMENTARY-PROCEDURE ::= { handoverNotification | e-RABReleaseIndication | paging | downlinkNASTransport | initialUEMessage | uplinkNASTransport | errorIndication | nASNonDeliveryIndication | uEContextReleaseRequest | downlinkS1cdma2000tunnelling | uplinkS1cdma2000tunnelling | uECapabilityInfoIndication | eNBStatusTransfer | mMEStatusTransfer | deactivateTrace | traceStart | traceFailureIndication | cellTrafficTrace | locationReportingControl | locationReportingFailureIndication | locationReport | overloadStart | overloadStop | eNBDirectInformationTransfer | mMEDirectInformationTransfer | eNBConfigurationTransfer | mMEConfigurationTransfer | privateMessage , ..., downlinkUEAssociatedLPPaTransport | uplinkUEAssociatedLPPaTransport | downlinkNonUEAssociatedLPPaTransport | uplinkNonUEAssociatedLPPaTransport | pWSRestartIndication | rerouteNASRequest | pWSFailureIndication | connectionEstablishmentIndication | nASDeliveryIndication | retrieveUEInformation | uEInformationTransfer | eNBCPRelocationIndication | mMECPRelocationIndication } -- ************************************************************** -- -- Interface Elementary Procedures -- -- ************************************************************** handoverPreparation S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE HandoverRequired SUCCESSFUL OUTCOME HandoverCommand UNSUCCESSFUL OUTCOME HandoverPreparationFailure PROCEDURE CODE id-HandoverPreparation CRITICALITY reject } handoverResourceAllocation S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE HandoverRequest SUCCESSFUL OUTCOME HandoverRequestAcknowledge UNSUCCESSFUL OUTCOME HandoverFailure PROCEDURE CODE id-HandoverResourceAllocation CRITICALITY reject } handoverNotification S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE HandoverNotify PROCEDURE CODE id-HandoverNotification CRITICALITY ignore } pathSwitchRequest S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE PathSwitchRequest SUCCESSFUL OUTCOME PathSwitchRequestAcknowledge UNSUCCESSFUL OUTCOME PathSwitchRequestFailure PROCEDURE CODE id-PathSwitchRequest CRITICALITY reject } e-RABSetup S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE E-RABSetupRequest SUCCESSFUL OUTCOME E-RABSetupResponse PROCEDURE CODE id-E-RABSetup CRITICALITY reject } e-RABModify S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE E-RABModifyRequest SUCCESSFUL OUTCOME E-RABModifyResponse PROCEDURE CODE id-E-RABModify CRITICALITY reject } e-RABRelease S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE E-RABReleaseCommand SUCCESSFUL OUTCOME E-RABReleaseResponse PROCEDURE CODE id-E-RABRelease CRITICALITY reject } e-RABReleaseIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE E-RABReleaseIndication PROCEDURE CODE id-E-RABReleaseIndication CRITICALITY ignore } initialContextSetup S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE InitialContextSetupRequest SUCCESSFUL OUTCOME InitialContextSetupResponse UNSUCCESSFUL OUTCOME InitialContextSetupFailure PROCEDURE CODE id-InitialContextSetup CRITICALITY reject } uEContextReleaseRequest S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UEContextReleaseRequest PROCEDURE CODE id-UEContextReleaseRequest CRITICALITY ignore } paging S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE Paging PROCEDURE CODE id-Paging CRITICALITY ignore } downlinkNASTransport S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE DownlinkNASTransport PROCEDURE CODE id-downlinkNASTransport CRITICALITY ignore } initialUEMessage S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE InitialUEMessage PROCEDURE CODE id-initialUEMessage CRITICALITY ignore } uplinkNASTransport S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UplinkNASTransport PROCEDURE CODE id-uplinkNASTransport CRITICALITY ignore } nASNonDeliveryIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE NASNonDeliveryIndication PROCEDURE CODE id-NASNonDeliveryIndication CRITICALITY ignore } handoverCancel S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE HandoverCancel SUCCESSFUL OUTCOME HandoverCancelAcknowledge PROCEDURE CODE id-HandoverCancel CRITICALITY reject } reset S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE Reset SUCCESSFUL OUTCOME ResetAcknowledge PROCEDURE CODE id-Reset CRITICALITY reject } errorIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE ErrorIndication PROCEDURE CODE id-ErrorIndication CRITICALITY ignore } s1Setup S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE S1SetupRequest SUCCESSFUL OUTCOME S1SetupResponse UNSUCCESSFUL OUTCOME S1SetupFailure PROCEDURE CODE id-S1Setup CRITICALITY reject } eNBConfigurationUpdate S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE ENBConfigurationUpdate SUCCESSFUL OUTCOME ENBConfigurationUpdateAcknowledge UNSUCCESSFUL OUTCOME ENBConfigurationUpdateFailure PROCEDURE CODE id-ENBConfigurationUpdate CRITICALITY reject } mMEConfigurationUpdate S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE MMEConfigurationUpdate SUCCESSFUL OUTCOME MMEConfigurationUpdateAcknowledge UNSUCCESSFUL OUTCOME MMEConfigurationUpdateFailure PROCEDURE CODE id-MMEConfigurationUpdate CRITICALITY reject } downlinkS1cdma2000tunnelling S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE DownlinkS1cdma2000tunnelling PROCEDURE CODE id-DownlinkS1cdma2000tunnelling CRITICALITY ignore } uplinkS1cdma2000tunnelling S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UplinkS1cdma2000tunnelling PROCEDURE CODE id-UplinkS1cdma2000tunnelling CRITICALITY ignore } uEContextModification S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UEContextModificationRequest SUCCESSFUL OUTCOME UEContextModificationResponse UNSUCCESSFUL OUTCOME UEContextModificationFailure PROCEDURE CODE id-UEContextModification CRITICALITY reject } uECapabilityInfoIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UECapabilityInfoIndication PROCEDURE CODE id-UECapabilityInfoIndication CRITICALITY ignore } uEContextRelease S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UEContextReleaseCommand SUCCESSFUL OUTCOME UEContextReleaseComplete PROCEDURE CODE id-UEContextRelease CRITICALITY reject } eNBStatusTransfer S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE ENBStatusTransfer PROCEDURE CODE id-eNBStatusTransfer CRITICALITY ignore } mMEStatusTransfer S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE MMEStatusTransfer PROCEDURE CODE id-MMEStatusTransfer CRITICALITY ignore } deactivateTrace S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE DeactivateTrace PROCEDURE CODE id-DeactivateTrace CRITICALITY ignore } traceStart S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE TraceStart PROCEDURE CODE id-TraceStart CRITICALITY ignore } traceFailureIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE TraceFailureIndication PROCEDURE CODE id-TraceFailureIndication CRITICALITY ignore } cellTrafficTrace S1AP-ELEMENTARY-PROCEDURE ::={ INITIATING MESSAGE CellTrafficTrace PROCEDURE CODE id-CellTrafficTrace CRITICALITY ignore } locationReportingControl S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE LocationReportingControl PROCEDURE CODE id-LocationReportingControl CRITICALITY ignore } locationReportingFailureIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE LocationReportingFailureIndication PROCEDURE CODE id-LocationReportingFailureIndication CRITICALITY ignore } locationReport S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE LocationReport PROCEDURE CODE id-LocationReport CRITICALITY ignore } overloadStart S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE OverloadStart PROCEDURE CODE id-OverloadStart CRITICALITY ignore } overloadStop S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE OverloadStop PROCEDURE CODE id-OverloadStop CRITICALITY reject } writeReplaceWarning S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE WriteReplaceWarningRequest SUCCESSFUL OUTCOME WriteReplaceWarningResponse PROCEDURE CODE id-WriteReplaceWarning CRITICALITY reject } eNBDirectInformationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE ENBDirectInformationTransfer PROCEDURE CODE id-eNBDirectInformationTransfer CRITICALITY ignore } mMEDirectInformationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE MMEDirectInformationTransfer PROCEDURE CODE id-MMEDirectInformationTransfer CRITICALITY ignore } eNBConfigurationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE ENBConfigurationTransfer PROCEDURE CODE id-eNBConfigurationTransfer CRITICALITY ignore } mMEConfigurationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE MMEConfigurationTransfer PROCEDURE CODE id-MMEConfigurationTransfer CRITICALITY ignore } privateMessage S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE PrivateMessage PROCEDURE CODE id-PrivateMessage CRITICALITY ignore } pWSRestartIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE PWSRestartIndication PROCEDURE CODE id-PWSRestartIndication CRITICALITY ignore } kill S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE KillRequest SUCCESSFUL OUTCOME KillResponse PROCEDURE CODE id-Kill CRITICALITY reject } downlinkUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE DownlinkUEAssociatedLPPaTransport PROCEDURE CODE id-downlinkUEAssociatedLPPaTransport CRITICALITY ignore } uplinkUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UplinkUEAssociatedLPPaTransport PROCEDURE CODE id-uplinkUEAssociatedLPPaTransport CRITICALITY ignore } downlinkNonUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE DownlinkNonUEAssociatedLPPaTransport PROCEDURE CODE id-downlinkNonUEAssociatedLPPaTransport CRITICALITY ignore } uplinkNonUEAssociatedLPPaTransport S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UplinkNonUEAssociatedLPPaTransport PROCEDURE CODE id-uplinkNonUEAssociatedLPPaTransport CRITICALITY ignore } uERadioCapabilityMatch S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UERadioCapabilityMatchRequest SUCCESSFUL OUTCOME UERadioCapabilityMatchResponse PROCEDURE CODE id-UERadioCapabilityMatch CRITICALITY reject } e-RABModificationIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE E-RABModificationIndication SUCCESSFUL OUTCOME E-RABModificationConfirm PROCEDURE CODE id-E-RABModificationIndication CRITICALITY reject } uEContextModificationIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UEContextModificationIndication SUCCESSFUL OUTCOME UEContextModificationConfirm PROCEDURE CODE id-UEContextModificationIndication CRITICALITY reject } rerouteNASRequest S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE RerouteNASRequest PROCEDURE CODE id-RerouteNASRequest CRITICALITY reject } pWSFailureIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE PWSFailureIndication PROCEDURE CODE id-PWSFailureIndication CRITICALITY ignore } uEContextSuspend S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UEContextSuspendRequest SUCCESSFUL OUTCOME UEContextSuspendResponse PROCEDURE CODE id-UEContextSuspend CRITICALITY reject } uEContextResume S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UEContextResumeRequest SUCCESSFUL OUTCOME UEContextResumeResponse UNSUCCESSFUL OUTCOME UEContextResumeFailure PROCEDURE CODE id-UEContextResume CRITICALITY reject } connectionEstablishmentIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE ConnectionEstablishmentIndication PROCEDURE CODE id-ConnectionEstablishmentIndication CRITICALITY reject } nASDeliveryIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE NASDeliveryIndication PROCEDURE CODE id-NASDeliveryIndication CRITICALITY ignore } retrieveUEInformation S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE RetrieveUEInformation PROCEDURE CODE id-RetrieveUEInformation CRITICALITY reject } uEInformationTransfer S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE UEInformationTransfer PROCEDURE CODE id-UEInformationTransfer CRITICALITY reject } eNBCPRelocationIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE ENBCPRelocationIndication PROCEDURE CODE id-eNBCPRelocationIndication CRITICALITY reject } mMECPRelocationIndication S1AP-ELEMENTARY-PROCEDURE ::= { INITIATING MESSAGE MMECPRelocationIndication PROCEDURE CODE id-MMECPRelocationIndication CRITICALITY reject } END -- ************************************************************** -- -- PDU definitions for S1AP. -- -- ************************************************************** S1AP-PDU-Contents { itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-PDU-Contents (1) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- ************************************************************** -- -- IE parameter types from other modules. -- -- ************************************************************** IMPORTS UEAggregateMaximumBitrate, BearerType, Cause, CellAccessMode, Cdma2000HORequiredIndication, Cdma2000HOStatus, Cdma2000OneXSRVCCInfo, Cdma2000OneXRAND, Cdma2000PDU, Cdma2000RATType, Cdma2000SectorID, EUTRANRoundTripDelayEstimationInfo, CNDomain, ConcurrentWarningMessageIndicator, CriticalityDiagnostics, CSFallbackIndicator, CSG-Id, CSG-IdList, CSGMembershipStatus, Data-Forwarding-Not-Possible, Direct-Forwarding-Path-Availability, Global-ENB-ID, EUTRAN-CGI, ENBname, ENB-StatusTransfer-TransparentContainer, ENB-UE-S1AP-ID, ExtendedRepetitionPeriod, GTP-TEID, GUMMEI, GUMMEIType, HandoverRestrictionList, HandoverType, Masked-IMEISV, LAI, LPPa-PDU, ManagementBasedMDTAllowed, MDTPLMNList, MMEname, MMERelaySupportIndicator, MME-UE-S1AP-ID, MSClassmark2, MSClassmark3, NAS-PDU, NASSecurityParametersfromE-UTRAN, NASSecurityParameterstoE-UTRAN, OverloadResponse, PagingDRX, PagingPriority, PLMNidentity, ProSeAuthorized, RIMTransfer, RelativeMMECapacity, RequestType, E-RAB-ID, E-RABLevelQoSParameters, E-RABList, RelayNode-Indicator, Routing-ID, SecurityKey, SecurityContext, ServedGUMMEIs, SONConfigurationTransfer, Source-ToTarget-TransparentContainer, SourceBSS-ToTargetBSS-TransparentContainer, SourceeNB-ToTargeteNB-TransparentContainer, SourceRNC-ToTargetRNC-TransparentContainer, SubscriberProfileIDforRFP, SRVCCOperationNotPossible, SRVCCOperationPossible, SRVCCHOIndication, SupportedTAs, TAI, Target-ToSource-TransparentContainer, TargetBSS-ToSourceBSS-TransparentContainer, TargeteNB-ToSourceeNB-TransparentContainer, TargetID, TargetRNC-ToSourceRNC-TransparentContainer, TimeToWait, TraceActivation, TrafficLoadReductionIndication, E-UTRAN-Trace-ID, TransportLayerAddress, UEIdentityIndexValue, UEPagingID, UERadioCapability, UERadioCapabilityForPaging, UE-RetentionInformation, UE-S1AP-IDs, UE-associatedLogicalS1-ConnectionItem, UESecurityCapabilities, S-TMSI, MessageIdentifier, SerialNumber, WarningAreaList, RepetitionPeriod, NumberofBroadcastRequest, WarningType, WarningSecurityInfo, DataCodingScheme, WarningMessageContents, BroadcastCompletedAreaList, RRC-Establishment-Cause, BroadcastCancelledAreaList, PS-ServiceNotAvailable, GUMMEIList, Correlation-ID, GWContextReleaseIndication, PrivacyIndicator, VoiceSupportMatchIndicator, TunnelInformation, KillAllWarningMessages, TransportInformation, LHN-ID, UserLocationInformation, AdditionalCSFallbackIndicator, ECGIListForRestart, TAIListForRestart, EmergencyAreaIDListForRestart, ExpectedUEBehaviour, Paging-eDRXInformation, Extended-UEIdentityIndexValue, MME-Group-ID, Additional-GUTI, PWSfailedECGIList, CellIdentifierAndCELevelForCECapableUEs, AssistanceDataForPaging, InformationOnRecommendedCellsAndENBsForPaging, UE-Usage-Type, UEUserPlaneCIoTSupportIndicator, NB-IoT-DefaultPagingDRX, NB-IoT-Paging-eDRXInformation, CE-mode-B-SupportIndicator, NB-IoT-UEIdentityIndexValue, V2XServicesAuthorized, DCN-ID, ServedDCNs, UESidelinkAggregateMaximumBitrate, DLNASPDUDeliveryAckRequest, Coverage-Level, EnhancedCoverageRestricted, DL-CP-SecurityInformation, UL-CP-SecurityInformation FROM S1AP-IEs PrivateIE-Container{}, ProtocolExtensionContainer{}, ProtocolIE-Container{}, ProtocolIE-ContainerList{}, ProtocolIE-ContainerPair{}, ProtocolIE-ContainerPairList{}, ProtocolIE-SingleContainer{}, S1AP-PRIVATE-IES, S1AP-PROTOCOL-EXTENSION, S1AP-PROTOCOL-IES, S1AP-PROTOCOL-IES-PAIR FROM S1AP-Containers id-AssistanceDataForPaging, id-uEaggregateMaximumBitrate, id-BearerType, id-Cause, id-CellAccessMode, id-CellIdentifierAndCELevelForCECapableUEs, id-cdma2000HORequiredIndication, id-cdma2000HOStatus, id-cdma2000OneXSRVCCInfo, id-cdma2000OneXRAND, id-cdma2000PDU, id-cdma2000RATType, id-cdma2000SectorID, id-EUTRANRoundTripDelayEstimationInfo, id-CNDomain, id-ConcurrentWarningMessageIndicator, id-CriticalityDiagnostics, id-CSFallbackIndicator, id-CSG-Id, id-CSG-IdList, id-CSGMembershipStatus, id-Data-Forwarding-Not-Possible, id-DefaultPagingDRX, id-Direct-Forwarding-Path-Availability, id-Global-ENB-ID, id-EUTRAN-CGI, id-eNBname, id-eNB-StatusTransfer-TransparentContainer, id-eNB-UE-S1AP-ID, id-GERANtoLTEHOInformationRes, id-GUMMEI-ID, id-GUMMEIType, id-HandoverRestrictionList, id-HandoverType, id-Masked-IMEISV, id-InformationOnRecommendedCellsAndENBsForPaging, id-InitialContextSetup, id-Inter-SystemInformationTransferTypeEDT, id-Inter-SystemInformationTransferTypeMDT, id-LPPa-PDU, id-NAS-DownlinkCount, id-ManagementBasedMDTAllowed, id-ManagementBasedMDTPLMNList, id-MMEname, id-MME-UE-S1AP-ID, id-MSClassmark2, id-MSClassmark3, id-NAS-PDU, id-NASSecurityParametersfromE-UTRAN, id-NASSecurityParameterstoE-UTRAN, id-OverloadResponse, id-pagingDRX, id-PagingPriority, id-RelativeMMECapacity, id-RequestType, id-Routing-ID, id-E-RABAdmittedItem, id-E-RABAdmittedList, id-E-RABDataForwardingItem, id-E-RABFailedToModifyList, id-E-RABFailedToReleaseList, id-E-RABFailedtoSetupItemHOReqAck, id-E-RABFailedToSetupListBearerSURes, id-E-RABFailedToSetupListCtxtSURes, id-E-RABFailedToSetupListHOReqAck, id-E-RABFailedToBeReleasedList, id-E-RABFailedToResumeListResumeReq, id-E-RABFailedToResumeItemResumeReq, id-E-RABFailedToResumeListResumeRes, id-E-RABFailedToResumeItemResumeRes, id-E-RABModify, id-E-RABModifyItemBearerModRes, id-E-RABModifyListBearerModRes, id-E-RABRelease, id-E-RABReleaseItemBearerRelComp, id-E-RABReleaseItemHOCmd, id-E-RABReleaseListBearerRelComp, id-E-RABReleaseIndication, id-E-RABSetup, id-E-RABSetupItemBearerSURes, id-E-RABSetupItemCtxtSURes, id-E-RABSetupListBearerSURes, id-E-RABSetupListCtxtSURes, id-E-RABSubjecttoDataForwardingList, id-E-RABToBeModifiedItemBearerModReq, id-E-RABToBeModifiedListBearerModReq, id-E-RABToBeModifiedListBearerModInd, id-E-RABToBeModifiedItemBearerModInd, id-E-RABNotToBeModifiedListBearerModInd, id-E-RABNotToBeModifiedItemBearerModInd, id-E-RABModifyListBearerModConf, id-E-RABModifyItemBearerModConf, id-E-RABFailedToModifyListBearerModConf, id-E-RABToBeReleasedListBearerModConf, id-E-RABToBeReleasedList, id-E-RABReleasedList, id-E-RABToBeSetupItemBearerSUReq, id-E-RABToBeSetupItemCtxtSUReq, id-E-RABToBeSetupItemHOReq, id-E-RABToBeSetupListBearerSUReq, id-E-RABToBeSetupListCtxtSUReq, id-E-RABToBeSetupListHOReq, id-E-RABToBeSwitchedDLItem, id-E-RABToBeSwitchedDLList, id-E-RABToBeSwitchedULList, id-E-RABToBeSwitchedULItem, id-E-RABtoReleaseListHOCmd, id-ProSeAuthorized, id-SecurityKey, id-SecurityContext, id-ServedGUMMEIs, id-SONConfigurationTransferECT, id-SONConfigurationTransferMCT, id-Source-ToTarget-TransparentContainer, id-Source-ToTarget-TransparentContainer-Secondary, id-SourceMME-UE-S1AP-ID, id-SRVCCOperationNotPossible, id-SRVCCOperationPossible, id-SRVCCHOIndication, id-SubscriberProfileIDforRFP, id-SupportedTAs, id-S-TMSI, id-TAI, id-TAIItem, id-TAIList, id-Target-ToSource-TransparentContainer, id-Target-ToSource-TransparentContainer-Secondary, id-TargetID, id-TimeToWait, id-TraceActivation, id-TrafficLoadReductionIndication, id-E-UTRAN-Trace-ID, id-UEIdentityIndexValue, id-UEPagingID, id-UERadioCapability, id-UERadioCapabilityForPaging, id-UTRANtoLTEHOInformationRes, id-UE-associatedLogicalS1-ConnectionListResAck, id-UE-associatedLogicalS1-ConnectionItem, id-UE-RetentionInformation, id-UESecurityCapabilities, id-UE-S1AP-IDs, id-V2XServicesAuthorized, id-ResetType, id-MessageIdentifier, id-SerialNumber, id-WarningAreaList, id-RepetitionPeriod, id-NumberofBroadcastRequest, id-WarningType, id-WarningSecurityInfo, id-DataCodingScheme, id-WarningMessageContents, id-BroadcastCompletedAreaList, id-BroadcastCancelledAreaList, id-RRC-Establishment-Cause, id-TraceCollectionEntityIPAddress, maxnoofTAIs, maxnoofErrors, maxnoofE-RABs, maxnoofIndividualS1ConnectionsToReset, maxnoofEmergencyAreaID, maxnoofCellID, maxnoofTAIforWarning, maxnoofCellinTAI, maxnoofCellinEAI, id-ExtendedRepetitionPeriod, id-PS-ServiceNotAvailable, id-RegisteredLAI, id-GUMMEIList, id-SourceMME-GUMMEI, id-MME-UE-S1AP-ID-2, id-GW-TransportLayerAddress, id-RelayNode-Indicator, id-Correlation-ID, id-MMERelaySupportIndicator, id-GWContextReleaseIndication, id-PrivacyIndicator, id-VoiceSupportMatchIndicator, id-Tunnel-Information-for-BBF, id-SIPTO-Correlation-ID, id-SIPTO-L-GW-TransportLayerAddress, id-KillAllWarningMessages, id-TransportInformation, id-LHN-ID, id-UserLocationInformation, id-AdditionalCSFallbackIndicator, id-ECGIListForRestart, id-TAIListForRestart, id-EmergencyAreaIDListForRestart, id-ExpectedUEBehaviour, id-Paging-eDRXInformation, id-extended-UEIdentityIndexValue, id-CSGMembershipInfo, id-MME-Group-ID, id-Additional-GUTI, id-S1-Message, id-PWSfailedECGIList, id-PWSFailureIndication, id-UE-Usage-Type, id-UEUserPlaneCIoTSupportIndicator, id-NB-IoT-DefaultPagingDRX, id-NB-IoT-Paging-eDRXInformation, id-CE-mode-B-SupportIndicator, id-NB-IoT-UEIdentityIndexValue, id-RRC-Resume-Cause, id-DCN-ID, id-ServedDCNs, id-UESidelinkAggregateMaximumBitrate, id-DLNASPDUDeliveryAckRequest, id-Coverage-Level, id-EnhancedCoverageRestricted, id-UE-Level-QoS-Parameters, id-DL-CP-SecurityInformation, id-UL-CP-SecurityInformation FROM S1AP-Constants; -- ************************************************************** -- -- Common Container Lists -- -- ************************************************************** E-RAB-IE-ContainerList { S1AP-PROTOCOL-IES : IEsSetParam } ::= ProtocolIE-ContainerList { 1, maxnoofE-RABs, {IEsSetParam} } E-RAB-IE-ContainerPairList { S1AP-PROTOCOL-IES-PAIR : IEsSetParam } ::= ProtocolIE-ContainerPairList { 1, maxnoofE-RABs, {IEsSetParam} } ProtocolError-IE-ContainerList { S1AP-PROTOCOL-IES : IEsSetParam } ::= ProtocolIE-ContainerList { 1, maxnoofE-RABs, {IEsSetParam} } -- ************************************************************** -- -- HANDOVER PREPARATION ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Handover Required -- -- ************************************************************** HandoverRequired ::= SEQUENCE { protocolIEs ProtocolIE-Container { { HandoverRequiredIEs} }, ... } HandoverRequiredIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-TargetID CRITICALITY reject TYPE TargetID PRESENCE mandatory}| { ID id-Direct-Forwarding-Path-Availability CRITICALITY ignore TYPE Direct-Forwarding-Path-Availability PRESENCE optional}| { ID id-SRVCCHOIndication CRITICALITY reject TYPE SRVCCHOIndication PRESENCE optional}| { ID id-Source-ToTarget-TransparentContainer CRITICALITY reject TYPE Source-ToTarget-TransparentContainer PRESENCE mandatory}| { ID id-Source-ToTarget-TransparentContainer-Secondary CRITICALITY reject TYPE Source-ToTarget-TransparentContainer PRESENCE optional}| { ID id-MSClassmark2 CRITICALITY reject TYPE MSClassmark2 PRESENCE conditional}| { ID id-MSClassmark3 CRITICALITY ignore TYPE MSClassmark3 PRESENCE conditional}| { ID id-CSG-Id CRITICALITY reject TYPE CSG-Id PRESENCE optional}| { ID id-CellAccessMode CRITICALITY reject TYPE CellAccessMode PRESENCE optional}| { ID id-PS-ServiceNotAvailable CRITICALITY ignore TYPE PS-ServiceNotAvailable PRESENCE optional}, ... } -- ************************************************************** -- -- Handover Command -- -- ************************************************************** HandoverCommand ::= SEQUENCE { protocolIEs ProtocolIE-Container { { HandoverCommandIEs} }, ... } HandoverCommandIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory}| { ID id-NASSecurityParametersfromE-UTRAN CRITICALITY reject TYPE NASSecurityParametersfromE-UTRAN PRESENCE conditional -- This IE shall be present if HandoverType IE is set to value "LTEtoUTRAN" or "LTEtoGERAN" -- }| { ID id-E-RABSubjecttoDataForwardingList CRITICALITY ignore TYPE E-RABSubjecttoDataForwardingList PRESENCE optional}| { ID id-E-RABtoReleaseListHOCmd CRITICALITY ignore TYPE E-RABList PRESENCE optional}| { ID id-Target-ToSource-TransparentContainer CRITICALITY reject TYPE Target-ToSource-TransparentContainer PRESENCE mandatory}| { ID id-Target-ToSource-TransparentContainer-Secondary CRITICALITY reject TYPE Target-ToSource-TransparentContainer PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, ... } E-RABSubjecttoDataForwardingList ::= E-RAB-IE-ContainerList { {E-RABDataForwardingItemIEs} } E-RABDataForwardingItemIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABDataForwardingItem CRITICALITY ignore TYPE E-RABDataForwardingItem PRESENCE mandatory }, ... } E-RABDataForwardingItem ::= SEQUENCE { e-RAB-ID E-RAB-ID, dL-transportLayerAddress TransportLayerAddress OPTIONAL, dL-gTP-TEID GTP-TEID OPTIONAL, uL-TransportLayerAddress TransportLayerAddress OPTIONAL, uL-GTP-TEID GTP-TEID OPTIONAL, iE-Extensions ProtocolExtensionContainer { { E-RABDataForwardingItem-ExtIEs} } OPTIONAL, ... } E-RABDataForwardingItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- Handover Preparation Failure -- -- ************************************************************** HandoverPreparationFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container { { HandoverPreparationFailureIEs} }, ... } HandoverPreparationFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- HANDOVER RESOURCE ALLOCATION ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Handover Request -- -- ************************************************************** HandoverRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container { {HandoverRequestIEs} }, ... } HandoverRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-HandoverType CRITICALITY reject TYPE HandoverType PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE mandatory}| { ID id-E-RABToBeSetupListHOReq CRITICALITY reject TYPE E-RABToBeSetupListHOReq PRESENCE mandatory}| { ID id-Source-ToTarget-TransparentContainer CRITICALITY reject TYPE Source-ToTarget-TransparentContainer PRESENCE mandatory}| { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE mandatory}| { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| { ID id-RequestType CRITICALITY ignore TYPE RequestType PRESENCE optional}| { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| { ID id-SecurityContext CRITICALITY reject TYPE SecurityContext PRESENCE mandatory}| { ID id-NASSecurityParameterstoE-UTRAN CRITICALITY reject TYPE NASSecurityParameterstoE-UTRAN PRESENCE conditional -- This IE shall be present if the Handover Type IE is set to the value "UTRANtoLTE" or "GERANtoLTE" -- }| { ID id-CSG-Id CRITICALITY reject TYPE CSG-Id PRESENCE optional}| { ID id-CSGMembershipStatus CRITICALITY ignore TYPE CSGMembershipStatus PRESENCE optional}| { ID id-GUMMEI-ID CRITICALITY ignore TYPE GUMMEI PRESENCE optional}| { ID id-MME-UE-S1AP-ID-2 CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE optional}| { ID id-ManagementBasedMDTAllowed CRITICALITY ignore TYPE ManagementBasedMDTAllowed PRESENCE optional}| { ID id-ManagementBasedMDTPLMNList CRITICALITY ignore TYPE MDTPLMNList PRESENCE optional}| { ID id-Masked-IMEISV CRITICALITY ignore TYPE Masked-IMEISV PRESENCE optional}| { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| { ID id-UEUserPlaneCIoTSupportIndicator CRITICALITY ignore TYPE UEUserPlaneCIoTSupportIndicator PRESENCE optional}| { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| { ID id-UESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE UESidelinkAggregateMaximumBitrate PRESENCE optional}| { ID id-EnhancedCoverageRestricted CRITICALITY ignore TYPE EnhancedCoverageRestricted PRESENCE optional}, ... } E-RABToBeSetupListHOReq ::= E-RAB-IE-ContainerList { {E-RABToBeSetupItemHOReqIEs} } E-RABToBeSetupItemHOReqIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABToBeSetupItemHOReq CRITICALITY reject TYPE E-RABToBeSetupItemHOReq PRESENCE mandatory }, ... } E-RABToBeSetupItemHOReq ::= SEQUENCE { e-RAB-ID E-RAB-ID, transportLayerAddress TransportLayerAddress, gTP-TEID GTP-TEID, e-RABlevelQosParameters E-RABLevelQoSParameters, iE-Extensions ProtocolExtensionContainer { {E-RABToBeSetupItemHOReq-ExtIEs} } OPTIONAL, ... } E-RABToBeSetupItemHOReq-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { { ID id-Data-Forwarding-Not-Possible CRITICALITY ignore EXTENSION Data-Forwarding-Not-Possible PRESENCE optional}| { ID id-BearerType CRITICALITY reject EXTENSION BearerType PRESENCE optional}, ... } -- ************************************************************** -- -- Handover Request Acknowledge -- -- ************************************************************** HandoverRequestAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container { {HandoverRequestAcknowledgeIEs} }, ... } HandoverRequestAcknowledgeIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-E-RABAdmittedList CRITICALITY ignore TYPE E-RABAdmittedList PRESENCE mandatory}| { ID id-E-RABFailedToSetupListHOReqAck CRITICALITY ignore TYPE E-RABFailedtoSetupListHOReqAck PRESENCE optional}| { ID id-Target-ToSource-TransparentContainer CRITICALITY reject TYPE Target-ToSource-TransparentContainer PRESENCE mandatory}| { ID id-CSG-Id CRITICALITY ignore TYPE CSG-Id PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-CellAccessMode CRITICALITY ignore TYPE CellAccessMode PRESENCE optional}| { ID id-CE-mode-B-SupportIndicator CRITICALITY ignore TYPE CE-mode-B-SupportIndicator PRESENCE optional}, ... } E-RABAdmittedList ::= E-RAB-IE-ContainerList { {E-RABAdmittedItemIEs} } E-RABAdmittedItemIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABAdmittedItem CRITICALITY ignore TYPE E-RABAdmittedItem PRESENCE mandatory }, ... } E-RABAdmittedItem ::= SEQUENCE { e-RAB-ID E-RAB-ID, transportLayerAddress TransportLayerAddress, gTP-TEID GTP-TEID, dL-transportLayerAddress TransportLayerAddress OPTIONAL, dL-gTP-TEID GTP-TEID OPTIONAL, uL-TransportLayerAddress TransportLayerAddress OPTIONAL, uL-GTP-TEID GTP-TEID OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABAdmittedItem-ExtIEs} } OPTIONAL, ... } E-RABAdmittedItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } E-RABFailedtoSetupListHOReqAck ::= E-RAB-IE-ContainerList { {E-RABFailedtoSetupItemHOReqAckIEs} } E-RABFailedtoSetupItemHOReqAckIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABFailedtoSetupItemHOReqAck CRITICALITY ignore TYPE E-RABFailedToSetupItemHOReqAck PRESENCE mandatory }, ... } E-RABFailedToSetupItemHOReqAck ::= SEQUENCE { e-RAB-ID E-RAB-ID, cause Cause, iE-Extensions ProtocolExtensionContainer { { E-RABFailedToSetupItemHOReqAckExtIEs} } OPTIONAL, ... } E-RABFailedToSetupItemHOReqAckExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- Handover Failure -- -- ************************************************************** HandoverFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container { { HandoverFailureIEs} }, ... } HandoverFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- HANDOVER NOTIFICATION ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Handover Notify -- -- ************************************************************** HandoverNotify ::= SEQUENCE { protocolIEs ProtocolIE-Container { { HandoverNotifyIEs} }, ... } HandoverNotifyIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory}| -- Extension for Release 11 to support BBAI -- { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}| { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, ... } -- ************************************************************** -- -- PATH SWITCH REQUEST ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Path Switch Request -- -- ************************************************************** PathSwitchRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container { { PathSwitchRequestIEs} }, ... } PathSwitchRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-E-RABToBeSwitchedDLList CRITICALITY reject TYPE E-RABToBeSwitchedDLList PRESENCE mandatory}| { ID id-SourceMME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory}| { ID id-UESecurityCapabilities CRITICALITY ignore TYPE UESecurityCapabilities PRESENCE mandatory}| { ID id-CSG-Id CRITICALITY ignore TYPE CSG-Id PRESENCE optional}| { ID id-CellAccessMode CRITICALITY ignore TYPE CellAccessMode PRESENCE optional}| { ID id-SourceMME-GUMMEI CRITICALITY ignore TYPE GUMMEI PRESENCE optional}| { ID id-CSGMembershipStatus CRITICALITY ignore TYPE CSGMembershipStatus PRESENCE optional}| -- Extension for Release 11 to support BBAI -- { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}| { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}| { ID id-RRC-Resume-Cause CRITICALITY ignore TYPE RRC-Establishment-Cause PRESENCE optional }, ... } E-RABToBeSwitchedDLList ::= E-RAB-IE-ContainerList { {E-RABToBeSwitchedDLItemIEs} } E-RABToBeSwitchedDLItemIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABToBeSwitchedDLItem CRITICALITY reject TYPE E-RABToBeSwitchedDLItem PRESENCE mandatory }, ... } E-RABToBeSwitchedDLItem ::= SEQUENCE { e-RAB-ID E-RAB-ID, transportLayerAddress TransportLayerAddress, gTP-TEID GTP-TEID, iE-Extensions ProtocolExtensionContainer { { E-RABToBeSwitchedDLItem-ExtIEs} } OPTIONAL, ... } E-RABToBeSwitchedDLItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- Path Switch Request Acknowledge -- -- ************************************************************** PathSwitchRequestAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container { { PathSwitchRequestAcknowledgeIEs} }, ... } PathSwitchRequestAcknowledgeIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-uEaggregateMaximumBitrate CRITICALITY ignore TYPE UEAggregateMaximumBitrate PRESENCE optional}| { ID id-E-RABToBeSwitchedULList CRITICALITY ignore TYPE E-RABToBeSwitchedULList PRESENCE optional}| { ID id-E-RABToBeReleasedList CRITICALITY ignore TYPE E-RABList PRESENCE optional}| { ID id-SecurityContext CRITICALITY reject TYPE SecurityContext PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-MME-UE-S1AP-ID-2 CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE optional}| { ID id-CSGMembershipStatus CRITICALITY ignore TYPE CSGMembershipStatus PRESENCE optional}| { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| { ID id-UEUserPlaneCIoTSupportIndicator CRITICALITY ignore TYPE UEUserPlaneCIoTSupportIndicator PRESENCE optional}| { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| { ID id-UESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE UESidelinkAggregateMaximumBitrate PRESENCE optional}| { ID id-EnhancedCoverageRestricted CRITICALITY ignore TYPE EnhancedCoverageRestricted PRESENCE optional}, ... } E-RABToBeSwitchedULList ::= E-RAB-IE-ContainerList { {E-RABToBeSwitchedULItemIEs} } E-RABToBeSwitchedULItemIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABToBeSwitchedULItem CRITICALITY ignore TYPE E-RABToBeSwitchedULItem PRESENCE mandatory }, ... } E-RABToBeSwitchedULItem ::= SEQUENCE { e-RAB-ID E-RAB-ID, transportLayerAddress TransportLayerAddress, gTP-TEID GTP-TEID, iE-Extensions ProtocolExtensionContainer { { E-RABToBeSwitchedULItem-ExtIEs} } OPTIONAL, ... } E-RABToBeSwitchedULItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- Path Switch Request Failure -- -- ************************************************************** PathSwitchRequestFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container { { PathSwitchRequestFailureIEs} }, ... } PathSwitchRequestFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- HANDOVER CANCEL ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Handover Cancel -- -- ************************************************************** HandoverCancel ::= SEQUENCE { protocolIEs ProtocolIE-Container { { HandoverCancelIEs} }, ... } HandoverCancelIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, ... } -- ************************************************************** -- -- Handover Cancel Request Acknowledge -- -- ************************************************************** HandoverCancelAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container { { HandoverCancelAcknowledgeIEs} }, ... } HandoverCancelAcknowledgeIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- E-RAB SETUP ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- E-RAB Setup Request -- -- ************************************************************** E-RABSetupRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container { {E-RABSetupRequestIEs} }, ... } E-RABSetupRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE optional }| { ID id-E-RABToBeSetupListBearerSUReq CRITICALITY reject TYPE E-RABToBeSetupListBearerSUReq PRESENCE mandatory }, ... } E-RABToBeSetupListBearerSUReq ::= SEQUENCE (SIZE(1.. maxnoofE-RABs)) OF ProtocolIE-SingleContainer { {E-RABToBeSetupItemBearerSUReqIEs} } E-RABToBeSetupItemBearerSUReqIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABToBeSetupItemBearerSUReq CRITICALITY reject TYPE E-RABToBeSetupItemBearerSUReq PRESENCE mandatory }, ... } E-RABToBeSetupItemBearerSUReq ::= SEQUENCE { e-RAB-ID E-RAB-ID, e-RABlevelQoSParameters E-RABLevelQoSParameters, transportLayerAddress TransportLayerAddress, gTP-TEID GTP-TEID, nAS-PDU NAS-PDU, iE-Extensions ProtocolExtensionContainer { {E-RABToBeSetupItemBearerSUReqExtIEs} } OPTIONAL, ... } E-RABToBeSetupItemBearerSUReqExtIEs S1AP-PROTOCOL-EXTENSION ::= { { ID id-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| { ID id-SIPTO-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| { ID id-BearerType CRITICALITY reject EXTENSION BearerType PRESENCE optional}, ... } -- ************************************************************** -- -- E-RAB Setup Response -- -- ************************************************************** E-RABSetupResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container { {E-RABSetupResponseIEs} }, ... } E-RABSetupResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-E-RABSetupListBearerSURes CRITICALITY ignore TYPE E-RABSetupListBearerSURes PRESENCE optional }| { ID id-E-RABFailedToSetupListBearerSURes CRITICALITY ignore TYPE E-RABList PRESENCE optional }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } E-RABSetupListBearerSURes ::= SEQUENCE (SIZE(1.. maxnoofE-RABs)) OF ProtocolIE-SingleContainer { {E-RABSetupItemBearerSUResIEs} } E-RABSetupItemBearerSUResIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABSetupItemBearerSURes CRITICALITY ignore TYPE E-RABSetupItemBearerSURes PRESENCE mandatory }, ... } E-RABSetupItemBearerSURes ::= SEQUENCE { e-RAB-ID E-RAB-ID, transportLayerAddress TransportLayerAddress, gTP-TEID GTP-TEID, iE-Extensions ProtocolExtensionContainer { {E-RABSetupItemBearerSUResExtIEs} } OPTIONAL, ... } E-RABSetupItemBearerSUResExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- E-RAB MODIFY ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- E-RAB Modify Request -- -- ************************************************************** E-RABModifyRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container { {E-RABModifyRequestIEs} }, ... } E-RABModifyRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE optional }| { ID id-E-RABToBeModifiedListBearerModReq CRITICALITY reject TYPE E-RABToBeModifiedListBearerModReq PRESENCE mandatory }, ... } E-RABToBeModifiedListBearerModReq ::= SEQUENCE (SIZE(1.. maxnoofE-RABs)) OF ProtocolIE-SingleContainer { {E-RABToBeModifiedItemBearerModReqIEs} } E-RABToBeModifiedItemBearerModReqIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABToBeModifiedItemBearerModReq CRITICALITY reject TYPE E-RABToBeModifiedItemBearerModReq PRESENCE mandatory }, ... } E-RABToBeModifiedItemBearerModReq ::= SEQUENCE { e-RAB-ID E-RAB-ID, e-RABLevelQoSParameters E-RABLevelQoSParameters, nAS-PDU NAS-PDU, iE-Extensions ProtocolExtensionContainer { {E-RABToBeModifyItemBearerModReqExtIEs} } OPTIONAL, ... } E-RABToBeModifyItemBearerModReqExtIEs S1AP-PROTOCOL-EXTENSION ::= { { ID id-TransportInformation CRITICALITY reject EXTENSION TransportInformation PRESENCE optional}, ... } -- ************************************************************** -- -- E-RAB Modify Response -- -- ************************************************************** E-RABModifyResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container { {E-RABModifyResponseIEs} }, ... } E-RABModifyResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-E-RABModifyListBearerModRes CRITICALITY ignore TYPE E-RABModifyListBearerModRes PRESENCE optional }| { ID id-E-RABFailedToModifyList CRITICALITY ignore TYPE E-RABList PRESENCE optional }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } E-RABModifyListBearerModRes ::= SEQUENCE (SIZE(1.. maxnoofE-RABs)) OF ProtocolIE-SingleContainer { {E-RABModifyItemBearerModResIEs} } E-RABModifyItemBearerModResIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABModifyItemBearerModRes CRITICALITY ignore TYPE E-RABModifyItemBearerModRes PRESENCE mandatory}, ... } E-RABModifyItemBearerModRes ::= SEQUENCE { e-RAB-ID E-RAB-ID, iE-Extensions ProtocolExtensionContainer { {E-RABModifyItemBearerModResExtIEs} } OPTIONAL, ... } E-RABModifyItemBearerModResExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- E-RAB RELEASE ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- E-RAB Release Command -- -- ************************************************************** E-RABReleaseCommand ::= SEQUENCE { protocolIEs ProtocolIE-Container { {E-RABReleaseCommandIEs} }, ... } E-RABReleaseCommandIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE optional }| { ID id-E-RABToBeReleasedList CRITICALITY ignore TYPE E-RABList PRESENCE mandatory }| { ID id-NAS-PDU CRITICALITY ignore TYPE NAS-PDU PRESENCE optional }, ... } -- ************************************************************** -- -- E-RAB Release Response -- -- ************************************************************** E-RABReleaseResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container { { E-RABReleaseResponseIEs } }, ... } E-RABReleaseResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-E-RABReleaseListBearerRelComp CRITICALITY ignore TYPE E-RABReleaseListBearerRelComp PRESENCE optional }| { ID id-E-RABFailedToReleaseList CRITICALITY ignore TYPE E-RABList PRESENCE optional }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }| -- Extension for Release 12 to support User Location Information -- { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional }, ... } E-RABReleaseListBearerRelComp ::= SEQUENCE (SIZE(1.. maxnoofE-RABs)) OF ProtocolIE-SingleContainer { {E-RABReleaseItemBearerRelCompIEs} } E-RABReleaseItemBearerRelCompIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABReleaseItemBearerRelComp CRITICALITY ignore TYPE E-RABReleaseItemBearerRelComp PRESENCE mandatory }, ... } E-RABReleaseItemBearerRelComp ::= SEQUENCE { e-RAB-ID E-RAB-ID, iE-Extensions ProtocolExtensionContainer { {E-RABReleaseItemBearerRelCompExtIEs} } OPTIONAL, ... } E-RABReleaseItemBearerRelCompExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- E-RAB RELEASE INDICATION ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- E-RAB Release Indication -- -- ************************************************************** E-RABReleaseIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container { {E-RABReleaseIndicationIEs} }, ... } E-RABReleaseIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-E-RABReleasedList CRITICALITY ignore TYPE E-RABList PRESENCE mandatory }| -- Extension for Release 12 to support User Location Information -- { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional }, ... } -- ************************************************************** -- -- INITIAL CONTEXT SETUP ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Initial Context Setup Request -- -- ************************************************************** InitialContextSetupRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container { {InitialContextSetupRequestIEs} }, ... } InitialContextSetupRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-uEaggregateMaximumBitrate CRITICALITY reject TYPE UEAggregateMaximumBitrate PRESENCE mandatory}| { ID id-E-RABToBeSetupListCtxtSUReq CRITICALITY reject TYPE E-RABToBeSetupListCtxtSUReq PRESENCE mandatory}| { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE mandatory}| { ID id-SecurityKey CRITICALITY reject TYPE SecurityKey PRESENCE mandatory}| { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE optional}| { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional}| { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE SubscriberProfileIDforRFP PRESENCE optional}| { ID id-CSFallbackIndicator CRITICALITY reject TYPE CSFallbackIndicator PRESENCE optional}| { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| { ID id-CSGMembershipStatus CRITICALITY ignore TYPE CSGMembershipStatus PRESENCE optional}| { ID id-RegisteredLAI CRITICALITY ignore TYPE LAI PRESENCE optional}| { ID id-GUMMEI-ID CRITICALITY ignore TYPE GUMMEI PRESENCE optional}| { ID id-MME-UE-S1AP-ID-2 CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE optional}| { ID id-ManagementBasedMDTAllowed CRITICALITY ignore TYPE ManagementBasedMDTAllowed PRESENCE optional}| { ID id-ManagementBasedMDTPLMNList CRITICALITY ignore TYPE MDTPLMNList PRESENCE optional}| { ID id-AdditionalCSFallbackIndicator CRITICALITY ignore TYPE AdditionalCSFallbackIndicator PRESENCE conditional}| { ID id-Masked-IMEISV CRITICALITY ignore TYPE Masked-IMEISV PRESENCE optional}| { ID id-ExpectedUEBehaviour CRITICALITY ignore TYPE ExpectedUEBehaviour PRESENCE optional}| { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| { ID id-UEUserPlaneCIoTSupportIndicator CRITICALITY ignore TYPE UEUserPlaneCIoTSupportIndicator PRESENCE optional}| { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| { ID id-UESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE UESidelinkAggregateMaximumBitrate PRESENCE optional}| { ID id-EnhancedCoverageRestricted CRITICALITY ignore TYPE EnhancedCoverageRestricted PRESENCE optional}, ... } E-RABToBeSetupListCtxtSUReq ::= SEQUENCE (SIZE(1.. maxnoofE-RABs)) OF ProtocolIE-SingleContainer { {E-RABToBeSetupItemCtxtSUReqIEs} } E-RABToBeSetupItemCtxtSUReqIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABToBeSetupItemCtxtSUReq CRITICALITY reject TYPE E-RABToBeSetupItemCtxtSUReq PRESENCE mandatory }, ... } E-RABToBeSetupItemCtxtSUReq ::= SEQUENCE { e-RAB-ID E-RAB-ID, e-RABlevelQoSParameters E-RABLevelQoSParameters, transportLayerAddress TransportLayerAddress, gTP-TEID GTP-TEID, nAS-PDU NAS-PDU OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABToBeSetupItemCtxtSUReqExtIEs} } OPTIONAL, ... } E-RABToBeSetupItemCtxtSUReqExtIEs S1AP-PROTOCOL-EXTENSION ::= { { ID id-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| { ID id-SIPTO-Correlation-ID CRITICALITY ignore EXTENSION Correlation-ID PRESENCE optional}| { ID id-BearerType CRITICALITY reject EXTENSION BearerType PRESENCE optional}, ... } -- ************************************************************** -- -- Initial Context Setup Response -- -- ************************************************************** InitialContextSetupResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container { {InitialContextSetupResponseIEs} }, ... } InitialContextSetupResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-E-RABSetupListCtxtSURes CRITICALITY ignore TYPE E-RABSetupListCtxtSURes PRESENCE mandatory }| { ID id-E-RABFailedToSetupListCtxtSURes CRITICALITY ignore TYPE E-RABList PRESENCE optional }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } E-RABSetupListCtxtSURes ::= SEQUENCE (SIZE(1.. maxnoofE-RABs)) OF ProtocolIE-SingleContainer { {E-RABSetupItemCtxtSUResIEs} } E-RABSetupItemCtxtSUResIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABSetupItemCtxtSURes CRITICALITY ignore TYPE E-RABSetupItemCtxtSURes PRESENCE mandatory }, ... } E-RABSetupItemCtxtSURes ::= SEQUENCE { e-RAB-ID E-RAB-ID, transportLayerAddress TransportLayerAddress, gTP-TEID GTP-TEID, iE-Extensions ProtocolExtensionContainer { {E-RABSetupItemCtxtSUResExtIEs} } OPTIONAL, ... } E-RABSetupItemCtxtSUResExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- Initial Context Setup Failure -- -- ************************************************************** InitialContextSetupFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container { {InitialContextSetupFailureIEs} }, ... } InitialContextSetupFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- PAGING ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Paging -- -- ************************************************************** Paging ::= SEQUENCE { protocolIEs ProtocolIE-Container {{PagingIEs}}, ... } PagingIEs S1AP-PROTOCOL-IES ::= { { ID id-UEIdentityIndexValue CRITICALITY ignore TYPE UEIdentityIndexValue PRESENCE mandatory}| { ID id-UEPagingID CRITICALITY ignore TYPE UEPagingID PRESENCE mandatory}| { ID id-pagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE optional}| { ID id-CNDomain CRITICALITY ignore TYPE CNDomain PRESENCE mandatory}| { ID id-TAIList CRITICALITY ignore TYPE TAIList PRESENCE mandatory}| { ID id-CSG-IdList CRITICALITY ignore TYPE CSG-IdList PRESENCE optional}| { ID id-PagingPriority CRITICALITY ignore TYPE PagingPriority PRESENCE optional}| { ID id-UERadioCapabilityForPaging CRITICALITY ignore TYPE UERadioCapabilityForPaging PRESENCE optional}| -- Extension for Release 13 to support Paging Optimisation and Coverage Enhancement paging -- { ID id-AssistanceDataForPaging CRITICALITY ignore TYPE AssistanceDataForPaging PRESENCE optional}| { ID id-Paging-eDRXInformation CRITICALITY ignore TYPE Paging-eDRXInformation PRESENCE optional}| { ID id-extended-UEIdentityIndexValue CRITICALITY ignore TYPE Extended-UEIdentityIndexValue PRESENCE optional}| { ID id-NB-IoT-Paging-eDRXInformation CRITICALITY ignore TYPE NB-IoT-Paging-eDRXInformation PRESENCE optional}| { ID id-NB-IoT-UEIdentityIndexValue CRITICALITY ignore TYPE NB-IoT-UEIdentityIndexValue PRESENCE optional}, ... } TAIList::= SEQUENCE (SIZE(1.. maxnoofTAIs)) OF ProtocolIE-SingleContainer {{TAIItemIEs}} TAIItemIEs S1AP-PROTOCOL-IES ::= { { ID id-TAIItem CRITICALITY ignore TYPE TAIItem PRESENCE mandatory }, ... } TAIItem ::= SEQUENCE { tAI TAI, iE-Extensions ProtocolExtensionContainer { {TAIItemExtIEs} } OPTIONAL, ... } TAIItemExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- UE CONTEXT RELEASE ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- UE Context Release Request -- -- ************************************************************** UEContextReleaseRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{UEContextReleaseRequest-IEs}}, ... } UEContextReleaseRequest-IEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-GWContextReleaseIndication CRITICALITY reject TYPE GWContextReleaseIndication PRESENCE optional }, ... } -- ************************************************************** -- -- UE Context Release Command -- -- ************************************************************** UEContextReleaseCommand ::= SEQUENCE { protocolIEs ProtocolIE-Container {{UEContextReleaseCommand-IEs}}, ... } UEContextReleaseCommand-IEs S1AP-PROTOCOL-IES ::= { { ID id-UE-S1AP-IDs CRITICALITY reject TYPE UE-S1AP-IDs PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, ... } -- ************************************************************** -- -- UE Context Release Complete -- -- ************************************************************** UEContextReleaseComplete ::= SEQUENCE { protocolIEs ProtocolIE-Container {{UEContextReleaseComplete-IEs}}, ... } UEContextReleaseComplete-IEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| -- Extension for Release 12 to support User Location Information -- { ID id-UserLocationInformation CRITICALITY ignore TYPE UserLocationInformation PRESENCE optional}| -- Extension for Release 13 to support Paging Optimisation -- { ID id-InformationOnRecommendedCellsAndENBsForPaging CRITICALITY ignore TYPE InformationOnRecommendedCellsAndENBsForPaging PRESENCE optional}| -- Extension for Release 13 to support coverage enhancement paging -- { ID id-CellIdentifierAndCELevelForCECapableUEs CRITICALITY ignore TYPE CellIdentifierAndCELevelForCECapableUEs PRESENCE optional}, ... } -- ************************************************************** -- -- UE CONTEXT MODIFICATION ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- UE Context Modification Request -- -- ************************************************************** UEContextModificationRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container { { UEContextModificationRequestIEs} }, ... } UEContextModificationRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-SecurityKey CRITICALITY reject TYPE SecurityKey PRESENCE optional}| { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE SubscriberProfileIDforRFP PRESENCE optional}| { ID id-uEaggregateMaximumBitrate CRITICALITY ignore TYPE UEAggregateMaximumBitrate PRESENCE optional}| { ID id-CSFallbackIndicator CRITICALITY reject TYPE CSFallbackIndicator PRESENCE optional}| { ID id-UESecurityCapabilities CRITICALITY reject TYPE UESecurityCapabilities PRESENCE optional}| { ID id-CSGMembershipStatus CRITICALITY ignore TYPE CSGMembershipStatus PRESENCE optional}| { ID id-RegisteredLAI CRITICALITY ignore TYPE LAI PRESENCE optional}| { ID id-AdditionalCSFallbackIndicator CRITICALITY ignore TYPE AdditionalCSFallbackIndicator PRESENCE conditional}| { ID id-ProSeAuthorized CRITICALITY ignore TYPE ProSeAuthorized PRESENCE optional}| { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| { ID id-SRVCCOperationNotPossible CRITICALITY ignore TYPE SRVCCOperationNotPossible PRESENCE optional}| { ID id-V2XServicesAuthorized CRITICALITY ignore TYPE V2XServicesAuthorized PRESENCE optional}| { ID id-UESidelinkAggregateMaximumBitrate CRITICALITY ignore TYPE UESidelinkAggregateMaximumBitrate PRESENCE optional}, ... } -- ************************************************************** -- -- UE Context Modification Response -- -- ************************************************************** UEContextModificationResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container { { UEContextModificationResponseIEs} }, ... } UEContextModificationResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- UE Context Modification Failure -- -- ************************************************************** UEContextModificationFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container { { UEContextModificationFailureIEs} }, ... } UEContextModificationFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- UE RADIO CAPABILITY MATCH ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- UE Radio Capability Match Request -- -- ************************************************************** UERadioCapabilityMatchRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container { { UERadioCapabilityMatchRequestIEs} }, ... } UERadioCapabilityMatchRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional }, ... } -- ************************************************************** -- -- UE Radio Capability Match Response -- -- ************************************************************** UERadioCapabilityMatchResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container { { UERadioCapabilityMatchResponseIEs} }, ... } UERadioCapabilityMatchResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-VoiceSupportMatchIndicator CRITICALITY reject TYPE VoiceSupportMatchIndicator PRESENCE mandatory }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- NAS TRANSPORT ELEMENTARY PROCEDURES -- -- ************************************************************** -- ************************************************************** -- -- DOWNLINK NAS TRANSPORT -- -- ************************************************************** DownlinkNASTransport ::= SEQUENCE { protocolIEs ProtocolIE-Container {{DownlinkNASTransport-IEs}}, ... } DownlinkNASTransport-IEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE mandatory}| { ID id-HandoverRestrictionList CRITICALITY ignore TYPE HandoverRestrictionList PRESENCE optional}| { ID id-SubscriberProfileIDforRFP CRITICALITY ignore TYPE SubscriberProfileIDforRFP PRESENCE optional}| { ID id-SRVCCOperationPossible CRITICALITY ignore TYPE SRVCCOperationPossible PRESENCE optional}| { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional}| { ID id-DLNASPDUDeliveryAckRequest CRITICALITY ignore TYPE DLNASPDUDeliveryAckRequest PRESENCE optional}| { ID id-EnhancedCoverageRestricted CRITICALITY ignore TYPE EnhancedCoverageRestricted PRESENCE optional}, ... } -- ************************************************************** -- -- INITIAL UE MESSAGE -- -- ************************************************************** InitialUEMessage ::= SEQUENCE { protocolIEs ProtocolIE-Container {{InitialUEMessage-IEs}}, ... } InitialUEMessage-IEs S1AP-PROTOCOL-IES ::= { { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE mandatory}| { ID id-TAI CRITICALITY reject TYPE TAI PRESENCE mandatory}| { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| { ID id-RRC-Establishment-Cause CRITICALITY ignore TYPE RRC-Establishment-Cause PRESENCE mandatory}| { ID id-S-TMSI CRITICALITY reject TYPE S-TMSI PRESENCE optional}| { ID id-CSG-Id CRITICALITY reject TYPE CSG-Id PRESENCE optional}| { ID id-GUMMEI-ID CRITICALITY reject TYPE GUMMEI PRESENCE optional}| { ID id-CellAccessMode CRITICALITY reject TYPE CellAccessMode PRESENCE optional}| { ID id-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| { ID id-RelayNode-Indicator CRITICALITY reject TYPE RelayNode-Indicator PRESENCE optional}| { ID id-GUMMEIType CRITICALITY ignore TYPE GUMMEIType PRESENCE optional}| -- Extension for Release 11 to support BBAI -- { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}| { ID id-SIPTO-L-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}| { ID id-MME-Group-ID CRITICALITY ignore TYPE MME-Group-ID PRESENCE optional}| { ID id-UE-Usage-Type CRITICALITY ignore TYPE UE-Usage-Type PRESENCE optional}| { ID id-CE-mode-B-SupportIndicator CRITICALITY ignore TYPE CE-mode-B-SupportIndicator PRESENCE optional}| { ID id-DCN-ID CRITICALITY ignore TYPE DCN-ID PRESENCE optional}| { ID id-Coverage-Level CRITICALITY ignore TYPE Coverage-Level PRESENCE optional}, ... } -- ************************************************************** -- -- UPLINK NAS TRANSPORT -- -- ************************************************************** UplinkNASTransport ::= SEQUENCE { protocolIEs ProtocolIE-Container {{UplinkNASTransport-IEs}}, ... } UplinkNASTransport-IEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-NAS-PDU CRITICALITY reject TYPE NAS-PDU PRESENCE mandatory}| { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory}| { ID id-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| { ID id-SIPTO-L-GW-TransportLayerAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE optional}| { ID id-LHN-ID CRITICALITY ignore TYPE LHN-ID PRESENCE optional}, ... } -- ************************************************************** -- -- NAS NON DELIVERY INDICATION -- -- ************************************************************** NASNonDeliveryIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container {{NASNonDeliveryIndication-IEs}}, ... } NASNonDeliveryIndication-IEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-NAS-PDU CRITICALITY ignore TYPE NAS-PDU PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, ... } -- ************************************************************** -- -- REROUTE NAS REQUEST -- -- ************************************************************** RerouteNASRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container {{RerouteNASRequest-IEs}}, ... } RerouteNASRequest-IEs S1AP-PROTOCOL-IES ::= { { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE optional}| { ID id-S1-Message CRITICALITY reject TYPE OCTET STRING PRESENCE mandatory}| { ID id-MME-Group-ID CRITICALITY reject TYPE MME-Group-ID PRESENCE mandatory}| { ID id-Additional-GUTI CRITICALITY ignore TYPE Additional-GUTI PRESENCE optional}| { ID id-UE-Usage-Type CRITICALITY ignore TYPE UE-Usage-Type PRESENCE optional}, ... } -- ************************************************************** -- -- NAS DELIVERY INDICATION -- -- ************************************************************** NASDeliveryIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container { { NASDeliveryIndicationIEs} }, ... } NASDeliveryIndicationIEs S1AP-PROTOCOL-IES ::= { ... } -- ************************************************************** -- -- RESET ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Reset -- -- ************************************************************** Reset ::= SEQUENCE { protocolIEs ProtocolIE-Container { {ResetIEs} }, ... } ResetIEs S1AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-ResetType CRITICALITY reject TYPE ResetType PRESENCE mandatory }, ... } ResetType ::= CHOICE { s1-Interface ResetAll, partOfS1-Interface UE-associatedLogicalS1-ConnectionListRes, ... } ResetAll ::= ENUMERATED { reset-all, ... } UE-associatedLogicalS1-ConnectionListRes ::= SEQUENCE (SIZE(1.. maxnoofIndividualS1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { UE-associatedLogicalS1-ConnectionItemRes } } UE-associatedLogicalS1-ConnectionItemRes S1AP-PROTOCOL-IES ::= { { ID id-UE-associatedLogicalS1-ConnectionItem CRITICALITY reject TYPE UE-associatedLogicalS1-ConnectionItem PRESENCE mandatory}, ... } -- ************************************************************** -- -- Reset Acknowledge -- -- ************************************************************** ResetAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container { {ResetAcknowledgeIEs} }, ... } ResetAcknowledgeIEs S1AP-PROTOCOL-IES ::= { { ID id-UE-associatedLogicalS1-ConnectionListResAck CRITICALITY ignore TYPE UE-associatedLogicalS1-ConnectionListResAck PRESENCE optional }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } UE-associatedLogicalS1-ConnectionListResAck ::= SEQUENCE (SIZE(1.. maxnoofIndividualS1ConnectionsToReset)) OF ProtocolIE-SingleContainer { { UE-associatedLogicalS1-ConnectionItemResAck } } UE-associatedLogicalS1-ConnectionItemResAck S1AP-PROTOCOL-IES ::= { { ID id-UE-associatedLogicalS1-ConnectionItem CRITICALITY ignore TYPE UE-associatedLogicalS1-ConnectionItem PRESENCE mandatory }, ... } -- ************************************************************** -- -- ERROR INDICATION ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Error Indication -- -- ************************************************************** ErrorIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ErrorIndicationIEs}}, ... } ErrorIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE optional }| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE optional }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE optional }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- S1 SETUP ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- S1 Setup Request -- -- ************************************************************** S1SetupRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container { {S1SetupRequestIEs} }, ... } S1SetupRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-Global-ENB-ID CRITICALITY reject TYPE Global-ENB-ID PRESENCE mandatory}| { ID id-eNBname CRITICALITY ignore TYPE ENBname PRESENCE optional}| { ID id-SupportedTAs CRITICALITY reject TYPE SupportedTAs PRESENCE mandatory}| { ID id-DefaultPagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE mandatory}| { ID id-CSG-IdList CRITICALITY reject TYPE CSG-IdList PRESENCE optional}| { ID id-UE-RetentionInformation CRITICALITY ignore TYPE UE-RetentionInformation PRESENCE optional}| { ID id-NB-IoT-DefaultPagingDRX CRITICALITY ignore TYPE NB-IoT-DefaultPagingDRX PRESENCE optional}, ... } -- ************************************************************** -- -- S1 Setup Response -- -- ************************************************************** S1SetupResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container { {S1SetupResponseIEs} }, ... } S1SetupResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MMEname CRITICALITY ignore TYPE MMEname PRESENCE optional}| { ID id-ServedGUMMEIs CRITICALITY reject TYPE ServedGUMMEIs PRESENCE mandatory}| { ID id-RelativeMMECapacity CRITICALITY ignore TYPE RelativeMMECapacity PRESENCE mandatory}| { ID id-MMERelaySupportIndicator CRITICALITY ignore TYPE MMERelaySupportIndicator PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-UE-RetentionInformation CRITICALITY ignore TYPE UE-RetentionInformation PRESENCE optional}| { ID id-ServedDCNs CRITICALITY ignore TYPE ServedDCNs PRESENCE optional}, ... } -- ************************************************************** -- -- S1 Setup Failure -- -- ************************************************************** S1SetupFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container { {S1SetupFailureIEs} }, ... } S1SetupFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- ENB CONFIGURATION UPDATE ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- eNB Configuration Update -- -- ************************************************************** ENBConfigurationUpdate ::= SEQUENCE { protocolIEs ProtocolIE-Container { {ENBConfigurationUpdateIEs} }, ... } ENBConfigurationUpdateIEs S1AP-PROTOCOL-IES ::= { { ID id-eNBname CRITICALITY ignore TYPE ENBname PRESENCE optional}| { ID id-SupportedTAs CRITICALITY reject TYPE SupportedTAs PRESENCE optional}| { ID id-CSG-IdList CRITICALITY reject TYPE CSG-IdList PRESENCE optional}| { ID id-DefaultPagingDRX CRITICALITY ignore TYPE PagingDRX PRESENCE optional}| { ID id-NB-IoT-DefaultPagingDRX CRITICALITY ignore TYPE NB-IoT-DefaultPagingDRX PRESENCE optional}, ... } -- ************************************************************** -- -- eNB Configuration Update Acknowledge -- -- ************************************************************** ENBConfigurationUpdateAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container { {ENBConfigurationUpdateAcknowledgeIEs} }, ... } ENBConfigurationUpdateAcknowledgeIEs S1AP-PROTOCOL-IES ::= { { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- eNB Configuration Update Failure -- -- ************************************************************** ENBConfigurationUpdateFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container { {ENBConfigurationUpdateFailureIEs} }, ... } ENBConfigurationUpdateFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- MME CONFIGURATION UPDATE ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- MME Configuration Update -- -- ************************************************************** MMEConfigurationUpdate ::= SEQUENCE { protocolIEs ProtocolIE-Container { {MMEConfigurationUpdateIEs} }, ... } MMEConfigurationUpdateIEs S1AP-PROTOCOL-IES ::= { { ID id-MMEname CRITICALITY ignore TYPE MMEname PRESENCE optional }| { ID id-ServedGUMMEIs CRITICALITY reject TYPE ServedGUMMEIs PRESENCE optional }| { ID id-RelativeMMECapacity CRITICALITY reject TYPE RelativeMMECapacity PRESENCE optional }| { ID id-ServedDCNs CRITICALITY ignore TYPE ServedDCNs PRESENCE optional}, ... } -- ************************************************************** -- -- MME Configuration Update Acknowledge -- -- ************************************************************** MMEConfigurationUpdateAcknowledge ::= SEQUENCE { protocolIEs ProtocolIE-Container { {MMEConfigurationUpdateAcknowledgeIEs} }, ... } MMEConfigurationUpdateAcknowledgeIEs S1AP-PROTOCOL-IES ::= { { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- MME Configuration Update Failure -- -- ************************************************************** MMEConfigurationUpdateFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container { {MMEConfigurationUpdateFailureIEs} }, ... } MMEConfigurationUpdateFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }| { ID id-TimeToWait CRITICALITY ignore TYPE TimeToWait PRESENCE optional }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- DOWNLINK S1 CDMA2000 TUNNELLING ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Downlink S1 CDMA2000 Tunnelling -- -- ************************************************************** DownlinkS1cdma2000tunnelling ::= SEQUENCE { protocolIEs ProtocolIE-Container { {DownlinkS1cdma2000tunnellingIEs} }, ... } DownlinkS1cdma2000tunnellingIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-E-RABSubjecttoDataForwardingList CRITICALITY ignore TYPE E-RABSubjecttoDataForwardingList PRESENCE optional }| { ID id-cdma2000HOStatus CRITICALITY ignore TYPE Cdma2000HOStatus PRESENCE optional }| { ID id-cdma2000RATType CRITICALITY reject TYPE Cdma2000RATType PRESENCE mandatory }| { ID id-cdma2000PDU CRITICALITY reject TYPE Cdma2000PDU PRESENCE mandatory }, ... } -- ************************************************************** -- -- UPLINK S1 CDMA2000 TUNNELLING ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Uplink S1 CDMA2000 Tunnelling -- -- ************************************************************** UplinkS1cdma2000tunnelling ::= SEQUENCE { protocolIEs ProtocolIE-Container { {UplinkS1cdma2000tunnellingIEs} }, ... } UplinkS1cdma2000tunnellingIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-cdma2000RATType CRITICALITY reject TYPE Cdma2000RATType PRESENCE mandatory }| { ID id-cdma2000SectorID CRITICALITY reject TYPE Cdma2000SectorID PRESENCE mandatory }| { ID id-cdma2000HORequiredIndication CRITICALITY ignore TYPE Cdma2000HORequiredIndication PRESENCE optional }| { ID id-cdma2000OneXSRVCCInfo CRITICALITY reject TYPE Cdma2000OneXSRVCCInfo PRESENCE optional }| { ID id-cdma2000OneXRAND CRITICALITY reject TYPE Cdma2000OneXRAND PRESENCE optional }| { ID id-cdma2000PDU CRITICALITY reject TYPE Cdma2000PDU PRESENCE mandatory }| { ID id-EUTRANRoundTripDelayEstimationInfo CRITICALITY ignore TYPE EUTRANRoundTripDelayEstimationInfo PRESENCE optional }, -- Extension for Release 9 to assist target HRPD access with the acquisition of the UE -- ... } -- ************************************************************** -- -- UE CAPABILITY INFO INDICATION ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- UE Capability Info Indication -- -- ************************************************************** UECapabilityInfoIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container { { UECapabilityInfoIndicationIEs} }, ... } UECapabilityInfoIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE mandatory}| { ID id-UERadioCapabilityForPaging CRITICALITY ignore TYPE UERadioCapabilityForPaging PRESENCE optional}, ... } -- ************************************************************** -- -- eNB STATUS TRANSFER ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- eNB Status Transfer -- -- ************************************************************** ENBStatusTransfer ::= SEQUENCE { protocolIEs ProtocolIE-Container { {ENBStatusTransferIEs} }, ... } ENBStatusTransferIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-StatusTransfer-TransparentContainer CRITICALITY reject TYPE ENB-StatusTransfer-TransparentContainer PRESENCE mandatory}, ... } -- ************************************************************** -- -- MME STATUS TRANSFER ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- MME Status Transfer -- -- ************************************************************** MMEStatusTransfer ::= SEQUENCE { protocolIEs ProtocolIE-Container { {MMEStatusTransferIEs} }, ... } MMEStatusTransferIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-StatusTransfer-TransparentContainer CRITICALITY reject TYPE ENB-StatusTransfer-TransparentContainer PRESENCE mandatory}, ... } -- ************************************************************** -- -- TRACE ELEMENTARY PROCEDURES -- -- ************************************************************** -- ************************************************************** -- -- Trace Start -- -- ************************************************************** TraceStart ::= SEQUENCE { protocolIEs ProtocolIE-Container { {TraceStartIEs} }, ... } TraceStartIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-TraceActivation CRITICALITY ignore TYPE TraceActivation PRESENCE mandatory }, ... } -- ************************************************************** -- -- Trace Failure Indication -- -- ************************************************************** TraceFailureIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container { {TraceFailureIndicationIEs} }, ... } TraceFailureIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-E-UTRAN-Trace-ID CRITICALITY ignore TYPE E-UTRAN-Trace-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, ... } -- ************************************************************** -- -- DEACTIVATE TRACE ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Deactivate Trace -- -- ************************************************************** DeactivateTrace ::= SEQUENCE { protocolIEs ProtocolIE-Container { { DeactivateTraceIEs} }, ... } DeactivateTraceIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-E-UTRAN-Trace-ID CRITICALITY ignore TYPE E-UTRAN-Trace-ID PRESENCE mandatory }, ... } -- ************************************************************** -- -- CELL TRAFFIC TRACE ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Cell Traffic Trace -- -- ************************************************************** CellTrafficTrace ::= SEQUENCE { protocolIEs ProtocolIE-Container { { CellTrafficTraceIEs } }, ... } CellTrafficTraceIEs S1AP-PROTOCOL-IES ::= { {ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| {ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| {ID id-E-UTRAN-Trace-ID CRITICALITY ignore TYPE E-UTRAN-Trace-ID PRESENCE mandatory }| {ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory }| {ID id-TraceCollectionEntityIPAddress CRITICALITY ignore TYPE TransportLayerAddress PRESENCE mandatory }| {ID id-PrivacyIndicator CRITICALITY ignore TYPE PrivacyIndicator PRESENCE optional }, ... } -- ************************************************************** -- -- LOCATION ELEMENTARY PROCEDURES -- -- ************************************************************** -- ************************************************************** -- -- Location Reporting Control -- -- ************************************************************** LocationReportingControl ::= SEQUENCE { protocolIEs ProtocolIE-Container { { LocationReportingControlIEs} }, ... } LocationReportingControlIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-RequestType CRITICALITY ignore TYPE RequestType PRESENCE mandatory }, ... } -- ************************************************************** -- -- Location Report Failure Indication -- -- ************************************************************** LocationReportingFailureIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container { { LocationReportingFailureIndicationIEs} }, ... } LocationReportingFailureIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory }, ... } -- ************************************************************** -- -- Location Report -- -- ************************************************************** LocationReport ::= SEQUENCE { protocolIEs ProtocolIE-Container { { LocationReportIEs} }, ... } LocationReportIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory }| { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory }| { ID id-RequestType CRITICALITY ignore TYPE RequestType PRESENCE mandatory }, ... } -- ************************************************************** -- -- OVERLOAD ELEMENTARY PROCEDURES -- -- ************************************************************** -- ************************************************************** -- -- Overload Start -- -- ************************************************************** OverloadStart ::= SEQUENCE { protocolIEs ProtocolIE-Container { {OverloadStartIEs} }, ... } OverloadStartIEs S1AP-PROTOCOL-IES ::= { { ID id-OverloadResponse CRITICALITY reject TYPE OverloadResponse PRESENCE mandatory }| { ID id-GUMMEIList CRITICALITY ignore TYPE GUMMEIList PRESENCE optional }| { ID id-TrafficLoadReductionIndication CRITICALITY ignore TYPE TrafficLoadReductionIndication PRESENCE optional }, ... } -- ************************************************************** -- -- Overload Stop -- -- ************************************************************** OverloadStop ::= SEQUENCE { protocolIEs ProtocolIE-Container { {OverloadStopIEs} }, ... } OverloadStopIEs S1AP-PROTOCOL-IES ::= { { ID id-GUMMEIList CRITICALITY ignore TYPE GUMMEIList PRESENCE optional }, ... } -- ************************************************************** -- -- WRITE-REPLACE WARNING ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Write-Replace Warning Request -- -- ************************************************************** WriteReplaceWarningRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container { {WriteReplaceWarningRequestIEs} }, ... } WriteReplaceWarningRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| { ID id-WarningAreaList CRITICALITY ignore TYPE WarningAreaList PRESENCE optional }| { ID id-RepetitionPeriod CRITICALITY reject TYPE RepetitionPeriod PRESENCE mandatory }| { ID id-ExtendedRepetitionPeriod CRITICALITY reject TYPE ExtendedRepetitionPeriod PRESENCE optional }| { ID id-NumberofBroadcastRequest CRITICALITY reject TYPE NumberofBroadcastRequest PRESENCE mandatory }| { ID id-WarningType CRITICALITY ignore TYPE WarningType PRESENCE optional }| { ID id-WarningSecurityInfo CRITICALITY ignore TYPE WarningSecurityInfo PRESENCE optional }| { ID id-DataCodingScheme CRITICALITY ignore TYPE DataCodingScheme PRESENCE optional }| { ID id-WarningMessageContents CRITICALITY ignore TYPE WarningMessageContents PRESENCE optional }| { ID id-ConcurrentWarningMessageIndicator CRITICALITY reject TYPE ConcurrentWarningMessageIndicator PRESENCE optional }, ... } -- ************************************************************** -- -- Write-Replace Warning Response -- -- ************************************************************** WriteReplaceWarningResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container { {WriteReplaceWarningResponseIEs} }, ... } WriteReplaceWarningResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| { ID id-BroadcastCompletedAreaList CRITICALITY ignore TYPE BroadcastCompletedAreaList PRESENCE optional }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- eNB DIRECT INFORMATION TRANSFER ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- eNB Direct Information Transfer -- -- ************************************************************** ENBDirectInformationTransfer ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ ENBDirectInformationTransferIEs}}, ... } ENBDirectInformationTransferIEs S1AP-PROTOCOL-IES ::= { { ID id-Inter-SystemInformationTransferTypeEDT CRITICALITY reject TYPE Inter-SystemInformationTransferType PRESENCE mandatory }, ... } Inter-SystemInformationTransferType ::= CHOICE { rIMTransfer RIMTransfer, ... } -- ************************************************************** -- -- MME DIRECT INFORMATION TRANSFER ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- MME Direct Information Transfer -- -- ************************************************************** MMEDirectInformationTransfer ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ MMEDirectInformationTransferIEs}}, ... } MMEDirectInformationTransferIEs S1AP-PROTOCOL-IES ::= { { ID id-Inter-SystemInformationTransferTypeMDT CRITICALITY reject TYPE Inter-SystemInformationTransferType PRESENCE mandatory }, ... } -- ************************************************************** -- -- eNB CONFIGURATION TRANSFER ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- eNB Configuration Transfer -- -- ************************************************************** ENBConfigurationTransfer ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ ENBConfigurationTransferIEs}}, ... } ENBConfigurationTransferIEs S1AP-PROTOCOL-IES ::= { { ID id-SONConfigurationTransferECT CRITICALITY ignore TYPE SONConfigurationTransfer PRESENCE optional }, ... } -- ************************************************************** -- -- MME CONFIGURATION TRANSFER ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- MME Configuration Transfer -- -- ************************************************************** MMEConfigurationTransfer ::= SEQUENCE { protocolIEs ProtocolIE-Container {{ MMEConfigurationTransferIEs}}, ... } MMEConfigurationTransferIEs S1AP-PROTOCOL-IES ::= { { ID id-SONConfigurationTransferMCT CRITICALITY ignore TYPE SONConfigurationTransfer PRESENCE optional }, ... } -- ************************************************************** -- -- PRIVATE MESSAGE ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Private Message -- -- ************************************************************** PrivateMessage ::= SEQUENCE { privateIEs PrivateIE-Container {{PrivateMessageIEs}}, ... } PrivateMessageIEs S1AP-PRIVATE-IES ::= { ... } -- ************************************************************** -- -- KILL PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- Kill Request -- -- ************************************************************** KillRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container { {KillRequestIEs} }, ... } KillRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory}| { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory}| { ID id-WarningAreaList CRITICALITY ignore TYPE WarningAreaList PRESENCE optional}| { ID id-KillAllWarningMessages CRITICALITY reject TYPE KillAllWarningMessages PRESENCE optional}, ... } -- ************************************************************** -- -- Kill Response -- -- ************************************************************** KillResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container { {KillResponseIEs} }, ... } KillResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MessageIdentifier CRITICALITY reject TYPE MessageIdentifier PRESENCE mandatory }| { ID id-SerialNumber CRITICALITY reject TYPE SerialNumber PRESENCE mandatory }| { ID id-BroadcastCancelledAreaList CRITICALITY ignore TYPE BroadcastCancelledAreaList PRESENCE optional }| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional }, ... } -- ************************************************************** -- -- PWS RESTART INDICATION PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- PWS Restart Indication -- -- ************************************************************** PWSRestartIndication::= SEQUENCE { protocolIEs ProtocolIE-Container {{ PWSRestartIndicationIEs}}, ... } PWSRestartIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-ECGIListForRestart CRITICALITY reject TYPE ECGIListForRestart PRESENCE mandatory}| { ID id-Global-ENB-ID CRITICALITY reject TYPE Global-ENB-ID PRESENCE mandatory}| { ID id-TAIListForRestart CRITICALITY reject TYPE TAIListForRestart PRESENCE mandatory}| { ID id-EmergencyAreaIDListForRestart CRITICALITY reject TYPE EmergencyAreaIDListForRestart PRESENCE optional}, ... } -- ************************************************************** -- -- PWS Failure Indication -- -- ************************************************************** PWSFailureIndication::= SEQUENCE { protocolIEs ProtocolIE-Container {{ PWSFailureIndicationIEs}}, ... } PWSFailureIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-PWSfailedECGIList CRITICALITY reject TYPE PWSfailedECGIList PRESENCE mandatory}| { ID id-Global-ENB-ID CRITICALITY reject TYPE Global-ENB-ID PRESENCE mandatory}, ... } -- ************************************************************** -- -- LPPA TRANSPORT ELEMENTARY PROCEDURES -- -- ************************************************************** -- ************************************************************** -- -- DOWNLINK UE ASSOCIATED LPPA TRANSPORT -- -- ************************************************************** DownlinkUEAssociatedLPPaTransport ::= SEQUENCE { protocolIEs ProtocolIE-Container {{DownlinkUEAssociatedLPPaTransport-IEs}}, ... } DownlinkUEAssociatedLPPaTransport-IEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Routing-ID CRITICALITY reject TYPE Routing-ID PRESENCE mandatory }| { ID id-LPPa-PDU CRITICALITY reject TYPE LPPa-PDU PRESENCE mandatory }, ... } -- ************************************************************** -- -- UPLINK UE ASSOCIATED LPPA TRANSPORT -- -- ************************************************************** UplinkUEAssociatedLPPaTransport ::= SEQUENCE { protocolIEs ProtocolIE-Container {{UplinkUEAssociatedLPPaTransport-IEs}}, ... } UplinkUEAssociatedLPPaTransport-IEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory }| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory }| { ID id-Routing-ID CRITICALITY reject TYPE Routing-ID PRESENCE mandatory }| { ID id-LPPa-PDU CRITICALITY reject TYPE LPPa-PDU PRESENCE mandatory }, ... } -- ************************************************************** -- -- DOWNLINK NON UE ASSOCIATED LPPA TRANSPORT -- -- ************************************************************** DownlinkNonUEAssociatedLPPaTransport ::= SEQUENCE { protocolIEs ProtocolIE-Container {{DownlinkNonUEAssociatedLPPaTransport-IEs}}, ... } DownlinkNonUEAssociatedLPPaTransport-IEs S1AP-PROTOCOL-IES ::= { { ID id-Routing-ID CRITICALITY reject TYPE Routing-ID PRESENCE mandatory }| { ID id-LPPa-PDU CRITICALITY reject TYPE LPPa-PDU PRESENCE mandatory }, ... } -- ************************************************************** -- -- UPLINK NON UE ASSOCIATED LPPA TRANSPORT -- -- ************************************************************** UplinkNonUEAssociatedLPPaTransport ::= SEQUENCE { protocolIEs ProtocolIE-Container {{UplinkNonUEAssociatedLPPaTransport-IEs}}, ... } UplinkNonUEAssociatedLPPaTransport-IEs S1AP-PROTOCOL-IES ::= { { ID id-Routing-ID CRITICALITY reject TYPE Routing-ID PRESENCE mandatory }| { ID id-LPPa-PDU CRITICALITY reject TYPE LPPa-PDU PRESENCE mandatory }, ... } -- ************************************************************** -- -- E-RAB MODIFICATION INDICATION ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- E-RAB Modification Indication -- -- ************************************************************** E-RABModificationIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container { { E-RABModificationIndicationIEs} }, ... } E-RABModificationIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-E-RABToBeModifiedListBearerModInd CRITICALITY reject TYPE E-RABToBeModifiedListBearerModInd PRESENCE mandatory}| { ID id-E-RABNotToBeModifiedListBearerModInd CRITICALITY reject TYPE E-RABNotToBeModifiedListBearerModInd PRESENCE optional}| { ID id-CSGMembershipInfo CRITICALITY reject TYPE CSGMembershipInfo PRESENCE optional}| -- Extension for Release 11 to support BBAI -- { ID id-Tunnel-Information-for-BBF CRITICALITY ignore TYPE TunnelInformation PRESENCE optional}, ... } E-RABToBeModifiedListBearerModInd ::= E-RAB-IE-ContainerList { {E-RABToBeModifiedItemBearerModIndIEs} } E-RABToBeModifiedItemBearerModIndIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABToBeModifiedItemBearerModInd CRITICALITY reject TYPE E-RABToBeModifiedItemBearerModInd PRESENCE mandatory}, ... } E-RABToBeModifiedItemBearerModInd ::= SEQUENCE { e-RAB-ID E-RAB-ID, transportLayerAddress TransportLayerAddress, dL-GTP-TEID GTP-TEID, iE-Extensions ProtocolExtensionContainer { { E-RABToBeModifiedItemBearerModInd-ExtIEs} } OPTIONAL, ... } E-RABToBeModifiedItemBearerModInd-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } E-RABNotToBeModifiedListBearerModInd ::= E-RAB-IE-ContainerList { {E-RABNotToBeModifiedItemBearerModIndIEs} } E-RABNotToBeModifiedItemBearerModIndIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABNotToBeModifiedItemBearerModInd CRITICALITY reject TYPE E-RABNotToBeModifiedItemBearerModInd PRESENCE mandatory}, ... } E-RABNotToBeModifiedItemBearerModInd ::= SEQUENCE { e-RAB-ID E-RAB-ID, transportLayerAddress TransportLayerAddress, dL-GTP-TEID GTP-TEID, iE-Extensions ProtocolExtensionContainer { { E-RABNotToBeModifiedItemBearerModInd-ExtIEs} } OPTIONAL, ... } E-RABNotToBeModifiedItemBearerModInd-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } CSGMembershipInfo ::= SEQUENCE { cSGMembershipStatus CSGMembershipStatus, cSG-Id CSG-Id, cellAccessMode CellAccessMode OPTIONAL, pLMNidentity PLMNidentity OPTIONAL, iE-Extensions ProtocolExtensionContainer { { CSGMembershipInfo-ExtIEs} } OPTIONAL, ... } CSGMembershipInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- E-RAB Modification Confirm -- -- ************************************************************** E-RABModificationConfirm ::= SEQUENCE { protocolIEs ProtocolIE-Container { {E-RABModificationConfirmIEs} }, ... } E-RABModificationConfirmIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-E-RABModifyListBearerModConf CRITICALITY ignore TYPE E-RABModifyListBearerModConf PRESENCE optional}| { ID id-E-RABFailedToModifyListBearerModConf CRITICALITY ignore TYPE E-RABList PRESENCE optional}| { ID id-E-RABToBeReleasedListBearerModConf CRITICALITY ignore TYPE E-RABList PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-CSGMembershipStatus CRITICALITY ignore TYPE CSGMembershipStatus PRESENCE optional}, ... } E-RABModifyListBearerModConf ::= SEQUENCE (SIZE(1.. maxnoofE-RABs)) OF ProtocolIE-SingleContainer { {E-RABModifyItemBearerModConfIEs} } E-RABModifyItemBearerModConfIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABModifyItemBearerModConf CRITICALITY ignore TYPE E-RABModifyItemBearerModConf PRESENCE mandatory}, ... } E-RABModifyItemBearerModConf ::= SEQUENCE { e-RAB-ID E-RAB-ID, iE-Extensions ProtocolExtensionContainer { {E-RABModifyItemBearerModConfExtIEs} } OPTIONAL, ... } E-RABModifyItemBearerModConfExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- UE CONTEXT MODIFICATION INDICATION ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- UE Context Modification Indication -- -- ************************************************************** UEContextModificationIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container { { UEContextModificationIndicationIEs} }, ... } UEContextModificationIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-CSGMembershipInfo CRITICALITY reject TYPE CSGMembershipInfo PRESENCE optional}, ... } -- ************************************************************** -- -- UE Context Modification Confirm -- -- ************************************************************** UEContextModificationConfirm ::= SEQUENCE { protocolIEs ProtocolIE-Container { {UEContextModificationConfirmIEs} }, ... } UEContextModificationConfirmIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-CSGMembershipStatus CRITICALITY ignore TYPE CSGMembershipStatus PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, ... } -- ************************************************************** -- -- UE CONTEXT SUSPEND ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- UE Context Suspend Request -- -- ************************************************************** UEContextSuspendRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container { { UEContextSuspendRequestIEs} }, ... } UEContextSuspendRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-InformationOnRecommendedCellsAndENBsForPaging CRITICALITY ignore TYPE InformationOnRecommendedCellsAndENBsForPaging PRESENCE optional}| { ID id-CellIdentifierAndCELevelForCECapableUEs CRITICALITY ignore TYPE CellIdentifierAndCELevelForCECapableUEs PRESENCE optional}, ... } -- ************************************************************** -- -- UE Context Suspend Response -- -- ************************************************************** UEContextSuspendResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container { {UEContextSuspendResponseIEs} }, ... } UEContextSuspendResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-SecurityContext CRITICALITY reject TYPE SecurityContext PRESENCE optional}, ... } -- ************************************************************** -- -- UE CONTEXT RESUME ELEMENTARY PROCEDURE -- -- ************************************************************** -- ************************************************************** -- -- UE Context Resume Request -- -- ************************************************************** UEContextResumeRequest ::= SEQUENCE { protocolIEs ProtocolIE-Container { { UEContextResumeRequestIEs} }, ... } UEContextResumeRequestIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-E-RABFailedToResumeListResumeReq CRITICALITY reject TYPE E-RABFailedToResumeListResumeReq PRESENCE optional}| { ID id-RRC-Resume-Cause CRITICALITY ignore TYPE RRC-Establishment-Cause PRESENCE optional}, ... } E-RABFailedToResumeListResumeReq ::= E-RAB-IE-ContainerList { {E-RABFailedToResumeItemResumeReqIEs} } E-RABFailedToResumeItemResumeReqIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABFailedToResumeItemResumeReq CRITICALITY reject TYPE E-RABFailedToResumeItemResumeReq PRESENCE mandatory}, ... } E-RABFailedToResumeItemResumeReq ::= SEQUENCE { e-RAB-ID E-RAB-ID, cause Cause, iE-Extensions ProtocolExtensionContainer { { E-RABFailedToResumeItemResumeReq-ExtIEs} } OPTIONAL, ... } E-RABFailedToResumeItemResumeReq-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- UE Context Resume Response -- -- ************************************************************** UEContextResumeResponse ::= SEQUENCE { protocolIEs ProtocolIE-Container { { UEContextResumeResponseIEs} }, ... } UEContextResumeResponseIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-E-RABFailedToResumeListResumeRes CRITICALITY reject TYPE E-RABFailedToResumeListResumeRes PRESENCE optional}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}| { ID id-SecurityContext CRITICALITY reject TYPE SecurityContext PRESENCE optional}, ... } E-RABFailedToResumeListResumeRes ::= E-RAB-IE-ContainerList { {E-RABFailedToResumeItemResumeResIEs} } E-RABFailedToResumeItemResumeResIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABFailedToResumeItemResumeRes CRITICALITY reject TYPE E-RABFailedToResumeItemResumeRes PRESENCE mandatory}, ... } E-RABFailedToResumeItemResumeRes ::= SEQUENCE { e-RAB-ID E-RAB-ID, cause Cause, iE-Extensions ProtocolExtensionContainer { { E-RABFailedToResumeItemResumeRes-ExtIEs} } OPTIONAL, ... } E-RABFailedToResumeItemResumeRes-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- ************************************************************** -- -- UE Context Resume Failure -- -- ************************************************************** UEContextResumeFailure ::= SEQUENCE { protocolIEs ProtocolIE-Container { { UEContextResumeFailureIEs} }, ... } UEContextResumeFailureIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-Cause CRITICALITY ignore TYPE Cause PRESENCE mandatory}| { ID id-CriticalityDiagnostics CRITICALITY ignore TYPE CriticalityDiagnostics PRESENCE optional}, ... } -- ************************************************************** -- -- Connection Establishment Indication -- -- ************************************************************** ConnectionEstablishmentIndication::= SEQUENCE { protocolIEs ProtocolIE-Container { {ConnectionEstablishmentIndicationIEs} }, ... } ConnectionEstablishmentIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY ignore TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY ignore TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional }| { ID id-EnhancedCoverageRestricted CRITICALITY ignore TYPE EnhancedCoverageRestricted PRESENCE optional }| { ID id-DL-CP-SecurityInformation CRITICALITY ignore TYPE DL-CP-SecurityInformation PRESENCE optional }, ... } -- ************************************************************** -- -- Retrieve UE Information -- -- ************************************************************** RetrieveUEInformation ::= SEQUENCE { protocolIEs ProtocolIE-Container { { RetrieveUEInformationIEs} }, ... } RetrieveUEInformationIEs S1AP-PROTOCOL-IES ::= { { ID id-S-TMSI CRITICALITY reject TYPE S-TMSI PRESENCE mandatory}, ... } -- ************************************************************** -- UE Information Transfer -- -- ************************************************************** UEInformationTransfer ::= SEQUENCE { protocolIEs ProtocolIE-Container { { UEInformationTransferIEs} }, ... } UEInformationTransferIEs S1AP-PROTOCOL-IES ::= { { ID id-S-TMSI CRITICALITY reject TYPE S-TMSI PRESENCE mandatory}| { ID id-UE-Level-QoS-Parameters CRITICALITY ignore TYPE E-RABLevelQoSParameters PRESENCE optional}| { ID id-UERadioCapability CRITICALITY ignore TYPE UERadioCapability PRESENCE optional}, ... } -- ************************************************************** -- -- eNB CP Relocation Indication -- -- ************************************************************** ENBCPRelocationIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container { { ENBCPRelocationIndicationIEs} }, ... } ENBCPRelocationIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}| { ID id-S-TMSI CRITICALITY reject TYPE S-TMSI PRESENCE mandatory}| { ID id-EUTRAN-CGI CRITICALITY ignore TYPE EUTRAN-CGI PRESENCE mandatory}| { ID id-TAI CRITICALITY ignore TYPE TAI PRESENCE mandatory}| { ID id-UL-CP-SecurityInformation CRITICALITY reject TYPE UL-CP-SecurityInformation PRESENCE mandatory}, ... } -- ************************************************************** -- -- MME CP Relocation Indication -- -- ************************************************************** MMECPRelocationIndication ::= SEQUENCE { protocolIEs ProtocolIE-Container { { MMECPRelocationIndicationIEs} }, ... } MMECPRelocationIndicationIEs S1AP-PROTOCOL-IES ::= { { ID id-MME-UE-S1AP-ID CRITICALITY reject TYPE MME-UE-S1AP-ID PRESENCE mandatory}| { ID id-eNB-UE-S1AP-ID CRITICALITY reject TYPE ENB-UE-S1AP-ID PRESENCE mandatory}, ... } END -- ************************************************************** -- -- Information Element Definitions -- -- ************************************************************** S1AP-IEs { itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-IEs (2) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS id-E-RABInformationListItem, id-E-RABItem, id-Bearers-SubjectToStatusTransfer-Item, id-Time-Synchronisation-Info, id-x2TNLConfigurationInfo, id-eNBX2ExtendedTransportLayerAddresses, id-MDTConfiguration, id-Time-UE-StayedInCell-EnhancedGranularity, id-HO-Cause, id-M3Configuration, id-M4Configuration, id-M5Configuration, id-MDT-Location-Info, id-SignallingBasedMDTPLMNList, id-MobilityInformation, id-ULCOUNTValueExtended, id-DLCOUNTValueExtended, id-ReceiveStatusOfULPDCPSDUsExtended, id-eNBIndirectX2TransportLayerAddresses, id-Muting-Availability-Indication, id-Muting-Pattern-Information, id-Synchronisation-Information, id-uE-HistoryInformationFromTheUE, id-LoggedMBSFNMDT, id-SON-Information-Report, id-RecommendedCellItem, id-RecommendedENBItem, id-ProSeUEtoNetworkRelaying, id-ULCOUNTValuePDCP-SNlength18, id-DLCOUNTValuePDCP-SNlength18, id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18, id-M6Configuration, id-M7Configuration, id-RAT-Type, maxnoofCSGs, maxnoofE-RABs, maxnoofErrors, maxnoofBPLMNs, maxnoofPLMNsPerMME, maxnoofTACs, maxnoofEPLMNs, maxnoofEPLMNsPlusOne, maxnoofForbLACs, maxnoofForbTACs, maxnoofCells, maxnoofCellID, maxnoofDCNs, maxnoofEmergencyAreaID, maxnoofTAIforWarning, maxnoofCellinTAI, maxnoofCellinEAI, maxnoofeNBX2TLAs, maxnoofeNBX2ExtTLAs, maxnoofeNBX2GTPTLAs, maxnoofRATs, maxnoofGroupIDs, maxnoofMMECs, maxnoofTAforMDT, maxnoofCellIDforMDT, maxnoofMDTPLMNs, maxnoofCellsforRestart, maxnoofRestartTAIs, maxnoofRestartEmergencyAreaIDs, maxnoofMBSFNAreaMDT, maxEARFCN, maxnoofCellsineNB, maxnoofRecommendedCells, maxnoofRecommendedENBs FROM S1AP-Constants Criticality, ProcedureCode, ProtocolIE-ID, TriggeringMessage FROM S1AP-CommonDataTypes ProtocolExtensionContainer{}, S1AP-PROTOCOL-EXTENSION, ProtocolIE-SingleContainer{}, S1AP-PROTOCOL-IES FROM S1AP-Containers; -- A Additional-GUTI::= SEQUENCE { gUMMEI GUMMEI, m-TMSI M-TMSI, iE-Extensions ProtocolExtensionContainer { {Additional-GUTI-ExtIEs} } OPTIONAL, ... } Additional-GUTI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } AreaScopeOfMDT ::= CHOICE { cellBased CellBasedMDT, tABased TABasedMDT, pLMNWide NULL, ..., tAIBased TAIBasedMDT } AllocationAndRetentionPriority ::= SEQUENCE { priorityLevel PriorityLevel, pre-emptionCapability Pre-emptionCapability, pre-emptionVulnerability Pre-emptionVulnerability, iE-Extensions ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL, ... } AllocationAndRetentionPriority-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } AssistanceDataForCECapableUEs ::= SEQUENCE { cellIdentifierAndCELevelForCECapableUEs CellIdentifierAndCELevelForCECapableUEs, iE-Extensions ProtocolExtensionContainer { { InformationForCECapableUEs-ExtIEs} } OPTIONAL, ... } InformationForCECapableUEs-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } AssistanceDataForPaging ::= SEQUENCE { assistanceDataForRecommendedCells AssistanceDataForRecommendedCells OPTIONAL, assistanceDataForCECapableUEs AssistanceDataForCECapableUEs OPTIONAL, pagingAttemptInformation PagingAttemptInformation OPTIONAL, iE-Extensions ProtocolExtensionContainer { { AssistanceDataForPaging-ExtIEs} } OPTIONAL, ... } AssistanceDataForPaging-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } AssistanceDataForRecommendedCells ::= SEQUENCE { recommendedCellsForPaging RecommendedCellsForPaging, iE-Extensions ProtocolExtensionContainer { { AssistanceDataForRecommendedCells-ExtIEs} } OPTIONAL, ... } AssistanceDataForRecommendedCells-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- B Bearers-SubjectToStatusTransferList ::= SEQUENCE (SIZE(1.. maxnoofE-RABs)) OF ProtocolIE-SingleContainer { { Bearers-SubjectToStatusTransfer-ItemIEs } } Bearers-SubjectToStatusTransfer-ItemIEs S1AP-PROTOCOL-IES ::= { { ID id-Bearers-SubjectToStatusTransfer-Item CRITICALITY ignore TYPE Bearers-SubjectToStatusTransfer-Item PRESENCE mandatory }, ... } Bearers-SubjectToStatusTransfer-Item ::= SEQUENCE { e-RAB-ID E-RAB-ID, uL-COUNTvalue COUNTvalue, dL-COUNTvalue COUNTvalue, receiveStatusofULPDCPSDUs ReceiveStatusofULPDCPSDUs OPTIONAL, iE-Extensions ProtocolExtensionContainer { {Bearers-SubjectToStatusTransfer-ItemExtIEs} } OPTIONAL, ... } Bearers-SubjectToStatusTransfer-ItemExtIEs S1AP-PROTOCOL-EXTENSION ::= { { ID id-ULCOUNTValueExtended CRITICALITY ignore EXTENSION COUNTValueExtended PRESENCE optional}| { ID id-DLCOUNTValueExtended CRITICALITY ignore EXTENSION COUNTValueExtended PRESENCE optional}| { ID id-ReceiveStatusOfULPDCPSDUsExtended CRITICALITY ignore EXTENSION ReceiveStatusOfULPDCPSDUsExtended PRESENCE optional}| { ID id-ULCOUNTValuePDCP-SNlength18 CRITICALITY ignore EXTENSION COUNTvaluePDCP-SNlength18 PRESENCE optional}| { ID id-DLCOUNTValuePDCP-SNlength18 CRITICALITY ignore EXTENSION COUNTvaluePDCP-SNlength18 PRESENCE optional}| { ID id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 CRITICALITY ignore EXTENSION ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 PRESENCE optional}, ... } BearerType ::= ENUMERATED { non-IP, ... } BitRate ::= INTEGER (0..10000000000) BPLMNs ::= SEQUENCE (SIZE(1.. maxnoofBPLMNs)) OF PLMNidentity BroadcastCancelledAreaList ::= CHOICE { cellID-Cancelled CellID-Cancelled, tAI-Cancelled TAI-Cancelled, emergencyAreaID-Cancelled EmergencyAreaID-Cancelled, ... } BroadcastCompletedAreaList ::= CHOICE { cellID-Broadcast CellID-Broadcast, tAI-Broadcast TAI-Broadcast, emergencyAreaID-Broadcast EmergencyAreaID-Broadcast, ... } -- C CancelledCellinEAI ::= SEQUENCE (SIZE(1..maxnoofCellinEAI)) OF CancelledCellinEAI-Item CancelledCellinEAI-Item ::= SEQUENCE { eCGI EUTRAN-CGI, numberOfBroadcasts NumberOfBroadcasts, iE-Extensions ProtocolExtensionContainer { {CancelledCellinEAI-Item-ExtIEs} } OPTIONAL, ... } CancelledCellinEAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } CancelledCellinTAI ::= SEQUENCE (SIZE(1..maxnoofCellinTAI)) OF CancelledCellinTAI-Item CancelledCellinTAI-Item ::= SEQUENCE{ eCGI EUTRAN-CGI, numberOfBroadcasts NumberOfBroadcasts, iE-Extensions ProtocolExtensionContainer { {CancelledCellinTAI-Item-ExtIEs} } OPTIONAL, ... } CancelledCellinTAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } Cause ::= CHOICE { radioNetwork CauseRadioNetwork, transport CauseTransport, nas CauseNas, protocol CauseProtocol, misc CauseMisc, ... } CauseMisc ::= ENUMERATED { control-processing-overload, not-enough-user-plane-processing-resources, hardware-failure, om-intervention, unspecified, unknown-PLMN, ... } CauseProtocol ::= ENUMERATED { transfer-syntax-error, abstract-syntax-error-reject, abstract-syntax-error-ignore-and-notify, message-not-compatible-with-receiver-state, semantic-error, abstract-syntax-error-falsely-constructed-message, unspecified, ... } CauseRadioNetwork ::= ENUMERATED { unspecified, tx2relocoverall-expiry, successful-handover, release-due-to-eutran-generated-reason, handover-cancelled, partial-handover, ho-failure-in-target-EPC-eNB-or-target-system, ho-target-not-allowed, tS1relocoverall-expiry, tS1relocprep-expiry, cell-not-available, unknown-targetID, no-radio-resources-available-in-target-cell, unknown-mme-ue-s1ap-id, unknown-enb-ue-s1ap-id, unknown-pair-ue-s1ap-id, handover-desirable-for-radio-reason, time-critical-handover, resource-optimisation-handover, reduce-load-in-serving-cell, user-inactivity, radio-connection-with-ue-lost, load-balancing-tau-required, cs-fallback-triggered, ue-not-available-for-ps-service, radio-resources-not-available, failure-in-radio-interface-procedure, invalid-qos-combination, interrat-redirection, interaction-with-other-procedure, unknown-E-RAB-ID, multiple-E-RAB-ID-instances, encryption-and-or-integrity-protection-algorithms-not-supported, s1-intra-system-handover-triggered, s1-inter-system-handover-triggered, x2-handover-triggered, ..., redirection-towards-1xRTT, not-supported-QCI-value, invalid-CSG-Id, release-due-to-pre-emption } CauseTransport ::= ENUMERATED { transport-resource-unavailable, unspecified, ... } CauseNas ::= ENUMERATED { normal-release, authentication-failure, detach, unspecified, ..., csg-subscription-expiry } CellAccessMode ::= ENUMERATED { hybrid, ... } CellIdentifierAndCELevelForCECapableUEs ::= SEQUENCE { global-Cell-ID EUTRAN-CGI, cELevel CELevel, iE-Extensions ProtocolExtensionContainer { { CellIdentifierAndCELevelForCECapableUEs-ExtIEs} } OPTIONAL, ... } CellIdentifierAndCELevelForCECapableUEs-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- Coverage Enhancement level encoded according to TS 36.331 [16] -- CELevel ::= OCTET STRING CE-mode-B-SupportIndicator ::= ENUMERATED { supported, ... } CellIdentity ::= BIT STRING (SIZE (28)) CellID-Broadcast ::= SEQUENCE (SIZE(1..maxnoofCellID)) OF CellID-Broadcast-Item CellID-Broadcast-Item ::= SEQUENCE { eCGI EUTRAN-CGI, iE-Extensions ProtocolExtensionContainer { {CellID-Broadcast-Item-ExtIEs} } OPTIONAL, ... } CellID-Broadcast-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } CellID-Cancelled::= SEQUENCE (SIZE(1..maxnoofCellID)) OF CellID-Cancelled-Item CellID-Cancelled-Item ::= SEQUENCE { eCGI EUTRAN-CGI, numberOfBroadcasts NumberOfBroadcasts, iE-Extensions ProtocolExtensionContainer { {CellID-Cancelled-Item-ExtIEs} } OPTIONAL, ... } CellID-Cancelled-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } CellBasedMDT::= SEQUENCE { cellIdListforMDT CellIdListforMDT, iE-Extensions ProtocolExtensionContainer { {CellBasedMDT-ExtIEs} } OPTIONAL, ... } CellBasedMDT-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } CellIdListforMDT ::= SEQUENCE (SIZE(1..maxnoofCellIDforMDT)) OF EUTRAN-CGI Cdma2000PDU ::= OCTET STRING Cdma2000RATType ::= ENUMERATED { hRPD, onexRTT, ... } Cdma2000SectorID ::= OCTET STRING Cdma2000HOStatus ::= ENUMERATED { hOSuccess, hOFailure, ... } Cdma2000HORequiredIndication ::= ENUMERATED { true, ... } Cdma2000OneXSRVCCInfo ::= SEQUENCE { cdma2000OneXMEID Cdma2000OneXMEID, cdma2000OneXMSI Cdma2000OneXMSI, cdma2000OneXPilot Cdma2000OneXPilot, iE-Extensions ProtocolExtensionContainer { {Cdma2000OneXSRVCCInfo-ExtIEs} } OPTIONAL, ... } Cdma2000OneXSRVCCInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } Cdma2000OneXMEID ::= OCTET STRING Cdma2000OneXMSI ::= OCTET STRING Cdma2000OneXPilot ::= OCTET STRING Cdma2000OneXRAND ::= OCTET STRING Cell-Size ::= ENUMERATED {verysmall, small, medium, large, ...} CellType ::= SEQUENCE { cell-Size Cell-Size, iE-Extensions ProtocolExtensionContainer { { CellType-ExtIEs}} OPTIONAL, ... } CellType-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } CGI ::= SEQUENCE { pLMNidentity PLMNidentity, lAC LAC, cI CI, rAC RAC OPTIONAL, iE-Extensions ProtocolExtensionContainer { {CGI-ExtIEs} } OPTIONAL, ... } CGI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } CI ::= OCTET STRING (SIZE (2)) CNDomain ::= ENUMERATED { ps, cs } ConcurrentWarningMessageIndicator ::= ENUMERATED { true } Correlation-ID ::= OCTET STRING (SIZE (4)) CSFallbackIndicator ::= ENUMERATED { cs-fallback-required, ..., cs-fallback-high-priority } AdditionalCSFallbackIndicator ::= ENUMERATED { no-restriction, restriction, ... } CSG-Id ::= BIT STRING (SIZE (27)) CSG-IdList ::= SEQUENCE (SIZE (1.. maxnoofCSGs)) OF CSG-IdList-Item CSG-IdList-Item ::= SEQUENCE { cSG-Id CSG-Id, iE-Extensions ProtocolExtensionContainer { {CSG-IdList-Item-ExtIEs} } OPTIONAL, ... } CSG-IdList-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } CSGMembershipStatus ::= ENUMERATED { member, not-member } COUNTvalue ::= SEQUENCE { pDCP-SN PDCP-SN, hFN HFN, iE-Extensions ProtocolExtensionContainer { {COUNTvalue-ExtIEs} } OPTIONAL, ... } COUNTvalue-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } COUNTValueExtended ::= SEQUENCE { pDCP-SNExtended PDCP-SNExtended, hFNModified HFNModified, iE-Extensions ProtocolExtensionContainer { {COUNTValueExtended-ExtIEs} } OPTIONAL, ... } COUNTValueExtended-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } COUNTvaluePDCP-SNlength18 ::= SEQUENCE { pDCP-SNlength18 PDCP-SNlength18, hFNforPDCP-SNlength18 HFNforPDCP-SNlength18, iE-Extensions ProtocolExtensionContainer { {COUNTvaluePDCP-SNlength18-ExtIEs} } OPTIONAL, ... } COUNTvaluePDCP-SNlength18-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } Coverage-Level ::= ENUMERATED { extendedcoverage, ... } CriticalityDiagnostics ::= SEQUENCE { procedureCode ProcedureCode OPTIONAL, triggeringMessage TriggeringMessage OPTIONAL, procedureCriticality Criticality OPTIONAL, iEsCriticalityDiagnostics CriticalityDiagnostics-IE-List OPTIONAL, iE-Extensions ProtocolExtensionContainer {{CriticalityDiagnostics-ExtIEs}} OPTIONAL, ... } CriticalityDiagnostics-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1.. maxnoofErrors)) OF CriticalityDiagnostics-IE-Item CriticalityDiagnostics-IE-Item ::= SEQUENCE { iECriticality Criticality, iE-ID ProtocolIE-ID, typeOfError TypeOfError, iE-Extensions ProtocolExtensionContainer {{CriticalityDiagnostics-IE-Item-ExtIEs}} OPTIONAL, ... } CriticalityDiagnostics-IE-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- D DataCodingScheme ::= BIT STRING (SIZE (8)) DCN-ID ::= INTEGER (0..65535) ServedDCNs ::= SEQUENCE (SIZE(0..maxnoofDCNs)) OF ServedDCNsItem ServedDCNsItem ::= SEQUENCE { dCN-ID DCN-ID, relativeDCNCapacity RelativeMMECapacity, iE-Extensions ProtocolExtensionContainer { {ServedDCNsItem-ExtIEs} } OPTIONAL, ... } ServedDCNsItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } DL-CP-SecurityInformation ::= SEQUENCE { dl-NAS-MAC DL-NAS-MAC, iE-Extensions ProtocolExtensionContainer { { DL-CP-SecurityInformation-ExtIEs} } OPTIONAL, ... } DL-CP-SecurityInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } DL-Forwarding ::= ENUMERATED { dL-Forwarding-proposed, ... } DL-NAS-MAC ::= BIT STRING (SIZE (16)) Direct-Forwarding-Path-Availability ::= ENUMERATED { directPathAvailable, ... } Data-Forwarding-Not-Possible ::= ENUMERATED { data-Forwarding-not-Possible, ... } DLNASPDUDeliveryAckRequest ::= ENUMERATED { requested, ... } -- E EARFCN ::= INTEGER(0..maxEARFCN, ...) ECGIList ::= SEQUENCE (SIZE(1..maxnoofCellID)) OF EUTRAN-CGI PWSfailedECGIList ::= SEQUENCE (SIZE(1..maxnoofCellsineNB)) OF EUTRAN-CGI EmergencyAreaIDList ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaID EmergencyAreaID ::= OCTET STRING (SIZE (3)) EmergencyAreaID-Broadcast ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaID-Broadcast-Item EmergencyAreaID-Broadcast-Item ::= SEQUENCE { emergencyAreaID EmergencyAreaID, completedCellinEAI CompletedCellinEAI, iE-Extensions ProtocolExtensionContainer { {EmergencyAreaID-Broadcast-Item-ExtIEs} } OPTIONAL, ... } EmergencyAreaID-Broadcast-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } EmergencyAreaID-Cancelled ::= SEQUENCE (SIZE(1..maxnoofEmergencyAreaID)) OF EmergencyAreaID-Cancelled-Item EmergencyAreaID-Cancelled-Item ::= SEQUENCE { emergencyAreaID EmergencyAreaID, cancelledCellinEAI CancelledCellinEAI, iE-Extensions ProtocolExtensionContainer { {EmergencyAreaID-Cancelled-Item-ExtIEs} } OPTIONAL, ... } EmergencyAreaID-Cancelled-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } CompletedCellinEAI ::= SEQUENCE (SIZE(1..maxnoofCellinEAI)) OF CompletedCellinEAI-Item CompletedCellinEAI-Item ::= SEQUENCE { eCGI EUTRAN-CGI, iE-Extensions ProtocolExtensionContainer { {CompletedCellinEAI-Item-ExtIEs} } OPTIONAL, ... } CompletedCellinEAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } ECGI-List ::= SEQUENCE (SIZE(1..maxnoofCellsineNB)) OF EUTRAN-CGI EmergencyAreaIDListForRestart ::= SEQUENCE (SIZE(1..maxnoofRestartEmergencyAreaIDs)) OF EmergencyAreaID ENB-ID ::= CHOICE { macroENB-ID BIT STRING (SIZE(20)), homeENB-ID BIT STRING (SIZE(28)), ... , short-macroENB-ID BIT STRING (SIZE(18)), long-macroENB-ID BIT STRING (SIZE(21)) } GERAN-Cell-ID ::= SEQUENCE { lAI LAI, rAC RAC, cI CI, iE-Extensions ProtocolExtensionContainer { { GERAN-Cell-ID-ExtIEs} } OPTIONAL, ... } GERAN-Cell-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } Global-ENB-ID ::= SEQUENCE { pLMNidentity PLMNidentity, eNB-ID ENB-ID, iE-Extensions ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL, ... } GlobalENB-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } GUMMEIList::= SEQUENCE (SIZE (1.. maxnoofMMECs)) OF GUMMEI ENB-StatusTransfer-TransparentContainer ::= SEQUENCE { bearers-SubjectToStatusTransferList Bearers-SubjectToStatusTransferList, iE-Extensions ProtocolExtensionContainer { {ENB-StatusTransfer-TransparentContainer-ExtIEs} } OPTIONAL, ... } ENB-StatusTransfer-TransparentContainer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } ENB-UE-S1AP-ID ::= INTEGER (0..16777215) ENBname ::= PrintableString (SIZE (1..150,...)) ENBX2TLAs ::= SEQUENCE (SIZE(1.. maxnoofeNBX2TLAs)) OF TransportLayerAddress EncryptionAlgorithms ::= BIT STRING (SIZE (16,...)) EnhancedCoverageRestricted ::= ENUMERATED { restricted, ... } EPLMNs ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF PLMNidentity EventType ::= ENUMERATED { direct, change-of-serve-cell, stop-change-of-serve-cell, ... } E-RAB-ID ::= INTEGER (0..15, ...) E-RABInformationList ::= SEQUENCE (SIZE (1.. maxnoofE-RABs)) OF ProtocolIE-SingleContainer { { E-RABInformationListIEs } } E-RABInformationListIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABInformationListItem CRITICALITY ignore TYPE E-RABInformationListItem PRESENCE mandatory }, ... } E-RABInformationListItem ::= SEQUENCE { e-RAB-ID E-RAB-ID, dL-Forwarding DL-Forwarding OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABInformationListItem-ExtIEs} } OPTIONAL, ... } E-RABInformationListItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } E-RABList ::= SEQUENCE (SIZE(1.. maxnoofE-RABs)) OF ProtocolIE-SingleContainer { {E-RABItemIEs} } E-RABItemIEs S1AP-PROTOCOL-IES ::= { { ID id-E-RABItem CRITICALITY ignore TYPE E-RABItem PRESENCE mandatory }, ... } E-RABItem ::= SEQUENCE { e-RAB-ID E-RAB-ID, cause Cause, iE-Extensions ProtocolExtensionContainer { {E-RABItem-ExtIEs} } OPTIONAL, ... } E-RABItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } E-RABLevelQoSParameters ::= SEQUENCE { qCI QCI, allocationRetentionPriority AllocationAndRetentionPriority, gbrQosInformation GBR-QosInformation OPTIONAL, iE-Extensions ProtocolExtensionContainer { {E-RABQoSParameters-ExtIEs} } OPTIONAL, ... } E-RABQoSParameters-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } EUTRAN-CGI ::= SEQUENCE { pLMNidentity PLMNidentity, cell-ID CellIdentity, iE-Extensions ProtocolExtensionContainer { {EUTRAN-CGI-ExtIEs} } OPTIONAL, ... } EUTRAN-CGI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } EUTRANRoundTripDelayEstimationInfo ::= INTEGER (0..2047) ExpectedUEBehaviour ::= SEQUENCE { expectedActivity ExpectedUEActivityBehaviour OPTIONAL, expectedHOInterval ExpectedHOInterval OPTIONAL, iE-Extensions ProtocolExtensionContainer { { ExpectedUEBehaviour-ExtIEs} } OPTIONAL, ... } ExpectedUEBehaviour-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } ExpectedUEActivityBehaviour ::= SEQUENCE { expectedActivityPeriod ExpectedActivityPeriod OPTIONAL, expectedIdlePeriod ExpectedIdlePeriod OPTIONAL, sourceofUEActivityBehaviourInformation SourceOfUEActivityBehaviourInformation OPTIONAL, iE-Extensions ProtocolExtensionContainer { { ExpectedUEActivityBehaviour-ExtIEs} } OPTIONAL, ... } ExpectedUEActivityBehaviour-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } ExpectedActivityPeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...) ExpectedIdlePeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...) SourceOfUEActivityBehaviourInformation ::= ENUMERATED { subscription-information, statistics, ... } ExpectedHOInterval ::= ENUMERATED { sec15, sec30, sec60, sec90, sec120, sec180, long-time, ... } ExtendedRNC-ID ::= INTEGER (4096..65535) ExtendedRepetitionPeriod ::= INTEGER (4096..131071) Extended-UEIdentityIndexValue ::= BIT STRING (SIZE (14)) -- F ForbiddenInterRATs ::= ENUMERATED { all, geran, utran, cdma2000, ..., geranandutran, cdma2000andutran } ForbiddenTAs ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF ForbiddenTAs-Item ForbiddenTAs-Item ::= SEQUENCE { pLMN-Identity PLMNidentity, forbiddenTACs ForbiddenTACs, iE-Extensions ProtocolExtensionContainer { {ForbiddenTAs-Item-ExtIEs} } OPTIONAL, ... } ForbiddenTAs-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } ForbiddenTACs ::= SEQUENCE (SIZE(1..maxnoofForbTACs)) OF TAC ForbiddenLAs ::= SEQUENCE (SIZE(1..maxnoofEPLMNsPlusOne)) OF ForbiddenLAs-Item ForbiddenLAs-Item ::= SEQUENCE { pLMN-Identity PLMNidentity, forbiddenLACs ForbiddenLACs, iE-Extensions ProtocolExtensionContainer { {ForbiddenLAs-Item-ExtIEs} } OPTIONAL, ... } ForbiddenLAs-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } ForbiddenLACs ::= SEQUENCE (SIZE(1..maxnoofForbLACs)) OF LAC -- G GBR-QosInformation ::= SEQUENCE { e-RAB-MaximumBitrateDL BitRate, e-RAB-MaximumBitrateUL BitRate, e-RAB-GuaranteedBitrateDL BitRate, e-RAB-GuaranteedBitrateUL BitRate, iE-Extensions ProtocolExtensionContainer { { GBR-QosInformation-ExtIEs} } OPTIONAL, ... } GBR-QosInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } GTP-TEID ::= OCTET STRING (SIZE (4)) GUMMEI ::= SEQUENCE { pLMN-Identity PLMNidentity, mME-Group-ID MME-Group-ID, mME-Code MME-Code, iE-Extensions ProtocolExtensionContainer { {GUMMEI-ExtIEs} } OPTIONAL, ... } GUMMEI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } GUMMEIType ::= ENUMERATED { native, mapped, ... } GWContextReleaseIndication ::= ENUMERATED { true, ... } -- H HandoverRestrictionList ::= SEQUENCE { servingPLMN PLMNidentity, equivalentPLMNs EPLMNs OPTIONAL, forbiddenTAs ForbiddenTAs OPTIONAL, forbiddenLAs ForbiddenLAs OPTIONAL, forbiddenInterRATs ForbiddenInterRATs OPTIONAL, iE-Extensions ProtocolExtensionContainer { {HandoverRestrictionList-ExtIEs} } OPTIONAL, ... } HandoverRestrictionList-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } HandoverType ::= ENUMERATED { intralte, ltetoutran, ltetogeran, utrantolte, gerantolte, ... } HFN ::= INTEGER (0..1048575) HFNModified ::= INTEGER (0..131071) HFNforPDCP-SNlength18 ::= INTEGER (0..16383) -- I Masked-IMEISV ::= BIT STRING (SIZE (64)) ImmediateMDT ::= SEQUENCE { measurementsToActivate MeasurementsToActivate, m1reportingTrigger M1ReportingTrigger, m1thresholdeventA2 M1ThresholdEventA2 OPTIONAL, -- Included in case of event-triggered, or event-triggered periodic reporting for measurement M1 m1periodicReporting M1PeriodicReporting OPTIONAL, -- Included in case of periodic or event-triggered periodic reporting iE-Extensions ProtocolExtensionContainer { { ImmediateMDT-ExtIEs} } OPTIONAL, ... } ImmediateMDT-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { { ID id-M3Configuration CRITICALITY ignore EXTENSION M3Configuration PRESENCE conditional}| { ID id-M4Configuration CRITICALITY ignore EXTENSION M4Configuration PRESENCE conditional}| { ID id-M5Configuration CRITICALITY ignore EXTENSION M5Configuration PRESENCE conditional}| { ID id-MDT-Location-Info CRITICALITY ignore EXTENSION MDT-Location-Info PRESENCE optional}| { ID id-M6Configuration CRITICALITY ignore EXTENSION M6Configuration PRESENCE conditional}| { ID id-M7Configuration CRITICALITY ignore EXTENSION M7Configuration PRESENCE conditional}, ... } IMSI ::= OCTET STRING (SIZE (3..8)) InformationOnRecommendedCellsAndENBsForPaging ::= SEQUENCE { recommendedCellsForPaging RecommendedCellsForPaging, recommendENBsForPaging RecommendedENBsForPaging, iE-Extensions ProtocolExtensionContainer { { InformationOnRecommendedCellsAndENBsForPaging-ExtIEs} } OPTIONAL, ... } InformationOnRecommendedCellsAndENBsForPaging-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } IntegrityProtectionAlgorithms ::= BIT STRING (SIZE (16,...)) IntendedNumberOfPagingAttempts ::= INTEGER (1..16, ...) InterfacesToTrace ::= BIT STRING (SIZE (8)) -- J -- K KillAllWarningMessages ::= ENUMERATED {true} -- L LAC ::= OCTET STRING (SIZE (2)) LAI ::= SEQUENCE { pLMNidentity PLMNidentity, lAC LAC, iE-Extensions ProtocolExtensionContainer { {LAI-ExtIEs} } OPTIONAL, ... } LAI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } LastVisitedCell-Item ::= CHOICE { e-UTRAN-Cell LastVisitedEUTRANCellInformation, uTRAN-Cell LastVisitedUTRANCellInformation, gERAN-Cell LastVisitedGERANCellInformation, ... } LastVisitedEUTRANCellInformation ::= SEQUENCE { global-Cell-ID EUTRAN-CGI, cellType CellType, time-UE-StayedInCell Time-UE-StayedInCell, iE-Extensions ProtocolExtensionContainer { { LastVisitedEUTRANCellInformation-ExtIEs} } OPTIONAL, ... } LastVisitedEUTRANCellInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { -- Extension for Rel-11 to support enhanced granularity for time UE stayed in cell -- { ID id-Time-UE-StayedInCell-EnhancedGranularity CRITICALITY ignore EXTENSION Time-UE-StayedInCell-EnhancedGranularity PRESENCE optional}| { ID id-HO-Cause CRITICALITY ignore EXTENSION Cause PRESENCE optional}, ... } LastVisitedUTRANCellInformation ::= OCTET STRING LastVisitedGERANCellInformation ::= CHOICE { undefined NULL, ... } L3-Information ::= OCTET STRING -- This is a dummy IE used only as a reference to the actual definition in relevant specification. LPPa-PDU ::= OCTET STRING LHN-ID ::= OCTET STRING(SIZE (32..256)) Links-to-log ::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...} ListeningSubframePattern ::= SEQUENCE { pattern-period ENUMERATED {ms1280, ms2560, ms5120, ms10240, ...}, pattern-offset INTEGER (0..10239, ...), iE-Extensions ProtocolExtensionContainer { { ListeningSubframePattern-ExtIEs} } OPTIONAL, ... } ListeningSubframePattern-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } LoggedMDT ::= SEQUENCE { loggingInterval LoggingInterval, loggingDuration LoggingDuration, iE-Extensions ProtocolExtensionContainer { {LoggedMDT-ExtIEs} } OPTIONAL, ... } LoggedMDT-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } LoggingInterval ::= ENUMERATED {ms128, ms256, ms512, ms1024, ms2048, ms3072, ms4096, ms6144} LoggingDuration ::= ENUMERATED {m10, m20, m40, m60, m90, m120} LoggedMBSFNMDT ::= SEQUENCE { loggingInterval LoggingInterval, loggingDuration LoggingDuration, mBSFN-ResultToLog MBSFN-ResultToLog OPTIONAL, iE-Extensions ProtocolExtensionContainer { { LoggedMBSFNMDT-ExtIEs } } OPTIONAL, ... } LoggedMBSFNMDT-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- M M3Configuration ::= SEQUENCE { m3period M3period, iE-Extensions ProtocolExtensionContainer { { M3Configuration-ExtIEs} } OPTIONAL, ... } M3Configuration-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } M3period ::= ENUMERATED {ms100, ms1000, ms10000, ... } M4Configuration ::= SEQUENCE { m4period M4period, m4-links-to-log Links-to-log, iE-Extensions ProtocolExtensionContainer { { M4Configuration-ExtIEs} } OPTIONAL, ... } M4Configuration-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } M4period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } M5Configuration ::= SEQUENCE { m5period M5period, m5-links-to-log Links-to-log, iE-Extensions ProtocolExtensionContainer { { M5Configuration-ExtIEs} } OPTIONAL, ... } M5Configuration-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } M5period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... } M6Configuration ::= SEQUENCE { m6report-Interval M6report-Interval, m6delay-threshold M6delay-threshold OPTIONAL, -- This IE shall be present if the M6 Links to log IE is set to uplink or to both-uplink-and-downlink -- m6-links-to-log Links-to-log, iE-Extensions ProtocolExtensionContainer { { M6Configuration-ExtIEs} } OPTIONAL, ... } M6Configuration-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } M6report-Interval ::= ENUMERATED { ms1024, ms2048, ms5120, ms10240, ... } M6delay-threshold ::= ENUMERATED { ms30, ms40, ms50, ms60, ms70, ms80, ms90, ms100, ms150, ms300, ms500, ms750, ... } M7Configuration ::= SEQUENCE { m7period M7period, m7-links-to-log Links-to-log, iE-Extensions ProtocolExtensionContainer { { M7Configuration-ExtIEs} } OPTIONAL, ... } M7Configuration-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } M7period ::= INTEGER(1..60, ...) MDT-Activation ::= ENUMERATED { immediate-MDT-only, immediate-MDT-and-Trace, logged-MDT-only, ..., logged-MBSFN-MDT } MDT-Location-Info ::= BIT STRING (SIZE (8)) MDT-Configuration ::= SEQUENCE { mdt-Activation MDT-Activation, areaScopeOfMDT AreaScopeOfMDT, mDTMode MDTMode, iE-Extensions ProtocolExtensionContainer { { MDT-Configuration-ExtIEs} } OPTIONAL, ... } MDT-Configuration-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { { ID id-SignallingBasedMDTPLMNList CRITICALITY ignore EXTENSION MDTPLMNList PRESENCE optional }, ... } ManagementBasedMDTAllowed ::= ENUMERATED {allowed, ...} MBSFN-ResultToLog ::= SEQUENCE (SIZE(1..maxnoofMBSFNAreaMDT)) OF MBSFN-ResultToLogInfo MBSFN-ResultToLogInfo ::= SEQUENCE { mBSFN-AreaId INTEGER (0..255) OPTIONAL, carrierFreq EARFCN, iE-Extensions ProtocolExtensionContainer { { MBSFN-ResultToLogInfo-ExtIEs} } OPTIONAL, ... } MBSFN-ResultToLogInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } MDTPLMNList ::= SEQUENCE (SIZE(1..maxnoofMDTPLMNs)) OF PLMNidentity PrivacyIndicator ::= ENUMERATED { immediate-MDT, logged-MDT, ... } MDTMode ::= CHOICE { immediateMDT ImmediateMDT, loggedMDT LoggedMDT, ..., mDTMode-Extension MDTMode-Extension } MDTMode-Extension ::= ProtocolIE-SingleContainer {{ MDTMode-ExtensionIE }} MDTMode-ExtensionIE S1AP-PROTOCOL-IES ::= { { ID id-LoggedMBSFNMDT CRITICALITY ignore TYPE LoggedMBSFNMDT PRESENCE mandatory} } MeasurementsToActivate ::= BIT STRING (SIZE (8)) MeasurementThresholdA2 ::= CHOICE { threshold-RSRP Threshold-RSRP, threshold-RSRQ Threshold-RSRQ, ... } MessageIdentifier ::= BIT STRING (SIZE (16)) MobilityInformation ::= BIT STRING (SIZE(32)) MMEname ::= PrintableString (SIZE (1..150,...)) MMEPagingTarget ::= CHOICE { global-ENB-ID Global-ENB-ID, tAI TAI, ... } MMERelaySupportIndicator ::= ENUMERATED {true, ...} MME-Group-ID ::= OCTET STRING (SIZE (2)) MME-Code ::= OCTET STRING (SIZE (1)) MME-UE-S1AP-ID ::= INTEGER (0..4294967295) M-TMSI ::= OCTET STRING (SIZE (4)) MSClassmark2 ::= OCTET STRING MSClassmark3 ::= OCTET STRING MutingAvailabilityIndication ::= ENUMERATED { available, unavailable, ... } MutingPatternInformation ::= SEQUENCE { muting-pattern-period ENUMERATED {ms0, ms1280, ms2560, ms5120, ms10240, ...}, muting-pattern-offset INTEGER (0..10239, ...) OPTIONAL, iE-Extensions ProtocolExtensionContainer { {MutingPatternInformation-ExtIEs} } OPTIONAL, ... } MutingPatternInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- N NAS-PDU ::= OCTET STRING NASSecurityParametersfromE-UTRAN ::= OCTET STRING NASSecurityParameterstoE-UTRAN ::= OCTET STRING NB-IoT-DefaultPagingDRX ::= ENUMERATED { v128, v256, v512, v1024, ... } NB-IoT-Paging-eDRXInformation ::= SEQUENCE { nB-IoT-paging-eDRX-Cycle NB-IoT-Paging-eDRX-Cycle, nB-IoT-pagingTimeWindow NB-IoT-PagingTimeWindow OPTIONAL, iE-Extensions ProtocolExtensionContainer { { NB-IoT-Paging-eDRXInformation-ExtIEs} } OPTIONAL, ... } NB-IoT-Paging-eDRXInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } NB-IoT-Paging-eDRX-Cycle ::= ENUMERATED{hf2, hf4, hf6, hf8, hf10, hf12, hf14, hf16, hf32, hf64, hf128, hf256, hf512, hf1024, ...} NB-IoT-PagingTimeWindow ::= ENUMERATED{s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, ...} NB-IoT-UEIdentityIndexValue ::= BIT STRING (SIZE (12)) NextPagingAreaScope ::= ENUMERATED { same, changed, ... } NumberofBroadcastRequest ::= INTEGER (0..65535) NumberOfBroadcasts ::= INTEGER (0..65535) -- O OldBSS-ToNewBSS-Information ::= OCTET STRING -- This is a dummy IE used only as a reference to the actual definition in relevant specification. OverloadAction ::= ENUMERATED { reject-non-emergency-mo-dt, reject-rrc-cr-signalling, permit-emergency-sessions-and-mobile-terminated-services-only, ..., permit-high-priority-sessions-and-mobile-terminated-services-only, reject-delay-tolerant-access, permit-high-priority-sessions-and-exception-reporting-and-mobile-terminated-services-only, not-accept-mo-data-or-delay-tolerant-access-from-CP-CIoT } OverloadResponse ::= CHOICE { overloadAction OverloadAction, ... } -- P PagingAttemptInformation ::= SEQUENCE { pagingAttemptCount PagingAttemptCount, intendedNumberOfPagingAttempts IntendedNumberOfPagingAttempts, nextPagingAreaScope NextPagingAreaScope OPTIONAL, iE-Extensions ProtocolExtensionContainer { { PagingAttemptInformation-ExtIEs} } OPTIONAL, ... } PagingAttemptInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } PagingAttemptCount ::= INTEGER (1..16, ...) Paging-eDRXInformation ::= SEQUENCE { paging-eDRX-Cycle Paging-eDRX-Cycle, pagingTimeWindow PagingTimeWindow OPTIONAL, iE-Extensions ProtocolExtensionContainer { { Paging-eDRXInformation-ExtIEs} } OPTIONAL, ... } Paging-eDRXInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } Paging-eDRX-Cycle ::= ENUMERATED{hfhalf, hf1, hf2, hf4, hf6, hf8, hf10, hf12, hf14, hf16, hf32, hf64, hf128, hf256, ...} PagingTimeWindow ::= ENUMERATED{s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, ...} PagingDRX ::= ENUMERATED { v32, v64, v128, v256, ... } PagingPriority ::= ENUMERATED { priolevel1, priolevel2, priolevel3, priolevel4, priolevel5, priolevel6, priolevel7, priolevel8, ... } PDCP-SN ::= INTEGER (0..4095) PDCP-SNExtended ::= INTEGER (0..32767) PDCP-SNlength18 ::= INTEGER (0..262143) M1PeriodicReporting ::= SEQUENCE { reportInterval ReportIntervalMDT, reportAmount ReportAmountMDT, iE-Extensions ProtocolExtensionContainer { { M1PeriodicReporting-ExtIEs} } OPTIONAL, ... } M1PeriodicReporting-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } PLMNidentity ::= TBCD-STRING Port-Number ::= OCTET STRING (SIZE (2)) Pre-emptionCapability ::= ENUMERATED { shall-not-trigger-pre-emption, may-trigger-pre-emption } Pre-emptionVulnerability ::= ENUMERATED { not-pre-emptable, pre-emptable } PriorityLevel ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15) ProSeAuthorized ::= SEQUENCE { proSeDirectDiscovery ProSeDirectDiscovery OPTIONAL, proSeDirectCommunication ProSeDirectCommunication OPTIONAL, iE-Extensions ProtocolExtensionContainer { {ProSeAuthorized-ExtIEs} } OPTIONAL, ... } ProSeAuthorized-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { { ID id-ProSeUEtoNetworkRelaying CRITICALITY ignore EXTENSION ProSeUEtoNetworkRelaying PRESENCE optional}, ... } ProSeDirectDiscovery ::= ENUMERATED { authorized, not-authorized, ... } ProSeUEtoNetworkRelaying ::= ENUMERATED { authorized, not-authorized, ... } ProSeDirectCommunication ::= ENUMERATED { authorized, not-authorized, ... } PS-ServiceNotAvailable ::= ENUMERATED { ps-service-not-available, ... } -- Q QCI ::= INTEGER (0..255) -- R ReceiveStatusofULPDCPSDUs ::= BIT STRING (SIZE(4096)) ReceiveStatusOfULPDCPSDUsExtended ::= BIT STRING (SIZE(1..16384)) ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 ::= BIT STRING (SIZE(1..131072)) RecommendedCellsForPaging ::= SEQUENCE { recommendedCellList RecommendedCellList, iE-Extensions ProtocolExtensionContainer { { RecommendedCellsForPaging-ExtIEs} } OPTIONAL, ... } RecommendedCellsForPaging-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } RecommendedCellList ::= SEQUENCE (SIZE(1.. maxnoofRecommendedCells)) OF ProtocolIE-SingleContainer { { RecommendedCellItemIEs } } RecommendedCellItemIEs S1AP-PROTOCOL-IES ::= { { ID id-RecommendedCellItem CRITICALITY ignore TYPE RecommendedCellItem PRESENCE mandatory }, ... } RecommendedCellItem::= SEQUENCE { eUTRAN-CGI EUTRAN-CGI, timeStayedInCell INTEGER (0..4095) OPTIONAL, iE-Extensions ProtocolExtensionContainer { { RecommendedCellsForPagingItem-ExtIEs} } OPTIONAL, ... } RecommendedCellsForPagingItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } RecommendedENBsForPaging ::= SEQUENCE { recommendedENBList RecommendedENBList, iE-Extensions ProtocolExtensionContainer { { RecommendedENBsForPaging-ExtIEs} } OPTIONAL, ... } RecommendedENBsForPaging-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } RecommendedENBList::= SEQUENCE (SIZE(1.. maxnoofRecommendedENBs)) OF ProtocolIE-SingleContainer { { RecommendedENBItemIEs } } RecommendedENBItemIEs S1AP-PROTOCOL-IES ::= { { ID id-RecommendedENBItem CRITICALITY ignore TYPE RecommendedENBItem PRESENCE mandatory }, ... } RecommendedENBItem ::= SEQUENCE { mMEPagingTarget MMEPagingTarget, iE-Extensions ProtocolExtensionContainer { { RecommendedENBItem-ExtIEs} } OPTIONAL, ... } RecommendedENBItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } RelativeMMECapacity ::= INTEGER (0..255) RelayNode-Indicator ::= ENUMERATED { true, ... } RAC ::= OCTET STRING (SIZE (1)) RAT-Type ::= ENUMERATED { nbiot, ... } ReportAmountMDT ::= ENUMERATED{r1, r2, r4, r8, r16, r32, r64, rinfinity} ReportIntervalMDT ::= ENUMERATED {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60} M1ReportingTrigger ::= ENUMERATED{ periodic, a2eventtriggered, ..., a2eventtriggered-periodic } RequestType ::= SEQUENCE { eventType EventType, reportArea ReportArea, iE-Extensions ProtocolExtensionContainer { { RequestType-ExtIEs} } OPTIONAL, ... } RequestType-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } RIMTransfer ::= SEQUENCE { rIMInformation RIMInformation, rIMRoutingAddress RIMRoutingAddress OPTIONAL, iE-Extensions ProtocolExtensionContainer { { RIMTransfer-ExtIEs} } OPTIONAL, ... } RIMTransfer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } RIMInformation ::= OCTET STRING RIMRoutingAddress ::= CHOICE { gERAN-Cell-ID GERAN-Cell-ID, ..., targetRNC-ID TargetRNC-ID, eHRPD-Sector-ID OCTET STRING (SIZE(16)) } ReportArea ::= ENUMERATED { ecgi, ... } RepetitionPeriod ::= INTEGER (0..4095) RLFReportInformation ::= SEQUENCE { uE-RLF-Report-Container UE-RLF-Report-Container, uE-RLF-Report-Container-for-extended-bands UE-RLF-Report-Container-for-extended-bands OPTIONAL, iE-Extensions ProtocolExtensionContainer {{ RLFReportInformation-ExtIEs}} OPTIONAL, ... } RLFReportInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } RNC-ID ::= INTEGER (0..4095) RRC-Container ::= OCTET STRING RRC-Establishment-Cause ::= ENUMERATED { emergency, highPriorityAccess, mt-Access, mo-Signalling, mo-Data, ..., delay-TolerantAccess, mo-VoiceCall, mo-ExceptionData } ECGIListForRestart ::= SEQUENCE (SIZE(1..maxnoofCellsforRestart)) OF EUTRAN-CGI Routing-ID ::= INTEGER (0..255) -- S SecurityKey ::= BIT STRING (SIZE(256)) SecurityContext ::= SEQUENCE { nextHopChainingCount INTEGER (0..7), nextHopParameter SecurityKey, iE-Extensions ProtocolExtensionContainer { { SecurityContext-ExtIEs} } OPTIONAL, ... } SecurityContext-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } SerialNumber ::= BIT STRING (SIZE (16)) SONInformation ::= CHOICE{ sONInformationRequest SONInformationRequest, sONInformationReply SONInformationReply, ..., sONInformation-Extension SONInformation-Extension } SONInformation-Extension ::= ProtocolIE-SingleContainer {{ SONInformation-ExtensionIE }} SONInformation-ExtensionIE S1AP-PROTOCOL-IES ::= { { ID id-SON-Information-Report CRITICALITY ignore TYPE SONInformationReport PRESENCE mandatory} } SONInformationRequest ::= ENUMERATED { x2TNL-Configuration-Info, ..., time-Synchronisation-Info, activate-Muting, deactivate-Muting} SONInformationReply ::= SEQUENCE { x2TNLConfigurationInfo X2TNLConfigurationInfo OPTIONAL, iE-Extensions ProtocolExtensionContainer {{SONInformationReply-ExtIEs}} OPTIONAL, ... } SONInformationReply-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { -- Extension for Release 9 to transfer Time synchronisation information -- {ID id-Time-Synchronisation-Info CRITICALITY ignore EXTENSION TimeSynchronisationInfo PRESENCE optional}, ..., {ID id-Muting-Pattern-Information CRITICALITY ignore EXTENSION MutingPatternInformation PRESENCE optional} } SONInformationReport ::= CHOICE{ rLFReportInformation RLFReportInformation, ... } SONConfigurationTransfer ::= SEQUENCE { targeteNB-ID TargeteNB-ID, sourceeNB-ID SourceeNB-ID, sONInformation SONInformation, iE-Extensions ProtocolExtensionContainer { { SONConfigurationTransfer-ExtIEs} } OPTIONAL, ... } SONConfigurationTransfer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { -- Extension for Release 10 to transfer the IP addresses of the eNB initiating the ANR action -- {ID id-x2TNLConfigurationInfo CRITICALITY ignore EXTENSION X2TNLConfigurationInfo PRESENCE conditional -- This IE shall be present if the SON Information IE contains the SON Information Request IE and the SON Information Request IE is set to X2TNL Configuration Info --}| -- Extension for Release 12 to transfer information concerning the source cell of synchronisation and the aggressor cell -- {ID id-Synchronisation-Information CRITICALITY ignore EXTENSION SynchronisationInformation PRESENCE conditional -- This IE shall be present if the SON Information IE contains the SON Information Request IE set to Activate Muting --}, ... } SynchronisationInformation ::= SEQUENCE { sourceStratumLevel StratumLevel OPTIONAL, listeningSubframePattern ListeningSubframePattern OPTIONAL, aggressoreCGI-List ECGI-List OPTIONAL, iE-Extensions ProtocolExtensionContainer { {SynchronisationInformation-ExtIEs} } OPTIONAL, ... } SynchronisationInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } Source-ToTarget-TransparentContainer ::= OCTET STRING -- This IE includes a transparent container from the source RAN node to the target RAN node. -- The octets of the OCTET STRING are encoded according to the specifications of the target system. SourceBSS-ToTargetBSS-TransparentContainer ::= OCTET STRING -- This is a dummy IE used only as a reference to the actual definition in relevant specification. SourceeNB-ID ::= SEQUENCE { global-ENB-ID Global-ENB-ID, selected-TAI TAI, iE-Extensions ProtocolExtensionContainer { {SourceeNB-ID-ExtIEs} } OPTIONAL } SourceeNB-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } SRVCCOperationNotPossible ::= ENUMERATED { notPossible, ... } SRVCCOperationPossible ::= ENUMERATED { possible, ... } SRVCCHOIndication ::= ENUMERATED { pSandCS, cSonly, ... } SourceeNB-ToTargeteNB-TransparentContainer ::= SEQUENCE { rRC-Container RRC-Container, e-RABInformationList E-RABInformationList OPTIONAL, targetCell-ID EUTRAN-CGI, subscriberProfileIDforRFP SubscriberProfileIDforRFP OPTIONAL, uE-HistoryInformation UE-HistoryInformation, iE-Extensions ProtocolExtensionContainer { {SourceeNB-ToTargeteNB-TransparentContainer-ExtIEs} } OPTIONAL, ... } SourceeNB-ToTargeteNB-TransparentContainer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { {ID id-MobilityInformation CRITICALITY ignore EXTENSION MobilityInformation PRESENCE optional}| {ID id-uE-HistoryInformationFromTheUE CRITICALITY ignore EXTENSION UE-HistoryInformationFromTheUE PRESENCE optional}, ... } SourceRNC-ToTargetRNC-TransparentContainer ::= OCTET STRING -- This is a dummy IE used only as a reference to the actual definition in relevant specification. ServedGUMMEIs ::= SEQUENCE (SIZE (1.. maxnoofRATs)) OF ServedGUMMEIsItem ServedGUMMEIsItem ::= SEQUENCE { servedPLMNs ServedPLMNs, servedGroupIDs ServedGroupIDs, servedMMECs ServedMMECs, iE-Extensions ProtocolExtensionContainer { {ServedGUMMEIsItem-ExtIEs} } OPTIONAL, ... } ServedGUMMEIsItem-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } ServedGroupIDs ::= SEQUENCE (SIZE(1.. maxnoofGroupIDs)) OF MME-Group-ID ServedMMECs ::= SEQUENCE (SIZE(1.. maxnoofMMECs)) OF MME-Code ServedPLMNs ::= SEQUENCE (SIZE(1.. maxnoofPLMNsPerMME)) OF PLMNidentity SubscriberProfileIDforRFP ::= INTEGER (1..256) SupportedTAs ::= SEQUENCE (SIZE(1.. maxnoofTACs)) OF SupportedTAs-Item SupportedTAs-Item ::= SEQUENCE { tAC TAC, broadcastPLMNs BPLMNs, iE-Extensions ProtocolExtensionContainer { {SupportedTAs-Item-ExtIEs} } OPTIONAL, ... } SupportedTAs-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { -- Extension for Release 13 to transfer RAT-Type per TAC -- {ID id-RAT-Type CRITICALITY reject EXTENSION RAT-Type PRESENCE optional}, ... } StratumLevel ::= INTEGER (0..3, ...) SynchronisationStatus ::= ENUMERATED { synchronous, asynchronous, ... } TimeSynchronisationInfo ::= SEQUENCE { stratumLevel StratumLevel, synchronisationStatus SynchronisationStatus, iE-Extensions ProtocolExtensionContainer { { TimeSynchronisationInfo-ExtIEs} } OPTIONAL, ... } TimeSynchronisationInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { -- Extension for Release 12 to transfer Muting Availability Indication -- {ID id-Muting-Availability-Indication CRITICALITY ignore EXTENSION MutingAvailabilityIndication PRESENCE optional}, ... } S-TMSI ::= SEQUENCE { mMEC MME-Code, m-TMSI M-TMSI, iE-Extensions ProtocolExtensionContainer { {S-TMSI-ExtIEs} } OPTIONAL, ... } S-TMSI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } -- T TAC ::= OCTET STRING (SIZE (2)) TAIBasedMDT ::= SEQUENCE { tAIListforMDT TAIListforMDT, iE-Extensions ProtocolExtensionContainer { {TAIBasedMDT-ExtIEs} } OPTIONAL, ... } TAIBasedMDT-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } TAIListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAI TAIListforWarning ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAI TAI ::= SEQUENCE { pLMNidentity PLMNidentity, tAC TAC, iE-Extensions ProtocolExtensionContainer { {TAI-ExtIEs} } OPTIONAL, ... } TAI-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } TAI-Broadcast ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAI-Broadcast-Item TAI-Broadcast-Item ::= SEQUENCE { tAI TAI, completedCellinTAI CompletedCellinTAI, iE-Extensions ProtocolExtensionContainer { {TAI-Broadcast-Item-ExtIEs} } OPTIONAL, ... } TAI-Broadcast-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } TAI-Cancelled ::= SEQUENCE (SIZE(1..maxnoofTAIforWarning)) OF TAI-Cancelled-Item TAI-Cancelled-Item ::= SEQUENCE { tAI TAI, cancelledCellinTAI CancelledCellinTAI, iE-Extensions ProtocolExtensionContainer { {TAI-Cancelled-Item-ExtIEs} } OPTIONAL, ... } TAI-Cancelled-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } TABasedMDT ::= SEQUENCE { tAListforMDT TAListforMDT, iE-Extensions ProtocolExtensionContainer { {TABasedMDT-ExtIEs} } OPTIONAL, ... } TABasedMDT-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } TAListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAC CompletedCellinTAI ::= SEQUENCE (SIZE(1..maxnoofCellinTAI)) OF CompletedCellinTAI-Item CompletedCellinTAI-Item ::= SEQUENCE{ eCGI EUTRAN-CGI, iE-Extensions ProtocolExtensionContainer { {CompletedCellinTAI-Item-ExtIEs} } OPTIONAL, ... } CompletedCellinTAI-Item-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } TBCD-STRING ::= OCTET STRING (SIZE (3)) TargetID ::= CHOICE { targeteNB-ID TargeteNB-ID, targetRNC-ID TargetRNC-ID, cGI CGI, ... } TargeteNB-ID ::= SEQUENCE { global-ENB-ID Global-ENB-ID, selected-TAI TAI, iE-Extensions ProtocolExtensionContainer { {TargeteNB-ID-ExtIEs} } OPTIONAL, ... } TargeteNB-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } TargetRNC-ID ::= SEQUENCE { lAI LAI, rAC RAC OPTIONAL, rNC-ID RNC-ID, extendedRNC-ID ExtendedRNC-ID OPTIONAL, iE-Extensions ProtocolExtensionContainer { {TargetRNC-ID-ExtIEs} } OPTIONAL, ... } TargetRNC-ID-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } TargeteNB-ToSourceeNB-TransparentContainer ::= SEQUENCE { rRC-Container RRC-Container, iE-Extensions ProtocolExtensionContainer { {TargeteNB-ToSourceeNB-TransparentContainer-ExtIEs} } OPTIONAL, ... } TargeteNB-ToSourceeNB-TransparentContainer-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } Target-ToSource-TransparentContainer ::= OCTET STRING -- This IE includes a transparent container from the target RAN node to the source RAN node. -- The octets of the OCTET STRING are coded according to the specifications of the target system. TargetRNC-ToSourceRNC-TransparentContainer ::= OCTET STRING -- This is a dummy IE used only as a reference to the actual definition in relevant specification. TargetBSS-ToSourceBSS-TransparentContainer ::= OCTET STRING -- This is a dummy IE used only as a reference to the actual definition in relevant specification. M1ThresholdEventA2 ::= SEQUENCE { measurementThreshold MeasurementThresholdA2, iE-Extensions ProtocolExtensionContainer { { M1ThresholdEventA2-ExtIEs} } OPTIONAL, ... } M1ThresholdEventA2-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } Threshold-RSRP ::= INTEGER(0..97) Threshold-RSRQ ::= INTEGER(0..34) TimeToWait ::= ENUMERATED {v1s, v2s, v5s, v10s, v20s, v60s, ...} Time-UE-StayedInCell ::= INTEGER (0..4095) Time-UE-StayedInCell-EnhancedGranularity ::= INTEGER (0..40950) TransportInformation ::= SEQUENCE { transportLayerAddress TransportLayerAddress, uL-GTP-TEID GTP-TEID, ... } TransportLayerAddress ::= BIT STRING (SIZE(1..160, ...)) TraceActivation ::= SEQUENCE { e-UTRAN-Trace-ID E-UTRAN-Trace-ID, interfacesToTrace InterfacesToTrace, traceDepth TraceDepth, traceCollectionEntityIPAddress TransportLayerAddress, iE-Extensions ProtocolExtensionContainer { { TraceActivation-ExtIEs} } OPTIONAL, ... } TraceActivation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { -- Extension for Rel-10 to support MDT -- { ID id-MDTConfiguration CRITICALITY ignore EXTENSION MDT-Configuration PRESENCE optional }, ... } TraceDepth ::= ENUMERATED { minimum, medium, maximum, minimumWithoutVendorSpecificExtension, mediumWithoutVendorSpecificExtension, maximumWithoutVendorSpecificExtension, ... } E-UTRAN-Trace-ID ::= OCTET STRING (SIZE (8)) TrafficLoadReductionIndication ::= INTEGER (1..99) TunnelInformation ::= SEQUENCE { transportLayerAddress TransportLayerAddress, uDP-Port-Number Port-Number OPTIONAL, iE-Extensions ProtocolExtensionContainer { {Tunnel-Information-ExtIEs} } OPTIONAL, ... } Tunnel-Information-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } TypeOfError ::= ENUMERATED { not-understood, missing, ... } TAIListForRestart ::= SEQUENCE (SIZE(1..maxnoofRestartTAIs)) OF TAI -- U UEAggregateMaximumBitrate ::= SEQUENCE { uEaggregateMaximumBitRateDL BitRate, uEaggregateMaximumBitRateUL BitRate, iE-Extensions ProtocolExtensionContainer { {UEAggregate-MaximumBitrates-ExtIEs} } OPTIONAL, ... } UEAggregate-MaximumBitrates-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } UE-RetentionInformation ::= ENUMERATED { ues-retained, ...} UE-S1AP-IDs ::= CHOICE{ uE-S1AP-ID-pair UE-S1AP-ID-pair, mME-UE-S1AP-ID MME-UE-S1AP-ID, ... } UE-S1AP-ID-pair ::= SEQUENCE{ mME-UE-S1AP-ID MME-UE-S1AP-ID, eNB-UE-S1AP-ID ENB-UE-S1AP-ID, iE-Extensions ProtocolExtensionContainer { {UE-S1AP-ID-pair-ExtIEs} } OPTIONAL, ... } UE-S1AP-ID-pair-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } UE-associatedLogicalS1-ConnectionItem ::= SEQUENCE { mME-UE-S1AP-ID MME-UE-S1AP-ID OPTIONAL, eNB-UE-S1AP-ID ENB-UE-S1AP-ID OPTIONAL, iE-Extensions ProtocolExtensionContainer { { UE-associatedLogicalS1-ConnectionItemExtIEs} } OPTIONAL, ... } UE-associatedLogicalS1-ConnectionItemExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } UEIdentityIndexValue ::= BIT STRING (SIZE (10)) UE-HistoryInformation ::= SEQUENCE (SIZE(1..maxnoofCells)) OF LastVisitedCell-Item UE-HistoryInformationFromTheUE ::= OCTET STRING -- This IE is a transparent container and shall be encoded as the VisitedCellInfoList field contained in the UEInformationResponse message as defined in TS 36.331 [16] UEPagingID ::= CHOICE { s-TMSI S-TMSI, iMSI IMSI, ... } UERadioCapability ::= OCTET STRING UERadioCapabilityForPaging ::= OCTET STRING UE-RLF-Report-Container ::= OCTET STRING -- This IE is a transparent container and shall be encoded as the rlf-Report-r9 field contained in the UEInformationResponse message as defined in TS 36.331 [16] UE-RLF-Report-Container-for-extended-bands ::= OCTET STRING -- This IE is a transparent container and shall be encoded as the rlf-Report-v9e0 contained in the UEInformationResponse message as defined in TS 36.331 [16] UESecurityCapabilities ::= SEQUENCE { encryptionAlgorithms EncryptionAlgorithms, integrityProtectionAlgorithms IntegrityProtectionAlgorithms, iE-Extensions ProtocolExtensionContainer { { UESecurityCapabilities-ExtIEs} } OPTIONAL, ... } UESecurityCapabilities-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } UESidelinkAggregateMaximumBitrate ::= SEQUENCE { uESidelinkAggregateMaximumBitRate BitRate, iE-Extensions ProtocolExtensionContainer { {UE-Sidelink-Aggregate-MaximumBitrates-ExtIEs} } OPTIONAL, ... } UE-Sidelink-Aggregate-MaximumBitrates-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } UE-Usage-Type ::= INTEGER (0..255) UL-CP-SecurityInformation ::= SEQUENCE { ul-NAS-MAC UL-NAS-MAC, ul-NAS-Count UL-NAS-Count, iE-Extensions ProtocolExtensionContainer { { UL-CP-SecurityInformation-ExtIEs} } OPTIONAL, ... } UL-CP-SecurityInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } UL-NAS-MAC ::= BIT STRING (SIZE (16)) UL-NAS-Count ::= BIT STRING (SIZE (5)) UserLocationInformation ::= SEQUENCE { eutran-cgi EUTRAN-CGI, tai TAI, iE-Extensions ProtocolExtensionContainer { { UserLocationInformation-ExtIEs} } OPTIONAL, ... } UserLocationInformation-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } UEUserPlaneCIoTSupportIndicator ::= ENUMERATED { supported, ... } -- V VoiceSupportMatchIndicator ::= ENUMERATED { supported, not-supported, ... } V2XServicesAuthorized ::= SEQUENCE { vehicleUE VehicleUE OPTIONAL, pedestrianUE PedestrianUE OPTIONAL, iE-Extensions ProtocolExtensionContainer { {V2XServicesAuthorized-ExtIEs} } OPTIONAL, ... } V2XServicesAuthorized-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } VehicleUE ::= ENUMERATED { authorized, not-authorized, ... } PedestrianUE ::= ENUMERATED { authorized, not-authorized, ... } -- W WarningAreaList ::= CHOICE { cellIDList ECGIList, trackingAreaListforWarning TAIListforWarning, emergencyAreaIDList EmergencyAreaIDList, ... } WarningType ::= OCTET STRING (SIZE (2)) WarningSecurityInfo ::= OCTET STRING (SIZE (50)) WarningMessageContents ::= OCTET STRING (SIZE(1..9600)) -- X2TNLConfigurationInfo ::= SEQUENCE { eNBX2TransportLayerAddresses ENBX2TLAs, iE-Extensions ProtocolExtensionContainer { { X2TNLConfigurationInfo-ExtIEs} } OPTIONAL, ... } X2TNLConfigurationInfo-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { -- Extension for Release 10 to transfer the IPsec and U-plane addresses during ANR action -- {ID id-eNBX2ExtendedTransportLayerAddresses CRITICALITY ignore EXTENSION ENBX2ExtTLAs PRESENCE optional}| -- Extension for Release 12 to transfer the IP addresses of the X2 GW -- {ID id-eNBIndirectX2TransportLayerAddresses CRITICALITY ignore EXTENSION ENBIndirectX2TransportLayerAddresses PRESENCE optional}, ... } ENBX2ExtTLAs ::= SEQUENCE (SIZE(1.. maxnoofeNBX2ExtTLAs)) OF ENBX2ExtTLA ENBX2ExtTLA ::= SEQUENCE { iPsecTLA TransportLayerAddress OPTIONAL, gTPTLAa ENBX2GTPTLAs OPTIONAL, iE-Extensions ProtocolExtensionContainer { { ENBX2ExtTLA-ExtIEs} } OPTIONAL, ... } ENBX2ExtTLA-ExtIEs S1AP-PROTOCOL-EXTENSION ::= { ... } ENBX2GTPTLAs ::= SEQUENCE (SIZE(1.. maxnoofeNBX2GTPTLAs)) OF TransportLayerAddress ENBIndirectX2TransportLayerAddresses ::= SEQUENCE (SIZE(1..maxnoofeNBX2TLAs)) OF TransportLayerAddress -- Y -- Z END -- ************************************************************** -- -- Common definitions -- -- ************************************************************** S1AP-CommonDataTypes { itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-CommonDataTypes (3) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN Criticality ::= ENUMERATED { reject, ignore, notify } Presence ::= ENUMERATED { optional, conditional, mandatory } PrivateIE-ID ::= CHOICE { local INTEGER (0..65535), global OBJECT IDENTIFIER } ProcedureCode ::= INTEGER (0..255) ProtocolExtensionID ::= INTEGER (0..65535) ProtocolIE-ID ::= INTEGER (0..65535) TriggeringMessage ::= ENUMERATED { initiating-message, successful-outcome, unsuccessfull-outcome } END -- ************************************************************** -- -- Constant definitions -- -- ************************************************************** S1AP-Constants { itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Constants (4) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- ************************************************************** -- -- IE parameter types from other modules. -- -- ************************************************************** IMPORTS ProcedureCode, ProtocolIE-ID FROM S1AP-CommonDataTypes; -- ************************************************************** -- -- Elementary Procedures -- -- ************************************************************** id-HandoverPreparation ProcedureCode ::= 0 id-HandoverResourceAllocation ProcedureCode ::= 1 id-HandoverNotification ProcedureCode ::= 2 id-PathSwitchRequest ProcedureCode ::= 3 id-HandoverCancel ProcedureCode ::= 4 id-E-RABSetup ProcedureCode ::= 5 id-E-RABModify ProcedureCode ::= 6 id-E-RABRelease ProcedureCode ::= 7 id-E-RABReleaseIndication ProcedureCode ::= 8 id-InitialContextSetup ProcedureCode ::= 9 id-Paging ProcedureCode ::= 10 id-downlinkNASTransport ProcedureCode ::= 11 id-initialUEMessage ProcedureCode ::= 12 id-uplinkNASTransport ProcedureCode ::= 13 id-Reset ProcedureCode ::= 14 id-ErrorIndication ProcedureCode ::= 15 id-NASNonDeliveryIndication ProcedureCode ::= 16 id-S1Setup ProcedureCode ::= 17 id-UEContextReleaseRequest ProcedureCode ::= 18 id-DownlinkS1cdma2000tunnelling ProcedureCode ::= 19 id-UplinkS1cdma2000tunnelling ProcedureCode ::= 20 id-UEContextModification ProcedureCode ::= 21 id-UECapabilityInfoIndication ProcedureCode ::= 22 id-UEContextRelease ProcedureCode ::= 23 id-eNBStatusTransfer ProcedureCode ::= 24 id-MMEStatusTransfer ProcedureCode ::= 25 id-DeactivateTrace ProcedureCode ::= 26 id-TraceStart ProcedureCode ::= 27 id-TraceFailureIndication ProcedureCode ::= 28 id-ENBConfigurationUpdate ProcedureCode ::= 29 id-MMEConfigurationUpdate ProcedureCode ::= 30 id-LocationReportingControl ProcedureCode ::= 31 id-LocationReportingFailureIndication ProcedureCode ::= 32 id-LocationReport ProcedureCode ::= 33 id-OverloadStart ProcedureCode ::= 34 id-OverloadStop ProcedureCode ::= 35 id-WriteReplaceWarning ProcedureCode ::= 36 id-eNBDirectInformationTransfer ProcedureCode ::= 37 id-MMEDirectInformationTransfer ProcedureCode ::= 38 id-PrivateMessage ProcedureCode ::= 39 id-eNBConfigurationTransfer ProcedureCode ::= 40 id-MMEConfigurationTransfer ProcedureCode ::= 41 id-CellTrafficTrace ProcedureCode ::= 42 id-Kill ProcedureCode ::= 43 id-downlinkUEAssociatedLPPaTransport ProcedureCode ::= 44 id-uplinkUEAssociatedLPPaTransport ProcedureCode ::= 45 id-downlinkNonUEAssociatedLPPaTransport ProcedureCode ::= 46 id-uplinkNonUEAssociatedLPPaTransport ProcedureCode ::= 47 id-UERadioCapabilityMatch ProcedureCode ::= 48 id-PWSRestartIndication ProcedureCode ::= 49 id-E-RABModificationIndication ProcedureCode ::= 50 id-PWSFailureIndication ProcedureCode ::= 51 id-RerouteNASRequest ProcedureCode ::= 52 id-UEContextModificationIndication ProcedureCode ::= 53 id-ConnectionEstablishmentIndication ProcedureCode ::= 54 id-UEContextSuspend ProcedureCode ::= 55 id-UEContextResume ProcedureCode ::= 56 id-NASDeliveryIndication ProcedureCode ::= 57 id-RetrieveUEInformation ProcedureCode ::= 58 id-UEInformationTransfer ProcedureCode ::= 59 id-eNBCPRelocationIndication ProcedureCode ::= 60 id-MMECPRelocationIndication ProcedureCode ::= 61 -- ************************************************************** -- -- Extension constants -- -- ************************************************************** maxPrivateIEs INTEGER ::= 65535 maxProtocolExtensions INTEGER ::= 65535 maxProtocolIEs INTEGER ::= 65535 -- ************************************************************** -- -- Lists -- -- ************************************************************** maxnoofCSGs INTEGER ::= 256 maxnoofE-RABs INTEGER ::= 256 maxnoofTAIs INTEGER ::= 256 maxnoofTACs INTEGER ::= 256 maxnoofErrors INTEGER ::= 256 maxnoofBPLMNs INTEGER ::= 6 maxnoofPLMNsPerMME INTEGER ::= 32 maxnoofEPLMNs INTEGER ::= 15 maxnoofEPLMNsPlusOne INTEGER ::= 16 maxnoofForbLACs INTEGER ::= 4096 maxnoofForbTACs INTEGER ::= 4096 maxnoofIndividualS1ConnectionsToReset INTEGER ::= 256 maxnoofCells INTEGER ::= 16 maxnoofCellsineNB INTEGER ::= 256 maxnoofTAIforWarning INTEGER ::= 65535 maxnoofCellID INTEGER ::= 65535 maxnoofDCNs INTEGER ::= 32 maxnoofEmergencyAreaID INTEGER ::= 65535 maxnoofCellinTAI INTEGER ::= 65535 maxnoofCellinEAI INTEGER ::= 65535 maxnoofeNBX2TLAs INTEGER ::= 2 maxnoofeNBX2ExtTLAs INTEGER ::= 16 maxnoofeNBX2GTPTLAs INTEGER ::= 16 maxnoofRATs INTEGER ::= 8 maxnoofGroupIDs INTEGER ::= 65535 maxnoofMMECs INTEGER ::= 256 maxnoofCellIDforMDT INTEGER ::= 32 maxnoofTAforMDT INTEGER ::= 8 maxnoofMDTPLMNs INTEGER ::= 16 maxnoofCellsforRestart INTEGER ::= 256 maxnoofRestartTAIs INTEGER ::= 2048 maxnoofRestartEmergencyAreaIDs INTEGER ::= 256 maxEARFCN INTEGER ::= 262143 maxnoofMBSFNAreaMDT INTEGER ::= 8 maxnoofRecommendedCells INTEGER ::= 16 maxnoofRecommendedENBs INTEGER ::= 16 -- ************************************************************** -- -- IEs -- -- ************************************************************** id-MME-UE-S1AP-ID ProtocolIE-ID ::= 0 id-HandoverType ProtocolIE-ID ::= 1 id-Cause ProtocolIE-ID ::= 2 id-SourceID ProtocolIE-ID ::= 3 id-TargetID ProtocolIE-ID ::= 4 id-eNB-UE-S1AP-ID ProtocolIE-ID ::= 8 id-E-RABSubjecttoDataForwardingList ProtocolIE-ID ::= 12 id-E-RABtoReleaseListHOCmd ProtocolIE-ID ::= 13 id-E-RABDataForwardingItem ProtocolIE-ID ::= 14 id-E-RABReleaseItemBearerRelComp ProtocolIE-ID ::= 15 id-E-RABToBeSetupListBearerSUReq ProtocolIE-ID ::= 16 id-E-RABToBeSetupItemBearerSUReq ProtocolIE-ID ::= 17 id-E-RABAdmittedList ProtocolIE-ID ::= 18 id-E-RABFailedToSetupListHOReqAck ProtocolIE-ID ::= 19 id-E-RABAdmittedItem ProtocolIE-ID ::= 20 id-E-RABFailedtoSetupItemHOReqAck ProtocolIE-ID ::= 21 id-E-RABToBeSwitchedDLList ProtocolIE-ID ::= 22 id-E-RABToBeSwitchedDLItem ProtocolIE-ID ::= 23 id-E-RABToBeSetupListCtxtSUReq ProtocolIE-ID ::= 24 id-TraceActivation ProtocolIE-ID ::= 25 id-NAS-PDU ProtocolIE-ID ::= 26 id-E-RABToBeSetupItemHOReq ProtocolIE-ID ::= 27 id-E-RABSetupListBearerSURes ProtocolIE-ID ::= 28 id-E-RABFailedToSetupListBearerSURes ProtocolIE-ID ::= 29 id-E-RABToBeModifiedListBearerModReq ProtocolIE-ID ::= 30 id-E-RABModifyListBearerModRes ProtocolIE-ID ::= 31 id-E-RABFailedToModifyList ProtocolIE-ID ::= 32 id-E-RABToBeReleasedList ProtocolIE-ID ::= 33 id-E-RABFailedToReleaseList ProtocolIE-ID ::= 34 id-E-RABItem ProtocolIE-ID ::= 35 id-E-RABToBeModifiedItemBearerModReq ProtocolIE-ID ::= 36 id-E-RABModifyItemBearerModRes ProtocolIE-ID ::= 37 id-E-RABReleaseItem ProtocolIE-ID ::= 38 id-E-RABSetupItemBearerSURes ProtocolIE-ID ::= 39 id-SecurityContext ProtocolIE-ID ::= 40 id-HandoverRestrictionList ProtocolIE-ID ::= 41 id-UEPagingID ProtocolIE-ID ::= 43 id-pagingDRX ProtocolIE-ID ::= 44 id-TAIList ProtocolIE-ID ::= 46 id-TAIItem ProtocolIE-ID ::= 47 id-E-RABFailedToSetupListCtxtSURes ProtocolIE-ID ::= 48 id-E-RABReleaseItemHOCmd ProtocolIE-ID ::= 49 id-E-RABSetupItemCtxtSURes ProtocolIE-ID ::= 50 id-E-RABSetupListCtxtSURes ProtocolIE-ID ::= 51 id-E-RABToBeSetupItemCtxtSUReq ProtocolIE-ID ::= 52 id-E-RABToBeSetupListHOReq ProtocolIE-ID ::= 53 id-GERANtoLTEHOInformationRes ProtocolIE-ID ::= 55 id-UTRANtoLTEHOInformationRes ProtocolIE-ID ::= 57 id-CriticalityDiagnostics ProtocolIE-ID ::= 58 id-Global-ENB-ID ProtocolIE-ID ::= 59 id-eNBname ProtocolIE-ID ::= 60 id-MMEname ProtocolIE-ID ::= 61 id-ServedPLMNs ProtocolIE-ID ::= 63 id-SupportedTAs ProtocolIE-ID ::= 64 id-TimeToWait ProtocolIE-ID ::= 65 id-uEaggregateMaximumBitrate ProtocolIE-ID ::= 66 id-TAI ProtocolIE-ID ::= 67 id-E-RABReleaseListBearerRelComp ProtocolIE-ID ::= 69 id-cdma2000PDU ProtocolIE-ID ::= 70 id-cdma2000RATType ProtocolIE-ID ::= 71 id-cdma2000SectorID ProtocolIE-ID ::= 72 id-SecurityKey ProtocolIE-ID ::= 73 id-UERadioCapability ProtocolIE-ID ::= 74 id-GUMMEI-ID ProtocolIE-ID ::= 75 id-E-RABInformationListItem ProtocolIE-ID ::= 78 id-Direct-Forwarding-Path-Availability ProtocolIE-ID ::= 79 id-UEIdentityIndexValue ProtocolIE-ID ::= 80 id-cdma2000HOStatus ProtocolIE-ID ::= 83 id-cdma2000HORequiredIndication ProtocolIE-ID ::= 84 id-E-UTRAN-Trace-ID ProtocolIE-ID ::= 86 id-RelativeMMECapacity ProtocolIE-ID ::= 87 id-SourceMME-UE-S1AP-ID ProtocolIE-ID ::= 88 id-Bearers-SubjectToStatusTransfer-Item ProtocolIE-ID ::= 89 id-eNB-StatusTransfer-TransparentContainer ProtocolIE-ID ::= 90 id-UE-associatedLogicalS1-ConnectionItem ProtocolIE-ID ::= 91 id-ResetType ProtocolIE-ID ::= 92 id-UE-associatedLogicalS1-ConnectionListResAck ProtocolIE-ID ::= 93 id-E-RABToBeSwitchedULItem ProtocolIE-ID ::= 94 id-E-RABToBeSwitchedULList ProtocolIE-ID ::= 95 id-S-TMSI ProtocolIE-ID ::= 96 id-cdma2000OneXRAND ProtocolIE-ID ::= 97 id-RequestType ProtocolIE-ID ::= 98 id-UE-S1AP-IDs ProtocolIE-ID ::= 99 id-EUTRAN-CGI ProtocolIE-ID ::= 100 id-OverloadResponse ProtocolIE-ID ::= 101 id-cdma2000OneXSRVCCInfo ProtocolIE-ID ::= 102 id-E-RABFailedToBeReleasedList ProtocolIE-ID ::= 103 id-Source-ToTarget-TransparentContainer ProtocolIE-ID ::= 104 id-ServedGUMMEIs ProtocolIE-ID ::= 105 id-SubscriberProfileIDforRFP ProtocolIE-ID ::= 106 id-UESecurityCapabilities ProtocolIE-ID ::= 107 id-CSFallbackIndicator ProtocolIE-ID ::= 108 id-CNDomain ProtocolIE-ID ::= 109 id-E-RABReleasedList ProtocolIE-ID ::= 110 id-MessageIdentifier ProtocolIE-ID ::= 111 id-SerialNumber ProtocolIE-ID ::= 112 id-WarningAreaList ProtocolIE-ID ::= 113 id-RepetitionPeriod ProtocolIE-ID ::= 114 id-NumberofBroadcastRequest ProtocolIE-ID ::= 115 id-WarningType ProtocolIE-ID ::= 116 id-WarningSecurityInfo ProtocolIE-ID ::= 117 id-DataCodingScheme ProtocolIE-ID ::= 118 id-WarningMessageContents ProtocolIE-ID ::= 119 id-BroadcastCompletedAreaList ProtocolIE-ID ::= 120 id-Inter-SystemInformationTransferTypeEDT ProtocolIE-ID ::= 121 id-Inter-SystemInformationTransferTypeMDT ProtocolIE-ID ::= 122 id-Target-ToSource-TransparentContainer ProtocolIE-ID ::= 123 id-SRVCCOperationPossible ProtocolIE-ID ::= 124 id-SRVCCHOIndication ProtocolIE-ID ::= 125 id-NAS-DownlinkCount ProtocolIE-ID ::= 126 id-CSG-Id ProtocolIE-ID ::= 127 id-CSG-IdList ProtocolIE-ID ::= 128 id-SONConfigurationTransferECT ProtocolIE-ID ::= 129 id-SONConfigurationTransferMCT ProtocolIE-ID ::= 130 id-TraceCollectionEntityIPAddress ProtocolIE-ID ::= 131 id-MSClassmark2 ProtocolIE-ID ::= 132 id-MSClassmark3 ProtocolIE-ID ::= 133 id-RRC-Establishment-Cause ProtocolIE-ID ::= 134 id-NASSecurityParametersfromE-UTRAN ProtocolIE-ID ::= 135 id-NASSecurityParameterstoE-UTRAN ProtocolIE-ID ::= 136 id-DefaultPagingDRX ProtocolIE-ID ::= 137 id-Source-ToTarget-TransparentContainer-Secondary ProtocolIE-ID ::= 138 id-Target-ToSource-TransparentContainer-Secondary ProtocolIE-ID ::= 139 id-EUTRANRoundTripDelayEstimationInfo ProtocolIE-ID ::= 140 id-BroadcastCancelledAreaList ProtocolIE-ID ::= 141 id-ConcurrentWarningMessageIndicator ProtocolIE-ID ::= 142 id-Data-Forwarding-Not-Possible ProtocolIE-ID ::= 143 id-ExtendedRepetitionPeriod ProtocolIE-ID ::= 144 id-CellAccessMode ProtocolIE-ID ::= 145 id-CSGMembershipStatus ProtocolIE-ID ::= 146 id-LPPa-PDU ProtocolIE-ID ::= 147 id-Routing-ID ProtocolIE-ID ::= 148 id-Time-Synchronisation-Info ProtocolIE-ID ::= 149 id-PS-ServiceNotAvailable ProtocolIE-ID ::= 150 id-PagingPriority ProtocolIE-ID ::= 151 id-x2TNLConfigurationInfo ProtocolIE-ID ::= 152 id-eNBX2ExtendedTransportLayerAddresses ProtocolIE-ID ::= 153 id-GUMMEIList ProtocolIE-ID ::= 154 id-GW-TransportLayerAddress ProtocolIE-ID ::= 155 id-Correlation-ID ProtocolIE-ID ::= 156 id-SourceMME-GUMMEI ProtocolIE-ID ::= 157 id-MME-UE-S1AP-ID-2 ProtocolIE-ID ::= 158 id-RegisteredLAI ProtocolIE-ID ::= 159 id-RelayNode-Indicator ProtocolIE-ID ::= 160 id-TrafficLoadReductionIndication ProtocolIE-ID ::= 161 id-MDTConfiguration ProtocolIE-ID ::= 162 id-MMERelaySupportIndicator ProtocolIE-ID ::= 163 id-GWContextReleaseIndication ProtocolIE-ID ::= 164 id-ManagementBasedMDTAllowed ProtocolIE-ID ::= 165 id-PrivacyIndicator ProtocolIE-ID ::= 166 id-Time-UE-StayedInCell-EnhancedGranularity ProtocolIE-ID ::= 167 id-HO-Cause ProtocolIE-ID ::= 168 id-VoiceSupportMatchIndicator ProtocolIE-ID ::= 169 id-GUMMEIType ProtocolIE-ID ::= 170 id-M3Configuration ProtocolIE-ID ::= 171 id-M4Configuration ProtocolIE-ID ::= 172 id-M5Configuration ProtocolIE-ID ::= 173 id-MDT-Location-Info ProtocolIE-ID ::= 174 id-MobilityInformation ProtocolIE-ID ::= 175 id-Tunnel-Information-for-BBF ProtocolIE-ID ::= 176 id-ManagementBasedMDTPLMNList ProtocolIE-ID ::= 177 id-SignallingBasedMDTPLMNList ProtocolIE-ID ::= 178 id-ULCOUNTValueExtended ProtocolIE-ID ::= 179 id-DLCOUNTValueExtended ProtocolIE-ID ::= 180 id-ReceiveStatusOfULPDCPSDUsExtended ProtocolIE-ID ::= 181 id-ECGIListForRestart ProtocolIE-ID ::= 182 id-SIPTO-Correlation-ID ProtocolIE-ID ::= 183 id-SIPTO-L-GW-TransportLayerAddress ProtocolIE-ID ::= 184 id-TransportInformation ProtocolIE-ID ::= 185 id-LHN-ID ProtocolIE-ID ::= 186 id-AdditionalCSFallbackIndicator ProtocolIE-ID ::= 187 id-TAIListForRestart ProtocolIE-ID ::= 188 id-UserLocationInformation ProtocolIE-ID ::= 189 id-EmergencyAreaIDListForRestart ProtocolIE-ID ::= 190 id-KillAllWarningMessages ProtocolIE-ID ::= 191 id-Masked-IMEISV ProtocolIE-ID ::= 192 id-eNBIndirectX2TransportLayerAddresses ProtocolIE-ID ::= 193 id-uE-HistoryInformationFromTheUE ProtocolIE-ID ::= 194 id-ProSeAuthorized ProtocolIE-ID ::= 195 id-ExpectedUEBehaviour ProtocolIE-ID ::= 196 id-LoggedMBSFNMDT ProtocolIE-ID ::= 197 id-UERadioCapabilityForPaging ProtocolIE-ID ::= 198 id-E-RABToBeModifiedListBearerModInd ProtocolIE-ID ::= 199 id-E-RABToBeModifiedItemBearerModInd ProtocolIE-ID ::= 200 id-E-RABNotToBeModifiedListBearerModInd ProtocolIE-ID ::= 201 id-E-RABNotToBeModifiedItemBearerModInd ProtocolIE-ID ::= 202 id-E-RABModifyListBearerModConf ProtocolIE-ID ::= 203 id-E-RABModifyItemBearerModConf ProtocolIE-ID ::= 204 id-E-RABFailedToModifyListBearerModConf ProtocolIE-ID ::= 205 id-SON-Information-Report ProtocolIE-ID ::= 206 id-Muting-Availability-Indication ProtocolIE-ID ::= 207 id-Muting-Pattern-Information ProtocolIE-ID ::= 208 id-Synchronisation-Information ProtocolIE-ID ::= 209 id-E-RABToBeReleasedListBearerModConf ProtocolIE-ID ::= 210 id-AssistanceDataForPaging ProtocolIE-ID ::= 211 id-CellIdentifierAndCELevelForCECapableUEs ProtocolIE-ID ::= 212 id-InformationOnRecommendedCellsAndENBsForPaging ProtocolIE-ID ::= 213 id-RecommendedCellItem ProtocolIE-ID ::= 214 id-RecommendedENBItem ProtocolIE-ID ::= 215 id-ProSeUEtoNetworkRelaying ProtocolIE-ID ::= 216 id-ULCOUNTValuePDCP-SNlength18 ProtocolIE-ID ::= 217 id-DLCOUNTValuePDCP-SNlength18 ProtocolIE-ID ::= 218 id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 ProtocolIE-ID ::= 219 id-M6Configuration ProtocolIE-ID ::= 220 id-M7Configuration ProtocolIE-ID ::= 221 id-PWSfailedECGIList ProtocolIE-ID ::= 222 id-MME-Group-ID ProtocolIE-ID ::= 223 id-Additional-GUTI ProtocolIE-ID ::= 224 id-S1-Message ProtocolIE-ID ::= 225 id-CSGMembershipInfo ProtocolIE-ID ::= 226 id-Paging-eDRXInformation ProtocolIE-ID ::= 227 id-UE-RetentionInformation ProtocolIE-ID ::= 228 id-UE-Usage-Type ProtocolIE-ID ::= 230 id-extended-UEIdentityIndexValue ProtocolIE-ID ::= 231 id-RAT-Type ProtocolIE-ID ::= 232 id-BearerType ProtocolIE-ID ::= 233 id-NB-IoT-DefaultPagingDRX ProtocolIE-ID ::= 234 id-E-RABFailedToResumeListResumeReq ProtocolIE-ID ::= 235 id-E-RABFailedToResumeItemResumeReq ProtocolIE-ID ::= 236 id-E-RABFailedToResumeListResumeRes ProtocolIE-ID ::= 237 id-E-RABFailedToResumeItemResumeRes ProtocolIE-ID ::= 238 id-NB-IoT-Paging-eDRXInformation ProtocolIE-ID ::= 239 id-V2XServicesAuthorized ProtocolIE-ID ::= 240 id-UEUserPlaneCIoTSupportIndicator ProtocolIE-ID ::= 241 id-CE-mode-B-SupportIndicator ProtocolIE-ID ::= 242 id-SRVCCOperationNotPossible ProtocolIE-ID ::= 243 id-NB-IoT-UEIdentityIndexValue ProtocolIE-ID ::= 244 id-RRC-Resume-Cause ProtocolIE-ID ::= 245 id-DCN-ID ProtocolIE-ID ::= 246 id-ServedDCNs ProtocolIE-ID ::= 247 id-UESidelinkAggregateMaximumBitrate ProtocolIE-ID ::= 248 id-DLNASPDUDeliveryAckRequest ProtocolIE-ID ::= 249 id-Coverage-Level ProtocolIE-ID ::= 250 id-EnhancedCoverageRestricted ProtocolIE-ID ::= 251 id-UE-Level-QoS-Parameters ProtocolIE-ID ::= 252 id-DL-CP-SecurityInformation ProtocolIE-ID ::= 253 id-UL-CP-SecurityInformation ProtocolIE-ID ::= 254 END -- ************************************************************** -- -- Container definitions -- -- ************************************************************** S1AP-Containers { itu-t (0) identified-organization (4) etsi (0) mobileDomain (0) eps-Access (21) modules (3) s1ap (1) version1 (1) s1ap-Containers (5) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- ************************************************************** -- -- IE parameter types from other modules. -- -- ************************************************************** IMPORTS Criticality, Presence, PrivateIE-ID, ProtocolExtensionID, ProtocolIE-ID FROM S1AP-CommonDataTypes maxPrivateIEs, maxProtocolExtensions, maxProtocolIEs FROM S1AP-Constants; -- ************************************************************** -- -- Class Definition for Protocol IEs -- -- ************************************************************** S1AP-PROTOCOL-IES ::= CLASS { &id ProtocolIE-ID UNIQUE, &criticality Criticality, &Value, &presence Presence } WITH SYNTAX { ID &id CRITICALITY &criticality TYPE &Value PRESENCE &presence } -- ************************************************************** -- -- Class Definition for Protocol IEs -- -- ************************************************************** S1AP-PROTOCOL-IES-PAIR ::= CLASS { &id ProtocolIE-ID UNIQUE, &firstCriticality Criticality, &FirstValue, &secondCriticality Criticality, &SecondValue, &presence Presence } WITH SYNTAX { ID &id FIRST CRITICALITY &firstCriticality FIRST TYPE &FirstValue SECOND CRITICALITY &secondCriticality SECOND TYPE &SecondValue PRESENCE &presence } -- ************************************************************** -- -- Class Definition for Protocol Extensions -- -- ************************************************************** S1AP-PROTOCOL-EXTENSION ::= CLASS { &id ProtocolExtensionID UNIQUE, &criticality Criticality, &Extension, &presence Presence } WITH SYNTAX { ID &id CRITICALITY &criticality EXTENSION &Extension PRESENCE &presence } -- ************************************************************** -- -- Class Definition for Private IEs -- -- ************************************************************** S1AP-PRIVATE-IES ::= CLASS { &id PrivateIE-ID, &criticality Criticality, &Value, &presence Presence } WITH SYNTAX { ID &id CRITICALITY &criticality TYPE &Value PRESENCE &presence } -- ************************************************************** -- -- Container for Protocol IEs -- -- ************************************************************** ProtocolIE-Container {S1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE (SIZE (0..maxProtocolIEs)) OF ProtocolIE-Field {{IEsSetParam}} ProtocolIE-SingleContainer {S1AP-PROTOCOL-IES : IEsSetParam} ::= ProtocolIE-Field {{IEsSetParam}} ProtocolIE-Field {S1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE { id S1AP-PROTOCOL-IES.&id ({IEsSetParam}), criticality S1AP-PROTOCOL-IES.&criticality ({IEsSetParam}{@id}), value S1AP-PROTOCOL-IES.&Value ({IEsSetParam}{@id}) } -- ************************************************************** -- -- Container for Protocol IE Pairs -- -- ************************************************************** ProtocolIE-ContainerPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE (SIZE (0..maxProtocolIEs)) OF ProtocolIE-FieldPair {{IEsSetParam}} ProtocolIE-FieldPair {S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE { id S1AP-PROTOCOL-IES-PAIR.&id ({IEsSetParam}), firstCriticality S1AP-PROTOCOL-IES-PAIR.&firstCriticality ({IEsSetParam}{@id}), firstValue S1AP-PROTOCOL-IES-PAIR.&FirstValue ({IEsSetParam}{@id}), secondCriticality S1AP-PROTOCOL-IES-PAIR.&secondCriticality ({IEsSetParam}{@id}), secondValue S1AP-PROTOCOL-IES-PAIR.&SecondValue ({IEsSetParam}{@id}) } -- ************************************************************** -- -- Container Lists for Protocol IE Containers -- -- ************************************************************** ProtocolIE-ContainerList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE (SIZE (lowerBound..upperBound)) OF ProtocolIE-SingleContainer {{IEsSetParam}} ProtocolIE-ContainerPairList {INTEGER : lowerBound, INTEGER : upperBound, S1AP-PROTOCOL-IES-PAIR : IEsSetParam} ::= SEQUENCE (SIZE (lowerBound..upperBound)) OF ProtocolIE-ContainerPair {{IEsSetParam}} -- ************************************************************** -- -- Container for Protocol Extensions -- -- ************************************************************** ProtocolExtensionContainer {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE (SIZE (1..maxProtocolExtensions)) OF ProtocolExtensionField {{ExtensionSetParam}} ProtocolExtensionField {S1AP-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE { id S1AP-PROTOCOL-EXTENSION.&id ({ExtensionSetParam}), criticality S1AP-PROTOCOL-EXTENSION.&criticality ({ExtensionSetParam}{@id}), extensionValue S1AP-PROTOCOL-EXTENSION.&Extension ({ExtensionSetParam}{@id}) } -- ************************************************************** -- -- Container for Private IEs -- -- ************************************************************** PrivateIE-Container {S1AP-PRIVATE-IES : IEsSetParam } ::= SEQUENCE (SIZE (1.. maxPrivateIEs)) OF PrivateIE-Field {{IEsSetParam}} PrivateIE-Field {S1AP-PRIVATE-IES : IEsSetParam} ::= SEQUENCE { id S1AP-PRIVATE-IES.&id ({IEsSetParam}), criticality S1AP-PRIVATE-IES.&criticality ({IEsSetParam}{@id}), value S1AP-PRIVATE-IES.&Value ({IEsSetParam}{@id}) } END asn1tools-0.169.0/tests/files/3gpp/s1ap_14_4_0.py000066400000000000000000015372701524544274600211470ustar00rootroot00000000000000EXPECTED = {'S1AP-CommonDataTypes': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'Criticality': {'type': 'ENUMERATED', 'values': [('reject', 0), ('ignore', 1), ('notify', 2)]}, 'Presence': {'type': 'ENUMERATED', 'values': [('optional', 0), ('conditional', 1), ('mandatory', 2)]}, 'PrivateIE-ID': {'members': [{'name': 'local', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'global', 'type': 'OBJECT ' 'IDENTIFIER'}], 'type': 'CHOICE'}, 'ProcedureCode': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'ProtocolExtensionID': {'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, 'ProtocolIE-ID': {'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, 'TriggeringMessage': {'type': 'ENUMERATED', 'values': [('initiating-message', 0), ('successful-outcome', 1), ('unsuccessfull-outcome', 2)]}}, 'values': {}}, 'S1AP-Constants': {'extensibility-implied': False, 'imports': {'S1AP-CommonDataTypes': ['ProcedureCode', 'ProtocolIE-ID']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {}, 'values': {'id-Additional-GUTI': {'type': 'ProtocolIE-ID', 'value': 224}, 'id-AdditionalCSFallbackIndicator': {'type': 'ProtocolIE-ID', 'value': 187}, 'id-AssistanceDataForPaging': {'type': 'ProtocolIE-ID', 'value': 211}, 'id-BearerType': {'type': 'ProtocolIE-ID', 'value': 233}, 'id-Bearers-SubjectToStatusTransfer-Item': {'type': 'ProtocolIE-ID', 'value': 89}, 'id-BroadcastCancelledAreaList': {'type': 'ProtocolIE-ID', 'value': 141}, 'id-BroadcastCompletedAreaList': {'type': 'ProtocolIE-ID', 'value': 120}, 'id-CE-mode-B-SupportIndicator': {'type': 'ProtocolIE-ID', 'value': 242}, 'id-CNDomain': {'type': 'ProtocolIE-ID', 'value': 109}, 'id-CSFallbackIndicator': {'type': 'ProtocolIE-ID', 'value': 108}, 'id-CSG-Id': {'type': 'ProtocolIE-ID', 'value': 127}, 'id-CSG-IdList': {'type': 'ProtocolIE-ID', 'value': 128}, 'id-CSGMembershipInfo': {'type': 'ProtocolIE-ID', 'value': 226}, 'id-CSGMembershipStatus': {'type': 'ProtocolIE-ID', 'value': 146}, 'id-Cause': {'type': 'ProtocolIE-ID', 'value': 2}, 'id-CellAccessMode': {'type': 'ProtocolIE-ID', 'value': 145}, 'id-CellIdentifierAndCELevelForCECapableUEs': {'type': 'ProtocolIE-ID', 'value': 212}, 'id-CellTrafficTrace': {'type': 'ProcedureCode', 'value': 42}, 'id-ConcurrentWarningMessageIndicator': {'type': 'ProtocolIE-ID', 'value': 142}, 'id-ConnectionEstablishmentIndication': {'type': 'ProcedureCode', 'value': 54}, 'id-Correlation-ID': {'type': 'ProtocolIE-ID', 'value': 156}, 'id-Coverage-Level': {'type': 'ProtocolIE-ID', 'value': 250}, 'id-CriticalityDiagnostics': {'type': 'ProtocolIE-ID', 'value': 58}, 'id-DCN-ID': {'type': 'ProtocolIE-ID', 'value': 246}, 'id-DL-CP-SecurityInformation': {'type': 'ProtocolIE-ID', 'value': 253}, 'id-DLCOUNTValueExtended': {'type': 'ProtocolIE-ID', 'value': 180}, 'id-DLCOUNTValuePDCP-SNlength18': {'type': 'ProtocolIE-ID', 'value': 218}, 'id-DLNASPDUDeliveryAckRequest': {'type': 'ProtocolIE-ID', 'value': 249}, 'id-Data-Forwarding-Not-Possible': {'type': 'ProtocolIE-ID', 'value': 143}, 'id-DataCodingScheme': {'type': 'ProtocolIE-ID', 'value': 118}, 'id-DeactivateTrace': {'type': 'ProcedureCode', 'value': 26}, 'id-DefaultPagingDRX': {'type': 'ProtocolIE-ID', 'value': 137}, 'id-Direct-Forwarding-Path-Availability': {'type': 'ProtocolIE-ID', 'value': 79}, 'id-DownlinkS1cdma2000tunnelling': {'type': 'ProcedureCode', 'value': 19}, 'id-E-RABAdmittedItem': {'type': 'ProtocolIE-ID', 'value': 20}, 'id-E-RABAdmittedList': {'type': 'ProtocolIE-ID', 'value': 18}, 'id-E-RABDataForwardingItem': {'type': 'ProtocolIE-ID', 'value': 14}, 'id-E-RABFailedToBeReleasedList': {'type': 'ProtocolIE-ID', 'value': 103}, 'id-E-RABFailedToModifyList': {'type': 'ProtocolIE-ID', 'value': 32}, 'id-E-RABFailedToModifyListBearerModConf': {'type': 'ProtocolIE-ID', 'value': 205}, 'id-E-RABFailedToReleaseList': {'type': 'ProtocolIE-ID', 'value': 34}, 'id-E-RABFailedToResumeItemResumeReq': {'type': 'ProtocolIE-ID', 'value': 236}, 'id-E-RABFailedToResumeItemResumeRes': {'type': 'ProtocolIE-ID', 'value': 238}, 'id-E-RABFailedToResumeListResumeReq': {'type': 'ProtocolIE-ID', 'value': 235}, 'id-E-RABFailedToResumeListResumeRes': {'type': 'ProtocolIE-ID', 'value': 237}, 'id-E-RABFailedToSetupListBearerSURes': {'type': 'ProtocolIE-ID', 'value': 29}, 'id-E-RABFailedToSetupListCtxtSURes': {'type': 'ProtocolIE-ID', 'value': 48}, 'id-E-RABFailedToSetupListHOReqAck': {'type': 'ProtocolIE-ID', 'value': 19}, 'id-E-RABFailedtoSetupItemHOReqAck': {'type': 'ProtocolIE-ID', 'value': 21}, 'id-E-RABInformationListItem': {'type': 'ProtocolIE-ID', 'value': 78}, 'id-E-RABItem': {'type': 'ProtocolIE-ID', 'value': 35}, 'id-E-RABModificationIndication': {'type': 'ProcedureCode', 'value': 50}, 'id-E-RABModify': {'type': 'ProcedureCode', 'value': 6}, 'id-E-RABModifyItemBearerModConf': {'type': 'ProtocolIE-ID', 'value': 204}, 'id-E-RABModifyItemBearerModRes': {'type': 'ProtocolIE-ID', 'value': 37}, 'id-E-RABModifyListBearerModConf': {'type': 'ProtocolIE-ID', 'value': 203}, 'id-E-RABModifyListBearerModRes': {'type': 'ProtocolIE-ID', 'value': 31}, 'id-E-RABNotToBeModifiedItemBearerModInd': {'type': 'ProtocolIE-ID', 'value': 202}, 'id-E-RABNotToBeModifiedListBearerModInd': {'type': 'ProtocolIE-ID', 'value': 201}, 'id-E-RABRelease': {'type': 'ProcedureCode', 'value': 7}, 'id-E-RABReleaseIndication': {'type': 'ProcedureCode', 'value': 8}, 'id-E-RABReleaseItem': {'type': 'ProtocolIE-ID', 'value': 38}, 'id-E-RABReleaseItemBearerRelComp': {'type': 'ProtocolIE-ID', 'value': 15}, 'id-E-RABReleaseItemHOCmd': {'type': 'ProtocolIE-ID', 'value': 49}, 'id-E-RABReleaseListBearerRelComp': {'type': 'ProtocolIE-ID', 'value': 69}, 'id-E-RABReleasedList': {'type': 'ProtocolIE-ID', 'value': 110}, 'id-E-RABSetup': {'type': 'ProcedureCode', 'value': 5}, 'id-E-RABSetupItemBearerSURes': {'type': 'ProtocolIE-ID', 'value': 39}, 'id-E-RABSetupItemCtxtSURes': {'type': 'ProtocolIE-ID', 'value': 50}, 'id-E-RABSetupListBearerSURes': {'type': 'ProtocolIE-ID', 'value': 28}, 'id-E-RABSetupListCtxtSURes': {'type': 'ProtocolIE-ID', 'value': 51}, 'id-E-RABSubjecttoDataForwardingList': {'type': 'ProtocolIE-ID', 'value': 12}, 'id-E-RABToBeModifiedItemBearerModInd': {'type': 'ProtocolIE-ID', 'value': 200}, 'id-E-RABToBeModifiedItemBearerModReq': {'type': 'ProtocolIE-ID', 'value': 36}, 'id-E-RABToBeModifiedListBearerModInd': {'type': 'ProtocolIE-ID', 'value': 199}, 'id-E-RABToBeModifiedListBearerModReq': {'type': 'ProtocolIE-ID', 'value': 30}, 'id-E-RABToBeReleasedList': {'type': 'ProtocolIE-ID', 'value': 33}, 'id-E-RABToBeReleasedListBearerModConf': {'type': 'ProtocolIE-ID', 'value': 210}, 'id-E-RABToBeSetupItemBearerSUReq': {'type': 'ProtocolIE-ID', 'value': 17}, 'id-E-RABToBeSetupItemCtxtSUReq': {'type': 'ProtocolIE-ID', 'value': 52}, 'id-E-RABToBeSetupItemHOReq': {'type': 'ProtocolIE-ID', 'value': 27}, 'id-E-RABToBeSetupListBearerSUReq': {'type': 'ProtocolIE-ID', 'value': 16}, 'id-E-RABToBeSetupListCtxtSUReq': {'type': 'ProtocolIE-ID', 'value': 24}, 'id-E-RABToBeSetupListHOReq': {'type': 'ProtocolIE-ID', 'value': 53}, 'id-E-RABToBeSwitchedDLItem': {'type': 'ProtocolIE-ID', 'value': 23}, 'id-E-RABToBeSwitchedDLList': {'type': 'ProtocolIE-ID', 'value': 22}, 'id-E-RABToBeSwitchedULItem': {'type': 'ProtocolIE-ID', 'value': 94}, 'id-E-RABToBeSwitchedULList': {'type': 'ProtocolIE-ID', 'value': 95}, 'id-E-RABtoReleaseListHOCmd': {'type': 'ProtocolIE-ID', 'value': 13}, 'id-E-UTRAN-Trace-ID': {'type': 'ProtocolIE-ID', 'value': 86}, 'id-ECGIListForRestart': {'type': 'ProtocolIE-ID', 'value': 182}, 'id-ENBConfigurationUpdate': {'type': 'ProcedureCode', 'value': 29}, 'id-EUTRAN-CGI': {'type': 'ProtocolIE-ID', 'value': 100}, 'id-EUTRANRoundTripDelayEstimationInfo': {'type': 'ProtocolIE-ID', 'value': 140}, 'id-EmergencyAreaIDListForRestart': {'type': 'ProtocolIE-ID', 'value': 190}, 'id-EnhancedCoverageRestricted': {'type': 'ProtocolIE-ID', 'value': 251}, 'id-ErrorIndication': {'type': 'ProcedureCode', 'value': 15}, 'id-ExpectedUEBehaviour': {'type': 'ProtocolIE-ID', 'value': 196}, 'id-ExtendedRepetitionPeriod': {'type': 'ProtocolIE-ID', 'value': 144}, 'id-GERANtoLTEHOInformationRes': {'type': 'ProtocolIE-ID', 'value': 55}, 'id-GUMMEI-ID': {'type': 'ProtocolIE-ID', 'value': 75}, 'id-GUMMEIList': {'type': 'ProtocolIE-ID', 'value': 154}, 'id-GUMMEIType': {'type': 'ProtocolIE-ID', 'value': 170}, 'id-GW-TransportLayerAddress': {'type': 'ProtocolIE-ID', 'value': 155}, 'id-GWContextReleaseIndication': {'type': 'ProtocolIE-ID', 'value': 164}, 'id-Global-ENB-ID': {'type': 'ProtocolIE-ID', 'value': 59}, 'id-HO-Cause': {'type': 'ProtocolIE-ID', 'value': 168}, 'id-HandoverCancel': {'type': 'ProcedureCode', 'value': 4}, 'id-HandoverNotification': {'type': 'ProcedureCode', 'value': 2}, 'id-HandoverPreparation': {'type': 'ProcedureCode', 'value': 0}, 'id-HandoverResourceAllocation': {'type': 'ProcedureCode', 'value': 1}, 'id-HandoverRestrictionList': {'type': 'ProtocolIE-ID', 'value': 41}, 'id-HandoverType': {'type': 'ProtocolIE-ID', 'value': 1}, 'id-InformationOnRecommendedCellsAndENBsForPaging': {'type': 'ProtocolIE-ID', 'value': 213}, 'id-InitialContextSetup': {'type': 'ProcedureCode', 'value': 9}, 'id-Inter-SystemInformationTransferTypeEDT': {'type': 'ProtocolIE-ID', 'value': 121}, 'id-Inter-SystemInformationTransferTypeMDT': {'type': 'ProtocolIE-ID', 'value': 122}, 'id-Kill': {'type': 'ProcedureCode', 'value': 43}, 'id-KillAllWarningMessages': {'type': 'ProtocolIE-ID', 'value': 191}, 'id-LHN-ID': {'type': 'ProtocolIE-ID', 'value': 186}, 'id-LPPa-PDU': {'type': 'ProtocolIE-ID', 'value': 147}, 'id-LocationReport': {'type': 'ProcedureCode', 'value': 33}, 'id-LocationReportingControl': {'type': 'ProcedureCode', 'value': 31}, 'id-LocationReportingFailureIndication': {'type': 'ProcedureCode', 'value': 32}, 'id-LoggedMBSFNMDT': {'type': 'ProtocolIE-ID', 'value': 197}, 'id-M3Configuration': {'type': 'ProtocolIE-ID', 'value': 171}, 'id-M4Configuration': {'type': 'ProtocolIE-ID', 'value': 172}, 'id-M5Configuration': {'type': 'ProtocolIE-ID', 'value': 173}, 'id-M6Configuration': {'type': 'ProtocolIE-ID', 'value': 220}, 'id-M7Configuration': {'type': 'ProtocolIE-ID', 'value': 221}, 'id-MDT-Location-Info': {'type': 'ProtocolIE-ID', 'value': 174}, 'id-MDTConfiguration': {'type': 'ProtocolIE-ID', 'value': 162}, 'id-MME-Group-ID': {'type': 'ProtocolIE-ID', 'value': 223}, 'id-MME-UE-S1AP-ID': {'type': 'ProtocolIE-ID', 'value': 0}, 'id-MME-UE-S1AP-ID-2': {'type': 'ProtocolIE-ID', 'value': 158}, 'id-MMECPRelocationIndication': {'type': 'ProcedureCode', 'value': 61}, 'id-MMEConfigurationTransfer': {'type': 'ProcedureCode', 'value': 41}, 'id-MMEConfigurationUpdate': {'type': 'ProcedureCode', 'value': 30}, 'id-MMEDirectInformationTransfer': {'type': 'ProcedureCode', 'value': 38}, 'id-MMERelaySupportIndicator': {'type': 'ProtocolIE-ID', 'value': 163}, 'id-MMEStatusTransfer': {'type': 'ProcedureCode', 'value': 25}, 'id-MMEname': {'type': 'ProtocolIE-ID', 'value': 61}, 'id-MSClassmark2': {'type': 'ProtocolIE-ID', 'value': 132}, 'id-MSClassmark3': {'type': 'ProtocolIE-ID', 'value': 133}, 'id-ManagementBasedMDTAllowed': {'type': 'ProtocolIE-ID', 'value': 165}, 'id-ManagementBasedMDTPLMNList': {'type': 'ProtocolIE-ID', 'value': 177}, 'id-Masked-IMEISV': {'type': 'ProtocolIE-ID', 'value': 192}, 'id-MessageIdentifier': {'type': 'ProtocolIE-ID', 'value': 111}, 'id-MobilityInformation': {'type': 'ProtocolIE-ID', 'value': 175}, 'id-Muting-Availability-Indication': {'type': 'ProtocolIE-ID', 'value': 207}, 'id-Muting-Pattern-Information': {'type': 'ProtocolIE-ID', 'value': 208}, 'id-NAS-DownlinkCount': {'type': 'ProtocolIE-ID', 'value': 126}, 'id-NAS-PDU': {'type': 'ProtocolIE-ID', 'value': 26}, 'id-NASDeliveryIndication': {'type': 'ProcedureCode', 'value': 57}, 'id-NASNonDeliveryIndication': {'type': 'ProcedureCode', 'value': 16}, 'id-NASSecurityParametersfromE-UTRAN': {'type': 'ProtocolIE-ID', 'value': 135}, 'id-NASSecurityParameterstoE-UTRAN': {'type': 'ProtocolIE-ID', 'value': 136}, 'id-NB-IoT-DefaultPagingDRX': {'type': 'ProtocolIE-ID', 'value': 234}, 'id-NB-IoT-Paging-eDRXInformation': {'type': 'ProtocolIE-ID', 'value': 239}, 'id-NB-IoT-UEIdentityIndexValue': {'type': 'ProtocolIE-ID', 'value': 244}, 'id-NumberofBroadcastRequest': {'type': 'ProtocolIE-ID', 'value': 115}, 'id-OverloadResponse': {'type': 'ProtocolIE-ID', 'value': 101}, 'id-OverloadStart': {'type': 'ProcedureCode', 'value': 34}, 'id-OverloadStop': {'type': 'ProcedureCode', 'value': 35}, 'id-PS-ServiceNotAvailable': {'type': 'ProtocolIE-ID', 'value': 150}, 'id-PWSFailureIndication': {'type': 'ProcedureCode', 'value': 51}, 'id-PWSRestartIndication': {'type': 'ProcedureCode', 'value': 49}, 'id-PWSfailedECGIList': {'type': 'ProtocolIE-ID', 'value': 222}, 'id-Paging': {'type': 'ProcedureCode', 'value': 10}, 'id-Paging-eDRXInformation': {'type': 'ProtocolIE-ID', 'value': 227}, 'id-PagingPriority': {'type': 'ProtocolIE-ID', 'value': 151}, 'id-PathSwitchRequest': {'type': 'ProcedureCode', 'value': 3}, 'id-PrivacyIndicator': {'type': 'ProtocolIE-ID', 'value': 166}, 'id-PrivateMessage': {'type': 'ProcedureCode', 'value': 39}, 'id-ProSeAuthorized': {'type': 'ProtocolIE-ID', 'value': 195}, 'id-ProSeUEtoNetworkRelaying': {'type': 'ProtocolIE-ID', 'value': 216}, 'id-RAT-Type': {'type': 'ProtocolIE-ID', 'value': 232}, 'id-RRC-Establishment-Cause': {'type': 'ProtocolIE-ID', 'value': 134}, 'id-RRC-Resume-Cause': {'type': 'ProtocolIE-ID', 'value': 245}, 'id-ReceiveStatusOfULPDCPSDUsExtended': {'type': 'ProtocolIE-ID', 'value': 181}, 'id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18': {'type': 'ProtocolIE-ID', 'value': 219}, 'id-RecommendedCellItem': {'type': 'ProtocolIE-ID', 'value': 214}, 'id-RecommendedENBItem': {'type': 'ProtocolIE-ID', 'value': 215}, 'id-RegisteredLAI': {'type': 'ProtocolIE-ID', 'value': 159}, 'id-RelativeMMECapacity': {'type': 'ProtocolIE-ID', 'value': 87}, 'id-RelayNode-Indicator': {'type': 'ProtocolIE-ID', 'value': 160}, 'id-RepetitionPeriod': {'type': 'ProtocolIE-ID', 'value': 114}, 'id-RequestType': {'type': 'ProtocolIE-ID', 'value': 98}, 'id-RerouteNASRequest': {'type': 'ProcedureCode', 'value': 52}, 'id-Reset': {'type': 'ProcedureCode', 'value': 14}, 'id-ResetType': {'type': 'ProtocolIE-ID', 'value': 92}, 'id-RetrieveUEInformation': {'type': 'ProcedureCode', 'value': 58}, 'id-Routing-ID': {'type': 'ProtocolIE-ID', 'value': 148}, 'id-S-TMSI': {'type': 'ProtocolIE-ID', 'value': 96}, 'id-S1-Message': {'type': 'ProtocolIE-ID', 'value': 225}, 'id-S1Setup': {'type': 'ProcedureCode', 'value': 17}, 'id-SIPTO-Correlation-ID': {'type': 'ProtocolIE-ID', 'value': 183}, 'id-SIPTO-L-GW-TransportLayerAddress': {'type': 'ProtocolIE-ID', 'value': 184}, 'id-SON-Information-Report': {'type': 'ProtocolIE-ID', 'value': 206}, 'id-SONConfigurationTransferECT': {'type': 'ProtocolIE-ID', 'value': 129}, 'id-SONConfigurationTransferMCT': {'type': 'ProtocolIE-ID', 'value': 130}, 'id-SRVCCHOIndication': {'type': 'ProtocolIE-ID', 'value': 125}, 'id-SRVCCOperationNotPossible': {'type': 'ProtocolIE-ID', 'value': 243}, 'id-SRVCCOperationPossible': {'type': 'ProtocolIE-ID', 'value': 124}, 'id-SecurityContext': {'type': 'ProtocolIE-ID', 'value': 40}, 'id-SecurityKey': {'type': 'ProtocolIE-ID', 'value': 73}, 'id-SerialNumber': {'type': 'ProtocolIE-ID', 'value': 112}, 'id-ServedDCNs': {'type': 'ProtocolIE-ID', 'value': 247}, 'id-ServedGUMMEIs': {'type': 'ProtocolIE-ID', 'value': 105}, 'id-ServedPLMNs': {'type': 'ProtocolIE-ID', 'value': 63}, 'id-SignallingBasedMDTPLMNList': {'type': 'ProtocolIE-ID', 'value': 178}, 'id-Source-ToTarget-TransparentContainer': {'type': 'ProtocolIE-ID', 'value': 104}, 'id-Source-ToTarget-TransparentContainer-Secondary': {'type': 'ProtocolIE-ID', 'value': 138}, 'id-SourceID': {'type': 'ProtocolIE-ID', 'value': 3}, 'id-SourceMME-GUMMEI': {'type': 'ProtocolIE-ID', 'value': 157}, 'id-SourceMME-UE-S1AP-ID': {'type': 'ProtocolIE-ID', 'value': 88}, 'id-SubscriberProfileIDforRFP': {'type': 'ProtocolIE-ID', 'value': 106}, 'id-SupportedTAs': {'type': 'ProtocolIE-ID', 'value': 64}, 'id-Synchronisation-Information': {'type': 'ProtocolIE-ID', 'value': 209}, 'id-TAI': {'type': 'ProtocolIE-ID', 'value': 67}, 'id-TAIItem': {'type': 'ProtocolIE-ID', 'value': 47}, 'id-TAIList': {'type': 'ProtocolIE-ID', 'value': 46}, 'id-TAIListForRestart': {'type': 'ProtocolIE-ID', 'value': 188}, 'id-Target-ToSource-TransparentContainer': {'type': 'ProtocolIE-ID', 'value': 123}, 'id-Target-ToSource-TransparentContainer-Secondary': {'type': 'ProtocolIE-ID', 'value': 139}, 'id-TargetID': {'type': 'ProtocolIE-ID', 'value': 4}, 'id-Time-Synchronisation-Info': {'type': 'ProtocolIE-ID', 'value': 149}, 'id-Time-UE-StayedInCell-EnhancedGranularity': {'type': 'ProtocolIE-ID', 'value': 167}, 'id-TimeToWait': {'type': 'ProtocolIE-ID', 'value': 65}, 'id-TraceActivation': {'type': 'ProtocolIE-ID', 'value': 25}, 'id-TraceCollectionEntityIPAddress': {'type': 'ProtocolIE-ID', 'value': 131}, 'id-TraceFailureIndication': {'type': 'ProcedureCode', 'value': 28}, 'id-TraceStart': {'type': 'ProcedureCode', 'value': 27}, 'id-TrafficLoadReductionIndication': {'type': 'ProtocolIE-ID', 'value': 161}, 'id-TransportInformation': {'type': 'ProtocolIE-ID', 'value': 185}, 'id-Tunnel-Information-for-BBF': {'type': 'ProtocolIE-ID', 'value': 176}, 'id-UE-Level-QoS-Parameters': {'type': 'ProtocolIE-ID', 'value': 252}, 'id-UE-RetentionInformation': {'type': 'ProtocolIE-ID', 'value': 228}, 'id-UE-S1AP-IDs': {'type': 'ProtocolIE-ID', 'value': 99}, 'id-UE-Usage-Type': {'type': 'ProtocolIE-ID', 'value': 230}, 'id-UE-associatedLogicalS1-ConnectionItem': {'type': 'ProtocolIE-ID', 'value': 91}, 'id-UE-associatedLogicalS1-ConnectionListResAck': {'type': 'ProtocolIE-ID', 'value': 93}, 'id-UECapabilityInfoIndication': {'type': 'ProcedureCode', 'value': 22}, 'id-UEContextModification': {'type': 'ProcedureCode', 'value': 21}, 'id-UEContextModificationIndication': {'type': 'ProcedureCode', 'value': 53}, 'id-UEContextRelease': {'type': 'ProcedureCode', 'value': 23}, 'id-UEContextReleaseRequest': {'type': 'ProcedureCode', 'value': 18}, 'id-UEContextResume': {'type': 'ProcedureCode', 'value': 56}, 'id-UEContextSuspend': {'type': 'ProcedureCode', 'value': 55}, 'id-UEIdentityIndexValue': {'type': 'ProtocolIE-ID', 'value': 80}, 'id-UEInformationTransfer': {'type': 'ProcedureCode', 'value': 59}, 'id-UEPagingID': {'type': 'ProtocolIE-ID', 'value': 43}, 'id-UERadioCapability': {'type': 'ProtocolIE-ID', 'value': 74}, 'id-UERadioCapabilityForPaging': {'type': 'ProtocolIE-ID', 'value': 198}, 'id-UERadioCapabilityMatch': {'type': 'ProcedureCode', 'value': 48}, 'id-UESecurityCapabilities': {'type': 'ProtocolIE-ID', 'value': 107}, 'id-UESidelinkAggregateMaximumBitrate': {'type': 'ProtocolIE-ID', 'value': 248}, 'id-UEUserPlaneCIoTSupportIndicator': {'type': 'ProtocolIE-ID', 'value': 241}, 'id-UL-CP-SecurityInformation': {'type': 'ProtocolIE-ID', 'value': 254}, 'id-ULCOUNTValueExtended': {'type': 'ProtocolIE-ID', 'value': 179}, 'id-ULCOUNTValuePDCP-SNlength18': {'type': 'ProtocolIE-ID', 'value': 217}, 'id-UTRANtoLTEHOInformationRes': {'type': 'ProtocolIE-ID', 'value': 57}, 'id-UplinkS1cdma2000tunnelling': {'type': 'ProcedureCode', 'value': 20}, 'id-UserLocationInformation': {'type': 'ProtocolIE-ID', 'value': 189}, 'id-V2XServicesAuthorized': {'type': 'ProtocolIE-ID', 'value': 240}, 'id-VoiceSupportMatchIndicator': {'type': 'ProtocolIE-ID', 'value': 169}, 'id-WarningAreaList': {'type': 'ProtocolIE-ID', 'value': 113}, 'id-WarningMessageContents': {'type': 'ProtocolIE-ID', 'value': 119}, 'id-WarningSecurityInfo': {'type': 'ProtocolIE-ID', 'value': 117}, 'id-WarningType': {'type': 'ProtocolIE-ID', 'value': 116}, 'id-WriteReplaceWarning': {'type': 'ProcedureCode', 'value': 36}, 'id-cdma2000HORequiredIndication': {'type': 'ProtocolIE-ID', 'value': 84}, 'id-cdma2000HOStatus': {'type': 'ProtocolIE-ID', 'value': 83}, 'id-cdma2000OneXRAND': {'type': 'ProtocolIE-ID', 'value': 97}, 'id-cdma2000OneXSRVCCInfo': {'type': 'ProtocolIE-ID', 'value': 102}, 'id-cdma2000PDU': {'type': 'ProtocolIE-ID', 'value': 70}, 'id-cdma2000RATType': {'type': 'ProtocolIE-ID', 'value': 71}, 'id-cdma2000SectorID': {'type': 'ProtocolIE-ID', 'value': 72}, 'id-downlinkNASTransport': {'type': 'ProcedureCode', 'value': 11}, 'id-downlinkNonUEAssociatedLPPaTransport': {'type': 'ProcedureCode', 'value': 46}, 'id-downlinkUEAssociatedLPPaTransport': {'type': 'ProcedureCode', 'value': 44}, 'id-eNB-StatusTransfer-TransparentContainer': {'type': 'ProtocolIE-ID', 'value': 90}, 'id-eNB-UE-S1AP-ID': {'type': 'ProtocolIE-ID', 'value': 8}, 'id-eNBCPRelocationIndication': {'type': 'ProcedureCode', 'value': 60}, 'id-eNBConfigurationTransfer': {'type': 'ProcedureCode', 'value': 40}, 'id-eNBDirectInformationTransfer': {'type': 'ProcedureCode', 'value': 37}, 'id-eNBIndirectX2TransportLayerAddresses': {'type': 'ProtocolIE-ID', 'value': 193}, 'id-eNBStatusTransfer': {'type': 'ProcedureCode', 'value': 24}, 'id-eNBX2ExtendedTransportLayerAddresses': {'type': 'ProtocolIE-ID', 'value': 153}, 'id-eNBname': {'type': 'ProtocolIE-ID', 'value': 60}, 'id-extended-UEIdentityIndexValue': {'type': 'ProtocolIE-ID', 'value': 231}, 'id-initialUEMessage': {'type': 'ProcedureCode', 'value': 12}, 'id-pagingDRX': {'type': 'ProtocolIE-ID', 'value': 44}, 'id-uE-HistoryInformationFromTheUE': {'type': 'ProtocolIE-ID', 'value': 194}, 'id-uEaggregateMaximumBitrate': {'type': 'ProtocolIE-ID', 'value': 66}, 'id-uplinkNASTransport': {'type': 'ProcedureCode', 'value': 13}, 'id-uplinkNonUEAssociatedLPPaTransport': {'type': 'ProcedureCode', 'value': 47}, 'id-uplinkUEAssociatedLPPaTransport': {'type': 'ProcedureCode', 'value': 45}, 'id-x2TNLConfigurationInfo': {'type': 'ProtocolIE-ID', 'value': 152}, 'maxEARFCN': {'type': 'INTEGER', 'value': 262143}, 'maxPrivateIEs': {'type': 'INTEGER', 'value': 65535}, 'maxProtocolExtensions': {'type': 'INTEGER', 'value': 65535}, 'maxProtocolIEs': {'type': 'INTEGER', 'value': 65535}, 'maxnoofBPLMNs': {'type': 'INTEGER', 'value': 6}, 'maxnoofCSGs': {'type': 'INTEGER', 'value': 256}, 'maxnoofCellID': {'type': 'INTEGER', 'value': 65535}, 'maxnoofCellIDforMDT': {'type': 'INTEGER', 'value': 32}, 'maxnoofCellinEAI': {'type': 'INTEGER', 'value': 65535}, 'maxnoofCellinTAI': {'type': 'INTEGER', 'value': 65535}, 'maxnoofCells': {'type': 'INTEGER', 'value': 16}, 'maxnoofCellsforRestart': {'type': 'INTEGER', 'value': 256}, 'maxnoofCellsineNB': {'type': 'INTEGER', 'value': 256}, 'maxnoofDCNs': {'type': 'INTEGER', 'value': 32}, 'maxnoofE-RABs': {'type': 'INTEGER', 'value': 256}, 'maxnoofEPLMNs': {'type': 'INTEGER', 'value': 15}, 'maxnoofEPLMNsPlusOne': {'type': 'INTEGER', 'value': 16}, 'maxnoofEmergencyAreaID': {'type': 'INTEGER', 'value': 65535}, 'maxnoofErrors': {'type': 'INTEGER', 'value': 256}, 'maxnoofForbLACs': {'type': 'INTEGER', 'value': 4096}, 'maxnoofForbTACs': {'type': 'INTEGER', 'value': 4096}, 'maxnoofGroupIDs': {'type': 'INTEGER', 'value': 65535}, 'maxnoofIndividualS1ConnectionsToReset': {'type': 'INTEGER', 'value': 256}, 'maxnoofMBSFNAreaMDT': {'type': 'INTEGER', 'value': 8}, 'maxnoofMDTPLMNs': {'type': 'INTEGER', 'value': 16}, 'maxnoofMMECs': {'type': 'INTEGER', 'value': 256}, 'maxnoofPLMNsPerMME': {'type': 'INTEGER', 'value': 32}, 'maxnoofRATs': {'type': 'INTEGER', 'value': 8}, 'maxnoofRecommendedCells': {'type': 'INTEGER', 'value': 16}, 'maxnoofRecommendedENBs': {'type': 'INTEGER', 'value': 16}, 'maxnoofRestartEmergencyAreaIDs': {'type': 'INTEGER', 'value': 256}, 'maxnoofRestartTAIs': {'type': 'INTEGER', 'value': 2048}, 'maxnoofTACs': {'type': 'INTEGER', 'value': 256}, 'maxnoofTAIforWarning': {'type': 'INTEGER', 'value': 65535}, 'maxnoofTAIs': {'type': 'INTEGER', 'value': 256}, 'maxnoofTAforMDT': {'type': 'INTEGER', 'value': 8}, 'maxnoofeNBX2ExtTLAs': {'type': 'INTEGER', 'value': 16}, 'maxnoofeNBX2GTPTLAs': {'type': 'INTEGER', 'value': 16}, 'maxnoofeNBX2TLAs': {'type': 'INTEGER', 'value': 2}}}, 'S1AP-Containers': {'extensibility-implied': False, 'imports': {'S1AP-CommonDataTypes': ['Criticality', 'Presence', 'PrivateIE-ID', 'ProtocolExtensionID', 'ProtocolIE-ID'], 'S1AP-Constants': ['maxPrivateIEs', 'maxProtocolExtensions', 'maxProtocolIEs']}, 'object-classes': {'S1AP-PRIVATE-IES': {'members': [{'name': '&id', 'type': 'PrivateIE-ID'}, {'name': '&criticality', 'type': 'Criticality'}, {'name': '&Value', 'type': 'OpenType'}, {'name': '&presence', 'type': 'Presence'}]}, 'S1AP-PROTOCOL-EXTENSION': {'members': [{'name': '&id', 'type': 'ProtocolExtensionID'}, {'name': '&criticality', 'type': 'Criticality'}, {'name': '&Extension', 'type': 'OpenType'}, {'name': '&presence', 'type': 'Presence'}]}, 'S1AP-PROTOCOL-IES': {'members': [{'name': '&id', 'type': 'ProtocolIE-ID'}, {'name': '&criticality', 'type': 'Criticality'}, {'name': '&Value', 'type': 'OpenType'}, {'name': '&presence', 'type': 'Presence'}]}, 'S1AP-PROTOCOL-IES-PAIR': {'members': [{'name': '&id', 'type': 'ProtocolIE-ID'}, {'name': '&firstCriticality', 'type': 'Criticality'}, {'name': '&FirstValue', 'type': 'OpenType'}, {'name': '&secondCriticality', 'type': 'Criticality'}, {'name': '&SecondValue', 'type': 'OpenType'}, {'name': '&presence', 'type': 'Presence'}]}}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'PrivateIE-Container': {'element': {'actual-parameters': ['{'], 'type': 'PrivateIE-Field'}, 'parameters': ['IEsSetParam'], 'size': [(1, 'maxPrivateIEs')], 'type': 'SEQUENCE OF'}, 'PrivateIE-Field': {'members': [{'name': 'id', 'table': {'type': 'IEsSetParam'}, 'type': 'S1AP-PRIVATE-IES.&id'}, {'name': 'criticality', 'table': ['IEsSetParam', ['id']], 'type': 'S1AP-PRIVATE-IES.&criticality'}, {'name': 'value', 'table': ['IEsSetParam', ['id']], 'type': 'S1AP-PRIVATE-IES.&Value'}], 'parameters': ['IEsSetParam'], 'type': 'SEQUENCE'}, 'ProtocolExtensionContainer': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolExtensionField'}, 'parameters': ['ExtensionSetParam'], 'size': [(1, 'maxProtocolExtensions')], 'type': 'SEQUENCE ' 'OF'}, 'ProtocolExtensionField': {'members': [{'name': 'id', 'table': {'type': 'ExtensionSetParam'}, 'type': 'S1AP-PROTOCOL-EXTENSION.&id'}, {'name': 'criticality', 'table': ['ExtensionSetParam', ['id']], 'type': 'S1AP-PROTOCOL-EXTENSION.&criticality'}, {'name': 'extensionValue', 'table': ['ExtensionSetParam', ['id']], 'type': 'S1AP-PROTOCOL-EXTENSION.&Extension'}], 'parameters': ['ExtensionSetParam'], 'type': 'SEQUENCE'}, 'ProtocolIE-Container': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-Field'}, 'parameters': ['IEsSetParam'], 'size': [(0, 'maxProtocolIEs')], 'type': 'SEQUENCE OF'}, 'ProtocolIE-ContainerList': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'parameters': ['lowerBound', 'upperBound', 'IEsSetParam'], 'size': [('lowerBound', 'upperBound')], 'type': 'SEQUENCE ' 'OF'}, 'ProtocolIE-ContainerPair': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-FieldPair'}, 'parameters': ['IEsSetParam'], 'size': [(0, 'maxProtocolIEs')], 'type': 'SEQUENCE ' 'OF'}, 'ProtocolIE-ContainerPairList': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-ContainerPair'}, 'parameters': ['lowerBound', 'upperBound', 'IEsSetParam'], 'size': [('lowerBound', 'upperBound')], 'type': 'SEQUENCE ' 'OF'}, 'ProtocolIE-Field': {'members': [{'name': 'id', 'table': {'type': 'IEsSetParam'}, 'type': 'S1AP-PROTOCOL-IES.&id'}, {'name': 'criticality', 'table': ['IEsSetParam', ['id']], 'type': 'S1AP-PROTOCOL-IES.&criticality'}, {'name': 'value', 'table': ['IEsSetParam', ['id']], 'type': 'S1AP-PROTOCOL-IES.&Value'}], 'parameters': ['IEsSetParam'], 'type': 'SEQUENCE'}, 'ProtocolIE-FieldPair': {'members': [{'name': 'id', 'table': {'type': 'IEsSetParam'}, 'type': 'S1AP-PROTOCOL-IES-PAIR.&id'}, {'name': 'firstCriticality', 'table': ['IEsSetParam', ['id']], 'type': 'S1AP-PROTOCOL-IES-PAIR.&firstCriticality'}, {'name': 'firstValue', 'table': ['IEsSetParam', ['id']], 'type': 'S1AP-PROTOCOL-IES-PAIR.&FirstValue'}, {'name': 'secondCriticality', 'table': ['IEsSetParam', ['id']], 'type': 'S1AP-PROTOCOL-IES-PAIR.&secondCriticality'}, {'name': 'secondValue', 'table': ['IEsSetParam', ['id']], 'type': 'S1AP-PROTOCOL-IES-PAIR.&SecondValue'}], 'parameters': ['IEsSetParam'], 'type': 'SEQUENCE'}, 'ProtocolIE-SingleContainer': {'actual-parameters': ['{'], 'parameters': ['IEsSetParam'], 'type': 'ProtocolIE-Field'}}, 'values': {}}, 'S1AP-IEs': {'extensibility-implied': False, 'imports': {'S1AP-CommonDataTypes': ['Criticality', 'ProcedureCode', 'ProtocolIE-ID', 'TriggeringMessage'], 'S1AP-Constants': ['id-Bearers-SubjectToStatusTransfer-Item', 'id-DLCOUNTValueExtended', 'id-DLCOUNTValuePDCP-SNlength18', 'id-E-RABInformationListItem', 'id-E-RABItem', 'id-HO-Cause', 'id-LoggedMBSFNMDT', 'id-M3Configuration', 'id-M4Configuration', 'id-M5Configuration', 'id-M6Configuration', 'id-M7Configuration', 'id-MDT-Location-Info', 'id-MDTConfiguration', 'id-MobilityInformation', 'id-Muting-Availability-Indication', 'id-Muting-Pattern-Information', 'id-ProSeUEtoNetworkRelaying', 'id-RAT-Type', 'id-ReceiveStatusOfULPDCPSDUsExtended', 'id-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18', 'id-RecommendedCellItem', 'id-RecommendedENBItem', 'id-SON-Information-Report', 'id-SignallingBasedMDTPLMNList', 'id-Synchronisation-Information', 'id-Time-Synchronisation-Info', 'id-Time-UE-StayedInCell-EnhancedGranularity', 'id-ULCOUNTValueExtended', 'id-ULCOUNTValuePDCP-SNlength18', 'id-eNBIndirectX2TransportLayerAddresses', 'id-eNBX2ExtendedTransportLayerAddresses', 'id-uE-HistoryInformationFromTheUE', 'id-x2TNLConfigurationInfo', 'maxEARFCN', 'maxnoofBPLMNs', 'maxnoofCSGs', 'maxnoofCellID', 'maxnoofCellIDforMDT', 'maxnoofCellinEAI', 'maxnoofCellinTAI', 'maxnoofCells', 'maxnoofCellsforRestart', 'maxnoofCellsineNB', 'maxnoofDCNs', 'maxnoofE-RABs', 'maxnoofEPLMNs', 'maxnoofEPLMNsPlusOne', 'maxnoofEmergencyAreaID', 'maxnoofErrors', 'maxnoofForbLACs', 'maxnoofForbTACs', 'maxnoofGroupIDs', 'maxnoofMBSFNAreaMDT', 'maxnoofMDTPLMNs', 'maxnoofMMECs', 'maxnoofPLMNsPerMME', 'maxnoofRATs', 'maxnoofRecommendedCells', 'maxnoofRecommendedENBs', 'maxnoofRestartEmergencyAreaIDs', 'maxnoofRestartTAIs', 'maxnoofTACs', 'maxnoofTAIforWarning', 'maxnoofTAforMDT', 'maxnoofeNBX2ExtTLAs', 'maxnoofeNBX2GTPTLAs', 'maxnoofeNBX2TLAs'], 'S1AP-Containers': ['ProtocolExtensionContainer', 'ProtocolIE-SingleContainer', 'S1AP-PROTOCOL-EXTENSION', 'S1AP-PROTOCOL-IES', '{', '{', '}', '}']}, 'object-classes': {}, 'object-sets': {'Additional-GUTI-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'AllocationAndRetentionPriority-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'AssistanceDataForPaging-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'AssistanceDataForRecommendedCells-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'Bearers-SubjectToStatusTransfer-ItemExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'Bearers-SubjectToStatusTransfer-ItemIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'CGI-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'COUNTValueExtended-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'COUNTvalue-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'COUNTvaluePDCP-SNlength18-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CSG-IdList-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CancelledCellinEAI-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CancelledCellinTAI-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'Cdma2000OneXSRVCCInfo-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CellBasedMDT-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CellID-Broadcast-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CellID-Cancelled-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CellIdentifierAndCELevelForCECapableUEs-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CellType-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CompletedCellinEAI-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CompletedCellinTAI-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CriticalityDiagnostics-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CriticalityDiagnostics-IE-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'DL-CP-SecurityInformation-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABInformationListIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABInformationListItem-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABItem-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABItemIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABQoSParameters-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'ENB-StatusTransfer-TransparentContainer-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'ENBX2ExtTLA-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'EUTRAN-CGI-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'EmergencyAreaID-Broadcast-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'EmergencyAreaID-Cancelled-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'ExpectedUEActivityBehaviour-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'ExpectedUEBehaviour-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'ForbiddenLAs-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'ForbiddenTAs-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'GBR-QosInformation-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'GERAN-Cell-ID-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'GUMMEI-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'GlobalENB-ID-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'HandoverRestrictionList-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'ImmediateMDT-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'InformationForCECapableUEs-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'InformationOnRecommendedCellsAndENBsForPaging-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'LAI-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'LastVisitedEUTRANCellInformation-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'ListeningSubframePattern-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'LoggedMBSFNMDT-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'LoggedMDT-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'M1PeriodicReporting-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'M1ThresholdEventA2-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'M3Configuration-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'M4Configuration-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'M5Configuration-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'M6Configuration-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'M7Configuration-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'MBSFN-ResultToLogInfo-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'MDT-Configuration-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'MDTMode-ExtensionIE': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'MutingPatternInformation-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'NB-IoT-Paging-eDRXInformation-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'Paging-eDRXInformation-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'PagingAttemptInformation-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'ProSeAuthorized-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'RIMTransfer-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'RLFReportInformation-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'RecommendedCellItemIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'RecommendedCellsForPaging-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'RecommendedCellsForPagingItem-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'RecommendedENBItem-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'RecommendedENBItemIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'RecommendedENBsForPaging-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'RequestType-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'S-TMSI-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'SONConfigurationTransfer-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'SONInformation-ExtensionIE': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'SONInformationReply-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'SecurityContext-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'ServedDCNsItem-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'ServedGUMMEIsItem-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'SourceeNB-ID-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'SourceeNB-ToTargeteNB-TransparentContainer-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'SupportedTAs-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'SynchronisationInformation-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'TABasedMDT-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'TAI-Broadcast-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'TAI-Cancelled-Item-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'TAI-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'TAIBasedMDT-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'TargetRNC-ID-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'TargeteNB-ID-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'TargeteNB-ToSourceeNB-TransparentContainer-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'TimeSynchronisationInfo-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'TraceActivation-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'Tunnel-Information-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'UE-S1AP-ID-pair-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'UE-Sidelink-Aggregate-MaximumBitrates-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'UE-associatedLogicalS1-ConnectionItemExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'UEAggregate-MaximumBitrates-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'UESecurityCapabilities-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'UL-CP-SecurityInformation-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'UserLocationInformation-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'V2XServicesAuthorized-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'X2TNLConfigurationInfo-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}}, 'tags': 'AUTOMATIC', 'types': {'Additional-GUTI': {'members': [{'name': 'gUMMEI', 'type': 'GUMMEI'}, {'name': 'm-TMSI', 'type': 'M-TMSI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'AdditionalCSFallbackIndicator': {'type': 'ENUMERATED', 'values': [('no-restriction', 0), ('restriction', 1), None]}, 'AllocationAndRetentionPriority': {'members': [{'name': 'priorityLevel', 'type': 'PriorityLevel'}, {'name': 'pre-emptionCapability', 'type': 'Pre-emptionCapability'}, {'name': 'pre-emptionVulnerability', 'type': 'Pre-emptionVulnerability'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'AreaScopeOfMDT': {'members': [{'name': 'cellBased', 'type': 'CellBasedMDT'}, {'name': 'tABased', 'type': 'TABasedMDT'}, {'name': 'pLMNWide', 'type': 'NULL'}, None, {'name': 'tAIBased', 'type': 'TAIBasedMDT'}], 'type': 'CHOICE'}, 'AssistanceDataForCECapableUEs': {'members': [{'name': 'cellIdentifierAndCELevelForCECapableUEs', 'type': 'CellIdentifierAndCELevelForCECapableUEs'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'AssistanceDataForPaging': {'members': [{'name': 'assistanceDataForRecommendedCells', 'optional': True, 'type': 'AssistanceDataForRecommendedCells'}, {'name': 'assistanceDataForCECapableUEs', 'optional': True, 'type': 'AssistanceDataForCECapableUEs'}, {'name': 'pagingAttemptInformation', 'optional': True, 'type': 'PagingAttemptInformation'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'AssistanceDataForRecommendedCells': {'members': [{'name': 'recommendedCellsForPaging', 'type': 'RecommendedCellsForPaging'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'BPLMNs': {'element': {'type': 'PLMNidentity'}, 'size': [(1, 'maxnoofBPLMNs')], 'type': 'SEQUENCE OF'}, 'BearerType': {'type': 'ENUMERATED', 'values': [('non-IP', 0), None]}, 'Bearers-SubjectToStatusTransfer-Item': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'uL-COUNTvalue', 'type': 'COUNTvalue'}, {'name': 'dL-COUNTvalue', 'type': 'COUNTvalue'}, {'name': 'receiveStatusofULPDCPSDUs', 'optional': True, 'type': 'ReceiveStatusofULPDCPSDUs'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'Bearers-SubjectToStatusTransferList': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofE-RABs')], 'type': 'SEQUENCE ' 'OF'}, 'BitRate': {'restricted-to': [(0, 10000000000)], 'type': 'INTEGER'}, 'BroadcastCancelledAreaList': {'members': [{'name': 'cellID-Cancelled', 'type': 'CellID-Cancelled'}, {'name': 'tAI-Cancelled', 'type': 'TAI-Cancelled'}, {'name': 'emergencyAreaID-Cancelled', 'type': 'EmergencyAreaID-Cancelled'}, None], 'type': 'CHOICE'}, 'BroadcastCompletedAreaList': {'members': [{'name': 'cellID-Broadcast', 'type': 'CellID-Broadcast'}, {'name': 'tAI-Broadcast', 'type': 'TAI-Broadcast'}, {'name': 'emergencyAreaID-Broadcast', 'type': 'EmergencyAreaID-Broadcast'}, None], 'type': 'CHOICE'}, 'CE-mode-B-SupportIndicator': {'type': 'ENUMERATED', 'values': [('supported', 0), None]}, 'CELevel': {'type': 'OCTET STRING'}, 'CGI': {'members': [{'name': 'pLMNidentity', 'type': 'PLMNidentity'}, {'name': 'lAC', 'type': 'LAC'}, {'name': 'cI', 'type': 'CI'}, {'name': 'rAC', 'optional': True, 'type': 'RAC'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CI': {'size': [2], 'type': 'OCTET STRING'}, 'CNDomain': {'type': 'ENUMERATED', 'values': [('ps', 0), ('cs', 1)]}, 'COUNTValueExtended': {'members': [{'name': 'pDCP-SNExtended', 'type': 'PDCP-SNExtended'}, {'name': 'hFNModified', 'type': 'HFNModified'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'COUNTvalue': {'members': [{'name': 'pDCP-SN', 'type': 'PDCP-SN'}, {'name': 'hFN', 'type': 'HFN'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'COUNTvaluePDCP-SNlength18': {'members': [{'name': 'pDCP-SNlength18', 'type': 'PDCP-SNlength18'}, {'name': 'hFNforPDCP-SNlength18', 'type': 'HFNforPDCP-SNlength18'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CSFallbackIndicator': {'type': 'ENUMERATED', 'values': [('cs-fallback-required', 0), None, ('cs-fallback-high-priority', 1)]}, 'CSG-Id': {'size': [27], 'type': 'BIT STRING'}, 'CSG-IdList': {'element': {'type': 'CSG-IdList-Item'}, 'size': [(1, 'maxnoofCSGs')], 'type': 'SEQUENCE OF'}, 'CSG-IdList-Item': {'members': [{'name': 'cSG-Id', 'type': 'CSG-Id'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CSGMembershipStatus': {'type': 'ENUMERATED', 'values': [('member', 0), ('not-member', 1)]}, 'CancelledCellinEAI': {'element': {'type': 'CancelledCellinEAI-Item'}, 'size': [(1, 'maxnoofCellinEAI')], 'type': 'SEQUENCE OF'}, 'CancelledCellinEAI-Item': {'members': [{'name': 'eCGI', 'type': 'EUTRAN-CGI'}, {'name': 'numberOfBroadcasts', 'type': 'NumberOfBroadcasts'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CancelledCellinTAI': {'element': {'type': 'CancelledCellinTAI-Item'}, 'size': [(1, 'maxnoofCellinTAI')], 'type': 'SEQUENCE OF'}, 'CancelledCellinTAI-Item': {'members': [{'name': 'eCGI', 'type': 'EUTRAN-CGI'}, {'name': 'numberOfBroadcasts', 'type': 'NumberOfBroadcasts'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'Cause': {'members': [{'name': 'radioNetwork', 'type': 'CauseRadioNetwork'}, {'name': 'transport', 'type': 'CauseTransport'}, {'name': 'nas', 'type': 'CauseNas'}, {'name': 'protocol', 'type': 'CauseProtocol'}, {'name': 'misc', 'type': 'CauseMisc'}, None], 'type': 'CHOICE'}, 'CauseMisc': {'type': 'ENUMERATED', 'values': [('control-processing-overload', 0), ('not-enough-user-plane-processing-resources', 1), ('hardware-failure', 2), ('om-intervention', 3), ('unspecified', 4), ('unknown-PLMN', 5), None]}, 'CauseNas': {'type': 'ENUMERATED', 'values': [('normal-release', 0), ('authentication-failure', 1), ('detach', 2), ('unspecified', 3), None, ('csg-subscription-expiry', 4)]}, 'CauseProtocol': {'type': 'ENUMERATED', 'values': [('transfer-syntax-error', 0), ('abstract-syntax-error-reject', 1), ('abstract-syntax-error-ignore-and-notify', 2), ('message-not-compatible-with-receiver-state', 3), ('semantic-error', 4), ('abstract-syntax-error-falsely-constructed-message', 5), ('unspecified', 6), None]}, 'CauseRadioNetwork': {'type': 'ENUMERATED', 'values': [('unspecified', 0), ('tx2relocoverall-expiry', 1), ('successful-handover', 2), ('release-due-to-eutran-generated-reason', 3), ('handover-cancelled', 4), ('partial-handover', 5), ('ho-failure-in-target-EPC-eNB-or-target-system', 6), ('ho-target-not-allowed', 7), ('tS1relocoverall-expiry', 8), ('tS1relocprep-expiry', 9), ('cell-not-available', 10), ('unknown-targetID', 11), ('no-radio-resources-available-in-target-cell', 12), ('unknown-mme-ue-s1ap-id', 13), ('unknown-enb-ue-s1ap-id', 14), ('unknown-pair-ue-s1ap-id', 15), ('handover-desirable-for-radio-reason', 16), ('time-critical-handover', 17), ('resource-optimisation-handover', 18), ('reduce-load-in-serving-cell', 19), ('user-inactivity', 20), ('radio-connection-with-ue-lost', 21), ('load-balancing-tau-required', 22), ('cs-fallback-triggered', 23), ('ue-not-available-for-ps-service', 24), ('radio-resources-not-available', 25), ('failure-in-radio-interface-procedure', 26), ('invalid-qos-combination', 27), ('interrat-redirection', 28), ('interaction-with-other-procedure', 29), ('unknown-E-RAB-ID', 30), ('multiple-E-RAB-ID-instances', 31), ('encryption-and-or-integrity-protection-algorithms-not-supported', 32), ('s1-intra-system-handover-triggered', 33), ('s1-inter-system-handover-triggered', 34), ('x2-handover-triggered', 35), None, ('redirection-towards-1xRTT', 36), ('not-supported-QCI-value', 37), ('invalid-CSG-Id', 38), ('release-due-to-pre-emption', 39)]}, 'CauseTransport': {'type': 'ENUMERATED', 'values': [('transport-resource-unavailable', 0), ('unspecified', 1), None]}, 'Cdma2000HORequiredIndication': {'type': 'ENUMERATED', 'values': [('true', 0), None]}, 'Cdma2000HOStatus': {'type': 'ENUMERATED', 'values': [('hOSuccess', 0), ('hOFailure', 1), None]}, 'Cdma2000OneXMEID': {'type': 'OCTET STRING'}, 'Cdma2000OneXMSI': {'type': 'OCTET STRING'}, 'Cdma2000OneXPilot': {'type': 'OCTET STRING'}, 'Cdma2000OneXRAND': {'type': 'OCTET STRING'}, 'Cdma2000OneXSRVCCInfo': {'members': [{'name': 'cdma2000OneXMEID', 'type': 'Cdma2000OneXMEID'}, {'name': 'cdma2000OneXMSI', 'type': 'Cdma2000OneXMSI'}, {'name': 'cdma2000OneXPilot', 'type': 'Cdma2000OneXPilot'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'Cdma2000PDU': {'type': 'OCTET STRING'}, 'Cdma2000RATType': {'type': 'ENUMERATED', 'values': [('hRPD', 0), ('onexRTT', 1), None]}, 'Cdma2000SectorID': {'type': 'OCTET STRING'}, 'Cell-Size': {'type': 'ENUMERATED', 'values': [('verysmall', 0), ('small', 1), ('medium', 2), ('large', 3), None]}, 'CellAccessMode': {'type': 'ENUMERATED', 'values': [('hybrid', 0), None]}, 'CellBasedMDT': {'members': [{'name': 'cellIdListforMDT', 'type': 'CellIdListforMDT'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CellID-Broadcast': {'element': {'type': 'CellID-Broadcast-Item'}, 'size': [(1, 'maxnoofCellID')], 'type': 'SEQUENCE OF'}, 'CellID-Broadcast-Item': {'members': [{'name': 'eCGI', 'type': 'EUTRAN-CGI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CellID-Cancelled': {'element': {'type': 'CellID-Cancelled-Item'}, 'size': [(1, 'maxnoofCellID')], 'type': 'SEQUENCE OF'}, 'CellID-Cancelled-Item': {'members': [{'name': 'eCGI', 'type': 'EUTRAN-CGI'}, {'name': 'numberOfBroadcasts', 'type': 'NumberOfBroadcasts'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CellIdListforMDT': {'element': {'type': 'EUTRAN-CGI'}, 'size': [(1, 'maxnoofCellIDforMDT')], 'type': 'SEQUENCE OF'}, 'CellIdentifierAndCELevelForCECapableUEs': {'members': [{'name': 'global-Cell-ID', 'type': 'EUTRAN-CGI'}, {'name': 'cELevel', 'type': 'CELevel'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CellIdentity': {'size': [28], 'type': 'BIT STRING'}, 'CellType': {'members': [{'name': 'cell-Size', 'type': 'Cell-Size'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CompletedCellinEAI': {'element': {'type': 'CompletedCellinEAI-Item'}, 'size': [(1, 'maxnoofCellinEAI')], 'type': 'SEQUENCE OF'}, 'CompletedCellinEAI-Item': {'members': [{'name': 'eCGI', 'type': 'EUTRAN-CGI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CompletedCellinTAI': {'element': {'type': 'CompletedCellinTAI-Item'}, 'size': [(1, 'maxnoofCellinTAI')], 'type': 'SEQUENCE OF'}, 'CompletedCellinTAI-Item': {'members': [{'name': 'eCGI', 'type': 'EUTRAN-CGI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'ConcurrentWarningMessageIndicator': {'type': 'ENUMERATED', 'values': [('true', 0)]}, 'Correlation-ID': {'size': [4], 'type': 'OCTET STRING'}, 'Coverage-Level': {'type': 'ENUMERATED', 'values': [('extendedcoverage', 0), None]}, 'CriticalityDiagnostics': {'members': [{'name': 'procedureCode', 'optional': True, 'type': 'ProcedureCode'}, {'name': 'triggeringMessage', 'optional': True, 'type': 'TriggeringMessage'}, {'name': 'procedureCriticality', 'optional': True, 'type': 'Criticality'}, {'name': 'iEsCriticalityDiagnostics', 'optional': True, 'type': 'CriticalityDiagnostics-IE-List'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CriticalityDiagnostics-IE-Item': {'members': [{'name': 'iECriticality', 'type': 'Criticality'}, {'name': 'iE-ID', 'type': 'ProtocolIE-ID'}, {'name': 'typeOfError', 'type': 'TypeOfError'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CriticalityDiagnostics-IE-List': {'element': {'type': 'CriticalityDiagnostics-IE-Item'}, 'size': [(1, 'maxnoofErrors')], 'type': 'SEQUENCE ' 'OF'}, 'DCN-ID': {'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, 'DL-CP-SecurityInformation': {'members': [{'name': 'dl-NAS-MAC', 'type': 'DL-NAS-MAC'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'DL-Forwarding': {'type': 'ENUMERATED', 'values': [('dL-Forwarding-proposed', 0), None]}, 'DL-NAS-MAC': {'size': [16], 'type': 'BIT STRING'}, 'DLNASPDUDeliveryAckRequest': {'type': 'ENUMERATED', 'values': [('requested', 0), None]}, 'Data-Forwarding-Not-Possible': {'type': 'ENUMERATED', 'values': [('data-Forwarding-not-Possible', 0), None]}, 'DataCodingScheme': {'size': [8], 'type': 'BIT STRING'}, 'Direct-Forwarding-Path-Availability': {'type': 'ENUMERATED', 'values': [('directPathAvailable', 0), None]}, 'E-RAB-ID': {'restricted-to': [(0, 15), None], 'type': 'INTEGER'}, 'E-RABInformationList': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofE-RABs')], 'type': 'SEQUENCE OF'}, 'E-RABInformationListItem': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'dL-Forwarding', 'optional': True, 'type': 'DL-Forwarding'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABItem': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'cause', 'type': 'Cause'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABLevelQoSParameters': {'members': [{'name': 'qCI', 'type': 'QCI'}, {'name': 'allocationRetentionPriority', 'type': 'AllocationAndRetentionPriority'}, {'name': 'gbrQosInformation', 'optional': True, 'type': 'GBR-QosInformation'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABList': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofE-RABs')], 'type': 'SEQUENCE OF'}, 'E-UTRAN-Trace-ID': {'size': [8], 'type': 'OCTET STRING'}, 'EARFCN': {'restricted-to': [(0, 'maxEARFCN'), None], 'type': 'INTEGER'}, 'ECGI-List': {'element': {'type': 'EUTRAN-CGI'}, 'size': [(1, 'maxnoofCellsineNB')], 'type': 'SEQUENCE OF'}, 'ECGIList': {'element': {'type': 'EUTRAN-CGI'}, 'size': [(1, 'maxnoofCellID')], 'type': 'SEQUENCE OF'}, 'ECGIListForRestart': {'element': {'type': 'EUTRAN-CGI'}, 'size': [(1, 'maxnoofCellsforRestart')], 'type': 'SEQUENCE OF'}, 'ENB-ID': {'members': [{'name': 'macroENB-ID', 'size': [20], 'type': 'BIT STRING'}, {'name': 'homeENB-ID', 'size': [28], 'type': 'BIT STRING'}, None, {'name': 'short-macroENB-ID', 'size': [18], 'type': 'BIT STRING'}, {'name': 'long-macroENB-ID', 'size': [21], 'type': 'BIT STRING'}], 'type': 'CHOICE'}, 'ENB-StatusTransfer-TransparentContainer': {'members': [{'name': 'bearers-SubjectToStatusTransferList', 'type': 'Bearers-SubjectToStatusTransferList'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'ENB-UE-S1AP-ID': {'restricted-to': [(0, 16777215)], 'type': 'INTEGER'}, 'ENBIndirectX2TransportLayerAddresses': {'element': {'type': 'TransportLayerAddress'}, 'size': [(1, 'maxnoofeNBX2TLAs')], 'type': 'SEQUENCE ' 'OF'}, 'ENBX2ExtTLA': {'members': [{'name': 'iPsecTLA', 'optional': True, 'type': 'TransportLayerAddress'}, {'name': 'gTPTLAa', 'optional': True, 'type': 'ENBX2GTPTLAs'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'ENBX2ExtTLAs': {'element': {'type': 'ENBX2ExtTLA'}, 'size': [(1, 'maxnoofeNBX2ExtTLAs')], 'type': 'SEQUENCE OF'}, 'ENBX2GTPTLAs': {'element': {'type': 'TransportLayerAddress'}, 'size': [(1, 'maxnoofeNBX2GTPTLAs')], 'type': 'SEQUENCE OF'}, 'ENBX2TLAs': {'element': {'type': 'TransportLayerAddress'}, 'size': [(1, 'maxnoofeNBX2TLAs')], 'type': 'SEQUENCE OF'}, 'ENBname': {'size': [(1, 150), None], 'type': 'PrintableString'}, 'EPLMNs': {'element': {'type': 'PLMNidentity'}, 'size': [(1, 'maxnoofEPLMNs')], 'type': 'SEQUENCE OF'}, 'EUTRAN-CGI': {'members': [{'name': 'pLMNidentity', 'type': 'PLMNidentity'}, {'name': 'cell-ID', 'type': 'CellIdentity'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'EUTRANRoundTripDelayEstimationInfo': {'restricted-to': [(0, 2047)], 'type': 'INTEGER'}, 'EmergencyAreaID': {'size': [3], 'type': 'OCTET STRING'}, 'EmergencyAreaID-Broadcast': {'element': {'type': 'EmergencyAreaID-Broadcast-Item'}, 'size': [(1, 'maxnoofEmergencyAreaID')], 'type': 'SEQUENCE OF'}, 'EmergencyAreaID-Broadcast-Item': {'members': [{'name': 'emergencyAreaID', 'type': 'EmergencyAreaID'}, {'name': 'completedCellinEAI', 'type': 'CompletedCellinEAI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'EmergencyAreaID-Cancelled': {'element': {'type': 'EmergencyAreaID-Cancelled-Item'}, 'size': [(1, 'maxnoofEmergencyAreaID')], 'type': 'SEQUENCE OF'}, 'EmergencyAreaID-Cancelled-Item': {'members': [{'name': 'emergencyAreaID', 'type': 'EmergencyAreaID'}, {'name': 'cancelledCellinEAI', 'type': 'CancelledCellinEAI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'EmergencyAreaIDList': {'element': {'type': 'EmergencyAreaID'}, 'size': [(1, 'maxnoofEmergencyAreaID')], 'type': 'SEQUENCE OF'}, 'EmergencyAreaIDListForRestart': {'element': {'type': 'EmergencyAreaID'}, 'size': [(1, 'maxnoofRestartEmergencyAreaIDs')], 'type': 'SEQUENCE ' 'OF'}, 'EncryptionAlgorithms': {'size': [16, None], 'type': 'BIT STRING'}, 'EnhancedCoverageRestricted': {'type': 'ENUMERATED', 'values': [('restricted', 0), None]}, 'EventType': {'type': 'ENUMERATED', 'values': [('direct', 0), ('change-of-serve-cell', 1), ('stop-change-of-serve-cell', 2), None]}, 'ExpectedActivityPeriod': {'restricted-to': [(1, 30), 40, 50, 60, 80, 100, 120, 150, 180, 181, None], 'type': 'INTEGER'}, 'ExpectedHOInterval': {'type': 'ENUMERATED', 'values': [('sec15', 0), ('sec30', 1), ('sec60', 2), ('sec90', 3), ('sec120', 4), ('sec180', 5), ('long-time', 6), None]}, 'ExpectedIdlePeriod': {'restricted-to': [(1, 30), 40, 50, 60, 80, 100, 120, 150, 180, 181, None], 'type': 'INTEGER'}, 'ExpectedUEActivityBehaviour': {'members': [{'name': 'expectedActivityPeriod', 'optional': True, 'type': 'ExpectedActivityPeriod'}, {'name': 'expectedIdlePeriod', 'optional': True, 'type': 'ExpectedIdlePeriod'}, {'name': 'sourceofUEActivityBehaviourInformation', 'optional': True, 'type': 'SourceOfUEActivityBehaviourInformation'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'ExpectedUEBehaviour': {'members': [{'name': 'expectedActivity', 'optional': True, 'type': 'ExpectedUEActivityBehaviour'}, {'name': 'expectedHOInterval', 'optional': True, 'type': 'ExpectedHOInterval'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'Extended-UEIdentityIndexValue': {'size': [14], 'type': 'BIT STRING'}, 'ExtendedRNC-ID': {'restricted-to': [(4096, 65535)], 'type': 'INTEGER'}, 'ExtendedRepetitionPeriod': {'restricted-to': [(4096, 131071)], 'type': 'INTEGER'}, 'ForbiddenInterRATs': {'type': 'ENUMERATED', 'values': [('all', 0), ('geran', 1), ('utran', 2), ('cdma2000', 3), None, ('geranandutran', 4), ('cdma2000andutran', 5)]}, 'ForbiddenLACs': {'element': {'type': 'LAC'}, 'size': [(1, 'maxnoofForbLACs')], 'type': 'SEQUENCE OF'}, 'ForbiddenLAs': {'element': {'type': 'ForbiddenLAs-Item'}, 'size': [(1, 'maxnoofEPLMNsPlusOne')], 'type': 'SEQUENCE OF'}, 'ForbiddenLAs-Item': {'members': [{'name': 'pLMN-Identity', 'type': 'PLMNidentity'}, {'name': 'forbiddenLACs', 'type': 'ForbiddenLACs'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'ForbiddenTACs': {'element': {'type': 'TAC'}, 'size': [(1, 'maxnoofForbTACs')], 'type': 'SEQUENCE OF'}, 'ForbiddenTAs': {'element': {'type': 'ForbiddenTAs-Item'}, 'size': [(1, 'maxnoofEPLMNsPlusOne')], 'type': 'SEQUENCE OF'}, 'ForbiddenTAs-Item': {'members': [{'name': 'pLMN-Identity', 'type': 'PLMNidentity'}, {'name': 'forbiddenTACs', 'type': 'ForbiddenTACs'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'GBR-QosInformation': {'members': [{'name': 'e-RAB-MaximumBitrateDL', 'type': 'BitRate'}, {'name': 'e-RAB-MaximumBitrateUL', 'type': 'BitRate'}, {'name': 'e-RAB-GuaranteedBitrateDL', 'type': 'BitRate'}, {'name': 'e-RAB-GuaranteedBitrateUL', 'type': 'BitRate'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'GERAN-Cell-ID': {'members': [{'name': 'lAI', 'type': 'LAI'}, {'name': 'rAC', 'type': 'RAC'}, {'name': 'cI', 'type': 'CI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'GTP-TEID': {'size': [4], 'type': 'OCTET STRING'}, 'GUMMEI': {'members': [{'name': 'pLMN-Identity', 'type': 'PLMNidentity'}, {'name': 'mME-Group-ID', 'type': 'MME-Group-ID'}, {'name': 'mME-Code', 'type': 'MME-Code'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'GUMMEIList': {'element': {'type': 'GUMMEI'}, 'size': [(1, 'maxnoofMMECs')], 'type': 'SEQUENCE OF'}, 'GUMMEIType': {'type': 'ENUMERATED', 'values': [('native', 0), ('mapped', 1), None]}, 'GWContextReleaseIndication': {'type': 'ENUMERATED', 'values': [('true', 0), None]}, 'Global-ENB-ID': {'members': [{'name': 'pLMNidentity', 'type': 'PLMNidentity'}, {'name': 'eNB-ID', 'type': 'ENB-ID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'HFN': {'restricted-to': [(0, 1048575)], 'type': 'INTEGER'}, 'HFNModified': {'restricted-to': [(0, 131071)], 'type': 'INTEGER'}, 'HFNforPDCP-SNlength18': {'restricted-to': [(0, 16383)], 'type': 'INTEGER'}, 'HandoverRestrictionList': {'members': [{'name': 'servingPLMN', 'type': 'PLMNidentity'}, {'name': 'equivalentPLMNs', 'optional': True, 'type': 'EPLMNs'}, {'name': 'forbiddenTAs', 'optional': True, 'type': 'ForbiddenTAs'}, {'name': 'forbiddenLAs', 'optional': True, 'type': 'ForbiddenLAs'}, {'name': 'forbiddenInterRATs', 'optional': True, 'type': 'ForbiddenInterRATs'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'HandoverType': {'type': 'ENUMERATED', 'values': [('intralte', 0), ('ltetoutran', 1), ('ltetogeran', 2), ('utrantolte', 3), ('gerantolte', 4), None]}, 'IMSI': {'size': [(3, 8)], 'type': 'OCTET STRING'}, 'ImmediateMDT': {'members': [{'name': 'measurementsToActivate', 'type': 'MeasurementsToActivate'}, {'name': 'm1reportingTrigger', 'type': 'M1ReportingTrigger'}, {'name': 'm1thresholdeventA2', 'optional': True, 'type': 'M1ThresholdEventA2'}, {'name': 'm1periodicReporting', 'optional': True, 'type': 'M1PeriodicReporting'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'InformationOnRecommendedCellsAndENBsForPaging': {'members': [{'name': 'recommendedCellsForPaging', 'type': 'RecommendedCellsForPaging'}, {'name': 'recommendENBsForPaging', 'type': 'RecommendedENBsForPaging'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'IntegrityProtectionAlgorithms': {'size': [16, None], 'type': 'BIT STRING'}, 'IntendedNumberOfPagingAttempts': {'restricted-to': [(1, 16), None], 'type': 'INTEGER'}, 'InterfacesToTrace': {'size': [8], 'type': 'BIT STRING'}, 'KillAllWarningMessages': {'type': 'ENUMERATED', 'values': [('true', 0)]}, 'L3-Information': {'type': 'OCTET STRING'}, 'LAC': {'size': [2], 'type': 'OCTET STRING'}, 'LAI': {'members': [{'name': 'pLMNidentity', 'type': 'PLMNidentity'}, {'name': 'lAC', 'type': 'LAC'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'LHN-ID': {'size': [(32, 256)], 'type': 'OCTET STRING'}, 'LPPa-PDU': {'type': 'OCTET STRING'}, 'LastVisitedCell-Item': {'members': [{'name': 'e-UTRAN-Cell', 'type': 'LastVisitedEUTRANCellInformation'}, {'name': 'uTRAN-Cell', 'type': 'LastVisitedUTRANCellInformation'}, {'name': 'gERAN-Cell', 'type': 'LastVisitedGERANCellInformation'}, None], 'type': 'CHOICE'}, 'LastVisitedEUTRANCellInformation': {'members': [{'name': 'global-Cell-ID', 'type': 'EUTRAN-CGI'}, {'name': 'cellType', 'type': 'CellType'}, {'name': 'time-UE-StayedInCell', 'type': 'Time-UE-StayedInCell'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'LastVisitedGERANCellInformation': {'members': [{'name': 'undefined', 'type': 'NULL'}, None], 'type': 'CHOICE'}, 'LastVisitedUTRANCellInformation': {'type': 'OCTET ' 'STRING'}, 'Links-to-log': {'type': 'ENUMERATED', 'values': [('uplink', 0), ('downlink', 1), ('both-uplink-and-downlink', 2), None]}, 'ListeningSubframePattern': {'members': [{'name': 'pattern-period', 'type': 'ENUMERATED', 'values': [('ms1280', 0), ('ms2560', 1), ('ms5120', 2), ('ms10240', 3), None]}, {'name': 'pattern-offset', 'restricted-to': [(0, 10239), None], 'type': 'INTEGER'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'LoggedMBSFNMDT': {'members': [{'name': 'loggingInterval', 'type': 'LoggingInterval'}, {'name': 'loggingDuration', 'type': 'LoggingDuration'}, {'name': 'mBSFN-ResultToLog', 'optional': True, 'type': 'MBSFN-ResultToLog'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'LoggedMDT': {'members': [{'name': 'loggingInterval', 'type': 'LoggingInterval'}, {'name': 'loggingDuration', 'type': 'LoggingDuration'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'LoggingDuration': {'type': 'ENUMERATED', 'values': [('m10', 0), ('m20', 1), ('m40', 2), ('m60', 3), ('m90', 4), ('m120', 5)]}, 'LoggingInterval': {'type': 'ENUMERATED', 'values': [('ms128', 0), ('ms256', 1), ('ms512', 2), ('ms1024', 3), ('ms2048', 4), ('ms3072', 5), ('ms4096', 6), ('ms6144', 7)]}, 'M-TMSI': {'size': [4], 'type': 'OCTET STRING'}, 'M1PeriodicReporting': {'members': [{'name': 'reportInterval', 'type': 'ReportIntervalMDT'}, {'name': 'reportAmount', 'type': 'ReportAmountMDT'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'M1ReportingTrigger': {'type': 'ENUMERATED', 'values': [('periodic', 0), ('a2eventtriggered', 1), None, ('a2eventtriggered-periodic', 2)]}, 'M1ThresholdEventA2': {'members': [{'name': 'measurementThreshold', 'type': 'MeasurementThresholdA2'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'M3Configuration': {'members': [{'name': 'm3period', 'type': 'M3period'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'M3period': {'type': 'ENUMERATED', 'values': [('ms100', 0), ('ms1000', 1), ('ms10000', 2), None]}, 'M4Configuration': {'members': [{'name': 'm4period', 'type': 'M4period'}, {'name': 'm4-links-to-log', 'type': 'Links-to-log'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'M4period': {'type': 'ENUMERATED', 'values': [('ms1024', 0), ('ms2048', 1), ('ms5120', 2), ('ms10240', 3), ('min1', 4), None]}, 'M5Configuration': {'members': [{'name': 'm5period', 'type': 'M5period'}, {'name': 'm5-links-to-log', 'type': 'Links-to-log'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'M5period': {'type': 'ENUMERATED', 'values': [('ms1024', 0), ('ms2048', 1), ('ms5120', 2), ('ms10240', 3), ('min1', 4), None]}, 'M6Configuration': {'members': [{'name': 'm6report-Interval', 'type': 'M6report-Interval'}, {'name': 'm6delay-threshold', 'optional': True, 'type': 'M6delay-threshold'}, {'name': 'm6-links-to-log', 'type': 'Links-to-log'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'M6delay-threshold': {'type': 'ENUMERATED', 'values': [('ms30', 0), ('ms40', 1), ('ms50', 2), ('ms60', 3), ('ms70', 4), ('ms80', 5), ('ms90', 6), ('ms100', 7), ('ms150', 8), ('ms300', 9), ('ms500', 10), ('ms750', 11), None]}, 'M6report-Interval': {'type': 'ENUMERATED', 'values': [('ms1024', 0), ('ms2048', 1), ('ms5120', 2), ('ms10240', 3), None]}, 'M7Configuration': {'members': [{'name': 'm7period', 'type': 'M7period'}, {'name': 'm7-links-to-log', 'type': 'Links-to-log'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'M7period': {'restricted-to': [(1, 60), None], 'type': 'INTEGER'}, 'MBSFN-ResultToLog': {'element': {'type': 'MBSFN-ResultToLogInfo'}, 'size': [(1, 'maxnoofMBSFNAreaMDT')], 'type': 'SEQUENCE OF'}, 'MBSFN-ResultToLogInfo': {'members': [{'name': 'mBSFN-AreaId', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'carrierFreq', 'type': 'EARFCN'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'MDT-Activation': {'type': 'ENUMERATED', 'values': [('immediate-MDT-only', 0), ('immediate-MDT-and-Trace', 1), ('logged-MDT-only', 2), None, ('logged-MBSFN-MDT', 3)]}, 'MDT-Configuration': {'members': [{'name': 'mdt-Activation', 'type': 'MDT-Activation'}, {'name': 'areaScopeOfMDT', 'type': 'AreaScopeOfMDT'}, {'name': 'mDTMode', 'type': 'MDTMode'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'MDT-Location-Info': {'size': [8], 'type': 'BIT STRING'}, 'MDTMode': {'members': [{'name': 'immediateMDT', 'type': 'ImmediateMDT'}, {'name': 'loggedMDT', 'type': 'LoggedMDT'}, None, {'name': 'mDTMode-Extension', 'type': 'MDTMode-Extension'}], 'type': 'CHOICE'}, 'MDTMode-Extension': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'MDTPLMNList': {'element': {'type': 'PLMNidentity'}, 'size': [(1, 'maxnoofMDTPLMNs')], 'type': 'SEQUENCE OF'}, 'MME-Code': {'size': [1], 'type': 'OCTET STRING'}, 'MME-Group-ID': {'size': [2], 'type': 'OCTET STRING'}, 'MME-UE-S1AP-ID': {'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}, 'MMEPagingTarget': {'members': [{'name': 'global-ENB-ID', 'type': 'Global-ENB-ID'}, {'name': 'tAI', 'type': 'TAI'}, None], 'type': 'CHOICE'}, 'MMERelaySupportIndicator': {'type': 'ENUMERATED', 'values': [('true', 0), None]}, 'MMEname': {'size': [(1, 150), None], 'type': 'PrintableString'}, 'MSClassmark2': {'type': 'OCTET STRING'}, 'MSClassmark3': {'type': 'OCTET STRING'}, 'ManagementBasedMDTAllowed': {'type': 'ENUMERATED', 'values': [('allowed', 0), None]}, 'Masked-IMEISV': {'size': [64], 'type': 'BIT STRING'}, 'MeasurementThresholdA2': {'members': [{'name': 'threshold-RSRP', 'type': 'Threshold-RSRP'}, {'name': 'threshold-RSRQ', 'type': 'Threshold-RSRQ'}, None], 'type': 'CHOICE'}, 'MeasurementsToActivate': {'size': [8], 'type': 'BIT STRING'}, 'MessageIdentifier': {'size': [16], 'type': 'BIT STRING'}, 'MobilityInformation': {'size': [32], 'type': 'BIT STRING'}, 'MutingAvailabilityIndication': {'type': 'ENUMERATED', 'values': [('available', 0), ('unavailable', 1), None]}, 'MutingPatternInformation': {'members': [{'name': 'muting-pattern-period', 'type': 'ENUMERATED', 'values': [('ms0', 0), ('ms1280', 1), ('ms2560', 2), ('ms5120', 3), ('ms10240', 4), None]}, {'name': 'muting-pattern-offset', 'optional': True, 'restricted-to': [(0, 10239), None], 'type': 'INTEGER'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'NAS-PDU': {'type': 'OCTET STRING'}, 'NASSecurityParametersfromE-UTRAN': {'type': 'OCTET ' 'STRING'}, 'NASSecurityParameterstoE-UTRAN': {'type': 'OCTET ' 'STRING'}, 'NB-IoT-DefaultPagingDRX': {'type': 'ENUMERATED', 'values': [('v128', 0), ('v256', 1), ('v512', 2), ('v1024', 3), None]}, 'NB-IoT-Paging-eDRX-Cycle': {'type': 'ENUMERATED', 'values': [('hf2', 0), ('hf4', 1), ('hf6', 2), ('hf8', 3), ('hf10', 4), ('hf12', 5), ('hf14', 6), ('hf16', 7), ('hf32', 8), ('hf64', 9), ('hf128', 10), ('hf256', 11), ('hf512', 12), ('hf1024', 13), None]}, 'NB-IoT-Paging-eDRXInformation': {'members': [{'name': 'nB-IoT-paging-eDRX-Cycle', 'type': 'NB-IoT-Paging-eDRX-Cycle'}, {'name': 'nB-IoT-pagingTimeWindow', 'optional': True, 'type': 'NB-IoT-PagingTimeWindow'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'NB-IoT-PagingTimeWindow': {'type': 'ENUMERATED', 'values': [('s1', 0), ('s2', 1), ('s3', 2), ('s4', 3), ('s5', 4), ('s6', 5), ('s7', 6), ('s8', 7), ('s9', 8), ('s10', 9), ('s11', 10), ('s12', 11), ('s13', 12), ('s14', 13), ('s15', 14), ('s16', 15), None]}, 'NB-IoT-UEIdentityIndexValue': {'size': [12], 'type': 'BIT STRING'}, 'NextPagingAreaScope': {'type': 'ENUMERATED', 'values': [('same', 0), ('changed', 1), None]}, 'NumberOfBroadcasts': {'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, 'NumberofBroadcastRequest': {'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, 'OldBSS-ToNewBSS-Information': {'type': 'OCTET STRING'}, 'OverloadAction': {'type': 'ENUMERATED', 'values': [('reject-non-emergency-mo-dt', 0), ('reject-rrc-cr-signalling', 1), ('permit-emergency-sessions-and-mobile-terminated-services-only', 2), None, ('permit-high-priority-sessions-and-mobile-terminated-services-only', 3), ('reject-delay-tolerant-access', 4), ('permit-high-priority-sessions-and-exception-reporting-and-mobile-terminated-services-only', 5), ('not-accept-mo-data-or-delay-tolerant-access-from-CP-CIoT', 6)]}, 'OverloadResponse': {'members': [{'name': 'overloadAction', 'type': 'OverloadAction'}, None], 'type': 'CHOICE'}, 'PDCP-SN': {'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, 'PDCP-SNExtended': {'restricted-to': [(0, 32767)], 'type': 'INTEGER'}, 'PDCP-SNlength18': {'restricted-to': [(0, 262143)], 'type': 'INTEGER'}, 'PLMNidentity': {'type': 'TBCD-STRING'}, 'PS-ServiceNotAvailable': {'type': 'ENUMERATED', 'values': [('ps-service-not-available', 0), None]}, 'PWSfailedECGIList': {'element': {'type': 'EUTRAN-CGI'}, 'size': [(1, 'maxnoofCellsineNB')], 'type': 'SEQUENCE OF'}, 'Paging-eDRX-Cycle': {'type': 'ENUMERATED', 'values': [('hfhalf', 0), ('hf1', 1), ('hf2', 2), ('hf4', 3), ('hf6', 4), ('hf8', 5), ('hf10', 6), ('hf12', 7), ('hf14', 8), ('hf16', 9), ('hf32', 10), ('hf64', 11), ('hf128', 12), ('hf256', 13), None]}, 'Paging-eDRXInformation': {'members': [{'name': 'paging-eDRX-Cycle', 'type': 'Paging-eDRX-Cycle'}, {'name': 'pagingTimeWindow', 'optional': True, 'type': 'PagingTimeWindow'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'PagingAttemptCount': {'restricted-to': [(1, 16), None], 'type': 'INTEGER'}, 'PagingAttemptInformation': {'members': [{'name': 'pagingAttemptCount', 'type': 'PagingAttemptCount'}, {'name': 'intendedNumberOfPagingAttempts', 'type': 'IntendedNumberOfPagingAttempts'}, {'name': 'nextPagingAreaScope', 'optional': True, 'type': 'NextPagingAreaScope'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'PagingDRX': {'type': 'ENUMERATED', 'values': [('v32', 0), ('v64', 1), ('v128', 2), ('v256', 3), None]}, 'PagingPriority': {'type': 'ENUMERATED', 'values': [('priolevel1', 0), ('priolevel2', 1), ('priolevel3', 2), ('priolevel4', 3), ('priolevel5', 4), ('priolevel6', 5), ('priolevel7', 6), ('priolevel8', 7), None]}, 'PagingTimeWindow': {'type': 'ENUMERATED', 'values': [('s1', 0), ('s2', 1), ('s3', 2), ('s4', 3), ('s5', 4), ('s6', 5), ('s7', 6), ('s8', 7), ('s9', 8), ('s10', 9), ('s11', 10), ('s12', 11), ('s13', 12), ('s14', 13), ('s15', 14), ('s16', 15), None]}, 'PedestrianUE': {'type': 'ENUMERATED', 'values': [('authorized', 0), ('not-authorized', 1), None]}, 'Port-Number': {'size': [2], 'type': 'OCTET STRING'}, 'Pre-emptionCapability': {'type': 'ENUMERATED', 'values': [('shall-not-trigger-pre-emption', 0), ('may-trigger-pre-emption', 1)]}, 'Pre-emptionVulnerability': {'type': 'ENUMERATED', 'values': [('not-pre-emptable', 0), ('pre-emptable', 1)]}, 'PriorityLevel': {'named-numbers': {'highest': 1, 'lowest': 14, 'no-priority': 15, 'spare': 0}, 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, 'PrivacyIndicator': {'type': 'ENUMERATED', 'values': [('immediate-MDT', 0), ('logged-MDT', 1), None]}, 'ProSeAuthorized': {'members': [{'name': 'proSeDirectDiscovery', 'optional': True, 'type': 'ProSeDirectDiscovery'}, {'name': 'proSeDirectCommunication', 'optional': True, 'type': 'ProSeDirectCommunication'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'ProSeDirectCommunication': {'type': 'ENUMERATED', 'values': [('authorized', 0), ('not-authorized', 1), None]}, 'ProSeDirectDiscovery': {'type': 'ENUMERATED', 'values': [('authorized', 0), ('not-authorized', 1), None]}, 'ProSeUEtoNetworkRelaying': {'type': 'ENUMERATED', 'values': [('authorized', 0), ('not-authorized', 1), None]}, 'QCI': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'RAC': {'size': [1], 'type': 'OCTET STRING'}, 'RAT-Type': {'type': 'ENUMERATED', 'values': [('nbiot', 0), None]}, 'RIMInformation': {'type': 'OCTET STRING'}, 'RIMRoutingAddress': {'members': [{'name': 'gERAN-Cell-ID', 'type': 'GERAN-Cell-ID'}, None, {'name': 'targetRNC-ID', 'type': 'TargetRNC-ID'}, {'name': 'eHRPD-Sector-ID', 'size': [16], 'type': 'OCTET ' 'STRING'}], 'type': 'CHOICE'}, 'RIMTransfer': {'members': [{'name': 'rIMInformation', 'type': 'RIMInformation'}, {'name': 'rIMRoutingAddress', 'optional': True, 'type': 'RIMRoutingAddress'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'RLFReportInformation': {'members': [{'name': 'uE-RLF-Report-Container', 'type': 'UE-RLF-Report-Container'}, {'name': 'uE-RLF-Report-Container-for-extended-bands', 'optional': True, 'type': 'UE-RLF-Report-Container-for-extended-bands'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'RNC-ID': {'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, 'RRC-Container': {'type': 'OCTET STRING'}, 'RRC-Establishment-Cause': {'type': 'ENUMERATED', 'values': [('emergency', 0), ('highPriorityAccess', 1), ('mt-Access', 2), ('mo-Signalling', 3), ('mo-Data', 4), None, ('delay-TolerantAccess', 5), ('mo-VoiceCall', 6), ('mo-ExceptionData', 7)]}, 'ReceiveStatusOfULPDCPSDUsExtended': {'size': [(1, 16384)], 'type': 'BIT ' 'STRING'}, 'ReceiveStatusOfULPDCPSDUsPDCP-SNlength18': {'size': [(1, 131072)], 'type': 'BIT ' 'STRING'}, 'ReceiveStatusofULPDCPSDUs': {'size': [4096], 'type': 'BIT STRING'}, 'RecommendedCellItem': {'members': [{'name': 'eUTRAN-CGI', 'type': 'EUTRAN-CGI'}, {'name': 'timeStayedInCell', 'optional': True, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'RecommendedCellList': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofRecommendedCells')], 'type': 'SEQUENCE OF'}, 'RecommendedCellsForPaging': {'members': [{'name': 'recommendedCellList', 'type': 'RecommendedCellList'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'RecommendedENBItem': {'members': [{'name': 'mMEPagingTarget', 'type': 'MMEPagingTarget'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'RecommendedENBList': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofRecommendedENBs')], 'type': 'SEQUENCE OF'}, 'RecommendedENBsForPaging': {'members': [{'name': 'recommendedENBList', 'type': 'RecommendedENBList'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'RelativeMMECapacity': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'RelayNode-Indicator': {'type': 'ENUMERATED', 'values': [('true', 0), None]}, 'RepetitionPeriod': {'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, 'ReportAmountMDT': {'type': 'ENUMERATED', 'values': [('r1', 0), ('r2', 1), ('r4', 2), ('r8', 3), ('r16', 4), ('r32', 5), ('r64', 6), ('rinfinity', 7)]}, 'ReportArea': {'type': 'ENUMERATED', 'values': [('ecgi', 0), None]}, 'ReportIntervalMDT': {'type': 'ENUMERATED', 'values': [('ms120', 0), ('ms240', 1), ('ms480', 2), ('ms640', 3), ('ms1024', 4), ('ms2048', 5), ('ms5120', 6), ('ms10240', 7), ('min1', 8), ('min6', 9), ('min12', 10), ('min30', 11), ('min60', 12)]}, 'RequestType': {'members': [{'name': 'eventType', 'type': 'EventType'}, {'name': 'reportArea', 'type': 'ReportArea'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'Routing-ID': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'S-TMSI': {'members': [{'name': 'mMEC', 'type': 'MME-Code'}, {'name': 'm-TMSI', 'type': 'M-TMSI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'SONConfigurationTransfer': {'members': [{'name': 'targeteNB-ID', 'type': 'TargeteNB-ID'}, {'name': 'sourceeNB-ID', 'type': 'SourceeNB-ID'}, {'name': 'sONInformation', 'type': 'SONInformation'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'SONInformation': {'members': [{'name': 'sONInformationRequest', 'type': 'SONInformationRequest'}, {'name': 'sONInformationReply', 'type': 'SONInformationReply'}, None, {'name': 'sONInformation-Extension', 'type': 'SONInformation-Extension'}], 'type': 'CHOICE'}, 'SONInformation-Extension': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'SONInformationReply': {'members': [{'name': 'x2TNLConfigurationInfo', 'optional': True, 'type': 'X2TNLConfigurationInfo'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'SONInformationReport': {'members': [{'name': 'rLFReportInformation', 'type': 'RLFReportInformation'}, None], 'type': 'CHOICE'}, 'SONInformationRequest': {'type': 'ENUMERATED', 'values': [('x2TNL-Configuration-Info', 0), None, ('time-Synchronisation-Info', 1), ('activate-Muting', 2), ('deactivate-Muting', 3)]}, 'SRVCCHOIndication': {'type': 'ENUMERATED', 'values': [('pSandCS', 0), ('cSonly', 1), None]}, 'SRVCCOperationNotPossible': {'type': 'ENUMERATED', 'values': [('notPossible', 0), None]}, 'SRVCCOperationPossible': {'type': 'ENUMERATED', 'values': [('possible', 0), None]}, 'SecurityContext': {'members': [{'name': 'nextHopChainingCount', 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'nextHopParameter', 'type': 'SecurityKey'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'SecurityKey': {'size': [256], 'type': 'BIT STRING'}, 'SerialNumber': {'size': [16], 'type': 'BIT STRING'}, 'ServedDCNs': {'element': {'type': 'ServedDCNsItem'}, 'size': [(0, 'maxnoofDCNs')], 'type': 'SEQUENCE OF'}, 'ServedDCNsItem': {'members': [{'name': 'dCN-ID', 'type': 'DCN-ID'}, {'name': 'relativeDCNCapacity', 'type': 'RelativeMMECapacity'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'ServedGUMMEIs': {'element': {'type': 'ServedGUMMEIsItem'}, 'size': [(1, 'maxnoofRATs')], 'type': 'SEQUENCE OF'}, 'ServedGUMMEIsItem': {'members': [{'name': 'servedPLMNs', 'type': 'ServedPLMNs'}, {'name': 'servedGroupIDs', 'type': 'ServedGroupIDs'}, {'name': 'servedMMECs', 'type': 'ServedMMECs'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'ServedGroupIDs': {'element': {'type': 'MME-Group-ID'}, 'size': [(1, 'maxnoofGroupIDs')], 'type': 'SEQUENCE OF'}, 'ServedMMECs': {'element': {'type': 'MME-Code'}, 'size': [(1, 'maxnoofMMECs')], 'type': 'SEQUENCE OF'}, 'ServedPLMNs': {'element': {'type': 'PLMNidentity'}, 'size': [(1, 'maxnoofPLMNsPerMME')], 'type': 'SEQUENCE OF'}, 'Source-ToTarget-TransparentContainer': {'type': 'OCTET ' 'STRING'}, 'SourceBSS-ToTargetBSS-TransparentContainer': {'type': 'OCTET ' 'STRING'}, 'SourceOfUEActivityBehaviourInformation': {'type': 'ENUMERATED', 'values': [('subscription-information', 0), ('statistics', 1), None]}, 'SourceRNC-ToTargetRNC-TransparentContainer': {'type': 'OCTET ' 'STRING'}, 'SourceeNB-ID': {'members': [{'name': 'global-ENB-ID', 'type': 'Global-ENB-ID'}, {'name': 'selected-TAI', 'type': 'TAI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}], 'type': 'SEQUENCE'}, 'SourceeNB-ToTargeteNB-TransparentContainer': {'members': [{'name': 'rRC-Container', 'type': 'RRC-Container'}, {'name': 'e-RABInformationList', 'optional': True, 'type': 'E-RABInformationList'}, {'name': 'targetCell-ID', 'type': 'EUTRAN-CGI'}, {'name': 'subscriberProfileIDforRFP', 'optional': True, 'type': 'SubscriberProfileIDforRFP'}, {'name': 'uE-HistoryInformation', 'type': 'UE-HistoryInformation'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'StratumLevel': {'restricted-to': [(0, 3), None], 'type': 'INTEGER'}, 'SubscriberProfileIDforRFP': {'restricted-to': [(1, 256)], 'type': 'INTEGER'}, 'SupportedTAs': {'element': {'type': 'SupportedTAs-Item'}, 'size': [(1, 'maxnoofTACs')], 'type': 'SEQUENCE OF'}, 'SupportedTAs-Item': {'members': [{'name': 'tAC', 'type': 'TAC'}, {'name': 'broadcastPLMNs', 'type': 'BPLMNs'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'SynchronisationInformation': {'members': [{'name': 'sourceStratumLevel', 'optional': True, 'type': 'StratumLevel'}, {'name': 'listeningSubframePattern', 'optional': True, 'type': 'ListeningSubframePattern'}, {'name': 'aggressoreCGI-List', 'optional': True, 'type': 'ECGI-List'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'SynchronisationStatus': {'type': 'ENUMERATED', 'values': [('synchronous', 0), ('asynchronous', 1), None]}, 'TABasedMDT': {'members': [{'name': 'tAListforMDT', 'type': 'TAListforMDT'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'TAC': {'size': [2], 'type': 'OCTET STRING'}, 'TAI': {'members': [{'name': 'pLMNidentity', 'type': 'PLMNidentity'}, {'name': 'tAC', 'type': 'TAC'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'TAI-Broadcast': {'element': {'type': 'TAI-Broadcast-Item'}, 'size': [(1, 'maxnoofTAIforWarning')], 'type': 'SEQUENCE OF'}, 'TAI-Broadcast-Item': {'members': [{'name': 'tAI', 'type': 'TAI'}, {'name': 'completedCellinTAI', 'type': 'CompletedCellinTAI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'TAI-Cancelled': {'element': {'type': 'TAI-Cancelled-Item'}, 'size': [(1, 'maxnoofTAIforWarning')], 'type': 'SEQUENCE OF'}, 'TAI-Cancelled-Item': {'members': [{'name': 'tAI', 'type': 'TAI'}, {'name': 'cancelledCellinTAI', 'type': 'CancelledCellinTAI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'TAIBasedMDT': {'members': [{'name': 'tAIListforMDT', 'type': 'TAIListforMDT'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'TAIListForRestart': {'element': {'type': 'TAI'}, 'size': [(1, 'maxnoofRestartTAIs')], 'type': 'SEQUENCE OF'}, 'TAIListforMDT': {'element': {'type': 'TAI'}, 'size': [(1, 'maxnoofTAforMDT')], 'type': 'SEQUENCE OF'}, 'TAIListforWarning': {'element': {'type': 'TAI'}, 'size': [(1, 'maxnoofTAIforWarning')], 'type': 'SEQUENCE OF'}, 'TAListforMDT': {'element': {'type': 'TAC'}, 'size': [(1, 'maxnoofTAforMDT')], 'type': 'SEQUENCE OF'}, 'TBCD-STRING': {'size': [3], 'type': 'OCTET STRING'}, 'Target-ToSource-TransparentContainer': {'type': 'OCTET ' 'STRING'}, 'TargetBSS-ToSourceBSS-TransparentContainer': {'type': 'OCTET ' 'STRING'}, 'TargetID': {'members': [{'name': 'targeteNB-ID', 'type': 'TargeteNB-ID'}, {'name': 'targetRNC-ID', 'type': 'TargetRNC-ID'}, {'name': 'cGI', 'type': 'CGI'}, None], 'type': 'CHOICE'}, 'TargetRNC-ID': {'members': [{'name': 'lAI', 'type': 'LAI'}, {'name': 'rAC', 'optional': True, 'type': 'RAC'}, {'name': 'rNC-ID', 'type': 'RNC-ID'}, {'name': 'extendedRNC-ID', 'optional': True, 'type': 'ExtendedRNC-ID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'TargetRNC-ToSourceRNC-TransparentContainer': {'type': 'OCTET ' 'STRING'}, 'TargeteNB-ID': {'members': [{'name': 'global-ENB-ID', 'type': 'Global-ENB-ID'}, {'name': 'selected-TAI', 'type': 'TAI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'TargeteNB-ToSourceeNB-TransparentContainer': {'members': [{'name': 'rRC-Container', 'type': 'RRC-Container'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'Threshold-RSRP': {'restricted-to': [(0, 97)], 'type': 'INTEGER'}, 'Threshold-RSRQ': {'restricted-to': [(0, 34)], 'type': 'INTEGER'}, 'Time-UE-StayedInCell': {'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, 'Time-UE-StayedInCell-EnhancedGranularity': {'restricted-to': [(0, 40950)], 'type': 'INTEGER'}, 'TimeSynchronisationInfo': {'members': [{'name': 'stratumLevel', 'type': 'StratumLevel'}, {'name': 'synchronisationStatus', 'type': 'SynchronisationStatus'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'TimeToWait': {'type': 'ENUMERATED', 'values': [('v1s', 0), ('v2s', 1), ('v5s', 2), ('v10s', 3), ('v20s', 4), ('v60s', 5), None]}, 'TraceActivation': {'members': [{'name': 'e-UTRAN-Trace-ID', 'type': 'E-UTRAN-Trace-ID'}, {'name': 'interfacesToTrace', 'type': 'InterfacesToTrace'}, {'name': 'traceDepth', 'type': 'TraceDepth'}, {'name': 'traceCollectionEntityIPAddress', 'type': 'TransportLayerAddress'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'TraceDepth': {'type': 'ENUMERATED', 'values': [('minimum', 0), ('medium', 1), ('maximum', 2), ('minimumWithoutVendorSpecificExtension', 3), ('mediumWithoutVendorSpecificExtension', 4), ('maximumWithoutVendorSpecificExtension', 5), None]}, 'TrafficLoadReductionIndication': {'restricted-to': [(1, 99)], 'type': 'INTEGER'}, 'TransportInformation': {'members': [{'name': 'transportLayerAddress', 'type': 'TransportLayerAddress'}, {'name': 'uL-GTP-TEID', 'type': 'GTP-TEID'}, None], 'type': 'SEQUENCE'}, 'TransportLayerAddress': {'size': [(1, 160), None], 'type': 'BIT STRING'}, 'TunnelInformation': {'members': [{'name': 'transportLayerAddress', 'type': 'TransportLayerAddress'}, {'name': 'uDP-Port-Number', 'optional': True, 'type': 'Port-Number'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'TypeOfError': {'type': 'ENUMERATED', 'values': [('not-understood', 0), ('missing', 1), None]}, 'UE-HistoryInformation': {'element': {'type': 'LastVisitedCell-Item'}, 'size': [(1, 'maxnoofCells')], 'type': 'SEQUENCE OF'}, 'UE-HistoryInformationFromTheUE': {'type': 'OCTET ' 'STRING'}, 'UE-RLF-Report-Container': {'type': 'OCTET STRING'}, 'UE-RLF-Report-Container-for-extended-bands': {'type': 'OCTET ' 'STRING'}, 'UE-RetentionInformation': {'type': 'ENUMERATED', 'values': [('ues-retained', 0), None]}, 'UE-S1AP-ID-pair': {'members': [{'name': 'mME-UE-S1AP-ID', 'type': 'MME-UE-S1AP-ID'}, {'name': 'eNB-UE-S1AP-ID', 'type': 'ENB-UE-S1AP-ID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'UE-S1AP-IDs': {'members': [{'name': 'uE-S1AP-ID-pair', 'type': 'UE-S1AP-ID-pair'}, {'name': 'mME-UE-S1AP-ID', 'type': 'MME-UE-S1AP-ID'}, None], 'type': 'CHOICE'}, 'UE-Usage-Type': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'UE-associatedLogicalS1-ConnectionItem': {'members': [{'name': 'mME-UE-S1AP-ID', 'optional': True, 'type': 'MME-UE-S1AP-ID'}, {'name': 'eNB-UE-S1AP-ID', 'optional': True, 'type': 'ENB-UE-S1AP-ID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'UEAggregateMaximumBitrate': {'members': [{'name': 'uEaggregateMaximumBitRateDL', 'type': 'BitRate'}, {'name': 'uEaggregateMaximumBitRateUL', 'type': 'BitRate'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'UEIdentityIndexValue': {'size': [10], 'type': 'BIT STRING'}, 'UEPagingID': {'members': [{'name': 's-TMSI', 'type': 'S-TMSI'}, {'name': 'iMSI', 'type': 'IMSI'}, None], 'type': 'CHOICE'}, 'UERadioCapability': {'type': 'OCTET STRING'}, 'UERadioCapabilityForPaging': {'type': 'OCTET STRING'}, 'UESecurityCapabilities': {'members': [{'name': 'encryptionAlgorithms', 'type': 'EncryptionAlgorithms'}, {'name': 'integrityProtectionAlgorithms', 'type': 'IntegrityProtectionAlgorithms'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'UESidelinkAggregateMaximumBitrate': {'members': [{'name': 'uESidelinkAggregateMaximumBitRate', 'type': 'BitRate'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'UEUserPlaneCIoTSupportIndicator': {'type': 'ENUMERATED', 'values': [('supported', 0), None]}, 'UL-CP-SecurityInformation': {'members': [{'name': 'ul-NAS-MAC', 'type': 'UL-NAS-MAC'}, {'name': 'ul-NAS-Count', 'type': 'UL-NAS-Count'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'UL-NAS-Count': {'size': [5], 'type': 'BIT STRING'}, 'UL-NAS-MAC': {'size': [16], 'type': 'BIT STRING'}, 'UserLocationInformation': {'members': [{'name': 'eutran-cgi', 'type': 'EUTRAN-CGI'}, {'name': 'tai', 'type': 'TAI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'V2XServicesAuthorized': {'members': [{'name': 'vehicleUE', 'optional': True, 'type': 'VehicleUE'}, {'name': 'pedestrianUE', 'optional': True, 'type': 'PedestrianUE'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'VehicleUE': {'type': 'ENUMERATED', 'values': [('authorized', 0), ('not-authorized', 1), None]}, 'VoiceSupportMatchIndicator': {'type': 'ENUMERATED', 'values': [('supported', 0), ('not-supported', 1), None]}, 'WarningAreaList': {'members': [{'name': 'cellIDList', 'type': 'ECGIList'}, {'name': 'trackingAreaListforWarning', 'type': 'TAIListforWarning'}, {'name': 'emergencyAreaIDList', 'type': 'EmergencyAreaIDList'}, None], 'type': 'CHOICE'}, 'WarningMessageContents': {'size': [(1, 9600)], 'type': 'OCTET STRING'}, 'WarningSecurityInfo': {'size': [50], 'type': 'OCTET STRING'}, 'WarningType': {'size': [2], 'type': 'OCTET STRING'}, 'X2TNLConfigurationInfo': {'members': [{'name': 'eNBX2TransportLayerAddresses', 'type': 'ENBX2TLAs'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}}, 'values': {}}, 'S1AP-PDU-Contents': {'extensibility-implied': False, 'imports': {'S1AP-Constants': ['id-Additional-GUTI', 'id-AdditionalCSFallbackIndicator', 'id-AssistanceDataForPaging', 'id-BearerType', 'id-BroadcastCancelledAreaList', 'id-BroadcastCompletedAreaList', 'id-CE-mode-B-SupportIndicator', 'id-CNDomain', 'id-CSFallbackIndicator', 'id-CSG-Id', 'id-CSG-IdList', 'id-CSGMembershipInfo', 'id-CSGMembershipStatus', 'id-Cause', 'id-CellAccessMode', 'id-CellIdentifierAndCELevelForCECapableUEs', 'id-ConcurrentWarningMessageIndicator', 'id-Correlation-ID', 'id-Coverage-Level', 'id-CriticalityDiagnostics', 'id-DCN-ID', 'id-DL-CP-SecurityInformation', 'id-DLNASPDUDeliveryAckRequest', 'id-Data-Forwarding-Not-Possible', 'id-DataCodingScheme', 'id-DefaultPagingDRX', 'id-Direct-Forwarding-Path-Availability', 'id-E-RABAdmittedItem', 'id-E-RABAdmittedList', 'id-E-RABDataForwardingItem', 'id-E-RABFailedToBeReleasedList', 'id-E-RABFailedToModifyList', 'id-E-RABFailedToModifyListBearerModConf', 'id-E-RABFailedToReleaseList', 'id-E-RABFailedToResumeItemResumeReq', 'id-E-RABFailedToResumeItemResumeRes', 'id-E-RABFailedToResumeListResumeReq', 'id-E-RABFailedToResumeListResumeRes', 'id-E-RABFailedToSetupListBearerSURes', 'id-E-RABFailedToSetupListCtxtSURes', 'id-E-RABFailedToSetupListHOReqAck', 'id-E-RABFailedtoSetupItemHOReqAck', 'id-E-RABModify', 'id-E-RABModifyItemBearerModConf', 'id-E-RABModifyItemBearerModRes', 'id-E-RABModifyListBearerModConf', 'id-E-RABModifyListBearerModRes', 'id-E-RABNotToBeModifiedItemBearerModInd', 'id-E-RABNotToBeModifiedListBearerModInd', 'id-E-RABRelease', 'id-E-RABReleaseIndication', 'id-E-RABReleaseItemBearerRelComp', 'id-E-RABReleaseItemHOCmd', 'id-E-RABReleaseListBearerRelComp', 'id-E-RABReleasedList', 'id-E-RABSetup', 'id-E-RABSetupItemBearerSURes', 'id-E-RABSetupItemCtxtSURes', 'id-E-RABSetupListBearerSURes', 'id-E-RABSetupListCtxtSURes', 'id-E-RABSubjecttoDataForwardingList', 'id-E-RABToBeModifiedItemBearerModInd', 'id-E-RABToBeModifiedItemBearerModReq', 'id-E-RABToBeModifiedListBearerModInd', 'id-E-RABToBeModifiedListBearerModReq', 'id-E-RABToBeReleasedList', 'id-E-RABToBeReleasedListBearerModConf', 'id-E-RABToBeSetupItemBearerSUReq', 'id-E-RABToBeSetupItemCtxtSUReq', 'id-E-RABToBeSetupItemHOReq', 'id-E-RABToBeSetupListBearerSUReq', 'id-E-RABToBeSetupListCtxtSUReq', 'id-E-RABToBeSetupListHOReq', 'id-E-RABToBeSwitchedDLItem', 'id-E-RABToBeSwitchedDLList', 'id-E-RABToBeSwitchedULItem', 'id-E-RABToBeSwitchedULList', 'id-E-RABtoReleaseListHOCmd', 'id-E-UTRAN-Trace-ID', 'id-ECGIListForRestart', 'id-EUTRAN-CGI', 'id-EUTRANRoundTripDelayEstimationInfo', 'id-EmergencyAreaIDListForRestart', 'id-EnhancedCoverageRestricted', 'id-ExpectedUEBehaviour', 'id-ExtendedRepetitionPeriod', 'id-GERANtoLTEHOInformationRes', 'id-GUMMEI-ID', 'id-GUMMEIList', 'id-GUMMEIType', 'id-GW-TransportLayerAddress', 'id-GWContextReleaseIndication', 'id-Global-ENB-ID', 'id-HandoverRestrictionList', 'id-HandoverType', 'id-InformationOnRecommendedCellsAndENBsForPaging', 'id-InitialContextSetup', 'id-Inter-SystemInformationTransferTypeEDT', 'id-Inter-SystemInformationTransferTypeMDT', 'id-KillAllWarningMessages', 'id-LHN-ID', 'id-LPPa-PDU', 'id-MME-Group-ID', 'id-MME-UE-S1AP-ID', 'id-MME-UE-S1AP-ID-2', 'id-MMERelaySupportIndicator', 'id-MMEname', 'id-MSClassmark2', 'id-MSClassmark3', 'id-ManagementBasedMDTAllowed', 'id-ManagementBasedMDTPLMNList', 'id-Masked-IMEISV', 'id-MessageIdentifier', 'id-NAS-DownlinkCount', 'id-NAS-PDU', 'id-NASSecurityParametersfromE-UTRAN', 'id-NASSecurityParameterstoE-UTRAN', 'id-NB-IoT-DefaultPagingDRX', 'id-NB-IoT-Paging-eDRXInformation', 'id-NB-IoT-UEIdentityIndexValue', 'id-NumberofBroadcastRequest', 'id-OverloadResponse', 'id-PS-ServiceNotAvailable', 'id-PWSFailureIndication', 'id-PWSfailedECGIList', 'id-Paging-eDRXInformation', 'id-PagingPriority', 'id-PrivacyIndicator', 'id-ProSeAuthorized', 'id-RRC-Establishment-Cause', 'id-RRC-Resume-Cause', 'id-RegisteredLAI', 'id-RelativeMMECapacity', 'id-RelayNode-Indicator', 'id-RepetitionPeriod', 'id-RequestType', 'id-ResetType', 'id-Routing-ID', 'id-S-TMSI', 'id-S1-Message', 'id-SIPTO-Correlation-ID', 'id-SIPTO-L-GW-TransportLayerAddress', 'id-SONConfigurationTransferECT', 'id-SONConfigurationTransferMCT', 'id-SRVCCHOIndication', 'id-SRVCCOperationNotPossible', 'id-SRVCCOperationPossible', 'id-SecurityContext', 'id-SecurityKey', 'id-SerialNumber', 'id-ServedDCNs', 'id-ServedGUMMEIs', 'id-Source-ToTarget-TransparentContainer', 'id-Source-ToTarget-TransparentContainer-Secondary', 'id-SourceMME-GUMMEI', 'id-SourceMME-UE-S1AP-ID', 'id-SubscriberProfileIDforRFP', 'id-SupportedTAs', 'id-TAI', 'id-TAIItem', 'id-TAIList', 'id-TAIListForRestart', 'id-Target-ToSource-TransparentContainer', 'id-Target-ToSource-TransparentContainer-Secondary', 'id-TargetID', 'id-TimeToWait', 'id-TraceActivation', 'id-TraceCollectionEntityIPAddress', 'id-TrafficLoadReductionIndication', 'id-TransportInformation', 'id-Tunnel-Information-for-BBF', 'id-UE-Level-QoS-Parameters', 'id-UE-RetentionInformation', 'id-UE-S1AP-IDs', 'id-UE-Usage-Type', 'id-UE-associatedLogicalS1-ConnectionItem', 'id-UE-associatedLogicalS1-ConnectionListResAck', 'id-UEIdentityIndexValue', 'id-UEPagingID', 'id-UERadioCapability', 'id-UERadioCapabilityForPaging', 'id-UESecurityCapabilities', 'id-UESidelinkAggregateMaximumBitrate', 'id-UEUserPlaneCIoTSupportIndicator', 'id-UL-CP-SecurityInformation', 'id-UTRANtoLTEHOInformationRes', 'id-UserLocationInformation', 'id-V2XServicesAuthorized', 'id-VoiceSupportMatchIndicator', 'id-WarningAreaList', 'id-WarningMessageContents', 'id-WarningSecurityInfo', 'id-WarningType', 'id-cdma2000HORequiredIndication', 'id-cdma2000HOStatus', 'id-cdma2000OneXRAND', 'id-cdma2000OneXSRVCCInfo', 'id-cdma2000PDU', 'id-cdma2000RATType', 'id-cdma2000SectorID', 'id-eNB-StatusTransfer-TransparentContainer', 'id-eNB-UE-S1AP-ID', 'id-eNBname', 'id-extended-UEIdentityIndexValue', 'id-pagingDRX', 'id-uEaggregateMaximumBitrate', 'maxnoofCellID', 'maxnoofCellinEAI', 'maxnoofCellinTAI', 'maxnoofE-RABs', 'maxnoofEmergencyAreaID', 'maxnoofErrors', 'maxnoofIndividualS1ConnectionsToReset', 'maxnoofTAIforWarning', 'maxnoofTAIs'], 'S1AP-Containers': ['PrivateIE-Container', 'ProtocolExtensionContainer', 'ProtocolIE-Container', 'ProtocolIE-ContainerList', 'ProtocolIE-ContainerPair', 'ProtocolIE-ContainerPairList', 'ProtocolIE-SingleContainer', 'S1AP-PRIVATE-IES', 'S1AP-PROTOCOL-EXTENSION', 'S1AP-PROTOCOL-IES', 'S1AP-PROTOCOL-IES-PAIR', '{', '{', '{', '{', '{', '{', '{', '}', '}', '}', '}', '}', '}', '}'], 'S1AP-IEs': ['Additional-GUTI', 'AdditionalCSFallbackIndicator', 'AssistanceDataForPaging', 'BearerType', 'BroadcastCancelledAreaList', 'BroadcastCompletedAreaList', 'CE-mode-B-SupportIndicator', 'CNDomain', 'CSFallbackIndicator', 'CSG-Id', 'CSG-IdList', 'CSGMembershipStatus', 'Cause', 'Cdma2000HORequiredIndication', 'Cdma2000HOStatus', 'Cdma2000OneXRAND', 'Cdma2000OneXSRVCCInfo', 'Cdma2000PDU', 'Cdma2000RATType', 'Cdma2000SectorID', 'CellAccessMode', 'CellIdentifierAndCELevelForCECapableUEs', 'ConcurrentWarningMessageIndicator', 'Correlation-ID', 'Coverage-Level', 'CriticalityDiagnostics', 'DCN-ID', 'DL-CP-SecurityInformation', 'DLNASPDUDeliveryAckRequest', 'Data-Forwarding-Not-Possible', 'DataCodingScheme', 'Direct-Forwarding-Path-Availability', 'E-RAB-ID', 'E-RABLevelQoSParameters', 'E-RABList', 'E-UTRAN-Trace-ID', 'ECGIListForRestart', 'ENB-StatusTransfer-TransparentContainer', 'ENB-UE-S1AP-ID', 'ENBname', 'EUTRAN-CGI', 'EUTRANRoundTripDelayEstimationInfo', 'EmergencyAreaIDListForRestart', 'EnhancedCoverageRestricted', 'ExpectedUEBehaviour', 'Extended-UEIdentityIndexValue', 'ExtendedRepetitionPeriod', 'GTP-TEID', 'GUMMEI', 'GUMMEIList', 'GUMMEIType', 'GWContextReleaseIndication', 'Global-ENB-ID', 'HandoverRestrictionList', 'HandoverType', 'InformationOnRecommendedCellsAndENBsForPaging', 'KillAllWarningMessages', 'LAI', 'LHN-ID', 'LPPa-PDU', 'MDTPLMNList', 'MME-Group-ID', 'MME-UE-S1AP-ID', 'MMERelaySupportIndicator', 'MMEname', 'MSClassmark2', 'MSClassmark3', 'ManagementBasedMDTAllowed', 'Masked-IMEISV', 'MessageIdentifier', 'NAS-PDU', 'NASSecurityParametersfromE-UTRAN', 'NASSecurityParameterstoE-UTRAN', 'NB-IoT-DefaultPagingDRX', 'NB-IoT-Paging-eDRXInformation', 'NB-IoT-UEIdentityIndexValue', 'NumberofBroadcastRequest', 'OverloadResponse', 'PLMNidentity', 'PS-ServiceNotAvailable', 'PWSfailedECGIList', 'Paging-eDRXInformation', 'PagingDRX', 'PagingPriority', 'PrivacyIndicator', 'ProSeAuthorized', 'RIMTransfer', 'RRC-Establishment-Cause', 'RelativeMMECapacity', 'RelayNode-Indicator', 'RepetitionPeriod', 'RequestType', 'Routing-ID', 'S-TMSI', 'SONConfigurationTransfer', 'SRVCCHOIndication', 'SRVCCOperationNotPossible', 'SRVCCOperationPossible', 'SecurityContext', 'SecurityKey', 'SerialNumber', 'ServedDCNs', 'ServedGUMMEIs', 'Source-ToTarget-TransparentContainer', 'SourceBSS-ToTargetBSS-TransparentContainer', 'SourceRNC-ToTargetRNC-TransparentContainer', 'SourceeNB-ToTargeteNB-TransparentContainer', 'SubscriberProfileIDforRFP', 'SupportedTAs', 'TAI', 'TAIListForRestart', 'Target-ToSource-TransparentContainer', 'TargetBSS-ToSourceBSS-TransparentContainer', 'TargetID', 'TargetRNC-ToSourceRNC-TransparentContainer', 'TargeteNB-ToSourceeNB-TransparentContainer', 'TimeToWait', 'TraceActivation', 'TrafficLoadReductionIndication', 'TransportInformation', 'TransportLayerAddress', 'TunnelInformation', 'UE-RetentionInformation', 'UE-S1AP-IDs', 'UE-Usage-Type', 'UE-associatedLogicalS1-ConnectionItem', 'UEAggregateMaximumBitrate', 'UEIdentityIndexValue', 'UEPagingID', 'UERadioCapability', 'UERadioCapabilityForPaging', 'UESecurityCapabilities', 'UESidelinkAggregateMaximumBitrate', 'UEUserPlaneCIoTSupportIndicator', 'UL-CP-SecurityInformation', 'UserLocationInformation', 'V2XServicesAuthorized', 'VoiceSupportMatchIndicator', 'WarningAreaList', 'WarningMessageContents', 'WarningSecurityInfo', 'WarningType']}, 'object-classes': {}, 'object-sets': {'CSGMembershipInfo-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'CellTrafficTraceIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'ConnectionEstablishmentIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'DeactivateTraceIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'DownlinkNASTransport-IEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'DownlinkNonUEAssociatedLPPaTransport-IEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'DownlinkS1cdma2000tunnellingIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'DownlinkUEAssociatedLPPaTransport-IEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABAdmittedItem-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABAdmittedItemIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABDataForwardingItem-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABDataForwardingItemIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABFailedToResumeItemResumeReq-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABFailedToResumeItemResumeReqIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABFailedToResumeItemResumeRes-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABFailedToResumeItemResumeResIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABFailedToSetupItemHOReqAckExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABFailedtoSetupItemHOReqAckIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABModificationConfirmIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABModificationIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABModifyItemBearerModConfExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABModifyItemBearerModConfIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABModifyItemBearerModResExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABModifyItemBearerModResIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABModifyRequestIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABModifyResponseIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABNotToBeModifiedItemBearerModInd-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABNotToBeModifiedItemBearerModIndIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABReleaseCommandIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABReleaseIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABReleaseItemBearerRelCompExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABReleaseItemBearerRelCompIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABReleaseResponseIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABSetupItemBearerSUResExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABSetupItemBearerSUResIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABSetupItemCtxtSUResExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABSetupItemCtxtSUResIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABSetupRequestIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABSetupResponseIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABToBeModifiedItemBearerModInd-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABToBeModifiedItemBearerModIndIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABToBeModifiedItemBearerModReqIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABToBeModifyItemBearerModReqExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'E-RABToBeSetupItemBearerSUReqExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'E-RABToBeSetupItemBearerSUReqIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABToBeSetupItemCtxtSUReqExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'E-RABToBeSetupItemCtxtSUReqIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABToBeSetupItemHOReq-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': []}, 'E-RABToBeSetupItemHOReqIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABToBeSwitchedDLItem-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABToBeSwitchedDLItemIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'E-RABToBeSwitchedULItem-ExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'E-RABToBeSwitchedULItemIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'ENBCPRelocationIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'ENBConfigurationTransferIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'ENBConfigurationUpdateAcknowledgeIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'ENBConfigurationUpdateFailureIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'ENBConfigurationUpdateIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'ENBDirectInformationTransferIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'ENBStatusTransferIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'ErrorIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'HandoverCancelAcknowledgeIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'HandoverCancelIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'HandoverCommandIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'HandoverFailureIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'HandoverNotifyIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'HandoverPreparationFailureIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'HandoverRequestAcknowledgeIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'HandoverRequestIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'HandoverRequiredIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'InitialContextSetupFailureIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'InitialContextSetupRequestIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'InitialContextSetupResponseIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'InitialUEMessage-IEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'KillRequestIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'KillResponseIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'LocationReportIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'LocationReportingControlIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'LocationReportingFailureIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'MMECPRelocationIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'MMEConfigurationTransferIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'MMEConfigurationUpdateAcknowledgeIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'MMEConfigurationUpdateFailureIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'MMEConfigurationUpdateIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'MMEDirectInformationTransferIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'MMEStatusTransferIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'NASDeliveryIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': ['.']}, 'NASNonDeliveryIndication-IEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'OverloadStartIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'OverloadStopIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'PWSFailureIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'PWSRestartIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'PagingIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'PathSwitchRequestAcknowledgeIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'PathSwitchRequestFailureIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'PathSwitchRequestIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'PrivateMessageIEs': {'class': 'S1AP-PRIVATE-IES', 'members': ['.']}, 'RerouteNASRequest-IEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'ResetAcknowledgeIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'ResetIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'RetrieveUEInformationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'S1SetupFailureIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'S1SetupRequestIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'S1SetupResponseIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'TAIItemExtIEs': {'class': 'S1AP-PROTOCOL-EXTENSION', 'members': ['.']}, 'TAIItemIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'TraceFailureIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'TraceStartIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UE-associatedLogicalS1-ConnectionItemRes': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UE-associatedLogicalS1-ConnectionItemResAck': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UECapabilityInfoIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextModificationConfirmIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextModificationFailureIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextModificationIndicationIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextModificationRequestIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextModificationResponseIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextReleaseCommand-IEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextReleaseComplete-IEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextReleaseRequest-IEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextResumeFailureIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextResumeRequestIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextResumeResponseIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextSuspendRequestIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEContextSuspendResponseIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UEInformationTransferIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UERadioCapabilityMatchRequestIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UERadioCapabilityMatchResponseIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UplinkNASTransport-IEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UplinkNonUEAssociatedLPPaTransport-IEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UplinkS1cdma2000tunnellingIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'UplinkUEAssociatedLPPaTransport-IEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'WriteReplaceWarningRequestIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}, 'WriteReplaceWarningResponseIEs': {'class': 'S1AP-PROTOCOL-IES', 'members': []}}, 'tags': 'AUTOMATIC', 'types': {'CSGMembershipInfo': {'members': [{'name': 'cSGMembershipStatus', 'type': 'CSGMembershipStatus'}, {'name': 'cSG-Id', 'type': 'CSG-Id'}, {'name': 'cellAccessMode', 'optional': True, 'type': 'CellAccessMode'}, {'name': 'pLMNidentity', 'optional': True, 'type': 'PLMNidentity'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'CellTrafficTrace': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'ConnectionEstablishmentIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'DeactivateTrace': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'DownlinkNASTransport': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'DownlinkNonUEAssociatedLPPaTransport': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'DownlinkS1cdma2000tunnelling': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'DownlinkUEAssociatedLPPaTransport': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'E-RAB-IE-ContainerList': {'actual-parameters': [1, 'maxnoofE-RABs', '{'], 'parameters': ['IEsSetParam'], 'type': 'ProtocolIE-ContainerList'}, 'E-RAB-IE-ContainerPairList': {'actual-parameters': [1, 'maxnoofE-RABs', '{'], 'parameters': ['IEsSetParam'], 'type': 'ProtocolIE-ContainerPairList'}, 'E-RABAdmittedItem': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'transportLayerAddress', 'type': 'TransportLayerAddress'}, {'name': 'gTP-TEID', 'type': 'GTP-TEID'}, {'name': 'dL-transportLayerAddress', 'optional': True, 'type': 'TransportLayerAddress'}, {'name': 'dL-gTP-TEID', 'optional': True, 'type': 'GTP-TEID'}, {'name': 'uL-TransportLayerAddress', 'optional': True, 'type': 'TransportLayerAddress'}, {'name': 'uL-GTP-TEID', 'optional': True, 'type': 'GTP-TEID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABAdmittedList': {'actual-parameters': ['{'], 'type': 'E-RAB-IE-ContainerList'}, 'E-RABDataForwardingItem': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'dL-transportLayerAddress', 'optional': True, 'type': 'TransportLayerAddress'}, {'name': 'dL-gTP-TEID', 'optional': True, 'type': 'GTP-TEID'}, {'name': 'uL-TransportLayerAddress', 'optional': True, 'type': 'TransportLayerAddress'}, {'name': 'uL-GTP-TEID', 'optional': True, 'type': 'GTP-TEID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABFailedToResumeItemResumeReq': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'cause', 'type': 'Cause'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABFailedToResumeItemResumeRes': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'cause', 'type': 'Cause'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABFailedToResumeListResumeReq': {'actual-parameters': ['{'], 'type': 'E-RAB-IE-ContainerList'}, 'E-RABFailedToResumeListResumeRes': {'actual-parameters': ['{'], 'type': 'E-RAB-IE-ContainerList'}, 'E-RABFailedToSetupItemHOReqAck': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'cause', 'type': 'Cause'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABFailedtoSetupListHOReqAck': {'actual-parameters': ['{'], 'type': 'E-RAB-IE-ContainerList'}, 'E-RABModificationConfirm': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'E-RABModificationIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'E-RABModifyItemBearerModConf': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABModifyItemBearerModRes': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABModifyListBearerModConf': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofE-RABs')], 'type': 'SEQUENCE ' 'OF'}, 'E-RABModifyListBearerModRes': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofE-RABs')], 'type': 'SEQUENCE ' 'OF'}, 'E-RABModifyRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'E-RABModifyResponse': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'E-RABNotToBeModifiedItemBearerModInd': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'transportLayerAddress', 'type': 'TransportLayerAddress'}, {'name': 'dL-GTP-TEID', 'type': 'GTP-TEID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABNotToBeModifiedListBearerModInd': {'actual-parameters': ['{'], 'type': 'E-RAB-IE-ContainerList'}, 'E-RABReleaseCommand': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'E-RABReleaseIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'E-RABReleaseItemBearerRelComp': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABReleaseListBearerRelComp': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofE-RABs')], 'type': 'SEQUENCE ' 'OF'}, 'E-RABReleaseResponse': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'E-RABSetupItemBearerSURes': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'transportLayerAddress', 'type': 'TransportLayerAddress'}, {'name': 'gTP-TEID', 'type': 'GTP-TEID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABSetupItemCtxtSURes': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'transportLayerAddress', 'type': 'TransportLayerAddress'}, {'name': 'gTP-TEID', 'type': 'GTP-TEID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABSetupListBearerSURes': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofE-RABs')], 'type': 'SEQUENCE ' 'OF'}, 'E-RABSetupListCtxtSURes': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofE-RABs')], 'type': 'SEQUENCE ' 'OF'}, 'E-RABSetupRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'E-RABSetupResponse': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'E-RABSubjecttoDataForwardingList': {'actual-parameters': ['{'], 'type': 'E-RAB-IE-ContainerList'}, 'E-RABToBeModifiedItemBearerModInd': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'transportLayerAddress', 'type': 'TransportLayerAddress'}, {'name': 'dL-GTP-TEID', 'type': 'GTP-TEID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABToBeModifiedItemBearerModReq': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'e-RABLevelQoSParameters', 'type': 'E-RABLevelQoSParameters'}, {'name': 'nAS-PDU', 'type': 'NAS-PDU'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABToBeModifiedListBearerModInd': {'actual-parameters': ['{'], 'type': 'E-RAB-IE-ContainerList'}, 'E-RABToBeModifiedListBearerModReq': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofE-RABs')], 'type': 'SEQUENCE ' 'OF'}, 'E-RABToBeSetupItemBearerSUReq': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'e-RABlevelQoSParameters', 'type': 'E-RABLevelQoSParameters'}, {'name': 'transportLayerAddress', 'type': 'TransportLayerAddress'}, {'name': 'gTP-TEID', 'type': 'GTP-TEID'}, {'name': 'nAS-PDU', 'type': 'NAS-PDU'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABToBeSetupItemCtxtSUReq': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'e-RABlevelQoSParameters', 'type': 'E-RABLevelQoSParameters'}, {'name': 'transportLayerAddress', 'type': 'TransportLayerAddress'}, {'name': 'gTP-TEID', 'type': 'GTP-TEID'}, {'name': 'nAS-PDU', 'optional': True, 'type': 'NAS-PDU'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABToBeSetupItemHOReq': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'transportLayerAddress', 'type': 'TransportLayerAddress'}, {'name': 'gTP-TEID', 'type': 'GTP-TEID'}, {'name': 'e-RABlevelQosParameters', 'type': 'E-RABLevelQoSParameters'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABToBeSetupListBearerSUReq': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofE-RABs')], 'type': 'SEQUENCE ' 'OF'}, 'E-RABToBeSetupListCtxtSUReq': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofE-RABs')], 'type': 'SEQUENCE ' 'OF'}, 'E-RABToBeSetupListHOReq': {'actual-parameters': ['{'], 'type': 'E-RAB-IE-ContainerList'}, 'E-RABToBeSwitchedDLItem': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'transportLayerAddress', 'type': 'TransportLayerAddress'}, {'name': 'gTP-TEID', 'type': 'GTP-TEID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABToBeSwitchedDLList': {'actual-parameters': ['{'], 'type': 'E-RAB-IE-ContainerList'}, 'E-RABToBeSwitchedULItem': {'members': [{'name': 'e-RAB-ID', 'type': 'E-RAB-ID'}, {'name': 'transportLayerAddress', 'type': 'TransportLayerAddress'}, {'name': 'gTP-TEID', 'type': 'GTP-TEID'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'E-RABToBeSwitchedULList': {'actual-parameters': ['{'], 'type': 'E-RAB-IE-ContainerList'}, 'ENBCPRelocationIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'ENBConfigurationTransfer': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'ENBConfigurationUpdate': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'ENBConfigurationUpdateAcknowledge': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'ENBConfigurationUpdateFailure': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'ENBDirectInformationTransfer': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'ENBStatusTransfer': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'ErrorIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'HandoverCancel': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'HandoverCancelAcknowledge': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'HandoverCommand': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'HandoverFailure': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'HandoverNotify': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'HandoverPreparationFailure': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'HandoverRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'HandoverRequestAcknowledge': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'HandoverRequired': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'InitialContextSetupFailure': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'InitialContextSetupRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'InitialContextSetupResponse': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'InitialUEMessage': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'Inter-SystemInformationTransferType': {'members': [{'name': 'rIMTransfer', 'type': 'RIMTransfer'}, None], 'type': 'CHOICE'}, 'KillRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'KillResponse': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'LocationReport': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'LocationReportingControl': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'LocationReportingFailureIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'MMECPRelocationIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'MMEConfigurationTransfer': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'MMEConfigurationUpdate': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'MMEConfigurationUpdateAcknowledge': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'MMEConfigurationUpdateFailure': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'MMEDirectInformationTransfer': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'MMEStatusTransfer': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'NASDeliveryIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'NASNonDeliveryIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'OverloadStart': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'OverloadStop': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'PWSFailureIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'PWSRestartIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'Paging': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'PathSwitchRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'PathSwitchRequestAcknowledge': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'PathSwitchRequestFailure': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'PrivateMessage': {'members': [{'actual-parameters': ['{'], 'name': 'privateIEs', 'type': 'PrivateIE-Container'}, None], 'type': 'SEQUENCE'}, 'ProtocolError-IE-ContainerList': {'actual-parameters': [1, 'maxnoofE-RABs', '{'], 'parameters': ['IEsSetParam'], 'type': 'ProtocolIE-ContainerList'}, 'RerouteNASRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'Reset': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'ResetAcknowledge': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'ResetAll': {'type': 'ENUMERATED', 'values': [('reset-all', 0), None]}, 'ResetType': {'members': [{'name': 's1-Interface', 'type': 'ResetAll'}, {'name': 'partOfS1-Interface', 'type': 'UE-associatedLogicalS1-ConnectionListRes'}, None], 'type': 'CHOICE'}, 'RetrieveUEInformation': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'S1SetupFailure': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'S1SetupRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'S1SetupResponse': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'TAIItem': {'members': [{'name': 'tAI', 'type': 'TAI'}, {'actual-parameters': ['{'], 'name': 'iE-Extensions', 'optional': True, 'type': 'ProtocolExtensionContainer'}, None], 'type': 'SEQUENCE'}, 'TAIList': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofTAIs')], 'type': 'SEQUENCE OF'}, 'TraceFailureIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'TraceStart': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UE-associatedLogicalS1-ConnectionListRes': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofIndividualS1ConnectionsToReset')], 'type': 'SEQUENCE ' 'OF'}, 'UE-associatedLogicalS1-ConnectionListResAck': {'element': {'actual-parameters': ['{'], 'type': 'ProtocolIE-SingleContainer'}, 'size': [(1, 'maxnoofIndividualS1ConnectionsToReset')], 'type': 'SEQUENCE ' 'OF'}, 'UECapabilityInfoIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextModificationConfirm': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextModificationFailure': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextModificationIndication': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextModificationRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextModificationResponse': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextReleaseCommand': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextReleaseComplete': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextReleaseRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextResumeFailure': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextResumeRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextResumeResponse': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextSuspendRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEContextSuspendResponse': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UEInformationTransfer': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UERadioCapabilityMatchRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UERadioCapabilityMatchResponse': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UplinkNASTransport': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UplinkNonUEAssociatedLPPaTransport': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UplinkS1cdma2000tunnelling': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'UplinkUEAssociatedLPPaTransport': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'WriteReplaceWarningRequest': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}, 'WriteReplaceWarningResponse': {'members': [{'actual-parameters': ['{'], 'name': 'protocolIEs', 'type': 'ProtocolIE-Container'}, None], 'type': 'SEQUENCE'}}, 'values': {}}, 'S1AP-PDU-Descriptions': {'extensibility-implied': False, 'imports': {'S1AP-CommonDataTypes': ['Criticality', 'ProcedureCode'], 'S1AP-Constants': ['id-CellTrafficTrace', 'id-ConnectionEstablishmentIndication', 'id-DeactivateTrace', 'id-DownlinkS1cdma2000tunnelling', 'id-E-RABModificationIndication', 'id-E-RABModify', 'id-E-RABRelease', 'id-E-RABReleaseIndication', 'id-E-RABSetup', 'id-ENBConfigurationUpdate', 'id-ErrorIndication', 'id-HandoverCancel', 'id-HandoverNotification', 'id-HandoverPreparation', 'id-HandoverResourceAllocation', 'id-InitialContextSetup', 'id-Kill', 'id-LocationReport', 'id-LocationReportingControl', 'id-LocationReportingFailureIndication', 'id-MMECPRelocationIndication', 'id-MMEConfigurationTransfer', 'id-MMEConfigurationUpdate', 'id-MMEDirectInformationTransfer', 'id-MMEStatusTransfer', 'id-NASDeliveryIndication', 'id-NASNonDeliveryIndication', 'id-OverloadStart', 'id-OverloadStop', 'id-PWSFailureIndication', 'id-PWSRestartIndication', 'id-Paging', 'id-PathSwitchRequest', 'id-PrivateMessage', 'id-RerouteNASRequest', 'id-Reset', 'id-RetrieveUEInformation', 'id-S1Setup', 'id-TraceFailureIndication', 'id-TraceStart', 'id-UECapabilityInfoIndication', 'id-UEContextModification', 'id-UEContextModificationIndication', 'id-UEContextRelease', 'id-UEContextReleaseRequest', 'id-UEContextResume', 'id-UEContextSuspend', 'id-UEInformationTransfer', 'id-UERadioCapabilityMatch', 'id-UplinkS1cdma2000tunnelling', 'id-WriteReplaceWarning', 'id-downlinkNASTransport', 'id-downlinkNonUEAssociatedLPPaTransport', 'id-downlinkUEAssociatedLPPaTransport', 'id-eNBCPRelocationIndication', 'id-eNBConfigurationTransfer', 'id-eNBDirectInformationTransfer', 'id-eNBStatusTransfer', 'id-initialUEMessage', 'id-uplinkNASTransport', 'id-uplinkNonUEAssociatedLPPaTransport', 'id-uplinkUEAssociatedLPPaTransport'], 'S1AP-PDU-Contents': ['CellTrafficTrace', 'ConnectionEstablishmentIndication', 'DeactivateTrace', 'DownlinkNASTransport', 'DownlinkNonUEAssociatedLPPaTransport', 'DownlinkS1cdma2000tunnelling', 'DownlinkUEAssociatedLPPaTransport', 'E-RABModificationConfirm', 'E-RABModificationIndication', 'E-RABModifyRequest', 'E-RABModifyResponse', 'E-RABReleaseCommand', 'E-RABReleaseIndication', 'E-RABReleaseResponse', 'E-RABSetupRequest', 'E-RABSetupResponse', 'ENBCPRelocationIndication', 'ENBConfigurationTransfer', 'ENBConfigurationUpdate', 'ENBConfigurationUpdateAcknowledge', 'ENBConfigurationUpdateFailure', 'ENBDirectInformationTransfer', 'ENBStatusTransfer', 'ErrorIndication', 'HandoverCancel', 'HandoverCancelAcknowledge', 'HandoverCommand', 'HandoverFailure', 'HandoverNotify', 'HandoverPreparationFailure', 'HandoverRequest', 'HandoverRequestAcknowledge', 'HandoverRequired', 'InitialContextSetupFailure', 'InitialContextSetupRequest', 'InitialContextSetupResponse', 'InitialUEMessage', 'KillRequest', 'KillResponse', 'LocationReport', 'LocationReportingControl', 'LocationReportingFailureIndication', 'MMECPRelocationIndication', 'MMEConfigurationTransfer', 'MMEConfigurationUpdate', 'MMEConfigurationUpdateAcknowledge', 'MMEConfigurationUpdateFailure', 'MMEDirectInformationTransfer', 'MMEStatusTransfer', 'NASDeliveryIndication', 'NASNonDeliveryIndication', 'OverloadStart', 'OverloadStop', 'PWSFailureIndication', 'PWSRestartIndication', 'Paging', 'PathSwitchRequest', 'PathSwitchRequestAcknowledge', 'PathSwitchRequestFailure', 'PrivateMessage', 'RerouteNASRequest', 'Reset', 'ResetAcknowledge', 'RetrieveUEInformation', 'S1SetupFailure', 'S1SetupRequest', 'S1SetupResponse', 'TraceFailureIndication', 'TraceStart', 'UECapabilityInfoIndication', 'UEContextModificationConfirm', 'UEContextModificationFailure', 'UEContextModificationIndication', 'UEContextModificationRequest', 'UEContextModificationResponse', 'UEContextReleaseCommand', 'UEContextReleaseComplete', 'UEContextReleaseRequest', 'UEContextResumeFailure', 'UEContextResumeRequest', 'UEContextResumeResponse', 'UEContextSuspendRequest', 'UEContextSuspendResponse', 'UEInformationTransfer', 'UERadioCapabilityMatchRequest', 'UERadioCapabilityMatchResponse', 'UplinkNASTransport', 'UplinkNonUEAssociatedLPPaTransport', 'UplinkS1cdma2000tunnelling', 'UplinkUEAssociatedLPPaTransport', 'WriteReplaceWarningRequest', 'WriteReplaceWarningResponse']}, 'object-classes': {'S1AP-ELEMENTARY-PROCEDURE': {'members': [{'name': '&InitiatingMessage', 'type': 'OpenType'}, {'name': '&SuccessfulOutcome', 'type': 'OpenType'}, {'name': '&UnsuccessfulOutcome', 'type': 'OpenType'}, {'name': '&procedureCode', 'type': 'ProcedureCode'}, {'name': '&criticality', 'type': 'Criticality'}]}}, 'object-sets': {'S1AP-ELEMENTARY-PROCEDURES': {'class': 'S1AP-ELEMENTARY-PROCEDURE', 'members': []}, 'S1AP-ELEMENTARY-PROCEDURES-CLASS-1': {'class': 'S1AP-ELEMENTARY-PROCEDURE', 'members': ['handoverPreparation', 'handoverResourceAllocation', 'pathSwitchRequest', 'e-RABSetup', 'e-RABModify', 'e-RABRelease', 'initialContextSetup', 'handoverCancel', 'kill', 'reset', 's1Setup', 'uEContextModification', 'uEContextRelease', 'eNBConfigurationUpdate', 'mMEConfigurationUpdate', 'writeReplaceWarning', ',', '.', ',', 'uERadioCapabilityMatch', 'e-RABModificationIndication', 'uEContextModificationIndication', 'uEContextSuspend', 'uEContextResume']}, 'S1AP-ELEMENTARY-PROCEDURES-CLASS-2': {'class': 'S1AP-ELEMENTARY-PROCEDURE', 'members': ['handoverNotification', 'e-RABReleaseIndication', 'paging', 'downlinkNASTransport', 'initialUEMessage', 'uplinkNASTransport', 'errorIndication', 'nASNonDeliveryIndication', 'uEContextReleaseRequest', 'downlinkS1cdma2000tunnelling', 'uplinkS1cdma2000tunnelling', 'uECapabilityInfoIndication', 'eNBStatusTransfer', 'mMEStatusTransfer', 'deactivateTrace', 'traceStart', 'traceFailureIndication', 'cellTrafficTrace', 'locationReportingControl', 'locationReportingFailureIndication', 'locationReport', 'overloadStart', 'overloadStop', 'eNBDirectInformationTransfer', 'mMEDirectInformationTransfer', 'eNBConfigurationTransfer', 'mMEConfigurationTransfer', 'privateMessage', ',', '.', ',', 'downlinkUEAssociatedLPPaTransport', 'uplinkUEAssociatedLPPaTransport', 'downlinkNonUEAssociatedLPPaTransport', 'uplinkNonUEAssociatedLPPaTransport', 'pWSRestartIndication', 'rerouteNASRequest', 'pWSFailureIndication', 'connectionEstablishmentIndication', 'nASDeliveryIndication', 'retrieveUEInformation', 'uEInformationTransfer', 'eNBCPRelocationIndication', 'mMECPRelocationIndication']}}, 'tags': 'AUTOMATIC', 'types': {'InitiatingMessage': {'members': [{'name': 'procedureCode', 'table': {'type': 'S1AP-ELEMENTARY-PROCEDURES'}, 'type': 'S1AP-ELEMENTARY-PROCEDURE.&procedureCode'}, {'name': 'criticality', 'table': ['S1AP-ELEMENTARY-PROCEDURES', ['procedureCode']], 'type': 'S1AP-ELEMENTARY-PROCEDURE.&criticality'}, {'name': 'value', 'table': ['S1AP-ELEMENTARY-PROCEDURES', ['procedureCode']], 'type': 'S1AP-ELEMENTARY-PROCEDURE.&InitiatingMessage'}], 'type': 'SEQUENCE'}, 'S1AP-PDU': {'members': [{'name': 'initiatingMessage', 'type': 'InitiatingMessage'}, {'name': 'successfulOutcome', 'type': 'SuccessfulOutcome'}, {'name': 'unsuccessfulOutcome', 'type': 'UnsuccessfulOutcome'}, None], 'type': 'CHOICE'}, 'SuccessfulOutcome': {'members': [{'name': 'procedureCode', 'table': {'type': 'S1AP-ELEMENTARY-PROCEDURES'}, 'type': 'S1AP-ELEMENTARY-PROCEDURE.&procedureCode'}, {'name': 'criticality', 'table': ['S1AP-ELEMENTARY-PROCEDURES', ['procedureCode']], 'type': 'S1AP-ELEMENTARY-PROCEDURE.&criticality'}, {'name': 'value', 'table': ['S1AP-ELEMENTARY-PROCEDURES', ['procedureCode']], 'type': 'S1AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome'}], 'type': 'SEQUENCE'}, 'UnsuccessfulOutcome': {'members': [{'name': 'procedureCode', 'table': {'type': 'S1AP-ELEMENTARY-PROCEDURES'}, 'type': 'S1AP-ELEMENTARY-PROCEDURE.&procedureCode'}, {'name': 'criticality', 'table': ['S1AP-ELEMENTARY-PROCEDURES', ['procedureCode']], 'type': 'S1AP-ELEMENTARY-PROCEDURE.&criticality'}, {'name': 'value', 'table': ['S1AP-ELEMENTARY-PROCEDURES', ['procedureCode']], 'type': 'S1AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome'}], 'type': 'SEQUENCE'}}, 'values': {'cellTrafficTrace': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'connectionEstablishmentIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'deactivateTrace': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'downlinkNASTransport': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'downlinkNonUEAssociatedLPPaTransport': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'downlinkS1cdma2000tunnelling': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'downlinkUEAssociatedLPPaTransport': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'e-RABModificationIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'e-RABModify': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'e-RABRelease': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'e-RABReleaseIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'e-RABSetup': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'eNBCPRelocationIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'eNBConfigurationTransfer': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'eNBConfigurationUpdate': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'eNBDirectInformationTransfer': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'eNBStatusTransfer': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'errorIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'handoverCancel': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'handoverNotification': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'handoverPreparation': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'handoverResourceAllocation': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'initialContextSetup': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'initialUEMessage': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'kill': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'locationReport': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'locationReportingControl': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'locationReportingFailureIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'mMECPRelocationIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'mMEConfigurationTransfer': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'mMEConfigurationUpdate': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'mMEDirectInformationTransfer': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'mMEStatusTransfer': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'nASDeliveryIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'nASNonDeliveryIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'overloadStart': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'overloadStop': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'pWSFailureIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'pWSRestartIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'paging': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'pathSwitchRequest': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'privateMessage': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'rerouteNASRequest': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'reset': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'retrieveUEInformation': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 's1Setup': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'traceFailureIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'traceStart': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uECapabilityInfoIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uEContextModification': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uEContextModificationIndication': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uEContextRelease': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uEContextReleaseRequest': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uEContextResume': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uEContextSuspend': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uEInformationTransfer': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uERadioCapabilityMatch': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uplinkNASTransport': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uplinkNonUEAssociatedLPPaTransport': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uplinkS1cdma2000tunnelling': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'uplinkUEAssociatedLPPaTransport': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}, 'writeReplaceWarning': {'type': 'S1AP-ELEMENTARY-PROCEDURE', 'value': None}}}}asn1tools-0.169.0/tests/files/all_types.asn000066400000000000000000000073201524544274600205740ustar00rootroot00000000000000AllTypes DEFINITIONS ::= BEGIN Boolean ::= BOOLEAN Boolean2 ::= BOOLEAN (FALSE) Boolean3 ::= BOOLEAN (TRUE, ...) boolean BOOLEAN ::= TRUE boolean2 BOOLEAN ::= FALSE Integer ::= INTEGER Integer2 ::= INTEGER (1..99) Integer3 ::= INTEGER (1..2 | 9..10) Integer4 ::= INTEGER ((1..2 UNION 4..5) ^ SIZE (4)) Integer5 ::= INTEGER {a(-1), b(0), c(1)} Integer6 ::= INTEGER (4..7, ...) Real ::= REAL Real2 ::= REAL (1.0..2.0) Real3 ::= REAL (1..2) Real4 ::= REAL (1...2) Real5 ::= REAL (1. ..2) Real6 ::= REAL (-20.0 .. -10.0) Real7 ::= [UNIVERSAL 0] REAL Real8 ::= [APPLICATION 0] REAL Real9 ::= [PRIVATE 0] REAL Real10 ::= REAL (WITH COMPONENTS { mantissa (-16777215..16777215), base (2), exponent (-149..104) }) Bitstring ::= BIT STRING Bitstring2 ::= BIT STRING (SIZE (9)) Bitstring3 ::= BIT STRING (SIZE (5..7)) Bitstring4 ::= BIT STRING { a(0), b(1), c(2) } Bitstring5 ::= BIT STRING { a(0), b(1), c(2) } (SIZE (2..3)) Bitstring6 ::= BIT STRING (SIZE (1..2), ...) bitstring BIT STRING ::= '10001000 1001'B bitstring2 BIT STRING ::= '01234567 89ABCD EF'H Octetstring ::= OCTET STRING Octetstring2 ::= OCTET STRING (SIZE (2)) Octetstring3 ::= OCTET STRING (SIZE (3)) Octetstring4 ::= OCTET STRING (SIZE (3..7)) Octetstring5 ::= OCTET STRING (SIZE (4 | 9)) Null ::= NULL Objectidentifier ::= OBJECT IDENTIFIER Enumerated ::= ENUMERATED { one(1) } Enumerated2 ::= ENUMERATED { one(1), two(2), ..., three(3) } Utf8string ::= UTF8String Sequence ::= SEQUENCE {} Sequence2 ::= SEQUENCE { a INTEGER DEFAULT 0 } Sequence3 ::= SEQUENCE { a BOOLEAN, ... } Sequence4 ::= SEQUENCE { a BOOLEAN, ..., [[ b BOOLEAN ]] } Sequence5 ::= SEQUENCE { a BOOLEAN, ..., [[ b BOOLEAN ]], ... } Sequence6 ::= SEQUENCE { a BOOLEAN, ..., [[ b BOOLEAN ]], ..., c BOOLEAN } Sequence7 ::= SEQUENCE { a BOOLEAN, ..., [[ b BOOLEAN ]], [[ c BOOLEAN ]], ..., d BOOLEAN } Sequence8 ::= SEQUENCE { a BOOLEAN, ..., ... } Sequence9 ::= SEQUENCE { a INTEGER, b BOOLEAN OPTIONAL } Sequence10 ::= SEQUENCE { c Sequence9 (WITH COMPONENTS {..., b ABSENT}), d Sequence9, ... } Sequence11 ::= Sequence10 (WITH COMPONENTS { c (WITH COMPONENTS {a (32)}) OPTIONAL, d }) -- Recursive Sequence12 ::= SEQUENCE { a SEQUENCE OF Sequence12 OPTIONAL } List ::= SEQUENCE OF INTEGER Sequence13 ::= SEQUENCE { a [0] IMPLICIT List OPTIONAL, b [1] IMPLICIT List OPTIONAL } Sequence14 ::= SEQUENCE { a [0] INTEGER, b [1] Choice, c [2] Sequence9, d [3] CHOICE { a BOOLEAN } } Sequence15 ::= SEQUENCE { a Bitstring4 DEFAULT {a, b}, b Bitstring4 DEFAULT '110'B, c Bitstring4 DEFAULT 'C'H } Sequence16 ::= Sequence9 (WITH COMPONENTS { b PRESENT }) Sequence17 ::= Sequence9 (WITH COMPONENTS { b ABSENT }) Sequence18 ::= Sequence9 (Sequence16 | Sequence17) Set ::= SET {} Set2 ::= SET { a INTEGER DEFAULT 1 } Choice ::= CHOICE { a INTEGER } choice CHOICE { foo A } ::= foo : bar foo INTEGER ::= 1 Numericstring ::= NumericString Printablestring ::= PrintableString Ia5string ::= IA5String Ia5string2 ::= IA5String (FROM ("a".."f" | "0".."9")) Ia5string3 ::= IA5String ("foo" | "bar" | "fie" | "...") Ia5string4 ::= IA5String (SIZE (1) ^ FROM ("0".."2")) ia5string IA5String ::= { 1, 2 } ia5string2 IA5String ::= { 1, 2, 3, 4 } Universalstring ::= UniversalString Visiblestring ::= VisibleString Generalstring ::= GeneralString Bmpstring ::= BMPString Teletexstring ::= TeletexString Graphicstring ::= GraphicString Utctime ::= UTCTime GeneralizedTime1 ::= GeneralizedTime SequenceOf ::= SEQUENCE OF INTEGER SetOf ::= SET OF INTEGER Any ::= ANY END asn1tools-0.169.0/tests/files/all_types.py000066400000000000000000000357241524544274600204540ustar00rootroot00000000000000EXPECTED = {'AllTypes': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'Any': {'type': 'ANY'}, 'Bitstring': {'type': 'BIT STRING'}, 'Bitstring2': {'size': [9], 'type': 'BIT STRING'}, 'Bitstring3': {'size': [(5, 7)], 'type': 'BIT STRING'}, 'Bitstring4': {'named-bits': [('a', '0'), ('b', '1'), ('c', '2')], 'type': 'BIT STRING'}, 'Bitstring5': {'named-bits': [('a', '0'), ('b', '1'), ('c', '2')], 'size': [(2, 3)], 'type': 'BIT STRING'}, 'Bitstring6': {'size': [(1, 2), None], 'type': 'BIT STRING'}, 'Bmpstring': {'type': 'BMPString'}, 'Boolean': {'type': 'BOOLEAN'}, 'Boolean2': {'restricted-to': ['FALSE'], 'type': 'BOOLEAN'}, 'Boolean3': {'restricted-to': ['TRUE', None], 'type': 'BOOLEAN'}, 'Choice': {'members': [{'name': 'a', 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'Enumerated': {'type': 'ENUMERATED', 'values': [('one', 1)]}, 'Enumerated2': {'type': 'ENUMERATED', 'values': [('one', 1), ('two', 2), None, ('three', 3)]}, 'GeneralizedTime1': {'type': 'GeneralizedTime'}, 'Generalstring': {'type': 'GeneralString'}, 'Graphicstring': {'type': 'GraphicString'}, 'Ia5string': {'type': 'IA5String'}, 'Ia5string2': {'from': [('a', 'f'), ('0', '9')], 'type': 'IA5String'}, 'Ia5string3': {'restricted-to': ['foo', 'bar', 'fie', '...'], 'type': 'IA5String'}, 'Ia5string4': {'from': [('0', '2')], 'size': [1], 'type': 'IA5String'}, 'Integer': {'type': 'INTEGER'}, 'Integer2': {'restricted-to': [(1, 99)], 'type': 'INTEGER'}, 'Integer3': {'restricted-to': [(1, 2), (9, 10)], 'type': 'INTEGER'}, 'Integer4': {'size': [4], 'type': 'INTEGER'}, 'Integer5': {'named-numbers': {'a': -1, 'b': 0, 'c': 1}, 'type': 'INTEGER'}, 'Integer6': {'restricted-to': [(4, 7), None], 'type': 'INTEGER'}, 'List': {'element': {'type': 'INTEGER'}, 'type': 'SEQUENCE OF'}, 'Null': {'type': 'NULL'}, 'Numericstring': {'type': 'NumericString'}, 'Objectidentifier': {'type': 'OBJECT IDENTIFIER'}, 'Octetstring': {'type': 'OCTET STRING'}, 'Octetstring2': {'size': [2], 'type': 'OCTET STRING'}, 'Octetstring3': {'size': [3], 'type': 'OCTET STRING'}, 'Octetstring4': {'size': [(3, 7)], 'type': 'OCTET STRING'}, 'Octetstring5': {'size': [4, 9], 'type': 'OCTET STRING'}, 'Printablestring': {'type': 'PrintableString'}, 'Real': {'type': 'REAL'}, 'Real10': {'type': 'REAL', 'with-components': [('mantissa', (-16777215, 16777215)), ('base', 2), ('exponent', (-149, 104))]}, 'Real2': {'restricted-to': [('1.0', '2.0')], 'type': 'REAL'}, 'Real3': {'restricted-to': [(1, 2)], 'type': 'REAL'}, 'Real4': {'restricted-to': [('1.', 2)], 'type': 'REAL'}, 'Real5': {'restricted-to': [('1.', 2)], 'type': 'REAL'}, 'Real6': {'restricted-to': [('-20.0', '-10.0')], 'type': 'REAL'}, 'Real7': {'tag': {'class': 'UNIVERSAL', 'number': 0}, 'type': 'REAL'}, 'Real8': {'tag': {'class': 'APPLICATION', 'number': 0}, 'type': 'REAL'}, 'Real9': {'tag': {'class': 'PRIVATE', 'number': 0}, 'type': 'REAL'}, 'Sequence': {'members': [], 'type': 'SEQUENCE'}, 'Sequence10': {'members': [{'name': 'c', 'type': 'Sequence9', 'with-components': [None, ('b', 'ABSENT')]}, {'name': 'd', 'type': 'Sequence9'}, None], 'type': 'SEQUENCE'}, 'Sequence11': {'type': 'Sequence10', 'with-components': [['c', [{'with-components': [('a', 32)]}], 'OPTIONAL'], ['d']]}, 'Sequence12': {'members': [{'element': {'type': 'Sequence12'}, 'name': 'a', 'optional': True, 'type': 'SEQUENCE OF'}], 'type': 'SEQUENCE'}, 'Sequence13': {'members': [{'name': 'a', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'List'}, {'name': 'b', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'List'}], 'type': 'SEQUENCE'}, 'Sequence14': {'members': [{'name': 'a', 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'b', 'tag': {'number': 1}, 'type': 'Choice'}, {'name': 'c', 'tag': {'number': 2}, 'type': 'Sequence9'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'd', 'tag': {'number': 3}, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'Sequence15': {'members': [{'default': ['a', 'b'], 'name': 'a', 'type': 'Bitstring4'}, {'default': '0b110', 'name': 'b', 'type': 'Bitstring4'}, {'default': '0xc', 'name': 'c', 'type': 'Bitstring4'}], 'type': 'SEQUENCE'}, 'Sequence16': {'type': 'Sequence9', 'with-components': [('b', 'PRESENT')]}, 'Sequence17': {'type': 'Sequence9', 'with-components': [('b', 'ABSENT')]}, 'Sequence18': {'restricted-to': [{'type': 'Sequence16'}, {'type': 'Sequence17'}], 'type': 'Sequence9'}, 'Sequence2': {'members': [{'default': 0, 'name': 'a', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Sequence3': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'Sequence4': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, [{'name': 'b', 'type': 'BOOLEAN'}]], 'type': 'SEQUENCE'}, 'Sequence5': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, [{'name': 'b', 'type': 'BOOLEAN'}], None], 'type': 'SEQUENCE'}, 'Sequence6': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, [{'name': 'b', 'type': 'BOOLEAN'}], None, {'name': 'c', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'Sequence7': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, [{'name': 'b', 'type': 'BOOLEAN'}], [{'name': 'c', 'type': 'BOOLEAN'}], None, {'name': 'd', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'Sequence8': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, None], 'type': 'SEQUENCE'}, 'Sequence9': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'SequenceOf': {'element': {'type': 'INTEGER'}, 'type': 'SEQUENCE OF'}, 'Set': {'members': [], 'type': 'SET'}, 'Set2': {'members': [{'default': 1, 'name': 'a', 'type': 'INTEGER'}], 'type': 'SET'}, 'SetOf': {'element': {'type': 'INTEGER'}, 'type': 'SET OF'}, 'Teletexstring': {'type': 'TeletexString'}, 'Universalstring': {'type': 'UniversalString'}, 'Utctime': {'type': 'UTCTime'}, 'Utf8string': {'type': 'UTF8String'}, 'Visiblestring': {'type': 'VisibleString'}}, 'values': {'bitstring': {'type': 'BIT STRING', 'value': '0b100010001001'}, 'bitstring2': {'type': 'BIT STRING', 'value': '0x0123456789abcdef'}, 'boolean': {'type': 'BOOLEAN', 'value': True}, 'boolean2': {'type': 'BOOLEAN', 'value': False}, 'choice': {'type': 'CHOICE', 'value': 'foo'}, 'foo': {'type': 'INTEGER', 'value': 1}, 'ia5string': {'type': 'IA5String', 'value': '{'}, 'ia5string2': {'type': 'IA5String', 'value': '{'}}}}asn1tools-0.169.0/tests/files/all_types_automatic_tags.asn000066400000000000000000000004031524544274600236530ustar00rootroot00000000000000AllTypes DEFINITIONS AUTOMATIC TAGS ::= BEGIN Sequence9 ::= SEQUENCE { a INTEGER, b BOOLEAN OPTIONAL } Sequence2 ::= SEQUENCE { COMPONENTS OF Sequence9, c INTEGER } Sequence3 ::= SEQUENCE { COMPONENTS OF Sequence2, d BOOLEAN } END asn1tools-0.169.0/tests/files/all_types_automatic_tags.py000066400000000000000000000022241524544274600235250ustar00rootroot00000000000000EXPECTED = {'AllTypes': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'Sequence2': {'members': [{'components-of': 'Sequence9'}, {'name': 'c', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Sequence3': {'members': [{'components-of': 'Sequence2'}, {'name': 'd', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'Sequence9': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}}, 'values': {}}}asn1tools-0.169.0/tests/files/all_types_automatic_tags_pp.py000066400000000000000000000061661524544274600242350ustar00rootroot00000000000000EXPECTED = {'AllTypes': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'Sequence2': {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'name': 'b', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'BOOLEAN'}, {'name': 'c', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Sequence3': {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'name': 'b', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'BOOLEAN'}, {'name': 'c', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'INTEGER'}, {'name': 'd', 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'Sequence9': {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'name': 'b', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}}, 'values': {}}} asn1tools-0.169.0/tests/files/bar.asn000066400000000000000000000007051524544274600173440ustar00rootroot00000000000000Bar DEFINITIONS EXPLICIT TAGS ::= BEGIN GetRequest ::= [APPLICATION 0] IMPLICIT SEQUENCE { headerOnly BOOLEAN, lock BOOLEAN, acceptTypes AcceptTypes OPTIONAL, url OCTET STRING } AcceptTypes ::= [APPLICATION 1] IMPLICIT SEQUENCE { standardTypes [0] IMPLICIT SEQUENCE OF BIT STRING { html(0), plain-text(1), gif(2), jpeg(3) } OPTIONAL, otherTypes [1] IMPLICIT SEQUENCE OF OCTET STRING OPTIONAL } END asn1tools-0.169.0/tests/files/bar.py000066400000000000000000000056311524544274600172160ustar00rootroot00000000000000EXPECTED = {'Bar': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'EXPLICIT', 'types': {'AcceptTypes': {'members': [{'element': {'named-bits': [('html', '0'), ('plain-text', '1'), ('gif', '2'), ('jpeg', '3')], 'type': 'BIT ' 'STRING'}, 'name': 'standardTypes', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'SEQUENCE OF'}, {'element': {'type': 'OCTET ' 'STRING'}, 'name': 'otherTypes', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'SEQUENCE OF'}], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 1}, 'type': 'SEQUENCE'}, 'GetRequest': {'members': [{'name': 'headerOnly', 'type': 'BOOLEAN'}, {'name': 'lock', 'type': 'BOOLEAN'}, {'name': 'acceptTypes', 'optional': True, 'type': 'AcceptTypes'}, {'name': 'url', 'type': 'OCTET STRING'}], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 0}, 'type': 'SEQUENCE'}}, 'values': {}}}asn1tools-0.169.0/tests/files/c_source/000077500000000000000000000000001524544274600176755ustar00rootroot00000000000000asn1tools-0.169.0/tests/files/c_source/boolean.asn000066400000000000000000000001021524544274600220100ustar00rootroot00000000000000Boolean DEFINITIONS AUTOMATIC TAGS ::= BEGIN A ::= BOOLEAN END asn1tools-0.169.0/tests/files/c_source/boolean_uper.c000066400000000000000000000120751524544274600225200ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.147.0 Wed Apr 15 07:30:29 2020. */ #include #include "boolean_uper.h" struct encoder_t { uint8_t *buf_p; ssize_t size; ssize_t pos; }; struct decoder_t { const uint8_t *buf_p; ssize_t size; ssize_t pos; }; static void encoder_init(struct encoder_t *self_p, uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (8 * (ssize_t)size); self_p->pos = 0; } static ssize_t encoder_get_result(const struct encoder_t *self_p) { if (self_p->size >= 0) { return ((self_p->pos + 7) / 8); } else { return (self_p->pos); } } static void encoder_abort(struct encoder_t *self_p, ssize_t error) { if (self_p->size >= 0) { self_p->size = -error; self_p->pos = -error; } } static ssize_t encoder_alloc(struct encoder_t *self_p, size_t size) { ssize_t pos; if ((self_p->pos + (ssize_t)size) <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -ENOMEM; encoder_abort(self_p, ENOMEM); } return (pos); } static void encoder_append_bit(struct encoder_t *self_p, int value) { ssize_t pos; pos = encoder_alloc(self_p, 1); if (pos < 0) { return; } if ((pos % 8) == 0) { self_p->buf_p[pos / 8] = 0; } self_p->buf_p[pos / 8] |= (uint8_t)(value << (7 - (pos % 8))); } static void encoder_append_bool(struct encoder_t *self_p, bool value) { encoder_append_bit(self_p, value ? 1 : 0); } static void decoder_init(struct decoder_t *self_p, const uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (8 * (ssize_t)size); self_p->pos = 0; } static ssize_t decoder_get_result(const struct decoder_t *self_p) { if (self_p->size >= 0) { return ((self_p->pos + 7) / 8); } else { return (self_p->pos); } } static void decoder_abort(struct decoder_t *self_p, ssize_t error) { if (self_p->size >= 0) { self_p->size = -error; self_p->pos = -error; } } static ssize_t decoder_free(struct decoder_t *self_p, size_t size) { ssize_t pos; if ((self_p->pos + (ssize_t)size) <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -EOUTOFDATA; decoder_abort(self_p, EOUTOFDATA); } return (pos); } static int decoder_read_bit(struct decoder_t *self_p) { ssize_t pos; int value; pos = decoder_free(self_p, 1); if (pos >= 0) { value = ((self_p->buf_p[pos / 8] >> (7 - (pos % 8))) & 1); } else { value = 0; } return (value); } static bool decoder_read_bool(struct decoder_t *self_p) { return (decoder_read_bit(self_p) != 0); } static void boolean_uper_boolean_a_encode_inner( struct encoder_t *encoder_p, const struct boolean_uper_boolean_a_t *src_p) { encoder_append_bool(encoder_p, src_p->value); } static void boolean_uper_boolean_a_decode_inner( struct decoder_t *decoder_p, struct boolean_uper_boolean_a_t *dst_p) { dst_p->value = decoder_read_bool(decoder_p); } ssize_t boolean_uper_boolean_a_encode( uint8_t *dst_p, size_t size, const struct boolean_uper_boolean_a_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); boolean_uper_boolean_a_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t boolean_uper_boolean_a_decode( struct boolean_uper_boolean_a_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); boolean_uper_boolean_a_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } asn1tools-0.169.0/tests/files/c_source/boolean_uper.h000066400000000000000000000046371524544274600225320ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.146.6 Fri Apr 3 14:50:20 2020. */ #ifndef BOOLEAN_UPER_H #define BOOLEAN_UPER_H #include #include #include #ifndef ENOMEM # define ENOMEM 12 #endif #ifndef EINVAL # define EINVAL 22 #endif #ifndef EOUTOFDATA # define EOUTOFDATA 500 #endif #ifndef EBADCHOICE # define EBADCHOICE 501 #endif #ifndef EBADLENGTH # define EBADLENGTH 502 #endif #ifndef EBADENUM # define EBADENUM 503 #endif /** * Type A in module Boolean. */ struct boolean_uper_boolean_a_t { bool value; }; /** * Encode type A defined in module Boolean. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t boolean_uper_boolean_a_encode( uint8_t *dst_p, size_t size, const struct boolean_uper_boolean_a_t *src_p); /** * Decode type A defined in module Boolean. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t boolean_uper_boolean_a_decode( struct boolean_uper_boolean_a_t *dst_p, const uint8_t *src_p, size_t size); #endif asn1tools-0.169.0/tests/files/c_source/c_source-minus.asn000066400000000000000000000000731524544274600233330ustar00rootroot00000000000000Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN A ::= NULL END asn1tools-0.169.0/tests/files/c_source/c_source-minus.c000066400000000000000000000057241524544274600230040ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.146.6 Tue Apr 14 16:08:00 2020. */ #include #include "c_source-minus.h" struct encoder_t { uint8_t *buf_p; ssize_t size; ssize_t pos; }; struct decoder_t { const uint8_t *buf_p; ssize_t size; ssize_t pos; }; static void encoder_init(struct encoder_t *self_p, uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (ssize_t)size; self_p->pos = 0; } static ssize_t encoder_get_result(const struct encoder_t *self_p) { return (self_p->pos); } static void decoder_init(struct decoder_t *self_p, const uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (ssize_t)size; self_p->pos = 0; } static ssize_t decoder_get_result(const struct decoder_t *self_p) { return (self_p->pos); } static void c_source_minus_foo_a_encode_inner( struct encoder_t *encoder_p, const struct c_source_minus_foo_a_t *src_p) { (void)encoder_p; (void)src_p; } static void c_source_minus_foo_a_decode_inner( struct decoder_t *decoder_p, struct c_source_minus_foo_a_t *dst_p) { (void)decoder_p; (void)dst_p; } ssize_t c_source_minus_foo_a_encode( uint8_t *dst_p, size_t size, const struct c_source_minus_foo_a_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); c_source_minus_foo_a_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t c_source_minus_foo_a_decode( struct c_source_minus_foo_a_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); c_source_minus_foo_a_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } asn1tools-0.169.0/tests/files/c_source/c_source-minus.h000066400000000000000000000046201524544274600230030ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.146.6 Tue Apr 14 16:08:00 2020. */ #ifndef C_SOURCE_MINUS_H #define C_SOURCE_MINUS_H #include #include #include #ifndef ENOMEM # define ENOMEM 12 #endif #ifndef EINVAL # define EINVAL 22 #endif #ifndef EOUTOFDATA # define EOUTOFDATA 500 #endif #ifndef EBADCHOICE # define EBADCHOICE 501 #endif #ifndef EBADLENGTH # define EBADLENGTH 502 #endif #ifndef EBADENUM # define EBADENUM 503 #endif /** * Type A in module Foo. */ struct c_source_minus_foo_a_t { uint8_t dummy; }; /** * Encode type A defined in module Foo. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t c_source_minus_foo_a_encode( uint8_t *dst_p, size_t size, const struct c_source_minus_foo_a_t *src_p); /** * Decode type A defined in module Foo. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t c_source_minus_foo_a_decode( struct c_source_minus_foo_a_t *dst_p, const uint8_t *src_p, size_t size); #endif asn1tools-0.169.0/tests/files/c_source/c_source.asn000066400000000000000000000223051524544274600222040ustar00rootroot00000000000000CSource DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS REFERENCED-SEQUENCE, REFERENCED-ENUM, REFERENCED-INT FROM CRef; A ::= SEQUENCE { a INTEGER (-128..127), b INTEGER (-32768..32767), c INTEGER (-2147483648..2147483647), d INTEGER (-9223372036854775808..9223372036854775807), e INTEGER (0..255), f INTEGER (0..65535), g INTEGER (0..4294967295), h INTEGER (0..18446744073709551615), i BOOLEAN, j OCTET STRING (SIZE (11)) } B ::= CHOICE { a INTEGER (-128..127), b A, c NULL } C ::= SEQUENCE (SIZE (0..2)) OF B D ::= SEQUENCE (SIZE (1..10)) OF SEQUENCE { a SEQUENCE { b CHOICE { c INTEGER (0..1), d BOOLEAN }, e SEQUENCE (SIZE (3..4)) OF NULL, f NULL }, g SEQUENCE { h ENUMERATED { i, j(4), k(512) } DEFAULT j, l OCTET STRING (SIZE (1..2)) }, m SEQUENCE { n BOOLEAN OPTIONAL, o INTEGER (-2..4) DEFAULT 3, p SEQUENCE { q OCTET STRING (SIZE (5)), r BOOLEAN OPTIONAL } OPTIONAL, s BOOLEAN DEFAULT FALSE } } E ::= SEQUENCE { a CHOICE { b CHOICE { c BOOLEAN } } } F ::= SEQUENCE (SIZE (1..2)) OF SEQUENCE (SIZE (1)) OF BOOLEAN G ::= SEQUENCE { a BOOLEAN OPTIONAL, b BOOLEAN OPTIONAL, c BOOLEAN OPTIONAL, d BOOLEAN OPTIONAL, e BOOLEAN OPTIONAL, f BOOLEAN OPTIONAL, g BOOLEAN OPTIONAL, h BOOLEAN OPTIONAL, i BOOLEAN OPTIONAL } H ::= NULL I ::= OCTET STRING (SIZE (24)) J ::= OCTET STRING (SIZE (22..23)) K ::= ENUMERATED { a } L ::= OCTET STRING (SIZE (0..500)) M ::= SEQUENCE { a K, b N } N ::= SEQUENCE { a K, b A, c O } O ::= SEQUENCE (SIZE (1..260)) OF BOOLEAN P ::= SEQUENCE { a A, b M, c F } Q ::= CHOICE { c001 BOOLEAN, c002 BOOLEAN, c003 BOOLEAN, c004 BOOLEAN, c005 BOOLEAN, c006 BOOLEAN, c007 BOOLEAN, c008 BOOLEAN, c009 BOOLEAN, c010 BOOLEAN, c011 BOOLEAN, c012 BOOLEAN, c013 BOOLEAN, c014 BOOLEAN, c015 BOOLEAN, c016 BOOLEAN, c017 BOOLEAN, c018 BOOLEAN, c019 BOOLEAN, c020 BOOLEAN, c021 BOOLEAN, c022 BOOLEAN, c023 BOOLEAN, c024 BOOLEAN, c025 BOOLEAN, c026 BOOLEAN, c027 BOOLEAN, c028 BOOLEAN, c029 BOOLEAN, c030 BOOLEAN, c031 BOOLEAN, c032 BOOLEAN, c033 BOOLEAN, c034 BOOLEAN, c035 BOOLEAN, c036 BOOLEAN, c037 BOOLEAN, c038 BOOLEAN, c039 BOOLEAN, c040 BOOLEAN, c041 BOOLEAN, c042 BOOLEAN, c043 BOOLEAN, c044 BOOLEAN, c045 BOOLEAN, c046 BOOLEAN, c047 BOOLEAN, c048 BOOLEAN, c049 BOOLEAN, c050 BOOLEAN, c051 BOOLEAN, c052 BOOLEAN, c053 BOOLEAN, c054 BOOLEAN, c055 BOOLEAN, c056 BOOLEAN, c057 BOOLEAN, c058 BOOLEAN, c059 BOOLEAN, c060 BOOLEAN, c061 BOOLEAN, c062 BOOLEAN, c063 BOOLEAN, c064 BOOLEAN, c065 BOOLEAN, c066 BOOLEAN, c067 BOOLEAN, c068 BOOLEAN, c069 BOOLEAN, c070 BOOLEAN, c071 BOOLEAN, c072 BOOLEAN, c073 BOOLEAN, c074 BOOLEAN, c075 BOOLEAN, c076 BOOLEAN, c077 BOOLEAN, c078 BOOLEAN, c079 BOOLEAN, c080 BOOLEAN, c081 BOOLEAN, c082 BOOLEAN, c083 BOOLEAN, c084 BOOLEAN, c085 BOOLEAN, c086 BOOLEAN, c087 BOOLEAN, c088 BOOLEAN, c089 BOOLEAN, c090 BOOLEAN, c091 BOOLEAN, c092 BOOLEAN, c093 BOOLEAN, c094 BOOLEAN, c095 BOOLEAN, c096 BOOLEAN, c097 BOOLEAN, c098 BOOLEAN, c099 BOOLEAN, c100 BOOLEAN, c101 BOOLEAN, c102 BOOLEAN, c103 BOOLEAN, c104 BOOLEAN, c105 BOOLEAN, c106 BOOLEAN, c107 BOOLEAN, c108 BOOLEAN, c109 BOOLEAN, c110 BOOLEAN, c111 BOOLEAN, c112 BOOLEAN, c113 BOOLEAN, c114 BOOLEAN, c115 BOOLEAN, c116 BOOLEAN, c117 BOOLEAN, c118 BOOLEAN, c119 BOOLEAN, c120 BOOLEAN, c121 BOOLEAN, c122 BOOLEAN, c123 BOOLEAN, c124 BOOLEAN, c125 BOOLEAN, c126 BOOLEAN, c127 BOOLEAN, c128 BOOLEAN, c129 BOOLEAN, c130 BOOLEAN, c131 BOOLEAN, c132 BOOLEAN, c133 BOOLEAN, c134 BOOLEAN, c135 BOOLEAN, c136 BOOLEAN, c137 BOOLEAN, c138 BOOLEAN, c139 BOOLEAN, c140 BOOLEAN, c141 BOOLEAN, c142 BOOLEAN, c143 BOOLEAN, c144 BOOLEAN, c145 BOOLEAN, c146 BOOLEAN, c147 BOOLEAN, c148 BOOLEAN, c149 BOOLEAN, c150 BOOLEAN, c151 BOOLEAN, c152 BOOLEAN, c153 BOOLEAN, c154 BOOLEAN, c155 BOOLEAN, c156 BOOLEAN, c157 BOOLEAN, c158 BOOLEAN, c159 BOOLEAN, c160 BOOLEAN, c161 BOOLEAN, c162 BOOLEAN, c163 BOOLEAN, c164 BOOLEAN, c165 BOOLEAN, c166 BOOLEAN, c167 BOOLEAN, c168 BOOLEAN, c169 BOOLEAN, c170 BOOLEAN, c171 BOOLEAN, c172 BOOLEAN, c173 BOOLEAN, c174 BOOLEAN, c175 BOOLEAN, c176 BOOLEAN, c177 BOOLEAN, c178 BOOLEAN, c179 BOOLEAN, c180 BOOLEAN, c181 BOOLEAN, c182 BOOLEAN, c183 BOOLEAN, c184 BOOLEAN, c185 BOOLEAN, c186 BOOLEAN, c187 BOOLEAN, c188 BOOLEAN, c189 BOOLEAN, c190 BOOLEAN, c191 BOOLEAN, c192 BOOLEAN, c193 BOOLEAN, c194 BOOLEAN, c195 BOOLEAN, c196 BOOLEAN, c197 BOOLEAN, c198 BOOLEAN, c199 BOOLEAN, c200 BOOLEAN, c201 BOOLEAN, c202 BOOLEAN, c203 BOOLEAN, c204 BOOLEAN, c205 BOOLEAN, c206 BOOLEAN, c207 BOOLEAN, c208 BOOLEAN, c209 BOOLEAN, c210 BOOLEAN, c211 BOOLEAN, c212 BOOLEAN, c213 BOOLEAN, c214 BOOLEAN, c215 BOOLEAN, c216 BOOLEAN, c217 BOOLEAN, c218 BOOLEAN, c219 BOOLEAN, c220 BOOLEAN, c221 BOOLEAN, c222 BOOLEAN, c223 BOOLEAN, c224 BOOLEAN, c225 BOOLEAN, c226 BOOLEAN, c227 BOOLEAN, c228 BOOLEAN, c229 BOOLEAN, c230 BOOLEAN, c231 BOOLEAN, c232 BOOLEAN, c233 BOOLEAN, c234 BOOLEAN, c235 BOOLEAN, c236 BOOLEAN, c237 BOOLEAN, c238 BOOLEAN, c239 BOOLEAN, c240 BOOLEAN, c241 BOOLEAN, c242 BOOLEAN, c243 BOOLEAN, c244 BOOLEAN, c245 BOOLEAN, c246 BOOLEAN, c247 BOOLEAN, c248 BOOLEAN, c249 BOOLEAN, c250 BOOLEAN, c251 BOOLEAN, c252 BOOLEAN, c253 BOOLEAN, c254 BOOLEAN, c255 BOOLEAN, c256 BOOLEAN, c257 BOOLEAN } -- 1 bit signed R ::= INTEGER (-1..0) -- 2 bits signed S ::= INTEGER (-2..1) T ::= INTEGER (-1..2) -- 7 bits signed U ::= INTEGER (-64..63) -- 8 bits signed V ::= INTEGER (-128..127) -- 9 bits signed W ::= INTEGER (-1..510) -- 10 bits signed X ::= INTEGER (-2..510) -- 10 bits unsigned Y ::= INTEGER (10000..10512) Z ::= BOOLEAN -- Parameterization AA {Param1, Param2} ::= SEQUENCE { a Param1, b Param2 } AB ::= AA { R, Y } AC ::= AA { Q, D } -- All encoded values valid (1 bit). AD ::= ENUMERATED { a, b } -- Extensibility - with additionals AE ::= SEQUENCE { a BOOLEAN OPTIONAL, b BOOLEAN DEFAULT TRUE, c BOOLEAN, ... } AF ::= SEQUENCE { a BOOLEAN, ..., b AH, e INTEGER(0..255), f INTEGER(0..255), g INTEGER(0..255), h INTEGER(0..255), i INTEGER(0..255), j INTEGER(0..255) OPTIONAL, k INTEGER(0..255) DEFAULT 24, l INTEGER(0..255), ... } AG ::= SEQUENCE { a BOOLEAN, ..., b OCTET STRING (SIZE(0..10)), c SEQUENCE (SIZE (1..10)) OF BOOLEAN, d ENUMERATED { e, f(256), g(65536) }, h NULL, i REAL (WITH COMPONENTS { mantissa (-16777215..16777215), base (2), exponent (-149..104) }), j CHOICE { k INTEGER (0..65535), l BOOLEAN }, m OCTET STRING(SIZE(5)), ... } AH ::= SEQUENCE { c BOOLEAN, ..., d INTEGER(0..255), e ENUMERATED {f, g, h}, ... } AI ::= SEQUENCE { a AK } AJ ::= SEQUENCE { a ENUMERATED { a-1, a-2 } } AK ::= CHOICE { a AJ } AL ::= INTEGER (-129..127) AM ::= INTEGER (-2..128) AN ::= ENUMERATED { a(-16777216), b(-8388608), c(-65536), d(-32768), e(-128), f(0), g(127), h(128), i(32767), j(65536), k(16777216) } ao-value-b INTEGER ::= 1 AO ::= SEQUENCE { a BIT STRING { a(0), b(ao-value-b), c(7) } (SIZE(8)), b BIT STRING { a(0), b(1), c(23) } (SIZE(24)), c BIT STRING (SIZE(4)), d BIT STRING { a(1), b(2), c(31) } (SIZE(32)), e BIT STRING { a(1), b(32), c(63) } (SIZE(64)) } AP ::= SEQUENCE { b REFERENCED-SEQUENCE, c REFERENCED-ENUM DEFAULT a, d REFERENCED-INT DEFAULT 1 } AQ ::= INTEGER (0..16777215) AR ::= SEQUENCE { a OCTET STRING(SIZE(0..10)) DEFAULT 'ABCD'H } AS ::= SEQUENCE { a-a BOOLEAN OPTIONAL, a-b CHOICE { b-a BOOLEAN, b-b BOOLEAN }, a-c BOOLEAN DEFAULT TRUE } AT ::= SEQUENCE { a INTEGER (0..127), ..., b SEQUENCE (SIZE(1..32)) OF A OPTIONAL, ... } END CRef DEFINITIONS AUTOMATIC TAGS ::= BEGIN REFERENCED-SEQUENCE ::= SEQUENCE { a INTEGER (0..127) } REFERENCED-ENUM ::= ENUMERATED { a, b, c } REFERENCED-INT ::= INTEGER (0..255) AT ::= BIT STRING (SIZE(2)) AU ::= SEQUENCE { a-a CHOICE { b-a ENUMERATED {a, b}, b-b ENUMERATED {a, b} } } END asn1tools-0.169.0/tests/files/c_source/octet_string.asn000066400000000000000000000001261524544274600231030ustar00rootroot00000000000000OctetString DEFINITIONS AUTOMATIC TAGS ::= BEGIN A ::= OCTET STRING (SIZE (3)) END asn1tools-0.169.0/tests/files/c_source/octet_string_uper.c000066400000000000000000000135071524544274600236060ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.147.0 Wed Apr 15 07:30:29 2020. */ #include #include "octet_string_uper.h" struct encoder_t { uint8_t *buf_p; ssize_t size; ssize_t pos; }; struct decoder_t { const uint8_t *buf_p; ssize_t size; ssize_t pos; }; static void encoder_init(struct encoder_t *self_p, uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (8 * (ssize_t)size); self_p->pos = 0; } static ssize_t encoder_get_result(const struct encoder_t *self_p) { if (self_p->size >= 0) { return ((self_p->pos + 7) / 8); } else { return (self_p->pos); } } static void encoder_abort(struct encoder_t *self_p, ssize_t error) { if (self_p->size >= 0) { self_p->size = -error; self_p->pos = -error; } } static ssize_t encoder_alloc(struct encoder_t *self_p, size_t size) { ssize_t pos; if ((self_p->pos + (ssize_t)size) <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -ENOMEM; encoder_abort(self_p, ENOMEM); } return (pos); } static void encoder_append_bytes(struct encoder_t *self_p, const uint8_t *buf_p, size_t size) { size_t i; ssize_t pos; size_t byte_pos; size_t pos_in_byte; pos = encoder_alloc(self_p, 8u * size); if (pos < 0) { return; } byte_pos = ((size_t)pos / 8u); pos_in_byte = ((size_t)pos % 8u); if (pos_in_byte == 0u) { (void)memcpy(&self_p->buf_p[byte_pos], buf_p, size); } else { for (i = 0; i < size; i++) { self_p->buf_p[byte_pos + i] |= (buf_p[i] >> pos_in_byte); self_p->buf_p[byte_pos + i + 1] = (buf_p[i] << (8u - pos_in_byte)); } } } static void decoder_init(struct decoder_t *self_p, const uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (8 * (ssize_t)size); self_p->pos = 0; } static ssize_t decoder_get_result(const struct decoder_t *self_p) { if (self_p->size >= 0) { return ((self_p->pos + 7) / 8); } else { return (self_p->pos); } } static void decoder_abort(struct decoder_t *self_p, ssize_t error) { if (self_p->size >= 0) { self_p->size = -error; self_p->pos = -error; } } static ssize_t decoder_free(struct decoder_t *self_p, size_t size) { ssize_t pos; if ((self_p->pos + (ssize_t)size) <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -EOUTOFDATA; decoder_abort(self_p, EOUTOFDATA); } return (pos); } static void decoder_read_bytes(struct decoder_t *self_p, uint8_t *buf_p, size_t size) { size_t i; ssize_t pos; size_t byte_pos; size_t pos_in_byte; pos = decoder_free(self_p, 8u * size); if (pos < 0) { return; } byte_pos = ((size_t)pos / 8u); pos_in_byte = ((size_t)pos % 8u); if (pos_in_byte == 0) { (void)memcpy(buf_p, &self_p->buf_p[byte_pos], size); } else { for (i = 0; i < size; i++) { buf_p[i] = (self_p->buf_p[byte_pos + i] << pos_in_byte); buf_p[i] |= (self_p->buf_p[byte_pos + i + 1] >> (8u - pos_in_byte)); } } } static void octet_string_uper_octet_string_a_encode_inner( struct encoder_t *encoder_p, const struct octet_string_uper_octet_string_a_t *src_p) { encoder_append_bytes(encoder_p, &src_p->buf[0], 3); } static void octet_string_uper_octet_string_a_decode_inner( struct decoder_t *decoder_p, struct octet_string_uper_octet_string_a_t *dst_p) { decoder_read_bytes(decoder_p, &dst_p->buf[0], 3); } ssize_t octet_string_uper_octet_string_a_encode( uint8_t *dst_p, size_t size, const struct octet_string_uper_octet_string_a_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); octet_string_uper_octet_string_a_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t octet_string_uper_octet_string_a_decode( struct octet_string_uper_octet_string_a_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); octet_string_uper_octet_string_a_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } asn1tools-0.169.0/tests/files/c_source/octet_string_uper.h000066400000000000000000000047531524544274600236160ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.145.2 Thu Jan 24 07:56:29 2019. */ #ifndef OCTET_STRING_UPER_H #define OCTET_STRING_UPER_H #include #include #include #ifndef ENOMEM # define ENOMEM 12 #endif #ifndef EINVAL # define EINVAL 22 #endif #ifndef EOUTOFDATA # define EOUTOFDATA 500 #endif #ifndef EBADCHOICE # define EBADCHOICE 501 #endif #ifndef EBADLENGTH # define EBADLENGTH 502 #endif #ifndef EBADENUM # define EBADENUM 503 #endif /** * Type A in module OctetString. */ struct octet_string_uper_octet_string_a_t { uint8_t buf[3]; }; /** * Encode type A defined in module OctetString. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t octet_string_uper_octet_string_a_encode( uint8_t *dst_p, size_t size, const struct octet_string_uper_octet_string_a_t *src_p); /** * Decode type A defined in module OctetString. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t octet_string_uper_octet_string_a_decode( struct octet_string_uper_octet_string_a_t *dst_p, const uint8_t *src_p, size_t size); #endif asn1tools-0.169.0/tests/files/c_source/oer.c000066400000000000000000006313131524544274600206350ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.166.0 Sat Oct 21 09:42:10 2023. */ #include #include "oer.h" struct encoder_t { uint8_t *buf_p; ssize_t size; ssize_t pos; }; struct decoder_t { const uint8_t *buf_p; ssize_t size; ssize_t pos; }; static uint8_t enumerated_value_length(int32_t value) { uint8_t length; if ((value >=0) && (value < 128)) { length = 0; } else if ((value >= -128) && (value < 128)) { length = 1; } else if ((value >= -32768) && (value < 32768)) { length = 2; } else if ((value >= -8388608) && (value < 8388608)) { length = 3; } else { length = 4; } return length; } static uint32_t length_determinant_length(uint32_t value) { uint32_t length; if (value < 128u) { length = 1; } else if (value < 256u) { length = 2; } else if (value < 65536u) { length = 3; } else if (value < 16777216u) { length = 4; } else { length = 5; } return (length); } static uint8_t minimum_uint_length(uint32_t value) { uint8_t length; if (value < 256u) { length = 1; } else if (value < 65536u) { length = 2; } else if (value < 16777216u) { length = 3; } else { length = 4; } return (length); } static void encoder_init(struct encoder_t *self_p, uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (ssize_t)size; self_p->pos = 0; } static ssize_t encoder_get_result(const struct encoder_t *self_p) { return (self_p->pos); } static void encoder_abort(struct encoder_t *self_p, ssize_t error) { if (self_p->size >= 0) { self_p->size = -error; self_p->pos = -error; } } static ssize_t encoder_alloc(struct encoder_t *self_p, size_t size) { ssize_t pos; if ((self_p->pos + (ssize_t)size) <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -ENOMEM; encoder_abort(self_p, ENOMEM); } return (pos); } static void encoder_append_bytes(struct encoder_t *self_p, const uint8_t *buf_p, size_t size) { ssize_t pos; pos = encoder_alloc(self_p, size); if (pos < 0) { return; } (void)memcpy(&self_p->buf_p[pos], buf_p, size); } static void encoder_append_uint8(struct encoder_t *self_p, uint8_t value) { encoder_append_bytes(self_p, &value, sizeof(value)); } static void encoder_append_uint16(struct encoder_t *self_p, uint16_t value) { uint8_t buf[2]; buf[0] = (uint8_t)(value >> 8); buf[1] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); } static void encoder_append_uint32(struct encoder_t *self_p, uint32_t value) { uint8_t buf[4]; buf[0] = (uint8_t)(value >> 24); buf[1] = (uint8_t)(value >> 16); buf[2] = (uint8_t)(value >> 8); buf[3] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); } static void encoder_append_uint64(struct encoder_t *self_p, uint64_t value) { uint8_t buf[8]; buf[0] = (uint8_t)(value >> 56); buf[1] = (uint8_t)(value >> 48); buf[2] = (uint8_t)(value >> 40); buf[3] = (uint8_t)(value >> 32); buf[4] = (uint8_t)(value >> 24); buf[5] = (uint8_t)(value >> 16); buf[6] = (uint8_t)(value >> 8); buf[7] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); } static void encoder_append_int8(struct encoder_t *self_p, int8_t value) { encoder_append_uint8(self_p, (uint8_t)value); } static void encoder_append_int16(struct encoder_t *self_p, int16_t value) { encoder_append_uint16(self_p, (uint16_t)value); } static void encoder_append_int32(struct encoder_t *self_p, int32_t value) { encoder_append_uint32(self_p, (uint32_t)value); } static void encoder_append_int64(struct encoder_t *self_p, int64_t value) { encoder_append_uint64(self_p, (uint64_t)value); } static void encoder_append_long_uint(struct encoder_t *self_p, uint64_t value, uint8_t number_of_bytes) { const uint8_t *value_p = (const uint8_t*)&value; uint8_t buf[8]; for(uint32_t byte = 0; byte < number_of_bytes; byte++) { buf[number_of_bytes - byte - 1] = *value_p++; } encoder_append_bytes(self_p, buf, number_of_bytes); } static void encoder_append_uint(struct encoder_t *self_p, uint32_t value, uint8_t number_of_bytes) { switch (number_of_bytes) { case 1: encoder_append_uint8(self_p, (uint8_t)value); break; case 2: encoder_append_uint16(self_p, (uint16_t)value); break; case 3: encoder_append_uint8(self_p, (uint8_t)(value >> 16)); encoder_append_uint16(self_p, (uint16_t)value); break; default: encoder_append_uint32(self_p, value); break; } } static void encoder_append_int(struct encoder_t *self_p, int32_t value, uint8_t number_of_bytes) { switch (number_of_bytes) { case 1: encoder_append_int8(self_p, (int8_t)value); break; case 2: encoder_append_int16(self_p, (int16_t)value); break; case 3: encoder_append_uint8(self_p, (uint8_t)((uint32_t)value >> 16)); encoder_append_int16(self_p, (int16_t)value); break; default: encoder_append_int32(self_p, value); break; } } static void encoder_append_float(struct encoder_t *self_p, float value) { uint32_t i32; (void)memcpy(&i32, &value, sizeof(i32)); encoder_append_uint32(self_p, i32); } static void encoder_append_double(struct encoder_t *self_p, double value) { uint64_t i64; (void)memcpy(&i64, &value, sizeof(i64)); encoder_append_uint64(self_p, i64); } static void encoder_append_bool(struct encoder_t *self_p, bool value) { encoder_append_uint8(self_p, value ? 255u : 0u); } static void encoder_append_length_determinant(struct encoder_t *self_p, uint32_t length) { if (length < 128u) { encoder_append_int8(self_p, (int8_t)length); } else if (length < 256u) { encoder_append_uint8(self_p, 0x81u); encoder_append_uint8(self_p, (uint8_t)length); } else if (length < 65536u) { encoder_append_uint8(self_p, 0x82u); encoder_append_uint16(self_p, (uint16_t)length); } else if (length < 16777216u) { encoder_append_uint32(self_p, length | (0x83u << 24u)); } else { encoder_append_uint8(self_p, 0x84u); encoder_append_uint32(self_p, length); } } static void decoder_init(struct decoder_t *self_p, const uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (ssize_t)size; self_p->pos = 0; } static ssize_t decoder_get_result(const struct decoder_t *self_p) { return (self_p->pos); } static void decoder_abort(struct decoder_t *self_p, ssize_t error) { if (self_p->size >= 0) { self_p->size = -error; self_p->pos = -error; } } static ssize_t decoder_free(struct decoder_t *self_p, size_t size) { ssize_t pos; if ((self_p->pos + (ssize_t)size) <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -EOUTOFDATA; decoder_abort(self_p, EOUTOFDATA); } return (pos); } static void decoder_read_bytes(struct decoder_t *self_p, uint8_t *buf_p, size_t size) { ssize_t pos; pos = decoder_free(self_p, size); if (pos >= 0) { (void)memcpy(buf_p, &self_p->buf_p[pos], size); } else { (void)memset(buf_p, 0, size); } } static uint8_t decoder_read_uint8(struct decoder_t *self_p) { uint8_t value; decoder_read_bytes(self_p, &value, sizeof(value)); return (value); } static uint16_t decoder_read_uint16(struct decoder_t *self_p) { uint8_t buf[2]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (uint16_t)(((uint16_t)buf[0] << 8) | (uint16_t)buf[1]); } static uint32_t decoder_read_uint32(struct decoder_t *self_p) { uint8_t buf[4]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]); } static uint64_t decoder_read_uint64(struct decoder_t *self_p) { uint8_t buf[8]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (((uint64_t)buf[0] << 56) | ((uint64_t)buf[1] << 48) | ((uint64_t)buf[2] << 40) | ((uint64_t)buf[3] << 32) | ((uint64_t)buf[4] << 24) | ((uint64_t)buf[5] << 16) | ((uint64_t)buf[6] << 8) | (uint64_t)buf[7]); } static int8_t decoder_read_int8(struct decoder_t *self_p) { return ((int8_t)decoder_read_uint8(self_p)); } static int16_t decoder_read_int16(struct decoder_t *self_p) { return ((int16_t)decoder_read_uint16(self_p)); } static int32_t decoder_read_int32(struct decoder_t *self_p) { return ((int32_t)decoder_read_uint32(self_p)); } static int64_t decoder_read_int64(struct decoder_t *self_p) { return ((int64_t)decoder_read_uint64(self_p)); } static uint64_t decoder_read_long_uint(struct decoder_t *self_p, uint8_t number_of_bytes) { uint64_t value = 0; for(uint8_t byte = 0; byte < number_of_bytes; byte++) { value = decoder_read_uint8(self_p) | (value << 8); } return (value); } static uint32_t decoder_read_uint(struct decoder_t *self_p, uint8_t number_of_bytes) { uint32_t value; switch (number_of_bytes) { case 1: value = decoder_read_uint8(self_p); break; case 2: value = decoder_read_uint16(self_p); break; case 3: value = ((uint32_t)decoder_read_uint8(self_p) << 16u); value |= decoder_read_uint16(self_p); break; case 4: value = decoder_read_uint32(self_p); break; default: value = 0xffffffffu; break; } return (value); } static int32_t decoder_read_int(struct decoder_t *self_p, uint8_t number_of_bytes) { int32_t value; uint32_t tmp; switch (number_of_bytes) { case 1: value = decoder_read_int8(self_p); break; case 2: value = decoder_read_int16(self_p); break; case 3: tmp = ((uint32_t)decoder_read_uint8(self_p) << 16u); tmp |= decoder_read_uint16(self_p); if((tmp & 0x800000u) == 0x800000u) { tmp += 0xff000000u; } value = (int32_t)tmp; break; case 4: value = decoder_read_int32(self_p); break; default: value = 2147483647; break; } return (value); } static float decoder_read_float(struct decoder_t *self_p) { float value; uint32_t i32; i32 = decoder_read_uint32(self_p); (void)memcpy(&value, &i32, sizeof(value)); return (value); } static double decoder_read_double(struct decoder_t *self_p) { double value; uint64_t i64; i64 = decoder_read_uint64(self_p); (void)memcpy(&value, &i64, sizeof(value)); return (value); } static bool decoder_read_bool(struct decoder_t *self_p) { return (decoder_read_uint8(self_p) != 0u); } static uint32_t decoder_read_length_determinant(struct decoder_t *self_p) { uint32_t length; length = decoder_read_uint8(self_p); if ((length & 0x80u) != 0u) { switch (length & 0x7fu) { case 1: length = decoder_read_uint8(self_p); break; case 2: length = decoder_read_uint16(self_p); break; case 3: length = (((uint32_t)decoder_read_uint8(self_p) << 16) | decoder_read_uint16(self_p)); break; case 4: length = decoder_read_uint32(self_p); break; default: length = 0xffffffffu; break; } } return (length); } static uint32_t decoder_read_tag(struct decoder_t *self_p) { uint32_t tag; tag = decoder_read_uint8(self_p); if ((tag & 0x3fu) == 0x3fu) { do { tag <<= 8; tag |= (uint32_t)decoder_read_uint8(self_p); } while ((tag & 0x80u) == 0x80u); } return (tag); } static uint32_t get_choice_j_length(const struct oer_c_source_ag_t *src_p) { uint32_t length; switch (src_p->j.choice) { case oer_c_source_ag_j_choice_k_e: length = 3u; break; case oer_c_source_ag_j_choice_l_e: length = 2u; break; default: length = 0; break; } return length; } static void oer_c_source_a_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_a_t *src_p) { encoder_append_int8(encoder_p, src_p->a); encoder_append_int16(encoder_p, src_p->b); encoder_append_int32(encoder_p, src_p->c); encoder_append_int64(encoder_p, src_p->d); encoder_append_uint8(encoder_p, src_p->e); encoder_append_uint16(encoder_p, src_p->f); encoder_append_uint32(encoder_p, src_p->g); encoder_append_uint64(encoder_p, src_p->h); encoder_append_bool(encoder_p, src_p->i); encoder_append_bytes(encoder_p, &src_p->j.buf[0], 11); } static void oer_c_source_a_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_a_t *dst_p) { dst_p->a = decoder_read_int8(decoder_p); dst_p->b = decoder_read_int16(decoder_p); dst_p->c = decoder_read_int32(decoder_p); dst_p->d = decoder_read_int64(decoder_p); dst_p->e = decoder_read_uint8(decoder_p); dst_p->f = decoder_read_uint16(decoder_p); dst_p->g = decoder_read_uint32(decoder_p); dst_p->h = decoder_read_uint64(decoder_p); dst_p->i = decoder_read_bool(decoder_p); decoder_read_bytes(decoder_p, &dst_p->j.buf[0], 11); } static void oer_c_source_ab_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_ab_t *src_p) { encoder_append_int8(encoder_p, src_p->a); encoder_append_uint16(encoder_p, src_p->b); } static void oer_c_source_ab_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_ab_t *dst_p) { dst_p->a = decoder_read_int8(decoder_p); dst_p->b = decoder_read_uint16(decoder_p); } static void oer_c_source_q_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_q_t *src_p) { switch (src_p->choice) { case oer_c_source_q_choice_c001_e: encoder_append_uint(encoder_p, 0x80, 1); encoder_append_bool(encoder_p, src_p->value.c001); break; case oer_c_source_q_choice_c002_e: encoder_append_uint(encoder_p, 0x81, 1); encoder_append_bool(encoder_p, src_p->value.c002); break; case oer_c_source_q_choice_c003_e: encoder_append_uint(encoder_p, 0x82, 1); encoder_append_bool(encoder_p, src_p->value.c003); break; case oer_c_source_q_choice_c004_e: encoder_append_uint(encoder_p, 0x83, 1); encoder_append_bool(encoder_p, src_p->value.c004); break; case oer_c_source_q_choice_c005_e: encoder_append_uint(encoder_p, 0x84, 1); encoder_append_bool(encoder_p, src_p->value.c005); break; case oer_c_source_q_choice_c006_e: encoder_append_uint(encoder_p, 0x85, 1); encoder_append_bool(encoder_p, src_p->value.c006); break; case oer_c_source_q_choice_c007_e: encoder_append_uint(encoder_p, 0x86, 1); encoder_append_bool(encoder_p, src_p->value.c007); break; case oer_c_source_q_choice_c008_e: encoder_append_uint(encoder_p, 0x87, 1); encoder_append_bool(encoder_p, src_p->value.c008); break; case oer_c_source_q_choice_c009_e: encoder_append_uint(encoder_p, 0x88, 1); encoder_append_bool(encoder_p, src_p->value.c009); break; case oer_c_source_q_choice_c010_e: encoder_append_uint(encoder_p, 0x89, 1); encoder_append_bool(encoder_p, src_p->value.c010); break; case oer_c_source_q_choice_c011_e: encoder_append_uint(encoder_p, 0x8a, 1); encoder_append_bool(encoder_p, src_p->value.c011); break; case oer_c_source_q_choice_c012_e: encoder_append_uint(encoder_p, 0x8b, 1); encoder_append_bool(encoder_p, src_p->value.c012); break; case oer_c_source_q_choice_c013_e: encoder_append_uint(encoder_p, 0x8c, 1); encoder_append_bool(encoder_p, src_p->value.c013); break; case oer_c_source_q_choice_c014_e: encoder_append_uint(encoder_p, 0x8d, 1); encoder_append_bool(encoder_p, src_p->value.c014); break; case oer_c_source_q_choice_c015_e: encoder_append_uint(encoder_p, 0x8e, 1); encoder_append_bool(encoder_p, src_p->value.c015); break; case oer_c_source_q_choice_c016_e: encoder_append_uint(encoder_p, 0x8f, 1); encoder_append_bool(encoder_p, src_p->value.c016); break; case oer_c_source_q_choice_c017_e: encoder_append_uint(encoder_p, 0x90, 1); encoder_append_bool(encoder_p, src_p->value.c017); break; case oer_c_source_q_choice_c018_e: encoder_append_uint(encoder_p, 0x91, 1); encoder_append_bool(encoder_p, src_p->value.c018); break; case oer_c_source_q_choice_c019_e: encoder_append_uint(encoder_p, 0x92, 1); encoder_append_bool(encoder_p, src_p->value.c019); break; case oer_c_source_q_choice_c020_e: encoder_append_uint(encoder_p, 0x93, 1); encoder_append_bool(encoder_p, src_p->value.c020); break; case oer_c_source_q_choice_c021_e: encoder_append_uint(encoder_p, 0x94, 1); encoder_append_bool(encoder_p, src_p->value.c021); break; case oer_c_source_q_choice_c022_e: encoder_append_uint(encoder_p, 0x95, 1); encoder_append_bool(encoder_p, src_p->value.c022); break; case oer_c_source_q_choice_c023_e: encoder_append_uint(encoder_p, 0x96, 1); encoder_append_bool(encoder_p, src_p->value.c023); break; case oer_c_source_q_choice_c024_e: encoder_append_uint(encoder_p, 0x97, 1); encoder_append_bool(encoder_p, src_p->value.c024); break; case oer_c_source_q_choice_c025_e: encoder_append_uint(encoder_p, 0x98, 1); encoder_append_bool(encoder_p, src_p->value.c025); break; case oer_c_source_q_choice_c026_e: encoder_append_uint(encoder_p, 0x99, 1); encoder_append_bool(encoder_p, src_p->value.c026); break; case oer_c_source_q_choice_c027_e: encoder_append_uint(encoder_p, 0x9a, 1); encoder_append_bool(encoder_p, src_p->value.c027); break; case oer_c_source_q_choice_c028_e: encoder_append_uint(encoder_p, 0x9b, 1); encoder_append_bool(encoder_p, src_p->value.c028); break; case oer_c_source_q_choice_c029_e: encoder_append_uint(encoder_p, 0x9c, 1); encoder_append_bool(encoder_p, src_p->value.c029); break; case oer_c_source_q_choice_c030_e: encoder_append_uint(encoder_p, 0x9d, 1); encoder_append_bool(encoder_p, src_p->value.c030); break; case oer_c_source_q_choice_c031_e: encoder_append_uint(encoder_p, 0x9e, 1); encoder_append_bool(encoder_p, src_p->value.c031); break; case oer_c_source_q_choice_c032_e: encoder_append_uint(encoder_p, 0x9f, 1); encoder_append_bool(encoder_p, src_p->value.c032); break; case oer_c_source_q_choice_c033_e: encoder_append_uint(encoder_p, 0xa0, 1); encoder_append_bool(encoder_p, src_p->value.c033); break; case oer_c_source_q_choice_c034_e: encoder_append_uint(encoder_p, 0xa1, 1); encoder_append_bool(encoder_p, src_p->value.c034); break; case oer_c_source_q_choice_c035_e: encoder_append_uint(encoder_p, 0xa2, 1); encoder_append_bool(encoder_p, src_p->value.c035); break; case oer_c_source_q_choice_c036_e: encoder_append_uint(encoder_p, 0xa3, 1); encoder_append_bool(encoder_p, src_p->value.c036); break; case oer_c_source_q_choice_c037_e: encoder_append_uint(encoder_p, 0xa4, 1); encoder_append_bool(encoder_p, src_p->value.c037); break; case oer_c_source_q_choice_c038_e: encoder_append_uint(encoder_p, 0xa5, 1); encoder_append_bool(encoder_p, src_p->value.c038); break; case oer_c_source_q_choice_c039_e: encoder_append_uint(encoder_p, 0xa6, 1); encoder_append_bool(encoder_p, src_p->value.c039); break; case oer_c_source_q_choice_c040_e: encoder_append_uint(encoder_p, 0xa7, 1); encoder_append_bool(encoder_p, src_p->value.c040); break; case oer_c_source_q_choice_c041_e: encoder_append_uint(encoder_p, 0xa8, 1); encoder_append_bool(encoder_p, src_p->value.c041); break; case oer_c_source_q_choice_c042_e: encoder_append_uint(encoder_p, 0xa9, 1); encoder_append_bool(encoder_p, src_p->value.c042); break; case oer_c_source_q_choice_c043_e: encoder_append_uint(encoder_p, 0xaa, 1); encoder_append_bool(encoder_p, src_p->value.c043); break; case oer_c_source_q_choice_c044_e: encoder_append_uint(encoder_p, 0xab, 1); encoder_append_bool(encoder_p, src_p->value.c044); break; case oer_c_source_q_choice_c045_e: encoder_append_uint(encoder_p, 0xac, 1); encoder_append_bool(encoder_p, src_p->value.c045); break; case oer_c_source_q_choice_c046_e: encoder_append_uint(encoder_p, 0xad, 1); encoder_append_bool(encoder_p, src_p->value.c046); break; case oer_c_source_q_choice_c047_e: encoder_append_uint(encoder_p, 0xae, 1); encoder_append_bool(encoder_p, src_p->value.c047); break; case oer_c_source_q_choice_c048_e: encoder_append_uint(encoder_p, 0xaf, 1); encoder_append_bool(encoder_p, src_p->value.c048); break; case oer_c_source_q_choice_c049_e: encoder_append_uint(encoder_p, 0xb0, 1); encoder_append_bool(encoder_p, src_p->value.c049); break; case oer_c_source_q_choice_c050_e: encoder_append_uint(encoder_p, 0xb1, 1); encoder_append_bool(encoder_p, src_p->value.c050); break; case oer_c_source_q_choice_c051_e: encoder_append_uint(encoder_p, 0xb2, 1); encoder_append_bool(encoder_p, src_p->value.c051); break; case oer_c_source_q_choice_c052_e: encoder_append_uint(encoder_p, 0xb3, 1); encoder_append_bool(encoder_p, src_p->value.c052); break; case oer_c_source_q_choice_c053_e: encoder_append_uint(encoder_p, 0xb4, 1); encoder_append_bool(encoder_p, src_p->value.c053); break; case oer_c_source_q_choice_c054_e: encoder_append_uint(encoder_p, 0xb5, 1); encoder_append_bool(encoder_p, src_p->value.c054); break; case oer_c_source_q_choice_c055_e: encoder_append_uint(encoder_p, 0xb6, 1); encoder_append_bool(encoder_p, src_p->value.c055); break; case oer_c_source_q_choice_c056_e: encoder_append_uint(encoder_p, 0xb7, 1); encoder_append_bool(encoder_p, src_p->value.c056); break; case oer_c_source_q_choice_c057_e: encoder_append_uint(encoder_p, 0xb8, 1); encoder_append_bool(encoder_p, src_p->value.c057); break; case oer_c_source_q_choice_c058_e: encoder_append_uint(encoder_p, 0xb9, 1); encoder_append_bool(encoder_p, src_p->value.c058); break; case oer_c_source_q_choice_c059_e: encoder_append_uint(encoder_p, 0xba, 1); encoder_append_bool(encoder_p, src_p->value.c059); break; case oer_c_source_q_choice_c060_e: encoder_append_uint(encoder_p, 0xbb, 1); encoder_append_bool(encoder_p, src_p->value.c060); break; case oer_c_source_q_choice_c061_e: encoder_append_uint(encoder_p, 0xbc, 1); encoder_append_bool(encoder_p, src_p->value.c061); break; case oer_c_source_q_choice_c062_e: encoder_append_uint(encoder_p, 0xbd, 1); encoder_append_bool(encoder_p, src_p->value.c062); break; case oer_c_source_q_choice_c063_e: encoder_append_uint(encoder_p, 0xbe, 1); encoder_append_bool(encoder_p, src_p->value.c063); break; case oer_c_source_q_choice_c064_e: encoder_append_uint(encoder_p, 0xbf3f, 2); encoder_append_bool(encoder_p, src_p->value.c064); break; case oer_c_source_q_choice_c065_e: encoder_append_uint(encoder_p, 0xbf40, 2); encoder_append_bool(encoder_p, src_p->value.c065); break; case oer_c_source_q_choice_c066_e: encoder_append_uint(encoder_p, 0xbf41, 2); encoder_append_bool(encoder_p, src_p->value.c066); break; case oer_c_source_q_choice_c067_e: encoder_append_uint(encoder_p, 0xbf42, 2); encoder_append_bool(encoder_p, src_p->value.c067); break; case oer_c_source_q_choice_c068_e: encoder_append_uint(encoder_p, 0xbf43, 2); encoder_append_bool(encoder_p, src_p->value.c068); break; case oer_c_source_q_choice_c069_e: encoder_append_uint(encoder_p, 0xbf44, 2); encoder_append_bool(encoder_p, src_p->value.c069); break; case oer_c_source_q_choice_c070_e: encoder_append_uint(encoder_p, 0xbf45, 2); encoder_append_bool(encoder_p, src_p->value.c070); break; case oer_c_source_q_choice_c071_e: encoder_append_uint(encoder_p, 0xbf46, 2); encoder_append_bool(encoder_p, src_p->value.c071); break; case oer_c_source_q_choice_c072_e: encoder_append_uint(encoder_p, 0xbf47, 2); encoder_append_bool(encoder_p, src_p->value.c072); break; case oer_c_source_q_choice_c073_e: encoder_append_uint(encoder_p, 0xbf48, 2); encoder_append_bool(encoder_p, src_p->value.c073); break; case oer_c_source_q_choice_c074_e: encoder_append_uint(encoder_p, 0xbf49, 2); encoder_append_bool(encoder_p, src_p->value.c074); break; case oer_c_source_q_choice_c075_e: encoder_append_uint(encoder_p, 0xbf4a, 2); encoder_append_bool(encoder_p, src_p->value.c075); break; case oer_c_source_q_choice_c076_e: encoder_append_uint(encoder_p, 0xbf4b, 2); encoder_append_bool(encoder_p, src_p->value.c076); break; case oer_c_source_q_choice_c077_e: encoder_append_uint(encoder_p, 0xbf4c, 2); encoder_append_bool(encoder_p, src_p->value.c077); break; case oer_c_source_q_choice_c078_e: encoder_append_uint(encoder_p, 0xbf4d, 2); encoder_append_bool(encoder_p, src_p->value.c078); break; case oer_c_source_q_choice_c079_e: encoder_append_uint(encoder_p, 0xbf4e, 2); encoder_append_bool(encoder_p, src_p->value.c079); break; case oer_c_source_q_choice_c080_e: encoder_append_uint(encoder_p, 0xbf4f, 2); encoder_append_bool(encoder_p, src_p->value.c080); break; case oer_c_source_q_choice_c081_e: encoder_append_uint(encoder_p, 0xbf50, 2); encoder_append_bool(encoder_p, src_p->value.c081); break; case oer_c_source_q_choice_c082_e: encoder_append_uint(encoder_p, 0xbf51, 2); encoder_append_bool(encoder_p, src_p->value.c082); break; case oer_c_source_q_choice_c083_e: encoder_append_uint(encoder_p, 0xbf52, 2); encoder_append_bool(encoder_p, src_p->value.c083); break; case oer_c_source_q_choice_c084_e: encoder_append_uint(encoder_p, 0xbf53, 2); encoder_append_bool(encoder_p, src_p->value.c084); break; case oer_c_source_q_choice_c085_e: encoder_append_uint(encoder_p, 0xbf54, 2); encoder_append_bool(encoder_p, src_p->value.c085); break; case oer_c_source_q_choice_c086_e: encoder_append_uint(encoder_p, 0xbf55, 2); encoder_append_bool(encoder_p, src_p->value.c086); break; case oer_c_source_q_choice_c087_e: encoder_append_uint(encoder_p, 0xbf56, 2); encoder_append_bool(encoder_p, src_p->value.c087); break; case oer_c_source_q_choice_c088_e: encoder_append_uint(encoder_p, 0xbf57, 2); encoder_append_bool(encoder_p, src_p->value.c088); break; case oer_c_source_q_choice_c089_e: encoder_append_uint(encoder_p, 0xbf58, 2); encoder_append_bool(encoder_p, src_p->value.c089); break; case oer_c_source_q_choice_c090_e: encoder_append_uint(encoder_p, 0xbf59, 2); encoder_append_bool(encoder_p, src_p->value.c090); break; case oer_c_source_q_choice_c091_e: encoder_append_uint(encoder_p, 0xbf5a, 2); encoder_append_bool(encoder_p, src_p->value.c091); break; case oer_c_source_q_choice_c092_e: encoder_append_uint(encoder_p, 0xbf5b, 2); encoder_append_bool(encoder_p, src_p->value.c092); break; case oer_c_source_q_choice_c093_e: encoder_append_uint(encoder_p, 0xbf5c, 2); encoder_append_bool(encoder_p, src_p->value.c093); break; case oer_c_source_q_choice_c094_e: encoder_append_uint(encoder_p, 0xbf5d, 2); encoder_append_bool(encoder_p, src_p->value.c094); break; case oer_c_source_q_choice_c095_e: encoder_append_uint(encoder_p, 0xbf5e, 2); encoder_append_bool(encoder_p, src_p->value.c095); break; case oer_c_source_q_choice_c096_e: encoder_append_uint(encoder_p, 0xbf5f, 2); encoder_append_bool(encoder_p, src_p->value.c096); break; case oer_c_source_q_choice_c097_e: encoder_append_uint(encoder_p, 0xbf60, 2); encoder_append_bool(encoder_p, src_p->value.c097); break; case oer_c_source_q_choice_c098_e: encoder_append_uint(encoder_p, 0xbf61, 2); encoder_append_bool(encoder_p, src_p->value.c098); break; case oer_c_source_q_choice_c099_e: encoder_append_uint(encoder_p, 0xbf62, 2); encoder_append_bool(encoder_p, src_p->value.c099); break; case oer_c_source_q_choice_c100_e: encoder_append_uint(encoder_p, 0xbf63, 2); encoder_append_bool(encoder_p, src_p->value.c100); break; case oer_c_source_q_choice_c101_e: encoder_append_uint(encoder_p, 0xbf64, 2); encoder_append_bool(encoder_p, src_p->value.c101); break; case oer_c_source_q_choice_c102_e: encoder_append_uint(encoder_p, 0xbf65, 2); encoder_append_bool(encoder_p, src_p->value.c102); break; case oer_c_source_q_choice_c103_e: encoder_append_uint(encoder_p, 0xbf66, 2); encoder_append_bool(encoder_p, src_p->value.c103); break; case oer_c_source_q_choice_c104_e: encoder_append_uint(encoder_p, 0xbf67, 2); encoder_append_bool(encoder_p, src_p->value.c104); break; case oer_c_source_q_choice_c105_e: encoder_append_uint(encoder_p, 0xbf68, 2); encoder_append_bool(encoder_p, src_p->value.c105); break; case oer_c_source_q_choice_c106_e: encoder_append_uint(encoder_p, 0xbf69, 2); encoder_append_bool(encoder_p, src_p->value.c106); break; case oer_c_source_q_choice_c107_e: encoder_append_uint(encoder_p, 0xbf6a, 2); encoder_append_bool(encoder_p, src_p->value.c107); break; case oer_c_source_q_choice_c108_e: encoder_append_uint(encoder_p, 0xbf6b, 2); encoder_append_bool(encoder_p, src_p->value.c108); break; case oer_c_source_q_choice_c109_e: encoder_append_uint(encoder_p, 0xbf6c, 2); encoder_append_bool(encoder_p, src_p->value.c109); break; case oer_c_source_q_choice_c110_e: encoder_append_uint(encoder_p, 0xbf6d, 2); encoder_append_bool(encoder_p, src_p->value.c110); break; case oer_c_source_q_choice_c111_e: encoder_append_uint(encoder_p, 0xbf6e, 2); encoder_append_bool(encoder_p, src_p->value.c111); break; case oer_c_source_q_choice_c112_e: encoder_append_uint(encoder_p, 0xbf6f, 2); encoder_append_bool(encoder_p, src_p->value.c112); break; case oer_c_source_q_choice_c113_e: encoder_append_uint(encoder_p, 0xbf70, 2); encoder_append_bool(encoder_p, src_p->value.c113); break; case oer_c_source_q_choice_c114_e: encoder_append_uint(encoder_p, 0xbf71, 2); encoder_append_bool(encoder_p, src_p->value.c114); break; case oer_c_source_q_choice_c115_e: encoder_append_uint(encoder_p, 0xbf72, 2); encoder_append_bool(encoder_p, src_p->value.c115); break; case oer_c_source_q_choice_c116_e: encoder_append_uint(encoder_p, 0xbf73, 2); encoder_append_bool(encoder_p, src_p->value.c116); break; case oer_c_source_q_choice_c117_e: encoder_append_uint(encoder_p, 0xbf74, 2); encoder_append_bool(encoder_p, src_p->value.c117); break; case oer_c_source_q_choice_c118_e: encoder_append_uint(encoder_p, 0xbf75, 2); encoder_append_bool(encoder_p, src_p->value.c118); break; case oer_c_source_q_choice_c119_e: encoder_append_uint(encoder_p, 0xbf76, 2); encoder_append_bool(encoder_p, src_p->value.c119); break; case oer_c_source_q_choice_c120_e: encoder_append_uint(encoder_p, 0xbf77, 2); encoder_append_bool(encoder_p, src_p->value.c120); break; case oer_c_source_q_choice_c121_e: encoder_append_uint(encoder_p, 0xbf78, 2); encoder_append_bool(encoder_p, src_p->value.c121); break; case oer_c_source_q_choice_c122_e: encoder_append_uint(encoder_p, 0xbf79, 2); encoder_append_bool(encoder_p, src_p->value.c122); break; case oer_c_source_q_choice_c123_e: encoder_append_uint(encoder_p, 0xbf7a, 2); encoder_append_bool(encoder_p, src_p->value.c123); break; case oer_c_source_q_choice_c124_e: encoder_append_uint(encoder_p, 0xbf7b, 2); encoder_append_bool(encoder_p, src_p->value.c124); break; case oer_c_source_q_choice_c125_e: encoder_append_uint(encoder_p, 0xbf7c, 2); encoder_append_bool(encoder_p, src_p->value.c125); break; case oer_c_source_q_choice_c126_e: encoder_append_uint(encoder_p, 0xbf7d, 2); encoder_append_bool(encoder_p, src_p->value.c126); break; case oer_c_source_q_choice_c127_e: encoder_append_uint(encoder_p, 0xbf7e, 2); encoder_append_bool(encoder_p, src_p->value.c127); break; case oer_c_source_q_choice_c128_e: encoder_append_uint(encoder_p, 0xbf7f, 2); encoder_append_bool(encoder_p, src_p->value.c128); break; case oer_c_source_q_choice_c129_e: encoder_append_uint(encoder_p, 0xbf8100, 3); encoder_append_bool(encoder_p, src_p->value.c129); break; case oer_c_source_q_choice_c130_e: encoder_append_uint(encoder_p, 0xbf8101, 3); encoder_append_bool(encoder_p, src_p->value.c130); break; case oer_c_source_q_choice_c131_e: encoder_append_uint(encoder_p, 0xbf8102, 3); encoder_append_bool(encoder_p, src_p->value.c131); break; case oer_c_source_q_choice_c132_e: encoder_append_uint(encoder_p, 0xbf8103, 3); encoder_append_bool(encoder_p, src_p->value.c132); break; case oer_c_source_q_choice_c133_e: encoder_append_uint(encoder_p, 0xbf8104, 3); encoder_append_bool(encoder_p, src_p->value.c133); break; case oer_c_source_q_choice_c134_e: encoder_append_uint(encoder_p, 0xbf8105, 3); encoder_append_bool(encoder_p, src_p->value.c134); break; case oer_c_source_q_choice_c135_e: encoder_append_uint(encoder_p, 0xbf8106, 3); encoder_append_bool(encoder_p, src_p->value.c135); break; case oer_c_source_q_choice_c136_e: encoder_append_uint(encoder_p, 0xbf8107, 3); encoder_append_bool(encoder_p, src_p->value.c136); break; case oer_c_source_q_choice_c137_e: encoder_append_uint(encoder_p, 0xbf8108, 3); encoder_append_bool(encoder_p, src_p->value.c137); break; case oer_c_source_q_choice_c138_e: encoder_append_uint(encoder_p, 0xbf8109, 3); encoder_append_bool(encoder_p, src_p->value.c138); break; case oer_c_source_q_choice_c139_e: encoder_append_uint(encoder_p, 0xbf810a, 3); encoder_append_bool(encoder_p, src_p->value.c139); break; case oer_c_source_q_choice_c140_e: encoder_append_uint(encoder_p, 0xbf810b, 3); encoder_append_bool(encoder_p, src_p->value.c140); break; case oer_c_source_q_choice_c141_e: encoder_append_uint(encoder_p, 0xbf810c, 3); encoder_append_bool(encoder_p, src_p->value.c141); break; case oer_c_source_q_choice_c142_e: encoder_append_uint(encoder_p, 0xbf810d, 3); encoder_append_bool(encoder_p, src_p->value.c142); break; case oer_c_source_q_choice_c143_e: encoder_append_uint(encoder_p, 0xbf810e, 3); encoder_append_bool(encoder_p, src_p->value.c143); break; case oer_c_source_q_choice_c144_e: encoder_append_uint(encoder_p, 0xbf810f, 3); encoder_append_bool(encoder_p, src_p->value.c144); break; case oer_c_source_q_choice_c145_e: encoder_append_uint(encoder_p, 0xbf8110, 3); encoder_append_bool(encoder_p, src_p->value.c145); break; case oer_c_source_q_choice_c146_e: encoder_append_uint(encoder_p, 0xbf8111, 3); encoder_append_bool(encoder_p, src_p->value.c146); break; case oer_c_source_q_choice_c147_e: encoder_append_uint(encoder_p, 0xbf8112, 3); encoder_append_bool(encoder_p, src_p->value.c147); break; case oer_c_source_q_choice_c148_e: encoder_append_uint(encoder_p, 0xbf8113, 3); encoder_append_bool(encoder_p, src_p->value.c148); break; case oer_c_source_q_choice_c149_e: encoder_append_uint(encoder_p, 0xbf8114, 3); encoder_append_bool(encoder_p, src_p->value.c149); break; case oer_c_source_q_choice_c150_e: encoder_append_uint(encoder_p, 0xbf8115, 3); encoder_append_bool(encoder_p, src_p->value.c150); break; case oer_c_source_q_choice_c151_e: encoder_append_uint(encoder_p, 0xbf8116, 3); encoder_append_bool(encoder_p, src_p->value.c151); break; case oer_c_source_q_choice_c152_e: encoder_append_uint(encoder_p, 0xbf8117, 3); encoder_append_bool(encoder_p, src_p->value.c152); break; case oer_c_source_q_choice_c153_e: encoder_append_uint(encoder_p, 0xbf8118, 3); encoder_append_bool(encoder_p, src_p->value.c153); break; case oer_c_source_q_choice_c154_e: encoder_append_uint(encoder_p, 0xbf8119, 3); encoder_append_bool(encoder_p, src_p->value.c154); break; case oer_c_source_q_choice_c155_e: encoder_append_uint(encoder_p, 0xbf811a, 3); encoder_append_bool(encoder_p, src_p->value.c155); break; case oer_c_source_q_choice_c156_e: encoder_append_uint(encoder_p, 0xbf811b, 3); encoder_append_bool(encoder_p, src_p->value.c156); break; case oer_c_source_q_choice_c157_e: encoder_append_uint(encoder_p, 0xbf811c, 3); encoder_append_bool(encoder_p, src_p->value.c157); break; case oer_c_source_q_choice_c158_e: encoder_append_uint(encoder_p, 0xbf811d, 3); encoder_append_bool(encoder_p, src_p->value.c158); break; case oer_c_source_q_choice_c159_e: encoder_append_uint(encoder_p, 0xbf811e, 3); encoder_append_bool(encoder_p, src_p->value.c159); break; case oer_c_source_q_choice_c160_e: encoder_append_uint(encoder_p, 0xbf811f, 3); encoder_append_bool(encoder_p, src_p->value.c160); break; case oer_c_source_q_choice_c161_e: encoder_append_uint(encoder_p, 0xbf8120, 3); encoder_append_bool(encoder_p, src_p->value.c161); break; case oer_c_source_q_choice_c162_e: encoder_append_uint(encoder_p, 0xbf8121, 3); encoder_append_bool(encoder_p, src_p->value.c162); break; case oer_c_source_q_choice_c163_e: encoder_append_uint(encoder_p, 0xbf8122, 3); encoder_append_bool(encoder_p, src_p->value.c163); break; case oer_c_source_q_choice_c164_e: encoder_append_uint(encoder_p, 0xbf8123, 3); encoder_append_bool(encoder_p, src_p->value.c164); break; case oer_c_source_q_choice_c165_e: encoder_append_uint(encoder_p, 0xbf8124, 3); encoder_append_bool(encoder_p, src_p->value.c165); break; case oer_c_source_q_choice_c166_e: encoder_append_uint(encoder_p, 0xbf8125, 3); encoder_append_bool(encoder_p, src_p->value.c166); break; case oer_c_source_q_choice_c167_e: encoder_append_uint(encoder_p, 0xbf8126, 3); encoder_append_bool(encoder_p, src_p->value.c167); break; case oer_c_source_q_choice_c168_e: encoder_append_uint(encoder_p, 0xbf8127, 3); encoder_append_bool(encoder_p, src_p->value.c168); break; case oer_c_source_q_choice_c169_e: encoder_append_uint(encoder_p, 0xbf8128, 3); encoder_append_bool(encoder_p, src_p->value.c169); break; case oer_c_source_q_choice_c170_e: encoder_append_uint(encoder_p, 0xbf8129, 3); encoder_append_bool(encoder_p, src_p->value.c170); break; case oer_c_source_q_choice_c171_e: encoder_append_uint(encoder_p, 0xbf812a, 3); encoder_append_bool(encoder_p, src_p->value.c171); break; case oer_c_source_q_choice_c172_e: encoder_append_uint(encoder_p, 0xbf812b, 3); encoder_append_bool(encoder_p, src_p->value.c172); break; case oer_c_source_q_choice_c173_e: encoder_append_uint(encoder_p, 0xbf812c, 3); encoder_append_bool(encoder_p, src_p->value.c173); break; case oer_c_source_q_choice_c174_e: encoder_append_uint(encoder_p, 0xbf812d, 3); encoder_append_bool(encoder_p, src_p->value.c174); break; case oer_c_source_q_choice_c175_e: encoder_append_uint(encoder_p, 0xbf812e, 3); encoder_append_bool(encoder_p, src_p->value.c175); break; case oer_c_source_q_choice_c176_e: encoder_append_uint(encoder_p, 0xbf812f, 3); encoder_append_bool(encoder_p, src_p->value.c176); break; case oer_c_source_q_choice_c177_e: encoder_append_uint(encoder_p, 0xbf8130, 3); encoder_append_bool(encoder_p, src_p->value.c177); break; case oer_c_source_q_choice_c178_e: encoder_append_uint(encoder_p, 0xbf8131, 3); encoder_append_bool(encoder_p, src_p->value.c178); break; case oer_c_source_q_choice_c179_e: encoder_append_uint(encoder_p, 0xbf8132, 3); encoder_append_bool(encoder_p, src_p->value.c179); break; case oer_c_source_q_choice_c180_e: encoder_append_uint(encoder_p, 0xbf8133, 3); encoder_append_bool(encoder_p, src_p->value.c180); break; case oer_c_source_q_choice_c181_e: encoder_append_uint(encoder_p, 0xbf8134, 3); encoder_append_bool(encoder_p, src_p->value.c181); break; case oer_c_source_q_choice_c182_e: encoder_append_uint(encoder_p, 0xbf8135, 3); encoder_append_bool(encoder_p, src_p->value.c182); break; case oer_c_source_q_choice_c183_e: encoder_append_uint(encoder_p, 0xbf8136, 3); encoder_append_bool(encoder_p, src_p->value.c183); break; case oer_c_source_q_choice_c184_e: encoder_append_uint(encoder_p, 0xbf8137, 3); encoder_append_bool(encoder_p, src_p->value.c184); break; case oer_c_source_q_choice_c185_e: encoder_append_uint(encoder_p, 0xbf8138, 3); encoder_append_bool(encoder_p, src_p->value.c185); break; case oer_c_source_q_choice_c186_e: encoder_append_uint(encoder_p, 0xbf8139, 3); encoder_append_bool(encoder_p, src_p->value.c186); break; case oer_c_source_q_choice_c187_e: encoder_append_uint(encoder_p, 0xbf813a, 3); encoder_append_bool(encoder_p, src_p->value.c187); break; case oer_c_source_q_choice_c188_e: encoder_append_uint(encoder_p, 0xbf813b, 3); encoder_append_bool(encoder_p, src_p->value.c188); break; case oer_c_source_q_choice_c189_e: encoder_append_uint(encoder_p, 0xbf813c, 3); encoder_append_bool(encoder_p, src_p->value.c189); break; case oer_c_source_q_choice_c190_e: encoder_append_uint(encoder_p, 0xbf813d, 3); encoder_append_bool(encoder_p, src_p->value.c190); break; case oer_c_source_q_choice_c191_e: encoder_append_uint(encoder_p, 0xbf813e, 3); encoder_append_bool(encoder_p, src_p->value.c191); break; case oer_c_source_q_choice_c192_e: encoder_append_uint(encoder_p, 0xbf813f, 3); encoder_append_bool(encoder_p, src_p->value.c192); break; case oer_c_source_q_choice_c193_e: encoder_append_uint(encoder_p, 0xbf8140, 3); encoder_append_bool(encoder_p, src_p->value.c193); break; case oer_c_source_q_choice_c194_e: encoder_append_uint(encoder_p, 0xbf8141, 3); encoder_append_bool(encoder_p, src_p->value.c194); break; case oer_c_source_q_choice_c195_e: encoder_append_uint(encoder_p, 0xbf8142, 3); encoder_append_bool(encoder_p, src_p->value.c195); break; case oer_c_source_q_choice_c196_e: encoder_append_uint(encoder_p, 0xbf8143, 3); encoder_append_bool(encoder_p, src_p->value.c196); break; case oer_c_source_q_choice_c197_e: encoder_append_uint(encoder_p, 0xbf8144, 3); encoder_append_bool(encoder_p, src_p->value.c197); break; case oer_c_source_q_choice_c198_e: encoder_append_uint(encoder_p, 0xbf8145, 3); encoder_append_bool(encoder_p, src_p->value.c198); break; case oer_c_source_q_choice_c199_e: encoder_append_uint(encoder_p, 0xbf8146, 3); encoder_append_bool(encoder_p, src_p->value.c199); break; case oer_c_source_q_choice_c200_e: encoder_append_uint(encoder_p, 0xbf8147, 3); encoder_append_bool(encoder_p, src_p->value.c200); break; case oer_c_source_q_choice_c201_e: encoder_append_uint(encoder_p, 0xbf8148, 3); encoder_append_bool(encoder_p, src_p->value.c201); break; case oer_c_source_q_choice_c202_e: encoder_append_uint(encoder_p, 0xbf8149, 3); encoder_append_bool(encoder_p, src_p->value.c202); break; case oer_c_source_q_choice_c203_e: encoder_append_uint(encoder_p, 0xbf814a, 3); encoder_append_bool(encoder_p, src_p->value.c203); break; case oer_c_source_q_choice_c204_e: encoder_append_uint(encoder_p, 0xbf814b, 3); encoder_append_bool(encoder_p, src_p->value.c204); break; case oer_c_source_q_choice_c205_e: encoder_append_uint(encoder_p, 0xbf814c, 3); encoder_append_bool(encoder_p, src_p->value.c205); break; case oer_c_source_q_choice_c206_e: encoder_append_uint(encoder_p, 0xbf814d, 3); encoder_append_bool(encoder_p, src_p->value.c206); break; case oer_c_source_q_choice_c207_e: encoder_append_uint(encoder_p, 0xbf814e, 3); encoder_append_bool(encoder_p, src_p->value.c207); break; case oer_c_source_q_choice_c208_e: encoder_append_uint(encoder_p, 0xbf814f, 3); encoder_append_bool(encoder_p, src_p->value.c208); break; case oer_c_source_q_choice_c209_e: encoder_append_uint(encoder_p, 0xbf8150, 3); encoder_append_bool(encoder_p, src_p->value.c209); break; case oer_c_source_q_choice_c210_e: encoder_append_uint(encoder_p, 0xbf8151, 3); encoder_append_bool(encoder_p, src_p->value.c210); break; case oer_c_source_q_choice_c211_e: encoder_append_uint(encoder_p, 0xbf8152, 3); encoder_append_bool(encoder_p, src_p->value.c211); break; case oer_c_source_q_choice_c212_e: encoder_append_uint(encoder_p, 0xbf8153, 3); encoder_append_bool(encoder_p, src_p->value.c212); break; case oer_c_source_q_choice_c213_e: encoder_append_uint(encoder_p, 0xbf8154, 3); encoder_append_bool(encoder_p, src_p->value.c213); break; case oer_c_source_q_choice_c214_e: encoder_append_uint(encoder_p, 0xbf8155, 3); encoder_append_bool(encoder_p, src_p->value.c214); break; case oer_c_source_q_choice_c215_e: encoder_append_uint(encoder_p, 0xbf8156, 3); encoder_append_bool(encoder_p, src_p->value.c215); break; case oer_c_source_q_choice_c216_e: encoder_append_uint(encoder_p, 0xbf8157, 3); encoder_append_bool(encoder_p, src_p->value.c216); break; case oer_c_source_q_choice_c217_e: encoder_append_uint(encoder_p, 0xbf8158, 3); encoder_append_bool(encoder_p, src_p->value.c217); break; case oer_c_source_q_choice_c218_e: encoder_append_uint(encoder_p, 0xbf8159, 3); encoder_append_bool(encoder_p, src_p->value.c218); break; case oer_c_source_q_choice_c219_e: encoder_append_uint(encoder_p, 0xbf815a, 3); encoder_append_bool(encoder_p, src_p->value.c219); break; case oer_c_source_q_choice_c220_e: encoder_append_uint(encoder_p, 0xbf815b, 3); encoder_append_bool(encoder_p, src_p->value.c220); break; case oer_c_source_q_choice_c221_e: encoder_append_uint(encoder_p, 0xbf815c, 3); encoder_append_bool(encoder_p, src_p->value.c221); break; case oer_c_source_q_choice_c222_e: encoder_append_uint(encoder_p, 0xbf815d, 3); encoder_append_bool(encoder_p, src_p->value.c222); break; case oer_c_source_q_choice_c223_e: encoder_append_uint(encoder_p, 0xbf815e, 3); encoder_append_bool(encoder_p, src_p->value.c223); break; case oer_c_source_q_choice_c224_e: encoder_append_uint(encoder_p, 0xbf815f, 3); encoder_append_bool(encoder_p, src_p->value.c224); break; case oer_c_source_q_choice_c225_e: encoder_append_uint(encoder_p, 0xbf8160, 3); encoder_append_bool(encoder_p, src_p->value.c225); break; case oer_c_source_q_choice_c226_e: encoder_append_uint(encoder_p, 0xbf8161, 3); encoder_append_bool(encoder_p, src_p->value.c226); break; case oer_c_source_q_choice_c227_e: encoder_append_uint(encoder_p, 0xbf8162, 3); encoder_append_bool(encoder_p, src_p->value.c227); break; case oer_c_source_q_choice_c228_e: encoder_append_uint(encoder_p, 0xbf8163, 3); encoder_append_bool(encoder_p, src_p->value.c228); break; case oer_c_source_q_choice_c229_e: encoder_append_uint(encoder_p, 0xbf8164, 3); encoder_append_bool(encoder_p, src_p->value.c229); break; case oer_c_source_q_choice_c230_e: encoder_append_uint(encoder_p, 0xbf8165, 3); encoder_append_bool(encoder_p, src_p->value.c230); break; case oer_c_source_q_choice_c231_e: encoder_append_uint(encoder_p, 0xbf8166, 3); encoder_append_bool(encoder_p, src_p->value.c231); break; case oer_c_source_q_choice_c232_e: encoder_append_uint(encoder_p, 0xbf8167, 3); encoder_append_bool(encoder_p, src_p->value.c232); break; case oer_c_source_q_choice_c233_e: encoder_append_uint(encoder_p, 0xbf8168, 3); encoder_append_bool(encoder_p, src_p->value.c233); break; case oer_c_source_q_choice_c234_e: encoder_append_uint(encoder_p, 0xbf8169, 3); encoder_append_bool(encoder_p, src_p->value.c234); break; case oer_c_source_q_choice_c235_e: encoder_append_uint(encoder_p, 0xbf816a, 3); encoder_append_bool(encoder_p, src_p->value.c235); break; case oer_c_source_q_choice_c236_e: encoder_append_uint(encoder_p, 0xbf816b, 3); encoder_append_bool(encoder_p, src_p->value.c236); break; case oer_c_source_q_choice_c237_e: encoder_append_uint(encoder_p, 0xbf816c, 3); encoder_append_bool(encoder_p, src_p->value.c237); break; case oer_c_source_q_choice_c238_e: encoder_append_uint(encoder_p, 0xbf816d, 3); encoder_append_bool(encoder_p, src_p->value.c238); break; case oer_c_source_q_choice_c239_e: encoder_append_uint(encoder_p, 0xbf816e, 3); encoder_append_bool(encoder_p, src_p->value.c239); break; case oer_c_source_q_choice_c240_e: encoder_append_uint(encoder_p, 0xbf816f, 3); encoder_append_bool(encoder_p, src_p->value.c240); break; case oer_c_source_q_choice_c241_e: encoder_append_uint(encoder_p, 0xbf8170, 3); encoder_append_bool(encoder_p, src_p->value.c241); break; case oer_c_source_q_choice_c242_e: encoder_append_uint(encoder_p, 0xbf8171, 3); encoder_append_bool(encoder_p, src_p->value.c242); break; case oer_c_source_q_choice_c243_e: encoder_append_uint(encoder_p, 0xbf8172, 3); encoder_append_bool(encoder_p, src_p->value.c243); break; case oer_c_source_q_choice_c244_e: encoder_append_uint(encoder_p, 0xbf8173, 3); encoder_append_bool(encoder_p, src_p->value.c244); break; case oer_c_source_q_choice_c245_e: encoder_append_uint(encoder_p, 0xbf8174, 3); encoder_append_bool(encoder_p, src_p->value.c245); break; case oer_c_source_q_choice_c246_e: encoder_append_uint(encoder_p, 0xbf8175, 3); encoder_append_bool(encoder_p, src_p->value.c246); break; case oer_c_source_q_choice_c247_e: encoder_append_uint(encoder_p, 0xbf8176, 3); encoder_append_bool(encoder_p, src_p->value.c247); break; case oer_c_source_q_choice_c248_e: encoder_append_uint(encoder_p, 0xbf8177, 3); encoder_append_bool(encoder_p, src_p->value.c248); break; case oer_c_source_q_choice_c249_e: encoder_append_uint(encoder_p, 0xbf8178, 3); encoder_append_bool(encoder_p, src_p->value.c249); break; case oer_c_source_q_choice_c250_e: encoder_append_uint(encoder_p, 0xbf8179, 3); encoder_append_bool(encoder_p, src_p->value.c250); break; case oer_c_source_q_choice_c251_e: encoder_append_uint(encoder_p, 0xbf817a, 3); encoder_append_bool(encoder_p, src_p->value.c251); break; case oer_c_source_q_choice_c252_e: encoder_append_uint(encoder_p, 0xbf817b, 3); encoder_append_bool(encoder_p, src_p->value.c252); break; case oer_c_source_q_choice_c253_e: encoder_append_uint(encoder_p, 0xbf817c, 3); encoder_append_bool(encoder_p, src_p->value.c253); break; case oer_c_source_q_choice_c254_e: encoder_append_uint(encoder_p, 0xbf817d, 3); encoder_append_bool(encoder_p, src_p->value.c254); break; case oer_c_source_q_choice_c255_e: encoder_append_uint(encoder_p, 0xbf817e, 3); encoder_append_bool(encoder_p, src_p->value.c255); break; case oer_c_source_q_choice_c256_e: encoder_append_uint(encoder_p, 0xbf817f, 3); encoder_append_bool(encoder_p, src_p->value.c256); break; case oer_c_source_q_choice_c257_e: encoder_append_uint(encoder_p, 0xbf8200, 3); encoder_append_bool(encoder_p, src_p->value.c257); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } static void oer_c_source_q_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_q_t *dst_p) { uint32_t tag; tag = decoder_read_tag(decoder_p); switch (tag) { case 0x80: dst_p->choice = oer_c_source_q_choice_c001_e; dst_p->value.c001 = decoder_read_bool(decoder_p); break; case 0x81: dst_p->choice = oer_c_source_q_choice_c002_e; dst_p->value.c002 = decoder_read_bool(decoder_p); break; case 0x82: dst_p->choice = oer_c_source_q_choice_c003_e; dst_p->value.c003 = decoder_read_bool(decoder_p); break; case 0x83: dst_p->choice = oer_c_source_q_choice_c004_e; dst_p->value.c004 = decoder_read_bool(decoder_p); break; case 0x84: dst_p->choice = oer_c_source_q_choice_c005_e; dst_p->value.c005 = decoder_read_bool(decoder_p); break; case 0x85: dst_p->choice = oer_c_source_q_choice_c006_e; dst_p->value.c006 = decoder_read_bool(decoder_p); break; case 0x86: dst_p->choice = oer_c_source_q_choice_c007_e; dst_p->value.c007 = decoder_read_bool(decoder_p); break; case 0x87: dst_p->choice = oer_c_source_q_choice_c008_e; dst_p->value.c008 = decoder_read_bool(decoder_p); break; case 0x88: dst_p->choice = oer_c_source_q_choice_c009_e; dst_p->value.c009 = decoder_read_bool(decoder_p); break; case 0x89: dst_p->choice = oer_c_source_q_choice_c010_e; dst_p->value.c010 = decoder_read_bool(decoder_p); break; case 0x8a: dst_p->choice = oer_c_source_q_choice_c011_e; dst_p->value.c011 = decoder_read_bool(decoder_p); break; case 0x8b: dst_p->choice = oer_c_source_q_choice_c012_e; dst_p->value.c012 = decoder_read_bool(decoder_p); break; case 0x8c: dst_p->choice = oer_c_source_q_choice_c013_e; dst_p->value.c013 = decoder_read_bool(decoder_p); break; case 0x8d: dst_p->choice = oer_c_source_q_choice_c014_e; dst_p->value.c014 = decoder_read_bool(decoder_p); break; case 0x8e: dst_p->choice = oer_c_source_q_choice_c015_e; dst_p->value.c015 = decoder_read_bool(decoder_p); break; case 0x8f: dst_p->choice = oer_c_source_q_choice_c016_e; dst_p->value.c016 = decoder_read_bool(decoder_p); break; case 0x90: dst_p->choice = oer_c_source_q_choice_c017_e; dst_p->value.c017 = decoder_read_bool(decoder_p); break; case 0x91: dst_p->choice = oer_c_source_q_choice_c018_e; dst_p->value.c018 = decoder_read_bool(decoder_p); break; case 0x92: dst_p->choice = oer_c_source_q_choice_c019_e; dst_p->value.c019 = decoder_read_bool(decoder_p); break; case 0x93: dst_p->choice = oer_c_source_q_choice_c020_e; dst_p->value.c020 = decoder_read_bool(decoder_p); break; case 0x94: dst_p->choice = oer_c_source_q_choice_c021_e; dst_p->value.c021 = decoder_read_bool(decoder_p); break; case 0x95: dst_p->choice = oer_c_source_q_choice_c022_e; dst_p->value.c022 = decoder_read_bool(decoder_p); break; case 0x96: dst_p->choice = oer_c_source_q_choice_c023_e; dst_p->value.c023 = decoder_read_bool(decoder_p); break; case 0x97: dst_p->choice = oer_c_source_q_choice_c024_e; dst_p->value.c024 = decoder_read_bool(decoder_p); break; case 0x98: dst_p->choice = oer_c_source_q_choice_c025_e; dst_p->value.c025 = decoder_read_bool(decoder_p); break; case 0x99: dst_p->choice = oer_c_source_q_choice_c026_e; dst_p->value.c026 = decoder_read_bool(decoder_p); break; case 0x9a: dst_p->choice = oer_c_source_q_choice_c027_e; dst_p->value.c027 = decoder_read_bool(decoder_p); break; case 0x9b: dst_p->choice = oer_c_source_q_choice_c028_e; dst_p->value.c028 = decoder_read_bool(decoder_p); break; case 0x9c: dst_p->choice = oer_c_source_q_choice_c029_e; dst_p->value.c029 = decoder_read_bool(decoder_p); break; case 0x9d: dst_p->choice = oer_c_source_q_choice_c030_e; dst_p->value.c030 = decoder_read_bool(decoder_p); break; case 0x9e: dst_p->choice = oer_c_source_q_choice_c031_e; dst_p->value.c031 = decoder_read_bool(decoder_p); break; case 0x9f: dst_p->choice = oer_c_source_q_choice_c032_e; dst_p->value.c032 = decoder_read_bool(decoder_p); break; case 0xa0: dst_p->choice = oer_c_source_q_choice_c033_e; dst_p->value.c033 = decoder_read_bool(decoder_p); break; case 0xa1: dst_p->choice = oer_c_source_q_choice_c034_e; dst_p->value.c034 = decoder_read_bool(decoder_p); break; case 0xa2: dst_p->choice = oer_c_source_q_choice_c035_e; dst_p->value.c035 = decoder_read_bool(decoder_p); break; case 0xa3: dst_p->choice = oer_c_source_q_choice_c036_e; dst_p->value.c036 = decoder_read_bool(decoder_p); break; case 0xa4: dst_p->choice = oer_c_source_q_choice_c037_e; dst_p->value.c037 = decoder_read_bool(decoder_p); break; case 0xa5: dst_p->choice = oer_c_source_q_choice_c038_e; dst_p->value.c038 = decoder_read_bool(decoder_p); break; case 0xa6: dst_p->choice = oer_c_source_q_choice_c039_e; dst_p->value.c039 = decoder_read_bool(decoder_p); break; case 0xa7: dst_p->choice = oer_c_source_q_choice_c040_e; dst_p->value.c040 = decoder_read_bool(decoder_p); break; case 0xa8: dst_p->choice = oer_c_source_q_choice_c041_e; dst_p->value.c041 = decoder_read_bool(decoder_p); break; case 0xa9: dst_p->choice = oer_c_source_q_choice_c042_e; dst_p->value.c042 = decoder_read_bool(decoder_p); break; case 0xaa: dst_p->choice = oer_c_source_q_choice_c043_e; dst_p->value.c043 = decoder_read_bool(decoder_p); break; case 0xab: dst_p->choice = oer_c_source_q_choice_c044_e; dst_p->value.c044 = decoder_read_bool(decoder_p); break; case 0xac: dst_p->choice = oer_c_source_q_choice_c045_e; dst_p->value.c045 = decoder_read_bool(decoder_p); break; case 0xad: dst_p->choice = oer_c_source_q_choice_c046_e; dst_p->value.c046 = decoder_read_bool(decoder_p); break; case 0xae: dst_p->choice = oer_c_source_q_choice_c047_e; dst_p->value.c047 = decoder_read_bool(decoder_p); break; case 0xaf: dst_p->choice = oer_c_source_q_choice_c048_e; dst_p->value.c048 = decoder_read_bool(decoder_p); break; case 0xb0: dst_p->choice = oer_c_source_q_choice_c049_e; dst_p->value.c049 = decoder_read_bool(decoder_p); break; case 0xb1: dst_p->choice = oer_c_source_q_choice_c050_e; dst_p->value.c050 = decoder_read_bool(decoder_p); break; case 0xb2: dst_p->choice = oer_c_source_q_choice_c051_e; dst_p->value.c051 = decoder_read_bool(decoder_p); break; case 0xb3: dst_p->choice = oer_c_source_q_choice_c052_e; dst_p->value.c052 = decoder_read_bool(decoder_p); break; case 0xb4: dst_p->choice = oer_c_source_q_choice_c053_e; dst_p->value.c053 = decoder_read_bool(decoder_p); break; case 0xb5: dst_p->choice = oer_c_source_q_choice_c054_e; dst_p->value.c054 = decoder_read_bool(decoder_p); break; case 0xb6: dst_p->choice = oer_c_source_q_choice_c055_e; dst_p->value.c055 = decoder_read_bool(decoder_p); break; case 0xb7: dst_p->choice = oer_c_source_q_choice_c056_e; dst_p->value.c056 = decoder_read_bool(decoder_p); break; case 0xb8: dst_p->choice = oer_c_source_q_choice_c057_e; dst_p->value.c057 = decoder_read_bool(decoder_p); break; case 0xb9: dst_p->choice = oer_c_source_q_choice_c058_e; dst_p->value.c058 = decoder_read_bool(decoder_p); break; case 0xba: dst_p->choice = oer_c_source_q_choice_c059_e; dst_p->value.c059 = decoder_read_bool(decoder_p); break; case 0xbb: dst_p->choice = oer_c_source_q_choice_c060_e; dst_p->value.c060 = decoder_read_bool(decoder_p); break; case 0xbc: dst_p->choice = oer_c_source_q_choice_c061_e; dst_p->value.c061 = decoder_read_bool(decoder_p); break; case 0xbd: dst_p->choice = oer_c_source_q_choice_c062_e; dst_p->value.c062 = decoder_read_bool(decoder_p); break; case 0xbe: dst_p->choice = oer_c_source_q_choice_c063_e; dst_p->value.c063 = decoder_read_bool(decoder_p); break; case 0xbf3f: dst_p->choice = oer_c_source_q_choice_c064_e; dst_p->value.c064 = decoder_read_bool(decoder_p); break; case 0xbf40: dst_p->choice = oer_c_source_q_choice_c065_e; dst_p->value.c065 = decoder_read_bool(decoder_p); break; case 0xbf41: dst_p->choice = oer_c_source_q_choice_c066_e; dst_p->value.c066 = decoder_read_bool(decoder_p); break; case 0xbf42: dst_p->choice = oer_c_source_q_choice_c067_e; dst_p->value.c067 = decoder_read_bool(decoder_p); break; case 0xbf43: dst_p->choice = oer_c_source_q_choice_c068_e; dst_p->value.c068 = decoder_read_bool(decoder_p); break; case 0xbf44: dst_p->choice = oer_c_source_q_choice_c069_e; dst_p->value.c069 = decoder_read_bool(decoder_p); break; case 0xbf45: dst_p->choice = oer_c_source_q_choice_c070_e; dst_p->value.c070 = decoder_read_bool(decoder_p); break; case 0xbf46: dst_p->choice = oer_c_source_q_choice_c071_e; dst_p->value.c071 = decoder_read_bool(decoder_p); break; case 0xbf47: dst_p->choice = oer_c_source_q_choice_c072_e; dst_p->value.c072 = decoder_read_bool(decoder_p); break; case 0xbf48: dst_p->choice = oer_c_source_q_choice_c073_e; dst_p->value.c073 = decoder_read_bool(decoder_p); break; case 0xbf49: dst_p->choice = oer_c_source_q_choice_c074_e; dst_p->value.c074 = decoder_read_bool(decoder_p); break; case 0xbf4a: dst_p->choice = oer_c_source_q_choice_c075_e; dst_p->value.c075 = decoder_read_bool(decoder_p); break; case 0xbf4b: dst_p->choice = oer_c_source_q_choice_c076_e; dst_p->value.c076 = decoder_read_bool(decoder_p); break; case 0xbf4c: dst_p->choice = oer_c_source_q_choice_c077_e; dst_p->value.c077 = decoder_read_bool(decoder_p); break; case 0xbf4d: dst_p->choice = oer_c_source_q_choice_c078_e; dst_p->value.c078 = decoder_read_bool(decoder_p); break; case 0xbf4e: dst_p->choice = oer_c_source_q_choice_c079_e; dst_p->value.c079 = decoder_read_bool(decoder_p); break; case 0xbf4f: dst_p->choice = oer_c_source_q_choice_c080_e; dst_p->value.c080 = decoder_read_bool(decoder_p); break; case 0xbf50: dst_p->choice = oer_c_source_q_choice_c081_e; dst_p->value.c081 = decoder_read_bool(decoder_p); break; case 0xbf51: dst_p->choice = oer_c_source_q_choice_c082_e; dst_p->value.c082 = decoder_read_bool(decoder_p); break; case 0xbf52: dst_p->choice = oer_c_source_q_choice_c083_e; dst_p->value.c083 = decoder_read_bool(decoder_p); break; case 0xbf53: dst_p->choice = oer_c_source_q_choice_c084_e; dst_p->value.c084 = decoder_read_bool(decoder_p); break; case 0xbf54: dst_p->choice = oer_c_source_q_choice_c085_e; dst_p->value.c085 = decoder_read_bool(decoder_p); break; case 0xbf55: dst_p->choice = oer_c_source_q_choice_c086_e; dst_p->value.c086 = decoder_read_bool(decoder_p); break; case 0xbf56: dst_p->choice = oer_c_source_q_choice_c087_e; dst_p->value.c087 = decoder_read_bool(decoder_p); break; case 0xbf57: dst_p->choice = oer_c_source_q_choice_c088_e; dst_p->value.c088 = decoder_read_bool(decoder_p); break; case 0xbf58: dst_p->choice = oer_c_source_q_choice_c089_e; dst_p->value.c089 = decoder_read_bool(decoder_p); break; case 0xbf59: dst_p->choice = oer_c_source_q_choice_c090_e; dst_p->value.c090 = decoder_read_bool(decoder_p); break; case 0xbf5a: dst_p->choice = oer_c_source_q_choice_c091_e; dst_p->value.c091 = decoder_read_bool(decoder_p); break; case 0xbf5b: dst_p->choice = oer_c_source_q_choice_c092_e; dst_p->value.c092 = decoder_read_bool(decoder_p); break; case 0xbf5c: dst_p->choice = oer_c_source_q_choice_c093_e; dst_p->value.c093 = decoder_read_bool(decoder_p); break; case 0xbf5d: dst_p->choice = oer_c_source_q_choice_c094_e; dst_p->value.c094 = decoder_read_bool(decoder_p); break; case 0xbf5e: dst_p->choice = oer_c_source_q_choice_c095_e; dst_p->value.c095 = decoder_read_bool(decoder_p); break; case 0xbf5f: dst_p->choice = oer_c_source_q_choice_c096_e; dst_p->value.c096 = decoder_read_bool(decoder_p); break; case 0xbf60: dst_p->choice = oer_c_source_q_choice_c097_e; dst_p->value.c097 = decoder_read_bool(decoder_p); break; case 0xbf61: dst_p->choice = oer_c_source_q_choice_c098_e; dst_p->value.c098 = decoder_read_bool(decoder_p); break; case 0xbf62: dst_p->choice = oer_c_source_q_choice_c099_e; dst_p->value.c099 = decoder_read_bool(decoder_p); break; case 0xbf63: dst_p->choice = oer_c_source_q_choice_c100_e; dst_p->value.c100 = decoder_read_bool(decoder_p); break; case 0xbf64: dst_p->choice = oer_c_source_q_choice_c101_e; dst_p->value.c101 = decoder_read_bool(decoder_p); break; case 0xbf65: dst_p->choice = oer_c_source_q_choice_c102_e; dst_p->value.c102 = decoder_read_bool(decoder_p); break; case 0xbf66: dst_p->choice = oer_c_source_q_choice_c103_e; dst_p->value.c103 = decoder_read_bool(decoder_p); break; case 0xbf67: dst_p->choice = oer_c_source_q_choice_c104_e; dst_p->value.c104 = decoder_read_bool(decoder_p); break; case 0xbf68: dst_p->choice = oer_c_source_q_choice_c105_e; dst_p->value.c105 = decoder_read_bool(decoder_p); break; case 0xbf69: dst_p->choice = oer_c_source_q_choice_c106_e; dst_p->value.c106 = decoder_read_bool(decoder_p); break; case 0xbf6a: dst_p->choice = oer_c_source_q_choice_c107_e; dst_p->value.c107 = decoder_read_bool(decoder_p); break; case 0xbf6b: dst_p->choice = oer_c_source_q_choice_c108_e; dst_p->value.c108 = decoder_read_bool(decoder_p); break; case 0xbf6c: dst_p->choice = oer_c_source_q_choice_c109_e; dst_p->value.c109 = decoder_read_bool(decoder_p); break; case 0xbf6d: dst_p->choice = oer_c_source_q_choice_c110_e; dst_p->value.c110 = decoder_read_bool(decoder_p); break; case 0xbf6e: dst_p->choice = oer_c_source_q_choice_c111_e; dst_p->value.c111 = decoder_read_bool(decoder_p); break; case 0xbf6f: dst_p->choice = oer_c_source_q_choice_c112_e; dst_p->value.c112 = decoder_read_bool(decoder_p); break; case 0xbf70: dst_p->choice = oer_c_source_q_choice_c113_e; dst_p->value.c113 = decoder_read_bool(decoder_p); break; case 0xbf71: dst_p->choice = oer_c_source_q_choice_c114_e; dst_p->value.c114 = decoder_read_bool(decoder_p); break; case 0xbf72: dst_p->choice = oer_c_source_q_choice_c115_e; dst_p->value.c115 = decoder_read_bool(decoder_p); break; case 0xbf73: dst_p->choice = oer_c_source_q_choice_c116_e; dst_p->value.c116 = decoder_read_bool(decoder_p); break; case 0xbf74: dst_p->choice = oer_c_source_q_choice_c117_e; dst_p->value.c117 = decoder_read_bool(decoder_p); break; case 0xbf75: dst_p->choice = oer_c_source_q_choice_c118_e; dst_p->value.c118 = decoder_read_bool(decoder_p); break; case 0xbf76: dst_p->choice = oer_c_source_q_choice_c119_e; dst_p->value.c119 = decoder_read_bool(decoder_p); break; case 0xbf77: dst_p->choice = oer_c_source_q_choice_c120_e; dst_p->value.c120 = decoder_read_bool(decoder_p); break; case 0xbf78: dst_p->choice = oer_c_source_q_choice_c121_e; dst_p->value.c121 = decoder_read_bool(decoder_p); break; case 0xbf79: dst_p->choice = oer_c_source_q_choice_c122_e; dst_p->value.c122 = decoder_read_bool(decoder_p); break; case 0xbf7a: dst_p->choice = oer_c_source_q_choice_c123_e; dst_p->value.c123 = decoder_read_bool(decoder_p); break; case 0xbf7b: dst_p->choice = oer_c_source_q_choice_c124_e; dst_p->value.c124 = decoder_read_bool(decoder_p); break; case 0xbf7c: dst_p->choice = oer_c_source_q_choice_c125_e; dst_p->value.c125 = decoder_read_bool(decoder_p); break; case 0xbf7d: dst_p->choice = oer_c_source_q_choice_c126_e; dst_p->value.c126 = decoder_read_bool(decoder_p); break; case 0xbf7e: dst_p->choice = oer_c_source_q_choice_c127_e; dst_p->value.c127 = decoder_read_bool(decoder_p); break; case 0xbf7f: dst_p->choice = oer_c_source_q_choice_c128_e; dst_p->value.c128 = decoder_read_bool(decoder_p); break; case 0xbf8100: dst_p->choice = oer_c_source_q_choice_c129_e; dst_p->value.c129 = decoder_read_bool(decoder_p); break; case 0xbf8101: dst_p->choice = oer_c_source_q_choice_c130_e; dst_p->value.c130 = decoder_read_bool(decoder_p); break; case 0xbf8102: dst_p->choice = oer_c_source_q_choice_c131_e; dst_p->value.c131 = decoder_read_bool(decoder_p); break; case 0xbf8103: dst_p->choice = oer_c_source_q_choice_c132_e; dst_p->value.c132 = decoder_read_bool(decoder_p); break; case 0xbf8104: dst_p->choice = oer_c_source_q_choice_c133_e; dst_p->value.c133 = decoder_read_bool(decoder_p); break; case 0xbf8105: dst_p->choice = oer_c_source_q_choice_c134_e; dst_p->value.c134 = decoder_read_bool(decoder_p); break; case 0xbf8106: dst_p->choice = oer_c_source_q_choice_c135_e; dst_p->value.c135 = decoder_read_bool(decoder_p); break; case 0xbf8107: dst_p->choice = oer_c_source_q_choice_c136_e; dst_p->value.c136 = decoder_read_bool(decoder_p); break; case 0xbf8108: dst_p->choice = oer_c_source_q_choice_c137_e; dst_p->value.c137 = decoder_read_bool(decoder_p); break; case 0xbf8109: dst_p->choice = oer_c_source_q_choice_c138_e; dst_p->value.c138 = decoder_read_bool(decoder_p); break; case 0xbf810a: dst_p->choice = oer_c_source_q_choice_c139_e; dst_p->value.c139 = decoder_read_bool(decoder_p); break; case 0xbf810b: dst_p->choice = oer_c_source_q_choice_c140_e; dst_p->value.c140 = decoder_read_bool(decoder_p); break; case 0xbf810c: dst_p->choice = oer_c_source_q_choice_c141_e; dst_p->value.c141 = decoder_read_bool(decoder_p); break; case 0xbf810d: dst_p->choice = oer_c_source_q_choice_c142_e; dst_p->value.c142 = decoder_read_bool(decoder_p); break; case 0xbf810e: dst_p->choice = oer_c_source_q_choice_c143_e; dst_p->value.c143 = decoder_read_bool(decoder_p); break; case 0xbf810f: dst_p->choice = oer_c_source_q_choice_c144_e; dst_p->value.c144 = decoder_read_bool(decoder_p); break; case 0xbf8110: dst_p->choice = oer_c_source_q_choice_c145_e; dst_p->value.c145 = decoder_read_bool(decoder_p); break; case 0xbf8111: dst_p->choice = oer_c_source_q_choice_c146_e; dst_p->value.c146 = decoder_read_bool(decoder_p); break; case 0xbf8112: dst_p->choice = oer_c_source_q_choice_c147_e; dst_p->value.c147 = decoder_read_bool(decoder_p); break; case 0xbf8113: dst_p->choice = oer_c_source_q_choice_c148_e; dst_p->value.c148 = decoder_read_bool(decoder_p); break; case 0xbf8114: dst_p->choice = oer_c_source_q_choice_c149_e; dst_p->value.c149 = decoder_read_bool(decoder_p); break; case 0xbf8115: dst_p->choice = oer_c_source_q_choice_c150_e; dst_p->value.c150 = decoder_read_bool(decoder_p); break; case 0xbf8116: dst_p->choice = oer_c_source_q_choice_c151_e; dst_p->value.c151 = decoder_read_bool(decoder_p); break; case 0xbf8117: dst_p->choice = oer_c_source_q_choice_c152_e; dst_p->value.c152 = decoder_read_bool(decoder_p); break; case 0xbf8118: dst_p->choice = oer_c_source_q_choice_c153_e; dst_p->value.c153 = decoder_read_bool(decoder_p); break; case 0xbf8119: dst_p->choice = oer_c_source_q_choice_c154_e; dst_p->value.c154 = decoder_read_bool(decoder_p); break; case 0xbf811a: dst_p->choice = oer_c_source_q_choice_c155_e; dst_p->value.c155 = decoder_read_bool(decoder_p); break; case 0xbf811b: dst_p->choice = oer_c_source_q_choice_c156_e; dst_p->value.c156 = decoder_read_bool(decoder_p); break; case 0xbf811c: dst_p->choice = oer_c_source_q_choice_c157_e; dst_p->value.c157 = decoder_read_bool(decoder_p); break; case 0xbf811d: dst_p->choice = oer_c_source_q_choice_c158_e; dst_p->value.c158 = decoder_read_bool(decoder_p); break; case 0xbf811e: dst_p->choice = oer_c_source_q_choice_c159_e; dst_p->value.c159 = decoder_read_bool(decoder_p); break; case 0xbf811f: dst_p->choice = oer_c_source_q_choice_c160_e; dst_p->value.c160 = decoder_read_bool(decoder_p); break; case 0xbf8120: dst_p->choice = oer_c_source_q_choice_c161_e; dst_p->value.c161 = decoder_read_bool(decoder_p); break; case 0xbf8121: dst_p->choice = oer_c_source_q_choice_c162_e; dst_p->value.c162 = decoder_read_bool(decoder_p); break; case 0xbf8122: dst_p->choice = oer_c_source_q_choice_c163_e; dst_p->value.c163 = decoder_read_bool(decoder_p); break; case 0xbf8123: dst_p->choice = oer_c_source_q_choice_c164_e; dst_p->value.c164 = decoder_read_bool(decoder_p); break; case 0xbf8124: dst_p->choice = oer_c_source_q_choice_c165_e; dst_p->value.c165 = decoder_read_bool(decoder_p); break; case 0xbf8125: dst_p->choice = oer_c_source_q_choice_c166_e; dst_p->value.c166 = decoder_read_bool(decoder_p); break; case 0xbf8126: dst_p->choice = oer_c_source_q_choice_c167_e; dst_p->value.c167 = decoder_read_bool(decoder_p); break; case 0xbf8127: dst_p->choice = oer_c_source_q_choice_c168_e; dst_p->value.c168 = decoder_read_bool(decoder_p); break; case 0xbf8128: dst_p->choice = oer_c_source_q_choice_c169_e; dst_p->value.c169 = decoder_read_bool(decoder_p); break; case 0xbf8129: dst_p->choice = oer_c_source_q_choice_c170_e; dst_p->value.c170 = decoder_read_bool(decoder_p); break; case 0xbf812a: dst_p->choice = oer_c_source_q_choice_c171_e; dst_p->value.c171 = decoder_read_bool(decoder_p); break; case 0xbf812b: dst_p->choice = oer_c_source_q_choice_c172_e; dst_p->value.c172 = decoder_read_bool(decoder_p); break; case 0xbf812c: dst_p->choice = oer_c_source_q_choice_c173_e; dst_p->value.c173 = decoder_read_bool(decoder_p); break; case 0xbf812d: dst_p->choice = oer_c_source_q_choice_c174_e; dst_p->value.c174 = decoder_read_bool(decoder_p); break; case 0xbf812e: dst_p->choice = oer_c_source_q_choice_c175_e; dst_p->value.c175 = decoder_read_bool(decoder_p); break; case 0xbf812f: dst_p->choice = oer_c_source_q_choice_c176_e; dst_p->value.c176 = decoder_read_bool(decoder_p); break; case 0xbf8130: dst_p->choice = oer_c_source_q_choice_c177_e; dst_p->value.c177 = decoder_read_bool(decoder_p); break; case 0xbf8131: dst_p->choice = oer_c_source_q_choice_c178_e; dst_p->value.c178 = decoder_read_bool(decoder_p); break; case 0xbf8132: dst_p->choice = oer_c_source_q_choice_c179_e; dst_p->value.c179 = decoder_read_bool(decoder_p); break; case 0xbf8133: dst_p->choice = oer_c_source_q_choice_c180_e; dst_p->value.c180 = decoder_read_bool(decoder_p); break; case 0xbf8134: dst_p->choice = oer_c_source_q_choice_c181_e; dst_p->value.c181 = decoder_read_bool(decoder_p); break; case 0xbf8135: dst_p->choice = oer_c_source_q_choice_c182_e; dst_p->value.c182 = decoder_read_bool(decoder_p); break; case 0xbf8136: dst_p->choice = oer_c_source_q_choice_c183_e; dst_p->value.c183 = decoder_read_bool(decoder_p); break; case 0xbf8137: dst_p->choice = oer_c_source_q_choice_c184_e; dst_p->value.c184 = decoder_read_bool(decoder_p); break; case 0xbf8138: dst_p->choice = oer_c_source_q_choice_c185_e; dst_p->value.c185 = decoder_read_bool(decoder_p); break; case 0xbf8139: dst_p->choice = oer_c_source_q_choice_c186_e; dst_p->value.c186 = decoder_read_bool(decoder_p); break; case 0xbf813a: dst_p->choice = oer_c_source_q_choice_c187_e; dst_p->value.c187 = decoder_read_bool(decoder_p); break; case 0xbf813b: dst_p->choice = oer_c_source_q_choice_c188_e; dst_p->value.c188 = decoder_read_bool(decoder_p); break; case 0xbf813c: dst_p->choice = oer_c_source_q_choice_c189_e; dst_p->value.c189 = decoder_read_bool(decoder_p); break; case 0xbf813d: dst_p->choice = oer_c_source_q_choice_c190_e; dst_p->value.c190 = decoder_read_bool(decoder_p); break; case 0xbf813e: dst_p->choice = oer_c_source_q_choice_c191_e; dst_p->value.c191 = decoder_read_bool(decoder_p); break; case 0xbf813f: dst_p->choice = oer_c_source_q_choice_c192_e; dst_p->value.c192 = decoder_read_bool(decoder_p); break; case 0xbf8140: dst_p->choice = oer_c_source_q_choice_c193_e; dst_p->value.c193 = decoder_read_bool(decoder_p); break; case 0xbf8141: dst_p->choice = oer_c_source_q_choice_c194_e; dst_p->value.c194 = decoder_read_bool(decoder_p); break; case 0xbf8142: dst_p->choice = oer_c_source_q_choice_c195_e; dst_p->value.c195 = decoder_read_bool(decoder_p); break; case 0xbf8143: dst_p->choice = oer_c_source_q_choice_c196_e; dst_p->value.c196 = decoder_read_bool(decoder_p); break; case 0xbf8144: dst_p->choice = oer_c_source_q_choice_c197_e; dst_p->value.c197 = decoder_read_bool(decoder_p); break; case 0xbf8145: dst_p->choice = oer_c_source_q_choice_c198_e; dst_p->value.c198 = decoder_read_bool(decoder_p); break; case 0xbf8146: dst_p->choice = oer_c_source_q_choice_c199_e; dst_p->value.c199 = decoder_read_bool(decoder_p); break; case 0xbf8147: dst_p->choice = oer_c_source_q_choice_c200_e; dst_p->value.c200 = decoder_read_bool(decoder_p); break; case 0xbf8148: dst_p->choice = oer_c_source_q_choice_c201_e; dst_p->value.c201 = decoder_read_bool(decoder_p); break; case 0xbf8149: dst_p->choice = oer_c_source_q_choice_c202_e; dst_p->value.c202 = decoder_read_bool(decoder_p); break; case 0xbf814a: dst_p->choice = oer_c_source_q_choice_c203_e; dst_p->value.c203 = decoder_read_bool(decoder_p); break; case 0xbf814b: dst_p->choice = oer_c_source_q_choice_c204_e; dst_p->value.c204 = decoder_read_bool(decoder_p); break; case 0xbf814c: dst_p->choice = oer_c_source_q_choice_c205_e; dst_p->value.c205 = decoder_read_bool(decoder_p); break; case 0xbf814d: dst_p->choice = oer_c_source_q_choice_c206_e; dst_p->value.c206 = decoder_read_bool(decoder_p); break; case 0xbf814e: dst_p->choice = oer_c_source_q_choice_c207_e; dst_p->value.c207 = decoder_read_bool(decoder_p); break; case 0xbf814f: dst_p->choice = oer_c_source_q_choice_c208_e; dst_p->value.c208 = decoder_read_bool(decoder_p); break; case 0xbf8150: dst_p->choice = oer_c_source_q_choice_c209_e; dst_p->value.c209 = decoder_read_bool(decoder_p); break; case 0xbf8151: dst_p->choice = oer_c_source_q_choice_c210_e; dst_p->value.c210 = decoder_read_bool(decoder_p); break; case 0xbf8152: dst_p->choice = oer_c_source_q_choice_c211_e; dst_p->value.c211 = decoder_read_bool(decoder_p); break; case 0xbf8153: dst_p->choice = oer_c_source_q_choice_c212_e; dst_p->value.c212 = decoder_read_bool(decoder_p); break; case 0xbf8154: dst_p->choice = oer_c_source_q_choice_c213_e; dst_p->value.c213 = decoder_read_bool(decoder_p); break; case 0xbf8155: dst_p->choice = oer_c_source_q_choice_c214_e; dst_p->value.c214 = decoder_read_bool(decoder_p); break; case 0xbf8156: dst_p->choice = oer_c_source_q_choice_c215_e; dst_p->value.c215 = decoder_read_bool(decoder_p); break; case 0xbf8157: dst_p->choice = oer_c_source_q_choice_c216_e; dst_p->value.c216 = decoder_read_bool(decoder_p); break; case 0xbf8158: dst_p->choice = oer_c_source_q_choice_c217_e; dst_p->value.c217 = decoder_read_bool(decoder_p); break; case 0xbf8159: dst_p->choice = oer_c_source_q_choice_c218_e; dst_p->value.c218 = decoder_read_bool(decoder_p); break; case 0xbf815a: dst_p->choice = oer_c_source_q_choice_c219_e; dst_p->value.c219 = decoder_read_bool(decoder_p); break; case 0xbf815b: dst_p->choice = oer_c_source_q_choice_c220_e; dst_p->value.c220 = decoder_read_bool(decoder_p); break; case 0xbf815c: dst_p->choice = oer_c_source_q_choice_c221_e; dst_p->value.c221 = decoder_read_bool(decoder_p); break; case 0xbf815d: dst_p->choice = oer_c_source_q_choice_c222_e; dst_p->value.c222 = decoder_read_bool(decoder_p); break; case 0xbf815e: dst_p->choice = oer_c_source_q_choice_c223_e; dst_p->value.c223 = decoder_read_bool(decoder_p); break; case 0xbf815f: dst_p->choice = oer_c_source_q_choice_c224_e; dst_p->value.c224 = decoder_read_bool(decoder_p); break; case 0xbf8160: dst_p->choice = oer_c_source_q_choice_c225_e; dst_p->value.c225 = decoder_read_bool(decoder_p); break; case 0xbf8161: dst_p->choice = oer_c_source_q_choice_c226_e; dst_p->value.c226 = decoder_read_bool(decoder_p); break; case 0xbf8162: dst_p->choice = oer_c_source_q_choice_c227_e; dst_p->value.c227 = decoder_read_bool(decoder_p); break; case 0xbf8163: dst_p->choice = oer_c_source_q_choice_c228_e; dst_p->value.c228 = decoder_read_bool(decoder_p); break; case 0xbf8164: dst_p->choice = oer_c_source_q_choice_c229_e; dst_p->value.c229 = decoder_read_bool(decoder_p); break; case 0xbf8165: dst_p->choice = oer_c_source_q_choice_c230_e; dst_p->value.c230 = decoder_read_bool(decoder_p); break; case 0xbf8166: dst_p->choice = oer_c_source_q_choice_c231_e; dst_p->value.c231 = decoder_read_bool(decoder_p); break; case 0xbf8167: dst_p->choice = oer_c_source_q_choice_c232_e; dst_p->value.c232 = decoder_read_bool(decoder_p); break; case 0xbf8168: dst_p->choice = oer_c_source_q_choice_c233_e; dst_p->value.c233 = decoder_read_bool(decoder_p); break; case 0xbf8169: dst_p->choice = oer_c_source_q_choice_c234_e; dst_p->value.c234 = decoder_read_bool(decoder_p); break; case 0xbf816a: dst_p->choice = oer_c_source_q_choice_c235_e; dst_p->value.c235 = decoder_read_bool(decoder_p); break; case 0xbf816b: dst_p->choice = oer_c_source_q_choice_c236_e; dst_p->value.c236 = decoder_read_bool(decoder_p); break; case 0xbf816c: dst_p->choice = oer_c_source_q_choice_c237_e; dst_p->value.c237 = decoder_read_bool(decoder_p); break; case 0xbf816d: dst_p->choice = oer_c_source_q_choice_c238_e; dst_p->value.c238 = decoder_read_bool(decoder_p); break; case 0xbf816e: dst_p->choice = oer_c_source_q_choice_c239_e; dst_p->value.c239 = decoder_read_bool(decoder_p); break; case 0xbf816f: dst_p->choice = oer_c_source_q_choice_c240_e; dst_p->value.c240 = decoder_read_bool(decoder_p); break; case 0xbf8170: dst_p->choice = oer_c_source_q_choice_c241_e; dst_p->value.c241 = decoder_read_bool(decoder_p); break; case 0xbf8171: dst_p->choice = oer_c_source_q_choice_c242_e; dst_p->value.c242 = decoder_read_bool(decoder_p); break; case 0xbf8172: dst_p->choice = oer_c_source_q_choice_c243_e; dst_p->value.c243 = decoder_read_bool(decoder_p); break; case 0xbf8173: dst_p->choice = oer_c_source_q_choice_c244_e; dst_p->value.c244 = decoder_read_bool(decoder_p); break; case 0xbf8174: dst_p->choice = oer_c_source_q_choice_c245_e; dst_p->value.c245 = decoder_read_bool(decoder_p); break; case 0xbf8175: dst_p->choice = oer_c_source_q_choice_c246_e; dst_p->value.c246 = decoder_read_bool(decoder_p); break; case 0xbf8176: dst_p->choice = oer_c_source_q_choice_c247_e; dst_p->value.c247 = decoder_read_bool(decoder_p); break; case 0xbf8177: dst_p->choice = oer_c_source_q_choice_c248_e; dst_p->value.c248 = decoder_read_bool(decoder_p); break; case 0xbf8178: dst_p->choice = oer_c_source_q_choice_c249_e; dst_p->value.c249 = decoder_read_bool(decoder_p); break; case 0xbf8179: dst_p->choice = oer_c_source_q_choice_c250_e; dst_p->value.c250 = decoder_read_bool(decoder_p); break; case 0xbf817a: dst_p->choice = oer_c_source_q_choice_c251_e; dst_p->value.c251 = decoder_read_bool(decoder_p); break; case 0xbf817b: dst_p->choice = oer_c_source_q_choice_c252_e; dst_p->value.c252 = decoder_read_bool(decoder_p); break; case 0xbf817c: dst_p->choice = oer_c_source_q_choice_c253_e; dst_p->value.c253 = decoder_read_bool(decoder_p); break; case 0xbf817d: dst_p->choice = oer_c_source_q_choice_c254_e; dst_p->value.c254 = decoder_read_bool(decoder_p); break; case 0xbf817e: dst_p->choice = oer_c_source_q_choice_c255_e; dst_p->value.c255 = decoder_read_bool(decoder_p); break; case 0xbf817f: dst_p->choice = oer_c_source_q_choice_c256_e; dst_p->value.c256 = decoder_read_bool(decoder_p); break; case 0xbf8200: dst_p->choice = oer_c_source_q_choice_c257_e; dst_p->value.c257 = decoder_read_bool(decoder_p); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } static void oer_c_source_d_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_d_t *src_p) { uint8_t number_of_length_bytes; uint8_t i; uint8_t number_of_length_bytes_2; uint8_t i_2; uint8_t present_mask[1]; uint8_t enum_length; uint8_t present_mask_2[1]; uint8_t present_mask_3[1]; number_of_length_bytes = minimum_uint_length(src_p->length); encoder_append_uint8(encoder_p, number_of_length_bytes); encoder_append_uint(encoder_p, src_p->length, number_of_length_bytes); for (i = 0; i < src_p->length; i++) { switch (src_p->elements[i].a.b.choice) { case oer_c_source_d_a_b_choice_c_e: encoder_append_uint(encoder_p, 0x80, 1); encoder_append_uint8(encoder_p, src_p->elements[i].a.b.value.c); break; case oer_c_source_d_a_b_choice_d_e: encoder_append_uint(encoder_p, 0x81, 1); encoder_append_bool(encoder_p, src_p->elements[i].a.b.value.d); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } number_of_length_bytes_2 = minimum_uint_length(src_p->elements[i].a.e.length); encoder_append_uint8(encoder_p, number_of_length_bytes_2); encoder_append_uint(encoder_p, src_p->elements[i].a.e.length, number_of_length_bytes_2); for (i_2 = 0; i_2 < src_p->elements[i].a.e.length; i_2++) { } present_mask[0] = 0; if (src_p->elements[i].g.h != oer_c_source_d_g_h_j_e) { present_mask[0] |= 0x80u; } encoder_append_bytes(encoder_p, &present_mask[0], sizeof(present_mask)); if (src_p->elements[i].g.h != oer_c_source_d_g_h_j_e) { enum_length = enumerated_value_length(src_p->elements[i].g.h); if (enum_length != 0u) { encoder_append_uint8(encoder_p, 0x80u | enum_length); encoder_append_int(encoder_p, (int32_t)src_p->elements[i].g.h, enum_length); } else { encoder_append_uint8(encoder_p, (uint8_t)src_p->elements[i].g.h); } } encoder_append_uint8(encoder_p, src_p->elements[i].g.l.length); encoder_append_bytes(encoder_p, &src_p->elements[i].g.l.buf[0], src_p->elements[i].g.l.length); present_mask_2[0] = 0; if (src_p->elements[i].m.is_n_present) { present_mask_2[0] |= 0x80u; } if (src_p->elements[i].m.o != 3) { present_mask_2[0] |= 0x40u; } if (src_p->elements[i].m.is_p_present) { present_mask_2[0] |= 0x20u; } if (src_p->elements[i].m.s != false) { present_mask_2[0] |= 0x10u; } encoder_append_bytes(encoder_p, &present_mask_2[0], sizeof(present_mask_2)); if (src_p->elements[i].m.is_n_present) { encoder_append_bool(encoder_p, src_p->elements[i].m.n); } if (src_p->elements[i].m.o != 3) { encoder_append_int8(encoder_p, src_p->elements[i].m.o); } if (src_p->elements[i].m.is_p_present) { present_mask_3[0] = 0; if (src_p->elements[i].m.p.is_r_present) { present_mask_3[0] |= 0x80u; } encoder_append_bytes(encoder_p, &present_mask_3[0], sizeof(present_mask_3)); encoder_append_bytes(encoder_p, &src_p->elements[i].m.p.q.buf[0], 5); if (src_p->elements[i].m.p.is_r_present) { encoder_append_bool(encoder_p, src_p->elements[i].m.p.r); } } if (src_p->elements[i].m.s != false) { encoder_append_bool(encoder_p, src_p->elements[i].m.s); } } } static void oer_c_source_d_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_d_t *dst_p) { uint8_t number_of_length_bytes; uint8_t i; uint32_t tag; uint8_t number_of_length_bytes_2; uint8_t i_2; uint8_t present_mask[1]; uint8_t enum_length; uint8_t present_mask_2[1]; uint8_t present_mask_3[1]; number_of_length_bytes = decoder_read_uint8(decoder_p); dst_p->length = (uint8_t)decoder_read_uint( decoder_p, number_of_length_bytes); if (dst_p->length > 10u) { decoder_abort(decoder_p, EBADLENGTH); return; } for (i = 0; i < dst_p->length; i++) { tag = decoder_read_tag(decoder_p); switch (tag) { case 0x80: dst_p->elements[i].a.b.choice = oer_c_source_d_a_b_choice_c_e; dst_p->elements[i].a.b.value.c = decoder_read_uint8(decoder_p); break; case 0x81: dst_p->elements[i].a.b.choice = oer_c_source_d_a_b_choice_d_e; dst_p->elements[i].a.b.value.d = decoder_read_bool(decoder_p); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } number_of_length_bytes_2 = decoder_read_uint8(decoder_p); dst_p->elements[i].a.e.length = (uint8_t)decoder_read_uint( decoder_p, number_of_length_bytes_2); if (dst_p->elements[i].a.e.length > 4u) { decoder_abort(decoder_p, EBADLENGTH); return; } for (i_2 = 0; i_2 < dst_p->elements[i].a.e.length; i_2++) { } decoder_read_bytes(decoder_p, &present_mask[0], sizeof(present_mask)); if ((present_mask[0] & 0x80u) == 0x80u) { enum_length = decoder_read_uint8(decoder_p); if ((enum_length & 0x80u) == 0x80u) { enum_length &= 0x7fu; if ((enum_length > 2u) || (enum_length == 0u)) { decoder_abort(decoder_p, EBADLENGTH); return; } dst_p->elements[i].g.h = (enum oer_c_source_d_g_h_e)decoder_read_int(decoder_p, enum_length); } else { dst_p->elements[i].g.h = (enum oer_c_source_d_g_h_e)enum_length; } } else { dst_p->elements[i].g.h = oer_c_source_d_g_h_j_e; } dst_p->elements[i].g.l.length = decoder_read_uint8(decoder_p); if (dst_p->elements[i].g.l.length > 2u) { decoder_abort(decoder_p, EBADLENGTH); return; } decoder_read_bytes(decoder_p, &dst_p->elements[i].g.l.buf[0], dst_p->elements[i].g.l.length); decoder_read_bytes(decoder_p, &present_mask_2[0], sizeof(present_mask_2)); dst_p->elements[i].m.is_n_present = ((present_mask_2[0] & 0x80u) == 0x80u); dst_p->elements[i].m.is_p_present = ((present_mask_2[0] & 0x20u) == 0x20u); if (dst_p->elements[i].m.is_n_present) { dst_p->elements[i].m.n = decoder_read_bool(decoder_p); } if ((present_mask_2[0] & 0x40u) == 0x40u) { dst_p->elements[i].m.o = decoder_read_int8(decoder_p); } else { dst_p->elements[i].m.o = 3; } if (dst_p->elements[i].m.is_p_present) { decoder_read_bytes(decoder_p, &present_mask_3[0], sizeof(present_mask_3)); dst_p->elements[i].m.p.is_r_present = ((present_mask_3[0] & 0x80u) == 0x80u); decoder_read_bytes(decoder_p, &dst_p->elements[i].m.p.q.buf[0], 5); if (dst_p->elements[i].m.p.is_r_present) { dst_p->elements[i].m.p.r = decoder_read_bool(decoder_p); } } if ((present_mask_2[0] & 0x10u) == 0x10u) { dst_p->elements[i].m.s = decoder_read_bool(decoder_p); } else { dst_p->elements[i].m.s = false; } } } static void oer_c_source_ac_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_ac_t *src_p) { oer_c_source_q_encode_inner(encoder_p, &src_p->a); oer_c_source_d_encode_inner(encoder_p, &src_p->b); } static void oer_c_source_ac_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_ac_t *dst_p) { oer_c_source_q_decode_inner(decoder_p, &dst_p->a); oer_c_source_d_decode_inner(decoder_p, &dst_p->b); } static void oer_c_source_ad_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_ad_t *src_p) { uint8_t enum_length; enum_length = enumerated_value_length(src_p->value); if (enum_length != 0u) { encoder_append_uint8(encoder_p, 0x80u | enum_length); encoder_append_int(encoder_p, (int32_t)src_p->value, enum_length); } else { encoder_append_uint8(encoder_p, (uint8_t)src_p->value); } } static void oer_c_source_ad_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_ad_t *dst_p) { uint8_t enum_length; enum_length = decoder_read_uint8(decoder_p); if ((enum_length & 0x80u) == 0x80u) { enum_length &= 0x7fu; if ((enum_length > 1u) || (enum_length == 0u)) { decoder_abort(decoder_p, EBADLENGTH); return; } dst_p->value = (enum oer_c_source_ad_e)decoder_read_int(decoder_p, enum_length); } else { dst_p->value = (enum oer_c_source_ad_e)enum_length; } } static void oer_c_source_ae_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_ae_t *src_p) { uint8_t present_mask[1]; present_mask[0] = 0; if (src_p->is_a_present) { present_mask[0] |= 0x40u; } if (src_p->b != true) { present_mask[0] |= 0x20u; } encoder_append_bytes(encoder_p, &present_mask[0], sizeof(present_mask)); if (src_p->is_a_present) { encoder_append_bool(encoder_p, src_p->a); } if (src_p->b != true) { encoder_append_bool(encoder_p, src_p->b); } encoder_append_bool(encoder_p, src_p->c); } static void oer_c_source_ae_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_ae_t *dst_p) { uint8_t present_mask[1]; decoder_read_bytes(decoder_p, &present_mask[0], sizeof(present_mask)); dst_p->is_a_present = ((present_mask[0] & 0x40u) == 0x40u); if (dst_p->is_a_present) { dst_p->a = decoder_read_bool(decoder_p); } if ((present_mask[0] & 0x20u) == 0x20u) { dst_p->b = decoder_read_bool(decoder_p); } else { dst_p->b = true; } dst_p->c = decoder_read_bool(decoder_p); } static void oer_c_source_ah_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_ah_t *src_p) { uint8_t present_mask[1]; uint8_t addition_mask[1]; uint8_t enum_length; if(src_p->is_d_addition_present || src_p->is_e_addition_present) { present_mask[0] = 0x80; } else { present_mask[0] = 0x0; } encoder_append_bytes(encoder_p, &present_mask[0], sizeof(present_mask)); encoder_append_bool(encoder_p, src_p->c); if((present_mask[0] & 0x80u) == 0x80u) { encoder_append_length_determinant(encoder_p, 2); encoder_append_uint8(encoder_p, 6); addition_mask[0] = 0; if (src_p->is_d_addition_present) { addition_mask[0] |= 0x80u; } if (src_p->is_e_addition_present) { addition_mask[0] |= 0x40u; } encoder_append_bytes(encoder_p, &addition_mask[0], sizeof(addition_mask)); if (src_p->is_d_addition_present) { encoder_append_length_determinant(encoder_p, 1u); encoder_append_uint8(encoder_p, src_p->d); } if (src_p->is_e_addition_present) { encoder_append_length_determinant(encoder_p, (uint32_t)enumerated_value_length((int32_t)src_p->e) + 1u); enum_length = enumerated_value_length(src_p->e); if (enum_length != 0u) { encoder_append_uint8(encoder_p, 0x80u | enum_length); encoder_append_int(encoder_p, (int32_t)src_p->e, enum_length); } else { encoder_append_uint8(encoder_p, (uint8_t)src_p->e); } } } } static void oer_c_source_ah_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_ah_t *dst_p) { uint8_t present_mask[1]; uint32_t addition_length; uint8_t addition_unused_bits; uint32_t addition_bits; uint8_t addition_mask[1]; uint32_t i; uint8_t tmp_addition_mask; uint32_t unknown_addition_bits; uint8_t mask; uint8_t enum_length; uint32_t tmp_length; decoder_read_bytes(decoder_p, &present_mask[0], sizeof(present_mask)); dst_p->c = decoder_read_bool(decoder_p); if((present_mask[0] & 0x80u) == 0x80u) { addition_length = decoder_read_length_determinant(decoder_p); if(addition_length <= 1u) { decoder_abort(decoder_p, EBADLENGTH); return; } addition_length -= 1u; addition_unused_bits = decoder_read_uint8(decoder_p); if (addition_unused_bits > 7u) { decoder_abort(decoder_p, EBADLENGTH); return; } addition_bits = ((addition_length * 8u) - addition_unused_bits); decoder_read_bytes(decoder_p, addition_mask, (addition_length < 1u) ? addition_length : 1u); tmp_addition_mask = addition_mask[0]; mask = 0x20; unknown_addition_bits = 0; for (i = 2; i < addition_bits; i++) { if (mask == 0u) { decoder_read_bytes(decoder_p, &tmp_addition_mask, 1); if (decoder_get_result(decoder_p) < 0) { return; } mask = 0x80; } if( (tmp_addition_mask & mask) == mask) { unknown_addition_bits += 1u; }; mask >>= 1; } dst_p->is_d_addition_present = ((addition_bits > 0u) && ((addition_mask[0] & 0x80u) == 0x80u)); if (dst_p->is_d_addition_present) { (void)decoder_read_length_determinant(decoder_p); dst_p->d = decoder_read_uint8(decoder_p); } dst_p->is_e_addition_present = ((addition_bits > 1u) && ((addition_mask[0] & 0x40u) == 0x40u)); if (dst_p->is_e_addition_present) { (void)decoder_read_length_determinant(decoder_p); enum_length = decoder_read_uint8(decoder_p); if ((enum_length & 0x80u) == 0x80u) { enum_length &= 0x7fu; if ((enum_length > 1u) || (enum_length == 0u)) { decoder_abort(decoder_p, EBADLENGTH); return; } dst_p->e = (enum oer_c_source_ah_e_e)decoder_read_int(decoder_p, enum_length); } else { dst_p->e = (enum oer_c_source_ah_e_e)enum_length; } } for (i = 0; i < unknown_addition_bits; i++) { tmp_length = decoder_read_length_determinant(decoder_p); if (decoder_free(decoder_p, tmp_length) < 0) { return; } } } else { dst_p->is_d_addition_present = false; dst_p->is_e_addition_present = false; } } static void oer_c_source_af_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_af_t *src_p) { uint8_t present_mask[1]; uint8_t addition_mask[2]; if(src_p->is_b_addition_present || src_p->is_e_addition_present || src_p->is_f_addition_present || src_p->is_g_addition_present || src_p->is_h_addition_present || src_p->is_i_addition_present || src_p->is_j_addition_present || src_p->is_k_addition_present || src_p->is_l_addition_present) { present_mask[0] = 0x80; } else { present_mask[0] = 0x0; } encoder_append_bytes(encoder_p, &present_mask[0], sizeof(present_mask)); encoder_append_bool(encoder_p, src_p->a); if((present_mask[0] & 0x80u) == 0x80u) { encoder_append_length_determinant(encoder_p, 3); encoder_append_uint8(encoder_p, 7); addition_mask[0] = 0; addition_mask[1] = 0; if (src_p->is_b_addition_present) { addition_mask[0] |= 0x80u; } if (src_p->is_e_addition_present) { addition_mask[0] |= 0x40u; } if (src_p->is_f_addition_present) { addition_mask[0] |= 0x20u; } if (src_p->is_g_addition_present) { addition_mask[0] |= 0x10u; } if (src_p->is_h_addition_present) { addition_mask[0] |= 0x08u; } if (src_p->is_i_addition_present) { addition_mask[0] |= 0x04u; } if (src_p->is_j_addition_present) { addition_mask[0] |= 0x02u; } if (src_p->is_k_addition_present) { addition_mask[0] |= 0x01u; } if (src_p->is_l_addition_present) { addition_mask[1] |= 0x80u; } encoder_append_bytes(encoder_p, &addition_mask[0], sizeof(addition_mask)); if (src_p->is_b_addition_present) { encoder_append_length_determinant(encoder_p, length_determinant_length(7u) + (uint32_t)enumerated_value_length((int32_t)src_p->e) + 8u); oer_c_source_ah_encode_inner(encoder_p, &src_p->b); } if (src_p->is_e_addition_present) { encoder_append_length_determinant(encoder_p, 1u); encoder_append_uint8(encoder_p, src_p->e); } if (src_p->is_f_addition_present) { encoder_append_length_determinant(encoder_p, 1u); encoder_append_uint8(encoder_p, src_p->f); } if (src_p->is_g_addition_present) { encoder_append_length_determinant(encoder_p, 1u); encoder_append_uint8(encoder_p, src_p->g); } if (src_p->is_h_addition_present) { encoder_append_length_determinant(encoder_p, 1u); encoder_append_uint8(encoder_p, src_p->h); } if (src_p->is_i_addition_present) { encoder_append_length_determinant(encoder_p, 1u); encoder_append_uint8(encoder_p, src_p->i); } if (src_p->is_j_addition_present) { encoder_append_length_determinant(encoder_p, 1u); encoder_append_uint8(encoder_p, src_p->j); } if (src_p->is_k_addition_present) { encoder_append_length_determinant(encoder_p, 1u); encoder_append_uint8(encoder_p, src_p->k); } if (src_p->is_l_addition_present) { encoder_append_length_determinant(encoder_p, 1u); encoder_append_uint8(encoder_p, src_p->l); } } } static void oer_c_source_af_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_af_t *dst_p) { uint8_t present_mask[1]; uint32_t addition_length; uint8_t addition_unused_bits; uint32_t addition_bits; uint8_t addition_mask[2]; uint32_t i; uint8_t tmp_addition_mask; uint32_t unknown_addition_bits; uint8_t mask; uint32_t tmp_length; decoder_read_bytes(decoder_p, &present_mask[0], sizeof(present_mask)); dst_p->a = decoder_read_bool(decoder_p); if((present_mask[0] & 0x80u) == 0x80u) { addition_length = decoder_read_length_determinant(decoder_p); if(addition_length <= 1u) { decoder_abort(decoder_p, EBADLENGTH); return; } addition_length -= 1u; addition_unused_bits = decoder_read_uint8(decoder_p); if (addition_unused_bits > 7u) { decoder_abort(decoder_p, EBADLENGTH); return; } addition_bits = ((addition_length * 8u) - addition_unused_bits); decoder_read_bytes(decoder_p, addition_mask, (addition_length < 2u) ? addition_length : 2u); tmp_addition_mask = addition_mask[1]; mask = 0x40; unknown_addition_bits = 0; for (i = 9; i < addition_bits; i++) { if (mask == 0u) { decoder_read_bytes(decoder_p, &tmp_addition_mask, 1); if (decoder_get_result(decoder_p) < 0) { return; } mask = 0x80; } if( (tmp_addition_mask & mask) == mask) { unknown_addition_bits += 1u; }; mask >>= 1; } dst_p->is_b_addition_present = ((addition_bits > 0u) && ((addition_mask[0] & 0x80u) == 0x80u)); if (dst_p->is_b_addition_present) { (void)decoder_read_length_determinant(decoder_p); oer_c_source_ah_decode_inner(decoder_p, &dst_p->b); } dst_p->is_e_addition_present = ((addition_bits > 1u) && ((addition_mask[0] & 0x40u) == 0x40u)); if (dst_p->is_e_addition_present) { (void)decoder_read_length_determinant(decoder_p); dst_p->e = decoder_read_uint8(decoder_p); } dst_p->is_f_addition_present = ((addition_bits > 2u) && ((addition_mask[0] & 0x20u) == 0x20u)); if (dst_p->is_f_addition_present) { (void)decoder_read_length_determinant(decoder_p); dst_p->f = decoder_read_uint8(decoder_p); } dst_p->is_g_addition_present = ((addition_bits > 3u) && ((addition_mask[0] & 0x10u) == 0x10u)); if (dst_p->is_g_addition_present) { (void)decoder_read_length_determinant(decoder_p); dst_p->g = decoder_read_uint8(decoder_p); } dst_p->is_h_addition_present = ((addition_bits > 4u) && ((addition_mask[0] & 0x08u) == 0x08u)); if (dst_p->is_h_addition_present) { (void)decoder_read_length_determinant(decoder_p); dst_p->h = decoder_read_uint8(decoder_p); } dst_p->is_i_addition_present = ((addition_bits > 5u) && ((addition_mask[0] & 0x04u) == 0x04u)); if (dst_p->is_i_addition_present) { (void)decoder_read_length_determinant(decoder_p); dst_p->i = decoder_read_uint8(decoder_p); } dst_p->is_j_addition_present = ((addition_bits > 6u) && ((addition_mask[0] & 0x02u) == 0x02u)); if (dst_p->is_j_addition_present) { (void)decoder_read_length_determinant(decoder_p); dst_p->j = decoder_read_uint8(decoder_p); } dst_p->is_k_addition_present = ((addition_bits > 7u) && ((addition_mask[0] & 0x01u) == 0x01u)); if (dst_p->is_k_addition_present) { (void)decoder_read_length_determinant(decoder_p); dst_p->k = decoder_read_uint8(decoder_p); } dst_p->is_l_addition_present = ((addition_bits > 8u) && ((addition_mask[1] & 0x80u) == 0x80u)); if (dst_p->is_l_addition_present) { (void)decoder_read_length_determinant(decoder_p); dst_p->l = decoder_read_uint8(decoder_p); } for (i = 0; i < unknown_addition_bits; i++) { tmp_length = decoder_read_length_determinant(decoder_p); if (decoder_free(decoder_p, tmp_length) < 0) { return; } } } else { dst_p->is_b_addition_present = false; dst_p->is_e_addition_present = false; dst_p->is_f_addition_present = false; dst_p->is_g_addition_present = false; dst_p->is_h_addition_present = false; dst_p->is_i_addition_present = false; dst_p->is_j_addition_present = false; dst_p->is_k_addition_present = false; dst_p->is_l_addition_present = false; } } static void oer_c_source_ag_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_ag_t *src_p) { uint8_t present_mask[1]; uint8_t addition_mask[1]; uint8_t number_of_length_bytes; uint8_t i_2; uint8_t enum_length; if(src_p->is_b_addition_present || src_p->is_c_addition_present || src_p->is_d_addition_present || src_p->is_h_addition_present || src_p->is_i_addition_present || src_p->is_j_addition_present || src_p->is_m_addition_present) { present_mask[0] = 0x80; } else { present_mask[0] = 0x0; } encoder_append_bytes(encoder_p, &present_mask[0], sizeof(present_mask)); encoder_append_bool(encoder_p, src_p->a); if((present_mask[0] & 0x80u) == 0x80u) { encoder_append_length_determinant(encoder_p, 2); encoder_append_uint8(encoder_p, 1); addition_mask[0] = 0; if (src_p->is_b_addition_present) { addition_mask[0] |= 0x80u; } if (src_p->is_c_addition_present) { addition_mask[0] |= 0x40u; } if (src_p->is_d_addition_present) { addition_mask[0] |= 0x20u; } if (src_p->is_h_addition_present) { addition_mask[0] |= 0x10u; } if (src_p->is_i_addition_present) { addition_mask[0] |= 0x08u; } if (src_p->is_j_addition_present) { addition_mask[0] |= 0x04u; } if (src_p->is_m_addition_present) { addition_mask[0] |= 0x02u; } encoder_append_bytes(encoder_p, &addition_mask[0], sizeof(addition_mask)); if (src_p->is_b_addition_present) { encoder_append_length_determinant(encoder_p, length_determinant_length(src_p->b.length) + src_p->b.length); encoder_append_uint8(encoder_p, src_p->b.length); encoder_append_bytes(encoder_p, &src_p->b.buf[0], src_p->b.length); } if (src_p->is_c_addition_present) { encoder_append_length_determinant(encoder_p, (uint32_t)minimum_uint_length(src_p->c.length) + (uint32_t)(src_p->c.length * (1u)) + 1u); number_of_length_bytes = minimum_uint_length(src_p->c.length); encoder_append_uint8(encoder_p, number_of_length_bytes); encoder_append_uint(encoder_p, src_p->c.length, number_of_length_bytes); for (i_2 = 0; i_2 < src_p->c.length; i_2++) { encoder_append_bool(encoder_p, src_p->c.elements[i_2]); } } if (src_p->is_d_addition_present) { encoder_append_length_determinant(encoder_p, (uint32_t)enumerated_value_length((int32_t)src_p->d) + 1u); enum_length = enumerated_value_length(src_p->d); if (enum_length != 0u) { encoder_append_uint8(encoder_p, 0x80u | enum_length); encoder_append_int(encoder_p, (int32_t)src_p->d, enum_length); } else { encoder_append_uint8(encoder_p, (uint8_t)src_p->d); } } if (src_p->is_h_addition_present) { encoder_append_length_determinant(encoder_p, 0u); } if (src_p->is_i_addition_present) { encoder_append_length_determinant(encoder_p, 4u); encoder_append_float(encoder_p, src_p->i); } if (src_p->is_j_addition_present) { encoder_append_length_determinant(encoder_p, get_choice_j_length(src_p)); switch (src_p->j.choice) { case oer_c_source_ag_j_choice_k_e: encoder_append_uint(encoder_p, 0x80, 1); encoder_append_uint16(encoder_p, src_p->j.value.k); break; case oer_c_source_ag_j_choice_l_e: encoder_append_uint(encoder_p, 0x81, 1); encoder_append_bool(encoder_p, src_p->j.value.l); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } if (src_p->is_m_addition_present) { encoder_append_length_determinant(encoder_p, 5u); encoder_append_bytes(encoder_p, &src_p->m.buf[0], 5); } } } static void oer_c_source_ag_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_ag_t *dst_p) { uint8_t present_mask[1]; uint32_t addition_length; uint8_t addition_unused_bits; uint32_t addition_bits; uint8_t addition_mask[1]; uint32_t i; uint8_t tmp_addition_mask; uint32_t unknown_addition_bits; uint8_t mask; uint8_t number_of_length_bytes; uint8_t i_2; uint8_t enum_length; uint32_t tag; uint32_t tmp_length; decoder_read_bytes(decoder_p, &present_mask[0], sizeof(present_mask)); dst_p->a = decoder_read_bool(decoder_p); if((present_mask[0] & 0x80u) == 0x80u) { addition_length = decoder_read_length_determinant(decoder_p); if(addition_length <= 1u) { decoder_abort(decoder_p, EBADLENGTH); return; } addition_length -= 1u; addition_unused_bits = decoder_read_uint8(decoder_p); if (addition_unused_bits > 7u) { decoder_abort(decoder_p, EBADLENGTH); return; } addition_bits = ((addition_length * 8u) - addition_unused_bits); decoder_read_bytes(decoder_p, addition_mask, (addition_length < 1u) ? addition_length : 1u); tmp_addition_mask = addition_mask[0]; mask = 0x01; unknown_addition_bits = 0; for (i = 7; i < addition_bits; i++) { if (mask == 0u) { decoder_read_bytes(decoder_p, &tmp_addition_mask, 1); if (decoder_get_result(decoder_p) < 0) { return; } mask = 0x80; } if( (tmp_addition_mask & mask) == mask) { unknown_addition_bits += 1u; }; mask >>= 1; } dst_p->is_b_addition_present = ((addition_bits > 0u) && ((addition_mask[0] & 0x80u) == 0x80u)); if (dst_p->is_b_addition_present) { (void)decoder_read_length_determinant(decoder_p); dst_p->b.length = decoder_read_uint8(decoder_p); if (dst_p->b.length > 10u) { decoder_abort(decoder_p, EBADLENGTH); return; } decoder_read_bytes(decoder_p, &dst_p->b.buf[0], dst_p->b.length); } dst_p->is_c_addition_present = ((addition_bits > 1u) && ((addition_mask[0] & 0x40u) == 0x40u)); if (dst_p->is_c_addition_present) { (void)decoder_read_length_determinant(decoder_p); number_of_length_bytes = decoder_read_uint8(decoder_p); dst_p->c.length = (uint8_t)decoder_read_uint( decoder_p, number_of_length_bytes); if (dst_p->c.length > 10u) { decoder_abort(decoder_p, EBADLENGTH); return; } for (i_2 = 0; i_2 < dst_p->c.length; i_2++) { dst_p->c.elements[i_2] = decoder_read_bool(decoder_p); } } dst_p->is_d_addition_present = ((addition_bits > 2u) && ((addition_mask[0] & 0x20u) == 0x20u)); if (dst_p->is_d_addition_present) { (void)decoder_read_length_determinant(decoder_p); enum_length = decoder_read_uint8(decoder_p); if ((enum_length & 0x80u) == 0x80u) { enum_length &= 0x7fu; if ((enum_length > 3u) || (enum_length == 0u)) { decoder_abort(decoder_p, EBADLENGTH); return; } dst_p->d = (enum oer_c_source_ag_d_e)decoder_read_int(decoder_p, enum_length); } else { dst_p->d = (enum oer_c_source_ag_d_e)enum_length; } } dst_p->is_h_addition_present = ((addition_bits > 3u) && ((addition_mask[0] & 0x10u) == 0x10u)); if (dst_p->is_h_addition_present) { (void)decoder_read_length_determinant(decoder_p); } dst_p->is_i_addition_present = ((addition_bits > 4u) && ((addition_mask[0] & 0x08u) == 0x08u)); if (dst_p->is_i_addition_present) { (void)decoder_read_length_determinant(decoder_p); dst_p->i = decoder_read_float(decoder_p); } dst_p->is_j_addition_present = ((addition_bits > 5u) && ((addition_mask[0] & 0x04u) == 0x04u)); if (dst_p->is_j_addition_present) { (void)decoder_read_length_determinant(decoder_p); tag = decoder_read_tag(decoder_p); switch (tag) { case 0x80: dst_p->j.choice = oer_c_source_ag_j_choice_k_e; dst_p->j.value.k = decoder_read_uint16(decoder_p); break; case 0x81: dst_p->j.choice = oer_c_source_ag_j_choice_l_e; dst_p->j.value.l = decoder_read_bool(decoder_p); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } dst_p->is_m_addition_present = ((addition_bits > 6u) && ((addition_mask[0] & 0x02u) == 0x02u)); if (dst_p->is_m_addition_present) { (void)decoder_read_length_determinant(decoder_p); decoder_read_bytes(decoder_p, &dst_p->m.buf[0], 5); } for (i = 0; i < unknown_addition_bits; i++) { tmp_length = decoder_read_length_determinant(decoder_p); if (decoder_free(decoder_p, tmp_length) < 0) { return; } } } else { dst_p->is_b_addition_present = false; dst_p->is_c_addition_present = false; dst_p->is_d_addition_present = false; dst_p->is_h_addition_present = false; dst_p->is_i_addition_present = false; dst_p->is_j_addition_present = false; dst_p->is_m_addition_present = false; } } static void oer_c_source_aj_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_aj_t *src_p) { uint8_t enum_length; enum_length = enumerated_value_length(src_p->a); if (enum_length != 0u) { encoder_append_uint8(encoder_p, 0x80u | enum_length); encoder_append_int(encoder_p, (int32_t)src_p->a, enum_length); } else { encoder_append_uint8(encoder_p, (uint8_t)src_p->a); } } static void oer_c_source_aj_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_aj_t *dst_p) { uint8_t enum_length; enum_length = decoder_read_uint8(decoder_p); if ((enum_length & 0x80u) == 0x80u) { enum_length &= 0x7fu; if ((enum_length > 1u) || (enum_length == 0u)) { decoder_abort(decoder_p, EBADLENGTH); return; } dst_p->a = (enum oer_c_source_aj_a_e)decoder_read_int(decoder_p, enum_length); } else { dst_p->a = (enum oer_c_source_aj_a_e)enum_length; } } static void oer_c_source_ak_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_ak_t *src_p) { switch (src_p->choice) { case oer_c_source_ak_choice_a_e: encoder_append_uint(encoder_p, 0x80, 1); oer_c_source_aj_encode_inner(encoder_p, &src_p->value.a); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } static void oer_c_source_ak_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_ak_t *dst_p) { uint32_t tag; tag = decoder_read_tag(decoder_p); switch (tag) { case 0x80: dst_p->choice = oer_c_source_ak_choice_a_e; oer_c_source_aj_decode_inner(decoder_p, &dst_p->value.a); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } static void oer_c_source_ai_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_ai_t *src_p) { oer_c_source_ak_encode_inner(encoder_p, &src_p->a); } static void oer_c_source_ai_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_ai_t *dst_p) { oer_c_source_ak_decode_inner(decoder_p, &dst_p->a); } static void oer_c_source_al_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_al_t *src_p) { encoder_append_int16(encoder_p, src_p->value); } static void oer_c_source_al_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_al_t *dst_p) { dst_p->value = decoder_read_int16(decoder_p); } static void oer_c_source_am_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_am_t *src_p) { encoder_append_int8(encoder_p, src_p->value); } static void oer_c_source_am_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_am_t *dst_p) { dst_p->value = decoder_read_int8(decoder_p); } static void oer_c_source_an_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_an_t *src_p) { uint8_t enum_length; enum_length = enumerated_value_length(src_p->value); if (enum_length != 0u) { encoder_append_uint8(encoder_p, 0x80u | enum_length); encoder_append_int(encoder_p, (int32_t)src_p->value, enum_length); } else { encoder_append_uint8(encoder_p, (uint8_t)src_p->value); } } static void oer_c_source_an_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_an_t *dst_p) { uint8_t enum_length; enum_length = decoder_read_uint8(decoder_p); if ((enum_length & 0x80u) == 0x80u) { enum_length &= 0x7fu; if ((enum_length > 4u) || (enum_length == 0u)) { decoder_abort(decoder_p, EBADLENGTH); return; } dst_p->value = (enum oer_c_source_an_e)decoder_read_int(decoder_p, enum_length); } else { dst_p->value = (enum oer_c_source_an_e)enum_length; } } static void oer_c_source_ao_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_ao_t *src_p) { encoder_append_uint(encoder_p, (uint32_t)src_p->a, 1); encoder_append_uint(encoder_p, (uint32_t)src_p->b, 3); encoder_append_uint(encoder_p, (uint32_t)src_p->c, 1); encoder_append_uint(encoder_p, (uint32_t)src_p->d, 4); encoder_append_long_uint(encoder_p, (uint64_t)src_p->e, 8); } static void oer_c_source_ao_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_ao_t *dst_p) { dst_p->a = (uint8_t)decoder_read_uint(decoder_p, 1); dst_p->b = (uint32_t)decoder_read_uint(decoder_p, 3); dst_p->b &= 0x00ffffffu; dst_p->c = (uint8_t)decoder_read_uint(decoder_p, 1); dst_p->d = (uint32_t)decoder_read_uint(decoder_p, 4); dst_p->e = (uint64_t)decoder_read_long_uint(decoder_p, 8); } static void oer_c_ref_referenced_sequence_encode_inner( struct encoder_t *encoder_p, const struct oer_c_ref_referenced_sequence_t *src_p) { encoder_append_uint8(encoder_p, src_p->a); } static void oer_c_ref_referenced_sequence_decode_inner( struct decoder_t *decoder_p, struct oer_c_ref_referenced_sequence_t *dst_p) { dst_p->a = decoder_read_uint8(decoder_p); } static void oer_c_ref_referenced_enum_encode_inner( struct encoder_t *encoder_p, const struct oer_c_ref_referenced_enum_t *src_p) { uint8_t enum_length; enum_length = enumerated_value_length(src_p->value); if (enum_length != 0u) { encoder_append_uint8(encoder_p, 0x80u | enum_length); encoder_append_int(encoder_p, (int32_t)src_p->value, enum_length); } else { encoder_append_uint8(encoder_p, (uint8_t)src_p->value); } } static void oer_c_ref_referenced_enum_decode_inner( struct decoder_t *decoder_p, struct oer_c_ref_referenced_enum_t *dst_p) { uint8_t enum_length; enum_length = decoder_read_uint8(decoder_p); if ((enum_length & 0x80u) == 0x80u) { enum_length &= 0x7fu; if ((enum_length > 1u) || (enum_length == 0u)) { decoder_abort(decoder_p, EBADLENGTH); return; } dst_p->value = (enum oer_c_ref_referenced_enum_e)decoder_read_int(decoder_p, enum_length); } else { dst_p->value = (enum oer_c_ref_referenced_enum_e)enum_length; } } static void oer_c_source_ap_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_ap_t *src_p) { uint8_t present_mask[1]; present_mask[0] = 0; if (src_p->c.value != oer_c_ref_referenced_enum_a_e) { present_mask[0] |= 0x80u; } if (src_p->d != 1) { present_mask[0] |= 0x40u; } encoder_append_bytes(encoder_p, &present_mask[0], sizeof(present_mask)); oer_c_ref_referenced_sequence_encode_inner(encoder_p, &src_p->b); if (src_p->c.value != oer_c_ref_referenced_enum_a_e) { oer_c_ref_referenced_enum_encode_inner(encoder_p, &src_p->c); } if (src_p->d != 1) { encoder_append_uint8(encoder_p, src_p->d); } } static void oer_c_source_ap_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_ap_t *dst_p) { uint8_t present_mask[1]; decoder_read_bytes(decoder_p, &present_mask[0], sizeof(present_mask)); oer_c_ref_referenced_sequence_decode_inner(decoder_p, &dst_p->b); if ((present_mask[0] & 0x80u) == 0x80u) { oer_c_ref_referenced_enum_decode_inner(decoder_p, &dst_p->c); } else { dst_p->c.value = oer_c_ref_referenced_enum_a_e; } if ((present_mask[0] & 0x40u) == 0x40u) { dst_p->d = decoder_read_uint8(decoder_p); } else { dst_p->d = 1; } } static void oer_c_source_aq_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_aq_t *src_p) { encoder_append_uint32(encoder_p, src_p->value); } static void oer_c_source_aq_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_aq_t *dst_p) { dst_p->value = decoder_read_uint32(decoder_p); } static void oer_c_source_ar_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_ar_t *src_p) { uint8_t present_mask[1]; static const uint8_t a_default[] = {0xAB, 0xCD}; present_mask[0] = 0; if ((memcmp(src_p->a.buf, a_default, sizeof(a_default)) != 0) || (src_p->a.length != sizeof(a_default))) { present_mask[0] |= 0x80u; } encoder_append_bytes(encoder_p, &present_mask[0], sizeof(present_mask)); if ((memcmp(src_p->a.buf, a_default, sizeof(a_default)) != 0) || (src_p->a.length != sizeof(a_default))) { encoder_append_uint8(encoder_p, src_p->a.length); encoder_append_bytes(encoder_p, &src_p->a.buf[0], src_p->a.length); } } static void oer_c_source_ar_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_ar_t *dst_p) { uint8_t present_mask[1]; static const uint8_t a_default[] = {0xAB, 0xCD}; decoder_read_bytes(decoder_p, &present_mask[0], sizeof(present_mask)); if ((present_mask[0] & 0x80u) == 0x80u) { dst_p->a.length = decoder_read_uint8(decoder_p); if (dst_p->a.length > 10u) { decoder_abort(decoder_p, EBADLENGTH); return; } decoder_read_bytes(decoder_p, &dst_p->a.buf[0], dst_p->a.length); } else { memcpy(dst_p->a.buf, a_default, sizeof(a_default)); dst_p->a.length = sizeof(a_default); } } static void oer_c_source_as_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_as_t *src_p) { uint8_t present_mask[1]; present_mask[0] = 0; if (src_p->is_a_a_present) { present_mask[0] |= 0x80u; } if (src_p->a_c != true) { present_mask[0] |= 0x40u; } encoder_append_bytes(encoder_p, &present_mask[0], sizeof(present_mask)); if (src_p->is_a_a_present) { encoder_append_bool(encoder_p, src_p->a_a); } switch (src_p->a_b.choice) { case oer_c_source_as_a_b_choice_b_a_e: encoder_append_uint(encoder_p, 0x80, 1); encoder_append_bool(encoder_p, src_p->a_b.value.b_a); break; case oer_c_source_as_a_b_choice_b_b_e: encoder_append_uint(encoder_p, 0x81, 1); encoder_append_bool(encoder_p, src_p->a_b.value.b_b); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } if (src_p->a_c != true) { encoder_append_bool(encoder_p, src_p->a_c); } } static void oer_c_source_as_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_as_t *dst_p) { uint8_t present_mask[1]; uint32_t tag; decoder_read_bytes(decoder_p, &present_mask[0], sizeof(present_mask)); dst_p->is_a_a_present = ((present_mask[0] & 0x80u) == 0x80u); if (dst_p->is_a_a_present) { dst_p->a_a = decoder_read_bool(decoder_p); } tag = decoder_read_tag(decoder_p); switch (tag) { case 0x80: dst_p->a_b.choice = oer_c_source_as_a_b_choice_b_a_e; dst_p->a_b.value.b_a = decoder_read_bool(decoder_p); break; case 0x81: dst_p->a_b.choice = oer_c_source_as_a_b_choice_b_b_e; dst_p->a_b.value.b_b = decoder_read_bool(decoder_p); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } if ((present_mask[0] & 0x40u) == 0x40u) { dst_p->a_c = decoder_read_bool(decoder_p); } else { dst_p->a_c = true; } } static void oer_c_ref_at_encode_inner( struct encoder_t *encoder_p, const struct oer_c_ref_at_t *src_p) { encoder_append_uint(encoder_p, (uint32_t)src_p->value, 1); } static void oer_c_ref_at_decode_inner( struct decoder_t *decoder_p, struct oer_c_ref_at_t *dst_p) { dst_p->value = (uint8_t)decoder_read_uint(decoder_p, 1); } static void oer_c_source_at_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_at_t *src_p) { uint8_t present_mask[1]; uint8_t addition_mask[1]; uint8_t number_of_length_bytes; uint8_t i_2; if(src_p->is_b_addition_present) { present_mask[0] = 0x80; } else { present_mask[0] = 0x0; } encoder_append_bytes(encoder_p, &present_mask[0], sizeof(present_mask)); encoder_append_uint8(encoder_p, src_p->a); if((present_mask[0] & 0x80u) == 0x80u) { encoder_append_length_determinant(encoder_p, 2); encoder_append_uint8(encoder_p, 7); addition_mask[0] = 0; if (src_p->is_b_addition_present) { addition_mask[0] |= 0x80u; } encoder_append_bytes(encoder_p, &addition_mask[0], sizeof(addition_mask)); if (src_p->is_b_addition_present) { encoder_append_length_determinant(encoder_p, (uint32_t)minimum_uint_length(src_p->b.length) + (uint32_t)(src_p->b.length * (42u)) + 1u); number_of_length_bytes = minimum_uint_length(src_p->b.length); encoder_append_uint8(encoder_p, number_of_length_bytes); encoder_append_uint(encoder_p, src_p->b.length, number_of_length_bytes); for (i_2 = 0; i_2 < src_p->b.length; i_2++) { oer_c_source_a_encode_inner(encoder_p, &src_p->b.elements[i_2]); } } } } static void oer_c_source_at_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_at_t *dst_p) { uint8_t present_mask[1]; uint32_t addition_length; uint8_t addition_unused_bits; uint32_t addition_bits; uint8_t addition_mask[1]; uint32_t i; uint8_t tmp_addition_mask; uint32_t unknown_addition_bits; uint8_t mask; uint8_t number_of_length_bytes; uint8_t i_2; uint32_t tmp_length; decoder_read_bytes(decoder_p, &present_mask[0], sizeof(present_mask)); dst_p->a = decoder_read_uint8(decoder_p); if((present_mask[0] & 0x80u) == 0x80u) { addition_length = decoder_read_length_determinant(decoder_p); if(addition_length <= 1u) { decoder_abort(decoder_p, EBADLENGTH); return; } addition_length -= 1u; addition_unused_bits = decoder_read_uint8(decoder_p); if (addition_unused_bits > 7u) { decoder_abort(decoder_p, EBADLENGTH); return; } addition_bits = ((addition_length * 8u) - addition_unused_bits); decoder_read_bytes(decoder_p, addition_mask, (addition_length < 1u) ? addition_length : 1u); tmp_addition_mask = addition_mask[0]; mask = 0x40; unknown_addition_bits = 0; for (i = 1; i < addition_bits; i++) { if (mask == 0u) { decoder_read_bytes(decoder_p, &tmp_addition_mask, 1); if (decoder_get_result(decoder_p) < 0) { return; } mask = 0x80; } if( (tmp_addition_mask & mask) == mask) { unknown_addition_bits += 1u; }; mask >>= 1; } dst_p->is_b_addition_present = ((addition_bits > 0u) && ((addition_mask[0] & 0x80u) == 0x80u)); if (dst_p->is_b_addition_present) { (void)decoder_read_length_determinant(decoder_p); number_of_length_bytes = decoder_read_uint8(decoder_p); dst_p->b.length = (uint8_t)decoder_read_uint( decoder_p, number_of_length_bytes); if (dst_p->b.length > 32u) { decoder_abort(decoder_p, EBADLENGTH); return; } for (i_2 = 0; i_2 < dst_p->b.length; i_2++) { oer_c_source_a_decode_inner(decoder_p, &dst_p->b.elements[i_2]); } } for (i = 0; i < unknown_addition_bits; i++) { tmp_length = decoder_read_length_determinant(decoder_p); if (decoder_free(decoder_p, tmp_length) < 0) { return; } } } else { dst_p->is_b_addition_present = false; } } static void oer_c_ref_au_encode_inner( struct encoder_t *encoder_p, const struct oer_c_ref_au_t *src_p) { uint8_t enum_length; uint8_t enum_length_2; switch (src_p->a_a.choice) { case oer_c_ref_au_a_a_choice_b_a_e: encoder_append_uint(encoder_p, 0x80, 1); enum_length = enumerated_value_length(src_p->a_a.value.b_a); if (enum_length != 0u) { encoder_append_uint8(encoder_p, 0x80u | enum_length); encoder_append_int(encoder_p, (int32_t)src_p->a_a.value.b_a, enum_length); } else { encoder_append_uint8(encoder_p, (uint8_t)src_p->a_a.value.b_a); } break; case oer_c_ref_au_a_a_choice_b_b_e: encoder_append_uint(encoder_p, 0x81, 1); enum_length_2 = enumerated_value_length(src_p->a_a.value.b_b); if (enum_length_2 != 0u) { encoder_append_uint8(encoder_p, 0x80u | enum_length_2); encoder_append_int(encoder_p, (int32_t)src_p->a_a.value.b_b, enum_length_2); } else { encoder_append_uint8(encoder_p, (uint8_t)src_p->a_a.value.b_b); } break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } static void oer_c_ref_au_decode_inner( struct decoder_t *decoder_p, struct oer_c_ref_au_t *dst_p) { uint32_t tag; uint8_t enum_length; uint8_t enum_length_2; tag = decoder_read_tag(decoder_p); switch (tag) { case 0x80: dst_p->a_a.choice = oer_c_ref_au_a_a_choice_b_a_e; enum_length = decoder_read_uint8(decoder_p); if ((enum_length & 0x80u) == 0x80u) { enum_length &= 0x7fu; if ((enum_length > 1u) || (enum_length == 0u)) { decoder_abort(decoder_p, EBADLENGTH); return; } dst_p->a_a.value.b_a = (enum oer_c_ref_au_a_a_b_a_e)decoder_read_int(decoder_p, enum_length); } else { dst_p->a_a.value.b_a = (enum oer_c_ref_au_a_a_b_a_e)enum_length; } break; case 0x81: dst_p->a_a.choice = oer_c_ref_au_a_a_choice_b_b_e; enum_length_2 = decoder_read_uint8(decoder_p); if ((enum_length_2 & 0x80u) == 0x80u) { enum_length_2 &= 0x7fu; if ((enum_length_2 > 1u) || (enum_length_2 == 0u)) { decoder_abort(decoder_p, EBADLENGTH); return; } dst_p->a_a.value.b_b = (enum oer_c_ref_au_a_a_b_b_e)decoder_read_int(decoder_p, enum_length_2); } else { dst_p->a_a.value.b_b = (enum oer_c_ref_au_a_a_b_b_e)enum_length_2; } break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } static void oer_c_source_b_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_b_t *src_p) { switch (src_p->choice) { case oer_c_source_b_choice_a_e: encoder_append_uint(encoder_p, 0x80, 1); encoder_append_int8(encoder_p, src_p->value.a); break; case oer_c_source_b_choice_b_e: encoder_append_uint(encoder_p, 0x81, 1); oer_c_source_a_encode_inner(encoder_p, &src_p->value.b); break; case oer_c_source_b_choice_c_e: encoder_append_uint(encoder_p, 0x82, 1); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } static void oer_c_source_b_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_b_t *dst_p) { uint32_t tag; tag = decoder_read_tag(decoder_p); switch (tag) { case 0x80: dst_p->choice = oer_c_source_b_choice_a_e; dst_p->value.a = decoder_read_int8(decoder_p); break; case 0x81: dst_p->choice = oer_c_source_b_choice_b_e; oer_c_source_a_decode_inner(decoder_p, &dst_p->value.b); break; case 0x82: dst_p->choice = oer_c_source_b_choice_c_e; break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } static void oer_programming_types_bool_encode_inner( struct encoder_t *encoder_p, const struct oer_programming_types_bool_t *src_p) { encoder_append_bool(encoder_p, src_p->value); } static void oer_programming_types_bool_decode_inner( struct decoder_t *decoder_p, struct oer_programming_types_bool_t *dst_p) { dst_p->value = decoder_read_bool(decoder_p); } static void oer_c_source_c_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_c_t *src_p) { uint8_t number_of_length_bytes; uint8_t i; number_of_length_bytes = minimum_uint_length(src_p->length); encoder_append_uint8(encoder_p, number_of_length_bytes); encoder_append_uint(encoder_p, src_p->length, number_of_length_bytes); for (i = 0; i < src_p->length; i++) { oer_c_source_b_encode_inner(encoder_p, &src_p->elements[i]); } } static void oer_c_source_c_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_c_t *dst_p) { uint8_t number_of_length_bytes; uint8_t i; number_of_length_bytes = decoder_read_uint8(decoder_p); dst_p->length = (uint8_t)decoder_read_uint( decoder_p, number_of_length_bytes); if (dst_p->length > 2u) { decoder_abort(decoder_p, EBADLENGTH); return; } for (i = 0; i < dst_p->length; i++) { oer_c_source_b_decode_inner(decoder_p, &dst_p->elements[i]); } } static void oer_programming_types_double_encode_inner( struct encoder_t *encoder_p, const struct oer_programming_types_double_t *src_p) { encoder_append_double(encoder_p, src_p->value); } static void oer_programming_types_double_decode_inner( struct decoder_t *decoder_p, struct oer_programming_types_double_t *dst_p) { dst_p->value = decoder_read_double(decoder_p); } static void oer_c_source_e_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_e_t *src_p) { switch (src_p->a.choice) { case oer_c_source_e_a_choice_b_e: encoder_append_uint(encoder_p, 0x80, 1); switch (src_p->a.value.b.choice) { case oer_c_source_e_a_b_choice_c_e: encoder_append_uint(encoder_p, 0x80, 1); encoder_append_bool(encoder_p, src_p->a.value.b.value.c); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } static void oer_c_source_e_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_e_t *dst_p) { uint32_t tag; uint32_t tag_2; tag = decoder_read_tag(decoder_p); switch (tag) { case 0x80: dst_p->a.choice = oer_c_source_e_a_choice_b_e; tag_2 = decoder_read_tag(decoder_p); switch (tag_2) { case 0x80: dst_p->a.value.b.choice = oer_c_source_e_a_b_choice_c_e; dst_p->a.value.b.value.c = decoder_read_bool(decoder_p); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } static void oer_c_source_f_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_f_t *src_p) { uint8_t number_of_length_bytes; uint8_t i; uint8_t number_of_length_bytes_2; uint8_t i_2; number_of_length_bytes = minimum_uint_length(src_p->length); encoder_append_uint8(encoder_p, number_of_length_bytes); encoder_append_uint(encoder_p, src_p->length, number_of_length_bytes); for (i = 0; i < src_p->length; i++) { number_of_length_bytes_2 = minimum_uint_length(1); encoder_append_uint8(encoder_p, number_of_length_bytes_2); encoder_append_uint(encoder_p, 1, number_of_length_bytes_2); for (i_2 = 0; i_2 < 1u; i_2++) { encoder_append_bool(encoder_p, src_p->elements[i].elements[i_2]); } } } static void oer_c_source_f_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_f_t *dst_p) { uint8_t number_of_length_bytes; uint8_t i; uint8_t number_of_length_bytes_2; uint8_t i_2; uint8_t length; number_of_length_bytes = decoder_read_uint8(decoder_p); dst_p->length = (uint8_t)decoder_read_uint( decoder_p, number_of_length_bytes); if (dst_p->length > 2u) { decoder_abort(decoder_p, EBADLENGTH); return; } for (i = 0; i < dst_p->length; i++) { number_of_length_bytes_2 = decoder_read_uint8(decoder_p); length = decoder_read_uint8(decoder_p); if ((number_of_length_bytes_2 != 1u) || (length > 1u)) { decoder_abort(decoder_p, EBADLENGTH); return; } for (i_2 = 0; i_2 < 1u; i_2++) { dst_p->elements[i].elements[i_2] = decoder_read_bool(decoder_p); } } } static void oer_programming_types_float_encode_inner( struct encoder_t *encoder_p, const struct oer_programming_types_float_t *src_p) { encoder_append_float(encoder_p, src_p->value); } static void oer_programming_types_float_decode_inner( struct decoder_t *decoder_p, struct oer_programming_types_float_t *dst_p) { dst_p->value = decoder_read_float(decoder_p); } static void oer_c_source_g_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_g_t *src_p) { uint8_t present_mask[2]; present_mask[0] = 0; present_mask[1] = 0; if (src_p->is_a_present) { present_mask[0] |= 0x80u; } if (src_p->is_b_present) { present_mask[0] |= 0x40u; } if (src_p->is_c_present) { present_mask[0] |= 0x20u; } if (src_p->is_d_present) { present_mask[0] |= 0x10u; } if (src_p->is_e_present) { present_mask[0] |= 0x08u; } if (src_p->is_f_present) { present_mask[0] |= 0x04u; } if (src_p->is_g_present) { present_mask[0] |= 0x02u; } if (src_p->is_h_present) { present_mask[0] |= 0x01u; } if (src_p->is_i_present) { present_mask[1] |= 0x80u; } encoder_append_bytes(encoder_p, &present_mask[0], sizeof(present_mask)); if (src_p->is_a_present) { encoder_append_bool(encoder_p, src_p->a); } if (src_p->is_b_present) { encoder_append_bool(encoder_p, src_p->b); } if (src_p->is_c_present) { encoder_append_bool(encoder_p, src_p->c); } if (src_p->is_d_present) { encoder_append_bool(encoder_p, src_p->d); } if (src_p->is_e_present) { encoder_append_bool(encoder_p, src_p->e); } if (src_p->is_f_present) { encoder_append_bool(encoder_p, src_p->f); } if (src_p->is_g_present) { encoder_append_bool(encoder_p, src_p->g); } if (src_p->is_h_present) { encoder_append_bool(encoder_p, src_p->h); } if (src_p->is_i_present) { encoder_append_bool(encoder_p, src_p->i); } } static void oer_c_source_g_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_g_t *dst_p) { uint8_t present_mask[2]; decoder_read_bytes(decoder_p, &present_mask[0], sizeof(present_mask)); dst_p->is_a_present = ((present_mask[0] & 0x80u) == 0x80u); dst_p->is_b_present = ((present_mask[0] & 0x40u) == 0x40u); dst_p->is_c_present = ((present_mask[0] & 0x20u) == 0x20u); dst_p->is_d_present = ((present_mask[0] & 0x10u) == 0x10u); dst_p->is_e_present = ((present_mask[0] & 0x08u) == 0x08u); dst_p->is_f_present = ((present_mask[0] & 0x04u) == 0x04u); dst_p->is_g_present = ((present_mask[0] & 0x02u) == 0x02u); dst_p->is_h_present = ((present_mask[0] & 0x01u) == 0x01u); dst_p->is_i_present = ((present_mask[1] & 0x80u) == 0x80u); if (dst_p->is_a_present) { dst_p->a = decoder_read_bool(decoder_p); } if (dst_p->is_b_present) { dst_p->b = decoder_read_bool(decoder_p); } if (dst_p->is_c_present) { dst_p->c = decoder_read_bool(decoder_p); } if (dst_p->is_d_present) { dst_p->d = decoder_read_bool(decoder_p); } if (dst_p->is_e_present) { dst_p->e = decoder_read_bool(decoder_p); } if (dst_p->is_f_present) { dst_p->f = decoder_read_bool(decoder_p); } if (dst_p->is_g_present) { dst_p->g = decoder_read_bool(decoder_p); } if (dst_p->is_h_present) { dst_p->h = decoder_read_bool(decoder_p); } if (dst_p->is_i_present) { dst_p->i = decoder_read_bool(decoder_p); } } static void oer_c_source_h_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_h_t *src_p) { (void)encoder_p; (void)src_p; } static void oer_c_source_h_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_h_t *dst_p) { (void)decoder_p; (void)dst_p; } static void oer_c_source_i_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_i_t *src_p) { encoder_append_bytes(encoder_p, &src_p->buf[0], 24); } static void oer_c_source_i_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_i_t *dst_p) { decoder_read_bytes(decoder_p, &dst_p->buf[0], 24); } static void oer_programming_types_int16_encode_inner( struct encoder_t *encoder_p, const struct oer_programming_types_int16_t *src_p) { encoder_append_int16(encoder_p, src_p->value); } static void oer_programming_types_int16_decode_inner( struct decoder_t *decoder_p, struct oer_programming_types_int16_t *dst_p) { dst_p->value = decoder_read_int16(decoder_p); } static void oer_programming_types_int32_encode_inner( struct encoder_t *encoder_p, const struct oer_programming_types_int32_t *src_p) { encoder_append_int32(encoder_p, src_p->value); } static void oer_programming_types_int32_decode_inner( struct decoder_t *decoder_p, struct oer_programming_types_int32_t *dst_p) { dst_p->value = decoder_read_int32(decoder_p); } static void oer_programming_types_int64_encode_inner( struct encoder_t *encoder_p, const struct oer_programming_types_int64_t *src_p) { encoder_append_int64(encoder_p, src_p->value); } static void oer_programming_types_int64_decode_inner( struct decoder_t *decoder_p, struct oer_programming_types_int64_t *dst_p) { dst_p->value = decoder_read_int64(decoder_p); } static void oer_programming_types_int8_encode_inner( struct encoder_t *encoder_p, const struct oer_programming_types_int8_t *src_p) { encoder_append_int8(encoder_p, src_p->value); } static void oer_programming_types_int8_decode_inner( struct decoder_t *decoder_p, struct oer_programming_types_int8_t *dst_p) { dst_p->value = decoder_read_int8(decoder_p); } static void oer_c_source_j_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_j_t *src_p) { encoder_append_uint8(encoder_p, src_p->length); encoder_append_bytes(encoder_p, &src_p->buf[0], src_p->length); } static void oer_c_source_j_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_j_t *dst_p) { dst_p->length = decoder_read_uint8(decoder_p); if (dst_p->length > 23u) { decoder_abort(decoder_p, EBADLENGTH); return; } decoder_read_bytes(decoder_p, &dst_p->buf[0], dst_p->length); } static void oer_c_source_k_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_k_t *src_p) { uint8_t enum_length; enum_length = enumerated_value_length(src_p->value); if (enum_length != 0u) { encoder_append_uint8(encoder_p, 0x80u | enum_length); encoder_append_int(encoder_p, (int32_t)src_p->value, enum_length); } else { encoder_append_uint8(encoder_p, (uint8_t)src_p->value); } } static void oer_c_source_k_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_k_t *dst_p) { uint8_t enum_length; enum_length = decoder_read_uint8(decoder_p); if ((enum_length & 0x80u) == 0x80u) { enum_length &= 0x7fu; if ((enum_length > 1u) || (enum_length == 0u)) { decoder_abort(decoder_p, EBADLENGTH); return; } dst_p->value = (enum oer_c_source_k_e)decoder_read_int(decoder_p, enum_length); } else { dst_p->value = (enum oer_c_source_k_e)enum_length; } } static void oer_c_source_l_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_l_t *src_p) { encoder_append_length_determinant(encoder_p, src_p->length); encoder_append_bytes(encoder_p, &src_p->buf[0], src_p->length); } static void oer_c_source_l_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_l_t *dst_p) { dst_p->length = decoder_read_length_determinant(decoder_p); if (dst_p->length > 500u) { decoder_abort(decoder_p, EBADLENGTH); return; } decoder_read_bytes(decoder_p, &dst_p->buf[0], dst_p->length); } static void oer_c_source_o_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_o_t *src_p) { uint8_t number_of_length_bytes; uint16_t i; number_of_length_bytes = minimum_uint_length(src_p->length); encoder_append_uint8(encoder_p, number_of_length_bytes); encoder_append_uint(encoder_p, src_p->length, number_of_length_bytes); for (i = 0; i < src_p->length; i++) { encoder_append_bool(encoder_p, src_p->elements[i]); } } static void oer_c_source_o_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_o_t *dst_p) { uint8_t number_of_length_bytes; uint16_t i; number_of_length_bytes = decoder_read_uint8(decoder_p); dst_p->length = decoder_read_uint( decoder_p, number_of_length_bytes); if (dst_p->length > 260u) { decoder_abort(decoder_p, EBADLENGTH); return; } for (i = 0; i < dst_p->length; i++) { dst_p->elements[i] = decoder_read_bool(decoder_p); } } static void oer_c_source_n_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_n_t *src_p) { oer_c_source_k_encode_inner(encoder_p, &src_p->a); oer_c_source_a_encode_inner(encoder_p, &src_p->b); oer_c_source_o_encode_inner(encoder_p, &src_p->c); } static void oer_c_source_n_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_n_t *dst_p) { oer_c_source_k_decode_inner(decoder_p, &dst_p->a); oer_c_source_a_decode_inner(decoder_p, &dst_p->b); oer_c_source_o_decode_inner(decoder_p, &dst_p->c); } static void oer_c_source_m_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_m_t *src_p) { oer_c_source_k_encode_inner(encoder_p, &src_p->a); oer_c_source_n_encode_inner(encoder_p, &src_p->b); } static void oer_c_source_m_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_m_t *dst_p) { oer_c_source_k_decode_inner(decoder_p, &dst_p->a); oer_c_source_n_decode_inner(decoder_p, &dst_p->b); } static void oer_c_source_p_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_p_t *src_p) { oer_c_source_a_encode_inner(encoder_p, &src_p->a); oer_c_source_m_encode_inner(encoder_p, &src_p->b); oer_c_source_f_encode_inner(encoder_p, &src_p->c); } static void oer_c_source_p_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_p_t *dst_p) { oer_c_source_a_decode_inner(decoder_p, &dst_p->a); oer_c_source_m_decode_inner(decoder_p, &dst_p->b); oer_c_source_f_decode_inner(decoder_p, &dst_p->c); } static void oer_c_source_r_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_r_t *src_p) { encoder_append_int8(encoder_p, src_p->value); } static void oer_c_source_r_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_r_t *dst_p) { dst_p->value = decoder_read_int8(decoder_p); } static void oer_c_ref_referenced_int_encode_inner( struct encoder_t *encoder_p, const struct oer_c_ref_referenced_int_t *src_p) { encoder_append_uint8(encoder_p, src_p->value); } static void oer_c_ref_referenced_int_decode_inner( struct decoder_t *decoder_p, struct oer_c_ref_referenced_int_t *dst_p) { dst_p->value = decoder_read_uint8(decoder_p); } static void oer_c_source_s_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_s_t *src_p) { encoder_append_int8(encoder_p, src_p->value); } static void oer_c_source_s_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_s_t *dst_p) { dst_p->value = decoder_read_int8(decoder_p); } static void oer_c_source_t_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_t_t *src_p) { encoder_append_int8(encoder_p, src_p->value); } static void oer_c_source_t_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_t_t *dst_p) { dst_p->value = decoder_read_int8(decoder_p); } static void oer_c_source_u_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_u_t *src_p) { encoder_append_int8(encoder_p, src_p->value); } static void oer_c_source_u_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_u_t *dst_p) { dst_p->value = decoder_read_int8(decoder_p); } static void oer_programming_types_uint16_encode_inner( struct encoder_t *encoder_p, const struct oer_programming_types_uint16_t *src_p) { encoder_append_uint16(encoder_p, src_p->value); } static void oer_programming_types_uint16_decode_inner( struct decoder_t *decoder_p, struct oer_programming_types_uint16_t *dst_p) { dst_p->value = decoder_read_uint16(decoder_p); } static void oer_programming_types_uint32_encode_inner( struct encoder_t *encoder_p, const struct oer_programming_types_uint32_t *src_p) { encoder_append_uint32(encoder_p, src_p->value); } static void oer_programming_types_uint32_decode_inner( struct decoder_t *decoder_p, struct oer_programming_types_uint32_t *dst_p) { dst_p->value = decoder_read_uint32(decoder_p); } static void oer_programming_types_uint64_encode_inner( struct encoder_t *encoder_p, const struct oer_programming_types_uint64_t *src_p) { encoder_append_uint64(encoder_p, src_p->value); } static void oer_programming_types_uint64_decode_inner( struct decoder_t *decoder_p, struct oer_programming_types_uint64_t *dst_p) { dst_p->value = decoder_read_uint64(decoder_p); } static void oer_programming_types_uint8_encode_inner( struct encoder_t *encoder_p, const struct oer_programming_types_uint8_t *src_p) { encoder_append_uint8(encoder_p, src_p->value); } static void oer_programming_types_uint8_decode_inner( struct decoder_t *decoder_p, struct oer_programming_types_uint8_t *dst_p) { dst_p->value = decoder_read_uint8(decoder_p); } static void oer_c_source_v_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_v_t *src_p) { encoder_append_int8(encoder_p, src_p->value); } static void oer_c_source_v_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_v_t *dst_p) { dst_p->value = decoder_read_int8(decoder_p); } static void oer_c_source_w_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_w_t *src_p) { encoder_append_int16(encoder_p, src_p->value); } static void oer_c_source_w_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_w_t *dst_p) { dst_p->value = decoder_read_int16(decoder_p); } static void oer_c_source_x_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_x_t *src_p) { encoder_append_int16(encoder_p, src_p->value); } static void oer_c_source_x_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_x_t *dst_p) { dst_p->value = decoder_read_int16(decoder_p); } static void oer_c_source_y_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_y_t *src_p) { encoder_append_uint16(encoder_p, src_p->value); } static void oer_c_source_y_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_y_t *dst_p) { dst_p->value = decoder_read_uint16(decoder_p); } static void oer_c_source_z_encode_inner( struct encoder_t *encoder_p, const struct oer_c_source_z_t *src_p) { encoder_append_bool(encoder_p, src_p->value); } static void oer_c_source_z_decode_inner( struct decoder_t *decoder_p, struct oer_c_source_z_t *dst_p) { dst_p->value = decoder_read_bool(decoder_p); } ssize_t oer_c_source_a_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_a_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_a_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_a_decode( struct oer_c_source_a_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_a_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_ab_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ab_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_ab_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_ab_decode( struct oer_c_source_ab_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_ab_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_q_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_q_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_q_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_q_decode( struct oer_c_source_q_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_q_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_d_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_d_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_d_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_d_decode( struct oer_c_source_d_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_d_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_ac_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ac_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_ac_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_ac_decode( struct oer_c_source_ac_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_ac_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_ad_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ad_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_ad_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_ad_decode( struct oer_c_source_ad_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_ad_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_ae_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ae_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_ae_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_ae_decode( struct oer_c_source_ae_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_ae_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_ah_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ah_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_ah_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_ah_decode( struct oer_c_source_ah_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_ah_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_af_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_af_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_af_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_af_decode( struct oer_c_source_af_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_af_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_ag_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ag_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_ag_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_ag_decode( struct oer_c_source_ag_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_ag_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_aj_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_aj_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_aj_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_aj_decode( struct oer_c_source_aj_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_aj_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_ak_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ak_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_ak_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_ak_decode( struct oer_c_source_ak_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_ak_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_ai_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ai_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_ai_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_ai_decode( struct oer_c_source_ai_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_ai_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_al_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_al_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_al_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_al_decode( struct oer_c_source_al_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_al_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_am_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_am_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_am_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_am_decode( struct oer_c_source_am_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_am_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_an_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_an_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_an_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_an_decode( struct oer_c_source_an_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_an_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_ao_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ao_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_ao_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_ao_decode( struct oer_c_source_ao_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_ao_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_ref_referenced_sequence_encode( uint8_t *dst_p, size_t size, const struct oer_c_ref_referenced_sequence_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_ref_referenced_sequence_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_ref_referenced_sequence_decode( struct oer_c_ref_referenced_sequence_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_ref_referenced_sequence_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_ref_referenced_enum_encode( uint8_t *dst_p, size_t size, const struct oer_c_ref_referenced_enum_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_ref_referenced_enum_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_ref_referenced_enum_decode( struct oer_c_ref_referenced_enum_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_ref_referenced_enum_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_ap_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ap_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_ap_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_ap_decode( struct oer_c_source_ap_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_ap_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_aq_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_aq_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_aq_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_aq_decode( struct oer_c_source_aq_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_aq_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_ar_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ar_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_ar_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_ar_decode( struct oer_c_source_ar_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_ar_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_as_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_as_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_as_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_as_decode( struct oer_c_source_as_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_as_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_ref_at_encode( uint8_t *dst_p, size_t size, const struct oer_c_ref_at_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_ref_at_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_ref_at_decode( struct oer_c_ref_at_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_ref_at_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_at_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_at_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_at_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_at_decode( struct oer_c_source_at_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_at_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_ref_au_encode( uint8_t *dst_p, size_t size, const struct oer_c_ref_au_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_ref_au_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_ref_au_decode( struct oer_c_ref_au_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_ref_au_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_b_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_b_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_b_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_b_decode( struct oer_c_source_b_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_b_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_programming_types_bool_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_bool_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_programming_types_bool_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_programming_types_bool_decode( struct oer_programming_types_bool_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_programming_types_bool_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_c_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_c_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_c_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_c_decode( struct oer_c_source_c_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_c_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_programming_types_double_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_double_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_programming_types_double_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_programming_types_double_decode( struct oer_programming_types_double_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_programming_types_double_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_e_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_e_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_e_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_e_decode( struct oer_c_source_e_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_e_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_f_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_f_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_f_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_f_decode( struct oer_c_source_f_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_f_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_programming_types_float_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_float_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_programming_types_float_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_programming_types_float_decode( struct oer_programming_types_float_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_programming_types_float_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_g_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_g_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_g_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_g_decode( struct oer_c_source_g_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_g_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_h_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_h_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_h_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_h_decode( struct oer_c_source_h_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_h_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_i_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_i_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_i_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_i_decode( struct oer_c_source_i_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_i_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_programming_types_int16_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_int16_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_programming_types_int16_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_programming_types_int16_decode( struct oer_programming_types_int16_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_programming_types_int16_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_programming_types_int32_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_int32_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_programming_types_int32_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_programming_types_int32_decode( struct oer_programming_types_int32_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_programming_types_int32_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_programming_types_int64_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_int64_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_programming_types_int64_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_programming_types_int64_decode( struct oer_programming_types_int64_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_programming_types_int64_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_programming_types_int8_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_int8_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_programming_types_int8_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_programming_types_int8_decode( struct oer_programming_types_int8_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_programming_types_int8_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_j_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_j_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_j_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_j_decode( struct oer_c_source_j_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_j_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_k_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_k_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_k_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_k_decode( struct oer_c_source_k_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_k_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_l_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_l_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_l_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_l_decode( struct oer_c_source_l_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_l_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_o_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_o_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_o_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_o_decode( struct oer_c_source_o_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_o_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_n_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_n_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_n_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_n_decode( struct oer_c_source_n_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_n_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_m_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_m_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_m_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_m_decode( struct oer_c_source_m_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_m_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_p_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_p_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_p_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_p_decode( struct oer_c_source_p_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_p_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_r_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_r_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_r_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_r_decode( struct oer_c_source_r_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_r_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_ref_referenced_int_encode( uint8_t *dst_p, size_t size, const struct oer_c_ref_referenced_int_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_ref_referenced_int_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_ref_referenced_int_decode( struct oer_c_ref_referenced_int_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_ref_referenced_int_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_s_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_s_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_s_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_s_decode( struct oer_c_source_s_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_s_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_t_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_t_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_t_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_t_decode( struct oer_c_source_t_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_t_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_u_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_u_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_u_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_u_decode( struct oer_c_source_u_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_u_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_programming_types_uint16_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_uint16_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_programming_types_uint16_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_programming_types_uint16_decode( struct oer_programming_types_uint16_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_programming_types_uint16_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_programming_types_uint32_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_uint32_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_programming_types_uint32_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_programming_types_uint32_decode( struct oer_programming_types_uint32_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_programming_types_uint32_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_programming_types_uint64_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_uint64_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_programming_types_uint64_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_programming_types_uint64_decode( struct oer_programming_types_uint64_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_programming_types_uint64_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_programming_types_uint8_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_uint8_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_programming_types_uint8_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_programming_types_uint8_decode( struct oer_programming_types_uint8_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_programming_types_uint8_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_v_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_v_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_v_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_v_decode( struct oer_c_source_v_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_v_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_w_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_w_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_w_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_w_decode( struct oer_c_source_w_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_w_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_x_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_x_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_x_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_x_decode( struct oer_c_source_x_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_x_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_y_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_y_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_y_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_y_decode( struct oer_c_source_y_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_y_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t oer_c_source_z_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_z_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); oer_c_source_z_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t oer_c_source_z_decode( struct oer_c_source_z_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); oer_c_source_z_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } asn1tools-0.169.0/tests/files/c_source/oer.h000066400000000000000000002107021524544274600206350ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.166.0 Sat Oct 21 09:42:10 2023. */ #ifndef OER_H #define OER_H #include #include #include #ifndef ENOMEM # define ENOMEM 12 #endif #ifndef EINVAL # define EINVAL 22 #endif #ifndef EOUTOFDATA # define EOUTOFDATA 500 #endif #ifndef EBADCHOICE # define EBADCHOICE 501 #endif #ifndef EBADLENGTH # define EBADLENGTH 502 #endif #ifndef EBADENUM # define EBADENUM 503 #endif /** * Type A in module CSource. */ struct oer_c_source_a_t { int8_t a; int16_t b; int32_t c; int64_t d; uint8_t e; uint16_t f; uint32_t g; uint64_t h; bool i; struct { uint8_t buf[11]; } j; }; /** * Type AB in module CSource. */ struct oer_c_source_ab_t { int8_t a; uint16_t b; }; /** * Type Q in module CSource. */ enum oer_c_source_q_choice_e { oer_c_source_q_choice_c001_e, oer_c_source_q_choice_c002_e, oer_c_source_q_choice_c003_e, oer_c_source_q_choice_c004_e, oer_c_source_q_choice_c005_e, oer_c_source_q_choice_c006_e, oer_c_source_q_choice_c007_e, oer_c_source_q_choice_c008_e, oer_c_source_q_choice_c009_e, oer_c_source_q_choice_c010_e, oer_c_source_q_choice_c011_e, oer_c_source_q_choice_c012_e, oer_c_source_q_choice_c013_e, oer_c_source_q_choice_c014_e, oer_c_source_q_choice_c015_e, oer_c_source_q_choice_c016_e, oer_c_source_q_choice_c017_e, oer_c_source_q_choice_c018_e, oer_c_source_q_choice_c019_e, oer_c_source_q_choice_c020_e, oer_c_source_q_choice_c021_e, oer_c_source_q_choice_c022_e, oer_c_source_q_choice_c023_e, oer_c_source_q_choice_c024_e, oer_c_source_q_choice_c025_e, oer_c_source_q_choice_c026_e, oer_c_source_q_choice_c027_e, oer_c_source_q_choice_c028_e, oer_c_source_q_choice_c029_e, oer_c_source_q_choice_c030_e, oer_c_source_q_choice_c031_e, oer_c_source_q_choice_c032_e, oer_c_source_q_choice_c033_e, oer_c_source_q_choice_c034_e, oer_c_source_q_choice_c035_e, oer_c_source_q_choice_c036_e, oer_c_source_q_choice_c037_e, oer_c_source_q_choice_c038_e, oer_c_source_q_choice_c039_e, oer_c_source_q_choice_c040_e, oer_c_source_q_choice_c041_e, oer_c_source_q_choice_c042_e, oer_c_source_q_choice_c043_e, oer_c_source_q_choice_c044_e, oer_c_source_q_choice_c045_e, oer_c_source_q_choice_c046_e, oer_c_source_q_choice_c047_e, oer_c_source_q_choice_c048_e, oer_c_source_q_choice_c049_e, oer_c_source_q_choice_c050_e, oer_c_source_q_choice_c051_e, oer_c_source_q_choice_c052_e, oer_c_source_q_choice_c053_e, oer_c_source_q_choice_c054_e, oer_c_source_q_choice_c055_e, oer_c_source_q_choice_c056_e, oer_c_source_q_choice_c057_e, oer_c_source_q_choice_c058_e, oer_c_source_q_choice_c059_e, oer_c_source_q_choice_c060_e, oer_c_source_q_choice_c061_e, oer_c_source_q_choice_c062_e, oer_c_source_q_choice_c063_e, oer_c_source_q_choice_c064_e, oer_c_source_q_choice_c065_e, oer_c_source_q_choice_c066_e, oer_c_source_q_choice_c067_e, oer_c_source_q_choice_c068_e, oer_c_source_q_choice_c069_e, oer_c_source_q_choice_c070_e, oer_c_source_q_choice_c071_e, oer_c_source_q_choice_c072_e, oer_c_source_q_choice_c073_e, oer_c_source_q_choice_c074_e, oer_c_source_q_choice_c075_e, oer_c_source_q_choice_c076_e, oer_c_source_q_choice_c077_e, oer_c_source_q_choice_c078_e, oer_c_source_q_choice_c079_e, oer_c_source_q_choice_c080_e, oer_c_source_q_choice_c081_e, oer_c_source_q_choice_c082_e, oer_c_source_q_choice_c083_e, oer_c_source_q_choice_c084_e, oer_c_source_q_choice_c085_e, oer_c_source_q_choice_c086_e, oer_c_source_q_choice_c087_e, oer_c_source_q_choice_c088_e, oer_c_source_q_choice_c089_e, oer_c_source_q_choice_c090_e, oer_c_source_q_choice_c091_e, oer_c_source_q_choice_c092_e, oer_c_source_q_choice_c093_e, oer_c_source_q_choice_c094_e, oer_c_source_q_choice_c095_e, oer_c_source_q_choice_c096_e, oer_c_source_q_choice_c097_e, oer_c_source_q_choice_c098_e, oer_c_source_q_choice_c099_e, oer_c_source_q_choice_c100_e, oer_c_source_q_choice_c101_e, oer_c_source_q_choice_c102_e, oer_c_source_q_choice_c103_e, oer_c_source_q_choice_c104_e, oer_c_source_q_choice_c105_e, oer_c_source_q_choice_c106_e, oer_c_source_q_choice_c107_e, oer_c_source_q_choice_c108_e, oer_c_source_q_choice_c109_e, oer_c_source_q_choice_c110_e, oer_c_source_q_choice_c111_e, oer_c_source_q_choice_c112_e, oer_c_source_q_choice_c113_e, oer_c_source_q_choice_c114_e, oer_c_source_q_choice_c115_e, oer_c_source_q_choice_c116_e, oer_c_source_q_choice_c117_e, oer_c_source_q_choice_c118_e, oer_c_source_q_choice_c119_e, oer_c_source_q_choice_c120_e, oer_c_source_q_choice_c121_e, oer_c_source_q_choice_c122_e, oer_c_source_q_choice_c123_e, oer_c_source_q_choice_c124_e, oer_c_source_q_choice_c125_e, oer_c_source_q_choice_c126_e, oer_c_source_q_choice_c127_e, oer_c_source_q_choice_c128_e, oer_c_source_q_choice_c129_e, oer_c_source_q_choice_c130_e, oer_c_source_q_choice_c131_e, oer_c_source_q_choice_c132_e, oer_c_source_q_choice_c133_e, oer_c_source_q_choice_c134_e, oer_c_source_q_choice_c135_e, oer_c_source_q_choice_c136_e, oer_c_source_q_choice_c137_e, oer_c_source_q_choice_c138_e, oer_c_source_q_choice_c139_e, oer_c_source_q_choice_c140_e, oer_c_source_q_choice_c141_e, oer_c_source_q_choice_c142_e, oer_c_source_q_choice_c143_e, oer_c_source_q_choice_c144_e, oer_c_source_q_choice_c145_e, oer_c_source_q_choice_c146_e, oer_c_source_q_choice_c147_e, oer_c_source_q_choice_c148_e, oer_c_source_q_choice_c149_e, oer_c_source_q_choice_c150_e, oer_c_source_q_choice_c151_e, oer_c_source_q_choice_c152_e, oer_c_source_q_choice_c153_e, oer_c_source_q_choice_c154_e, oer_c_source_q_choice_c155_e, oer_c_source_q_choice_c156_e, oer_c_source_q_choice_c157_e, oer_c_source_q_choice_c158_e, oer_c_source_q_choice_c159_e, oer_c_source_q_choice_c160_e, oer_c_source_q_choice_c161_e, oer_c_source_q_choice_c162_e, oer_c_source_q_choice_c163_e, oer_c_source_q_choice_c164_e, oer_c_source_q_choice_c165_e, oer_c_source_q_choice_c166_e, oer_c_source_q_choice_c167_e, oer_c_source_q_choice_c168_e, oer_c_source_q_choice_c169_e, oer_c_source_q_choice_c170_e, oer_c_source_q_choice_c171_e, oer_c_source_q_choice_c172_e, oer_c_source_q_choice_c173_e, oer_c_source_q_choice_c174_e, oer_c_source_q_choice_c175_e, oer_c_source_q_choice_c176_e, oer_c_source_q_choice_c177_e, oer_c_source_q_choice_c178_e, oer_c_source_q_choice_c179_e, oer_c_source_q_choice_c180_e, oer_c_source_q_choice_c181_e, oer_c_source_q_choice_c182_e, oer_c_source_q_choice_c183_e, oer_c_source_q_choice_c184_e, oer_c_source_q_choice_c185_e, oer_c_source_q_choice_c186_e, oer_c_source_q_choice_c187_e, oer_c_source_q_choice_c188_e, oer_c_source_q_choice_c189_e, oer_c_source_q_choice_c190_e, oer_c_source_q_choice_c191_e, oer_c_source_q_choice_c192_e, oer_c_source_q_choice_c193_e, oer_c_source_q_choice_c194_e, oer_c_source_q_choice_c195_e, oer_c_source_q_choice_c196_e, oer_c_source_q_choice_c197_e, oer_c_source_q_choice_c198_e, oer_c_source_q_choice_c199_e, oer_c_source_q_choice_c200_e, oer_c_source_q_choice_c201_e, oer_c_source_q_choice_c202_e, oer_c_source_q_choice_c203_e, oer_c_source_q_choice_c204_e, oer_c_source_q_choice_c205_e, oer_c_source_q_choice_c206_e, oer_c_source_q_choice_c207_e, oer_c_source_q_choice_c208_e, oer_c_source_q_choice_c209_e, oer_c_source_q_choice_c210_e, oer_c_source_q_choice_c211_e, oer_c_source_q_choice_c212_e, oer_c_source_q_choice_c213_e, oer_c_source_q_choice_c214_e, oer_c_source_q_choice_c215_e, oer_c_source_q_choice_c216_e, oer_c_source_q_choice_c217_e, oer_c_source_q_choice_c218_e, oer_c_source_q_choice_c219_e, oer_c_source_q_choice_c220_e, oer_c_source_q_choice_c221_e, oer_c_source_q_choice_c222_e, oer_c_source_q_choice_c223_e, oer_c_source_q_choice_c224_e, oer_c_source_q_choice_c225_e, oer_c_source_q_choice_c226_e, oer_c_source_q_choice_c227_e, oer_c_source_q_choice_c228_e, oer_c_source_q_choice_c229_e, oer_c_source_q_choice_c230_e, oer_c_source_q_choice_c231_e, oer_c_source_q_choice_c232_e, oer_c_source_q_choice_c233_e, oer_c_source_q_choice_c234_e, oer_c_source_q_choice_c235_e, oer_c_source_q_choice_c236_e, oer_c_source_q_choice_c237_e, oer_c_source_q_choice_c238_e, oer_c_source_q_choice_c239_e, oer_c_source_q_choice_c240_e, oer_c_source_q_choice_c241_e, oer_c_source_q_choice_c242_e, oer_c_source_q_choice_c243_e, oer_c_source_q_choice_c244_e, oer_c_source_q_choice_c245_e, oer_c_source_q_choice_c246_e, oer_c_source_q_choice_c247_e, oer_c_source_q_choice_c248_e, oer_c_source_q_choice_c249_e, oer_c_source_q_choice_c250_e, oer_c_source_q_choice_c251_e, oer_c_source_q_choice_c252_e, oer_c_source_q_choice_c253_e, oer_c_source_q_choice_c254_e, oer_c_source_q_choice_c255_e, oer_c_source_q_choice_c256_e, oer_c_source_q_choice_c257_e }; struct oer_c_source_q_t { enum oer_c_source_q_choice_e choice; union { bool c001; bool c002; bool c003; bool c004; bool c005; bool c006; bool c007; bool c008; bool c009; bool c010; bool c011; bool c012; bool c013; bool c014; bool c015; bool c016; bool c017; bool c018; bool c019; bool c020; bool c021; bool c022; bool c023; bool c024; bool c025; bool c026; bool c027; bool c028; bool c029; bool c030; bool c031; bool c032; bool c033; bool c034; bool c035; bool c036; bool c037; bool c038; bool c039; bool c040; bool c041; bool c042; bool c043; bool c044; bool c045; bool c046; bool c047; bool c048; bool c049; bool c050; bool c051; bool c052; bool c053; bool c054; bool c055; bool c056; bool c057; bool c058; bool c059; bool c060; bool c061; bool c062; bool c063; bool c064; bool c065; bool c066; bool c067; bool c068; bool c069; bool c070; bool c071; bool c072; bool c073; bool c074; bool c075; bool c076; bool c077; bool c078; bool c079; bool c080; bool c081; bool c082; bool c083; bool c084; bool c085; bool c086; bool c087; bool c088; bool c089; bool c090; bool c091; bool c092; bool c093; bool c094; bool c095; bool c096; bool c097; bool c098; bool c099; bool c100; bool c101; bool c102; bool c103; bool c104; bool c105; bool c106; bool c107; bool c108; bool c109; bool c110; bool c111; bool c112; bool c113; bool c114; bool c115; bool c116; bool c117; bool c118; bool c119; bool c120; bool c121; bool c122; bool c123; bool c124; bool c125; bool c126; bool c127; bool c128; bool c129; bool c130; bool c131; bool c132; bool c133; bool c134; bool c135; bool c136; bool c137; bool c138; bool c139; bool c140; bool c141; bool c142; bool c143; bool c144; bool c145; bool c146; bool c147; bool c148; bool c149; bool c150; bool c151; bool c152; bool c153; bool c154; bool c155; bool c156; bool c157; bool c158; bool c159; bool c160; bool c161; bool c162; bool c163; bool c164; bool c165; bool c166; bool c167; bool c168; bool c169; bool c170; bool c171; bool c172; bool c173; bool c174; bool c175; bool c176; bool c177; bool c178; bool c179; bool c180; bool c181; bool c182; bool c183; bool c184; bool c185; bool c186; bool c187; bool c188; bool c189; bool c190; bool c191; bool c192; bool c193; bool c194; bool c195; bool c196; bool c197; bool c198; bool c199; bool c200; bool c201; bool c202; bool c203; bool c204; bool c205; bool c206; bool c207; bool c208; bool c209; bool c210; bool c211; bool c212; bool c213; bool c214; bool c215; bool c216; bool c217; bool c218; bool c219; bool c220; bool c221; bool c222; bool c223; bool c224; bool c225; bool c226; bool c227; bool c228; bool c229; bool c230; bool c231; bool c232; bool c233; bool c234; bool c235; bool c236; bool c237; bool c238; bool c239; bool c240; bool c241; bool c242; bool c243; bool c244; bool c245; bool c246; bool c247; bool c248; bool c249; bool c250; bool c251; bool c252; bool c253; bool c254; bool c255; bool c256; bool c257; } value; }; /** * Type D in module CSource. */ enum oer_c_source_d_a_b_choice_e { oer_c_source_d_a_b_choice_c_e, oer_c_source_d_a_b_choice_d_e }; enum oer_c_source_d_g_h_e { oer_c_source_d_g_h_i_e = 0, oer_c_source_d_g_h_j_e = 4, oer_c_source_d_g_h_k_e = 512 }; struct oer_c_source_d_t { uint8_t length; struct { struct { struct { enum oer_c_source_d_a_b_choice_e choice; union { uint8_t c; bool d; } value; } b; struct { uint8_t length; } e; } a; struct { enum oer_c_source_d_g_h_e h; struct { uint8_t length; uint8_t buf[2]; } l; } g; struct { bool is_n_present; bool n; int8_t o; bool is_p_present; struct { struct { uint8_t buf[5]; } q; bool is_r_present; bool r; } p; bool s; } m; } elements[10]; }; /** * Type AC in module CSource. */ struct oer_c_source_ac_t { struct oer_c_source_q_t a; struct oer_c_source_d_t b; }; /** * Type AD in module CSource. */ enum oer_c_source_ad_e { oer_c_source_ad_a_e = 0, oer_c_source_ad_b_e = 1 }; struct oer_c_source_ad_t { enum oer_c_source_ad_e value; }; /** * Type AE in module CSource. */ struct oer_c_source_ae_t { bool is_a_present; bool a; bool b; bool c; }; /** * Type AH in module CSource. */ enum oer_c_source_ah_e_e { oer_c_source_ah_e_f_e = 0, oer_c_source_ah_e_g_e = 1, oer_c_source_ah_e_h_e = 2 }; struct oer_c_source_ah_t { bool c; bool is_d_addition_present; uint8_t d; bool is_e_addition_present; enum oer_c_source_ah_e_e e; }; /** * Type AF in module CSource. */ struct oer_c_source_af_t { bool a; bool is_b_addition_present; struct oer_c_source_ah_t b; bool is_e_addition_present; uint8_t e; bool is_f_addition_present; uint8_t f; bool is_g_addition_present; uint8_t g; bool is_h_addition_present; uint8_t h; bool is_i_addition_present; uint8_t i; bool is_j_addition_present; uint8_t j; bool is_k_addition_present; uint8_t k; bool is_l_addition_present; uint8_t l; }; /** * Type AG in module CSource. */ enum oer_c_source_ag_d_e { oer_c_source_ag_d_e_e = 0, oer_c_source_ag_d_f_e = 256, oer_c_source_ag_d_g_e = 65536 }; enum oer_c_source_ag_j_choice_e { oer_c_source_ag_j_choice_k_e, oer_c_source_ag_j_choice_l_e }; struct oer_c_source_ag_t { bool a; bool is_b_addition_present; struct { uint8_t length; uint8_t buf[10]; } b; bool is_c_addition_present; struct { uint8_t length; bool elements[10]; } c; bool is_d_addition_present; enum oer_c_source_ag_d_e d; bool is_h_addition_present; bool is_i_addition_present; float i; bool is_j_addition_present; struct { enum oer_c_source_ag_j_choice_e choice; union { uint16_t k; bool l; } value; } j; bool is_m_addition_present; struct { uint8_t buf[5]; } m; }; /** * Type AJ in module CSource. */ enum oer_c_source_aj_a_e { oer_c_source_aj_a_a_1_e = 0, oer_c_source_aj_a_a_2_e = 1 }; struct oer_c_source_aj_t { enum oer_c_source_aj_a_e a; }; /** * Type AK in module CSource. */ enum oer_c_source_ak_choice_e { oer_c_source_ak_choice_a_e }; struct oer_c_source_ak_t { enum oer_c_source_ak_choice_e choice; union { struct oer_c_source_aj_t a; } value; }; /** * Type AI in module CSource. */ struct oer_c_source_ai_t { struct oer_c_source_ak_t a; }; /** * Type AL in module CSource. */ struct oer_c_source_al_t { int16_t value; }; /** * Type AM in module CSource. */ struct oer_c_source_am_t { int8_t value; }; /** * Type AN in module CSource. */ enum oer_c_source_an_e { oer_c_source_an_a_e = -16777216, oer_c_source_an_b_e = -8388608, oer_c_source_an_c_e = -65536, oer_c_source_an_d_e = -32768, oer_c_source_an_e_e = -128, oer_c_source_an_f_e = 0, oer_c_source_an_g_e = 127, oer_c_source_an_h_e = 128, oer_c_source_an_i_e = 32767, oer_c_source_an_j_e = 65536, oer_c_source_an_k_e = 16777216 }; struct oer_c_source_an_t { enum oer_c_source_an_e value; }; /** * Type AO in module CSource. */ static const uint8_t OER_C_SOURCE_AO_A_A = 0x80; static const uint8_t OER_C_SOURCE_AO_A_B = 0x40; static const uint8_t OER_C_SOURCE_AO_A_C = 0x1; static const uint32_t OER_C_SOURCE_AO_B_A = 0x800000; static const uint32_t OER_C_SOURCE_AO_B_B = 0x400000; static const uint32_t OER_C_SOURCE_AO_B_C = 0x1; static const uint32_t OER_C_SOURCE_AO_D_A = 0x40000000; static const uint32_t OER_C_SOURCE_AO_D_B = 0x20000000; static const uint32_t OER_C_SOURCE_AO_D_C = 0x1; static const uint64_t OER_C_SOURCE_AO_E_A = 0x4000000000000000; static const uint64_t OER_C_SOURCE_AO_E_B = 0x80000000; static const uint64_t OER_C_SOURCE_AO_E_C = 0x01; struct oer_c_source_ao_t { uint8_t a; uint32_t b; uint8_t c; uint32_t d; uint64_t e; }; /** * Type REFERENCED-SEQUENCE in module CRef. */ struct oer_c_ref_referenced_sequence_t { uint8_t a; }; /** * Type REFERENCED-ENUM in module CRef. */ enum oer_c_ref_referenced_enum_e { oer_c_ref_referenced_enum_a_e = 0, oer_c_ref_referenced_enum_b_e = 1, oer_c_ref_referenced_enum_c_e = 2 }; struct oer_c_ref_referenced_enum_t { enum oer_c_ref_referenced_enum_e value; }; /** * Type AP in module CSource. */ struct oer_c_source_ap_t { struct oer_c_ref_referenced_sequence_t b; struct oer_c_ref_referenced_enum_t c; uint8_t d; }; /** * Type AQ in module CSource. */ struct oer_c_source_aq_t { uint32_t value; }; /** * Type AR in module CSource. */ struct oer_c_source_ar_t { struct { uint8_t length; uint8_t buf[10]; } a; }; /** * Type AS in module CSource. */ enum oer_c_source_as_a_b_choice_e { oer_c_source_as_a_b_choice_b_a_e, oer_c_source_as_a_b_choice_b_b_e }; struct oer_c_source_as_t { bool is_a_a_present; bool a_a; struct { enum oer_c_source_as_a_b_choice_e choice; union { bool b_a; bool b_b; } value; } a_b; bool a_c; }; /** * Type AT in module CRef. */ struct oer_c_ref_at_t { uint8_t value; }; /** * Type AT in module CSource. */ struct oer_c_source_at_t { uint8_t a; bool is_b_addition_present; struct { uint8_t length; struct oer_c_source_a_t elements[32]; } b; }; /** * Type AU in module CRef. */ enum oer_c_ref_au_a_a_b_a_e { oer_c_ref_au_a_a_b_a_a_e = 0, oer_c_ref_au_a_a_b_a_b_e = 1 }; enum oer_c_ref_au_a_a_b_b_e { oer_c_ref_au_a_a_b_b_a_e = 0, oer_c_ref_au_a_a_b_b_b_e = 1 }; enum oer_c_ref_au_a_a_choice_e { oer_c_ref_au_a_a_choice_b_a_e, oer_c_ref_au_a_a_choice_b_b_e }; struct oer_c_ref_au_t { struct { enum oer_c_ref_au_a_a_choice_e choice; union { enum oer_c_ref_au_a_a_b_a_e b_a; enum oer_c_ref_au_a_a_b_b_e b_b; } value; } a_a; }; /** * Type B in module CSource. */ enum oer_c_source_b_choice_e { oer_c_source_b_choice_a_e, oer_c_source_b_choice_b_e, oer_c_source_b_choice_c_e }; struct oer_c_source_b_t { enum oer_c_source_b_choice_e choice; union { int8_t a; struct oer_c_source_a_t b; } value; }; /** * Type Bool in module ProgrammingTypes. */ struct oer_programming_types_bool_t { bool value; }; /** * Type C in module CSource. */ struct oer_c_source_c_t { uint8_t length; struct oer_c_source_b_t elements[2]; }; /** * Type Double in module ProgrammingTypes. */ struct oer_programming_types_double_t { double value; }; /** * Type E in module CSource. */ enum oer_c_source_e_a_b_choice_e { oer_c_source_e_a_b_choice_c_e }; enum oer_c_source_e_a_choice_e { oer_c_source_e_a_choice_b_e }; struct oer_c_source_e_t { struct { enum oer_c_source_e_a_choice_e choice; union { struct { enum oer_c_source_e_a_b_choice_e choice; union { bool c; } value; } b; } value; } a; }; /** * Type F in module CSource. */ struct oer_c_source_f_t { uint8_t length; struct { bool elements[1]; } elements[2]; }; /** * Type Float in module ProgrammingTypes. */ struct oer_programming_types_float_t { float value; }; /** * Type G in module CSource. */ struct oer_c_source_g_t { bool is_a_present; bool a; bool is_b_present; bool b; bool is_c_present; bool c; bool is_d_present; bool d; bool is_e_present; bool e; bool is_f_present; bool f; bool is_g_present; bool g; bool is_h_present; bool h; bool is_i_present; bool i; }; /** * Type H in module CSource. */ struct oer_c_source_h_t { uint8_t dummy; }; /** * Type I in module CSource. */ struct oer_c_source_i_t { uint8_t buf[24]; }; /** * Type Int16 in module ProgrammingTypes. */ struct oer_programming_types_int16_t { int16_t value; }; /** * Type Int32 in module ProgrammingTypes. */ struct oer_programming_types_int32_t { int32_t value; }; /** * Type Int64 in module ProgrammingTypes. */ struct oer_programming_types_int64_t { int64_t value; }; /** * Type Int8 in module ProgrammingTypes. */ struct oer_programming_types_int8_t { int8_t value; }; /** * Type J in module CSource. */ struct oer_c_source_j_t { uint8_t length; uint8_t buf[23]; }; /** * Type K in module CSource. */ enum oer_c_source_k_e { oer_c_source_k_a_e = 0 }; struct oer_c_source_k_t { enum oer_c_source_k_e value; }; /** * Type L in module CSource. */ struct oer_c_source_l_t { uint32_t length; uint8_t buf[500]; }; /** * Type O in module CSource. */ struct oer_c_source_o_t { uint32_t length; bool elements[260]; }; /** * Type N in module CSource. */ struct oer_c_source_n_t { struct oer_c_source_k_t a; struct oer_c_source_a_t b; struct oer_c_source_o_t c; }; /** * Type M in module CSource. */ struct oer_c_source_m_t { struct oer_c_source_k_t a; struct oer_c_source_n_t b; }; /** * Type P in module CSource. */ struct oer_c_source_p_t { struct oer_c_source_a_t a; struct oer_c_source_m_t b; struct oer_c_source_f_t c; }; /** * Type R in module CSource. */ struct oer_c_source_r_t { int8_t value; }; /** * Type REFERENCED-INT in module CRef. */ struct oer_c_ref_referenced_int_t { uint8_t value; }; /** * Type S in module CSource. */ struct oer_c_source_s_t { int8_t value; }; /** * Type T in module CSource. */ struct oer_c_source_t_t { int8_t value; }; /** * Type U in module CSource. */ struct oer_c_source_u_t { int8_t value; }; /** * Type Uint16 in module ProgrammingTypes. */ struct oer_programming_types_uint16_t { uint16_t value; }; /** * Type Uint32 in module ProgrammingTypes. */ struct oer_programming_types_uint32_t { uint32_t value; }; /** * Type Uint64 in module ProgrammingTypes. */ struct oer_programming_types_uint64_t { uint64_t value; }; /** * Type Uint8 in module ProgrammingTypes. */ struct oer_programming_types_uint8_t { uint8_t value; }; /** * Type V in module CSource. */ struct oer_c_source_v_t { int8_t value; }; /** * Type W in module CSource. */ struct oer_c_source_w_t { int16_t value; }; /** * Type X in module CSource. */ struct oer_c_source_x_t { int16_t value; }; /** * Type Y in module CSource. */ struct oer_c_source_y_t { uint16_t value; }; /** * Type Z in module CSource. */ struct oer_c_source_z_t { bool value; }; /** * Encode type A defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_a_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_a_t *src_p); /** * Decode type A defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_a_decode( struct oer_c_source_a_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AB defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_ab_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ab_t *src_p); /** * Decode type AB defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_ab_decode( struct oer_c_source_ab_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Q defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_q_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_q_t *src_p); /** * Decode type Q defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_q_decode( struct oer_c_source_q_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type D defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_d_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_d_t *src_p); /** * Decode type D defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_d_decode( struct oer_c_source_d_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AC defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_ac_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ac_t *src_p); /** * Decode type AC defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_ac_decode( struct oer_c_source_ac_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AD defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_ad_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ad_t *src_p); /** * Decode type AD defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_ad_decode( struct oer_c_source_ad_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AE defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_ae_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ae_t *src_p); /** * Decode type AE defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_ae_decode( struct oer_c_source_ae_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AH defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_ah_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ah_t *src_p); /** * Decode type AH defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_ah_decode( struct oer_c_source_ah_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AF defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_af_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_af_t *src_p); /** * Decode type AF defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_af_decode( struct oer_c_source_af_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AG defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_ag_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ag_t *src_p); /** * Decode type AG defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_ag_decode( struct oer_c_source_ag_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AJ defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_aj_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_aj_t *src_p); /** * Decode type AJ defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_aj_decode( struct oer_c_source_aj_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AK defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_ak_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ak_t *src_p); /** * Decode type AK defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_ak_decode( struct oer_c_source_ak_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AI defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_ai_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ai_t *src_p); /** * Decode type AI defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_ai_decode( struct oer_c_source_ai_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AL defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_al_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_al_t *src_p); /** * Decode type AL defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_al_decode( struct oer_c_source_al_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AM defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_am_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_am_t *src_p); /** * Decode type AM defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_am_decode( struct oer_c_source_am_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AN defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_an_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_an_t *src_p); /** * Decode type AN defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_an_decode( struct oer_c_source_an_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AO defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_ao_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ao_t *src_p); /** * Decode type AO defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_ao_decode( struct oer_c_source_ao_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type REFERENCED-SEQUENCE defined in module CRef. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_ref_referenced_sequence_encode( uint8_t *dst_p, size_t size, const struct oer_c_ref_referenced_sequence_t *src_p); /** * Decode type REFERENCED-SEQUENCE defined in module CRef. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_ref_referenced_sequence_decode( struct oer_c_ref_referenced_sequence_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type REFERENCED-ENUM defined in module CRef. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_ref_referenced_enum_encode( uint8_t *dst_p, size_t size, const struct oer_c_ref_referenced_enum_t *src_p); /** * Decode type REFERENCED-ENUM defined in module CRef. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_ref_referenced_enum_decode( struct oer_c_ref_referenced_enum_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AP defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_ap_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ap_t *src_p); /** * Decode type AP defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_ap_decode( struct oer_c_source_ap_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AQ defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_aq_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_aq_t *src_p); /** * Decode type AQ defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_aq_decode( struct oer_c_source_aq_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AR defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_ar_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_ar_t *src_p); /** * Decode type AR defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_ar_decode( struct oer_c_source_ar_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AS defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_as_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_as_t *src_p); /** * Decode type AS defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_as_decode( struct oer_c_source_as_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AT defined in module CRef. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_ref_at_encode( uint8_t *dst_p, size_t size, const struct oer_c_ref_at_t *src_p); /** * Decode type AT defined in module CRef. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_ref_at_decode( struct oer_c_ref_at_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AT defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_at_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_at_t *src_p); /** * Decode type AT defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_at_decode( struct oer_c_source_at_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AU defined in module CRef. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_ref_au_encode( uint8_t *dst_p, size_t size, const struct oer_c_ref_au_t *src_p); /** * Decode type AU defined in module CRef. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_ref_au_decode( struct oer_c_ref_au_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type B defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_b_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_b_t *src_p); /** * Decode type B defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_b_decode( struct oer_c_source_b_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Bool defined in module ProgrammingTypes. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_programming_types_bool_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_bool_t *src_p); /** * Decode type Bool defined in module ProgrammingTypes. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_programming_types_bool_decode( struct oer_programming_types_bool_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type C defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_c_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_c_t *src_p); /** * Decode type C defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_c_decode( struct oer_c_source_c_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Double defined in module ProgrammingTypes. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_programming_types_double_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_double_t *src_p); /** * Decode type Double defined in module ProgrammingTypes. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_programming_types_double_decode( struct oer_programming_types_double_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type E defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_e_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_e_t *src_p); /** * Decode type E defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_e_decode( struct oer_c_source_e_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type F defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_f_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_f_t *src_p); /** * Decode type F defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_f_decode( struct oer_c_source_f_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Float defined in module ProgrammingTypes. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_programming_types_float_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_float_t *src_p); /** * Decode type Float defined in module ProgrammingTypes. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_programming_types_float_decode( struct oer_programming_types_float_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type G defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_g_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_g_t *src_p); /** * Decode type G defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_g_decode( struct oer_c_source_g_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type H defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_h_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_h_t *src_p); /** * Decode type H defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_h_decode( struct oer_c_source_h_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type I defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_i_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_i_t *src_p); /** * Decode type I defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_i_decode( struct oer_c_source_i_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Int16 defined in module ProgrammingTypes. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_programming_types_int16_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_int16_t *src_p); /** * Decode type Int16 defined in module ProgrammingTypes. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_programming_types_int16_decode( struct oer_programming_types_int16_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Int32 defined in module ProgrammingTypes. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_programming_types_int32_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_int32_t *src_p); /** * Decode type Int32 defined in module ProgrammingTypes. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_programming_types_int32_decode( struct oer_programming_types_int32_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Int64 defined in module ProgrammingTypes. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_programming_types_int64_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_int64_t *src_p); /** * Decode type Int64 defined in module ProgrammingTypes. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_programming_types_int64_decode( struct oer_programming_types_int64_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Int8 defined in module ProgrammingTypes. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_programming_types_int8_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_int8_t *src_p); /** * Decode type Int8 defined in module ProgrammingTypes. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_programming_types_int8_decode( struct oer_programming_types_int8_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type J defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_j_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_j_t *src_p); /** * Decode type J defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_j_decode( struct oer_c_source_j_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type K defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_k_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_k_t *src_p); /** * Decode type K defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_k_decode( struct oer_c_source_k_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type L defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_l_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_l_t *src_p); /** * Decode type L defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_l_decode( struct oer_c_source_l_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type O defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_o_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_o_t *src_p); /** * Decode type O defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_o_decode( struct oer_c_source_o_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type N defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_n_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_n_t *src_p); /** * Decode type N defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_n_decode( struct oer_c_source_n_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type M defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_m_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_m_t *src_p); /** * Decode type M defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_m_decode( struct oer_c_source_m_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type P defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_p_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_p_t *src_p); /** * Decode type P defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_p_decode( struct oer_c_source_p_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type R defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_r_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_r_t *src_p); /** * Decode type R defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_r_decode( struct oer_c_source_r_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type REFERENCED-INT defined in module CRef. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_ref_referenced_int_encode( uint8_t *dst_p, size_t size, const struct oer_c_ref_referenced_int_t *src_p); /** * Decode type REFERENCED-INT defined in module CRef. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_ref_referenced_int_decode( struct oer_c_ref_referenced_int_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type S defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_s_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_s_t *src_p); /** * Decode type S defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_s_decode( struct oer_c_source_s_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type T defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_t_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_t_t *src_p); /** * Decode type T defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_t_decode( struct oer_c_source_t_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type U defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_u_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_u_t *src_p); /** * Decode type U defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_u_decode( struct oer_c_source_u_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Uint16 defined in module ProgrammingTypes. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_programming_types_uint16_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_uint16_t *src_p); /** * Decode type Uint16 defined in module ProgrammingTypes. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_programming_types_uint16_decode( struct oer_programming_types_uint16_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Uint32 defined in module ProgrammingTypes. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_programming_types_uint32_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_uint32_t *src_p); /** * Decode type Uint32 defined in module ProgrammingTypes. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_programming_types_uint32_decode( struct oer_programming_types_uint32_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Uint64 defined in module ProgrammingTypes. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_programming_types_uint64_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_uint64_t *src_p); /** * Decode type Uint64 defined in module ProgrammingTypes. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_programming_types_uint64_decode( struct oer_programming_types_uint64_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Uint8 defined in module ProgrammingTypes. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_programming_types_uint8_encode( uint8_t *dst_p, size_t size, const struct oer_programming_types_uint8_t *src_p); /** * Decode type Uint8 defined in module ProgrammingTypes. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_programming_types_uint8_decode( struct oer_programming_types_uint8_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type V defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_v_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_v_t *src_p); /** * Decode type V defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_v_decode( struct oer_c_source_v_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type W defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_w_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_w_t *src_p); /** * Decode type W defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_w_decode( struct oer_c_source_w_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type X defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_x_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_x_t *src_p); /** * Decode type X defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_x_decode( struct oer_c_source_x_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Y defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_y_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_y_t *src_p); /** * Decode type Y defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_y_decode( struct oer_c_source_y_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Z defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t oer_c_source_z_encode( uint8_t *dst_p, size_t size, const struct oer_c_source_z_t *src_p); /** * Decode type Z defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t oer_c_source_z_decode( struct oer_c_source_z_t *dst_p, const uint8_t *src_p, size_t size); #endif asn1tools-0.169.0/tests/files/c_source/oer_fuzzer.c000066400000000000000000002235201524544274600222370ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.166.0 Sat Oct 21 09:44:37 2023. */ #include #include #include #include #include #include "oer.h" static void assert_first_encode(ssize_t res) { if (res < 0) { printf("First encode failed with %ld.\n", res); __builtin_trap(); } } static void assert_second_decode(ssize_t res) { if (res < 0) { printf("Second decode failed with %ld.\n", res); __builtin_trap(); } } static void assert_second_decode_data(const void *decoded_p, const void *decoded2_p, size_t size) { if (memcmp(decoded_p, decoded2_p, size) != 0) { printf("Second decode data does not match first decoded data.\n"); __builtin_trap(); } } static void assert_second_encode(ssize_t res, ssize_t res2) { if (res != res2) { printf("Second encode result %ld does not match first pack " "result %ld.\n", res, res2); __builtin_trap(); } } static void assert_second_encode_data(const uint8_t *encoded_p, const uint8_t *encoded2_p, ssize_t size) { ssize_t i; if (memcmp(encoded_p, encoded2_p, size) != 0) { for (i = 0; i < size; i++) { printf("[%04ld]: 0x%02x 0x%02x\n", i, encoded_p[i], encoded2_p[i]); } __builtin_trap(); } } static void test_oer_c_ref_at( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_ref_at_t decoded; struct oer_c_ref_at_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_ref_at_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_ref_at_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_ref_at_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_ref_at_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_ref_au( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_ref_au_t decoded; struct oer_c_ref_au_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_ref_au_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_ref_au_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_ref_au_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_ref_au_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_ref_referenced_enum( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_ref_referenced_enum_t decoded; struct oer_c_ref_referenced_enum_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_ref_referenced_enum_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_ref_referenced_enum_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_ref_referenced_enum_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_ref_referenced_enum_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_ref_referenced_int( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_ref_referenced_int_t decoded; struct oer_c_ref_referenced_int_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_ref_referenced_int_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_ref_referenced_int_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_ref_referenced_int_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_ref_referenced_int_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_ref_referenced_sequence( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_ref_referenced_sequence_t decoded; struct oer_c_ref_referenced_sequence_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_ref_referenced_sequence_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_ref_referenced_sequence_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_ref_referenced_sequence_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_ref_referenced_sequence_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_a( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_a_t decoded; struct oer_c_source_a_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_a_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_a_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_a_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_a_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ab( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ab_t decoded; struct oer_c_source_ab_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ab_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ab_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ab_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ab_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ac( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ac_t decoded; struct oer_c_source_ac_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ac_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ac_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ac_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ac_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ad( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ad_t decoded; struct oer_c_source_ad_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ad_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ad_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ad_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ad_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ae( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ae_t decoded; struct oer_c_source_ae_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ae_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ae_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ae_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ae_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_af( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_af_t decoded; struct oer_c_source_af_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_af_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_af_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_af_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_af_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ag( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ag_t decoded; struct oer_c_source_ag_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ag_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ag_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ag_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ag_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ah( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ah_t decoded; struct oer_c_source_ah_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ah_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ah_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ah_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ah_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ai( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ai_t decoded; struct oer_c_source_ai_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ai_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ai_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ai_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ai_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_aj( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_aj_t decoded; struct oer_c_source_aj_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_aj_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_aj_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_aj_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_aj_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ak( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ak_t decoded; struct oer_c_source_ak_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ak_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ak_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ak_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ak_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_al( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_al_t decoded; struct oer_c_source_al_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_al_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_al_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_al_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_al_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_am( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_am_t decoded; struct oer_c_source_am_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_am_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_am_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_am_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_am_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_an( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_an_t decoded; struct oer_c_source_an_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_an_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_an_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_an_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_an_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ao( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ao_t decoded; struct oer_c_source_ao_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ao_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ao_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ao_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ao_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ap( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ap_t decoded; struct oer_c_source_ap_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ap_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ap_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ap_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ap_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_aq( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_aq_t decoded; struct oer_c_source_aq_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_aq_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_aq_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_aq_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_aq_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ar( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ar_t decoded; struct oer_c_source_ar_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ar_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ar_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ar_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ar_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_as( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_as_t decoded; struct oer_c_source_as_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_as_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_as_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_as_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_as_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_at( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_at_t decoded; struct oer_c_source_at_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_at_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_at_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_at_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_at_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_b( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_b_t decoded; struct oer_c_source_b_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_b_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_b_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_b_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_b_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_c( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_c_t decoded; struct oer_c_source_c_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_c_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_c_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_c_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_c_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_d( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_d_t decoded; struct oer_c_source_d_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_d_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_d_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_d_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_d_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_e( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_e_t decoded; struct oer_c_source_e_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_e_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_e_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_e_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_e_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_f( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_f_t decoded; struct oer_c_source_f_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_f_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_f_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_f_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_f_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_g( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_g_t decoded; struct oer_c_source_g_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_g_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_g_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_g_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_g_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_h( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_h_t decoded; struct oer_c_source_h_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_h_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_h_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_h_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_h_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_i( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_i_t decoded; struct oer_c_source_i_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_i_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_i_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_i_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_i_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_j( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_j_t decoded; struct oer_c_source_j_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_j_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_j_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_j_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_j_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_k( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_k_t decoded; struct oer_c_source_k_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_k_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_k_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_k_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_k_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_l( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_l_t decoded; struct oer_c_source_l_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_l_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_l_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_l_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_l_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_m( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_m_t decoded; struct oer_c_source_m_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_m_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_m_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_m_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_m_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_n( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_n_t decoded; struct oer_c_source_n_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_n_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_n_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_n_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_n_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_o( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_o_t decoded; struct oer_c_source_o_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_o_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_o_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_o_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_o_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_p( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_p_t decoded; struct oer_c_source_p_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_p_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_p_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_p_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_p_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_q( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_q_t decoded; struct oer_c_source_q_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_q_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_q_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_q_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_q_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_r( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_r_t decoded; struct oer_c_source_r_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_r_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_r_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_r_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_r_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_s( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_s_t decoded; struct oer_c_source_s_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_s_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_s_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_s_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_s_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_t( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_t_t decoded; struct oer_c_source_t_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_t_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_t_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_t_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_t_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_u( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_u_t decoded; struct oer_c_source_u_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_u_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_u_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_u_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_u_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_v( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_v_t decoded; struct oer_c_source_v_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_v_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_v_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_v_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_v_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_w( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_w_t decoded; struct oer_c_source_w_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_w_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_w_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_w_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_w_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_x( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_x_t decoded; struct oer_c_source_x_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_x_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_x_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_x_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_x_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_y( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_y_t decoded; struct oer_c_source_y_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_y_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_y_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_y_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_y_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_z( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_z_t decoded; struct oer_c_source_z_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_z_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_z_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_z_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_z_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_bool( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_bool_t decoded; struct oer_programming_types_bool_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_bool_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_bool_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_bool_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_bool_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_double( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_double_t decoded; struct oer_programming_types_double_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_double_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_double_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_double_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_double_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_float( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_float_t decoded; struct oer_programming_types_float_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_float_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_float_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_float_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_float_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_int16( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_int16_t decoded; struct oer_programming_types_int16_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_int16_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_int16_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_int16_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_int16_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_int32( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_int32_t decoded; struct oer_programming_types_int32_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_int32_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_int32_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_int32_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_int32_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_int64( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_int64_t decoded; struct oer_programming_types_int64_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_int64_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_int64_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_int64_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_int64_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_int8( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_int8_t decoded; struct oer_programming_types_int8_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_int8_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_int8_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_int8_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_int8_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_uint16( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_uint16_t decoded; struct oer_programming_types_uint16_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_uint16_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_uint16_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_uint16_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_uint16_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_uint32( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_uint32_t decoded; struct oer_programming_types_uint32_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_uint32_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_uint32_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_uint32_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_uint32_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_uint64( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_uint64_t decoded; struct oer_programming_types_uint64_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_uint64_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_uint64_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_uint64_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_uint64_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_uint8( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_uint8_t decoded; struct oer_programming_types_uint8_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_uint8_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_uint8_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_uint8_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_uint8_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } int LLVMFuzzerTestOneInput(const uint8_t *data_p, size_t size) { test_oer_c_ref_at(data_p, size); test_oer_c_ref_au(data_p, size); test_oer_c_ref_referenced_enum(data_p, size); test_oer_c_ref_referenced_int(data_p, size); test_oer_c_ref_referenced_sequence(data_p, size); test_oer_c_source_a(data_p, size); test_oer_c_source_ab(data_p, size); test_oer_c_source_ac(data_p, size); test_oer_c_source_ad(data_p, size); test_oer_c_source_ae(data_p, size); test_oer_c_source_af(data_p, size); test_oer_c_source_ag(data_p, size); test_oer_c_source_ah(data_p, size); test_oer_c_source_ai(data_p, size); test_oer_c_source_aj(data_p, size); test_oer_c_source_ak(data_p, size); test_oer_c_source_al(data_p, size); test_oer_c_source_am(data_p, size); test_oer_c_source_an(data_p, size); test_oer_c_source_ao(data_p, size); test_oer_c_source_ap(data_p, size); test_oer_c_source_aq(data_p, size); test_oer_c_source_ar(data_p, size); test_oer_c_source_as(data_p, size); test_oer_c_source_at(data_p, size); test_oer_c_source_b(data_p, size); test_oer_c_source_c(data_p, size); test_oer_c_source_d(data_p, size); test_oer_c_source_e(data_p, size); test_oer_c_source_f(data_p, size); test_oer_c_source_g(data_p, size); test_oer_c_source_h(data_p, size); test_oer_c_source_i(data_p, size); test_oer_c_source_j(data_p, size); test_oer_c_source_k(data_p, size); test_oer_c_source_l(data_p, size); test_oer_c_source_m(data_p, size); test_oer_c_source_n(data_p, size); test_oer_c_source_o(data_p, size); test_oer_c_source_p(data_p, size); test_oer_c_source_q(data_p, size); test_oer_c_source_r(data_p, size); test_oer_c_source_s(data_p, size); test_oer_c_source_t(data_p, size); test_oer_c_source_u(data_p, size); test_oer_c_source_v(data_p, size); test_oer_c_source_w(data_p, size); test_oer_c_source_x(data_p, size); test_oer_c_source_y(data_p, size); test_oer_c_source_z(data_p, size); test_oer_programming_types_bool(data_p, size); test_oer_programming_types_double(data_p, size); test_oer_programming_types_float(data_p, size); test_oer_programming_types_int16(data_p, size); test_oer_programming_types_int32(data_p, size); test_oer_programming_types_int64(data_p, size); test_oer_programming_types_int8(data_p, size); test_oer_programming_types_uint16(data_p, size); test_oer_programming_types_uint32(data_p, size); test_oer_programming_types_uint64(data_p, size); test_oer_programming_types_uint8(data_p, size); return (0); } asn1tools-0.169.0/tests/files/c_source/oer_fuzzer.mk000066400000000000000000000034101524544274600224160ustar00rootroot00000000000000# # The MIT License (MIT) # # Copyright (c) 2018-2019 Erik Moqvist # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, copy, # modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # # # This file was generated by asn1tools version 0.146.6 Fri Apr 10 21:04:22 2020. # CC = clang EXE = fuzzer C_SOURCES = \ oer.c \ oer_fuzzer.c CFLAGS = \ -fprofile-instr-generate \ -fcoverage-mapping \ -I. \ -g -fsanitize=address,fuzzer \ -fsanitize=signed-integer-overflow \ -fno-sanitize-recover=all EXECUTION_TIME ?= 5 all: $(CC) $(CFLAGS) $(C_SOURCES) -o $(EXE) rm -f $(EXE).profraw LLVM_PROFILE_FILE="$(EXE).profraw" \ ./$(EXE) \ -max_total_time=$(EXECUTION_TIME) llvm-profdata merge -sparse $(EXE).profraw -o $(EXE).profdata llvm-cov show ./$(EXE) -instr-profile=$(EXE).profdata llvm-cov report ./$(EXE) -instr-profile=$(EXE).profdata asn1tools-0.169.0/tests/files/c_source/programming_types.asn000066400000000000000000000017261524544274600241540ustar00rootroot00000000000000-- -- Types often found in programming languages. -- ProgrammingTypes DEFINITIONS AUTOMATIC TAGS ::= BEGIN Int8 ::= INTEGER (-128..127) Int16 ::= INTEGER (-32768..32767) Int32 ::= INTEGER (-2147483648..2147483647) Int64 ::= INTEGER (-9223372036854775808..9223372036854775807) Uint8 ::= INTEGER (0..255) Uint16 ::= INTEGER (0..65535) Uint32 ::= INTEGER (0..4294967295) Uint64 ::= INTEGER (0..18446744073709551615) -- Single-precision (32 bits) floating point number, also known as -- binary32. Float ::= REAL (WITH COMPONENTS { mantissa (-16777215..16777215), base (2), exponent (-149..104) }) -- Double-precision (64 bits) floating point number, also known as -- binary64. Double ::= REAL (WITH COMPONENTS { mantissa (-9007199254740991..9007199254740991), base (2), exponent (-1074..971) }) Bool ::= BOOLEAN END asn1tools-0.169.0/tests/files/c_source/uper.c000066400000000000000000005135671524544274600210350ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.166.0 Sat Oct 21 11:14:46 2023. */ #include #include "uper.h" struct encoder_t { uint8_t *buf_p; ssize_t size; ssize_t pos; }; struct decoder_t { const uint8_t *buf_p; ssize_t size; ssize_t pos; }; static void encoder_init(struct encoder_t *self_p, uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (8 * (ssize_t)size); self_p->pos = 0; } static ssize_t encoder_get_result(const struct encoder_t *self_p) { if (self_p->size >= 0) { return ((self_p->pos + 7) / 8); } else { return (self_p->pos); } } static void encoder_abort(struct encoder_t *self_p, ssize_t error) { if (self_p->size >= 0) { self_p->size = -error; self_p->pos = -error; } } static ssize_t encoder_alloc(struct encoder_t *self_p, size_t size) { ssize_t pos; if ((self_p->pos + (ssize_t)size) <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -ENOMEM; encoder_abort(self_p, ENOMEM); } return (pos); } static void encoder_append_bit(struct encoder_t *self_p, int value) { ssize_t pos; pos = encoder_alloc(self_p, 1); if (pos < 0) { return; } if ((pos % 8) == 0) { self_p->buf_p[pos / 8] = 0; } self_p->buf_p[pos / 8] |= (uint8_t)(value << (7 - (pos % 8))); } static void encoder_append_bytes(struct encoder_t *self_p, const uint8_t *buf_p, size_t size) { size_t i; ssize_t pos; size_t byte_pos; size_t pos_in_byte; pos = encoder_alloc(self_p, 8u * size); if (pos < 0) { return; } byte_pos = ((size_t)pos / 8u); pos_in_byte = ((size_t)pos % 8u); if (pos_in_byte == 0u) { (void)memcpy(&self_p->buf_p[byte_pos], buf_p, size); } else { for (i = 0; i < size; i++) { self_p->buf_p[byte_pos + i] |= (buf_p[i] >> pos_in_byte); self_p->buf_p[byte_pos + i + 1] = (buf_p[i] << (8u - pos_in_byte)); } } } static void encoder_append_uint8(struct encoder_t *self_p, uint8_t value) { uint8_t buf[1]; buf[0] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); } static void encoder_append_uint16(struct encoder_t *self_p, uint16_t value) { uint8_t buf[2]; buf[0] = (uint8_t)(value >> 8); buf[1] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); } static void encoder_append_uint32(struct encoder_t *self_p, uint32_t value) { uint8_t buf[4]; buf[0] = (uint8_t)(value >> 24); buf[1] = (uint8_t)(value >> 16); buf[2] = (uint8_t)(value >> 8); buf[3] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); } static void encoder_append_uint64(struct encoder_t *self_p, uint64_t value) { uint8_t buf[8]; buf[0] = (uint8_t)(value >> 56); buf[1] = (uint8_t)(value >> 48); buf[2] = (uint8_t)(value >> 40); buf[3] = (uint8_t)(value >> 32); buf[4] = (uint8_t)(value >> 24); buf[5] = (uint8_t)(value >> 16); buf[6] = (uint8_t)(value >> 8); buf[7] = (uint8_t)value; encoder_append_bytes(self_p, &buf[0], sizeof(buf)); } static void encoder_append_int8(struct encoder_t *self_p, int8_t value) { encoder_append_uint8(self_p, (uint8_t)value + 128); } static void encoder_append_int16(struct encoder_t *self_p, int16_t value) { encoder_append_uint16(self_p, (uint16_t)value + 32768); } static void encoder_append_int32(struct encoder_t *self_p, int32_t value) { encoder_append_uint32(self_p, (uint32_t)value + 2147483648); } static void encoder_append_int64(struct encoder_t *self_p, int64_t value) { uint64_t u64_value; u64_value = (uint64_t)value; u64_value += 9223372036854775808ull; encoder_append_uint64(self_p, u64_value); } static void encoder_append_bool(struct encoder_t *self_p, bool value) { encoder_append_bit(self_p, value ? 1 : 0); } static void encoder_append_non_negative_binary_integer(struct encoder_t *self_p, uint64_t value, size_t size) { size_t i; for (i = 0; i < size; i++) { encoder_append_bit(self_p, (value >> (size - i - 1)) & 1); } } static void decoder_init(struct decoder_t *self_p, const uint8_t *buf_p, size_t size) { self_p->buf_p = buf_p; self_p->size = (8 * (ssize_t)size); self_p->pos = 0; } static ssize_t decoder_get_result(const struct decoder_t *self_p) { if (self_p->size >= 0) { return ((self_p->pos + 7) / 8); } else { return (self_p->pos); } } static void decoder_abort(struct decoder_t *self_p, ssize_t error) { if (self_p->size >= 0) { self_p->size = -error; self_p->pos = -error; } } static ssize_t decoder_free(struct decoder_t *self_p, size_t size) { ssize_t pos; if ((self_p->pos + (ssize_t)size) <= self_p->size) { pos = self_p->pos; self_p->pos += (ssize_t)size; } else { pos = -EOUTOFDATA; decoder_abort(self_p, EOUTOFDATA); } return (pos); } static int decoder_read_bit(struct decoder_t *self_p) { ssize_t pos; int value; pos = decoder_free(self_p, 1); if (pos >= 0) { value = ((self_p->buf_p[pos / 8] >> (7 - (pos % 8))) & 1); } else { value = 0; } return (value); } static void decoder_read_bytes(struct decoder_t *self_p, uint8_t *buf_p, size_t size) { size_t i; ssize_t pos; size_t byte_pos; size_t pos_in_byte; pos = decoder_free(self_p, 8u * size); if (pos < 0) { return; } byte_pos = ((size_t)pos / 8u); pos_in_byte = ((size_t)pos % 8u); if (pos_in_byte == 0) { (void)memcpy(buf_p, &self_p->buf_p[byte_pos], size); } else { for (i = 0; i < size; i++) { buf_p[i] = (self_p->buf_p[byte_pos + i] << pos_in_byte); buf_p[i] |= (self_p->buf_p[byte_pos + i + 1] >> (8u - pos_in_byte)); } } } static uint8_t decoder_read_uint8(struct decoder_t *self_p) { uint8_t value = 0; decoder_read_bytes(self_p, &value, sizeof(value)); return (value); } static uint16_t decoder_read_uint16(struct decoder_t *self_p) { uint8_t buf[2]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (((uint16_t)buf[0] << 8) | (uint16_t)buf[1]); } static uint32_t decoder_read_uint32(struct decoder_t *self_p) { uint8_t buf[4]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]); } static uint64_t decoder_read_uint64(struct decoder_t *self_p) { uint8_t buf[8]; decoder_read_bytes(self_p, &buf[0], sizeof(buf)); return (((uint64_t)buf[0] << 56) | ((uint64_t)buf[1] << 48) | ((uint64_t)buf[2] << 40) | ((uint64_t)buf[3] << 32) | ((uint64_t)buf[4] << 24) | ((uint64_t)buf[5] << 16) | ((uint64_t)buf[6] << 8) | (uint64_t)buf[7]); } static int8_t decoder_read_int8(struct decoder_t *self_p) { int8_t value; value = (int8_t)decoder_read_uint8(self_p); value -= 128; return (value); } static int16_t decoder_read_int16(struct decoder_t *self_p) { int16_t value; value = (int16_t)decoder_read_uint16(self_p); value -= 32768; return (value); } static int32_t decoder_read_int32(struct decoder_t *self_p) { int32_t value; value = (int32_t)decoder_read_uint32(self_p); value -= 2147483648; return (value); } static int64_t decoder_read_int64(struct decoder_t *self_p) { uint64_t value; value = decoder_read_uint64(self_p); value -= 9223372036854775808ull; return ((int64_t)value); } static bool decoder_read_bool(struct decoder_t *self_p) { return (decoder_read_bit(self_p) != 0); } static uint64_t decoder_read_non_negative_binary_integer(struct decoder_t *self_p, size_t size) { size_t i; uint64_t value; value = 0; for (i = 0; i < size; i++) { value <<= 1; value |= (uint64_t)decoder_read_bit(self_p); } return (value); } static void uper_c_source_a_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_a_t *src_p) { encoder_append_int8(encoder_p, src_p->a); encoder_append_int16(encoder_p, src_p->b); encoder_append_int32(encoder_p, src_p->c); encoder_append_int64(encoder_p, src_p->d); encoder_append_uint8(encoder_p, src_p->e); encoder_append_uint16(encoder_p, src_p->f); encoder_append_uint32(encoder_p, src_p->g); encoder_append_uint64(encoder_p, src_p->h); encoder_append_bool(encoder_p, src_p->i); encoder_append_bytes(encoder_p, &src_p->j.buf[0], 11); } static void uper_c_source_a_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_a_t *dst_p) { dst_p->a = decoder_read_int8(decoder_p); dst_p->b = decoder_read_int16(decoder_p); dst_p->c = decoder_read_int32(decoder_p); dst_p->d = decoder_read_int64(decoder_p); dst_p->e = decoder_read_uint8(decoder_p); dst_p->f = decoder_read_uint16(decoder_p); dst_p->g = decoder_read_uint32(decoder_p); dst_p->h = decoder_read_uint64(decoder_p); dst_p->i = decoder_read_bool(decoder_p); decoder_read_bytes(decoder_p, &dst_p->j.buf[0], 11); } static void uper_c_source_ab_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_ab_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->a - -1), 1); encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->b - 10000), 10); } static void uper_c_source_ab_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_ab_t *dst_p) { dst_p->a = (int8_t)decoder_read_non_negative_binary_integer( decoder_p, 1); dst_p->a += -1; dst_p->b = (uint16_t)decoder_read_non_negative_binary_integer( decoder_p, 10); dst_p->b += 10000; } static void uper_c_source_q_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_q_t *src_p) { switch (src_p->choice) { case uper_c_source_q_choice_c001_e: encoder_append_non_negative_binary_integer(encoder_p, 0, 9); encoder_append_bool(encoder_p, src_p->value.c001); break; case uper_c_source_q_choice_c002_e: encoder_append_non_negative_binary_integer(encoder_p, 1, 9); encoder_append_bool(encoder_p, src_p->value.c002); break; case uper_c_source_q_choice_c003_e: encoder_append_non_negative_binary_integer(encoder_p, 2, 9); encoder_append_bool(encoder_p, src_p->value.c003); break; case uper_c_source_q_choice_c004_e: encoder_append_non_negative_binary_integer(encoder_p, 3, 9); encoder_append_bool(encoder_p, src_p->value.c004); break; case uper_c_source_q_choice_c005_e: encoder_append_non_negative_binary_integer(encoder_p, 4, 9); encoder_append_bool(encoder_p, src_p->value.c005); break; case uper_c_source_q_choice_c006_e: encoder_append_non_negative_binary_integer(encoder_p, 5, 9); encoder_append_bool(encoder_p, src_p->value.c006); break; case uper_c_source_q_choice_c007_e: encoder_append_non_negative_binary_integer(encoder_p, 6, 9); encoder_append_bool(encoder_p, src_p->value.c007); break; case uper_c_source_q_choice_c008_e: encoder_append_non_negative_binary_integer(encoder_p, 7, 9); encoder_append_bool(encoder_p, src_p->value.c008); break; case uper_c_source_q_choice_c009_e: encoder_append_non_negative_binary_integer(encoder_p, 8, 9); encoder_append_bool(encoder_p, src_p->value.c009); break; case uper_c_source_q_choice_c010_e: encoder_append_non_negative_binary_integer(encoder_p, 9, 9); encoder_append_bool(encoder_p, src_p->value.c010); break; case uper_c_source_q_choice_c011_e: encoder_append_non_negative_binary_integer(encoder_p, 10, 9); encoder_append_bool(encoder_p, src_p->value.c011); break; case uper_c_source_q_choice_c012_e: encoder_append_non_negative_binary_integer(encoder_p, 11, 9); encoder_append_bool(encoder_p, src_p->value.c012); break; case uper_c_source_q_choice_c013_e: encoder_append_non_negative_binary_integer(encoder_p, 12, 9); encoder_append_bool(encoder_p, src_p->value.c013); break; case uper_c_source_q_choice_c014_e: encoder_append_non_negative_binary_integer(encoder_p, 13, 9); encoder_append_bool(encoder_p, src_p->value.c014); break; case uper_c_source_q_choice_c015_e: encoder_append_non_negative_binary_integer(encoder_p, 14, 9); encoder_append_bool(encoder_p, src_p->value.c015); break; case uper_c_source_q_choice_c016_e: encoder_append_non_negative_binary_integer(encoder_p, 15, 9); encoder_append_bool(encoder_p, src_p->value.c016); break; case uper_c_source_q_choice_c017_e: encoder_append_non_negative_binary_integer(encoder_p, 16, 9); encoder_append_bool(encoder_p, src_p->value.c017); break; case uper_c_source_q_choice_c018_e: encoder_append_non_negative_binary_integer(encoder_p, 17, 9); encoder_append_bool(encoder_p, src_p->value.c018); break; case uper_c_source_q_choice_c019_e: encoder_append_non_negative_binary_integer(encoder_p, 18, 9); encoder_append_bool(encoder_p, src_p->value.c019); break; case uper_c_source_q_choice_c020_e: encoder_append_non_negative_binary_integer(encoder_p, 19, 9); encoder_append_bool(encoder_p, src_p->value.c020); break; case uper_c_source_q_choice_c021_e: encoder_append_non_negative_binary_integer(encoder_p, 20, 9); encoder_append_bool(encoder_p, src_p->value.c021); break; case uper_c_source_q_choice_c022_e: encoder_append_non_negative_binary_integer(encoder_p, 21, 9); encoder_append_bool(encoder_p, src_p->value.c022); break; case uper_c_source_q_choice_c023_e: encoder_append_non_negative_binary_integer(encoder_p, 22, 9); encoder_append_bool(encoder_p, src_p->value.c023); break; case uper_c_source_q_choice_c024_e: encoder_append_non_negative_binary_integer(encoder_p, 23, 9); encoder_append_bool(encoder_p, src_p->value.c024); break; case uper_c_source_q_choice_c025_e: encoder_append_non_negative_binary_integer(encoder_p, 24, 9); encoder_append_bool(encoder_p, src_p->value.c025); break; case uper_c_source_q_choice_c026_e: encoder_append_non_negative_binary_integer(encoder_p, 25, 9); encoder_append_bool(encoder_p, src_p->value.c026); break; case uper_c_source_q_choice_c027_e: encoder_append_non_negative_binary_integer(encoder_p, 26, 9); encoder_append_bool(encoder_p, src_p->value.c027); break; case uper_c_source_q_choice_c028_e: encoder_append_non_negative_binary_integer(encoder_p, 27, 9); encoder_append_bool(encoder_p, src_p->value.c028); break; case uper_c_source_q_choice_c029_e: encoder_append_non_negative_binary_integer(encoder_p, 28, 9); encoder_append_bool(encoder_p, src_p->value.c029); break; case uper_c_source_q_choice_c030_e: encoder_append_non_negative_binary_integer(encoder_p, 29, 9); encoder_append_bool(encoder_p, src_p->value.c030); break; case uper_c_source_q_choice_c031_e: encoder_append_non_negative_binary_integer(encoder_p, 30, 9); encoder_append_bool(encoder_p, src_p->value.c031); break; case uper_c_source_q_choice_c032_e: encoder_append_non_negative_binary_integer(encoder_p, 31, 9); encoder_append_bool(encoder_p, src_p->value.c032); break; case uper_c_source_q_choice_c033_e: encoder_append_non_negative_binary_integer(encoder_p, 32, 9); encoder_append_bool(encoder_p, src_p->value.c033); break; case uper_c_source_q_choice_c034_e: encoder_append_non_negative_binary_integer(encoder_p, 33, 9); encoder_append_bool(encoder_p, src_p->value.c034); break; case uper_c_source_q_choice_c035_e: encoder_append_non_negative_binary_integer(encoder_p, 34, 9); encoder_append_bool(encoder_p, src_p->value.c035); break; case uper_c_source_q_choice_c036_e: encoder_append_non_negative_binary_integer(encoder_p, 35, 9); encoder_append_bool(encoder_p, src_p->value.c036); break; case uper_c_source_q_choice_c037_e: encoder_append_non_negative_binary_integer(encoder_p, 36, 9); encoder_append_bool(encoder_p, src_p->value.c037); break; case uper_c_source_q_choice_c038_e: encoder_append_non_negative_binary_integer(encoder_p, 37, 9); encoder_append_bool(encoder_p, src_p->value.c038); break; case uper_c_source_q_choice_c039_e: encoder_append_non_negative_binary_integer(encoder_p, 38, 9); encoder_append_bool(encoder_p, src_p->value.c039); break; case uper_c_source_q_choice_c040_e: encoder_append_non_negative_binary_integer(encoder_p, 39, 9); encoder_append_bool(encoder_p, src_p->value.c040); break; case uper_c_source_q_choice_c041_e: encoder_append_non_negative_binary_integer(encoder_p, 40, 9); encoder_append_bool(encoder_p, src_p->value.c041); break; case uper_c_source_q_choice_c042_e: encoder_append_non_negative_binary_integer(encoder_p, 41, 9); encoder_append_bool(encoder_p, src_p->value.c042); break; case uper_c_source_q_choice_c043_e: encoder_append_non_negative_binary_integer(encoder_p, 42, 9); encoder_append_bool(encoder_p, src_p->value.c043); break; case uper_c_source_q_choice_c044_e: encoder_append_non_negative_binary_integer(encoder_p, 43, 9); encoder_append_bool(encoder_p, src_p->value.c044); break; case uper_c_source_q_choice_c045_e: encoder_append_non_negative_binary_integer(encoder_p, 44, 9); encoder_append_bool(encoder_p, src_p->value.c045); break; case uper_c_source_q_choice_c046_e: encoder_append_non_negative_binary_integer(encoder_p, 45, 9); encoder_append_bool(encoder_p, src_p->value.c046); break; case uper_c_source_q_choice_c047_e: encoder_append_non_negative_binary_integer(encoder_p, 46, 9); encoder_append_bool(encoder_p, src_p->value.c047); break; case uper_c_source_q_choice_c048_e: encoder_append_non_negative_binary_integer(encoder_p, 47, 9); encoder_append_bool(encoder_p, src_p->value.c048); break; case uper_c_source_q_choice_c049_e: encoder_append_non_negative_binary_integer(encoder_p, 48, 9); encoder_append_bool(encoder_p, src_p->value.c049); break; case uper_c_source_q_choice_c050_e: encoder_append_non_negative_binary_integer(encoder_p, 49, 9); encoder_append_bool(encoder_p, src_p->value.c050); break; case uper_c_source_q_choice_c051_e: encoder_append_non_negative_binary_integer(encoder_p, 50, 9); encoder_append_bool(encoder_p, src_p->value.c051); break; case uper_c_source_q_choice_c052_e: encoder_append_non_negative_binary_integer(encoder_p, 51, 9); encoder_append_bool(encoder_p, src_p->value.c052); break; case uper_c_source_q_choice_c053_e: encoder_append_non_negative_binary_integer(encoder_p, 52, 9); encoder_append_bool(encoder_p, src_p->value.c053); break; case uper_c_source_q_choice_c054_e: encoder_append_non_negative_binary_integer(encoder_p, 53, 9); encoder_append_bool(encoder_p, src_p->value.c054); break; case uper_c_source_q_choice_c055_e: encoder_append_non_negative_binary_integer(encoder_p, 54, 9); encoder_append_bool(encoder_p, src_p->value.c055); break; case uper_c_source_q_choice_c056_e: encoder_append_non_negative_binary_integer(encoder_p, 55, 9); encoder_append_bool(encoder_p, src_p->value.c056); break; case uper_c_source_q_choice_c057_e: encoder_append_non_negative_binary_integer(encoder_p, 56, 9); encoder_append_bool(encoder_p, src_p->value.c057); break; case uper_c_source_q_choice_c058_e: encoder_append_non_negative_binary_integer(encoder_p, 57, 9); encoder_append_bool(encoder_p, src_p->value.c058); break; case uper_c_source_q_choice_c059_e: encoder_append_non_negative_binary_integer(encoder_p, 58, 9); encoder_append_bool(encoder_p, src_p->value.c059); break; case uper_c_source_q_choice_c060_e: encoder_append_non_negative_binary_integer(encoder_p, 59, 9); encoder_append_bool(encoder_p, src_p->value.c060); break; case uper_c_source_q_choice_c061_e: encoder_append_non_negative_binary_integer(encoder_p, 60, 9); encoder_append_bool(encoder_p, src_p->value.c061); break; case uper_c_source_q_choice_c062_e: encoder_append_non_negative_binary_integer(encoder_p, 61, 9); encoder_append_bool(encoder_p, src_p->value.c062); break; case uper_c_source_q_choice_c063_e: encoder_append_non_negative_binary_integer(encoder_p, 62, 9); encoder_append_bool(encoder_p, src_p->value.c063); break; case uper_c_source_q_choice_c064_e: encoder_append_non_negative_binary_integer(encoder_p, 63, 9); encoder_append_bool(encoder_p, src_p->value.c064); break; case uper_c_source_q_choice_c065_e: encoder_append_non_negative_binary_integer(encoder_p, 64, 9); encoder_append_bool(encoder_p, src_p->value.c065); break; case uper_c_source_q_choice_c066_e: encoder_append_non_negative_binary_integer(encoder_p, 65, 9); encoder_append_bool(encoder_p, src_p->value.c066); break; case uper_c_source_q_choice_c067_e: encoder_append_non_negative_binary_integer(encoder_p, 66, 9); encoder_append_bool(encoder_p, src_p->value.c067); break; case uper_c_source_q_choice_c068_e: encoder_append_non_negative_binary_integer(encoder_p, 67, 9); encoder_append_bool(encoder_p, src_p->value.c068); break; case uper_c_source_q_choice_c069_e: encoder_append_non_negative_binary_integer(encoder_p, 68, 9); encoder_append_bool(encoder_p, src_p->value.c069); break; case uper_c_source_q_choice_c070_e: encoder_append_non_negative_binary_integer(encoder_p, 69, 9); encoder_append_bool(encoder_p, src_p->value.c070); break; case uper_c_source_q_choice_c071_e: encoder_append_non_negative_binary_integer(encoder_p, 70, 9); encoder_append_bool(encoder_p, src_p->value.c071); break; case uper_c_source_q_choice_c072_e: encoder_append_non_negative_binary_integer(encoder_p, 71, 9); encoder_append_bool(encoder_p, src_p->value.c072); break; case uper_c_source_q_choice_c073_e: encoder_append_non_negative_binary_integer(encoder_p, 72, 9); encoder_append_bool(encoder_p, src_p->value.c073); break; case uper_c_source_q_choice_c074_e: encoder_append_non_negative_binary_integer(encoder_p, 73, 9); encoder_append_bool(encoder_p, src_p->value.c074); break; case uper_c_source_q_choice_c075_e: encoder_append_non_negative_binary_integer(encoder_p, 74, 9); encoder_append_bool(encoder_p, src_p->value.c075); break; case uper_c_source_q_choice_c076_e: encoder_append_non_negative_binary_integer(encoder_p, 75, 9); encoder_append_bool(encoder_p, src_p->value.c076); break; case uper_c_source_q_choice_c077_e: encoder_append_non_negative_binary_integer(encoder_p, 76, 9); encoder_append_bool(encoder_p, src_p->value.c077); break; case uper_c_source_q_choice_c078_e: encoder_append_non_negative_binary_integer(encoder_p, 77, 9); encoder_append_bool(encoder_p, src_p->value.c078); break; case uper_c_source_q_choice_c079_e: encoder_append_non_negative_binary_integer(encoder_p, 78, 9); encoder_append_bool(encoder_p, src_p->value.c079); break; case uper_c_source_q_choice_c080_e: encoder_append_non_negative_binary_integer(encoder_p, 79, 9); encoder_append_bool(encoder_p, src_p->value.c080); break; case uper_c_source_q_choice_c081_e: encoder_append_non_negative_binary_integer(encoder_p, 80, 9); encoder_append_bool(encoder_p, src_p->value.c081); break; case uper_c_source_q_choice_c082_e: encoder_append_non_negative_binary_integer(encoder_p, 81, 9); encoder_append_bool(encoder_p, src_p->value.c082); break; case uper_c_source_q_choice_c083_e: encoder_append_non_negative_binary_integer(encoder_p, 82, 9); encoder_append_bool(encoder_p, src_p->value.c083); break; case uper_c_source_q_choice_c084_e: encoder_append_non_negative_binary_integer(encoder_p, 83, 9); encoder_append_bool(encoder_p, src_p->value.c084); break; case uper_c_source_q_choice_c085_e: encoder_append_non_negative_binary_integer(encoder_p, 84, 9); encoder_append_bool(encoder_p, src_p->value.c085); break; case uper_c_source_q_choice_c086_e: encoder_append_non_negative_binary_integer(encoder_p, 85, 9); encoder_append_bool(encoder_p, src_p->value.c086); break; case uper_c_source_q_choice_c087_e: encoder_append_non_negative_binary_integer(encoder_p, 86, 9); encoder_append_bool(encoder_p, src_p->value.c087); break; case uper_c_source_q_choice_c088_e: encoder_append_non_negative_binary_integer(encoder_p, 87, 9); encoder_append_bool(encoder_p, src_p->value.c088); break; case uper_c_source_q_choice_c089_e: encoder_append_non_negative_binary_integer(encoder_p, 88, 9); encoder_append_bool(encoder_p, src_p->value.c089); break; case uper_c_source_q_choice_c090_e: encoder_append_non_negative_binary_integer(encoder_p, 89, 9); encoder_append_bool(encoder_p, src_p->value.c090); break; case uper_c_source_q_choice_c091_e: encoder_append_non_negative_binary_integer(encoder_p, 90, 9); encoder_append_bool(encoder_p, src_p->value.c091); break; case uper_c_source_q_choice_c092_e: encoder_append_non_negative_binary_integer(encoder_p, 91, 9); encoder_append_bool(encoder_p, src_p->value.c092); break; case uper_c_source_q_choice_c093_e: encoder_append_non_negative_binary_integer(encoder_p, 92, 9); encoder_append_bool(encoder_p, src_p->value.c093); break; case uper_c_source_q_choice_c094_e: encoder_append_non_negative_binary_integer(encoder_p, 93, 9); encoder_append_bool(encoder_p, src_p->value.c094); break; case uper_c_source_q_choice_c095_e: encoder_append_non_negative_binary_integer(encoder_p, 94, 9); encoder_append_bool(encoder_p, src_p->value.c095); break; case uper_c_source_q_choice_c096_e: encoder_append_non_negative_binary_integer(encoder_p, 95, 9); encoder_append_bool(encoder_p, src_p->value.c096); break; case uper_c_source_q_choice_c097_e: encoder_append_non_negative_binary_integer(encoder_p, 96, 9); encoder_append_bool(encoder_p, src_p->value.c097); break; case uper_c_source_q_choice_c098_e: encoder_append_non_negative_binary_integer(encoder_p, 97, 9); encoder_append_bool(encoder_p, src_p->value.c098); break; case uper_c_source_q_choice_c099_e: encoder_append_non_negative_binary_integer(encoder_p, 98, 9); encoder_append_bool(encoder_p, src_p->value.c099); break; case uper_c_source_q_choice_c100_e: encoder_append_non_negative_binary_integer(encoder_p, 99, 9); encoder_append_bool(encoder_p, src_p->value.c100); break; case uper_c_source_q_choice_c101_e: encoder_append_non_negative_binary_integer(encoder_p, 100, 9); encoder_append_bool(encoder_p, src_p->value.c101); break; case uper_c_source_q_choice_c102_e: encoder_append_non_negative_binary_integer(encoder_p, 101, 9); encoder_append_bool(encoder_p, src_p->value.c102); break; case uper_c_source_q_choice_c103_e: encoder_append_non_negative_binary_integer(encoder_p, 102, 9); encoder_append_bool(encoder_p, src_p->value.c103); break; case uper_c_source_q_choice_c104_e: encoder_append_non_negative_binary_integer(encoder_p, 103, 9); encoder_append_bool(encoder_p, src_p->value.c104); break; case uper_c_source_q_choice_c105_e: encoder_append_non_negative_binary_integer(encoder_p, 104, 9); encoder_append_bool(encoder_p, src_p->value.c105); break; case uper_c_source_q_choice_c106_e: encoder_append_non_negative_binary_integer(encoder_p, 105, 9); encoder_append_bool(encoder_p, src_p->value.c106); break; case uper_c_source_q_choice_c107_e: encoder_append_non_negative_binary_integer(encoder_p, 106, 9); encoder_append_bool(encoder_p, src_p->value.c107); break; case uper_c_source_q_choice_c108_e: encoder_append_non_negative_binary_integer(encoder_p, 107, 9); encoder_append_bool(encoder_p, src_p->value.c108); break; case uper_c_source_q_choice_c109_e: encoder_append_non_negative_binary_integer(encoder_p, 108, 9); encoder_append_bool(encoder_p, src_p->value.c109); break; case uper_c_source_q_choice_c110_e: encoder_append_non_negative_binary_integer(encoder_p, 109, 9); encoder_append_bool(encoder_p, src_p->value.c110); break; case uper_c_source_q_choice_c111_e: encoder_append_non_negative_binary_integer(encoder_p, 110, 9); encoder_append_bool(encoder_p, src_p->value.c111); break; case uper_c_source_q_choice_c112_e: encoder_append_non_negative_binary_integer(encoder_p, 111, 9); encoder_append_bool(encoder_p, src_p->value.c112); break; case uper_c_source_q_choice_c113_e: encoder_append_non_negative_binary_integer(encoder_p, 112, 9); encoder_append_bool(encoder_p, src_p->value.c113); break; case uper_c_source_q_choice_c114_e: encoder_append_non_negative_binary_integer(encoder_p, 113, 9); encoder_append_bool(encoder_p, src_p->value.c114); break; case uper_c_source_q_choice_c115_e: encoder_append_non_negative_binary_integer(encoder_p, 114, 9); encoder_append_bool(encoder_p, src_p->value.c115); break; case uper_c_source_q_choice_c116_e: encoder_append_non_negative_binary_integer(encoder_p, 115, 9); encoder_append_bool(encoder_p, src_p->value.c116); break; case uper_c_source_q_choice_c117_e: encoder_append_non_negative_binary_integer(encoder_p, 116, 9); encoder_append_bool(encoder_p, src_p->value.c117); break; case uper_c_source_q_choice_c118_e: encoder_append_non_negative_binary_integer(encoder_p, 117, 9); encoder_append_bool(encoder_p, src_p->value.c118); break; case uper_c_source_q_choice_c119_e: encoder_append_non_negative_binary_integer(encoder_p, 118, 9); encoder_append_bool(encoder_p, src_p->value.c119); break; case uper_c_source_q_choice_c120_e: encoder_append_non_negative_binary_integer(encoder_p, 119, 9); encoder_append_bool(encoder_p, src_p->value.c120); break; case uper_c_source_q_choice_c121_e: encoder_append_non_negative_binary_integer(encoder_p, 120, 9); encoder_append_bool(encoder_p, src_p->value.c121); break; case uper_c_source_q_choice_c122_e: encoder_append_non_negative_binary_integer(encoder_p, 121, 9); encoder_append_bool(encoder_p, src_p->value.c122); break; case uper_c_source_q_choice_c123_e: encoder_append_non_negative_binary_integer(encoder_p, 122, 9); encoder_append_bool(encoder_p, src_p->value.c123); break; case uper_c_source_q_choice_c124_e: encoder_append_non_negative_binary_integer(encoder_p, 123, 9); encoder_append_bool(encoder_p, src_p->value.c124); break; case uper_c_source_q_choice_c125_e: encoder_append_non_negative_binary_integer(encoder_p, 124, 9); encoder_append_bool(encoder_p, src_p->value.c125); break; case uper_c_source_q_choice_c126_e: encoder_append_non_negative_binary_integer(encoder_p, 125, 9); encoder_append_bool(encoder_p, src_p->value.c126); break; case uper_c_source_q_choice_c127_e: encoder_append_non_negative_binary_integer(encoder_p, 126, 9); encoder_append_bool(encoder_p, src_p->value.c127); break; case uper_c_source_q_choice_c128_e: encoder_append_non_negative_binary_integer(encoder_p, 127, 9); encoder_append_bool(encoder_p, src_p->value.c128); break; case uper_c_source_q_choice_c129_e: encoder_append_non_negative_binary_integer(encoder_p, 128, 9); encoder_append_bool(encoder_p, src_p->value.c129); break; case uper_c_source_q_choice_c130_e: encoder_append_non_negative_binary_integer(encoder_p, 129, 9); encoder_append_bool(encoder_p, src_p->value.c130); break; case uper_c_source_q_choice_c131_e: encoder_append_non_negative_binary_integer(encoder_p, 130, 9); encoder_append_bool(encoder_p, src_p->value.c131); break; case uper_c_source_q_choice_c132_e: encoder_append_non_negative_binary_integer(encoder_p, 131, 9); encoder_append_bool(encoder_p, src_p->value.c132); break; case uper_c_source_q_choice_c133_e: encoder_append_non_negative_binary_integer(encoder_p, 132, 9); encoder_append_bool(encoder_p, src_p->value.c133); break; case uper_c_source_q_choice_c134_e: encoder_append_non_negative_binary_integer(encoder_p, 133, 9); encoder_append_bool(encoder_p, src_p->value.c134); break; case uper_c_source_q_choice_c135_e: encoder_append_non_negative_binary_integer(encoder_p, 134, 9); encoder_append_bool(encoder_p, src_p->value.c135); break; case uper_c_source_q_choice_c136_e: encoder_append_non_negative_binary_integer(encoder_p, 135, 9); encoder_append_bool(encoder_p, src_p->value.c136); break; case uper_c_source_q_choice_c137_e: encoder_append_non_negative_binary_integer(encoder_p, 136, 9); encoder_append_bool(encoder_p, src_p->value.c137); break; case uper_c_source_q_choice_c138_e: encoder_append_non_negative_binary_integer(encoder_p, 137, 9); encoder_append_bool(encoder_p, src_p->value.c138); break; case uper_c_source_q_choice_c139_e: encoder_append_non_negative_binary_integer(encoder_p, 138, 9); encoder_append_bool(encoder_p, src_p->value.c139); break; case uper_c_source_q_choice_c140_e: encoder_append_non_negative_binary_integer(encoder_p, 139, 9); encoder_append_bool(encoder_p, src_p->value.c140); break; case uper_c_source_q_choice_c141_e: encoder_append_non_negative_binary_integer(encoder_p, 140, 9); encoder_append_bool(encoder_p, src_p->value.c141); break; case uper_c_source_q_choice_c142_e: encoder_append_non_negative_binary_integer(encoder_p, 141, 9); encoder_append_bool(encoder_p, src_p->value.c142); break; case uper_c_source_q_choice_c143_e: encoder_append_non_negative_binary_integer(encoder_p, 142, 9); encoder_append_bool(encoder_p, src_p->value.c143); break; case uper_c_source_q_choice_c144_e: encoder_append_non_negative_binary_integer(encoder_p, 143, 9); encoder_append_bool(encoder_p, src_p->value.c144); break; case uper_c_source_q_choice_c145_e: encoder_append_non_negative_binary_integer(encoder_p, 144, 9); encoder_append_bool(encoder_p, src_p->value.c145); break; case uper_c_source_q_choice_c146_e: encoder_append_non_negative_binary_integer(encoder_p, 145, 9); encoder_append_bool(encoder_p, src_p->value.c146); break; case uper_c_source_q_choice_c147_e: encoder_append_non_negative_binary_integer(encoder_p, 146, 9); encoder_append_bool(encoder_p, src_p->value.c147); break; case uper_c_source_q_choice_c148_e: encoder_append_non_negative_binary_integer(encoder_p, 147, 9); encoder_append_bool(encoder_p, src_p->value.c148); break; case uper_c_source_q_choice_c149_e: encoder_append_non_negative_binary_integer(encoder_p, 148, 9); encoder_append_bool(encoder_p, src_p->value.c149); break; case uper_c_source_q_choice_c150_e: encoder_append_non_negative_binary_integer(encoder_p, 149, 9); encoder_append_bool(encoder_p, src_p->value.c150); break; case uper_c_source_q_choice_c151_e: encoder_append_non_negative_binary_integer(encoder_p, 150, 9); encoder_append_bool(encoder_p, src_p->value.c151); break; case uper_c_source_q_choice_c152_e: encoder_append_non_negative_binary_integer(encoder_p, 151, 9); encoder_append_bool(encoder_p, src_p->value.c152); break; case uper_c_source_q_choice_c153_e: encoder_append_non_negative_binary_integer(encoder_p, 152, 9); encoder_append_bool(encoder_p, src_p->value.c153); break; case uper_c_source_q_choice_c154_e: encoder_append_non_negative_binary_integer(encoder_p, 153, 9); encoder_append_bool(encoder_p, src_p->value.c154); break; case uper_c_source_q_choice_c155_e: encoder_append_non_negative_binary_integer(encoder_p, 154, 9); encoder_append_bool(encoder_p, src_p->value.c155); break; case uper_c_source_q_choice_c156_e: encoder_append_non_negative_binary_integer(encoder_p, 155, 9); encoder_append_bool(encoder_p, src_p->value.c156); break; case uper_c_source_q_choice_c157_e: encoder_append_non_negative_binary_integer(encoder_p, 156, 9); encoder_append_bool(encoder_p, src_p->value.c157); break; case uper_c_source_q_choice_c158_e: encoder_append_non_negative_binary_integer(encoder_p, 157, 9); encoder_append_bool(encoder_p, src_p->value.c158); break; case uper_c_source_q_choice_c159_e: encoder_append_non_negative_binary_integer(encoder_p, 158, 9); encoder_append_bool(encoder_p, src_p->value.c159); break; case uper_c_source_q_choice_c160_e: encoder_append_non_negative_binary_integer(encoder_p, 159, 9); encoder_append_bool(encoder_p, src_p->value.c160); break; case uper_c_source_q_choice_c161_e: encoder_append_non_negative_binary_integer(encoder_p, 160, 9); encoder_append_bool(encoder_p, src_p->value.c161); break; case uper_c_source_q_choice_c162_e: encoder_append_non_negative_binary_integer(encoder_p, 161, 9); encoder_append_bool(encoder_p, src_p->value.c162); break; case uper_c_source_q_choice_c163_e: encoder_append_non_negative_binary_integer(encoder_p, 162, 9); encoder_append_bool(encoder_p, src_p->value.c163); break; case uper_c_source_q_choice_c164_e: encoder_append_non_negative_binary_integer(encoder_p, 163, 9); encoder_append_bool(encoder_p, src_p->value.c164); break; case uper_c_source_q_choice_c165_e: encoder_append_non_negative_binary_integer(encoder_p, 164, 9); encoder_append_bool(encoder_p, src_p->value.c165); break; case uper_c_source_q_choice_c166_e: encoder_append_non_negative_binary_integer(encoder_p, 165, 9); encoder_append_bool(encoder_p, src_p->value.c166); break; case uper_c_source_q_choice_c167_e: encoder_append_non_negative_binary_integer(encoder_p, 166, 9); encoder_append_bool(encoder_p, src_p->value.c167); break; case uper_c_source_q_choice_c168_e: encoder_append_non_negative_binary_integer(encoder_p, 167, 9); encoder_append_bool(encoder_p, src_p->value.c168); break; case uper_c_source_q_choice_c169_e: encoder_append_non_negative_binary_integer(encoder_p, 168, 9); encoder_append_bool(encoder_p, src_p->value.c169); break; case uper_c_source_q_choice_c170_e: encoder_append_non_negative_binary_integer(encoder_p, 169, 9); encoder_append_bool(encoder_p, src_p->value.c170); break; case uper_c_source_q_choice_c171_e: encoder_append_non_negative_binary_integer(encoder_p, 170, 9); encoder_append_bool(encoder_p, src_p->value.c171); break; case uper_c_source_q_choice_c172_e: encoder_append_non_negative_binary_integer(encoder_p, 171, 9); encoder_append_bool(encoder_p, src_p->value.c172); break; case uper_c_source_q_choice_c173_e: encoder_append_non_negative_binary_integer(encoder_p, 172, 9); encoder_append_bool(encoder_p, src_p->value.c173); break; case uper_c_source_q_choice_c174_e: encoder_append_non_negative_binary_integer(encoder_p, 173, 9); encoder_append_bool(encoder_p, src_p->value.c174); break; case uper_c_source_q_choice_c175_e: encoder_append_non_negative_binary_integer(encoder_p, 174, 9); encoder_append_bool(encoder_p, src_p->value.c175); break; case uper_c_source_q_choice_c176_e: encoder_append_non_negative_binary_integer(encoder_p, 175, 9); encoder_append_bool(encoder_p, src_p->value.c176); break; case uper_c_source_q_choice_c177_e: encoder_append_non_negative_binary_integer(encoder_p, 176, 9); encoder_append_bool(encoder_p, src_p->value.c177); break; case uper_c_source_q_choice_c178_e: encoder_append_non_negative_binary_integer(encoder_p, 177, 9); encoder_append_bool(encoder_p, src_p->value.c178); break; case uper_c_source_q_choice_c179_e: encoder_append_non_negative_binary_integer(encoder_p, 178, 9); encoder_append_bool(encoder_p, src_p->value.c179); break; case uper_c_source_q_choice_c180_e: encoder_append_non_negative_binary_integer(encoder_p, 179, 9); encoder_append_bool(encoder_p, src_p->value.c180); break; case uper_c_source_q_choice_c181_e: encoder_append_non_negative_binary_integer(encoder_p, 180, 9); encoder_append_bool(encoder_p, src_p->value.c181); break; case uper_c_source_q_choice_c182_e: encoder_append_non_negative_binary_integer(encoder_p, 181, 9); encoder_append_bool(encoder_p, src_p->value.c182); break; case uper_c_source_q_choice_c183_e: encoder_append_non_negative_binary_integer(encoder_p, 182, 9); encoder_append_bool(encoder_p, src_p->value.c183); break; case uper_c_source_q_choice_c184_e: encoder_append_non_negative_binary_integer(encoder_p, 183, 9); encoder_append_bool(encoder_p, src_p->value.c184); break; case uper_c_source_q_choice_c185_e: encoder_append_non_negative_binary_integer(encoder_p, 184, 9); encoder_append_bool(encoder_p, src_p->value.c185); break; case uper_c_source_q_choice_c186_e: encoder_append_non_negative_binary_integer(encoder_p, 185, 9); encoder_append_bool(encoder_p, src_p->value.c186); break; case uper_c_source_q_choice_c187_e: encoder_append_non_negative_binary_integer(encoder_p, 186, 9); encoder_append_bool(encoder_p, src_p->value.c187); break; case uper_c_source_q_choice_c188_e: encoder_append_non_negative_binary_integer(encoder_p, 187, 9); encoder_append_bool(encoder_p, src_p->value.c188); break; case uper_c_source_q_choice_c189_e: encoder_append_non_negative_binary_integer(encoder_p, 188, 9); encoder_append_bool(encoder_p, src_p->value.c189); break; case uper_c_source_q_choice_c190_e: encoder_append_non_negative_binary_integer(encoder_p, 189, 9); encoder_append_bool(encoder_p, src_p->value.c190); break; case uper_c_source_q_choice_c191_e: encoder_append_non_negative_binary_integer(encoder_p, 190, 9); encoder_append_bool(encoder_p, src_p->value.c191); break; case uper_c_source_q_choice_c192_e: encoder_append_non_negative_binary_integer(encoder_p, 191, 9); encoder_append_bool(encoder_p, src_p->value.c192); break; case uper_c_source_q_choice_c193_e: encoder_append_non_negative_binary_integer(encoder_p, 192, 9); encoder_append_bool(encoder_p, src_p->value.c193); break; case uper_c_source_q_choice_c194_e: encoder_append_non_negative_binary_integer(encoder_p, 193, 9); encoder_append_bool(encoder_p, src_p->value.c194); break; case uper_c_source_q_choice_c195_e: encoder_append_non_negative_binary_integer(encoder_p, 194, 9); encoder_append_bool(encoder_p, src_p->value.c195); break; case uper_c_source_q_choice_c196_e: encoder_append_non_negative_binary_integer(encoder_p, 195, 9); encoder_append_bool(encoder_p, src_p->value.c196); break; case uper_c_source_q_choice_c197_e: encoder_append_non_negative_binary_integer(encoder_p, 196, 9); encoder_append_bool(encoder_p, src_p->value.c197); break; case uper_c_source_q_choice_c198_e: encoder_append_non_negative_binary_integer(encoder_p, 197, 9); encoder_append_bool(encoder_p, src_p->value.c198); break; case uper_c_source_q_choice_c199_e: encoder_append_non_negative_binary_integer(encoder_p, 198, 9); encoder_append_bool(encoder_p, src_p->value.c199); break; case uper_c_source_q_choice_c200_e: encoder_append_non_negative_binary_integer(encoder_p, 199, 9); encoder_append_bool(encoder_p, src_p->value.c200); break; case uper_c_source_q_choice_c201_e: encoder_append_non_negative_binary_integer(encoder_p, 200, 9); encoder_append_bool(encoder_p, src_p->value.c201); break; case uper_c_source_q_choice_c202_e: encoder_append_non_negative_binary_integer(encoder_p, 201, 9); encoder_append_bool(encoder_p, src_p->value.c202); break; case uper_c_source_q_choice_c203_e: encoder_append_non_negative_binary_integer(encoder_p, 202, 9); encoder_append_bool(encoder_p, src_p->value.c203); break; case uper_c_source_q_choice_c204_e: encoder_append_non_negative_binary_integer(encoder_p, 203, 9); encoder_append_bool(encoder_p, src_p->value.c204); break; case uper_c_source_q_choice_c205_e: encoder_append_non_negative_binary_integer(encoder_p, 204, 9); encoder_append_bool(encoder_p, src_p->value.c205); break; case uper_c_source_q_choice_c206_e: encoder_append_non_negative_binary_integer(encoder_p, 205, 9); encoder_append_bool(encoder_p, src_p->value.c206); break; case uper_c_source_q_choice_c207_e: encoder_append_non_negative_binary_integer(encoder_p, 206, 9); encoder_append_bool(encoder_p, src_p->value.c207); break; case uper_c_source_q_choice_c208_e: encoder_append_non_negative_binary_integer(encoder_p, 207, 9); encoder_append_bool(encoder_p, src_p->value.c208); break; case uper_c_source_q_choice_c209_e: encoder_append_non_negative_binary_integer(encoder_p, 208, 9); encoder_append_bool(encoder_p, src_p->value.c209); break; case uper_c_source_q_choice_c210_e: encoder_append_non_negative_binary_integer(encoder_p, 209, 9); encoder_append_bool(encoder_p, src_p->value.c210); break; case uper_c_source_q_choice_c211_e: encoder_append_non_negative_binary_integer(encoder_p, 210, 9); encoder_append_bool(encoder_p, src_p->value.c211); break; case uper_c_source_q_choice_c212_e: encoder_append_non_negative_binary_integer(encoder_p, 211, 9); encoder_append_bool(encoder_p, src_p->value.c212); break; case uper_c_source_q_choice_c213_e: encoder_append_non_negative_binary_integer(encoder_p, 212, 9); encoder_append_bool(encoder_p, src_p->value.c213); break; case uper_c_source_q_choice_c214_e: encoder_append_non_negative_binary_integer(encoder_p, 213, 9); encoder_append_bool(encoder_p, src_p->value.c214); break; case uper_c_source_q_choice_c215_e: encoder_append_non_negative_binary_integer(encoder_p, 214, 9); encoder_append_bool(encoder_p, src_p->value.c215); break; case uper_c_source_q_choice_c216_e: encoder_append_non_negative_binary_integer(encoder_p, 215, 9); encoder_append_bool(encoder_p, src_p->value.c216); break; case uper_c_source_q_choice_c217_e: encoder_append_non_negative_binary_integer(encoder_p, 216, 9); encoder_append_bool(encoder_p, src_p->value.c217); break; case uper_c_source_q_choice_c218_e: encoder_append_non_negative_binary_integer(encoder_p, 217, 9); encoder_append_bool(encoder_p, src_p->value.c218); break; case uper_c_source_q_choice_c219_e: encoder_append_non_negative_binary_integer(encoder_p, 218, 9); encoder_append_bool(encoder_p, src_p->value.c219); break; case uper_c_source_q_choice_c220_e: encoder_append_non_negative_binary_integer(encoder_p, 219, 9); encoder_append_bool(encoder_p, src_p->value.c220); break; case uper_c_source_q_choice_c221_e: encoder_append_non_negative_binary_integer(encoder_p, 220, 9); encoder_append_bool(encoder_p, src_p->value.c221); break; case uper_c_source_q_choice_c222_e: encoder_append_non_negative_binary_integer(encoder_p, 221, 9); encoder_append_bool(encoder_p, src_p->value.c222); break; case uper_c_source_q_choice_c223_e: encoder_append_non_negative_binary_integer(encoder_p, 222, 9); encoder_append_bool(encoder_p, src_p->value.c223); break; case uper_c_source_q_choice_c224_e: encoder_append_non_negative_binary_integer(encoder_p, 223, 9); encoder_append_bool(encoder_p, src_p->value.c224); break; case uper_c_source_q_choice_c225_e: encoder_append_non_negative_binary_integer(encoder_p, 224, 9); encoder_append_bool(encoder_p, src_p->value.c225); break; case uper_c_source_q_choice_c226_e: encoder_append_non_negative_binary_integer(encoder_p, 225, 9); encoder_append_bool(encoder_p, src_p->value.c226); break; case uper_c_source_q_choice_c227_e: encoder_append_non_negative_binary_integer(encoder_p, 226, 9); encoder_append_bool(encoder_p, src_p->value.c227); break; case uper_c_source_q_choice_c228_e: encoder_append_non_negative_binary_integer(encoder_p, 227, 9); encoder_append_bool(encoder_p, src_p->value.c228); break; case uper_c_source_q_choice_c229_e: encoder_append_non_negative_binary_integer(encoder_p, 228, 9); encoder_append_bool(encoder_p, src_p->value.c229); break; case uper_c_source_q_choice_c230_e: encoder_append_non_negative_binary_integer(encoder_p, 229, 9); encoder_append_bool(encoder_p, src_p->value.c230); break; case uper_c_source_q_choice_c231_e: encoder_append_non_negative_binary_integer(encoder_p, 230, 9); encoder_append_bool(encoder_p, src_p->value.c231); break; case uper_c_source_q_choice_c232_e: encoder_append_non_negative_binary_integer(encoder_p, 231, 9); encoder_append_bool(encoder_p, src_p->value.c232); break; case uper_c_source_q_choice_c233_e: encoder_append_non_negative_binary_integer(encoder_p, 232, 9); encoder_append_bool(encoder_p, src_p->value.c233); break; case uper_c_source_q_choice_c234_e: encoder_append_non_negative_binary_integer(encoder_p, 233, 9); encoder_append_bool(encoder_p, src_p->value.c234); break; case uper_c_source_q_choice_c235_e: encoder_append_non_negative_binary_integer(encoder_p, 234, 9); encoder_append_bool(encoder_p, src_p->value.c235); break; case uper_c_source_q_choice_c236_e: encoder_append_non_negative_binary_integer(encoder_p, 235, 9); encoder_append_bool(encoder_p, src_p->value.c236); break; case uper_c_source_q_choice_c237_e: encoder_append_non_negative_binary_integer(encoder_p, 236, 9); encoder_append_bool(encoder_p, src_p->value.c237); break; case uper_c_source_q_choice_c238_e: encoder_append_non_negative_binary_integer(encoder_p, 237, 9); encoder_append_bool(encoder_p, src_p->value.c238); break; case uper_c_source_q_choice_c239_e: encoder_append_non_negative_binary_integer(encoder_p, 238, 9); encoder_append_bool(encoder_p, src_p->value.c239); break; case uper_c_source_q_choice_c240_e: encoder_append_non_negative_binary_integer(encoder_p, 239, 9); encoder_append_bool(encoder_p, src_p->value.c240); break; case uper_c_source_q_choice_c241_e: encoder_append_non_negative_binary_integer(encoder_p, 240, 9); encoder_append_bool(encoder_p, src_p->value.c241); break; case uper_c_source_q_choice_c242_e: encoder_append_non_negative_binary_integer(encoder_p, 241, 9); encoder_append_bool(encoder_p, src_p->value.c242); break; case uper_c_source_q_choice_c243_e: encoder_append_non_negative_binary_integer(encoder_p, 242, 9); encoder_append_bool(encoder_p, src_p->value.c243); break; case uper_c_source_q_choice_c244_e: encoder_append_non_negative_binary_integer(encoder_p, 243, 9); encoder_append_bool(encoder_p, src_p->value.c244); break; case uper_c_source_q_choice_c245_e: encoder_append_non_negative_binary_integer(encoder_p, 244, 9); encoder_append_bool(encoder_p, src_p->value.c245); break; case uper_c_source_q_choice_c246_e: encoder_append_non_negative_binary_integer(encoder_p, 245, 9); encoder_append_bool(encoder_p, src_p->value.c246); break; case uper_c_source_q_choice_c247_e: encoder_append_non_negative_binary_integer(encoder_p, 246, 9); encoder_append_bool(encoder_p, src_p->value.c247); break; case uper_c_source_q_choice_c248_e: encoder_append_non_negative_binary_integer(encoder_p, 247, 9); encoder_append_bool(encoder_p, src_p->value.c248); break; case uper_c_source_q_choice_c249_e: encoder_append_non_negative_binary_integer(encoder_p, 248, 9); encoder_append_bool(encoder_p, src_p->value.c249); break; case uper_c_source_q_choice_c250_e: encoder_append_non_negative_binary_integer(encoder_p, 249, 9); encoder_append_bool(encoder_p, src_p->value.c250); break; case uper_c_source_q_choice_c251_e: encoder_append_non_negative_binary_integer(encoder_p, 250, 9); encoder_append_bool(encoder_p, src_p->value.c251); break; case uper_c_source_q_choice_c252_e: encoder_append_non_negative_binary_integer(encoder_p, 251, 9); encoder_append_bool(encoder_p, src_p->value.c252); break; case uper_c_source_q_choice_c253_e: encoder_append_non_negative_binary_integer(encoder_p, 252, 9); encoder_append_bool(encoder_p, src_p->value.c253); break; case uper_c_source_q_choice_c254_e: encoder_append_non_negative_binary_integer(encoder_p, 253, 9); encoder_append_bool(encoder_p, src_p->value.c254); break; case uper_c_source_q_choice_c255_e: encoder_append_non_negative_binary_integer(encoder_p, 254, 9); encoder_append_bool(encoder_p, src_p->value.c255); break; case uper_c_source_q_choice_c256_e: encoder_append_non_negative_binary_integer(encoder_p, 255, 9); encoder_append_bool(encoder_p, src_p->value.c256); break; case uper_c_source_q_choice_c257_e: encoder_append_non_negative_binary_integer(encoder_p, 256, 9); encoder_append_bool(encoder_p, src_p->value.c257); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } static void uper_c_source_q_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_q_t *dst_p) { uint16_t choice; choice = (uint16_t)decoder_read_non_negative_binary_integer(decoder_p, 9); switch (choice) { case 0: dst_p->choice = uper_c_source_q_choice_c001_e; dst_p->value.c001 = decoder_read_bool(decoder_p); break; case 1: dst_p->choice = uper_c_source_q_choice_c002_e; dst_p->value.c002 = decoder_read_bool(decoder_p); break; case 2: dst_p->choice = uper_c_source_q_choice_c003_e; dst_p->value.c003 = decoder_read_bool(decoder_p); break; case 3: dst_p->choice = uper_c_source_q_choice_c004_e; dst_p->value.c004 = decoder_read_bool(decoder_p); break; case 4: dst_p->choice = uper_c_source_q_choice_c005_e; dst_p->value.c005 = decoder_read_bool(decoder_p); break; case 5: dst_p->choice = uper_c_source_q_choice_c006_e; dst_p->value.c006 = decoder_read_bool(decoder_p); break; case 6: dst_p->choice = uper_c_source_q_choice_c007_e; dst_p->value.c007 = decoder_read_bool(decoder_p); break; case 7: dst_p->choice = uper_c_source_q_choice_c008_e; dst_p->value.c008 = decoder_read_bool(decoder_p); break; case 8: dst_p->choice = uper_c_source_q_choice_c009_e; dst_p->value.c009 = decoder_read_bool(decoder_p); break; case 9: dst_p->choice = uper_c_source_q_choice_c010_e; dst_p->value.c010 = decoder_read_bool(decoder_p); break; case 10: dst_p->choice = uper_c_source_q_choice_c011_e; dst_p->value.c011 = decoder_read_bool(decoder_p); break; case 11: dst_p->choice = uper_c_source_q_choice_c012_e; dst_p->value.c012 = decoder_read_bool(decoder_p); break; case 12: dst_p->choice = uper_c_source_q_choice_c013_e; dst_p->value.c013 = decoder_read_bool(decoder_p); break; case 13: dst_p->choice = uper_c_source_q_choice_c014_e; dst_p->value.c014 = decoder_read_bool(decoder_p); break; case 14: dst_p->choice = uper_c_source_q_choice_c015_e; dst_p->value.c015 = decoder_read_bool(decoder_p); break; case 15: dst_p->choice = uper_c_source_q_choice_c016_e; dst_p->value.c016 = decoder_read_bool(decoder_p); break; case 16: dst_p->choice = uper_c_source_q_choice_c017_e; dst_p->value.c017 = decoder_read_bool(decoder_p); break; case 17: dst_p->choice = uper_c_source_q_choice_c018_e; dst_p->value.c018 = decoder_read_bool(decoder_p); break; case 18: dst_p->choice = uper_c_source_q_choice_c019_e; dst_p->value.c019 = decoder_read_bool(decoder_p); break; case 19: dst_p->choice = uper_c_source_q_choice_c020_e; dst_p->value.c020 = decoder_read_bool(decoder_p); break; case 20: dst_p->choice = uper_c_source_q_choice_c021_e; dst_p->value.c021 = decoder_read_bool(decoder_p); break; case 21: dst_p->choice = uper_c_source_q_choice_c022_e; dst_p->value.c022 = decoder_read_bool(decoder_p); break; case 22: dst_p->choice = uper_c_source_q_choice_c023_e; dst_p->value.c023 = decoder_read_bool(decoder_p); break; case 23: dst_p->choice = uper_c_source_q_choice_c024_e; dst_p->value.c024 = decoder_read_bool(decoder_p); break; case 24: dst_p->choice = uper_c_source_q_choice_c025_e; dst_p->value.c025 = decoder_read_bool(decoder_p); break; case 25: dst_p->choice = uper_c_source_q_choice_c026_e; dst_p->value.c026 = decoder_read_bool(decoder_p); break; case 26: dst_p->choice = uper_c_source_q_choice_c027_e; dst_p->value.c027 = decoder_read_bool(decoder_p); break; case 27: dst_p->choice = uper_c_source_q_choice_c028_e; dst_p->value.c028 = decoder_read_bool(decoder_p); break; case 28: dst_p->choice = uper_c_source_q_choice_c029_e; dst_p->value.c029 = decoder_read_bool(decoder_p); break; case 29: dst_p->choice = uper_c_source_q_choice_c030_e; dst_p->value.c030 = decoder_read_bool(decoder_p); break; case 30: dst_p->choice = uper_c_source_q_choice_c031_e; dst_p->value.c031 = decoder_read_bool(decoder_p); break; case 31: dst_p->choice = uper_c_source_q_choice_c032_e; dst_p->value.c032 = decoder_read_bool(decoder_p); break; case 32: dst_p->choice = uper_c_source_q_choice_c033_e; dst_p->value.c033 = decoder_read_bool(decoder_p); break; case 33: dst_p->choice = uper_c_source_q_choice_c034_e; dst_p->value.c034 = decoder_read_bool(decoder_p); break; case 34: dst_p->choice = uper_c_source_q_choice_c035_e; dst_p->value.c035 = decoder_read_bool(decoder_p); break; case 35: dst_p->choice = uper_c_source_q_choice_c036_e; dst_p->value.c036 = decoder_read_bool(decoder_p); break; case 36: dst_p->choice = uper_c_source_q_choice_c037_e; dst_p->value.c037 = decoder_read_bool(decoder_p); break; case 37: dst_p->choice = uper_c_source_q_choice_c038_e; dst_p->value.c038 = decoder_read_bool(decoder_p); break; case 38: dst_p->choice = uper_c_source_q_choice_c039_e; dst_p->value.c039 = decoder_read_bool(decoder_p); break; case 39: dst_p->choice = uper_c_source_q_choice_c040_e; dst_p->value.c040 = decoder_read_bool(decoder_p); break; case 40: dst_p->choice = uper_c_source_q_choice_c041_e; dst_p->value.c041 = decoder_read_bool(decoder_p); break; case 41: dst_p->choice = uper_c_source_q_choice_c042_e; dst_p->value.c042 = decoder_read_bool(decoder_p); break; case 42: dst_p->choice = uper_c_source_q_choice_c043_e; dst_p->value.c043 = decoder_read_bool(decoder_p); break; case 43: dst_p->choice = uper_c_source_q_choice_c044_e; dst_p->value.c044 = decoder_read_bool(decoder_p); break; case 44: dst_p->choice = uper_c_source_q_choice_c045_e; dst_p->value.c045 = decoder_read_bool(decoder_p); break; case 45: dst_p->choice = uper_c_source_q_choice_c046_e; dst_p->value.c046 = decoder_read_bool(decoder_p); break; case 46: dst_p->choice = uper_c_source_q_choice_c047_e; dst_p->value.c047 = decoder_read_bool(decoder_p); break; case 47: dst_p->choice = uper_c_source_q_choice_c048_e; dst_p->value.c048 = decoder_read_bool(decoder_p); break; case 48: dst_p->choice = uper_c_source_q_choice_c049_e; dst_p->value.c049 = decoder_read_bool(decoder_p); break; case 49: dst_p->choice = uper_c_source_q_choice_c050_e; dst_p->value.c050 = decoder_read_bool(decoder_p); break; case 50: dst_p->choice = uper_c_source_q_choice_c051_e; dst_p->value.c051 = decoder_read_bool(decoder_p); break; case 51: dst_p->choice = uper_c_source_q_choice_c052_e; dst_p->value.c052 = decoder_read_bool(decoder_p); break; case 52: dst_p->choice = uper_c_source_q_choice_c053_e; dst_p->value.c053 = decoder_read_bool(decoder_p); break; case 53: dst_p->choice = uper_c_source_q_choice_c054_e; dst_p->value.c054 = decoder_read_bool(decoder_p); break; case 54: dst_p->choice = uper_c_source_q_choice_c055_e; dst_p->value.c055 = decoder_read_bool(decoder_p); break; case 55: dst_p->choice = uper_c_source_q_choice_c056_e; dst_p->value.c056 = decoder_read_bool(decoder_p); break; case 56: dst_p->choice = uper_c_source_q_choice_c057_e; dst_p->value.c057 = decoder_read_bool(decoder_p); break; case 57: dst_p->choice = uper_c_source_q_choice_c058_e; dst_p->value.c058 = decoder_read_bool(decoder_p); break; case 58: dst_p->choice = uper_c_source_q_choice_c059_e; dst_p->value.c059 = decoder_read_bool(decoder_p); break; case 59: dst_p->choice = uper_c_source_q_choice_c060_e; dst_p->value.c060 = decoder_read_bool(decoder_p); break; case 60: dst_p->choice = uper_c_source_q_choice_c061_e; dst_p->value.c061 = decoder_read_bool(decoder_p); break; case 61: dst_p->choice = uper_c_source_q_choice_c062_e; dst_p->value.c062 = decoder_read_bool(decoder_p); break; case 62: dst_p->choice = uper_c_source_q_choice_c063_e; dst_p->value.c063 = decoder_read_bool(decoder_p); break; case 63: dst_p->choice = uper_c_source_q_choice_c064_e; dst_p->value.c064 = decoder_read_bool(decoder_p); break; case 64: dst_p->choice = uper_c_source_q_choice_c065_e; dst_p->value.c065 = decoder_read_bool(decoder_p); break; case 65: dst_p->choice = uper_c_source_q_choice_c066_e; dst_p->value.c066 = decoder_read_bool(decoder_p); break; case 66: dst_p->choice = uper_c_source_q_choice_c067_e; dst_p->value.c067 = decoder_read_bool(decoder_p); break; case 67: dst_p->choice = uper_c_source_q_choice_c068_e; dst_p->value.c068 = decoder_read_bool(decoder_p); break; case 68: dst_p->choice = uper_c_source_q_choice_c069_e; dst_p->value.c069 = decoder_read_bool(decoder_p); break; case 69: dst_p->choice = uper_c_source_q_choice_c070_e; dst_p->value.c070 = decoder_read_bool(decoder_p); break; case 70: dst_p->choice = uper_c_source_q_choice_c071_e; dst_p->value.c071 = decoder_read_bool(decoder_p); break; case 71: dst_p->choice = uper_c_source_q_choice_c072_e; dst_p->value.c072 = decoder_read_bool(decoder_p); break; case 72: dst_p->choice = uper_c_source_q_choice_c073_e; dst_p->value.c073 = decoder_read_bool(decoder_p); break; case 73: dst_p->choice = uper_c_source_q_choice_c074_e; dst_p->value.c074 = decoder_read_bool(decoder_p); break; case 74: dst_p->choice = uper_c_source_q_choice_c075_e; dst_p->value.c075 = decoder_read_bool(decoder_p); break; case 75: dst_p->choice = uper_c_source_q_choice_c076_e; dst_p->value.c076 = decoder_read_bool(decoder_p); break; case 76: dst_p->choice = uper_c_source_q_choice_c077_e; dst_p->value.c077 = decoder_read_bool(decoder_p); break; case 77: dst_p->choice = uper_c_source_q_choice_c078_e; dst_p->value.c078 = decoder_read_bool(decoder_p); break; case 78: dst_p->choice = uper_c_source_q_choice_c079_e; dst_p->value.c079 = decoder_read_bool(decoder_p); break; case 79: dst_p->choice = uper_c_source_q_choice_c080_e; dst_p->value.c080 = decoder_read_bool(decoder_p); break; case 80: dst_p->choice = uper_c_source_q_choice_c081_e; dst_p->value.c081 = decoder_read_bool(decoder_p); break; case 81: dst_p->choice = uper_c_source_q_choice_c082_e; dst_p->value.c082 = decoder_read_bool(decoder_p); break; case 82: dst_p->choice = uper_c_source_q_choice_c083_e; dst_p->value.c083 = decoder_read_bool(decoder_p); break; case 83: dst_p->choice = uper_c_source_q_choice_c084_e; dst_p->value.c084 = decoder_read_bool(decoder_p); break; case 84: dst_p->choice = uper_c_source_q_choice_c085_e; dst_p->value.c085 = decoder_read_bool(decoder_p); break; case 85: dst_p->choice = uper_c_source_q_choice_c086_e; dst_p->value.c086 = decoder_read_bool(decoder_p); break; case 86: dst_p->choice = uper_c_source_q_choice_c087_e; dst_p->value.c087 = decoder_read_bool(decoder_p); break; case 87: dst_p->choice = uper_c_source_q_choice_c088_e; dst_p->value.c088 = decoder_read_bool(decoder_p); break; case 88: dst_p->choice = uper_c_source_q_choice_c089_e; dst_p->value.c089 = decoder_read_bool(decoder_p); break; case 89: dst_p->choice = uper_c_source_q_choice_c090_e; dst_p->value.c090 = decoder_read_bool(decoder_p); break; case 90: dst_p->choice = uper_c_source_q_choice_c091_e; dst_p->value.c091 = decoder_read_bool(decoder_p); break; case 91: dst_p->choice = uper_c_source_q_choice_c092_e; dst_p->value.c092 = decoder_read_bool(decoder_p); break; case 92: dst_p->choice = uper_c_source_q_choice_c093_e; dst_p->value.c093 = decoder_read_bool(decoder_p); break; case 93: dst_p->choice = uper_c_source_q_choice_c094_e; dst_p->value.c094 = decoder_read_bool(decoder_p); break; case 94: dst_p->choice = uper_c_source_q_choice_c095_e; dst_p->value.c095 = decoder_read_bool(decoder_p); break; case 95: dst_p->choice = uper_c_source_q_choice_c096_e; dst_p->value.c096 = decoder_read_bool(decoder_p); break; case 96: dst_p->choice = uper_c_source_q_choice_c097_e; dst_p->value.c097 = decoder_read_bool(decoder_p); break; case 97: dst_p->choice = uper_c_source_q_choice_c098_e; dst_p->value.c098 = decoder_read_bool(decoder_p); break; case 98: dst_p->choice = uper_c_source_q_choice_c099_e; dst_p->value.c099 = decoder_read_bool(decoder_p); break; case 99: dst_p->choice = uper_c_source_q_choice_c100_e; dst_p->value.c100 = decoder_read_bool(decoder_p); break; case 100: dst_p->choice = uper_c_source_q_choice_c101_e; dst_p->value.c101 = decoder_read_bool(decoder_p); break; case 101: dst_p->choice = uper_c_source_q_choice_c102_e; dst_p->value.c102 = decoder_read_bool(decoder_p); break; case 102: dst_p->choice = uper_c_source_q_choice_c103_e; dst_p->value.c103 = decoder_read_bool(decoder_p); break; case 103: dst_p->choice = uper_c_source_q_choice_c104_e; dst_p->value.c104 = decoder_read_bool(decoder_p); break; case 104: dst_p->choice = uper_c_source_q_choice_c105_e; dst_p->value.c105 = decoder_read_bool(decoder_p); break; case 105: dst_p->choice = uper_c_source_q_choice_c106_e; dst_p->value.c106 = decoder_read_bool(decoder_p); break; case 106: dst_p->choice = uper_c_source_q_choice_c107_e; dst_p->value.c107 = decoder_read_bool(decoder_p); break; case 107: dst_p->choice = uper_c_source_q_choice_c108_e; dst_p->value.c108 = decoder_read_bool(decoder_p); break; case 108: dst_p->choice = uper_c_source_q_choice_c109_e; dst_p->value.c109 = decoder_read_bool(decoder_p); break; case 109: dst_p->choice = uper_c_source_q_choice_c110_e; dst_p->value.c110 = decoder_read_bool(decoder_p); break; case 110: dst_p->choice = uper_c_source_q_choice_c111_e; dst_p->value.c111 = decoder_read_bool(decoder_p); break; case 111: dst_p->choice = uper_c_source_q_choice_c112_e; dst_p->value.c112 = decoder_read_bool(decoder_p); break; case 112: dst_p->choice = uper_c_source_q_choice_c113_e; dst_p->value.c113 = decoder_read_bool(decoder_p); break; case 113: dst_p->choice = uper_c_source_q_choice_c114_e; dst_p->value.c114 = decoder_read_bool(decoder_p); break; case 114: dst_p->choice = uper_c_source_q_choice_c115_e; dst_p->value.c115 = decoder_read_bool(decoder_p); break; case 115: dst_p->choice = uper_c_source_q_choice_c116_e; dst_p->value.c116 = decoder_read_bool(decoder_p); break; case 116: dst_p->choice = uper_c_source_q_choice_c117_e; dst_p->value.c117 = decoder_read_bool(decoder_p); break; case 117: dst_p->choice = uper_c_source_q_choice_c118_e; dst_p->value.c118 = decoder_read_bool(decoder_p); break; case 118: dst_p->choice = uper_c_source_q_choice_c119_e; dst_p->value.c119 = decoder_read_bool(decoder_p); break; case 119: dst_p->choice = uper_c_source_q_choice_c120_e; dst_p->value.c120 = decoder_read_bool(decoder_p); break; case 120: dst_p->choice = uper_c_source_q_choice_c121_e; dst_p->value.c121 = decoder_read_bool(decoder_p); break; case 121: dst_p->choice = uper_c_source_q_choice_c122_e; dst_p->value.c122 = decoder_read_bool(decoder_p); break; case 122: dst_p->choice = uper_c_source_q_choice_c123_e; dst_p->value.c123 = decoder_read_bool(decoder_p); break; case 123: dst_p->choice = uper_c_source_q_choice_c124_e; dst_p->value.c124 = decoder_read_bool(decoder_p); break; case 124: dst_p->choice = uper_c_source_q_choice_c125_e; dst_p->value.c125 = decoder_read_bool(decoder_p); break; case 125: dst_p->choice = uper_c_source_q_choice_c126_e; dst_p->value.c126 = decoder_read_bool(decoder_p); break; case 126: dst_p->choice = uper_c_source_q_choice_c127_e; dst_p->value.c127 = decoder_read_bool(decoder_p); break; case 127: dst_p->choice = uper_c_source_q_choice_c128_e; dst_p->value.c128 = decoder_read_bool(decoder_p); break; case 128: dst_p->choice = uper_c_source_q_choice_c129_e; dst_p->value.c129 = decoder_read_bool(decoder_p); break; case 129: dst_p->choice = uper_c_source_q_choice_c130_e; dst_p->value.c130 = decoder_read_bool(decoder_p); break; case 130: dst_p->choice = uper_c_source_q_choice_c131_e; dst_p->value.c131 = decoder_read_bool(decoder_p); break; case 131: dst_p->choice = uper_c_source_q_choice_c132_e; dst_p->value.c132 = decoder_read_bool(decoder_p); break; case 132: dst_p->choice = uper_c_source_q_choice_c133_e; dst_p->value.c133 = decoder_read_bool(decoder_p); break; case 133: dst_p->choice = uper_c_source_q_choice_c134_e; dst_p->value.c134 = decoder_read_bool(decoder_p); break; case 134: dst_p->choice = uper_c_source_q_choice_c135_e; dst_p->value.c135 = decoder_read_bool(decoder_p); break; case 135: dst_p->choice = uper_c_source_q_choice_c136_e; dst_p->value.c136 = decoder_read_bool(decoder_p); break; case 136: dst_p->choice = uper_c_source_q_choice_c137_e; dst_p->value.c137 = decoder_read_bool(decoder_p); break; case 137: dst_p->choice = uper_c_source_q_choice_c138_e; dst_p->value.c138 = decoder_read_bool(decoder_p); break; case 138: dst_p->choice = uper_c_source_q_choice_c139_e; dst_p->value.c139 = decoder_read_bool(decoder_p); break; case 139: dst_p->choice = uper_c_source_q_choice_c140_e; dst_p->value.c140 = decoder_read_bool(decoder_p); break; case 140: dst_p->choice = uper_c_source_q_choice_c141_e; dst_p->value.c141 = decoder_read_bool(decoder_p); break; case 141: dst_p->choice = uper_c_source_q_choice_c142_e; dst_p->value.c142 = decoder_read_bool(decoder_p); break; case 142: dst_p->choice = uper_c_source_q_choice_c143_e; dst_p->value.c143 = decoder_read_bool(decoder_p); break; case 143: dst_p->choice = uper_c_source_q_choice_c144_e; dst_p->value.c144 = decoder_read_bool(decoder_p); break; case 144: dst_p->choice = uper_c_source_q_choice_c145_e; dst_p->value.c145 = decoder_read_bool(decoder_p); break; case 145: dst_p->choice = uper_c_source_q_choice_c146_e; dst_p->value.c146 = decoder_read_bool(decoder_p); break; case 146: dst_p->choice = uper_c_source_q_choice_c147_e; dst_p->value.c147 = decoder_read_bool(decoder_p); break; case 147: dst_p->choice = uper_c_source_q_choice_c148_e; dst_p->value.c148 = decoder_read_bool(decoder_p); break; case 148: dst_p->choice = uper_c_source_q_choice_c149_e; dst_p->value.c149 = decoder_read_bool(decoder_p); break; case 149: dst_p->choice = uper_c_source_q_choice_c150_e; dst_p->value.c150 = decoder_read_bool(decoder_p); break; case 150: dst_p->choice = uper_c_source_q_choice_c151_e; dst_p->value.c151 = decoder_read_bool(decoder_p); break; case 151: dst_p->choice = uper_c_source_q_choice_c152_e; dst_p->value.c152 = decoder_read_bool(decoder_p); break; case 152: dst_p->choice = uper_c_source_q_choice_c153_e; dst_p->value.c153 = decoder_read_bool(decoder_p); break; case 153: dst_p->choice = uper_c_source_q_choice_c154_e; dst_p->value.c154 = decoder_read_bool(decoder_p); break; case 154: dst_p->choice = uper_c_source_q_choice_c155_e; dst_p->value.c155 = decoder_read_bool(decoder_p); break; case 155: dst_p->choice = uper_c_source_q_choice_c156_e; dst_p->value.c156 = decoder_read_bool(decoder_p); break; case 156: dst_p->choice = uper_c_source_q_choice_c157_e; dst_p->value.c157 = decoder_read_bool(decoder_p); break; case 157: dst_p->choice = uper_c_source_q_choice_c158_e; dst_p->value.c158 = decoder_read_bool(decoder_p); break; case 158: dst_p->choice = uper_c_source_q_choice_c159_e; dst_p->value.c159 = decoder_read_bool(decoder_p); break; case 159: dst_p->choice = uper_c_source_q_choice_c160_e; dst_p->value.c160 = decoder_read_bool(decoder_p); break; case 160: dst_p->choice = uper_c_source_q_choice_c161_e; dst_p->value.c161 = decoder_read_bool(decoder_p); break; case 161: dst_p->choice = uper_c_source_q_choice_c162_e; dst_p->value.c162 = decoder_read_bool(decoder_p); break; case 162: dst_p->choice = uper_c_source_q_choice_c163_e; dst_p->value.c163 = decoder_read_bool(decoder_p); break; case 163: dst_p->choice = uper_c_source_q_choice_c164_e; dst_p->value.c164 = decoder_read_bool(decoder_p); break; case 164: dst_p->choice = uper_c_source_q_choice_c165_e; dst_p->value.c165 = decoder_read_bool(decoder_p); break; case 165: dst_p->choice = uper_c_source_q_choice_c166_e; dst_p->value.c166 = decoder_read_bool(decoder_p); break; case 166: dst_p->choice = uper_c_source_q_choice_c167_e; dst_p->value.c167 = decoder_read_bool(decoder_p); break; case 167: dst_p->choice = uper_c_source_q_choice_c168_e; dst_p->value.c168 = decoder_read_bool(decoder_p); break; case 168: dst_p->choice = uper_c_source_q_choice_c169_e; dst_p->value.c169 = decoder_read_bool(decoder_p); break; case 169: dst_p->choice = uper_c_source_q_choice_c170_e; dst_p->value.c170 = decoder_read_bool(decoder_p); break; case 170: dst_p->choice = uper_c_source_q_choice_c171_e; dst_p->value.c171 = decoder_read_bool(decoder_p); break; case 171: dst_p->choice = uper_c_source_q_choice_c172_e; dst_p->value.c172 = decoder_read_bool(decoder_p); break; case 172: dst_p->choice = uper_c_source_q_choice_c173_e; dst_p->value.c173 = decoder_read_bool(decoder_p); break; case 173: dst_p->choice = uper_c_source_q_choice_c174_e; dst_p->value.c174 = decoder_read_bool(decoder_p); break; case 174: dst_p->choice = uper_c_source_q_choice_c175_e; dst_p->value.c175 = decoder_read_bool(decoder_p); break; case 175: dst_p->choice = uper_c_source_q_choice_c176_e; dst_p->value.c176 = decoder_read_bool(decoder_p); break; case 176: dst_p->choice = uper_c_source_q_choice_c177_e; dst_p->value.c177 = decoder_read_bool(decoder_p); break; case 177: dst_p->choice = uper_c_source_q_choice_c178_e; dst_p->value.c178 = decoder_read_bool(decoder_p); break; case 178: dst_p->choice = uper_c_source_q_choice_c179_e; dst_p->value.c179 = decoder_read_bool(decoder_p); break; case 179: dst_p->choice = uper_c_source_q_choice_c180_e; dst_p->value.c180 = decoder_read_bool(decoder_p); break; case 180: dst_p->choice = uper_c_source_q_choice_c181_e; dst_p->value.c181 = decoder_read_bool(decoder_p); break; case 181: dst_p->choice = uper_c_source_q_choice_c182_e; dst_p->value.c182 = decoder_read_bool(decoder_p); break; case 182: dst_p->choice = uper_c_source_q_choice_c183_e; dst_p->value.c183 = decoder_read_bool(decoder_p); break; case 183: dst_p->choice = uper_c_source_q_choice_c184_e; dst_p->value.c184 = decoder_read_bool(decoder_p); break; case 184: dst_p->choice = uper_c_source_q_choice_c185_e; dst_p->value.c185 = decoder_read_bool(decoder_p); break; case 185: dst_p->choice = uper_c_source_q_choice_c186_e; dst_p->value.c186 = decoder_read_bool(decoder_p); break; case 186: dst_p->choice = uper_c_source_q_choice_c187_e; dst_p->value.c187 = decoder_read_bool(decoder_p); break; case 187: dst_p->choice = uper_c_source_q_choice_c188_e; dst_p->value.c188 = decoder_read_bool(decoder_p); break; case 188: dst_p->choice = uper_c_source_q_choice_c189_e; dst_p->value.c189 = decoder_read_bool(decoder_p); break; case 189: dst_p->choice = uper_c_source_q_choice_c190_e; dst_p->value.c190 = decoder_read_bool(decoder_p); break; case 190: dst_p->choice = uper_c_source_q_choice_c191_e; dst_p->value.c191 = decoder_read_bool(decoder_p); break; case 191: dst_p->choice = uper_c_source_q_choice_c192_e; dst_p->value.c192 = decoder_read_bool(decoder_p); break; case 192: dst_p->choice = uper_c_source_q_choice_c193_e; dst_p->value.c193 = decoder_read_bool(decoder_p); break; case 193: dst_p->choice = uper_c_source_q_choice_c194_e; dst_p->value.c194 = decoder_read_bool(decoder_p); break; case 194: dst_p->choice = uper_c_source_q_choice_c195_e; dst_p->value.c195 = decoder_read_bool(decoder_p); break; case 195: dst_p->choice = uper_c_source_q_choice_c196_e; dst_p->value.c196 = decoder_read_bool(decoder_p); break; case 196: dst_p->choice = uper_c_source_q_choice_c197_e; dst_p->value.c197 = decoder_read_bool(decoder_p); break; case 197: dst_p->choice = uper_c_source_q_choice_c198_e; dst_p->value.c198 = decoder_read_bool(decoder_p); break; case 198: dst_p->choice = uper_c_source_q_choice_c199_e; dst_p->value.c199 = decoder_read_bool(decoder_p); break; case 199: dst_p->choice = uper_c_source_q_choice_c200_e; dst_p->value.c200 = decoder_read_bool(decoder_p); break; case 200: dst_p->choice = uper_c_source_q_choice_c201_e; dst_p->value.c201 = decoder_read_bool(decoder_p); break; case 201: dst_p->choice = uper_c_source_q_choice_c202_e; dst_p->value.c202 = decoder_read_bool(decoder_p); break; case 202: dst_p->choice = uper_c_source_q_choice_c203_e; dst_p->value.c203 = decoder_read_bool(decoder_p); break; case 203: dst_p->choice = uper_c_source_q_choice_c204_e; dst_p->value.c204 = decoder_read_bool(decoder_p); break; case 204: dst_p->choice = uper_c_source_q_choice_c205_e; dst_p->value.c205 = decoder_read_bool(decoder_p); break; case 205: dst_p->choice = uper_c_source_q_choice_c206_e; dst_p->value.c206 = decoder_read_bool(decoder_p); break; case 206: dst_p->choice = uper_c_source_q_choice_c207_e; dst_p->value.c207 = decoder_read_bool(decoder_p); break; case 207: dst_p->choice = uper_c_source_q_choice_c208_e; dst_p->value.c208 = decoder_read_bool(decoder_p); break; case 208: dst_p->choice = uper_c_source_q_choice_c209_e; dst_p->value.c209 = decoder_read_bool(decoder_p); break; case 209: dst_p->choice = uper_c_source_q_choice_c210_e; dst_p->value.c210 = decoder_read_bool(decoder_p); break; case 210: dst_p->choice = uper_c_source_q_choice_c211_e; dst_p->value.c211 = decoder_read_bool(decoder_p); break; case 211: dst_p->choice = uper_c_source_q_choice_c212_e; dst_p->value.c212 = decoder_read_bool(decoder_p); break; case 212: dst_p->choice = uper_c_source_q_choice_c213_e; dst_p->value.c213 = decoder_read_bool(decoder_p); break; case 213: dst_p->choice = uper_c_source_q_choice_c214_e; dst_p->value.c214 = decoder_read_bool(decoder_p); break; case 214: dst_p->choice = uper_c_source_q_choice_c215_e; dst_p->value.c215 = decoder_read_bool(decoder_p); break; case 215: dst_p->choice = uper_c_source_q_choice_c216_e; dst_p->value.c216 = decoder_read_bool(decoder_p); break; case 216: dst_p->choice = uper_c_source_q_choice_c217_e; dst_p->value.c217 = decoder_read_bool(decoder_p); break; case 217: dst_p->choice = uper_c_source_q_choice_c218_e; dst_p->value.c218 = decoder_read_bool(decoder_p); break; case 218: dst_p->choice = uper_c_source_q_choice_c219_e; dst_p->value.c219 = decoder_read_bool(decoder_p); break; case 219: dst_p->choice = uper_c_source_q_choice_c220_e; dst_p->value.c220 = decoder_read_bool(decoder_p); break; case 220: dst_p->choice = uper_c_source_q_choice_c221_e; dst_p->value.c221 = decoder_read_bool(decoder_p); break; case 221: dst_p->choice = uper_c_source_q_choice_c222_e; dst_p->value.c222 = decoder_read_bool(decoder_p); break; case 222: dst_p->choice = uper_c_source_q_choice_c223_e; dst_p->value.c223 = decoder_read_bool(decoder_p); break; case 223: dst_p->choice = uper_c_source_q_choice_c224_e; dst_p->value.c224 = decoder_read_bool(decoder_p); break; case 224: dst_p->choice = uper_c_source_q_choice_c225_e; dst_p->value.c225 = decoder_read_bool(decoder_p); break; case 225: dst_p->choice = uper_c_source_q_choice_c226_e; dst_p->value.c226 = decoder_read_bool(decoder_p); break; case 226: dst_p->choice = uper_c_source_q_choice_c227_e; dst_p->value.c227 = decoder_read_bool(decoder_p); break; case 227: dst_p->choice = uper_c_source_q_choice_c228_e; dst_p->value.c228 = decoder_read_bool(decoder_p); break; case 228: dst_p->choice = uper_c_source_q_choice_c229_e; dst_p->value.c229 = decoder_read_bool(decoder_p); break; case 229: dst_p->choice = uper_c_source_q_choice_c230_e; dst_p->value.c230 = decoder_read_bool(decoder_p); break; case 230: dst_p->choice = uper_c_source_q_choice_c231_e; dst_p->value.c231 = decoder_read_bool(decoder_p); break; case 231: dst_p->choice = uper_c_source_q_choice_c232_e; dst_p->value.c232 = decoder_read_bool(decoder_p); break; case 232: dst_p->choice = uper_c_source_q_choice_c233_e; dst_p->value.c233 = decoder_read_bool(decoder_p); break; case 233: dst_p->choice = uper_c_source_q_choice_c234_e; dst_p->value.c234 = decoder_read_bool(decoder_p); break; case 234: dst_p->choice = uper_c_source_q_choice_c235_e; dst_p->value.c235 = decoder_read_bool(decoder_p); break; case 235: dst_p->choice = uper_c_source_q_choice_c236_e; dst_p->value.c236 = decoder_read_bool(decoder_p); break; case 236: dst_p->choice = uper_c_source_q_choice_c237_e; dst_p->value.c237 = decoder_read_bool(decoder_p); break; case 237: dst_p->choice = uper_c_source_q_choice_c238_e; dst_p->value.c238 = decoder_read_bool(decoder_p); break; case 238: dst_p->choice = uper_c_source_q_choice_c239_e; dst_p->value.c239 = decoder_read_bool(decoder_p); break; case 239: dst_p->choice = uper_c_source_q_choice_c240_e; dst_p->value.c240 = decoder_read_bool(decoder_p); break; case 240: dst_p->choice = uper_c_source_q_choice_c241_e; dst_p->value.c241 = decoder_read_bool(decoder_p); break; case 241: dst_p->choice = uper_c_source_q_choice_c242_e; dst_p->value.c242 = decoder_read_bool(decoder_p); break; case 242: dst_p->choice = uper_c_source_q_choice_c243_e; dst_p->value.c243 = decoder_read_bool(decoder_p); break; case 243: dst_p->choice = uper_c_source_q_choice_c244_e; dst_p->value.c244 = decoder_read_bool(decoder_p); break; case 244: dst_p->choice = uper_c_source_q_choice_c245_e; dst_p->value.c245 = decoder_read_bool(decoder_p); break; case 245: dst_p->choice = uper_c_source_q_choice_c246_e; dst_p->value.c246 = decoder_read_bool(decoder_p); break; case 246: dst_p->choice = uper_c_source_q_choice_c247_e; dst_p->value.c247 = decoder_read_bool(decoder_p); break; case 247: dst_p->choice = uper_c_source_q_choice_c248_e; dst_p->value.c248 = decoder_read_bool(decoder_p); break; case 248: dst_p->choice = uper_c_source_q_choice_c249_e; dst_p->value.c249 = decoder_read_bool(decoder_p); break; case 249: dst_p->choice = uper_c_source_q_choice_c250_e; dst_p->value.c250 = decoder_read_bool(decoder_p); break; case 250: dst_p->choice = uper_c_source_q_choice_c251_e; dst_p->value.c251 = decoder_read_bool(decoder_p); break; case 251: dst_p->choice = uper_c_source_q_choice_c252_e; dst_p->value.c252 = decoder_read_bool(decoder_p); break; case 252: dst_p->choice = uper_c_source_q_choice_c253_e; dst_p->value.c253 = decoder_read_bool(decoder_p); break; case 253: dst_p->choice = uper_c_source_q_choice_c254_e; dst_p->value.c254 = decoder_read_bool(decoder_p); break; case 254: dst_p->choice = uper_c_source_q_choice_c255_e; dst_p->value.c255 = decoder_read_bool(decoder_p); break; case 255: dst_p->choice = uper_c_source_q_choice_c256_e; dst_p->value.c256 = decoder_read_bool(decoder_p); break; case 256: dst_p->choice = uper_c_source_q_choice_c257_e; dst_p->value.c257 = decoder_read_bool(decoder_p); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } static void uper_c_source_d_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_d_t *src_p) { uint8_t i; uint8_t i_2; uint16_t value; encoder_append_non_negative_binary_integer( encoder_p, src_p->length - 1u, 4); for (i = 0; i < src_p->length; i++) { switch (src_p->elements[i].a.b.choice) { case uper_c_source_d_a_b_choice_c_e: encoder_append_non_negative_binary_integer(encoder_p, 0, 1); encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->elements[i].a.b.value.c - 0), 1); break; case uper_c_source_d_a_b_choice_d_e: encoder_append_non_negative_binary_integer(encoder_p, 1, 1); encoder_append_bool(encoder_p, src_p->elements[i].a.b.value.d); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } encoder_append_non_negative_binary_integer( encoder_p, src_p->elements[i].a.e.length - 3u, 1); for (i_2 = 0; i_2 < src_p->elements[i].a.e.length; i_2++) { } encoder_append_bool(encoder_p, src_p->elements[i].g.h != uper_c_source_d_g_h_j_e); if (src_p->elements[i].g.h != uper_c_source_d_g_h_j_e) { switch (src_p->elements[i].g.h) { case uper_c_source_d_g_h_i_e: value = 0; break; case uper_c_source_d_g_h_j_e: value = 1; break; case uper_c_source_d_g_h_k_e: value = 2; break; default: encoder_abort(encoder_p, EBADENUM); return; } encoder_append_non_negative_binary_integer(encoder_p, value, 2); } encoder_append_non_negative_binary_integer( encoder_p, src_p->elements[i].g.l.length - 1u, 1); encoder_append_bytes(encoder_p, &src_p->elements[i].g.l.buf[0], src_p->elements[i].g.l.length); encoder_append_bool(encoder_p, src_p->elements[i].m.is_n_present); encoder_append_bool(encoder_p, src_p->elements[i].m.o != 3); encoder_append_bool(encoder_p, src_p->elements[i].m.is_p_present); encoder_append_bool(encoder_p, src_p->elements[i].m.s != false); if (src_p->elements[i].m.is_n_present) { encoder_append_bool(encoder_p, src_p->elements[i].m.n); } if (src_p->elements[i].m.o != 3) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->elements[i].m.o - -2), 3); } if (src_p->elements[i].m.is_p_present) { encoder_append_bool(encoder_p, src_p->elements[i].m.p.is_r_present); encoder_append_bytes(encoder_p, &src_p->elements[i].m.p.q.buf[0], 5); if (src_p->elements[i].m.p.is_r_present) { encoder_append_bool(encoder_p, src_p->elements[i].m.p.r); } } if (src_p->elements[i].m.s != false) { encoder_append_bool(encoder_p, src_p->elements[i].m.s); } } } static void uper_c_source_d_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_d_t *dst_p) { uint8_t i; uint8_t choice; uint8_t i_2; bool is_present; uint16_t value; bool is_present_2; bool is_present_3; dst_p->length = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 4); dst_p->length += 1u; if (dst_p->length > 10u) { decoder_abort(decoder_p, EBADLENGTH); return; } for (i = 0; i < dst_p->length; i++) { choice = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 1); switch (choice) { case 0: dst_p->elements[i].a.b.choice = uper_c_source_d_a_b_choice_c_e; dst_p->elements[i].a.b.value.c = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 1); dst_p->elements[i].a.b.value.c += 0; break; case 1: dst_p->elements[i].a.b.choice = uper_c_source_d_a_b_choice_d_e; dst_p->elements[i].a.b.value.d = decoder_read_bool(decoder_p); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } dst_p->elements[i].a.e.length = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 1); dst_p->elements[i].a.e.length += 3u; for (i_2 = 0; i_2 < dst_p->elements[i].a.e.length; i_2++) { } is_present = decoder_read_bool(decoder_p); if (is_present) { value = (uint16_t)decoder_read_non_negative_binary_integer(decoder_p, 2); switch (value) { case 0: dst_p->elements[i].g.h = uper_c_source_d_g_h_i_e; break; case 1: dst_p->elements[i].g.h = uper_c_source_d_g_h_j_e; break; case 2: dst_p->elements[i].g.h = uper_c_source_d_g_h_k_e; break; default: decoder_abort(decoder_p, EBADENUM); return; } } else { dst_p->elements[i].g.h = uper_c_source_d_g_h_j_e; } dst_p->elements[i].g.l.length = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 1); dst_p->elements[i].g.l.length += 1u; decoder_read_bytes(decoder_p, &dst_p->elements[i].g.l.buf[0], dst_p->elements[i].g.l.length); dst_p->elements[i].m.is_n_present = decoder_read_bool(decoder_p); is_present_2 = decoder_read_bool(decoder_p); dst_p->elements[i].m.is_p_present = decoder_read_bool(decoder_p); is_present_3 = decoder_read_bool(decoder_p); if (dst_p->elements[i].m.is_n_present) { dst_p->elements[i].m.n = decoder_read_bool(decoder_p); } if (is_present_2) { dst_p->elements[i].m.o = (int8_t)decoder_read_non_negative_binary_integer( decoder_p, 3); dst_p->elements[i].m.o += -2; } else { dst_p->elements[i].m.o = 3; } if (dst_p->elements[i].m.is_p_present) { dst_p->elements[i].m.p.is_r_present = decoder_read_bool(decoder_p); decoder_read_bytes(decoder_p, &dst_p->elements[i].m.p.q.buf[0], 5); if (dst_p->elements[i].m.p.is_r_present) { dst_p->elements[i].m.p.r = decoder_read_bool(decoder_p); } } if (is_present_3) { dst_p->elements[i].m.s = decoder_read_bool(decoder_p); } else { dst_p->elements[i].m.s = false; } } } static void uper_c_source_ac_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_ac_t *src_p) { uper_c_source_q_encode_inner(encoder_p, &src_p->a); uper_c_source_d_encode_inner(encoder_p, &src_p->b); } static void uper_c_source_ac_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_ac_t *dst_p) { uper_c_source_q_decode_inner(decoder_p, &dst_p->a); uper_c_source_d_decode_inner(decoder_p, &dst_p->b); } static void uper_c_source_ad_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_ad_t *src_p) { uint8_t value; value = src_p->value; encoder_append_non_negative_binary_integer(encoder_p, value, 1); } static void uper_c_source_ad_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_ad_t *dst_p) { uint8_t value; value = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 1); dst_p->value = (enum uper_c_source_ad_e)value; } static void uper_c_source_ae_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_ae_t *src_p) { encoder_append_bool(encoder_p, false); encoder_append_bool(encoder_p, src_p->is_a_present); encoder_append_bool(encoder_p, src_p->b != true); if (src_p->is_a_present) { encoder_append_bool(encoder_p, src_p->a); } if (src_p->b != true) { encoder_append_bool(encoder_p, src_p->b); } encoder_append_bool(encoder_p, src_p->c); } static void uper_c_source_ae_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_ae_t *dst_p) { bool is_present; decoder_read_bool(decoder_p); dst_p->is_a_present = decoder_read_bool(decoder_p); is_present = decoder_read_bool(decoder_p); if (dst_p->is_a_present) { dst_p->a = decoder_read_bool(decoder_p); } if (is_present) { dst_p->b = decoder_read_bool(decoder_p); } else { dst_p->b = true; } dst_p->c = decoder_read_bool(decoder_p); } static void uper_c_source_ah_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_ah_t *src_p) { if(src_p->is_d_addition_present || src_p->is_e_addition_present) { encoder_abort(encoder_p, EINVAL); return; } encoder_append_bool(encoder_p, false); encoder_append_bool(encoder_p, src_p->c); } static void uper_c_source_ah_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_ah_t *dst_p) { bool extension_is_present; extension_is_present = decoder_read_bool(decoder_p); dst_p->c = decoder_read_bool(decoder_p); if(extension_is_present) { decoder_abort(decoder_p, EINVAL); return; } } static void uper_c_source_af_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_af_t *src_p) { if(src_p->is_b_addition_present || src_p->is_e_addition_present || src_p->is_f_addition_present || src_p->is_g_addition_present || src_p->is_h_addition_present || src_p->is_i_addition_present || src_p->is_j_addition_present || src_p->is_k_addition_present || src_p->is_l_addition_present) { encoder_abort(encoder_p, EINVAL); return; } encoder_append_bool(encoder_p, false); encoder_append_bool(encoder_p, src_p->a); } static void uper_c_source_af_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_af_t *dst_p) { bool extension_is_present; extension_is_present = decoder_read_bool(decoder_p); dst_p->a = decoder_read_bool(decoder_p); if(extension_is_present) { decoder_abort(decoder_p, EINVAL); return; } } static void uper_c_source_ag_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_ag_t *src_p) { if(src_p->is_b_addition_present || src_p->is_c_addition_present || src_p->is_d_addition_present || src_p->is_h_addition_present || src_p->is_i_addition_present || src_p->is_j_addition_present || src_p->is_m_addition_present) { encoder_abort(encoder_p, EINVAL); return; } encoder_append_bool(encoder_p, false); encoder_append_bool(encoder_p, src_p->a); } static void uper_c_source_ag_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_ag_t *dst_p) { bool extension_is_present; extension_is_present = decoder_read_bool(decoder_p); dst_p->a = decoder_read_bool(decoder_p); if(extension_is_present) { decoder_abort(decoder_p, EINVAL); return; } } static void uper_c_source_aj_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_aj_t *src_p) { uint8_t value; value = src_p->a; encoder_append_non_negative_binary_integer(encoder_p, value, 1); } static void uper_c_source_aj_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_aj_t *dst_p) { uint8_t value; value = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 1); dst_p->a = (enum uper_c_source_aj_a_e)value; } static void uper_c_source_ak_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_ak_t *src_p) { switch (src_p->choice) { case uper_c_source_ak_choice_a_e: encoder_append_non_negative_binary_integer(encoder_p, 0, 0); uper_c_source_aj_encode_inner(encoder_p, &src_p->value.a); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } static void uper_c_source_ak_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_ak_t *dst_p) { uint8_t choice; choice = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 0); switch (choice) { case 0: dst_p->choice = uper_c_source_ak_choice_a_e; uper_c_source_aj_decode_inner(decoder_p, &dst_p->value.a); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } static void uper_c_source_ai_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_ai_t *src_p) { uper_c_source_ak_encode_inner(encoder_p, &src_p->a); } static void uper_c_source_ai_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_ai_t *dst_p) { uper_c_source_ak_decode_inner(decoder_p, &dst_p->a); } static void uper_c_source_al_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_al_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->value - -129), 9); } static void uper_c_source_al_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_al_t *dst_p) { dst_p->value = (int16_t)decoder_read_non_negative_binary_integer( decoder_p, 9); dst_p->value += -129; } static void uper_c_source_am_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_am_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->value - -2), 8); } static void uper_c_source_am_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_am_t *dst_p) { dst_p->value = (int8_t)decoder_read_non_negative_binary_integer( decoder_p, 8); dst_p->value += -2; } static void uper_c_source_an_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_an_t *src_p) { uint32_t value; switch (src_p->value) { case uper_c_source_an_a_e: value = 0; break; case uper_c_source_an_b_e: value = 1; break; case uper_c_source_an_c_e: value = 2; break; case uper_c_source_an_d_e: value = 3; break; case uper_c_source_an_e_e: value = 4; break; case uper_c_source_an_f_e: value = 5; break; case uper_c_source_an_g_e: value = 6; break; case uper_c_source_an_h_e: value = 7; break; case uper_c_source_an_i_e: value = 8; break; case uper_c_source_an_j_e: value = 9; break; case uper_c_source_an_k_e: value = 10; break; default: encoder_abort(encoder_p, EBADENUM); return; } encoder_append_non_negative_binary_integer(encoder_p, value, 4); } static void uper_c_source_an_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_an_t *dst_p) { uint32_t value; value = (uint32_t)decoder_read_non_negative_binary_integer(decoder_p, 4); switch (value) { case 0: dst_p->value = uper_c_source_an_a_e; break; case 1: dst_p->value = uper_c_source_an_b_e; break; case 2: dst_p->value = uper_c_source_an_c_e; break; case 3: dst_p->value = uper_c_source_an_d_e; break; case 4: dst_p->value = uper_c_source_an_e_e; break; case 5: dst_p->value = uper_c_source_an_f_e; break; case 6: dst_p->value = uper_c_source_an_g_e; break; case 7: dst_p->value = uper_c_source_an_h_e; break; case 8: dst_p->value = uper_c_source_an_i_e; break; case 9: dst_p->value = uper_c_source_an_j_e; break; case 10: dst_p->value = uper_c_source_an_k_e; break; default: decoder_abort(decoder_p, EBADENUM); return; } } static void uper_c_source_ao_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_ao_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->a), 8); encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->b), 24); encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->c), 4); encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->d), 32); encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->e), 64); } static void uper_c_source_ao_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_ao_t *dst_p) { dst_p->a = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 8); dst_p->b = (uint32_t)decoder_read_non_negative_binary_integer( decoder_p, 24); dst_p->c = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 4); dst_p->d = (uint32_t)decoder_read_non_negative_binary_integer( decoder_p, 32); dst_p->e = (uint64_t)decoder_read_non_negative_binary_integer( decoder_p, 64); } static void uper_c_ref_referenced_sequence_encode_inner( struct encoder_t *encoder_p, const struct uper_c_ref_referenced_sequence_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->a - 0), 7); } static void uper_c_ref_referenced_sequence_decode_inner( struct decoder_t *decoder_p, struct uper_c_ref_referenced_sequence_t *dst_p) { dst_p->a = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 7); dst_p->a += 0; } static void uper_c_ref_referenced_enum_encode_inner( struct encoder_t *encoder_p, const struct uper_c_ref_referenced_enum_t *src_p) { uint8_t value; value = src_p->value; encoder_append_non_negative_binary_integer(encoder_p, value, 2); } static void uper_c_ref_referenced_enum_decode_inner( struct decoder_t *decoder_p, struct uper_c_ref_referenced_enum_t *dst_p) { uint8_t value; value = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 2); if (value > 2u) { decoder_abort(decoder_p, EBADENUM); return; } dst_p->value = (enum uper_c_ref_referenced_enum_e)value; } static void uper_c_source_ap_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_ap_t *src_p) { encoder_append_bool(encoder_p, src_p->c.value != uper_c_ref_referenced_enum_a_e); encoder_append_bool(encoder_p, src_p->d != 1); uper_c_ref_referenced_sequence_encode_inner(encoder_p, &src_p->b); if (src_p->c.value != uper_c_ref_referenced_enum_a_e) { uper_c_ref_referenced_enum_encode_inner(encoder_p, &src_p->c); } if (src_p->d != 1) { encoder_append_uint8(encoder_p, src_p->d); } } static void uper_c_source_ap_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_ap_t *dst_p) { bool is_present; bool is_present_2; is_present = decoder_read_bool(decoder_p); is_present_2 = decoder_read_bool(decoder_p); uper_c_ref_referenced_sequence_decode_inner(decoder_p, &dst_p->b); if (is_present) { uper_c_ref_referenced_enum_decode_inner(decoder_p, &dst_p->c); } else { dst_p->c.value = uper_c_ref_referenced_enum_a_e; } if (is_present_2) { dst_p->d = decoder_read_uint8(decoder_p); } else { dst_p->d = 1; } } static void uper_c_source_aq_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_aq_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->value - 0), 24); } static void uper_c_source_aq_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_aq_t *dst_p) { dst_p->value = (uint32_t)decoder_read_non_negative_binary_integer( decoder_p, 24); dst_p->value += 0; } static void uper_c_source_ar_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_ar_t *src_p) { static const uint8_t a_default[] = {0xAB, 0xCD}; encoder_append_bool(encoder_p, (memcmp(src_p->a.buf, a_default, sizeof(a_default)) != 0) || (src_p->a.length != sizeof(a_default))); if ((memcmp(src_p->a.buf, a_default, sizeof(a_default)) != 0) || (src_p->a.length != sizeof(a_default))) { encoder_append_non_negative_binary_integer( encoder_p, src_p->a.length - 0u, 4); encoder_append_bytes(encoder_p, &src_p->a.buf[0], src_p->a.length); } } static void uper_c_source_ar_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_ar_t *dst_p) { bool is_present; static const uint8_t a_default[] = {0xAB, 0xCD}; is_present = decoder_read_bool(decoder_p); if (is_present) { dst_p->a.length = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 4); dst_p->a.length += 0u; if (dst_p->a.length > 10u) { decoder_abort(decoder_p, EBADLENGTH); return; } decoder_read_bytes(decoder_p, &dst_p->a.buf[0], dst_p->a.length); } else { memcpy(dst_p->a.buf, a_default, sizeof(a_default)); dst_p->a.length = sizeof(a_default); } } static void uper_c_source_as_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_as_t *src_p) { encoder_append_bool(encoder_p, src_p->is_a_a_present); encoder_append_bool(encoder_p, src_p->a_c != true); if (src_p->is_a_a_present) { encoder_append_bool(encoder_p, src_p->a_a); } switch (src_p->a_b.choice) { case uper_c_source_as_a_b_choice_b_a_e: encoder_append_non_negative_binary_integer(encoder_p, 0, 1); encoder_append_bool(encoder_p, src_p->a_b.value.b_a); break; case uper_c_source_as_a_b_choice_b_b_e: encoder_append_non_negative_binary_integer(encoder_p, 1, 1); encoder_append_bool(encoder_p, src_p->a_b.value.b_b); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } if (src_p->a_c != true) { encoder_append_bool(encoder_p, src_p->a_c); } } static void uper_c_source_as_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_as_t *dst_p) { bool is_present; uint8_t choice; dst_p->is_a_a_present = decoder_read_bool(decoder_p); is_present = decoder_read_bool(decoder_p); if (dst_p->is_a_a_present) { dst_p->a_a = decoder_read_bool(decoder_p); } choice = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 1); switch (choice) { case 0: dst_p->a_b.choice = uper_c_source_as_a_b_choice_b_a_e; dst_p->a_b.value.b_a = decoder_read_bool(decoder_p); break; case 1: dst_p->a_b.choice = uper_c_source_as_a_b_choice_b_b_e; dst_p->a_b.value.b_b = decoder_read_bool(decoder_p); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } if (is_present) { dst_p->a_c = decoder_read_bool(decoder_p); } else { dst_p->a_c = true; } } static void uper_c_ref_at_encode_inner( struct encoder_t *encoder_p, const struct uper_c_ref_at_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->value), 2); } static void uper_c_ref_at_decode_inner( struct decoder_t *decoder_p, struct uper_c_ref_at_t *dst_p) { dst_p->value = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 2); } static void uper_c_source_at_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_at_t *src_p) { if(src_p->is_b_addition_present) { encoder_abort(encoder_p, EINVAL); return; } encoder_append_bool(encoder_p, false); encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->a - 0), 7); } static void uper_c_source_at_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_at_t *dst_p) { bool extension_is_present; extension_is_present = decoder_read_bool(decoder_p); dst_p->a = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 7); dst_p->a += 0; if(extension_is_present) { decoder_abort(decoder_p, EINVAL); return; } } static void uper_c_ref_au_encode_inner( struct encoder_t *encoder_p, const struct uper_c_ref_au_t *src_p) { uint8_t value; uint8_t value_2; switch (src_p->a_a.choice) { case uper_c_ref_au_a_a_choice_b_a_e: encoder_append_non_negative_binary_integer(encoder_p, 0, 1); value = src_p->a_a.value.b_a; encoder_append_non_negative_binary_integer(encoder_p, value, 1); break; case uper_c_ref_au_a_a_choice_b_b_e: encoder_append_non_negative_binary_integer(encoder_p, 1, 1); value_2 = src_p->a_a.value.b_b; encoder_append_non_negative_binary_integer(encoder_p, value_2, 1); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } static void uper_c_ref_au_decode_inner( struct decoder_t *decoder_p, struct uper_c_ref_au_t *dst_p) { uint8_t choice; uint8_t value; uint8_t value_2; choice = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 1); switch (choice) { case 0: dst_p->a_a.choice = uper_c_ref_au_a_a_choice_b_a_e; value = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 1); dst_p->a_a.value.b_a = (enum uper_c_ref_au_a_a_b_a_e)value; break; case 1: dst_p->a_a.choice = uper_c_ref_au_a_a_choice_b_b_e; value_2 = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 1); dst_p->a_a.value.b_b = (enum uper_c_ref_au_a_a_b_b_e)value_2; break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } static void uper_c_source_b_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_b_t *src_p) { switch (src_p->choice) { case uper_c_source_b_choice_a_e: encoder_append_non_negative_binary_integer(encoder_p, 0, 2); encoder_append_int8(encoder_p, src_p->value.a); break; case uper_c_source_b_choice_b_e: encoder_append_non_negative_binary_integer(encoder_p, 1, 2); uper_c_source_a_encode_inner(encoder_p, &src_p->value.b); break; case uper_c_source_b_choice_c_e: encoder_append_non_negative_binary_integer(encoder_p, 2, 2); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } static void uper_c_source_b_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_b_t *dst_p) { uint8_t choice; choice = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 2); switch (choice) { case 0: dst_p->choice = uper_c_source_b_choice_a_e; dst_p->value.a = decoder_read_int8(decoder_p); break; case 1: dst_p->choice = uper_c_source_b_choice_b_e; uper_c_source_a_decode_inner(decoder_p, &dst_p->value.b); break; case 2: dst_p->choice = uper_c_source_b_choice_c_e; break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } static void uper_c_source_c_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_c_t *src_p) { uint8_t i; encoder_append_non_negative_binary_integer( encoder_p, src_p->length - 0u, 2); for (i = 0; i < src_p->length; i++) { uper_c_source_b_encode_inner(encoder_p, &src_p->elements[i]); } } static void uper_c_source_c_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_c_t *dst_p) { uint8_t i; dst_p->length = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 2); dst_p->length += 0u; if (dst_p->length > 2u) { decoder_abort(decoder_p, EBADLENGTH); return; } for (i = 0; i < dst_p->length; i++) { uper_c_source_b_decode_inner(decoder_p, &dst_p->elements[i]); } } static void uper_c_source_e_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_e_t *src_p) { switch (src_p->a.choice) { case uper_c_source_e_a_choice_b_e: encoder_append_non_negative_binary_integer(encoder_p, 0, 0); switch (src_p->a.value.b.choice) { case uper_c_source_e_a_b_choice_c_e: encoder_append_non_negative_binary_integer(encoder_p, 0, 0); encoder_append_bool(encoder_p, src_p->a.value.b.value.c); break; default: encoder_abort(encoder_p, EBADCHOICE); break; } break; default: encoder_abort(encoder_p, EBADCHOICE); break; } } static void uper_c_source_e_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_e_t *dst_p) { uint8_t choice; uint8_t choice_2; choice = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 0); switch (choice) { case 0: dst_p->a.choice = uper_c_source_e_a_choice_b_e; choice_2 = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 0); switch (choice_2) { case 0: dst_p->a.value.b.choice = uper_c_source_e_a_b_choice_c_e; dst_p->a.value.b.value.c = decoder_read_bool(decoder_p); break; default: decoder_abort(decoder_p, EBADCHOICE); break; } break; default: decoder_abort(decoder_p, EBADCHOICE); break; } } static void uper_c_source_f_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_f_t *src_p) { uint8_t i; uint8_t i_2; encoder_append_non_negative_binary_integer( encoder_p, src_p->length - 1u, 1); for (i = 0; i < src_p->length; i++) { for (i_2 = 0; i_2 < 1; i_2++) { encoder_append_bool(encoder_p, src_p->elements[i].elements[i_2]); } } } static void uper_c_source_f_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_f_t *dst_p) { uint8_t i; uint8_t i_2; dst_p->length = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 1); dst_p->length += 1u; for (i = 0; i < dst_p->length; i++) { for (i_2 = 0; i_2 < 1; i_2++) { dst_p->elements[i].elements[i_2] = decoder_read_bool(decoder_p); } } } static void uper_c_source_g_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_g_t *src_p) { encoder_append_bool(encoder_p, src_p->is_a_present); encoder_append_bool(encoder_p, src_p->is_b_present); encoder_append_bool(encoder_p, src_p->is_c_present); encoder_append_bool(encoder_p, src_p->is_d_present); encoder_append_bool(encoder_p, src_p->is_e_present); encoder_append_bool(encoder_p, src_p->is_f_present); encoder_append_bool(encoder_p, src_p->is_g_present); encoder_append_bool(encoder_p, src_p->is_h_present); encoder_append_bool(encoder_p, src_p->is_i_present); if (src_p->is_a_present) { encoder_append_bool(encoder_p, src_p->a); } if (src_p->is_b_present) { encoder_append_bool(encoder_p, src_p->b); } if (src_p->is_c_present) { encoder_append_bool(encoder_p, src_p->c); } if (src_p->is_d_present) { encoder_append_bool(encoder_p, src_p->d); } if (src_p->is_e_present) { encoder_append_bool(encoder_p, src_p->e); } if (src_p->is_f_present) { encoder_append_bool(encoder_p, src_p->f); } if (src_p->is_g_present) { encoder_append_bool(encoder_p, src_p->g); } if (src_p->is_h_present) { encoder_append_bool(encoder_p, src_p->h); } if (src_p->is_i_present) { encoder_append_bool(encoder_p, src_p->i); } } static void uper_c_source_g_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_g_t *dst_p) { dst_p->is_a_present = decoder_read_bool(decoder_p); dst_p->is_b_present = decoder_read_bool(decoder_p); dst_p->is_c_present = decoder_read_bool(decoder_p); dst_p->is_d_present = decoder_read_bool(decoder_p); dst_p->is_e_present = decoder_read_bool(decoder_p); dst_p->is_f_present = decoder_read_bool(decoder_p); dst_p->is_g_present = decoder_read_bool(decoder_p); dst_p->is_h_present = decoder_read_bool(decoder_p); dst_p->is_i_present = decoder_read_bool(decoder_p); if (dst_p->is_a_present) { dst_p->a = decoder_read_bool(decoder_p); } if (dst_p->is_b_present) { dst_p->b = decoder_read_bool(decoder_p); } if (dst_p->is_c_present) { dst_p->c = decoder_read_bool(decoder_p); } if (dst_p->is_d_present) { dst_p->d = decoder_read_bool(decoder_p); } if (dst_p->is_e_present) { dst_p->e = decoder_read_bool(decoder_p); } if (dst_p->is_f_present) { dst_p->f = decoder_read_bool(decoder_p); } if (dst_p->is_g_present) { dst_p->g = decoder_read_bool(decoder_p); } if (dst_p->is_h_present) { dst_p->h = decoder_read_bool(decoder_p); } if (dst_p->is_i_present) { dst_p->i = decoder_read_bool(decoder_p); } } static void uper_c_source_h_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_h_t *src_p) { (void)encoder_p; (void)src_p; } static void uper_c_source_h_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_h_t *dst_p) { (void)decoder_p; (void)dst_p; } static void uper_c_source_i_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_i_t *src_p) { encoder_append_bytes(encoder_p, &src_p->buf[0], 24); } static void uper_c_source_i_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_i_t *dst_p) { decoder_read_bytes(decoder_p, &dst_p->buf[0], 24); } static void uper_c_source_j_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_j_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, src_p->length - 22u, 1); encoder_append_bytes(encoder_p, &src_p->buf[0], src_p->length); } static void uper_c_source_j_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_j_t *dst_p) { dst_p->length = (uint8_t)decoder_read_non_negative_binary_integer( decoder_p, 1); dst_p->length += 22u; decoder_read_bytes(decoder_p, &dst_p->buf[0], dst_p->length); } static void uper_c_source_k_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_k_t *src_p) { uint8_t value; value = src_p->value; encoder_append_non_negative_binary_integer(encoder_p, value, 0); } static void uper_c_source_k_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_k_t *dst_p) { uint8_t value; value = (uint8_t)decoder_read_non_negative_binary_integer(decoder_p, 0); dst_p->value = (enum uper_c_source_k_e)value; } static void uper_c_source_l_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_l_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, src_p->length - 0u, 9); encoder_append_bytes(encoder_p, &src_p->buf[0], src_p->length); } static void uper_c_source_l_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_l_t *dst_p) { dst_p->length = (uint32_t)decoder_read_non_negative_binary_integer( decoder_p, 9); dst_p->length += 0u; if (dst_p->length > 500u) { decoder_abort(decoder_p, EBADLENGTH); return; } decoder_read_bytes(decoder_p, &dst_p->buf[0], dst_p->length); } static void uper_c_source_o_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_o_t *src_p) { uint16_t i; encoder_append_non_negative_binary_integer( encoder_p, src_p->length - 1u, 9); for (i = 0; i < src_p->length; i++) { encoder_append_bool(encoder_p, src_p->elements[i]); } } static void uper_c_source_o_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_o_t *dst_p) { uint16_t i; dst_p->length = (uint16_t)decoder_read_non_negative_binary_integer( decoder_p, 9); dst_p->length += 1u; if (dst_p->length > 260u) { decoder_abort(decoder_p, EBADLENGTH); return; } for (i = 0; i < dst_p->length; i++) { dst_p->elements[i] = decoder_read_bool(decoder_p); } } static void uper_c_source_n_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_n_t *src_p) { uper_c_source_k_encode_inner(encoder_p, &src_p->a); uper_c_source_a_encode_inner(encoder_p, &src_p->b); uper_c_source_o_encode_inner(encoder_p, &src_p->c); } static void uper_c_source_n_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_n_t *dst_p) { uper_c_source_k_decode_inner(decoder_p, &dst_p->a); uper_c_source_a_decode_inner(decoder_p, &dst_p->b); uper_c_source_o_decode_inner(decoder_p, &dst_p->c); } static void uper_c_source_m_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_m_t *src_p) { uper_c_source_k_encode_inner(encoder_p, &src_p->a); uper_c_source_n_encode_inner(encoder_p, &src_p->b); } static void uper_c_source_m_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_m_t *dst_p) { uper_c_source_k_decode_inner(decoder_p, &dst_p->a); uper_c_source_n_decode_inner(decoder_p, &dst_p->b); } static void uper_c_source_p_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_p_t *src_p) { uper_c_source_a_encode_inner(encoder_p, &src_p->a); uper_c_source_m_encode_inner(encoder_p, &src_p->b); uper_c_source_f_encode_inner(encoder_p, &src_p->c); } static void uper_c_source_p_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_p_t *dst_p) { uper_c_source_a_decode_inner(decoder_p, &dst_p->a); uper_c_source_m_decode_inner(decoder_p, &dst_p->b); uper_c_source_f_decode_inner(decoder_p, &dst_p->c); } static void uper_c_source_r_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_r_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->value - -1), 1); } static void uper_c_source_r_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_r_t *dst_p) { dst_p->value = (int8_t)decoder_read_non_negative_binary_integer( decoder_p, 1); dst_p->value += -1; } static void uper_c_ref_referenced_int_encode_inner( struct encoder_t *encoder_p, const struct uper_c_ref_referenced_int_t *src_p) { encoder_append_uint8(encoder_p, src_p->value); } static void uper_c_ref_referenced_int_decode_inner( struct decoder_t *decoder_p, struct uper_c_ref_referenced_int_t *dst_p) { dst_p->value = decoder_read_uint8(decoder_p); } static void uper_c_source_s_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_s_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->value - -2), 2); } static void uper_c_source_s_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_s_t *dst_p) { dst_p->value = (int8_t)decoder_read_non_negative_binary_integer( decoder_p, 2); dst_p->value += -2; } static void uper_c_source_t_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_t_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->value - -1), 2); } static void uper_c_source_t_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_t_t *dst_p) { dst_p->value = (int8_t)decoder_read_non_negative_binary_integer( decoder_p, 2); dst_p->value += -1; } static void uper_c_source_u_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_u_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->value - -64), 7); } static void uper_c_source_u_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_u_t *dst_p) { dst_p->value = (int8_t)decoder_read_non_negative_binary_integer( decoder_p, 7); dst_p->value += -64; } static void uper_c_source_v_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_v_t *src_p) { encoder_append_int8(encoder_p, src_p->value); } static void uper_c_source_v_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_v_t *dst_p) { dst_p->value = decoder_read_int8(decoder_p); } static void uper_c_source_w_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_w_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->value - -1), 9); } static void uper_c_source_w_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_w_t *dst_p) { dst_p->value = (int16_t)decoder_read_non_negative_binary_integer( decoder_p, 9); dst_p->value += -1; } static void uper_c_source_x_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_x_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->value - -2), 10); } static void uper_c_source_x_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_x_t *dst_p) { dst_p->value = (int16_t)decoder_read_non_negative_binary_integer( decoder_p, 10); dst_p->value += -2; } static void uper_c_source_y_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_y_t *src_p) { encoder_append_non_negative_binary_integer( encoder_p, (uint64_t)(src_p->value - 10000), 10); } static void uper_c_source_y_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_y_t *dst_p) { dst_p->value = (uint16_t)decoder_read_non_negative_binary_integer( decoder_p, 10); dst_p->value += 10000; } static void uper_c_source_z_encode_inner( struct encoder_t *encoder_p, const struct uper_c_source_z_t *src_p) { encoder_append_bool(encoder_p, src_p->value); } static void uper_c_source_z_decode_inner( struct decoder_t *decoder_p, struct uper_c_source_z_t *dst_p) { dst_p->value = decoder_read_bool(decoder_p); } ssize_t uper_c_source_a_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_a_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_a_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_a_decode( struct uper_c_source_a_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_a_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_ab_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ab_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_ab_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_ab_decode( struct uper_c_source_ab_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_ab_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_q_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_q_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_q_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_q_decode( struct uper_c_source_q_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_q_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_d_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_d_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_d_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_d_decode( struct uper_c_source_d_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_d_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_ac_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ac_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_ac_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_ac_decode( struct uper_c_source_ac_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_ac_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_ad_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ad_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_ad_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_ad_decode( struct uper_c_source_ad_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_ad_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_ae_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ae_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_ae_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_ae_decode( struct uper_c_source_ae_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_ae_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_ah_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ah_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_ah_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_ah_decode( struct uper_c_source_ah_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_ah_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_af_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_af_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_af_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_af_decode( struct uper_c_source_af_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_af_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_ag_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ag_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_ag_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_ag_decode( struct uper_c_source_ag_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_ag_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_aj_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_aj_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_aj_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_aj_decode( struct uper_c_source_aj_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_aj_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_ak_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ak_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_ak_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_ak_decode( struct uper_c_source_ak_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_ak_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_ai_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ai_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_ai_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_ai_decode( struct uper_c_source_ai_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_ai_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_al_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_al_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_al_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_al_decode( struct uper_c_source_al_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_al_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_am_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_am_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_am_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_am_decode( struct uper_c_source_am_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_am_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_an_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_an_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_an_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_an_decode( struct uper_c_source_an_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_an_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_ao_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ao_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_ao_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_ao_decode( struct uper_c_source_ao_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_ao_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_ref_referenced_sequence_encode( uint8_t *dst_p, size_t size, const struct uper_c_ref_referenced_sequence_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_ref_referenced_sequence_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_ref_referenced_sequence_decode( struct uper_c_ref_referenced_sequence_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_ref_referenced_sequence_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_ref_referenced_enum_encode( uint8_t *dst_p, size_t size, const struct uper_c_ref_referenced_enum_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_ref_referenced_enum_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_ref_referenced_enum_decode( struct uper_c_ref_referenced_enum_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_ref_referenced_enum_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_ap_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ap_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_ap_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_ap_decode( struct uper_c_source_ap_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_ap_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_aq_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_aq_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_aq_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_aq_decode( struct uper_c_source_aq_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_aq_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_ar_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ar_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_ar_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_ar_decode( struct uper_c_source_ar_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_ar_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_as_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_as_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_as_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_as_decode( struct uper_c_source_as_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_as_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_ref_at_encode( uint8_t *dst_p, size_t size, const struct uper_c_ref_at_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_ref_at_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_ref_at_decode( struct uper_c_ref_at_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_ref_at_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_at_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_at_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_at_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_at_decode( struct uper_c_source_at_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_at_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_ref_au_encode( uint8_t *dst_p, size_t size, const struct uper_c_ref_au_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_ref_au_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_ref_au_decode( struct uper_c_ref_au_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_ref_au_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_b_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_b_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_b_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_b_decode( struct uper_c_source_b_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_b_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_c_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_c_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_c_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_c_decode( struct uper_c_source_c_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_c_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_e_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_e_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_e_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_e_decode( struct uper_c_source_e_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_e_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_f_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_f_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_f_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_f_decode( struct uper_c_source_f_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_f_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_g_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_g_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_g_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_g_decode( struct uper_c_source_g_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_g_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_h_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_h_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_h_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_h_decode( struct uper_c_source_h_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_h_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_i_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_i_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_i_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_i_decode( struct uper_c_source_i_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_i_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_j_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_j_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_j_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_j_decode( struct uper_c_source_j_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_j_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_k_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_k_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_k_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_k_decode( struct uper_c_source_k_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_k_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_l_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_l_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_l_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_l_decode( struct uper_c_source_l_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_l_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_o_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_o_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_o_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_o_decode( struct uper_c_source_o_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_o_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_n_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_n_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_n_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_n_decode( struct uper_c_source_n_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_n_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_m_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_m_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_m_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_m_decode( struct uper_c_source_m_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_m_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_p_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_p_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_p_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_p_decode( struct uper_c_source_p_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_p_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_r_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_r_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_r_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_r_decode( struct uper_c_source_r_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_r_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_ref_referenced_int_encode( uint8_t *dst_p, size_t size, const struct uper_c_ref_referenced_int_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_ref_referenced_int_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_ref_referenced_int_decode( struct uper_c_ref_referenced_int_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_ref_referenced_int_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_s_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_s_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_s_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_s_decode( struct uper_c_source_s_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_s_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_t_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_t_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_t_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_t_decode( struct uper_c_source_t_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_t_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_u_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_u_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_u_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_u_decode( struct uper_c_source_u_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_u_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_v_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_v_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_v_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_v_decode( struct uper_c_source_v_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_v_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_w_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_w_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_w_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_w_decode( struct uper_c_source_w_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_w_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_x_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_x_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_x_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_x_decode( struct uper_c_source_x_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_x_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_y_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_y_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_y_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_y_decode( struct uper_c_source_y_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_y_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } ssize_t uper_c_source_z_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_z_t *src_p) { struct encoder_t encoder; encoder_init(&encoder, dst_p, size); uper_c_source_z_encode_inner(&encoder, src_p); return (encoder_get_result(&encoder)); } ssize_t uper_c_source_z_decode( struct uper_c_source_z_t *dst_p, const uint8_t *src_p, size_t size) { struct decoder_t decoder; decoder_init(&decoder, src_p, size); uper_c_source_z_decode_inner(&decoder, dst_p); return (decoder_get_result(&decoder)); } asn1tools-0.169.0/tests/files/c_source/uper.h000066400000000000000000001674031524544274600210340ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.166.0 Sat Oct 21 09:45:15 2023. */ #ifndef UPER_H #define UPER_H #include #include #include #ifndef ENOMEM # define ENOMEM 12 #endif #ifndef EINVAL # define EINVAL 22 #endif #ifndef EOUTOFDATA # define EOUTOFDATA 500 #endif #ifndef EBADCHOICE # define EBADCHOICE 501 #endif #ifndef EBADLENGTH # define EBADLENGTH 502 #endif #ifndef EBADENUM # define EBADENUM 503 #endif /** * Type A in module CSource. */ struct uper_c_source_a_t { int8_t a; int16_t b; int32_t c; int64_t d; uint8_t e; uint16_t f; uint32_t g; uint64_t h; bool i; struct { uint8_t buf[11]; } j; }; /** * Type AB in module CSource. */ struct uper_c_source_ab_t { int8_t a; uint16_t b; }; /** * Type Q in module CSource. */ enum uper_c_source_q_choice_e { uper_c_source_q_choice_c001_e, uper_c_source_q_choice_c002_e, uper_c_source_q_choice_c003_e, uper_c_source_q_choice_c004_e, uper_c_source_q_choice_c005_e, uper_c_source_q_choice_c006_e, uper_c_source_q_choice_c007_e, uper_c_source_q_choice_c008_e, uper_c_source_q_choice_c009_e, uper_c_source_q_choice_c010_e, uper_c_source_q_choice_c011_e, uper_c_source_q_choice_c012_e, uper_c_source_q_choice_c013_e, uper_c_source_q_choice_c014_e, uper_c_source_q_choice_c015_e, uper_c_source_q_choice_c016_e, uper_c_source_q_choice_c017_e, uper_c_source_q_choice_c018_e, uper_c_source_q_choice_c019_e, uper_c_source_q_choice_c020_e, uper_c_source_q_choice_c021_e, uper_c_source_q_choice_c022_e, uper_c_source_q_choice_c023_e, uper_c_source_q_choice_c024_e, uper_c_source_q_choice_c025_e, uper_c_source_q_choice_c026_e, uper_c_source_q_choice_c027_e, uper_c_source_q_choice_c028_e, uper_c_source_q_choice_c029_e, uper_c_source_q_choice_c030_e, uper_c_source_q_choice_c031_e, uper_c_source_q_choice_c032_e, uper_c_source_q_choice_c033_e, uper_c_source_q_choice_c034_e, uper_c_source_q_choice_c035_e, uper_c_source_q_choice_c036_e, uper_c_source_q_choice_c037_e, uper_c_source_q_choice_c038_e, uper_c_source_q_choice_c039_e, uper_c_source_q_choice_c040_e, uper_c_source_q_choice_c041_e, uper_c_source_q_choice_c042_e, uper_c_source_q_choice_c043_e, uper_c_source_q_choice_c044_e, uper_c_source_q_choice_c045_e, uper_c_source_q_choice_c046_e, uper_c_source_q_choice_c047_e, uper_c_source_q_choice_c048_e, uper_c_source_q_choice_c049_e, uper_c_source_q_choice_c050_e, uper_c_source_q_choice_c051_e, uper_c_source_q_choice_c052_e, uper_c_source_q_choice_c053_e, uper_c_source_q_choice_c054_e, uper_c_source_q_choice_c055_e, uper_c_source_q_choice_c056_e, uper_c_source_q_choice_c057_e, uper_c_source_q_choice_c058_e, uper_c_source_q_choice_c059_e, uper_c_source_q_choice_c060_e, uper_c_source_q_choice_c061_e, uper_c_source_q_choice_c062_e, uper_c_source_q_choice_c063_e, uper_c_source_q_choice_c064_e, uper_c_source_q_choice_c065_e, uper_c_source_q_choice_c066_e, uper_c_source_q_choice_c067_e, uper_c_source_q_choice_c068_e, uper_c_source_q_choice_c069_e, uper_c_source_q_choice_c070_e, uper_c_source_q_choice_c071_e, uper_c_source_q_choice_c072_e, uper_c_source_q_choice_c073_e, uper_c_source_q_choice_c074_e, uper_c_source_q_choice_c075_e, uper_c_source_q_choice_c076_e, uper_c_source_q_choice_c077_e, uper_c_source_q_choice_c078_e, uper_c_source_q_choice_c079_e, uper_c_source_q_choice_c080_e, uper_c_source_q_choice_c081_e, uper_c_source_q_choice_c082_e, uper_c_source_q_choice_c083_e, uper_c_source_q_choice_c084_e, uper_c_source_q_choice_c085_e, uper_c_source_q_choice_c086_e, uper_c_source_q_choice_c087_e, uper_c_source_q_choice_c088_e, uper_c_source_q_choice_c089_e, uper_c_source_q_choice_c090_e, uper_c_source_q_choice_c091_e, uper_c_source_q_choice_c092_e, uper_c_source_q_choice_c093_e, uper_c_source_q_choice_c094_e, uper_c_source_q_choice_c095_e, uper_c_source_q_choice_c096_e, uper_c_source_q_choice_c097_e, uper_c_source_q_choice_c098_e, uper_c_source_q_choice_c099_e, uper_c_source_q_choice_c100_e, uper_c_source_q_choice_c101_e, uper_c_source_q_choice_c102_e, uper_c_source_q_choice_c103_e, uper_c_source_q_choice_c104_e, uper_c_source_q_choice_c105_e, uper_c_source_q_choice_c106_e, uper_c_source_q_choice_c107_e, uper_c_source_q_choice_c108_e, uper_c_source_q_choice_c109_e, uper_c_source_q_choice_c110_e, uper_c_source_q_choice_c111_e, uper_c_source_q_choice_c112_e, uper_c_source_q_choice_c113_e, uper_c_source_q_choice_c114_e, uper_c_source_q_choice_c115_e, uper_c_source_q_choice_c116_e, uper_c_source_q_choice_c117_e, uper_c_source_q_choice_c118_e, uper_c_source_q_choice_c119_e, uper_c_source_q_choice_c120_e, uper_c_source_q_choice_c121_e, uper_c_source_q_choice_c122_e, uper_c_source_q_choice_c123_e, uper_c_source_q_choice_c124_e, uper_c_source_q_choice_c125_e, uper_c_source_q_choice_c126_e, uper_c_source_q_choice_c127_e, uper_c_source_q_choice_c128_e, uper_c_source_q_choice_c129_e, uper_c_source_q_choice_c130_e, uper_c_source_q_choice_c131_e, uper_c_source_q_choice_c132_e, uper_c_source_q_choice_c133_e, uper_c_source_q_choice_c134_e, uper_c_source_q_choice_c135_e, uper_c_source_q_choice_c136_e, uper_c_source_q_choice_c137_e, uper_c_source_q_choice_c138_e, uper_c_source_q_choice_c139_e, uper_c_source_q_choice_c140_e, uper_c_source_q_choice_c141_e, uper_c_source_q_choice_c142_e, uper_c_source_q_choice_c143_e, uper_c_source_q_choice_c144_e, uper_c_source_q_choice_c145_e, uper_c_source_q_choice_c146_e, uper_c_source_q_choice_c147_e, uper_c_source_q_choice_c148_e, uper_c_source_q_choice_c149_e, uper_c_source_q_choice_c150_e, uper_c_source_q_choice_c151_e, uper_c_source_q_choice_c152_e, uper_c_source_q_choice_c153_e, uper_c_source_q_choice_c154_e, uper_c_source_q_choice_c155_e, uper_c_source_q_choice_c156_e, uper_c_source_q_choice_c157_e, uper_c_source_q_choice_c158_e, uper_c_source_q_choice_c159_e, uper_c_source_q_choice_c160_e, uper_c_source_q_choice_c161_e, uper_c_source_q_choice_c162_e, uper_c_source_q_choice_c163_e, uper_c_source_q_choice_c164_e, uper_c_source_q_choice_c165_e, uper_c_source_q_choice_c166_e, uper_c_source_q_choice_c167_e, uper_c_source_q_choice_c168_e, uper_c_source_q_choice_c169_e, uper_c_source_q_choice_c170_e, uper_c_source_q_choice_c171_e, uper_c_source_q_choice_c172_e, uper_c_source_q_choice_c173_e, uper_c_source_q_choice_c174_e, uper_c_source_q_choice_c175_e, uper_c_source_q_choice_c176_e, uper_c_source_q_choice_c177_e, uper_c_source_q_choice_c178_e, uper_c_source_q_choice_c179_e, uper_c_source_q_choice_c180_e, uper_c_source_q_choice_c181_e, uper_c_source_q_choice_c182_e, uper_c_source_q_choice_c183_e, uper_c_source_q_choice_c184_e, uper_c_source_q_choice_c185_e, uper_c_source_q_choice_c186_e, uper_c_source_q_choice_c187_e, uper_c_source_q_choice_c188_e, uper_c_source_q_choice_c189_e, uper_c_source_q_choice_c190_e, uper_c_source_q_choice_c191_e, uper_c_source_q_choice_c192_e, uper_c_source_q_choice_c193_e, uper_c_source_q_choice_c194_e, uper_c_source_q_choice_c195_e, uper_c_source_q_choice_c196_e, uper_c_source_q_choice_c197_e, uper_c_source_q_choice_c198_e, uper_c_source_q_choice_c199_e, uper_c_source_q_choice_c200_e, uper_c_source_q_choice_c201_e, uper_c_source_q_choice_c202_e, uper_c_source_q_choice_c203_e, uper_c_source_q_choice_c204_e, uper_c_source_q_choice_c205_e, uper_c_source_q_choice_c206_e, uper_c_source_q_choice_c207_e, uper_c_source_q_choice_c208_e, uper_c_source_q_choice_c209_e, uper_c_source_q_choice_c210_e, uper_c_source_q_choice_c211_e, uper_c_source_q_choice_c212_e, uper_c_source_q_choice_c213_e, uper_c_source_q_choice_c214_e, uper_c_source_q_choice_c215_e, uper_c_source_q_choice_c216_e, uper_c_source_q_choice_c217_e, uper_c_source_q_choice_c218_e, uper_c_source_q_choice_c219_e, uper_c_source_q_choice_c220_e, uper_c_source_q_choice_c221_e, uper_c_source_q_choice_c222_e, uper_c_source_q_choice_c223_e, uper_c_source_q_choice_c224_e, uper_c_source_q_choice_c225_e, uper_c_source_q_choice_c226_e, uper_c_source_q_choice_c227_e, uper_c_source_q_choice_c228_e, uper_c_source_q_choice_c229_e, uper_c_source_q_choice_c230_e, uper_c_source_q_choice_c231_e, uper_c_source_q_choice_c232_e, uper_c_source_q_choice_c233_e, uper_c_source_q_choice_c234_e, uper_c_source_q_choice_c235_e, uper_c_source_q_choice_c236_e, uper_c_source_q_choice_c237_e, uper_c_source_q_choice_c238_e, uper_c_source_q_choice_c239_e, uper_c_source_q_choice_c240_e, uper_c_source_q_choice_c241_e, uper_c_source_q_choice_c242_e, uper_c_source_q_choice_c243_e, uper_c_source_q_choice_c244_e, uper_c_source_q_choice_c245_e, uper_c_source_q_choice_c246_e, uper_c_source_q_choice_c247_e, uper_c_source_q_choice_c248_e, uper_c_source_q_choice_c249_e, uper_c_source_q_choice_c250_e, uper_c_source_q_choice_c251_e, uper_c_source_q_choice_c252_e, uper_c_source_q_choice_c253_e, uper_c_source_q_choice_c254_e, uper_c_source_q_choice_c255_e, uper_c_source_q_choice_c256_e, uper_c_source_q_choice_c257_e }; struct uper_c_source_q_t { enum uper_c_source_q_choice_e choice; union { bool c001; bool c002; bool c003; bool c004; bool c005; bool c006; bool c007; bool c008; bool c009; bool c010; bool c011; bool c012; bool c013; bool c014; bool c015; bool c016; bool c017; bool c018; bool c019; bool c020; bool c021; bool c022; bool c023; bool c024; bool c025; bool c026; bool c027; bool c028; bool c029; bool c030; bool c031; bool c032; bool c033; bool c034; bool c035; bool c036; bool c037; bool c038; bool c039; bool c040; bool c041; bool c042; bool c043; bool c044; bool c045; bool c046; bool c047; bool c048; bool c049; bool c050; bool c051; bool c052; bool c053; bool c054; bool c055; bool c056; bool c057; bool c058; bool c059; bool c060; bool c061; bool c062; bool c063; bool c064; bool c065; bool c066; bool c067; bool c068; bool c069; bool c070; bool c071; bool c072; bool c073; bool c074; bool c075; bool c076; bool c077; bool c078; bool c079; bool c080; bool c081; bool c082; bool c083; bool c084; bool c085; bool c086; bool c087; bool c088; bool c089; bool c090; bool c091; bool c092; bool c093; bool c094; bool c095; bool c096; bool c097; bool c098; bool c099; bool c100; bool c101; bool c102; bool c103; bool c104; bool c105; bool c106; bool c107; bool c108; bool c109; bool c110; bool c111; bool c112; bool c113; bool c114; bool c115; bool c116; bool c117; bool c118; bool c119; bool c120; bool c121; bool c122; bool c123; bool c124; bool c125; bool c126; bool c127; bool c128; bool c129; bool c130; bool c131; bool c132; bool c133; bool c134; bool c135; bool c136; bool c137; bool c138; bool c139; bool c140; bool c141; bool c142; bool c143; bool c144; bool c145; bool c146; bool c147; bool c148; bool c149; bool c150; bool c151; bool c152; bool c153; bool c154; bool c155; bool c156; bool c157; bool c158; bool c159; bool c160; bool c161; bool c162; bool c163; bool c164; bool c165; bool c166; bool c167; bool c168; bool c169; bool c170; bool c171; bool c172; bool c173; bool c174; bool c175; bool c176; bool c177; bool c178; bool c179; bool c180; bool c181; bool c182; bool c183; bool c184; bool c185; bool c186; bool c187; bool c188; bool c189; bool c190; bool c191; bool c192; bool c193; bool c194; bool c195; bool c196; bool c197; bool c198; bool c199; bool c200; bool c201; bool c202; bool c203; bool c204; bool c205; bool c206; bool c207; bool c208; bool c209; bool c210; bool c211; bool c212; bool c213; bool c214; bool c215; bool c216; bool c217; bool c218; bool c219; bool c220; bool c221; bool c222; bool c223; bool c224; bool c225; bool c226; bool c227; bool c228; bool c229; bool c230; bool c231; bool c232; bool c233; bool c234; bool c235; bool c236; bool c237; bool c238; bool c239; bool c240; bool c241; bool c242; bool c243; bool c244; bool c245; bool c246; bool c247; bool c248; bool c249; bool c250; bool c251; bool c252; bool c253; bool c254; bool c255; bool c256; bool c257; } value; }; /** * Type D in module CSource. */ enum uper_c_source_d_a_b_choice_e { uper_c_source_d_a_b_choice_c_e, uper_c_source_d_a_b_choice_d_e }; enum uper_c_source_d_g_h_e { uper_c_source_d_g_h_i_e = 0, uper_c_source_d_g_h_j_e = 4, uper_c_source_d_g_h_k_e = 512 }; struct uper_c_source_d_t { uint8_t length; struct { struct { struct { enum uper_c_source_d_a_b_choice_e choice; union { uint8_t c; bool d; } value; } b; struct { uint8_t length; } e; } a; struct { enum uper_c_source_d_g_h_e h; struct { uint8_t length; uint8_t buf[2]; } l; } g; struct { bool is_n_present; bool n; int8_t o; bool is_p_present; struct { struct { uint8_t buf[5]; } q; bool is_r_present; bool r; } p; bool s; } m; } elements[10]; }; /** * Type AC in module CSource. */ struct uper_c_source_ac_t { struct uper_c_source_q_t a; struct uper_c_source_d_t b; }; /** * Type AD in module CSource. */ enum uper_c_source_ad_e { uper_c_source_ad_a_e = 0, uper_c_source_ad_b_e = 1 }; struct uper_c_source_ad_t { enum uper_c_source_ad_e value; }; /** * Type AE in module CSource. */ struct uper_c_source_ae_t { bool is_a_present; bool a; bool b; bool c; }; /** * Type AH in module CSource. */ enum uper_c_source_ah_e_e { uper_c_source_ah_e_f_e = 0, uper_c_source_ah_e_g_e = 1, uper_c_source_ah_e_h_e = 2 }; struct uper_c_source_ah_t { bool c; bool is_d_addition_present; uint8_t d; bool is_e_addition_present; enum uper_c_source_ah_e_e e; }; /** * Type AF in module CSource. */ struct uper_c_source_af_t { bool a; bool is_b_addition_present; struct uper_c_source_ah_t b; bool is_e_addition_present; uint8_t e; bool is_f_addition_present; uint8_t f; bool is_g_addition_present; uint8_t g; bool is_h_addition_present; uint8_t h; bool is_i_addition_present; uint8_t i; bool is_j_addition_present; uint8_t j; bool is_k_addition_present; uint8_t k; bool is_l_addition_present; uint8_t l; }; /** * Type AG in module CSource. */ enum uper_c_source_ag_d_e { uper_c_source_ag_d_e_e = 0, uper_c_source_ag_d_f_e = 256, uper_c_source_ag_d_g_e = 65536 }; enum uper_c_source_ag_j_choice_e { uper_c_source_ag_j_choice_k_e, uper_c_source_ag_j_choice_l_e }; struct uper_c_source_ag_t { bool a; bool is_b_addition_present; struct { uint8_t length; uint8_t buf[10]; } b; bool is_c_addition_present; struct { uint8_t length; bool elements[10]; } c; bool is_d_addition_present; enum uper_c_source_ag_d_e d; bool is_h_addition_present; bool is_i_addition_present; bool is_j_addition_present; struct { enum uper_c_source_ag_j_choice_e choice; union { uint16_t k; bool l; } value; } j; bool is_m_addition_present; struct { uint8_t buf[5]; } m; }; /** * Type AJ in module CSource. */ enum uper_c_source_aj_a_e { uper_c_source_aj_a_a_1_e = 0, uper_c_source_aj_a_a_2_e = 1 }; struct uper_c_source_aj_t { enum uper_c_source_aj_a_e a; }; /** * Type AK in module CSource. */ enum uper_c_source_ak_choice_e { uper_c_source_ak_choice_a_e }; struct uper_c_source_ak_t { enum uper_c_source_ak_choice_e choice; union { struct uper_c_source_aj_t a; } value; }; /** * Type AI in module CSource. */ struct uper_c_source_ai_t { struct uper_c_source_ak_t a; }; /** * Type AL in module CSource. */ struct uper_c_source_al_t { int16_t value; }; /** * Type AM in module CSource. */ struct uper_c_source_am_t { int8_t value; }; /** * Type AN in module CSource. */ enum uper_c_source_an_e { uper_c_source_an_a_e = -16777216, uper_c_source_an_b_e = -8388608, uper_c_source_an_c_e = -65536, uper_c_source_an_d_e = -32768, uper_c_source_an_e_e = -128, uper_c_source_an_f_e = 0, uper_c_source_an_g_e = 127, uper_c_source_an_h_e = 128, uper_c_source_an_i_e = 32767, uper_c_source_an_j_e = 65536, uper_c_source_an_k_e = 16777216 }; struct uper_c_source_an_t { enum uper_c_source_an_e value; }; /** * Type AO in module CSource. */ static const uint8_t UPER_C_SOURCE_AO_A_A = 0x80; static const uint8_t UPER_C_SOURCE_AO_A_B = 0x40; static const uint8_t UPER_C_SOURCE_AO_A_C = 0x1; static const uint32_t UPER_C_SOURCE_AO_B_A = 0x800000; static const uint32_t UPER_C_SOURCE_AO_B_B = 0x400000; static const uint32_t UPER_C_SOURCE_AO_B_C = 0x1; static const uint32_t UPER_C_SOURCE_AO_D_A = 0x40000000; static const uint32_t UPER_C_SOURCE_AO_D_B = 0x20000000; static const uint32_t UPER_C_SOURCE_AO_D_C = 0x1; static const uint64_t UPER_C_SOURCE_AO_E_A = 0x4000000000000000; static const uint64_t UPER_C_SOURCE_AO_E_B = 0x80000000; static const uint64_t UPER_C_SOURCE_AO_E_C = 0x01; struct uper_c_source_ao_t { uint8_t a; uint32_t b; uint8_t c; uint32_t d; uint64_t e; }; /** * Type REFERENCED-SEQUENCE in module CRef. */ struct uper_c_ref_referenced_sequence_t { uint8_t a; }; /** * Type REFERENCED-ENUM in module CRef. */ enum uper_c_ref_referenced_enum_e { uper_c_ref_referenced_enum_a_e = 0, uper_c_ref_referenced_enum_b_e = 1, uper_c_ref_referenced_enum_c_e = 2 }; struct uper_c_ref_referenced_enum_t { enum uper_c_ref_referenced_enum_e value; }; /** * Type AP in module CSource. */ struct uper_c_source_ap_t { struct uper_c_ref_referenced_sequence_t b; struct uper_c_ref_referenced_enum_t c; uint8_t d; }; /** * Type AQ in module CSource. */ struct uper_c_source_aq_t { uint32_t value; }; /** * Type AR in module CSource. */ struct uper_c_source_ar_t { struct { uint8_t length; uint8_t buf[10]; } a; }; /** * Type AS in module CSource. */ enum uper_c_source_as_a_b_choice_e { uper_c_source_as_a_b_choice_b_a_e, uper_c_source_as_a_b_choice_b_b_e }; struct uper_c_source_as_t { bool is_a_a_present; bool a_a; struct { enum uper_c_source_as_a_b_choice_e choice; union { bool b_a; bool b_b; } value; } a_b; bool a_c; }; /** * Type AT in module CRef. */ struct uper_c_ref_at_t { uint8_t value; }; /** * Type AT in module CSource. */ struct uper_c_source_at_t { uint8_t a; bool is_b_addition_present; struct { uint8_t length; struct uper_c_source_a_t elements[32]; } b; }; /** * Type AU in module CRef. */ enum uper_c_ref_au_a_a_b_a_e { uper_c_ref_au_a_a_b_a_a_e = 0, uper_c_ref_au_a_a_b_a_b_e = 1 }; enum uper_c_ref_au_a_a_b_b_e { uper_c_ref_au_a_a_b_b_a_e = 0, uper_c_ref_au_a_a_b_b_b_e = 1 }; enum uper_c_ref_au_a_a_choice_e { uper_c_ref_au_a_a_choice_b_a_e, uper_c_ref_au_a_a_choice_b_b_e }; struct uper_c_ref_au_t { struct { enum uper_c_ref_au_a_a_choice_e choice; union { enum uper_c_ref_au_a_a_b_a_e b_a; enum uper_c_ref_au_a_a_b_b_e b_b; } value; } a_a; }; /** * Type B in module CSource. */ enum uper_c_source_b_choice_e { uper_c_source_b_choice_a_e, uper_c_source_b_choice_b_e, uper_c_source_b_choice_c_e }; struct uper_c_source_b_t { enum uper_c_source_b_choice_e choice; union { int8_t a; struct uper_c_source_a_t b; } value; }; /** * Type C in module CSource. */ struct uper_c_source_c_t { uint8_t length; struct uper_c_source_b_t elements[2]; }; /** * Type E in module CSource. */ enum uper_c_source_e_a_b_choice_e { uper_c_source_e_a_b_choice_c_e }; enum uper_c_source_e_a_choice_e { uper_c_source_e_a_choice_b_e }; struct uper_c_source_e_t { struct { enum uper_c_source_e_a_choice_e choice; union { struct { enum uper_c_source_e_a_b_choice_e choice; union { bool c; } value; } b; } value; } a; }; /** * Type F in module CSource. */ struct uper_c_source_f_t { uint8_t length; struct { bool elements[1]; } elements[2]; }; /** * Type G in module CSource. */ struct uper_c_source_g_t { bool is_a_present; bool a; bool is_b_present; bool b; bool is_c_present; bool c; bool is_d_present; bool d; bool is_e_present; bool e; bool is_f_present; bool f; bool is_g_present; bool g; bool is_h_present; bool h; bool is_i_present; bool i; }; /** * Type H in module CSource. */ struct uper_c_source_h_t { uint8_t dummy; }; /** * Type I in module CSource. */ struct uper_c_source_i_t { uint8_t buf[24]; }; /** * Type J in module CSource. */ struct uper_c_source_j_t { uint8_t length; uint8_t buf[23]; }; /** * Type K in module CSource. */ enum uper_c_source_k_e { uper_c_source_k_a_e = 0 }; struct uper_c_source_k_t { enum uper_c_source_k_e value; }; /** * Type L in module CSource. */ struct uper_c_source_l_t { uint32_t length; uint8_t buf[500]; }; /** * Type O in module CSource. */ struct uper_c_source_o_t { uint32_t length; bool elements[260]; }; /** * Type N in module CSource. */ struct uper_c_source_n_t { struct uper_c_source_k_t a; struct uper_c_source_a_t b; struct uper_c_source_o_t c; }; /** * Type M in module CSource. */ struct uper_c_source_m_t { struct uper_c_source_k_t a; struct uper_c_source_n_t b; }; /** * Type P in module CSource. */ struct uper_c_source_p_t { struct uper_c_source_a_t a; struct uper_c_source_m_t b; struct uper_c_source_f_t c; }; /** * Type R in module CSource. */ struct uper_c_source_r_t { int8_t value; }; /** * Type REFERENCED-INT in module CRef. */ struct uper_c_ref_referenced_int_t { uint8_t value; }; /** * Type S in module CSource. */ struct uper_c_source_s_t { int8_t value; }; /** * Type T in module CSource. */ struct uper_c_source_t_t { int8_t value; }; /** * Type U in module CSource. */ struct uper_c_source_u_t { int8_t value; }; /** * Type V in module CSource. */ struct uper_c_source_v_t { int8_t value; }; /** * Type W in module CSource. */ struct uper_c_source_w_t { int16_t value; }; /** * Type X in module CSource. */ struct uper_c_source_x_t { int16_t value; }; /** * Type Y in module CSource. */ struct uper_c_source_y_t { uint16_t value; }; /** * Type Z in module CSource. */ struct uper_c_source_z_t { bool value; }; /** * Encode type A defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_a_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_a_t *src_p); /** * Decode type A defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_a_decode( struct uper_c_source_a_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AB defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_ab_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ab_t *src_p); /** * Decode type AB defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_ab_decode( struct uper_c_source_ab_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Q defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_q_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_q_t *src_p); /** * Decode type Q defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_q_decode( struct uper_c_source_q_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type D defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_d_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_d_t *src_p); /** * Decode type D defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_d_decode( struct uper_c_source_d_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AC defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_ac_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ac_t *src_p); /** * Decode type AC defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_ac_decode( struct uper_c_source_ac_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AD defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_ad_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ad_t *src_p); /** * Decode type AD defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_ad_decode( struct uper_c_source_ad_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AE defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_ae_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ae_t *src_p); /** * Decode type AE defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_ae_decode( struct uper_c_source_ae_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AH defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_ah_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ah_t *src_p); /** * Decode type AH defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_ah_decode( struct uper_c_source_ah_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AF defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_af_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_af_t *src_p); /** * Decode type AF defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_af_decode( struct uper_c_source_af_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AG defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_ag_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ag_t *src_p); /** * Decode type AG defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_ag_decode( struct uper_c_source_ag_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AJ defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_aj_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_aj_t *src_p); /** * Decode type AJ defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_aj_decode( struct uper_c_source_aj_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AK defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_ak_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ak_t *src_p); /** * Decode type AK defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_ak_decode( struct uper_c_source_ak_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AI defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_ai_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ai_t *src_p); /** * Decode type AI defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_ai_decode( struct uper_c_source_ai_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AL defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_al_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_al_t *src_p); /** * Decode type AL defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_al_decode( struct uper_c_source_al_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AM defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_am_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_am_t *src_p); /** * Decode type AM defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_am_decode( struct uper_c_source_am_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AN defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_an_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_an_t *src_p); /** * Decode type AN defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_an_decode( struct uper_c_source_an_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AO defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_ao_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ao_t *src_p); /** * Decode type AO defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_ao_decode( struct uper_c_source_ao_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type REFERENCED-SEQUENCE defined in module CRef. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_ref_referenced_sequence_encode( uint8_t *dst_p, size_t size, const struct uper_c_ref_referenced_sequence_t *src_p); /** * Decode type REFERENCED-SEQUENCE defined in module CRef. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_ref_referenced_sequence_decode( struct uper_c_ref_referenced_sequence_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type REFERENCED-ENUM defined in module CRef. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_ref_referenced_enum_encode( uint8_t *dst_p, size_t size, const struct uper_c_ref_referenced_enum_t *src_p); /** * Decode type REFERENCED-ENUM defined in module CRef. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_ref_referenced_enum_decode( struct uper_c_ref_referenced_enum_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AP defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_ap_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ap_t *src_p); /** * Decode type AP defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_ap_decode( struct uper_c_source_ap_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AQ defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_aq_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_aq_t *src_p); /** * Decode type AQ defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_aq_decode( struct uper_c_source_aq_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AR defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_ar_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_ar_t *src_p); /** * Decode type AR defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_ar_decode( struct uper_c_source_ar_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AS defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_as_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_as_t *src_p); /** * Decode type AS defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_as_decode( struct uper_c_source_as_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AT defined in module CRef. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_ref_at_encode( uint8_t *dst_p, size_t size, const struct uper_c_ref_at_t *src_p); /** * Decode type AT defined in module CRef. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_ref_at_decode( struct uper_c_ref_at_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AT defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_at_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_at_t *src_p); /** * Decode type AT defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_at_decode( struct uper_c_source_at_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type AU defined in module CRef. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_ref_au_encode( uint8_t *dst_p, size_t size, const struct uper_c_ref_au_t *src_p); /** * Decode type AU defined in module CRef. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_ref_au_decode( struct uper_c_ref_au_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type B defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_b_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_b_t *src_p); /** * Decode type B defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_b_decode( struct uper_c_source_b_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type C defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_c_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_c_t *src_p); /** * Decode type C defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_c_decode( struct uper_c_source_c_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type E defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_e_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_e_t *src_p); /** * Decode type E defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_e_decode( struct uper_c_source_e_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type F defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_f_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_f_t *src_p); /** * Decode type F defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_f_decode( struct uper_c_source_f_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type G defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_g_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_g_t *src_p); /** * Decode type G defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_g_decode( struct uper_c_source_g_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type H defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_h_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_h_t *src_p); /** * Decode type H defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_h_decode( struct uper_c_source_h_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type I defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_i_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_i_t *src_p); /** * Decode type I defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_i_decode( struct uper_c_source_i_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type J defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_j_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_j_t *src_p); /** * Decode type J defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_j_decode( struct uper_c_source_j_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type K defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_k_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_k_t *src_p); /** * Decode type K defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_k_decode( struct uper_c_source_k_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type L defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_l_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_l_t *src_p); /** * Decode type L defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_l_decode( struct uper_c_source_l_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type O defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_o_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_o_t *src_p); /** * Decode type O defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_o_decode( struct uper_c_source_o_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type N defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_n_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_n_t *src_p); /** * Decode type N defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_n_decode( struct uper_c_source_n_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type M defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_m_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_m_t *src_p); /** * Decode type M defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_m_decode( struct uper_c_source_m_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type P defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_p_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_p_t *src_p); /** * Decode type P defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_p_decode( struct uper_c_source_p_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type R defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_r_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_r_t *src_p); /** * Decode type R defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_r_decode( struct uper_c_source_r_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type REFERENCED-INT defined in module CRef. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_ref_referenced_int_encode( uint8_t *dst_p, size_t size, const struct uper_c_ref_referenced_int_t *src_p); /** * Decode type REFERENCED-INT defined in module CRef. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_ref_referenced_int_decode( struct uper_c_ref_referenced_int_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type S defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_s_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_s_t *src_p); /** * Decode type S defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_s_decode( struct uper_c_source_s_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type T defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_t_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_t_t *src_p); /** * Decode type T defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_t_decode( struct uper_c_source_t_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type U defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_u_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_u_t *src_p); /** * Decode type U defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_u_decode( struct uper_c_source_u_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type V defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_v_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_v_t *src_p); /** * Decode type V defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_v_decode( struct uper_c_source_v_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type W defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_w_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_w_t *src_p); /** * Decode type W defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_w_decode( struct uper_c_source_w_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type X defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_x_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_x_t *src_p); /** * Decode type X defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_x_decode( struct uper_c_source_x_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Y defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_y_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_y_t *src_p); /** * Decode type Y defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_y_decode( struct uper_c_source_y_t *dst_p, const uint8_t *src_p, size_t size); /** * Encode type Z defined in module CSource. * * @param[out] dst_p Buffer to encode into. * @param[in] size Size of dst_p. * @param[in] src_p Data to encode. * * @return Encoded data length or negative error code. */ ssize_t uper_c_source_z_encode( uint8_t *dst_p, size_t size, const struct uper_c_source_z_t *src_p); /** * Decode type Z defined in module CSource. * * @param[out] dst_p Decoded data. * @param[in] src_p Data to decode. * @param[in] size Size of src_p. * * @return Number of bytes decoded or negative error code. */ ssize_t uper_c_source_z_decode( struct uper_c_source_z_t *dst_p, const uint8_t *src_p, size_t size); #endif asn1tools-0.169.0/tests/files/c_source/uper_fuzzer.c000066400000000000000000001710511524544274600224260ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.166.0 Sat Oct 21 09:45:15 2023. */ #include #include #include #include #include #include "uper.h" static void assert_first_encode(ssize_t res) { if (res < 0) { printf("First encode failed with %ld.\n", res); __builtin_trap(); } } static void assert_second_decode(ssize_t res) { if (res < 0) { printf("Second decode failed with %ld.\n", res); __builtin_trap(); } } static void assert_second_decode_data(const void *decoded_p, const void *decoded2_p, size_t size) { if (memcmp(decoded_p, decoded2_p, size) != 0) { printf("Second decode data does not match first decoded data.\n"); __builtin_trap(); } } static void assert_second_encode(ssize_t res, ssize_t res2) { if (res != res2) { printf("Second encode result %ld does not match first pack " "result %ld.\n", res, res2); __builtin_trap(); } } static void assert_second_encode_data(const uint8_t *encoded_p, const uint8_t *encoded2_p, ssize_t size) { ssize_t i; if (memcmp(encoded_p, encoded2_p, size) != 0) { for (i = 0; i < size; i++) { printf("[%04ld]: 0x%02x 0x%02x\n", i, encoded_p[i], encoded2_p[i]); } __builtin_trap(); } } static void test_uper_c_ref_at( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_ref_at_t decoded; struct uper_c_ref_at_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_ref_at_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_ref_at_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_ref_at_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_ref_at_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_ref_au( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_ref_au_t decoded; struct uper_c_ref_au_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_ref_au_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_ref_au_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_ref_au_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_ref_au_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_ref_referenced_enum( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_ref_referenced_enum_t decoded; struct uper_c_ref_referenced_enum_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_ref_referenced_enum_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_ref_referenced_enum_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_ref_referenced_enum_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_ref_referenced_enum_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_ref_referenced_int( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_ref_referenced_int_t decoded; struct uper_c_ref_referenced_int_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_ref_referenced_int_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_ref_referenced_int_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_ref_referenced_int_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_ref_referenced_int_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_ref_referenced_sequence( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_ref_referenced_sequence_t decoded; struct uper_c_ref_referenced_sequence_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_ref_referenced_sequence_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_ref_referenced_sequence_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_ref_referenced_sequence_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_ref_referenced_sequence_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_a( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_a_t decoded; struct uper_c_source_a_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_a_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_a_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_a_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_a_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ab( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ab_t decoded; struct uper_c_source_ab_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ab_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ab_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ab_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ab_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ac( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ac_t decoded; struct uper_c_source_ac_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ac_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ac_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ac_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ac_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ad( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ad_t decoded; struct uper_c_source_ad_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ad_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ad_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ad_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ad_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ae( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ae_t decoded; struct uper_c_source_ae_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ae_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ae_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ae_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ae_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_af( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_af_t decoded; struct uper_c_source_af_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_af_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_af_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_af_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_af_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ag( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ag_t decoded; struct uper_c_source_ag_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ag_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ag_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ag_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ag_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ah( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ah_t decoded; struct uper_c_source_ah_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ah_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ah_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ah_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ah_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ai( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ai_t decoded; struct uper_c_source_ai_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ai_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ai_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ai_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ai_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_aj( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_aj_t decoded; struct uper_c_source_aj_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_aj_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_aj_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_aj_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_aj_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ak( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ak_t decoded; struct uper_c_source_ak_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ak_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ak_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ak_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ak_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_al( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_al_t decoded; struct uper_c_source_al_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_al_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_al_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_al_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_al_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_am( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_am_t decoded; struct uper_c_source_am_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_am_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_am_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_am_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_am_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_an( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_an_t decoded; struct uper_c_source_an_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_an_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_an_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_an_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_an_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ao( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ao_t decoded; struct uper_c_source_ao_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ao_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ao_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ao_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ao_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ap( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ap_t decoded; struct uper_c_source_ap_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ap_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ap_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ap_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ap_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_aq( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_aq_t decoded; struct uper_c_source_aq_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_aq_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_aq_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_aq_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_aq_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ar( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ar_t decoded; struct uper_c_source_ar_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ar_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ar_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ar_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ar_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_as( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_as_t decoded; struct uper_c_source_as_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_as_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_as_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_as_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_as_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_at( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_at_t decoded; struct uper_c_source_at_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_at_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_at_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_at_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_at_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_b( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_b_t decoded; struct uper_c_source_b_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_b_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_b_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_b_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_b_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_c( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_c_t decoded; struct uper_c_source_c_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_c_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_c_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_c_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_c_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_d( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_d_t decoded; struct uper_c_source_d_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_d_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_d_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_d_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_d_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_e( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_e_t decoded; struct uper_c_source_e_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_e_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_e_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_e_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_e_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_f( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_f_t decoded; struct uper_c_source_f_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_f_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_f_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_f_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_f_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_g( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_g_t decoded; struct uper_c_source_g_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_g_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_g_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_g_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_g_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_h( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_h_t decoded; struct uper_c_source_h_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_h_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_h_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_h_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_h_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_i( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_i_t decoded; struct uper_c_source_i_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_i_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_i_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_i_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_i_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_j( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_j_t decoded; struct uper_c_source_j_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_j_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_j_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_j_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_j_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_k( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_k_t decoded; struct uper_c_source_k_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_k_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_k_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_k_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_k_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_l( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_l_t decoded; struct uper_c_source_l_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_l_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_l_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_l_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_l_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_m( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_m_t decoded; struct uper_c_source_m_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_m_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_m_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_m_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_m_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_n( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_n_t decoded; struct uper_c_source_n_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_n_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_n_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_n_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_n_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_o( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_o_t decoded; struct uper_c_source_o_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_o_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_o_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_o_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_o_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_p( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_p_t decoded; struct uper_c_source_p_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_p_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_p_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_p_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_p_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_q( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_q_t decoded; struct uper_c_source_q_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_q_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_q_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_q_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_q_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_r( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_r_t decoded; struct uper_c_source_r_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_r_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_r_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_r_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_r_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_s( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_s_t decoded; struct uper_c_source_s_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_s_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_s_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_s_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_s_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_t( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_t_t decoded; struct uper_c_source_t_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_t_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_t_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_t_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_t_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_u( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_u_t decoded; struct uper_c_source_u_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_u_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_u_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_u_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_u_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_v( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_v_t decoded; struct uper_c_source_v_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_v_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_v_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_v_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_v_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_w( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_w_t decoded; struct uper_c_source_w_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_w_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_w_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_w_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_w_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_x( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_x_t decoded; struct uper_c_source_x_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_x_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_x_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_x_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_x_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_y( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_y_t decoded; struct uper_c_source_y_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_y_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_y_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_y_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_y_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_z( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_z_t decoded; struct uper_c_source_z_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_z_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_z_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_z_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_z_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } int LLVMFuzzerTestOneInput(const uint8_t *data_p, size_t size) { test_uper_c_ref_at(data_p, size); test_uper_c_ref_au(data_p, size); test_uper_c_ref_referenced_enum(data_p, size); test_uper_c_ref_referenced_int(data_p, size); test_uper_c_ref_referenced_sequence(data_p, size); test_uper_c_source_a(data_p, size); test_uper_c_source_ab(data_p, size); test_uper_c_source_ac(data_p, size); test_uper_c_source_ad(data_p, size); test_uper_c_source_ae(data_p, size); test_uper_c_source_af(data_p, size); test_uper_c_source_ag(data_p, size); test_uper_c_source_ah(data_p, size); test_uper_c_source_ai(data_p, size); test_uper_c_source_aj(data_p, size); test_uper_c_source_ak(data_p, size); test_uper_c_source_al(data_p, size); test_uper_c_source_am(data_p, size); test_uper_c_source_an(data_p, size); test_uper_c_source_ao(data_p, size); test_uper_c_source_ap(data_p, size); test_uper_c_source_aq(data_p, size); test_uper_c_source_ar(data_p, size); test_uper_c_source_as(data_p, size); test_uper_c_source_at(data_p, size); test_uper_c_source_b(data_p, size); test_uper_c_source_c(data_p, size); test_uper_c_source_d(data_p, size); test_uper_c_source_e(data_p, size); test_uper_c_source_f(data_p, size); test_uper_c_source_g(data_p, size); test_uper_c_source_h(data_p, size); test_uper_c_source_i(data_p, size); test_uper_c_source_j(data_p, size); test_uper_c_source_k(data_p, size); test_uper_c_source_l(data_p, size); test_uper_c_source_m(data_p, size); test_uper_c_source_n(data_p, size); test_uper_c_source_o(data_p, size); test_uper_c_source_p(data_p, size); test_uper_c_source_q(data_p, size); test_uper_c_source_r(data_p, size); test_uper_c_source_s(data_p, size); test_uper_c_source_t(data_p, size); test_uper_c_source_u(data_p, size); test_uper_c_source_v(data_p, size); test_uper_c_source_w(data_p, size); test_uper_c_source_x(data_p, size); test_uper_c_source_y(data_p, size); test_uper_c_source_z(data_p, size); return (0); } asn1tools-0.169.0/tests/files/c_source/uper_fuzzer.mk000066400000000000000000000034121524544274600226060ustar00rootroot00000000000000# # The MIT License (MIT) # # Copyright (c) 2018-2019 Erik Moqvist # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this software and associated documentation # files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, copy, # modify, merge, publish, distribute, sublicense, and/or sell copies # of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # # # This file was generated by asn1tools version 0.146.6 Fri Apr 10 21:04:22 2020. # CC = clang EXE = fuzzer C_SOURCES = \ uper.c \ uper_fuzzer.c CFLAGS = \ -fprofile-instr-generate \ -fcoverage-mapping \ -I. \ -g -fsanitize=address,fuzzer \ -fsanitize=signed-integer-overflow \ -fno-sanitize-recover=all EXECUTION_TIME ?= 5 all: $(CC) $(CFLAGS) $(C_SOURCES) -o $(EXE) rm -f $(EXE).profraw LLVM_PROFILE_FILE="$(EXE).profraw" \ ./$(EXE) \ -max_total_time=$(EXECUTION_TIME) llvm-profdata merge -sparse $(EXE).profraw -o $(EXE).profdata llvm-cov show ./$(EXE) -instr-profile=$(EXE).profdata llvm-cov report ./$(EXE) -instr-profile=$(EXE).profdata asn1tools-0.169.0/tests/files/cen/000077500000000000000000000000001524544274600166405ustar00rootroot00000000000000asn1tools-0.169.0/tests/files/cen/dsrc.asn000066400000000000000000001015051524544274600203000ustar00rootroot00000000000000-- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^- -- -- module: DSRC -- -- ^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^- DSRC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version2 (2) } DEFINITIONS AUTOMATIC TAGS::= BEGIN IMPORTS Longitude, Latitude, StationID FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2) } Reg-AdvisorySpeed, Reg-ComputedLane, Reg-ConnectionManeuverAssist, Reg-GenericLane, Reg-IntersectionGeometry, Reg-IntersectionState, Reg-LaneAttributes, Reg-MapData, Reg-LaneDataAttribute, Reg-MovementEvent, Reg-MovementState, Reg-NodeAttributeSetXY, Reg-NodeOffsetPointXY, Reg-Position3D, Reg-RequestorDescription, Reg-RequestorType, Reg-RestrictionUserType, Reg-RoadSegment, Reg-RTCMcorrections, Reg-SignalControlZone, Reg-SignalRequestPackage, Reg-SignalRequest, Reg-SignalStatus, Reg-SignalStatusPackage, Reg-SignalRequestMessage, Reg-SignalStatusMessage, Reg-SPAT FROM REGION {iso (1) standard (0) signalizedIntersection (19091) profilec(2) region (1) version2 (2)} Iso3833VehicleType FROM ElectronicRegistrationIdentificationVehicleDataModule { iso(1) standard(0) iso24534 (24534) vehicleData (1) version1 (1) }; -- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ -- Messages -- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ REG-EXT-ID-AND-TYPE ::= CLASS { &id RegionId UNIQUE, &Type } WITH SYNTAX {&Type IDENTIFIED BY &id} RegionalExtension {REG-EXT-ID-AND-TYPE : Set} ::= SEQUENCE { regionId REG-EXT-ID-AND-TYPE.&id( {Set} ), regExtValue REG-EXT-ID-AND-TYPE.&Type( {Set}{@regionId} ) } MapData ::= SEQUENCE { timeStamp MinuteOfTheYear OPTIONAL, msgIssueRevision MsgCount, layerType LayerType OPTIONAL, layerID LayerID OPTIONAL, intersections IntersectionGeometryList OPTIONAL, roadSegments RoadSegmentList OPTIONAL, dataParameters DataParameters OPTIONAL, restrictionList RestrictionClassList OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-MapData}} OPTIONAL, ... } RTCMcorrections ::= SEQUENCE { msgCnt MsgCount, rev RTCM-Revision, timeStamp MinuteOfTheYear OPTIONAL, anchorPoint FullPositionVector OPTIONAL, rtcmHeader RTCMheader OPTIONAL, msgs RTCMmessageList, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-RTCMcorrections}} OPTIONAL, ... } SPAT ::= SEQUENCE { timeStamp MinuteOfTheYear OPTIONAL, name DescriptiveName OPTIONAL, intersections IntersectionStateList, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-SPAT}} OPTIONAL, ... } SignalRequestMessage ::= SEQUENCE { timeStamp MinuteOfTheYear OPTIONAL, second DSecond, sequenceNumber MsgCount OPTIONAL, requests SignalRequestList OPTIONAL, requestor RequestorDescription, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-SignalRequestMessage}} OPTIONAL, ... } SignalStatusMessage ::= SEQUENCE { timeStamp MinuteOfTheYear OPTIONAL, second DSecond, sequenceNumber MsgCount OPTIONAL, status SignalStatusList, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-SignalStatusMessage}} OPTIONAL, ... } -- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ -- Start of entries from table Data_Frames... -- Data frames -- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ AdvisorySpeed ::= SEQUENCE { type AdvisorySpeedType, speed SpeedAdvice OPTIONAL, confidence SpeedConfidence OPTIONAL, distance ZoneLength OPTIONAL, class RestrictionClassID OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-AdvisorySpeed}} OPTIONAL, ... } AdvisorySpeedList ::= SEQUENCE (SIZE(1..16)) OF AdvisorySpeed AntennaOffsetSet ::= SEQUENCE { antOffsetX Offset-B12, antOffsetY Offset-B09, antOffsetZ Offset-B10 } ComputedLane ::= SEQUENCE { referenceLaneId LaneID, offsetXaxis CHOICE { small DrivenLineOffsetSm, large DrivenLineOffsetLg }, offsetYaxis CHOICE { small DrivenLineOffsetSm, large DrivenLineOffsetLg }, rotateXY Angle OPTIONAL, scaleXaxis Scale-B12 OPTIONAL, scaleYaxis Scale-B12 OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-ComputedLane}} OPTIONAL, ... } ConnectsToList ::= SEQUENCE (SIZE(1..16)) OF Connection ConnectingLane ::= SEQUENCE { lane LaneID, maneuver AllowedManeuvers OPTIONAL } Connection ::= SEQUENCE { connectingLane ConnectingLane, remoteIntersection IntersectionReferenceID OPTIONAL, signalGroup SignalGroupID OPTIONAL, userClass RestrictionClassID OPTIONAL, connectionID LaneConnectionID OPTIONAL } ConnectionManeuverAssist ::= SEQUENCE { connectionID LaneConnectionID, queueLength ZoneLength OPTIONAL, availableStorageLength ZoneLength OPTIONAL, waitOnStop WaitOnStopline OPTIONAL, pedBicycleDetect PedestrianBicycleDetect OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-ConnectionManeuverAssist}} OPTIONAL, ... } DataParameters ::= SEQUENCE { processMethod IA5String(SIZE(1..255)) OPTIONAL, processAgency IA5String(SIZE(1..255)) OPTIONAL, lastCheckedDate IA5String(SIZE(1..255)) OPTIONAL, geoidUsed IA5String(SIZE(1..255)) OPTIONAL, ... } DDateTime ::= SEQUENCE { year DYear OPTIONAL, month DMonth OPTIONAL, day DDay OPTIONAL, hour DHour OPTIONAL, minute DMinute OPTIONAL, second DSecond OPTIONAL, offset DOffset OPTIONAL } EnabledLaneList ::= SEQUENCE (SIZE(1..16)) OF LaneID FullPositionVector ::= SEQUENCE { utcTime DDateTime OPTIONAL, -- time with mSec precision long Longitude, lat Latitude, elevation Elevation OPTIONAL, heading Heading OPTIONAL, speed TransmissionAndSpeed OPTIONAL, posAccuracy PositionalAccuracy OPTIONAL, timeConfidence TimeConfidence OPTIONAL, posConfidence PositionConfidenceSet OPTIONAL, speedConfidence SpeedandHeadingandThrottleConfidence OPTIONAL, ... } GenericLane ::= SEQUENCE { laneID LaneID, name DescriptiveName OPTIONAL, ingressApproach ApproachID OPTIONAL, egressApproach ApproachID OPTIONAL, laneAttributes LaneAttributes, maneuvers AllowedManeuvers OPTIONAL, nodeList NodeListXY, connectsTo ConnectsToList OPTIONAL, overlays OverlayLaneList OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-GenericLane}} OPTIONAL, ... } IntersectionAccessPoint ::= CHOICE { lane LaneID, approach ApproachID, connection LaneConnectionID, ... } IntersectionGeometry ::= SEQUENCE { name DescriptiveName OPTIONAL, id IntersectionReferenceID, revision MsgCount, refPoint Position3D, laneWidth LaneWidth OPTIONAL, speedLimits SpeedLimitList OPTIONAL, laneSet LaneList, preemptPriorityData PreemptPriorityList OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-IntersectionGeometry}} OPTIONAL, ... } IntersectionGeometryList ::= SEQUENCE (SIZE(1..32)) OF IntersectionGeometry IntersectionReferenceID ::= SEQUENCE { region RoadRegulatorID OPTIONAL, id IntersectionID } IntersectionState ::= SEQUENCE { name DescriptiveName OPTIONAL, id IntersectionReferenceID, revision MsgCount, status IntersectionStatusObject, moy MinuteOfTheYear OPTIONAL, timeStamp DSecond OPTIONAL, enabledLanes EnabledLaneList OPTIONAL, states MovementList, maneuverAssistList ManeuverAssistList OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-IntersectionState}} OPTIONAL, ... } IntersectionStateList ::= SEQUENCE (SIZE(1..32)) OF IntersectionState LaneAttributes ::= SEQUENCE { directionalUse LaneDirection, sharedWith LaneSharing, laneType LaneTypeAttributes, regional RegionalExtension {{Reg-LaneAttributes}} OPTIONAL } LaneDataAttribute ::= CHOICE { pathEndPointAngle DeltaAngle, laneCrownPointCenter RoadwayCrownAngle, laneCrownPointLeft RoadwayCrownAngle, laneCrownPointRight RoadwayCrownAngle, laneAngle MergeDivergeNodeAngle, speedLimits SpeedLimitList, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-LaneDataAttribute}}, ... } LaneDataAttributeList ::= SEQUENCE (SIZE(1..8)) OF LaneDataAttribute LaneList ::= SEQUENCE (SIZE(1..255)) OF GenericLane LaneSharing ::= BIT STRING { overlappingLaneDescriptionProvided (0), multipleLanesTreatedAsOneLane (1), otherNonMotorizedTrafficTypes (2), individualMotorizedVehicleTraffic (3), busVehicleTraffic (4), taxiVehicleTraffic (5), pedestriansTraffic (6), cyclistVehicleTraffic (7), trackedVehicleTraffic (8), pedestrianTraffic (9) } (SIZE (10)) LaneTypeAttributes ::= CHOICE { vehicle LaneAttributes-Vehicle, crosswalk LaneAttributes-Crosswalk, bikeLane LaneAttributes-Bike, sidewalk LaneAttributes-Sidewalk, median LaneAttributes-Barrier, striping LaneAttributes-Striping, trackedVehicle LaneAttributes-TrackedVehicle, parking LaneAttributes-Parking, ... } ManeuverAssistList ::= SEQUENCE (SIZE(1..16)) OF ConnectionManeuverAssist MovementEvent ::= SEQUENCE { eventState MovementPhaseState, timing TimeChangeDetails OPTIONAL, speeds AdvisorySpeedList OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-MovementEvent}} OPTIONAL, ... } MovementEventList ::= SEQUENCE (SIZE(1..16)) OF MovementEvent MovementList ::= SEQUENCE (SIZE(1..255)) OF MovementState MovementState ::= SEQUENCE { movementName DescriptiveName OPTIONAL, signalGroup SignalGroupID, state-time-speed MovementEventList, maneuverAssistList ManeuverAssistList OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-MovementState}} OPTIONAL, ... } NodeAttributeSetXY ::= SEQUENCE { localNode NodeAttributeXYList OPTIONAL, disabled SegmentAttributeXYList OPTIONAL, enabled SegmentAttributeXYList OPTIONAL, data LaneDataAttributeList OPTIONAL, dWidth Offset-B10 OPTIONAL, dElevation Offset-B10 OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-NodeAttributeSetXY}} OPTIONAL, ... } NodeAttributeXY ::= ENUMERATED { reserved, stopLine, roundedCapStyleA, roundedCapStyleB, mergePoint, divergePoint, downstreamStopLine, downstreamStartNode, closedToTraffic, safeIsland, curbPresentAtStepOff, hydrantPresent, ... } NodeAttributeXYList ::= SEQUENCE (SIZE(1..8)) OF NodeAttributeXY Node-LLmD-64b ::= SEQUENCE { lon Longitude, lat Latitude } Node-XY-20b ::= SEQUENCE { x Offset-B10, y Offset-B10 } Node-XY-22b ::= SEQUENCE { x Offset-B11, y Offset-B11 } Node-XY-24b ::= SEQUENCE { x Offset-B12, y Offset-B12 } Node-XY-26b ::= SEQUENCE { x Offset-B13, y Offset-B13 } Node-XY-28b ::= SEQUENCE { x Offset-B14, y Offset-B14 } Node-XY-32b ::= SEQUENCE { x Offset-B16, y Offset-B16 } NodeListXY ::= CHOICE { nodes NodeSetXY, computed ComputedLane, ... } NodeOffsetPointXY ::= CHOICE { node-XY1 Node-XY-20b, node-XY2 Node-XY-22b, node-XY3 Node-XY-24b, node-XY4 Node-XY-26b, node-XY5 Node-XY-28b, node-XY6 Node-XY-32b, node-LatLon Node-LLmD-64b, regional RegionalExtension {{Reg-NodeOffsetPointXY}} } NodeXY ::= SEQUENCE { delta NodeOffsetPointXY, attributes NodeAttributeSetXY OPTIONAL, ... } NodeSetXY ::= SEQUENCE (SIZE(2..63)) OF NodeXY OverlayLaneList ::= SEQUENCE (SIZE(1..5)) OF LaneID PositionalAccuracy ::= SEQUENCE { semiMajor SemiMajorAxisAccuracy, semiMinor SemiMinorAxisAccuracy, orientation SemiMajorAxisOrientation } PositionConfidenceSet ::= SEQUENCE { pos PositionConfidence, -- for both horizontal directions elevation ElevationConfidence } Position3D ::= SEQUENCE { lat Latitude, long Longitude, elevation Elevation OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-Position3D}} OPTIONAL, ... } PreemptPriorityList ::= SEQUENCE (SIZE(1..32)) OF SignalControlZone RegulatorySpeedLimit ::= SEQUENCE { type SpeedLimitType, speed Velocity } RequestorDescription ::= SEQUENCE { id VehicleID, type RequestorType OPTIONAL, position RequestorPositionVector OPTIONAL, name DescriptiveName OPTIONAL, routeName DescriptiveName OPTIONAL, transitStatus TransitVehicleStatus OPTIONAL, transitOccupancy TransitVehicleOccupancy OPTIONAL, transitSchedule DeltaTime OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-RequestorDescription}} OPTIONAL, ... } RequestorPositionVector ::= SEQUENCE { position Position3D, heading Angle OPTIONAL, speed TransmissionAndSpeed OPTIONAL, ... } RequestorType ::= SEQUENCE { role BasicVehicleRole, subrole RequestSubRole OPTIONAL, request RequestImportanceLevel OPTIONAL, iso3883 Iso3833VehicleType OPTIONAL, hpmsType VehicleType OPTIONAL, regional RegionalExtension {{Reg-RequestorType}} OPTIONAL, ... } RestrictionClassAssignment ::= SEQUENCE { id RestrictionClassID, users RestrictionUserTypeList } RestrictionClassList ::= SEQUENCE (SIZE(1..254)) OF RestrictionClassAssignment RestrictionUserType ::= CHOICE { basicType RestrictionAppliesTo, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-RestrictionUserType}}, ... } RestrictionUserTypeList ::= SEQUENCE (SIZE(1..16)) OF RestrictionUserType RoadLaneSetList ::= SEQUENCE (SIZE(1..255)) OF GenericLane RoadSegmentReferenceID ::= SEQUENCE { region RoadRegulatorID OPTIONAL, id RoadSegmentID } RoadSegment ::= SEQUENCE { name DescriptiveName OPTIONAL, id RoadSegmentReferenceID, revision MsgCount, refPoint Position3D, laneWidth LaneWidth OPTIONAL, speedLimits SpeedLimitList OPTIONAL, roadLaneSet RoadLaneSetList, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-RoadSegment}} OPTIONAL, ... } RoadSegmentList ::= SEQUENCE (SIZE(1..32)) OF RoadSegment RTCMheader ::= SEQUENCE { status GNSSstatus, offsetSet AntennaOffsetSet } RTCMmessageList ::= SEQUENCE (SIZE(1..5)) OF RTCMmessage SegmentAttributeXYList ::= SEQUENCE (SIZE(1..8)) OF SegmentAttributeXY SignalControlZone ::= SEQUENCE { zone RegionalExtension {{Reg-SignalControlZone}}, ... } SignalRequesterInfo ::= SEQUENCE { id VehicleID, request RequestID, sequenceNumber MsgCount, role BasicVehicleRole OPTIONAL, typeData RequestorType OPTIONAL, ... } SignalRequest ::= SEQUENCE { id IntersectionReferenceID, requestID RequestID, requestType PriorityRequestType, inBoundLane IntersectionAccessPoint, outBoundLane IntersectionAccessPoint OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-SignalRequest}} OPTIONAL, ... } SignalRequestList ::= SEQUENCE (SIZE(1..32)) OF SignalRequestPackage SignalRequestPackage ::= SEQUENCE { request SignalRequest, minute MinuteOfTheYear OPTIONAL, second DSecond OPTIONAL, duration DSecond OPTIONAL, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-SignalRequestPackage}} OPTIONAL, ... } SignalStatus ::= SEQUENCE { sequenceNumber MsgCount, id IntersectionReferenceID, sigStatus SignalStatusPackageList, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-SignalStatus}} OPTIONAL, ... } SignalStatusList ::= SEQUENCE (SIZE(1..32)) OF SignalStatus SignalStatusPackageList ::= SEQUENCE (SIZE(1..32)) OF SignalStatusPackage SignalStatusPackage ::= SEQUENCE { requester SignalRequesterInfo OPTIONAL, inboundOn IntersectionAccessPoint, outboundOn IntersectionAccessPoint OPTIONAL, minute MinuteOfTheYear OPTIONAL, second DSecond OPTIONAL, duration DSecond OPTIONAL, status PrioritizationResponseStatus, regional SEQUENCE (SIZE(1..4)) OF RegionalExtension {{Reg-SignalStatusPackage}} OPTIONAL, ... } SpeedandHeadingandThrottleConfidence ::= SEQUENCE { heading HeadingConfidence, speed SpeedConfidence, throttle ThrottleConfidence } SpeedLimitList ::= SEQUENCE (SIZE(1..9)) OF RegulatorySpeedLimit SpeedLimitType ::= ENUMERATED { unknown, maxSpeedInSchoolZone, maxSpeedInSchoolZoneWhenChildrenArePresent, maxSpeedInConstructionZone, vehicleMinSpeed, vehicleMaxSpeed, vehicleNightMaxSpeed, truckMinSpeed, truckMaxSpeed, truckNightMaxSpeed, vehiclesWithTrailersMinSpeed, vehiclesWithTrailersMaxSpeed, vehiclesWithTrailersNightMaxSpeed, ... } TimeChangeDetails ::= SEQUENCE { startTime TimeMark OPTIONAL, minEndTime TimeMark, maxEndTime TimeMark OPTIONAL, likelyTime TimeMark OPTIONAL, confidence TimeIntervalConfidence OPTIONAL, nextTime TimeMark OPTIONAL } TimeMark ::= INTEGER (0..36001) TransmissionAndSpeed ::= SEQUENCE { transmisson TransmissionState, speed Velocity } VehicleID ::= CHOICE { entityID TemporaryID, stationID StationID } -- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ -- data elements -- -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ AdvisorySpeedType ::= ENUMERATED { none (0), greenwave (1), ecoDrive (2), transit (3), ... } AllowedManeuvers ::= BIT STRING { maneuverStraightAllowed (0), maneuverLeftAllowed (1), maneuverRightAllowed (2), maneuverUTurnAllowed (3), maneuverLeftTurnOnRedAllowed (4), maneuverRightTurnOnRedAllowed (5), maneuverLaneChangeAllowed (6), maneuverNoStoppingAllowed (7), yieldAllwaysRequired (8), goWithHalt (9), caution (10), reserved1 (11) } (SIZE(12)) Angle ::= INTEGER (0..28800) ApproachID ::= INTEGER (0..15) BasicVehicleRole ::= ENUMERATED { basicVehicle (0), publicTransport (1), specialTransport (2), dangerousGoods (3), roadWork (4), roadRescue (5), emergency (6), safetyCar (7), none-unknown (8), truck (9), motorcycle (10), roadSideSource (11), police (12), fire (13), ambulance (14), dot (15), transit (16), slowMoving (17), stopNgo (18), cyclist (19), pedestrian (20), nonMotorized (21), military (22), ... } DDay ::= INTEGER (0..31) DeltaAngle ::= INTEGER (-150..150) DeltaTime ::= INTEGER (-122 .. 121) DescriptiveName ::= IA5String (SIZE(1..63)) DHour ::= INTEGER (0..31) DMinute ::= INTEGER (0..60) DMonth ::= INTEGER (0..12) DOffset ::= INTEGER (-840..840) DrivenLineOffsetLg ::= INTEGER (-32767..32767) DrivenLineOffsetSm ::= INTEGER (-2047..2047) DSecond ::= INTEGER (0..65535) DSRCmsgID ::= INTEGER (0..32767) mapData DSRCmsgID ::= 18 rtcmCorrections DSRCmsgID ::= 28 signalPhaseAndTimingMessage DSRCmsgID ::= 19 signalRequestMessage DSRCmsgID ::= 29 signalStatusMessage DSRCmsgID ::= 30 DYear ::= INTEGER (0..4095) Elevation ::= INTEGER (-4096..61439) ElevationConfidence ::= ENUMERATED { unavailable (0), elev-500-00 (1), elev-200-00 (2), elev-100-00 (3), elev-050-00 (4), elev-020-00 (5), elev-010-00 (6), elev-005-00 (7), elev-002-00 (8), elev-001-00 (9), elev-000-50 (10), elev-000-20 (11), elev-000-10 (12), elev-000-05 (13), elev-000-02 (14), elev-000-01 (15) } FuelType ::= INTEGER (0..15) unknownFuel FuelType ::= 0 gasoline FuelType ::= 1 ethanol FuelType ::= 2 diesel FuelType ::= 3 electric FuelType ::= 4 hybrid FuelType ::= 5 hydrogen FuelType ::= 6 natGasLiquid FuelType ::= 7 natGasComp FuelType ::= 8 propane FuelType ::= 9 GNSSstatus ::= BIT STRING { unavailable (0), isHealthy (1), isMonitored (2), baseStationType (3), aPDOPofUnder5 (4), inViewOfUnder5 (5), localCorrectionsPresent (6), networkCorrectionsPresent (7) } (SIZE(8)) HeadingConfidence ::= ENUMERATED { unavailable (0), prec10deg (1), prec05deg (2), prec01deg (3), prec0-1deg (4), prec0-05deg (5), prec0-01deg (6), prec0-0125deg (7) } Heading ::= INTEGER (0..28800) IntersectionID ::= INTEGER (0..65535) IntersectionStatusObject ::= BIT STRING { manualControlIsEnabled (0), stopTimeIsActivated (1), failureFlash (2), preemptIsActive (3), signalPriorityIsActive (4), fixedTimeOperation (5), trafficDependentOperation (6), standbyOperation (7), failureMode (8), off (9), recentMAPmessageUpdate (10), recentChangeInMAPassignedLanesIDsUsed (11), noValidMAPisAvailableAtThisTime (12), noValidSPATisAvailableAtThisTime (13) } (SIZE(16)) LaneAttributes-Barrier ::= BIT STRING { median-RevocableLane (0), median (1), whiteLineHashing (2), stripedLines (3), doubleStripedLines (4), trafficCones (5), constructionBarrier (6), trafficChannels (7), lowCurbs (8), highCurbs (9) } (SIZE (16)) LaneAttributes-Bike ::= BIT STRING { bikeRevocableLane (0), pedestrianUseAllowed (1), isBikeFlyOverLane (2), fixedCycleTime (3), biDirectionalCycleTimes (4), isolatedByBarrier (5), unsignalizedSegmentsPresent (6) } (SIZE (16)) LaneAttributes-Crosswalk ::= BIT STRING { crosswalkRevocableLane (0), bicyleUseAllowed (1), isXwalkFlyOverLane (2), fixedCycleTime (3), biDirectionalCycleTimes (4), hasPushToWalkButton (5), audioSupport (6), rfSignalRequestPresent (7), unsignalizedSegmentsPresent (8) } (SIZE (16)) LaneAttributes-Parking ::= BIT STRING { parkingRevocableLane (0), parallelParkingInUse (1), headInParkingInUse (2), doNotParkZone (3), parkingForBusUse (4), parkingForTaxiUse (5), noPublicParkingUse (6) } (SIZE (16)) LaneAttributes-Sidewalk ::= BIT STRING { sidewalk-RevocableLane (0), bicyleUseAllowed (1), isSidewalkFlyOverLane (2), walkBikes (3) } (SIZE (16)) LaneAttributes-Striping ::= BIT STRING { stripeToConnectingLanesRevocableLane (0), stripeDrawOnLeft (1), stripeDrawOnRight (2), stripeToConnectingLanesLeft (3), stripeToConnectingLanesRight (4), stripeToConnectingLanesAhead (5) } (SIZE (16)) LaneAttributes-TrackedVehicle ::= BIT STRING { spec-RevocableLane (0), spec-commuterRailRoadTrack (1), spec-lightRailRoadTrack (2), spec-heavyRailRoadTrack (3), spec-otherRailType (4) } (SIZE (16)) LaneAttributes-Vehicle ::= BIT STRING { isVehicleRevocableLane (0), isVehicleFlyOverLane (1), hovLaneUseOnly (2), restrictedToBusUse (3), restrictedToTaxiUse (4), restrictedFromPublicUse (5), hasIRbeaconCoverage (6), permissionOnRequest (7) } (SIZE (8,...)) LaneConnectionID ::= INTEGER (0..255) LaneDirection ::= BIT STRING { ingressPath (0), egressPath (1) } (SIZE (2)) LaneID ::= INTEGER (0..255) LayerID ::= INTEGER (0..100) LayerType ::= ENUMERATED { none, mixedContent, generalMapData, intersectionData, curveData, roadwaySectionData, parkingAreaData, sharedLaneData, ... } LaneWidth ::= INTEGER (0..32767) MergeDivergeNodeAngle ::= INTEGER (-180..180) MinuteOfTheYear ::= INTEGER (0..527040) MovementPhaseState ::= ENUMERATED { unavailable (0), dark (1), stop-Then-Proceed (2), stop-And-Remain (3), pre-Movement (4), permissive-Movement-Allowed (5), protected-Movement-Allowed (6), permissive-clearance (7), protected-clearance (8), caution-Conflicting-Traffic (9) } MsgCount ::= INTEGER (0..127) Offset-B09 ::= INTEGER (-256..255) Offset-B10 ::= INTEGER (-512..511) Offset-B11 ::= INTEGER (-1024..1023) Offset-B12 ::= INTEGER (-2048..2047) Offset-B13 ::= INTEGER (-4096..4095) Offset-B14 ::= INTEGER (-8192..8191) Offset-B16 ::= INTEGER (-32768..32767) PedestrianBicycleDetect ::= BOOLEAN PositionConfidence ::= ENUMERATED { unavailable (0), a500m (1), a200m (2), a100m (3), a50m (4), a20m (5), a10m (6), a5m (7), a2m (8), a1m (9), a50cm (10), a20cm (11), a10cm (12), a5cm (13), a2cm (14), a1cm (15) } PrioritizationResponseStatus ::= ENUMERATED { unknown (0), requested (1), processing (2), watchOtherTraffic (3), granted (4), rejected (5), maxPresence (6), reserviceLocked (7), ... } PriorityRequestType ::= ENUMERATED { priorityRequestTypeReserved (0), priorityRequest (1), priorityRequestUpdate (2), priorityCancellation (3), ... } RegionId ::= INTEGER (0..255) noRegion RegionId ::= 0 addGrpA RegionId ::= 1 addGrpB RegionId ::= 2 addGrpC RegionId ::= 3 RequestID ::= INTEGER (0..255) RequestImportanceLevel ::= ENUMERATED { requestImportanceLevelUnKnown (0), requestImportanceLevel1 (1), requestImportanceLevel2 (2), requestImportanceLevel3 (3), requestImportanceLevel4 (4), requestImportanceLevel5 (5), requestImportanceLevel6 (6), requestImportanceLevel7 (7), requestImportanceLevel8 (8), requestImportanceLevel9 (9), requestImportanceLevel10 (10), requestImportanceLevel11 (11), requestImportanceLevel12 (12), requestImportanceLevel13 (13), requestImportanceLevel14 (14), requestImportanceReserved (15) } RequestSubRole ::= ENUMERATED { requestSubRoleUnKnown (0), requestSubRole1 (1), requestSubRole2 (2), requestSubRole3 (3), requestSubRole4 (4), requestSubRole5 (5), requestSubRole6 (6), requestSubRole7 (7), requestSubRole8 (8), requestSubRole9 (9), requestSubRole10 (10), requestSubRole11 (11), requestSubRole12 (12), requestSubRole13 (13), requestSubRole14 (14), requestSubRoleReserved (15) } RestrictionAppliesTo ::= ENUMERATED { none, equippedTransit, equippedTaxis, equippedOther, emissionCompliant, equippedBicycle, weightCompliant, heightCompliant, pedestrians, slowMovingPersons, wheelchairUsers, visualDisabilities, audioDisabilities, otherUnknownDisabilities, ... } RestrictionClassID ::= INTEGER (0..255) RoadRegulatorID ::= INTEGER (0..65535) RoadSegmentID ::= INTEGER (0..65535) RoadwayCrownAngle ::= INTEGER (-128..127) RTCMmessage ::= OCTET STRING (SIZE(1..1023)) RTCM-Revision ::= ENUMERATED { unknown (0), rtcmRev2 (1), -- Std 10402.x et al rtcmRev3 (2), -- Std 10403.x et al reserved (3), ... } Scale-B12 ::= INTEGER (-2048..2047) SignalGroupID ::= INTEGER (0..255) SegmentAttributeXY ::= ENUMERATED { reserved , doNotBlock , whiteLine , mergingLaneLeft , mergingLaneRight , curbOnLeft , curbOnRight , loadingzoneOnLeft , loadingzoneOnRight , turnOutPointOnLeft , turnOutPointOnRight , adjacentParkingOnLeft , adjacentParkingOnRight , adjacentBikeLaneOnLeft , adjacentBikeLaneOnRight , sharedBikeLane , bikeBoxInFront , transitStopOnLeft , transitStopOnRight , transitStopInLane , sharedWithTrackedVehicle , safeIsland , lowCurbsPresent , rumbleStripPresent , audibleSignalingPresent , adaptiveTimingPresent , rfSignalRequestPresent , partialCurbIntrusion , taperToLeft , taperToRight , taperToCenterLine , parallelParking , headInParking , freeParking , timeRestrictionsOnParking , costToPark , midBlockCurbPresent , unEvenPavementPresent , ... } SemiMajorAxisAccuracy ::= INTEGER (0..255) SemiMajorAxisOrientation ::= INTEGER (0..65535) SemiMinorAxisAccuracy ::= INTEGER (0..255) SpeedAdvice ::= INTEGER (0..500) SpeedConfidence ::= ENUMERATED { unavailable (0), -- Not Equipped or unavailable prec100ms (1), -- 100 meters / sec prec10ms (2), -- 10 meters / sec prec5ms (3), -- 5 meters / sec prec1ms (4), -- 1 meters / sec prec0-1ms (5), -- 0.1 meters / sec prec0-05ms (6), -- 0.05 meters / sec prec0-01ms (7) -- 0.01 meters / sec } TemporaryID ::= OCTET STRING (SIZE(4)) ThrottleConfidence ::= ENUMERATED { unavailable (0), prec10percent (1), prec1percent (2), prec0-5percent (3) } TimeConfidence ::= ENUMERATED { unavailable (0), time-100-000 (1), time-050-000 (2), time-020-000 (3), time-010-000 (4), time-002-000 (5), time-001-000 (6), time-000-500 (7), time-000-200 (8), time-000-100 (9), time-000-050 (10), time-000-020 (11), time-000-010 (12), time-000-005 (13), time-000-002 (14), time-000-001 (15), time-000-000-5 (16), time-000-000-2 (17), time-000-000-1 (18), time-000-000-05 (19), time-000-000-02 (20), time-000-000-01 (21), time-000-000-005 (22), time-000-000-002 (23), time-000-000-001 (24), time-000-000-000-5 (25), time-000-000-000-2 (26), time-000-000-000-1 (27), time-000-000-000-05 (28), time-000-000-000-02 (29), time-000-000-000-01 (30), time-000-000-000-005 (31), time-000-000-000-002 (32), time-000-000-000-001 (33), time-000-000-000-000-5 (34), time-000-000-000-000-2 (35), time-000-000-000-000-1 (36), time-000-000-000-000-05 (37), time-000-000-000-000-02 (38), time-000-000-000-000-01 (39) } TimeIntervalConfidence ::= INTEGER (0..15) TransitVehicleOccupancy ::= ENUMERATED { occupancyUnknown (0), occupancyEmpty (1), occupancyVeryLow (2), occupancyLow (3), occupancyMed (4), occupancyHigh (5), occupancyNearlyFull (6), occupancyFull (7) } TransitVehicleStatus ::= BIT STRING { loading (0), anADAuse (1), aBikeLoad (2), doorOpen (3), charging (4), atStopLine (5) } (SIZE(8)) TransmissionState ::= ENUMERATED { neutral (0), park (1), forwardGears (2), reverseGears (3), reserved1 (4), reserved2 (5), reserved3 (6), unavailable (7) } VehicleHeight ::= INTEGER (0..127) VehicleType ::= ENUMERATED { none (0), unknown (1), special (2), moto (3), car (4), carOther (5), bus (6), axleCnt2 (7), axleCnt3 (8), axleCnt4 (9), axleCnt4Trailer (10), axleCnt5Trailer (11), axleCnt6Trailer (12), axleCnt5MultiTrailer (13), axleCnt6MultiTrailer (14), axleCnt7MultiTrailer (15), ... } Velocity ::= INTEGER (0..8191) WaitOnStopline ::= BOOLEAN ZoneLength ::= INTEGER (0..10000) END asn1tools-0.169.0/tests/files/cen/dsrc.py000066400000000000000000002434101524544274600201510ustar00rootroot00000000000000EXPECTED = { 'DSRC': { 'imports': { 'ITS-Container': ['Latitude', 'Longitude', 'StationID'], 'REGION': [ 'Reg-AdvisorySpeed', 'Reg-ComputedLane', 'Reg-ConnectionManeuverAssist', 'Reg-GenericLane', 'Reg-IntersectionGeometry', 'Reg-IntersectionState', 'Reg-LaneAttributes', 'Reg-LaneDataAttribute', 'Reg-MapData', 'Reg-MovementEvent', 'Reg-MovementState', 'Reg-NodeAttributeSetXY', 'Reg-NodeOffsetPointXY', 'Reg-Position3D', 'Reg-RTCMcorrections', 'Reg-RequestorDescription', 'Reg-RequestorType', 'Reg-RestrictionUserType', 'Reg-RoadSegment', 'Reg-SPAT', 'Reg-SignalControlZone', 'Reg-SignalRequest', 'Reg-SignalRequestMessage', 'Reg-SignalRequestPackage', 'Reg-SignalStatus', 'Reg-SignalStatusMessage', 'Reg-SignalStatusPackage' ], 'ElectronicRegistrationIdentificationVehicleDataModule': ['Iso3833VehicleType'] }, 'types': { 'RegionalExtension': { 'type': 'SEQUENCE', 'members': [{ 'type': 'REG-EXT-ID-AND-TYPE.&id', 'table': { 'type': 'Set' }, 'name': 'regionId' }, { 'type': 'REG-EXT-ID-AND-TYPE.&Type', 'table': ['Set', ['regionId']], 'name': 'regExtValue' }], 'parameters': ['Set'] }, 'MapData': { 'type': 'SEQUENCE', 'members': [{ 'type': 'MinuteOfTheYear', 'name': 'timeStamp', 'optional': True }, { 'type': 'MsgCount', 'name': 'msgIssueRevision' }, { 'type': 'LayerType', 'name': 'layerType', 'optional': True }, { 'type': 'LayerID', 'name': 'layerID', 'optional': True }, { 'type': 'IntersectionGeometryList', 'name': 'intersections', 'optional': True }, { 'type': 'RoadSegmentList', 'name': 'roadSegments', 'optional': True }, { 'type': 'DataParameters', 'name': 'dataParameters', 'optional': True }, { 'type': 'RestrictionClassList', 'name': 'restrictionList', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'RTCMcorrections': { 'type': 'SEQUENCE', 'members': [{ 'type': 'MsgCount', 'name': 'msgCnt' }, { 'type': 'RTCM-Revision', 'name': 'rev' }, { 'type': 'MinuteOfTheYear', 'name': 'timeStamp', 'optional': True }, { 'type': 'FullPositionVector', 'name': 'anchorPoint', 'optional': True }, { 'type': 'RTCMheader', 'name': 'rtcmHeader', 'optional': True }, { 'type': 'RTCMmessageList', 'name': 'msgs' }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'SPAT': { 'type': 'SEQUENCE', 'members': [{ 'type': 'MinuteOfTheYear', 'name': 'timeStamp', 'optional': True }, { 'type': 'DescriptiveName', 'name': 'name', 'optional': True }, { 'type': 'IntersectionStateList', 'name': 'intersections' }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'SignalRequestMessage': { 'type': 'SEQUENCE', 'members': [{ 'type': 'MinuteOfTheYear', 'name': 'timeStamp', 'optional': True }, { 'type': 'DSecond', 'name': 'second' }, { 'type': 'MsgCount', 'name': 'sequenceNumber', 'optional': True }, { 'type': 'SignalRequestList', 'name': 'requests', 'optional': True }, { 'type': 'RequestorDescription', 'name': 'requestor' }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'SignalStatusMessage': { 'type': 'SEQUENCE', 'members': [{ 'type': 'MinuteOfTheYear', 'name': 'timeStamp', 'optional': True }, { 'type': 'DSecond', 'name': 'second' }, { 'type': 'MsgCount', 'name': 'sequenceNumber', 'optional': True }, { 'type': 'SignalStatusList', 'name': 'status' }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'AdvisorySpeed': { 'type': 'SEQUENCE', 'members': [{ 'type': 'AdvisorySpeedType', 'name': 'type' }, { 'type': 'SpeedAdvice', 'name': 'speed', 'optional': True }, { 'type': 'SpeedConfidence', 'name': 'confidence', 'optional': True }, { 'type': 'ZoneLength', 'name': 'distance', 'optional': True }, { 'type': 'RestrictionClassID', 'name': 'class', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'AdvisorySpeedList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'AdvisorySpeed' }, 'size': [(1, 16)] }, 'AntennaOffsetSet': { 'type': 'SEQUENCE', 'members': [{ 'type': 'Offset-B12', 'name': 'antOffsetX' }, { 'type': 'Offset-B09', 'name': 'antOffsetY' }, { 'type': 'Offset-B10', 'name': 'antOffsetZ' }] }, 'ComputedLane': { 'type': 'SEQUENCE', 'members': [{ 'type': 'LaneID', 'name': 'referenceLaneId' }, { 'type': 'CHOICE', 'members': [{ 'type': 'DrivenLineOffsetSm', 'name': 'small' }, { 'type': 'DrivenLineOffsetLg', 'name': 'large' }], 'name': 'offsetXaxis' }, { 'type': 'CHOICE', 'members': [{ 'type': 'DrivenLineOffsetSm', 'name': 'small' }, { 'type': 'DrivenLineOffsetLg', 'name': 'large' }], 'name': 'offsetYaxis' }, { 'type': 'Angle', 'name': 'rotateXY', 'optional': True }, { 'type': 'Scale-B12', 'name': 'scaleXaxis', 'optional': True }, { 'type': 'Scale-B12', 'name': 'scaleYaxis', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'ConnectsToList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'Connection' }, 'size': [(1, 16)] }, 'ConnectingLane': { 'type': 'SEQUENCE', 'members': [{ 'type': 'LaneID', 'name': 'lane' }, { 'type': 'AllowedManeuvers', 'name': 'maneuver', 'optional': True }] }, 'Connection': { 'type': 'SEQUENCE', 'members': [{ 'type': 'ConnectingLane', 'name': 'connectingLane' }, { 'type': 'IntersectionReferenceID', 'name': 'remoteIntersection', 'optional': True }, { 'type': 'SignalGroupID', 'name': 'signalGroup', 'optional': True }, { 'type': 'RestrictionClassID', 'name': 'userClass', 'optional': True }, { 'type': 'LaneConnectionID', 'name': 'connectionID', 'optional': True }] }, 'ConnectionManeuverAssist': { 'type': 'SEQUENCE', 'members': [{ 'type': 'LaneConnectionID', 'name': 'connectionID' }, { 'type': 'ZoneLength', 'name': 'queueLength', 'optional': True }, { 'type': 'ZoneLength', 'name': 'availableStorageLength', 'optional': True }, { 'type': 'WaitOnStopline', 'name': 'waitOnStop', 'optional': True }, { 'type': 'PedestrianBicycleDetect', 'name': 'pedBicycleDetect', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'DataParameters': { 'type': 'SEQUENCE', 'members': [{ 'type': 'IA5String', 'size': [(1, 255)], 'name': 'processMethod', 'optional': True }, { 'type': 'IA5String', 'size': [(1, 255)], 'name': 'processAgency', 'optional': True }, { 'type': 'IA5String', 'size': [(1, 255)], 'name': 'lastCheckedDate', 'optional': True }, { 'type': 'IA5String', 'size': [(1, 255)], 'name': 'geoidUsed', 'optional': True }, None] }, 'DDateTime': { 'type': 'SEQUENCE', 'members': [{ 'type': 'DYear', 'name': 'year', 'optional': True }, { 'type': 'DMonth', 'name': 'month', 'optional': True }, { 'type': 'DDay', 'name': 'day', 'optional': True }, { 'type': 'DHour', 'name': 'hour', 'optional': True }, { 'type': 'DMinute', 'name': 'minute', 'optional': True }, { 'type': 'DSecond', 'name': 'second', 'optional': True }, { 'type': 'DOffset', 'name': 'offset', 'optional': True }] }, 'EnabledLaneList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'LaneID' }, 'size': [(1, 16)] }, 'FullPositionVector': { 'type': 'SEQUENCE', 'members': [{ 'type': 'DDateTime', 'name': 'utcTime', 'optional': True }, { 'type': 'Longitude', 'name': 'long' }, { 'type': 'Latitude', 'name': 'lat' }, { 'type': 'Elevation', 'name': 'elevation', 'optional': True }, { 'type': 'Heading', 'name': 'heading', 'optional': True }, { 'type': 'TransmissionAndSpeed', 'name': 'speed', 'optional': True }, { 'type': 'PositionalAccuracy', 'name': 'posAccuracy', 'optional': True }, { 'type': 'TimeConfidence', 'name': 'timeConfidence', 'optional': True }, { 'type': 'PositionConfidenceSet', 'name': 'posConfidence', 'optional': True }, { 'type': 'SpeedandHeadingandThrottleConfidence', 'name': 'speedConfidence', 'optional': True }, None] }, 'GenericLane': { 'type': 'SEQUENCE', 'members': [{ 'type': 'LaneID', 'name': 'laneID' }, { 'type': 'DescriptiveName', 'name': 'name', 'optional': True }, { 'type': 'ApproachID', 'name': 'ingressApproach', 'optional': True }, { 'type': 'ApproachID', 'name': 'egressApproach', 'optional': True }, { 'type': 'LaneAttributes', 'name': 'laneAttributes' }, { 'type': 'AllowedManeuvers', 'name': 'maneuvers', 'optional': True }, { 'type': 'NodeListXY', 'name': 'nodeList' }, { 'type': 'ConnectsToList', 'name': 'connectsTo', 'optional': True }, { 'type': 'OverlayLaneList', 'name': 'overlays', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'IntersectionAccessPoint': { 'type': 'CHOICE', 'members': [{ 'type': 'LaneID', 'name': 'lane' }, { 'type': 'ApproachID', 'name': 'approach' }, { 'type': 'LaneConnectionID', 'name': 'connection' }, None] }, 'IntersectionGeometry': { 'type': 'SEQUENCE', 'members': [{ 'type': 'DescriptiveName', 'name': 'name', 'optional': True }, { 'type': 'IntersectionReferenceID', 'name': 'id' }, { 'type': 'MsgCount', 'name': 'revision' }, { 'type': 'Position3D', 'name': 'refPoint' }, { 'type': 'LaneWidth', 'name': 'laneWidth', 'optional': True }, { 'type': 'SpeedLimitList', 'name': 'speedLimits', 'optional': True }, { 'type': 'LaneList', 'name': 'laneSet' }, { 'type': 'PreemptPriorityList', 'name': 'preemptPriorityData', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'IntersectionGeometryList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'IntersectionGeometry' }, 'size': [(1, 32)] }, 'IntersectionReferenceID': { 'type': 'SEQUENCE', 'members': [{ 'type': 'RoadRegulatorID', 'name': 'region', 'optional': True }, { 'type': 'IntersectionID', 'name': 'id' }] }, 'IntersectionState': { 'type': 'SEQUENCE', 'members': [{ 'type': 'DescriptiveName', 'name': 'name', 'optional': True }, { 'type': 'IntersectionReferenceID', 'name': 'id' }, { 'type': 'MsgCount', 'name': 'revision' }, { 'type': 'IntersectionStatusObject', 'name': 'status' }, { 'type': 'MinuteOfTheYear', 'name': 'moy', 'optional': True }, { 'type': 'DSecond', 'name': 'timeStamp', 'optional': True }, { 'type': 'EnabledLaneList', 'name': 'enabledLanes', 'optional': True }, { 'type': 'MovementList', 'name': 'states' }, { 'type': 'ManeuverAssistList', 'name': 'maneuverAssistList', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'IntersectionStateList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'IntersectionState' }, 'size': [(1, 32)] }, 'LaneAttributes': { 'type': 'SEQUENCE', 'members': [{ 'type': 'LaneDirection', 'name': 'directionalUse' }, { 'type': 'LaneSharing', 'name': 'sharedWith' }, { 'type': 'LaneTypeAttributes', 'name': 'laneType' }, { 'type': 'RegionalExtension', 'actual-parameters': ['{'], 'name': 'regional', 'optional': True }] }, 'LaneDataAttribute': { 'type': 'CHOICE', 'members': [{ 'type': 'DeltaAngle', 'name': 'pathEndPointAngle' }, { 'type': 'RoadwayCrownAngle', 'name': 'laneCrownPointCenter' }, { 'type': 'RoadwayCrownAngle', 'name': 'laneCrownPointLeft' }, { 'type': 'RoadwayCrownAngle', 'name': 'laneCrownPointRight' }, { 'type': 'MergeDivergeNodeAngle', 'name': 'laneAngle' }, { 'type': 'SpeedLimitList', 'name': 'speedLimits' }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional' }, None] }, 'LaneDataAttributeList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'LaneDataAttribute' }, 'size': [(1, 8)] }, 'LaneList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'GenericLane' }, 'size': [(1, 255)] }, 'LaneSharing': { 'type': 'BIT STRING', 'named-bits': [('overlappingLaneDescriptionProvided', '0'), ('multipleLanesTreatedAsOneLane', '1'), ('otherNonMotorizedTrafficTypes', '2'), ('individualMotorizedVehicleTraffic', '3'), ('busVehicleTraffic', '4'), ('taxiVehicleTraffic', '5'), ('pedestriansTraffic', '6'), ('cyclistVehicleTraffic', '7'), ('trackedVehicleTraffic', '8'), ('pedestrianTraffic', '9')], 'size': [10] }, 'LaneTypeAttributes': { 'type': 'CHOICE', 'members': [{ 'type': 'LaneAttributes-Vehicle', 'name': 'vehicle' }, { 'type': 'LaneAttributes-Crosswalk', 'name': 'crosswalk' }, { 'type': 'LaneAttributes-Bike', 'name': 'bikeLane' }, { 'type': 'LaneAttributes-Sidewalk', 'name': 'sidewalk' }, { 'type': 'LaneAttributes-Barrier', 'name': 'median' }, { 'type': 'LaneAttributes-Striping', 'name': 'striping' }, { 'type': 'LaneAttributes-TrackedVehicle', 'name': 'trackedVehicle' }, { 'type': 'LaneAttributes-Parking', 'name': 'parking' }, None] }, 'ManeuverAssistList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'ConnectionManeuverAssist' }, 'size': [(1, 16)] }, 'MovementEvent': { 'type': 'SEQUENCE', 'members': [{ 'type': 'MovementPhaseState', 'name': 'eventState' }, { 'type': 'TimeChangeDetails', 'name': 'timing', 'optional': True }, { 'type': 'AdvisorySpeedList', 'name': 'speeds', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'MovementEventList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'MovementEvent' }, 'size': [(1, 16)] }, 'MovementList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'MovementState' }, 'size': [(1, 255)] }, 'MovementState': { 'type': 'SEQUENCE', 'members': [{ 'type': 'DescriptiveName', 'name': 'movementName', 'optional': True }, { 'type': 'SignalGroupID', 'name': 'signalGroup' }, { 'type': 'MovementEventList', 'name': 'state-time-speed' }, { 'type': 'ManeuverAssistList', 'name': 'maneuverAssistList', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'NodeAttributeSetXY': { 'type': 'SEQUENCE', 'members': [{ 'type': 'NodeAttributeXYList', 'name': 'localNode', 'optional': True }, { 'type': 'SegmentAttributeXYList', 'name': 'disabled', 'optional': True }, { 'type': 'SegmentAttributeXYList', 'name': 'enabled', 'optional': True }, { 'type': 'LaneDataAttributeList', 'name': 'data', 'optional': True }, { 'type': 'Offset-B10', 'name': 'dWidth', 'optional': True }, { 'type': 'Offset-B10', 'name': 'dElevation', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'NodeAttributeXY': { 'type': 'ENUMERATED', 'values': [('reserved', 0), ('stopLine', 1), ('roundedCapStyleA', 2), ('roundedCapStyleB', 3), ('mergePoint', 4), ('divergePoint', 5), ('downstreamStopLine', 6), ('downstreamStartNode', 7), ('closedToTraffic', 8), ('safeIsland', 9), ('curbPresentAtStepOff', 10), ('hydrantPresent', 11), None] }, 'NodeAttributeXYList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'NodeAttributeXY' }, 'size': [(1, 8)] }, 'Node-LLmD-64b': { 'type': 'SEQUENCE', 'members': [{ 'type': 'Longitude', 'name': 'lon' }, { 'type': 'Latitude', 'name': 'lat' }] }, 'Node-XY-20b': { 'type': 'SEQUENCE', 'members': [{ 'type': 'Offset-B10', 'name': 'x' }, { 'type': 'Offset-B10', 'name': 'y' }] }, 'Node-XY-22b': { 'type': 'SEQUENCE', 'members': [{ 'type': 'Offset-B11', 'name': 'x' }, { 'type': 'Offset-B11', 'name': 'y' }] }, 'Node-XY-24b': { 'type': 'SEQUENCE', 'members': [{ 'type': 'Offset-B12', 'name': 'x' }, { 'type': 'Offset-B12', 'name': 'y' }] }, 'Node-XY-26b': { 'type': 'SEQUENCE', 'members': [{ 'type': 'Offset-B13', 'name': 'x' }, { 'type': 'Offset-B13', 'name': 'y' }] }, 'Node-XY-28b': { 'type': 'SEQUENCE', 'members': [{ 'type': 'Offset-B14', 'name': 'x' }, { 'type': 'Offset-B14', 'name': 'y' }] }, 'Node-XY-32b': { 'type': 'SEQUENCE', 'members': [{ 'type': 'Offset-B16', 'name': 'x' }, { 'type': 'Offset-B16', 'name': 'y' }] }, 'NodeListXY': { 'type': 'CHOICE', 'members': [{ 'type': 'NodeSetXY', 'name': 'nodes' }, { 'type': 'ComputedLane', 'name': 'computed' }, None] }, 'NodeOffsetPointXY': { 'type': 'CHOICE', 'members': [{ 'type': 'Node-XY-20b', 'name': 'node-XY1' }, { 'type': 'Node-XY-22b', 'name': 'node-XY2' }, { 'type': 'Node-XY-24b', 'name': 'node-XY3' }, { 'type': 'Node-XY-26b', 'name': 'node-XY4' }, { 'type': 'Node-XY-28b', 'name': 'node-XY5' }, { 'type': 'Node-XY-32b', 'name': 'node-XY6' }, { 'type': 'Node-LLmD-64b', 'name': 'node-LatLon' }, { 'type': 'RegionalExtension', 'actual-parameters': ['{'], 'name': 'regional' }] }, 'NodeXY': { 'type': 'SEQUENCE', 'members': [{ 'type': 'NodeOffsetPointXY', 'name': 'delta' }, { 'type': 'NodeAttributeSetXY', 'name': 'attributes', 'optional': True }, None] }, 'NodeSetXY': { 'type': 'SEQUENCE OF', 'element': { 'type': 'NodeXY' }, 'size': [(2, 63)] }, 'OverlayLaneList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'LaneID' }, 'size': [(1, 5)] }, 'PositionalAccuracy': { 'type': 'SEQUENCE', 'members': [{ 'type': 'SemiMajorAxisAccuracy', 'name': 'semiMajor' }, { 'type': 'SemiMinorAxisAccuracy', 'name': 'semiMinor' }, { 'type': 'SemiMajorAxisOrientation', 'name': 'orientation' }] }, 'PositionConfidenceSet': { 'type': 'SEQUENCE', 'members': [{ 'type': 'PositionConfidence', 'name': 'pos' }, { 'type': 'ElevationConfidence', 'name': 'elevation' }] }, 'Position3D': { 'type': 'SEQUENCE', 'members': [{ 'type': 'Latitude', 'name': 'lat' }, { 'type': 'Longitude', 'name': 'long' }, { 'type': 'Elevation', 'name': 'elevation', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'PreemptPriorityList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'SignalControlZone' }, 'size': [(1, 32)] }, 'RegulatorySpeedLimit': { 'type': 'SEQUENCE', 'members': [{ 'type': 'SpeedLimitType', 'name': 'type' }, { 'type': 'Velocity', 'name': 'speed' }] }, 'RequestorDescription': { 'type': 'SEQUENCE', 'members': [{ 'type': 'VehicleID', 'name': 'id' }, { 'type': 'RequestorType', 'name': 'type', 'optional': True }, { 'type': 'RequestorPositionVector', 'name': 'position', 'optional': True }, { 'type': 'DescriptiveName', 'name': 'name', 'optional': True }, { 'type': 'DescriptiveName', 'name': 'routeName', 'optional': True }, { 'type': 'TransitVehicleStatus', 'name': 'transitStatus', 'optional': True }, { 'type': 'TransitVehicleOccupancy', 'name': 'transitOccupancy', 'optional': True }, { 'type': 'DeltaTime', 'name': 'transitSchedule', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'RequestorPositionVector': { 'type': 'SEQUENCE', 'members': [{ 'type': 'Position3D', 'name': 'position' }, { 'type': 'Angle', 'name': 'heading', 'optional': True }, { 'type': 'TransmissionAndSpeed', 'name': 'speed', 'optional': True }, None] }, 'RequestorType': { 'type': 'SEQUENCE', 'members': [{ 'type': 'BasicVehicleRole', 'name': 'role' }, { 'type': 'RequestSubRole', 'name': 'subrole', 'optional': True }, { 'type': 'RequestImportanceLevel', 'name': 'request', 'optional': True }, { 'type': 'Iso3833VehicleType', 'name': 'iso3883', 'optional': True }, { 'type': 'VehicleType', 'name': 'hpmsType', 'optional': True }, { 'type': 'RegionalExtension', 'actual-parameters': ['{'], 'name': 'regional', 'optional': True }, None] }, 'RestrictionClassAssignment': { 'type': 'SEQUENCE', 'members': [{ 'type': 'RestrictionClassID', 'name': 'id' }, { 'type': 'RestrictionUserTypeList', 'name': 'users' }] }, 'RestrictionClassList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'RestrictionClassAssignment' }, 'size': [(1, 254)] }, 'RestrictionUserType': { 'type': 'CHOICE', 'members': [{ 'type': 'RestrictionAppliesTo', 'name': 'basicType' }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional' }, None] }, 'RestrictionUserTypeList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'RestrictionUserType' }, 'size': [(1, 16)] }, 'RoadLaneSetList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'GenericLane' }, 'size': [(1, 255)] }, 'RoadSegmentReferenceID': { 'type': 'SEQUENCE', 'members': [{ 'type': 'RoadRegulatorID', 'name': 'region', 'optional': True }, { 'type': 'RoadSegmentID', 'name': 'id' }] }, 'RoadSegment': { 'type': 'SEQUENCE', 'members': [{ 'type': 'DescriptiveName', 'name': 'name', 'optional': True }, { 'type': 'RoadSegmentReferenceID', 'name': 'id' }, { 'type': 'MsgCount', 'name': 'revision' }, { 'type': 'Position3D', 'name': 'refPoint' }, { 'type': 'LaneWidth', 'name': 'laneWidth', 'optional': True }, { 'type': 'SpeedLimitList', 'name': 'speedLimits', 'optional': True }, { 'type': 'RoadLaneSetList', 'name': 'roadLaneSet' }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'RoadSegmentList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'RoadSegment' }, 'size': [(1, 32)] }, 'RTCMheader': { 'type': 'SEQUENCE', 'members': [{ 'type': 'GNSSstatus', 'name': 'status' }, { 'type': 'AntennaOffsetSet', 'name': 'offsetSet' }] }, 'RTCMmessageList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'RTCMmessage' }, 'size': [(1, 5)] }, 'SegmentAttributeXYList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'SegmentAttributeXY' }, 'size': [(1, 8)] }, 'SignalControlZone': { 'type': 'SEQUENCE', 'members': [{ 'type': 'RegionalExtension', 'actual-parameters': ['{'], 'name': 'zone' }, None] }, 'SignalRequesterInfo': { 'type': 'SEQUENCE', 'members': [{ 'type': 'VehicleID', 'name': 'id' }, { 'type': 'RequestID', 'name': 'request' }, { 'type': 'MsgCount', 'name': 'sequenceNumber' }, { 'type': 'BasicVehicleRole', 'name': 'role', 'optional': True }, { 'type': 'RequestorType', 'name': 'typeData', 'optional': True }, None] }, 'SignalRequest': { 'type': 'SEQUENCE', 'members': [{ 'type': 'IntersectionReferenceID', 'name': 'id' }, { 'type': 'RequestID', 'name': 'requestID' }, { 'type': 'PriorityRequestType', 'name': 'requestType' }, { 'type': 'IntersectionAccessPoint', 'name': 'inBoundLane' }, { 'type': 'IntersectionAccessPoint', 'name': 'outBoundLane', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'SignalRequestList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'SignalRequestPackage' }, 'size': [(1, 32)] }, 'SignalRequestPackage': { 'type': 'SEQUENCE', 'members': [{ 'type': 'SignalRequest', 'name': 'request' }, { 'type': 'MinuteOfTheYear', 'name': 'minute', 'optional': True }, { 'type': 'DSecond', 'name': 'second', 'optional': True }, { 'type': 'DSecond', 'name': 'duration', 'optional': True }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'SignalStatus': { 'type': 'SEQUENCE', 'members': [{ 'type': 'MsgCount', 'name': 'sequenceNumber' }, { 'type': 'IntersectionReferenceID', 'name': 'id' }, { 'type': 'SignalStatusPackageList', 'name': 'sigStatus' }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'SignalStatusList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'SignalStatus' }, 'size': [(1, 32)] }, 'SignalStatusPackageList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'SignalStatusPackage' }, 'size': [(1, 32)] }, 'SignalStatusPackage': { 'type': 'SEQUENCE', 'members': [{ 'type': 'SignalRequesterInfo', 'name': 'requester', 'optional': True }, { 'type': 'IntersectionAccessPoint', 'name': 'inboundOn' }, { 'type': 'IntersectionAccessPoint', 'name': 'outboundOn', 'optional': True }, { 'type': 'MinuteOfTheYear', 'name': 'minute', 'optional': True }, { 'type': 'DSecond', 'name': 'second', 'optional': True }, { 'type': 'DSecond', 'name': 'duration', 'optional': True }, { 'type': 'PrioritizationResponseStatus', 'name': 'status' }, { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegionalExtension', 'actual-parameters': ['{'] }, 'size': [(1, 4)], 'name': 'regional', 'optional': True }, None] }, 'SpeedandHeadingandThrottleConfidence': { 'type': 'SEQUENCE', 'members': [{ 'type': 'HeadingConfidence', 'name': 'heading' }, { 'type': 'SpeedConfidence', 'name': 'speed' }, { 'type': 'ThrottleConfidence', 'name': 'throttle' }] }, 'SpeedLimitList': { 'type': 'SEQUENCE OF', 'element': { 'type': 'RegulatorySpeedLimit' }, 'size': [(1, 9)] }, 'SpeedLimitType': { 'type': 'ENUMERATED', 'values': [('unknown', 0), ('maxSpeedInSchoolZone', 1), ('maxSpeedInSchoolZoneWhenChildrenArePresent', 2), ('maxSpeedInConstructionZone', 3), ('vehicleMinSpeed', 4), ('vehicleMaxSpeed', 5), ('vehicleNightMaxSpeed', 6), ('truckMinSpeed', 7), ('truckMaxSpeed', 8), ('truckNightMaxSpeed', 9), ('vehiclesWithTrailersMinSpeed', 10), ('vehiclesWithTrailersMaxSpeed', 11), ('vehiclesWithTrailersNightMaxSpeed', 12), None] }, 'TimeChangeDetails': { 'type': 'SEQUENCE', 'members': [{ 'type': 'TimeMark', 'name': 'startTime', 'optional': True }, { 'type': 'TimeMark', 'name': 'minEndTime' }, { 'type': 'TimeMark', 'name': 'maxEndTime', 'optional': True }, { 'type': 'TimeMark', 'name': 'likelyTime', 'optional': True }, { 'type': 'TimeIntervalConfidence', 'name': 'confidence', 'optional': True }, { 'type': 'TimeMark', 'name': 'nextTime', 'optional': True }] }, 'TimeMark': { 'type': 'INTEGER', 'restricted-to': [(0, 36001)] }, 'TransmissionAndSpeed': { 'type': 'SEQUENCE', 'members': [{ 'type': 'TransmissionState', 'name': 'transmisson' }, { 'type': 'Velocity', 'name': 'speed' }] }, 'VehicleID': { 'type': 'CHOICE', 'members': [{ 'type': 'TemporaryID', 'name': 'entityID' }, { 'type': 'StationID', 'name': 'stationID' }] }, 'AdvisorySpeedType': { 'type': 'ENUMERATED', 'values': [('none', 0), ('greenwave', 1), ('ecoDrive', 2), ('transit', 3), None] }, 'AllowedManeuvers': { 'type': 'BIT STRING', 'named-bits': [('maneuverStraightAllowed', '0'), ('maneuverLeftAllowed', '1'), ('maneuverRightAllowed', '2'), ('maneuverUTurnAllowed', '3'), ('maneuverLeftTurnOnRedAllowed', '4'), ('maneuverRightTurnOnRedAllowed', '5'), ('maneuverLaneChangeAllowed', '6'), ('maneuverNoStoppingAllowed', '7'), ('yieldAllwaysRequired', '8'), ('goWithHalt', '9'), ('caution', '10'), ('reserved1', '11')], 'size': [12] }, 'Angle': { 'type': 'INTEGER', 'restricted-to': [(0, 28800)] }, 'ApproachID': { 'type': 'INTEGER', 'restricted-to': [(0, 15)] }, 'BasicVehicleRole': { 'type': 'ENUMERATED', 'values': [('basicVehicle', 0), ('publicTransport', 1), ('specialTransport', 2), ('dangerousGoods', 3), ('roadWork', 4), ('roadRescue', 5), ('emergency', 6), ('safetyCar', 7), ('none-unknown', 8), ('truck', 9), ('motorcycle', 10), ('roadSideSource', 11), ('police', 12), ('fire', 13), ('ambulance', 14), ('dot', 15), ('transit', 16), ('slowMoving', 17), ('stopNgo', 18), ('cyclist', 19), ('pedestrian', 20), ('nonMotorized', 21), ('military', 22), None] }, 'DDay': { 'type': 'INTEGER', 'restricted-to': [(0, 31)] }, 'DeltaAngle': { 'type': 'INTEGER', 'restricted-to': [(-150, 150)] }, 'DeltaTime': { 'type': 'INTEGER', 'restricted-to': [(-122, 121)] }, 'DescriptiveName': { 'type': 'IA5String', 'size': [(1, 63)] }, 'DHour': { 'type': 'INTEGER', 'restricted-to': [(0, 31)] }, 'DMinute': { 'type': 'INTEGER', 'restricted-to': [(0, 60)] }, 'DMonth': { 'type': 'INTEGER', 'restricted-to': [(0, 12)] }, 'DOffset': { 'type': 'INTEGER', 'restricted-to': [(-840, 840)] }, 'DrivenLineOffsetLg': { 'type': 'INTEGER', 'restricted-to': [(-32767, 32767)] }, 'DrivenLineOffsetSm': { 'type': 'INTEGER', 'restricted-to': [(-2047, 2047)] }, 'DSecond': { 'type': 'INTEGER', 'restricted-to': [(0, 65535)] }, 'DSRCmsgID': { 'type': 'INTEGER', 'restricted-to': [(0, 32767)] }, 'DYear': { 'type': 'INTEGER', 'restricted-to': [(0, 4095)] }, 'Elevation': { 'type': 'INTEGER', 'restricted-to': [(-4096, 61439)] }, 'ElevationConfidence': { 'type': 'ENUMERATED', 'values': [('unavailable', 0), ('elev-500-00', 1), ('elev-200-00', 2), ('elev-100-00', 3), ('elev-050-00', 4), ('elev-020-00', 5), ('elev-010-00', 6), ('elev-005-00', 7), ('elev-002-00', 8), ('elev-001-00', 9), ('elev-000-50', 10), ('elev-000-20', 11), ('elev-000-10', 12), ('elev-000-05', 13), ('elev-000-02', 14), ('elev-000-01', 15)] }, 'FuelType': { 'type': 'INTEGER', 'restricted-to': [(0, 15)] }, 'GNSSstatus': { 'type': 'BIT STRING', 'named-bits': [('unavailable', '0'), ('isHealthy', '1'), ('isMonitored', '2'), ('baseStationType', '3'), ('aPDOPofUnder5', '4'), ('inViewOfUnder5', '5'), ('localCorrectionsPresent', '6'), ('networkCorrectionsPresent', '7')], 'size': [8] }, 'HeadingConfidence': { 'type': 'ENUMERATED', 'values': [('unavailable', 0), ('prec10deg', 1), ('prec05deg', 2), ('prec01deg', 3), ('prec0-1deg', 4), ('prec0-05deg', 5), ('prec0-01deg', 6), ('prec0-0125deg', 7)] }, 'Heading': { 'type': 'INTEGER', 'restricted-to': [(0, 28800)] }, 'IntersectionID': { 'type': 'INTEGER', 'restricted-to': [(0, 65535)] }, 'IntersectionStatusObject': { 'type': 'BIT STRING', 'named-bits': [('manualControlIsEnabled', '0'), ('stopTimeIsActivated', '1'), ('failureFlash', '2'), ('preemptIsActive', '3'), ('signalPriorityIsActive', '4'), ('fixedTimeOperation', '5'), ('trafficDependentOperation', '6'), ('standbyOperation', '7'), ('failureMode', '8'), ('off', '9'), ('recentMAPmessageUpdate', '10'), ('recentChangeInMAPassignedLanesIDsUsed', '11'), ('noValidMAPisAvailableAtThisTime', '12'), ('noValidSPATisAvailableAtThisTime', '13')], 'size': [16] }, 'LaneAttributes-Barrier': { 'type': 'BIT STRING', 'named-bits': [('median-RevocableLane', '0'), ('median', '1'), ('whiteLineHashing', '2'), ('stripedLines', '3'), ('doubleStripedLines', '4'), ('trafficCones', '5'), ('constructionBarrier', '6'), ('trafficChannels', '7'), ('lowCurbs', '8'), ('highCurbs', '9')], 'size': [16] }, 'LaneAttributes-Bike': { 'type': 'BIT STRING', 'named-bits': [('bikeRevocableLane', '0'), ('pedestrianUseAllowed', '1'), ('isBikeFlyOverLane', '2'), ('fixedCycleTime', '3'), ('biDirectionalCycleTimes', '4'), ('isolatedByBarrier', '5'), ('unsignalizedSegmentsPresent', '6')], 'size': [16] }, 'LaneAttributes-Crosswalk': { 'type': 'BIT STRING', 'named-bits': [('crosswalkRevocableLane', '0'), ('bicyleUseAllowed', '1'), ('isXwalkFlyOverLane', '2'), ('fixedCycleTime', '3'), ('biDirectionalCycleTimes', '4'), ('hasPushToWalkButton', '5'), ('audioSupport', '6'), ('rfSignalRequestPresent', '7'), ('unsignalizedSegmentsPresent', '8')], 'size': [16] }, 'LaneAttributes-Parking': { 'type': 'BIT STRING', 'named-bits': [('parkingRevocableLane', '0'), ('parallelParkingInUse', '1'), ('headInParkingInUse', '2'), ('doNotParkZone', '3'), ('parkingForBusUse', '4'), ('parkingForTaxiUse', '5'), ('noPublicParkingUse', '6')], 'size': [16] }, 'LaneAttributes-Sidewalk': { 'type': 'BIT STRING', 'named-bits': [('sidewalk-RevocableLane', '0'), ('bicyleUseAllowed', '1'), ('isSidewalkFlyOverLane', '2'), ('walkBikes', '3')], 'size': [16] }, 'LaneAttributes-Striping': { 'type': 'BIT STRING', 'named-bits': [('stripeToConnectingLanesRevocableLane', '0'), ('stripeDrawOnLeft', '1'), ('stripeDrawOnRight', '2'), ('stripeToConnectingLanesLeft', '3'), ('stripeToConnectingLanesRight', '4'), ('stripeToConnectingLanesAhead', '5')], 'size': [16] }, 'LaneAttributes-TrackedVehicle': { 'type': 'BIT STRING', 'named-bits': [('spec-RevocableLane', '0'), ('spec-commuterRailRoadTrack', '1'), ('spec-lightRailRoadTrack', '2'), ('spec-heavyRailRoadTrack', '3'), ('spec-otherRailType', '4')], 'size': [16] }, 'LaneAttributes-Vehicle': { 'type': 'BIT STRING', 'named-bits': [('isVehicleRevocableLane', '0'), ('isVehicleFlyOverLane', '1'), ('hovLaneUseOnly', '2'), ('restrictedToBusUse', '3'), ('restrictedToTaxiUse', '4'), ('restrictedFromPublicUse', '5'), ('hasIRbeaconCoverage', '6'), ('permissionOnRequest', '7')], 'size': [8, None] }, 'LaneConnectionID': { 'type': 'INTEGER', 'restricted-to': [(0, 255)] }, 'LaneDirection': { 'type': 'BIT STRING', 'named-bits': [('ingressPath', '0'), ('egressPath', '1')], 'size': [2] }, 'LaneID': { 'type': 'INTEGER', 'restricted-to': [(0, 255)] }, 'LayerID': { 'type': 'INTEGER', 'restricted-to': [(0, 100)] }, 'LayerType': { 'type': 'ENUMERATED', 'values': [('none', 0), ('mixedContent', 1), ('generalMapData', 2), ('intersectionData', 3), ('curveData', 4), ('roadwaySectionData', 5), ('parkingAreaData', 6), ('sharedLaneData', 7), None] }, 'LaneWidth': { 'type': 'INTEGER', 'restricted-to': [(0, 32767)] }, 'MergeDivergeNodeAngle': { 'type': 'INTEGER', 'restricted-to': [(-180, 180)] }, 'MinuteOfTheYear': { 'type': 'INTEGER', 'restricted-to': [(0, 527040)] }, 'MovementPhaseState': { 'type': 'ENUMERATED', 'values': [('unavailable', 0), ('dark', 1), ('stop-Then-Proceed', 2), ('stop-And-Remain', 3), ('pre-Movement', 4), ('permissive-Movement-Allowed', 5), ('protected-Movement-Allowed', 6), ('permissive-clearance', 7), ('protected-clearance', 8), ('caution-Conflicting-Traffic', 9)] }, 'MsgCount': { 'type': 'INTEGER', 'restricted-to': [(0, 127)] }, 'Offset-B09': { 'type': 'INTEGER', 'restricted-to': [(-256, 255)] }, 'Offset-B10': { 'type': 'INTEGER', 'restricted-to': [(-512, 511)] }, 'Offset-B11': { 'type': 'INTEGER', 'restricted-to': [(-1024, 1023)] }, 'Offset-B12': { 'type': 'INTEGER', 'restricted-to': [(-2048, 2047)] }, 'Offset-B13': { 'type': 'INTEGER', 'restricted-to': [(-4096, 4095)] }, 'Offset-B14': { 'type': 'INTEGER', 'restricted-to': [(-8192, 8191)] }, 'Offset-B16': { 'type': 'INTEGER', 'restricted-to': [(-32768, 32767)] }, 'PedestrianBicycleDetect': { 'type': 'BOOLEAN' }, 'PositionConfidence': { 'type': 'ENUMERATED', 'values': [('unavailable', 0), ('a500m', 1), ('a200m', 2), ('a100m', 3), ('a50m', 4), ('a20m', 5), ('a10m', 6), ('a5m', 7), ('a2m', 8), ('a1m', 9), ('a50cm', 10), ('a20cm', 11), ('a10cm', 12), ('a5cm', 13), ('a2cm', 14), ('a1cm', 15)] }, 'PrioritizationResponseStatus': { 'type': 'ENUMERATED', 'values': [('unknown', 0), ('requested', 1), ('processing', 2), ('watchOtherTraffic', 3), ('granted', 4), ('rejected', 5), ('maxPresence', 6), ('reserviceLocked', 7), None] }, 'PriorityRequestType': { 'type': 'ENUMERATED', 'values': [('priorityRequestTypeReserved', 0), ('priorityRequest', 1), ('priorityRequestUpdate', 2), ('priorityCancellation', 3), None] }, 'RegionId': { 'type': 'INTEGER', 'restricted-to': [(0, 255)] }, 'RequestID': { 'type': 'INTEGER', 'restricted-to': [(0, 255)] }, 'RequestImportanceLevel': { 'type': 'ENUMERATED', 'values': [('requestImportanceLevelUnKnown', 0), ('requestImportanceLevel1', 1), ('requestImportanceLevel2', 2), ('requestImportanceLevel3', 3), ('requestImportanceLevel4', 4), ('requestImportanceLevel5', 5), ('requestImportanceLevel6', 6), ('requestImportanceLevel7', 7), ('requestImportanceLevel8', 8), ('requestImportanceLevel9', 9), ('requestImportanceLevel10', 10), ('requestImportanceLevel11', 11), ('requestImportanceLevel12', 12), ('requestImportanceLevel13', 13), ('requestImportanceLevel14', 14), ('requestImportanceReserved', 15)] }, 'RequestSubRole': { 'type': 'ENUMERATED', 'values': [('requestSubRoleUnKnown', 0), ('requestSubRole1', 1), ('requestSubRole2', 2), ('requestSubRole3', 3), ('requestSubRole4', 4), ('requestSubRole5', 5), ('requestSubRole6', 6), ('requestSubRole7', 7), ('requestSubRole8', 8), ('requestSubRole9', 9), ('requestSubRole10', 10), ('requestSubRole11', 11), ('requestSubRole12', 12), ('requestSubRole13', 13), ('requestSubRole14', 14), ('requestSubRoleReserved', 15)] }, 'RestrictionAppliesTo': { 'type': 'ENUMERATED', 'values': [('none', 0), ('equippedTransit', 1), ('equippedTaxis', 2), ('equippedOther', 3), ('emissionCompliant', 4), ('equippedBicycle', 5), ('weightCompliant', 6), ('heightCompliant', 7), ('pedestrians', 8), ('slowMovingPersons', 9), ('wheelchairUsers', 10), ('visualDisabilities', 11), ('audioDisabilities', 12), ('otherUnknownDisabilities', 13), None] }, 'RestrictionClassID': { 'type': 'INTEGER', 'restricted-to': [(0, 255)] }, 'RoadRegulatorID': { 'type': 'INTEGER', 'restricted-to': [(0, 65535)] }, 'RoadSegmentID': { 'type': 'INTEGER', 'restricted-to': [(0, 65535)] }, 'RoadwayCrownAngle': { 'type': 'INTEGER', 'restricted-to': [(-128, 127)] }, 'RTCMmessage': { 'type': 'OCTET STRING', 'size': [(1, 1023)] }, 'RTCM-Revision': { 'type': 'ENUMERATED', 'values': [('unknown', 0), ('rtcmRev2', 1), ('rtcmRev3', 2), ('reserved', 3), None] }, 'Scale-B12': { 'type': 'INTEGER', 'restricted-to': [(-2048, 2047)] }, 'SignalGroupID': { 'type': 'INTEGER', 'restricted-to': [(0, 255)] }, 'SegmentAttributeXY': { 'type': 'ENUMERATED', 'values': [ ('reserved', 0), ('doNotBlock', 1), ('whiteLine', 2), ('mergingLaneLeft', 3), ('mergingLaneRight', 4), ('curbOnLeft', 5), ('curbOnRight', 6), ('loadingzoneOnLeft', 7), ('loadingzoneOnRight', 8), ('turnOutPointOnLeft', 9), ('turnOutPointOnRight', 10), ('adjacentParkingOnLeft', 11), ('adjacentParkingOnRight', 12), ('adjacentBikeLaneOnLeft', 13), ('adjacentBikeLaneOnRight', 14), ('sharedBikeLane', 15), ('bikeBoxInFront', 16), ('transitStopOnLeft', 17), ('transitStopOnRight', 18), ('transitStopInLane', 19), ('sharedWithTrackedVehicle', 20), ('safeIsland', 21), ('lowCurbsPresent', 22), ('rumbleStripPresent', 23), ('audibleSignalingPresent', 24), ('adaptiveTimingPresent', 25), ('rfSignalRequestPresent', 26), ('partialCurbIntrusion', 27), ('taperToLeft', 28), ('taperToRight', 29), ('taperToCenterLine', 30), ('parallelParking', 31), ('headInParking', 32), ('freeParking', 33), ('timeRestrictionsOnParking', 34), ('costToPark', 35), ('midBlockCurbPresent', 36), ('unEvenPavementPresent', 37), None ] }, 'SemiMajorAxisAccuracy': { 'type': 'INTEGER', 'restricted-to': [(0, 255)] }, 'SemiMajorAxisOrientation': { 'type': 'INTEGER', 'restricted-to': [(0, 65535)] }, 'SemiMinorAxisAccuracy': { 'type': 'INTEGER', 'restricted-to': [(0, 255)] }, 'SpeedAdvice': { 'type': 'INTEGER', 'restricted-to': [(0, 500)] }, 'SpeedConfidence': { 'type': 'ENUMERATED', 'values': [('unavailable', 0), ('prec100ms', 1), ('prec10ms', 2), ('prec5ms', 3), ('prec1ms', 4), ('prec0-1ms', 5), ('prec0-05ms', 6), ('prec0-01ms', 7)] }, 'TemporaryID': { 'type': 'OCTET STRING', 'size': [4] }, 'ThrottleConfidence': { 'type': 'ENUMERATED', 'values': [('unavailable', 0), ('prec10percent', 1), ('prec1percent', 2), ('prec0-5percent', 3)] }, 'TimeConfidence': { 'type': 'ENUMERATED', 'values': [('unavailable', 0), ('time-100-000', 1), ('time-050-000', 2), ('time-020-000', 3), ('time-010-000', 4), ('time-002-000', 5), ('time-001-000', 6), ('time-000-500', 7), ('time-000-200', 8), ('time-000-100', 9), ('time-000-050', 10), ('time-000-020', 11), ('time-000-010', 12), ('time-000-005', 13), ('time-000-002', 14), ('time-000-001', 15), ('time-000-000-5', 16), ('time-000-000-2', 17), ('time-000-000-1', 18), ('time-000-000-05', 19), ('time-000-000-02', 20), ('time-000-000-01', 21), ('time-000-000-005', 22), ('time-000-000-002', 23), ('time-000-000-001', 24), ('time-000-000-000-5', 25), ('time-000-000-000-2', 26), ('time-000-000-000-1', 27), ('time-000-000-000-05', 28), ('time-000-000-000-02', 29), ('time-000-000-000-01', 30), ('time-000-000-000-005', 31), ('time-000-000-000-002', 32), ('time-000-000-000-001', 33), ('time-000-000-000-000-5', 34), ('time-000-000-000-000-2', 35), ('time-000-000-000-000-1', 36), ('time-000-000-000-000-05', 37), ('time-000-000-000-000-02', 38), ('time-000-000-000-000-01', 39)] }, 'TimeIntervalConfidence': { 'type': 'INTEGER', 'restricted-to': [(0, 15)] }, 'TransitVehicleOccupancy': { 'type': 'ENUMERATED', 'values': [('occupancyUnknown', 0), ('occupancyEmpty', 1), ('occupancyVeryLow', 2), ('occupancyLow', 3), ('occupancyMed', 4), ('occupancyHigh', 5), ('occupancyNearlyFull', 6), ('occupancyFull', 7)] }, 'TransitVehicleStatus': { 'type': 'BIT STRING', 'named-bits': [('loading', '0'), ('anADAuse', '1'), ('aBikeLoad', '2'), ('doorOpen', '3'), ('charging', '4'), ('atStopLine', '5')], 'size': [8] }, 'TransmissionState': { 'type': 'ENUMERATED', 'values': [('neutral', 0), ('park', 1), ('forwardGears', 2), ('reverseGears', 3), ('reserved1', 4), ('reserved2', 5), ('reserved3', 6), ('unavailable', 7)] }, 'VehicleHeight': { 'type': 'INTEGER', 'restricted-to': [(0, 127)] }, 'VehicleType': { 'type': 'ENUMERATED', 'values': [('none', 0), ('unknown', 1), ('special', 2), ('moto', 3), ('car', 4), ('carOther', 5), ('bus', 6), ('axleCnt2', 7), ('axleCnt3', 8), ('axleCnt4', 9), ('axleCnt4Trailer', 10), ('axleCnt5Trailer', 11), ('axleCnt6Trailer', 12), ('axleCnt5MultiTrailer', 13), ('axleCnt6MultiTrailer', 14), ('axleCnt7MultiTrailer', 15), None] }, 'Velocity': { 'type': 'INTEGER', 'restricted-to': [(0, 8191)] }, 'WaitOnStopline': { 'type': 'BOOLEAN' }, 'ZoneLength': { 'type': 'INTEGER', 'restricted-to': [(0, 10000)] } }, 'values': { 'mapData': { 'type': 'DSRCmsgID', 'value': 18 }, 'rtcmCorrections': { 'type': 'DSRCmsgID', 'value': 28 }, 'signalPhaseAndTimingMessage': { 'type': 'DSRCmsgID', 'value': 19 }, 'signalRequestMessage': { 'type': 'DSRCmsgID', 'value': 29 }, 'signalStatusMessage': { 'type': 'DSRCmsgID', 'value': 30 }, 'unknownFuel': { 'type': 'FuelType', 'value': 0 }, 'gasoline': { 'type': 'FuelType', 'value': 1 }, 'ethanol': { 'type': 'FuelType', 'value': 2 }, 'diesel': { 'type': 'FuelType', 'value': 3 }, 'electric': { 'type': 'FuelType', 'value': 4 }, 'hybrid': { 'type': 'FuelType', 'value': 5 }, 'hydrogen': { 'type': 'FuelType', 'value': 6 }, 'natGasLiquid': { 'type': 'FuelType', 'value': 7 }, 'natGasComp': { 'type': 'FuelType', 'value': 8 }, 'propane': { 'type': 'FuelType', 'value': 9 }, 'noRegion': { 'type': 'RegionId', 'value': 0 }, 'addGrpA': { 'type': 'RegionId', 'value': 1 }, 'addGrpB': { 'type': 'RegionId', 'value': 2 }, 'addGrpC': { 'type': 'RegionId', 'value': 3 } }, 'object-classes': { 'REG-EXT-ID-AND-TYPE': { 'members': [{ 'type': 'RegionId', 'name': '&id' }, { 'type': 'OpenType', 'name': '&Type' }] } }, 'object-sets': {}, 'extensibility-implied': False, 'tags': 'AUTOMATIC' } } asn1tools-0.169.0/tests/files/cen/electronic_registration_identification_vehicle_data_module.asn000066400000000000000000000063461524544274600334030ustar00rootroot00000000000000-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ISO TS 24534-3:2015 -- -- This ASN.1 was generateds: 30.08.2016 -- -- This document contains only the data element needed for the encoding of an IVI message -- as defined in ISO TS 19321(2020) -- -- Published version location: -- https://standards.iso.org/iso/24534/-3/ISO%2024534-3%20ASN.1%20repository/ -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ISO 24534-3:2015 -- Version 29.4.2015 ElectronicRegistrationIdentificationVehicleDataModule {iso(1) standard(0) iso24534 (24534) vehicleData (1) version1 (1)} DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- Electronic Registration Identification (ERI)- Vehicle Data EuVehicleCategoryCode ::= CHOICE { euVehicleCategoryL EuVehicleCategoryL, -- conforms to EU 2002/24 and UNECE 1999 euVehicleCategoryM EuVehicleCategoryM, -- conforms to EU 2001/116 and UNECE 1999 euVehicleCategoryN EuVehicleCategoryN, -- conforms to EU 2001/116 and UNECE 1999 euVehicleCategoryO EuVehicleCategoryO, -- conforms to EU 2001/116 and UNECE 1999 euVehilcleCategoryT NULL, -- conforms to UNECE 1999 euVehilcleCategoryG NULL -- conforms to EU 2001/116 and UNECE 1999 } EuVehicleCategoryL ::= ENUMERATED { l1, l2, l3, l4, l5, l6, l7 } EuVehicleCategoryM ::= ENUMERATED {m1, m2, m3} EuVehicleCategoryN ::= ENUMERATED {n1, n2, n3} EuVehicleCategoryO ::= ENUMERATED {o1, o2, o3, o4} Iso3833VehicleType ::= INTEGER { passengerCar (0), -- term No 3.1.1 saloon (1), -- term No 3.1.1.1 (sedan) convertibleSaloon (2), -- term No 3.1.1.2 pullmanSaloon (3), -- term No 3.1.1.3 stationWagon (4), -- term No 3.1.1.4 truckStationWagon (5), -- term No 3.1.1.4.1 coupe (6), -- term No 3.1.1.5 (coup�) convertible (7), -- term No 3.1.1.6 (open tourer, roadstar, spider) multipurposePassengerCar (8), -- term No 3.1.1.7 forwardControlPassengerCar (9), -- term No 3.1.1.8 specialPassengerCar (10), -- term No 3.1.1.9 bus (11), -- term No 3.1.2 minibus (12), -- term No 3.1.2.1 urbanBus (13), -- term No 3.1.2.2 interurbanCoach (14), -- term No 3.1.2.3 longDistanceCoach (15), -- term No 3.1.2.4 articulatedBus (16), -- term No 3.1.2.5 trolleyBus (17), -- term No 3.1.2.6 specialBus (18), -- term No 3.1.2.7 commercialVehicle (19), -- term No 3.1.3 specialCommercialVehicle (20), -- term No 3.1.3.1 specialVehicle (21), -- term No 3.1.4 trailingTowingVehicle (22), -- term No 3.1.5 (draw-bar tractor) semiTrailerTowingVehicle (23), -- term No 3.1.6 (fifth wheel tractor) trailer (24), -- term No 3.2.1 busTrailer (25), -- term No 3.2.1.1 generalPurposeTrailer (26), -- term No 3.2.1.2 caravan (27), -- term No 3.2.1.3 specialTrailer (28), -- term No 3.2.1.4 semiTrailer (29), -- term No 3.2.2 busSemiTrailer (30), -- term No 3.2.2.1 generalPurposeSemiTrailer (31), -- term No 3.2.2.2 specialSemiTrailer (32), -- term No 3.2.2.3 roadTrain (33), -- term No 3.3.1 passengerRoadTrain (34), -- term No 3.3.2 articulatedRoadTrain (35), -- term No 3.3.3 doubleRoadTrain (36), -- term No 3.3.4 compositeRoadTrain (37), -- term No 3.3.5 specialRoadTrain (38), -- term No 3.3.6 moped (39), -- term No 3.4 motorCycle (40) -- term No 3.5 } (0..255) END asn1tools-0.169.0/tests/files/comments.asn000066400000000000000000000007731524544274600204320ustar00rootroot00000000000000-- A single line comment. -- A single line comment with end -- Foo -- A single line comment with /* inside. --- A single line comment starting with -. DEFINITIONS ::= BEGIN -- A single line comment with */ inside. -- A single line comment with /* foo */ inside. /* A one line comment. */ /* A multi line comment. */ /* Comment /* in comment. */ */ /* A -- single line comment in another comment. */ A/* First. */ ::=-- Second. --INTEGER/* Third. */ /*/*B::=BOOLEAN*/---*/C::=OCTET STRING END asn1tools-0.169.0/tests/files/comments.py000066400000000000000000000003531524544274600202730ustar00rootroot00000000000000EXPECTED = {'Foo': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'A': {'type': 'INTEGER'}, 'C': {'type': 'OCTET STRING'}}, 'values': {}}}asn1tools-0.169.0/tests/files/complex.asn000066400000000000000000000017701524544274600202520ustar00rootroot00000000000000-- A complex ASN.1 specification. Complex DEFINITIONS ::= BEGIN AllUniversalTypes ::= SEQUENCE { boolean BOOLEAN, integer INTEGER, bit-string BIT STRING, octet-string OCTET STRING, null NULL, object-identifier OBJECT IDENTIFIER, -- OBJECT DESCRIPTOR, -- EXTERNAL -- REAL enumerated ENUMERATED { one(1), two(2) }, -- EMBEDDED_PDV -- UTF8_STRING -- RELATIVE_OID sequence SEQUENCE {}, -- SET -- NUMERIC_STRING -- PRINTABLE_STRING -- T61_STRING -- VIDEOTEX_STRING ia5-string IA5String -- UTC_TIME -- GENERALIZED_TIME -- GRAPHIC_STRING -- VISIBLE_STRING -- GENERAL_STRING -- UNIVERSAL_STRING -- CHARACTER_STRING -- BMP_STRING } END asn1tools-0.169.0/tests/files/constraints_extensions.asn000066400000000000000000000004601524544274600234240ustar00rootroot00000000000000ConstraintsExtensions DEFINITIONS ::= BEGIN Foo ::= SEQUENCE { a OCTET STRING (SIZE (1..2, ...)), b OCTET STRING (SIZE (1..2), ...), c SEQUENCE (SIZE (9..9), ...) OF BOOLEAN, d SEQUENCE SIZE (2..3, ...) OF INTEGER (1..5, ...), e SEQUENCE (SIZE (2..3, ...)) OF INTEGER (1..5, ...) } END asn1tools-0.169.0/tests/files/constraints_extensions.py000066400000000000000000000056731524544274600233060ustar00rootroot00000000000000EXPECTED = {'ConstraintsExtensions': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'Foo': {'members': [{'name': 'a', 'size': [(1, 2), None], 'type': 'OCTET ' 'STRING'}, {'name': 'b', 'size': [(1, 2), None], 'type': 'OCTET ' 'STRING'}, {'element': {'type': 'BOOLEAN'}, 'name': 'c', 'size': [(9, 9), None], 'type': 'SEQUENCE ' 'OF'}, {'element': {'restricted-to': [(1, 5), None], 'type': 'INTEGER'}, 'name': 'd', 'size': [(2, 3), None], 'type': 'SEQUENCE ' 'OF'}, {'element': {'restricted-to': [(1, 5), None], 'type': 'INTEGER'}, 'name': 'e', 'size': [(2, 3), None], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}}, 'values': {}}}asn1tools-0.169.0/tests/files/enumerated.asn000066400000000000000000000005551524544274600207340ustar00rootroot00000000000000E DEFINITIONS AUTOMATIC TAGS ::= BEGIN A ::= ENUMERATED {a, b, ..., c} B ::= ENUMERATED {a, b, c(0), ..., d} C ::= ENUMERATED {a, b, ..., c(3), d} D ::= ENUMERATED {a, z(25), ..., d} E ::= ENUMERATED {a, b, c(0), d, e(25), f, ..., g} F ::= ENUMERATED {a, ...} G ::= ENUMERATED {a} H ::= ENUMERATED {a(i)} i INTEGER ::= 10 END asn1tools-0.169.0/tests/files/enumerated.py000066400000000000000000000030571524544274600206030ustar00rootroot00000000000000EXPECTED = {'E': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'A': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), None, ('c', 2)]}, 'B': {'type': 'ENUMERATED', 'values': [('a', 1), ('b', 2), ('c', 0), None, ('d', 3)]}, 'C': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), None, ('c', 3), ('d', 4)]}, 'D': {'type': 'ENUMERATED', 'values': [('a', 0), ('z', 25), None, ('d', 1)]}, 'E': {'type': 'ENUMERATED', 'values': [('a', 1), ('b', 2), ('c', 0), ('d', 3), ('e', 25), ('f', 4), None, ('g', 5)]}, 'F': {'type': 'ENUMERATED', 'values': [('a', 0), None]}, 'G': {'type': 'ENUMERATED', 'values': [('a', 0)]}, 'H': {'type': 'ENUMERATED', 'values': [('a', 'i')]}}, 'values': {'i': {'type': 'INTEGER', 'value': 10}}}}asn1tools-0.169.0/tests/files/etsi/000077500000000000000000000000001524544274600170375ustar00rootroot00000000000000asn1tools-0.169.0/tests/files/etsi/cam_pdu_descriptions_1_3_2.asn000066400000000000000000000112471524544274600246300ustar00rootroot00000000000000CAM-PDU-Descriptions { itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) en(302637) cam(2) version(1) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS ItsPduHeader, CauseCode, ReferencePosition, AccelerationControl, Curvature, CurvatureCalculationMode, Heading, LanePosition, EmergencyPriority, EmbarkationStatus, Speed, DriveDirection, LongitudinalAcceleration, LateralAcceleration, VerticalAcceleration, StationType, ExteriorLights, DangerousGoodsBasic, SpecialTransportType, LightBarSirenInUse, VehicleRole, VehicleLength, VehicleWidth, PathHistory, RoadworksSubCauseCode, ClosedLanes, TrafficRule, SpeedLimit, SteeringWheelAngle, PerformanceClass, YawRate, ProtectedCommunicationZone, PtActivation, Latitude, Longitude, ProtectedCommunicationZonesRSU, CenDsrcTollingZone FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (1) }; CAM ::= SEQUENCE { header ItsPduHeader, cam CoopAwareness } CoopAwareness ::= SEQUENCE { generationDeltaTime GenerationDeltaTime, camParameters CamParameters } CamParameters ::= SEQUENCE { basicContainer BasicContainer, highFrequencyContainer HighFrequencyContainer, lowFrequencyContainer LowFrequencyContainer OPTIONAL, specialVehicleContainer SpecialVehicleContainer OPTIONAL, ... } HighFrequencyContainer ::= CHOICE { basicVehicleContainerHighFrequency BasicVehicleContainerHighFrequency, rsuContainerHighFrequency RSUContainerHighFrequency, ... } LowFrequencyContainer ::= CHOICE { basicVehicleContainerLowFrequency BasicVehicleContainerLowFrequency, ... } SpecialVehicleContainer ::= CHOICE { publicTransportContainer PublicTransportContainer, specialTransportContainer SpecialTransportContainer, dangerousGoodsContainer DangerousGoodsContainer, roadWorksContainerBasic RoadWorksContainerBasic, rescueContainer RescueContainer, emergencyContainer EmergencyContainer, safetyCarContainer SafetyCarContainer, ... } BasicContainer ::= SEQUENCE { stationType StationType, referencePosition ReferencePosition, ... } BasicVehicleContainerHighFrequency ::= SEQUENCE { heading Heading, speed Speed, driveDirection DriveDirection, vehicleLength VehicleLength, vehicleWidth VehicleWidth, longitudinalAcceleration LongitudinalAcceleration, curvature Curvature, curvatureCalculationMode CurvatureCalculationMode, yawRate YawRate, accelerationControl AccelerationControl OPTIONAL, lanePosition LanePosition OPTIONAL, steeringWheelAngle SteeringWheelAngle OPTIONAL, lateralAcceleration LateralAcceleration OPTIONAL, verticalAcceleration VerticalAcceleration OPTIONAL, performanceClass PerformanceClass OPTIONAL, cenDsrcTollingZone CenDsrcTollingZone OPTIONAL } BasicVehicleContainerLowFrequency ::= SEQUENCE { vehicleRole VehicleRole, exteriorLights ExteriorLights, pathHistory PathHistory } PublicTransportContainer ::= SEQUENCE { embarkationStatus EmbarkationStatus, ptActivation PtActivation OPTIONAL } SpecialTransportContainer ::= SEQUENCE { specialTransportType SpecialTransportType, lightBarSirenInUse LightBarSirenInUse } DangerousGoodsContainer ::= SEQUENCE { dangerousGoodsBasic DangerousGoodsBasic } RoadWorksContainerBasic ::= SEQUENCE { roadworksSubCauseCode RoadworksSubCauseCode OPTIONAL, lightBarSirenInUse LightBarSirenInUse, closedLanes ClosedLanes OPTIONAL } RescueContainer ::= SEQUENCE { lightBarSirenInUse LightBarSirenInUse } EmergencyContainer ::= SEQUENCE { lightBarSirenInUse LightBarSirenInUse, incidentIndication CauseCode OPTIONAL, emergencyPriority EmergencyPriority OPTIONAL } SafetyCarContainer ::= SEQUENCE { lightBarSirenInUse LightBarSirenInUse, incidentIndication CauseCode OPTIONAL, trafficRule TrafficRule OPTIONAL, speedLimit SpeedLimit OPTIONAL } RSUContainerHighFrequency ::= SEQUENCE { protectedCommunicationZonesRSU ProtectedCommunicationZonesRSU OPTIONAL, ... } GenerationDeltaTime ::= INTEGER { oneMilliSec(1) } (0..65535) END asn1tools-0.169.0/tests/files/etsi/cam_pdu_descriptions_1_3_2.py000066400000000000000000000451231524544274600244770ustar00rootroot00000000000000EXPECTED = {'CAM-PDU-Descriptions': {'extensibility-implied': False, 'imports': {'ITS-Container': ['AccelerationControl', 'CauseCode', 'CenDsrcTollingZone', 'ClosedLanes', 'Curvature', 'CurvatureCalculationMode', 'DangerousGoodsBasic', 'DriveDirection', 'EmbarkationStatus', 'EmergencyPriority', 'ExteriorLights', 'Heading', 'ItsPduHeader', 'LanePosition', 'LateralAcceleration', 'Latitude', 'LightBarSirenInUse', 'Longitude', 'LongitudinalAcceleration', 'PathHistory', 'PerformanceClass', 'ProtectedCommunicationZone', 'ProtectedCommunicationZonesRSU', 'PtActivation', 'ReferencePosition', 'RoadworksSubCauseCode', 'SpecialTransportType', 'Speed', 'SpeedLimit', 'StationType', 'SteeringWheelAngle', 'TrafficRule', 'VehicleLength', 'VehicleRole', 'VehicleWidth', 'VerticalAcceleration', 'YawRate']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'BasicContainer': {'members': [{'name': 'stationType', 'type': 'StationType'}, {'name': 'referencePosition', 'type': 'ReferencePosition'}, None], 'type': 'SEQUENCE'}, 'BasicVehicleContainerHighFrequency': {'members': [{'name': 'heading', 'type': 'Heading'}, {'name': 'speed', 'type': 'Speed'}, {'name': 'driveDirection', 'type': 'DriveDirection'}, {'name': 'vehicleLength', 'type': 'VehicleLength'}, {'name': 'vehicleWidth', 'type': 'VehicleWidth'}, {'name': 'longitudinalAcceleration', 'type': 'LongitudinalAcceleration'}, {'name': 'curvature', 'type': 'Curvature'}, {'name': 'curvatureCalculationMode', 'type': 'CurvatureCalculationMode'}, {'name': 'yawRate', 'type': 'YawRate'}, {'name': 'accelerationControl', 'optional': True, 'type': 'AccelerationControl'}, {'name': 'lanePosition', 'optional': True, 'type': 'LanePosition'}, {'name': 'steeringWheelAngle', 'optional': True, 'type': 'SteeringWheelAngle'}, {'name': 'lateralAcceleration', 'optional': True, 'type': 'LateralAcceleration'}, {'name': 'verticalAcceleration', 'optional': True, 'type': 'VerticalAcceleration'}, {'name': 'performanceClass', 'optional': True, 'type': 'PerformanceClass'}, {'name': 'cenDsrcTollingZone', 'optional': True, 'type': 'CenDsrcTollingZone'}], 'type': 'SEQUENCE'}, 'BasicVehicleContainerLowFrequency': {'members': [{'name': 'vehicleRole', 'type': 'VehicleRole'}, {'name': 'exteriorLights', 'type': 'ExteriorLights'}, {'name': 'pathHistory', 'type': 'PathHistory'}], 'type': 'SEQUENCE'}, 'CAM': {'members': [{'name': 'header', 'type': 'ItsPduHeader'}, {'name': 'cam', 'type': 'CoopAwareness'}], 'type': 'SEQUENCE'}, 'CamParameters': {'members': [{'name': 'basicContainer', 'type': 'BasicContainer'}, {'name': 'highFrequencyContainer', 'type': 'HighFrequencyContainer'}, {'name': 'lowFrequencyContainer', 'optional': True, 'type': 'LowFrequencyContainer'}, {'name': 'specialVehicleContainer', 'optional': True, 'type': 'SpecialVehicleContainer'}, None], 'type': 'SEQUENCE'}, 'CoopAwareness': {'members': [{'name': 'generationDeltaTime', 'type': 'GenerationDeltaTime'}, {'name': 'camParameters', 'type': 'CamParameters'}], 'type': 'SEQUENCE'}, 'DangerousGoodsContainer': {'members': [{'name': 'dangerousGoodsBasic', 'type': 'DangerousGoodsBasic'}], 'type': 'SEQUENCE'}, 'EmergencyContainer': {'members': [{'name': 'lightBarSirenInUse', 'type': 'LightBarSirenInUse'}, {'name': 'incidentIndication', 'optional': True, 'type': 'CauseCode'}, {'name': 'emergencyPriority', 'optional': True, 'type': 'EmergencyPriority'}], 'type': 'SEQUENCE'}, 'GenerationDeltaTime': {'named-numbers': {'oneMilliSec': 1}, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, 'HighFrequencyContainer': {'members': [{'name': 'basicVehicleContainerHighFrequency', 'type': 'BasicVehicleContainerHighFrequency'}, {'name': 'rsuContainerHighFrequency', 'type': 'RSUContainerHighFrequency'}, None], 'type': 'CHOICE'}, 'LowFrequencyContainer': {'members': [{'name': 'basicVehicleContainerLowFrequency', 'type': 'BasicVehicleContainerLowFrequency'}, None], 'type': 'CHOICE'}, 'PublicTransportContainer': {'members': [{'name': 'embarkationStatus', 'type': 'EmbarkationStatus'}, {'name': 'ptActivation', 'optional': True, 'type': 'PtActivation'}], 'type': 'SEQUENCE'}, 'RSUContainerHighFrequency': {'members': [{'name': 'protectedCommunicationZonesRSU', 'optional': True, 'type': 'ProtectedCommunicationZonesRSU'}, None], 'type': 'SEQUENCE'}, 'RescueContainer': {'members': [{'name': 'lightBarSirenInUse', 'type': 'LightBarSirenInUse'}], 'type': 'SEQUENCE'}, 'RoadWorksContainerBasic': {'members': [{'name': 'roadworksSubCauseCode', 'optional': True, 'type': 'RoadworksSubCauseCode'}, {'name': 'lightBarSirenInUse', 'type': 'LightBarSirenInUse'}, {'name': 'closedLanes', 'optional': True, 'type': 'ClosedLanes'}], 'type': 'SEQUENCE'}, 'SafetyCarContainer': {'members': [{'name': 'lightBarSirenInUse', 'type': 'LightBarSirenInUse'}, {'name': 'incidentIndication', 'optional': True, 'type': 'CauseCode'}, {'name': 'trafficRule', 'optional': True, 'type': 'TrafficRule'}, {'name': 'speedLimit', 'optional': True, 'type': 'SpeedLimit'}], 'type': 'SEQUENCE'}, 'SpecialTransportContainer': {'members': [{'name': 'specialTransportType', 'type': 'SpecialTransportType'}, {'name': 'lightBarSirenInUse', 'type': 'LightBarSirenInUse'}], 'type': 'SEQUENCE'}, 'SpecialVehicleContainer': {'members': [{'name': 'publicTransportContainer', 'type': 'PublicTransportContainer'}, {'name': 'specialTransportContainer', 'type': 'SpecialTransportContainer'}, {'name': 'dangerousGoodsContainer', 'type': 'DangerousGoodsContainer'}, {'name': 'roadWorksContainerBasic', 'type': 'RoadWorksContainerBasic'}, {'name': 'rescueContainer', 'type': 'RescueContainer'}, {'name': 'emergencyContainer', 'type': 'EmergencyContainer'}, {'name': 'safetyCarContainer', 'type': 'SafetyCarContainer'}, None], 'type': 'CHOICE'}}, 'values': {}}}asn1tools-0.169.0/tests/files/etsi/its_container_1_2_1.asn000066400000000000000000000516031524544274600232710ustar00rootroot00000000000000ITS-Container { itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) ts(102894) cdd(2) version(1) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN ItsPduHeader ::= SEQUENCE { protocolVersion INTEGER { currentVersion(1) } (0..255), messageID INTEGER { denm(1), cam(2), poi(3), spat(4), map(5), ivi(6), ev-rsr(7) } (0..255), stationID StationID } StationID ::= INTEGER (0..4294967295) ReferencePosition ::= SEQUENCE { latitude Latitude, longitude Longitude, positionConfidenceEllipse PosConfidenceEllipse, altitude Altitude } DeltaReferencePosition ::= SEQUENCE { deltaLatitude DeltaLatitude, deltaLongitude DeltaLongitude, deltaAltitude DeltaAltitude } Longitude ::= INTEGER { oneMicrodegreeEast(10), oneMicrodegreeWest(-10), unavailable(1800000001) } (-1800000000..1800000001) Latitude ::= INTEGER { oneMicrodegreeNorth(10), oneMicrodegreeSouth(-10), unavailable(900000001) } (-900000000..900000001) Altitude ::= SEQUENCE { altitudeValue AltitudeValue, altitudeConfidence AltitudeConfidence } AltitudeValue ::= INTEGER { referenceEllipsoidSurface(0), oneCentimeter(1), unavailable(800001) } (-100000..800001) AltitudeConfidence ::= ENUMERATED { alt-000-01(0), alt-000-02(1), alt-000-05(2), alt-000-10(3), alt-000-20(4), alt-000-50(5), alt-001-00(6), alt-002-00(7), alt-005-00(8), alt-010-00(9), alt-020-00(10), alt-050-00(11), alt-100-00(12), alt-200-00(13), outOfRange(14), unavailable(15) } DeltaLongitude ::= INTEGER { oneMicrodegreeEast(10), oneMicrodegreeWest(-10), unavailable(131072) } (-131071..131072) DeltaLatitude ::= INTEGER { oneMicrodegreeNorth(10), oneMicrodegreeSouth(-10), unavailable(131072) } (-131071..131072) DeltaAltitude ::= INTEGER { oneCentimeterUp(1), oneCentimeterDown(-1), unavailable(12800) } (-12700..12800) PosConfidenceEllipse ::= SEQUENCE { semiMajorConfidence SemiAxisLength, semiMinorConfidence SemiAxisLength, semiMajorOrientation HeadingValue } PathPoint ::= SEQUENCE { pathPosition DeltaReferencePosition, pathDeltaTime PathDeltaTime OPTIONAL } PathDeltaTime ::= INTEGER { tenMilliSecondsInPast(1) } (1..65535, ...) PtActivation ::= SEQUENCE { ptActivationType PtActivationType, ptActivationData PtActivationData } PtActivationType ::= INTEGER { undefinedCodingType(0), r09-16CodingType(1), vdv-50149CodingType(2) } (0..255) PtActivationData ::= OCTET STRING (SIZE(1..20)) AccelerationControl ::= BIT STRING { brakePedalEngaged(0), gasPedalEngaged(1), emergencyBrakeEngaged(2), collisionWarningEngaged(3), accEngaged(4), cruiseControlEngaged(5), speedLimiterEngaged(6) } (SIZE(7)) SemiAxisLength ::= INTEGER { oneCentimeter(1), outOfRange(4094), unavailable(4095) } (0..4095) CauseCode ::= SEQUENCE { causeCode CauseCodeType, subCauseCode SubCauseCodeType } CauseCodeType ::= INTEGER { reserved(0), trafficCondition(1), accident(2), roadworks(3), adverseWeatherCondition-Adhesion(6), hazardousLocation-SurfaceCondition(9), hazardousLocation-ObstacleOnTheRoad(10), hazardousLocation-AnimalOnTheRoad(11), humanPresenceOnTheRoad(12), wrongWayDriving(14), rescueAndRecoveryWorkInProgress(15), adverseWeatherCondition-ExtremeWeatherCondition(17), adverseWeatherCondition-Visibility(18), adverseWeatherCondition-Precipitation(19), slowVehicle(26), dangerousEndOfQueue(27), vehicleBreakdown(91), postCrash(92), humanProblem(93), stationaryVehicle(94), emergencyVehicleApproaching(95), hazardousLocation-DangerousCurve(96), collisionRisk(97), signalViolation(98), dangerousSituation(99) } (0..255) SubCauseCodeType ::= INTEGER (0..255) TrafficConditionSubCauseCode ::= INTEGER { unavailable(0), increasedVolumeOfTraffic(1), trafficJamSlowlyIncreasing(2), trafficJamIncreasing(3), trafficJamStronglyIncreasing(4), trafficStationary(5), trafficJamSlightlyDecreasing(6), trafficJamDecreasing(7), trafficJamStronglyDecreasing(8) } (0..255) AccidentSubCauseCode ::= INTEGER { unavailable(0), multiVehicleAccident(1), heavyAccident(2), accidentInvolvingLorry(3), accidentInvolvingBus(4), accidentInvolvingHazardousMaterials(5), accidentOnOppositeLane(6), unsecuredAccident(7), assistanceRequested(8) } (0..255) RoadworksSubCauseCode ::= INTEGER { unavailable(0), majorRoadworks(1), roadMarkingWork(2), slowMovingRoadMaintenance(3), shortTermStationaryRoadworks(4), streetCleaning(5), winterService(6) } (0..255) HumanPresenceOnTheRoadSubCauseCode ::= INTEGER { unavailable(0), childrenOnRoadway(1), cyclistOnRoadway(2), motorcyclistOnRoadway(3) } (0..255) WrongWayDrivingSubCauseCode ::= INTEGER { unavailable(0), wrongLane(1), wrongDirection(2) } (0..255) AdverseWeatherCondition-ExtremeWeatherConditionSubCauseCode ::= INTEGER { unavailable(0), strongWinds(1), damagingHail(2), hurricane(3), thunderstorm(4), tornado(5), blizzard(6) } (0..255) AdverseWeatherCondition-AdhesionSubCauseCode ::= INTEGER { unavailable(0), heavyFrostOnRoad(1), fuelOnRoad(2), mudOnRoad(3), snowOnRoad(4), iceOnRoad(5), blackIceOnRoad(6), oilOnRoad(7), looseChippings(8), instantBlackIce(9), roadsSalted(10) } (0..255) AdverseWeatherCondition-VisibilitySubCauseCode ::= INTEGER { unavailable(0), fog(1), smoke(2), heavySnowfall(3), heavyRain(4), heavyHail(5), lowSunGlare(6), sandstorms(7), swarmsOfInsects(8) } (0..255) AdverseWeatherCondition-PrecipitationSubCauseCode ::= INTEGER { unavailable(0), heavyRain(1), heavySnowfall(2), softHail(3) } (0..255) SlowVehicleSubCauseCode ::= INTEGER { unavailable(0), maintenanceVehicle(1), vehiclesSlowingToLookAtAccident(2), abnormalLoad(3), abnormalWideLoad(4), convoy(5), snowplough(6), deicing(7), saltingVehicles(8) } (0..255) StationaryVehicleSubCauseCode ::= INTEGER { unavailable(0), humanProblem(1), vehicleBreakdown(2), postCrash(3), publicTransportStop(4), carryingDangerousGoods(5) } (0..255) HumanProblemSubCauseCode ::= INTEGER { unavailable(0), glycemiaProblem(1), heartProblem(2) } (0..255) EmergencyVehicleApproachingSubCauseCode ::= INTEGER { unavailable(0), emergencyVehicleApproaching(1), prioritizedVehicleApproaching(2) } (0..255) HazardousLocation-DangerousCurveSubCauseCode ::= INTEGER { unavailable(0), dangerousLeftTurnCurve(1), dangerousRightTurnCurve(2), multipleCurvesStartingWithUnknownTurningDirection(3), multipleCurvesStartingWithLeftTurn(4), multipleCurvesStartingWithRightTurn(5) } (0..255) HazardousLocation-SurfaceConditionSubCauseCode ::= INTEGER { unavailable(0), rockfalls(1), earthquakeDamage(2), sewerCollapse(3), subsidence(4), snowDrifts(5), stormDamage(6), burstPipe(7), volcanoEruption(8), fallingIce(9) } (0..255) HazardousLocation-ObstacleOnTheRoadSubCauseCode ::= INTEGER { unavailable(0), shedLoad(1), partsOfVehicles(2), partsOfTyres(3), bigObjects(4), fallenTrees(5), hubCaps(6), waitingVehicles(7) } (0..255) HazardousLocation-AnimalOnTheRoadSubCauseCode ::= INTEGER { unavailable(0), wildAnimals(1), herdOfAnimals(2), smallAnimals(3), largeAnimals(4) } (0..255) CollisionRiskSubCauseCode ::= INTEGER { unavailable(0), longitudinalCollisionRisk(1), crossingCollisionRisk(2), lateralCollisionRisk(3), vulnerableRoadUser(4) } (0..255) SignalViolationSubCauseCode ::= INTEGER { unavailable(0), stopSignViolation(1), trafficLightViolation(2), turningRegulationViolation(3) } (0..255) RescueAndRecoveryWorkInProgressSubCauseCode ::= INTEGER { unavailable(0), emergencyVehicles(1), rescueHelicopterLanding(2), policeActivityOngoing(3), medicalEmergencyOngoing(4), childAbductionInProgress(5) } (0..255) DangerousEndOfQueueSubCauseCode ::= INTEGER { unavailable(0), suddenEndOfQueue(1), queueOverHill(2), queueAroundBend(3), queueInTunnel(4) } (0..255) DangerousSituationSubCauseCode ::= INTEGER { unavailable(0), emergencyElectronicBrakeEngaged(1), preCrashSystemEngaged(2), espEngaged(3), absEngaged(4), aebEngaged(5), brakeWarningEngaged(6), collisionRiskWarningEngaged(7) } (0..255) VehicleBreakdownSubCauseCode ::= INTEGER { unavailable(0), lackOfFuel(1), lackOfBatteryPower(2), engineProblem(3), transmissionProblem(4), engineCoolingProblem(5), brakingSystemProblem(6), steeringProblem(7), tyrePuncture(8) } (0..255) PostCrashSubCauseCode ::= INTEGER { unavailable(0), accidentWithoutECallTriggered(1), accidentWithECallManuallyTriggered(2), accidentWithECallAutomaticallyTriggered(3), accidentWithECallTriggeredWithoutAccessToCellularNetwork(4) } (0..255) Curvature ::= SEQUENCE { curvatureValue CurvatureValue, curvatureConfidence CurvatureConfidence } CurvatureValue ::= INTEGER { straight(0), reciprocalOf1MeterRadiusToRight(-30000), reciprocalOf1MeterRadiusToLeft(30000), unavailable(30001) } (-30000..30001) CurvatureConfidence ::= ENUMERATED { onePerMeter-0-00002(0), onePerMeter-0-0001(1), onePerMeter-0-0005(2), onePerMeter-0-002(3), onePerMeter-0-01(4), onePerMeter-0-1(5), outOfRange(6), unavailable(7) } CurvatureCalculationMode ::= ENUMERATED { yawRateUsed(0), yawRateNotUsed(1), unavailable(2), ... } Heading ::= SEQUENCE { headingValue HeadingValue, headingConfidence HeadingConfidence } HeadingValue ::= INTEGER { wgs84North(0), wgs84East(900), wgs84South(1800), wgs84West(2700), unavailable(3601) } (0..3601) HeadingConfidence ::= INTEGER { equalOrWithinZeroPointOneDegree(1), equalOrWithinOneDegree(10), outOfRange(126), unavailable(127) } (1..127) LanePosition ::= INTEGER { offTheRoad(-1), hardShoulder(0), outermostDrivingLane(1), secondLaneFromOutside(2) } (-1..14) ClosedLanes ::= SEQUENCE { hardShoulderStatus HardShoulderStatus OPTIONAL, drivingLaneStatus DrivingLaneStatus, ... } HardShoulderStatus ::= ENUMERATED { availableForStopping(0), closed(1), availableForDriving(2) } DrivingLaneStatus ::= BIT STRING { outermostLaneClosed(1), secondLaneFromOutsideClosed(2) } (SIZE(1..14)) PerformanceClass ::= INTEGER { unavailable(0), performanceClassA(1), performanceClassB(2) } (0..7) SpeedValue ::= INTEGER { standstill(0), oneCentimeterPerSec(1), unavailable(16383) } (0..16383) SpeedConfidence ::= INTEGER { equalOrWithinOneCentimeterPerSec(1), equalOrWithinOneMeterPerSec(100), outOfRange(126), unavailable(127) } (1..127) VehicleMass ::= INTEGER { hundredKg(1), unavailable(1024) } (1..1024) Speed ::= SEQUENCE { speedValue SpeedValue, speedConfidence SpeedConfidence } DriveDirection ::= ENUMERATED { forward(0), backward(1), unavailable(2) } EmbarkationStatus ::= BOOLEAN LongitudinalAcceleration ::= SEQUENCE { longitudinalAccelerationValue LongitudinalAccelerationValue, longitudinalAccelerationConfidence AccelerationConfidence } LongitudinalAccelerationValue ::= INTEGER { pointOneMeterPerSecSquaredForward(1), pointOneMeterPerSecSquaredBackward(-1), unavailable(161) } (-160..161) AccelerationConfidence ::= INTEGER { pointOneMeterPerSecSquared(1), outOfRange(101), unavailable(102) } (0..102) LateralAcceleration ::= SEQUENCE { lateralAccelerationValue LateralAccelerationValue, lateralAccelerationConfidence AccelerationConfidence } LateralAccelerationValue ::= INTEGER { pointOneMeterPerSecSquaredToRight(-1), pointOneMeterPerSecSquaredToLeft(1), unavailable(161) } (-160..161) VerticalAcceleration ::= SEQUENCE { verticalAccelerationValue VerticalAccelerationValue, verticalAccelerationConfidence AccelerationConfidence } VerticalAccelerationValue ::= INTEGER { pointOneMeterPerSecSquaredUp(1), pointOneMeterPerSecSquaredDown(-1), unavailable(161) } (-160..161) StationType ::= INTEGER { unknown(0), pedestrian(1), cyclist(2), moped(3), motorcycle(4), passengerCar(5), bus(6), lightTruck(7), heavyTruck(8), trailer(9), specialVehicles(10), tram(11), roadSideUnit(15) } (0..255) ExteriorLights ::= BIT STRING { lowBeamHeadlightsOn(0), highBeamHeadlightsOn(1), leftTurnSignalOn(2), rightTurnSignalOn(3), daytimeRunningLightsOn(4), reverseLightOn(5), fogLightOn(6), parkingLightsOn(7) } (SIZE(8)) DangerousGoodsBasic ::= ENUMERATED { explosives1(0), explosives2(1), explosives3(2), explosives4(3), explosives5(4), explosives6(5), flammableGases(6), nonFlammableGases(7), toxicGases(8), flammableLiquids(9), flammableSolids(10), substancesLiableToSpontaneousCombustion(11), substancesEmittingFlammableGasesUponContactWithWater(12), oxidizingSubstances(13), organicPeroxides(14), toxicSubstances(15), infectiousSubstances(16), radioactiveMaterial(17), corrosiveSubstances(18), miscellaneousDangerousSubstances(19) } DangerousGoodsExtended ::= SEQUENCE { dangerousGoodsType DangerousGoodsBasic, unNumber INTEGER (0..9999), elevatedTemperature BOOLEAN, tunnelsRestricted BOOLEAN, limitedQuantity BOOLEAN, emergencyActionCode IA5String (SIZE(1..24)) OPTIONAL, phoneNumber IA5String (SIZE(1..24)) OPTIONAL, companyName UTF8String (SIZE(1..24)) OPTIONAL } SpecialTransportType ::= BIT STRING { heavyLoad(0), excessWidth(1), excessLength(2), excessHeight(3) } (SIZE(4)) LightBarSirenInUse ::= BIT STRING { lightBarActivated(0), sirenActivated(1) } (SIZE(2)) HeightLonCarr ::= INTEGER { oneCentimeter(1), unavailable(100) } (1..100) PosLonCarr ::= INTEGER { oneCentimeter(1), unavailable(127) } (1..127) PosPillar ::= INTEGER { tenCentimeters(1), unavailable(30) } (1..30) PosCentMass ::= INTEGER { tenCentimeters(1), unavailable(63) } (1..63) RequestResponseIndication ::= ENUMERATED { request(0), response(1) } SpeedLimit ::= INTEGER { oneKmPerHour(1) } (1..255) StationarySince ::= ENUMERATED { lessThan1Minute(0), lessThan2Minutes(1), lessThan15Minutes(2), equalOrGreater15Minutes(3) } Temperature ::= INTEGER { equalOrSmallerThanMinus60Deg(-60), oneDegreeCelsius(1), equalOrGreaterThan67Deg(67) } (-60..67) TrafficRule ::= ENUMERATED { noPassing(0), noPassingForTrucks(1), passToRight(2), passToLeft(3), ... } WheelBaseVehicle ::= INTEGER { tenCentimeters(1), unavailable(127) } (1..127) TurningRadius ::= INTEGER { point4Meters(1), unavailable(255) } (1..255) PosFrontAx ::= INTEGER { tenCentimeters(1), unavailable(20) } (1..20) PositionOfOccupants ::= BIT STRING { row1LeftOccupied(0), row1RightOccupied(1), row1MidOccupied(2), row1NotDetectable(3), row1NotPresent(4), row2LeftOccupied(5), row2RightOccupied(6), row2MidOccupied(7), row2NotDetectable(8), row2NotPresent(9), row3LeftOccupied(10), row3RightOccupied(11), row3MidOccupied(12), row3NotDetectable(13), row3NotPresent(14), row4LeftOccupied(15), row4RightOccupied(16), row4MidOccupied(17), row4NotDetectable(18), row4NotPresent(19) } (SIZE(20)) PositioningSolutionType ::= ENUMERATED { noPositioningSolution(0), sGNSS(1), dGNSS(2), sGNSSplusDR(3), dGNSSplusDR(4), dR(5), ... } VehicleIdentification ::= SEQUENCE { wMInumber WMInumber OPTIONAL, vDS VDS OPTIONAL, ... } WMInumber ::= IA5String (SIZE(1..3)) VDS ::= IA5String (SIZE(6)) EnergyStorageType ::= BIT STRING { hydrogenStorage(0), electricEnergyStorage(1), liquidPropaneGas(2), compressedNaturalGas(3), diesel(4), gasoline(5), ammonia(6) } (SIZE(7)) VehicleLength ::= SEQUENCE { vehicleLengthValue VehicleLengthValue, vehicleLengthConfidenceIndication VehicleLengthConfidenceIndication } VehicleLengthValue ::= INTEGER { tenCentimeters(1), outOfRange(1022), unavailable(1023) } (1..1023) VehicleLengthConfidenceIndication ::= ENUMERATED { noTrailerPresent(0), trailerPresentWithKnownLength(1), trailerPresentWithUnknownLength(2), trailerPresenceIsUnknown(3), unavailable(4) } VehicleWidth ::= INTEGER { tenCentimeters(1), outOfRange(61), unavailable(62) } (1..62) PathHistory ::= SEQUENCE (SIZE(0..40)) OF PathPoint EmergencyPriority ::= BIT STRING { requestForRightOfWay(0), requestForFreeCrossingAtATrafficLight(1) } (SIZE(2)) InformationQuality ::= INTEGER { unavailable(0), lowest(1), highest(7) } (0..7) RoadType ::= ENUMERATED { urban-NoStructuralSeparationToOppositeLanes(0), urban-WithStructuralSeparationToOppositeLanes(1), nonUrban-NoStructuralSeparationToOppositeLanes(2), nonUrban-WithStructuralSeparationToOppositeLanes(3) } SteeringWheelAngle ::= SEQUENCE { steeringWheelAngleValue SteeringWheelAngleValue, steeringWheelAngleConfidence SteeringWheelAngleConfidence } SteeringWheelAngleValue ::= INTEGER { straight(0), onePointFiveDegreesToRight(-1), onePointFiveDegreesToLeft(1), unavailable(512) } (-511..512) SteeringWheelAngleConfidence ::= INTEGER { equalOrWithinOnePointFiveDegree(1), outOfRange(126), unavailable(127) } (1..127) TimestampIts ::= INTEGER { utcStartOf2004(0), oneMillisecAfterUTCStartOf2004(1) } (0..4398046511103) VehicleRole ::= ENUMERATED { default(0), publicTransport(1), specialTransport(2), dangerousGoods(3), roadWork(4), rescue(5), emergency(6), safetyCar(7), agriculture(8), commercial(9), military(10), roadOperator(11), taxi(12), reserved1(13), reserved2(14), reserved3(15) } YawRate ::= SEQUENCE { yawRateValue YawRateValue, yawRateConfidence YawRateConfidence } YawRateValue ::= INTEGER { straight(0), degSec-000-01ToRight(-1), degSec-000-01ToLeft(1), unavailable(32767) } (-32766..32767) YawRateConfidence ::= ENUMERATED { degSec-000-01(0), degSec-000-05(1), degSec-000-10(2), degSec-001-00(3), degSec-005-00(4), degSec-010-00(5), degSec-100-00(6), outOfRange(7), unavailable(8) } ProtectedZoneType ::= ENUMERATED { cenDsrcTolling(0), ... } RelevanceDistance ::= ENUMERATED { lessThan50m(0), lessThan100m(1), lessThan200m(2), lessThan500m(3), lessThan1000m(4), lessThan5km(5), lessThan10km(6), over10km(7) } RelevanceTrafficDirection ::= ENUMERATED { allTrafficDirections(0), upstreamTraffic(1), downstreamTraffic(2), oppositeTraffic(3) } TransmissionInterval ::= INTEGER { oneMilliSecond(1), tenSeconds(10000) } (1..10000) ValidityDuration ::= INTEGER { timeOfDetection(0), oneSecondAfterDetection(1) } (0..86400) ActionID ::= SEQUENCE { originatingStationID StationID, sequenceNumber SequenceNumber } ItineraryPath ::= SEQUENCE SIZE(1..40) OF ReferencePosition ProtectedCommunicationZone ::= SEQUENCE { protectedZoneType ProtectedZoneType, expiryTime TimestampIts OPTIONAL, protectedZoneLatitude Latitude, protectedZoneLongitude Longitude, protectedZoneRadius ProtectedZoneRadius OPTIONAL, protectedZoneID ProtectedZoneID OPTIONAL } Traces ::= SEQUENCE SIZE(1..7) OF PathHistory NumberOfOccupants ::= INTEGER { oneOccupant(1), unavailable(127) } (0..127) SequenceNumber ::= INTEGER (0..65535) PositionOfPillars ::= SEQUENCE (SIZE(1..3, ...)) OF PosPillar RestrictedTypes ::= SEQUENCE (SIZE(1..3, ...)) OF StationType EventHistory ::= SEQUENCE (SIZE(1..23)) OF EventPoint EventPoint ::= SEQUENCE { eventPosition DeltaReferencePosition, eventDeltaTime PathDeltaTime OPTIONAL, informationQuality InformationQuality } ProtectedCommunicationZonesRSU ::= SEQUENCE (SIZE(1..16)) OF ProtectedCommunicationZone CenDsrcTollingZone ::= SEQUENCE { protectedZoneLatitude Latitude, protectedZoneLongitude Longitude, cenDsrcTollingZoneID CenDsrcTollingZoneID OPTIONAL } ProtectedZoneRadius ::= INTEGER { oneMeter(1) } (1..255, ...) ProtectedZoneID ::= INTEGER (0..134217727) CenDsrcTollingZoneID ::= ProtectedZoneID END asn1tools-0.169.0/tests/files/etsi/its_container_1_2_1.py000066400000000000000000002632671524544274600231530ustar00rootroot00000000000000EXPECTED = {'ITS-Container': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AccelerationConfidence': {'named-numbers': {'outOfRange': 101, 'pointOneMeterPerSecSquared': 1, 'unavailable': 102}, 'restricted-to': [(0, 102)], 'type': 'INTEGER'}, 'AccelerationControl': {'named-bits': [('brakePedalEngaged', '0'), ('gasPedalEngaged', '1'), ('emergencyBrakeEngaged', '2'), ('collisionWarningEngaged', '3'), ('accEngaged', '4'), ('cruiseControlEngaged', '5'), ('speedLimiterEngaged', '6')], 'size': [7], 'type': 'BIT STRING'}, 'AccidentSubCauseCode': {'named-numbers': {'accidentInvolvingBus': 4, 'accidentInvolvingHazardousMaterials': 5, 'accidentInvolvingLorry': 3, 'accidentOnOppositeLane': 6, 'assistanceRequested': 8, 'heavyAccident': 2, 'multiVehicleAccident': 1, 'unavailable': 0, 'unsecuredAccident': 7}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'ActionID': {'members': [{'name': 'originatingStationID', 'type': 'StationID'}, {'name': 'sequenceNumber', 'type': 'SequenceNumber'}], 'type': 'SEQUENCE'}, 'AdverseWeatherCondition-AdhesionSubCauseCode': {'named-numbers': {'blackIceOnRoad': 6, 'fuelOnRoad': 2, 'heavyFrostOnRoad': 1, 'iceOnRoad': 5, 'instantBlackIce': 9, 'looseChippings': 8, 'mudOnRoad': 3, 'oilOnRoad': 7, 'roadsSalted': 10, 'snowOnRoad': 4, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'AdverseWeatherCondition-ExtremeWeatherConditionSubCauseCode': {'named-numbers': {'blizzard': 6, 'damagingHail': 2, 'hurricane': 3, 'strongWinds': 1, 'thunderstorm': 4, 'tornado': 5, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'AdverseWeatherCondition-PrecipitationSubCauseCode': {'named-numbers': {'heavyRain': 1, 'heavySnowfall': 2, 'softHail': 3, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'AdverseWeatherCondition-VisibilitySubCauseCode': {'named-numbers': {'fog': 1, 'heavyHail': 5, 'heavyRain': 4, 'heavySnowfall': 3, 'lowSunGlare': 6, 'sandstorms': 7, 'smoke': 2, 'swarmsOfInsects': 8, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'Altitude': {'members': [{'name': 'altitudeValue', 'type': 'AltitudeValue'}, {'name': 'altitudeConfidence', 'type': 'AltitudeConfidence'}], 'type': 'SEQUENCE'}, 'AltitudeConfidence': {'type': 'ENUMERATED', 'values': [('alt-000-01', 0), ('alt-000-02', 1), ('alt-000-05', 2), ('alt-000-10', 3), ('alt-000-20', 4), ('alt-000-50', 5), ('alt-001-00', 6), ('alt-002-00', 7), ('alt-005-00', 8), ('alt-010-00', 9), ('alt-020-00', 10), ('alt-050-00', 11), ('alt-100-00', 12), ('alt-200-00', 13), ('outOfRange', 14), ('unavailable', 15)]}, 'AltitudeValue': {'named-numbers': {'oneCentimeter': 1, 'referenceEllipsoidSurface': 0, 'unavailable': 800001}, 'restricted-to': [(-100000, 800001)], 'type': 'INTEGER'}, 'CauseCode': {'members': [{'name': 'causeCode', 'type': 'CauseCodeType'}, {'name': 'subCauseCode', 'type': 'SubCauseCodeType'}], 'type': 'SEQUENCE'}, 'CauseCodeType': {'named-numbers': {'accident': 2, 'adverseWeatherCondition-Adhesion': 6, 'adverseWeatherCondition-ExtremeWeatherCondition': 17, 'adverseWeatherCondition-Precipitation': 19, 'adverseWeatherCondition-Visibility': 18, 'collisionRisk': 97, 'dangerousEndOfQueue': 27, 'dangerousSituation': 99, 'emergencyVehicleApproaching': 95, 'hazardousLocation-AnimalOnTheRoad': 11, 'hazardousLocation-DangerousCurve': 96, 'hazardousLocation-ObstacleOnTheRoad': 10, 'hazardousLocation-SurfaceCondition': 9, 'humanPresenceOnTheRoad': 12, 'humanProblem': 93, 'postCrash': 92, 'rescueAndRecoveryWorkInProgress': 15, 'reserved': 0, 'roadworks': 3, 'signalViolation': 98, 'slowVehicle': 26, 'stationaryVehicle': 94, 'trafficCondition': 1, 'vehicleBreakdown': 91, 'wrongWayDriving': 14}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'CenDsrcTollingZone': {'members': [{'name': 'protectedZoneLatitude', 'type': 'Latitude'}, {'name': 'protectedZoneLongitude', 'type': 'Longitude'}, {'name': 'cenDsrcTollingZoneID', 'optional': True, 'type': 'CenDsrcTollingZoneID'}], 'type': 'SEQUENCE'}, 'CenDsrcTollingZoneID': {'type': 'ProtectedZoneID'}, 'ClosedLanes': {'members': [{'name': 'hardShoulderStatus', 'optional': True, 'type': 'HardShoulderStatus'}, {'name': 'drivingLaneStatus', 'type': 'DrivingLaneStatus'}, None], 'type': 'SEQUENCE'}, 'CollisionRiskSubCauseCode': {'named-numbers': {'crossingCollisionRisk': 2, 'lateralCollisionRisk': 3, 'longitudinalCollisionRisk': 1, 'unavailable': 0, 'vulnerableRoadUser': 4}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'Curvature': {'members': [{'name': 'curvatureValue', 'type': 'CurvatureValue'}, {'name': 'curvatureConfidence', 'type': 'CurvatureConfidence'}], 'type': 'SEQUENCE'}, 'CurvatureCalculationMode': {'type': 'ENUMERATED', 'values': [('yawRateUsed', 0), ('yawRateNotUsed', 1), ('unavailable', 2), None]}, 'CurvatureConfidence': {'type': 'ENUMERATED', 'values': [('onePerMeter-0-00002', 0), ('onePerMeter-0-0001', 1), ('onePerMeter-0-0005', 2), ('onePerMeter-0-002', 3), ('onePerMeter-0-01', 4), ('onePerMeter-0-1', 5), ('outOfRange', 6), ('unavailable', 7)]}, 'CurvatureValue': {'named-numbers': {'reciprocalOf1MeterRadiusToLeft': 30000, 'reciprocalOf1MeterRadiusToRight': -30000, 'straight': 0, 'unavailable': 30001}, 'restricted-to': [(-30000, 30001)], 'type': 'INTEGER'}, 'DangerousEndOfQueueSubCauseCode': {'named-numbers': {'queueAroundBend': 3, 'queueInTunnel': 4, 'queueOverHill': 2, 'suddenEndOfQueue': 1, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'DangerousGoodsBasic': {'type': 'ENUMERATED', 'values': [('explosives1', 0), ('explosives2', 1), ('explosives3', 2), ('explosives4', 3), ('explosives5', 4), ('explosives6', 5), ('flammableGases', 6), ('nonFlammableGases', 7), ('toxicGases', 8), ('flammableLiquids', 9), ('flammableSolids', 10), ('substancesLiableToSpontaneousCombustion', 11), ('substancesEmittingFlammableGasesUponContactWithWater', 12), ('oxidizingSubstances', 13), ('organicPeroxides', 14), ('toxicSubstances', 15), ('infectiousSubstances', 16), ('radioactiveMaterial', 17), ('corrosiveSubstances', 18), ('miscellaneousDangerousSubstances', 19)]}, 'DangerousGoodsExtended': {'members': [{'name': 'dangerousGoodsType', 'type': 'DangerousGoodsBasic'}, {'name': 'unNumber', 'restricted-to': [(0, 9999)], 'type': 'INTEGER'}, {'name': 'elevatedTemperature', 'type': 'BOOLEAN'}, {'name': 'tunnelsRestricted', 'type': 'BOOLEAN'}, {'name': 'limitedQuantity', 'type': 'BOOLEAN'}, {'name': 'emergencyActionCode', 'optional': True, 'size': [(1, 24)], 'type': 'IA5String'}, {'name': 'phoneNumber', 'optional': True, 'size': [(1, 24)], 'type': 'IA5String'}, {'name': 'companyName', 'optional': True, 'size': [(1, 24)], 'type': 'UTF8String'}], 'type': 'SEQUENCE'}, 'DangerousSituationSubCauseCode': {'named-numbers': {'absEngaged': 4, 'aebEngaged': 5, 'brakeWarningEngaged': 6, 'collisionRiskWarningEngaged': 7, 'emergencyElectronicBrakeEngaged': 1, 'espEngaged': 3, 'preCrashSystemEngaged': 2, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'DeltaAltitude': {'named-numbers': {'oneCentimeterDown': -1, 'oneCentimeterUp': 1, 'unavailable': 12800}, 'restricted-to': [(-12700, 12800)], 'type': 'INTEGER'}, 'DeltaLatitude': {'named-numbers': {'oneMicrodegreeNorth': 10, 'oneMicrodegreeSouth': -10, 'unavailable': 131072}, 'restricted-to': [(-131071, 131072)], 'type': 'INTEGER'}, 'DeltaLongitude': {'named-numbers': {'oneMicrodegreeEast': 10, 'oneMicrodegreeWest': -10, 'unavailable': 131072}, 'restricted-to': [(-131071, 131072)], 'type': 'INTEGER'}, 'DeltaReferencePosition': {'members': [{'name': 'deltaLatitude', 'type': 'DeltaLatitude'}, {'name': 'deltaLongitude', 'type': 'DeltaLongitude'}, {'name': 'deltaAltitude', 'type': 'DeltaAltitude'}], 'type': 'SEQUENCE'}, 'DriveDirection': {'type': 'ENUMERATED', 'values': [('forward', 0), ('backward', 1), ('unavailable', 2)]}, 'DrivingLaneStatus': {'named-bits': [('outermostLaneClosed', '1'), ('secondLaneFromOutsideClosed', '2')], 'size': [(1, 14)], 'type': 'BIT STRING'}, 'EmbarkationStatus': {'type': 'BOOLEAN'}, 'EmergencyPriority': {'named-bits': [('requestForRightOfWay', '0'), ('requestForFreeCrossingAtATrafficLight', '1')], 'size': [2], 'type': 'BIT STRING'}, 'EmergencyVehicleApproachingSubCauseCode': {'named-numbers': {'emergencyVehicleApproaching': 1, 'prioritizedVehicleApproaching': 2, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'EnergyStorageType': {'named-bits': [('hydrogenStorage', '0'), ('electricEnergyStorage', '1'), ('liquidPropaneGas', '2'), ('compressedNaturalGas', '3'), ('diesel', '4'), ('gasoline', '5'), ('ammonia', '6')], 'size': [7], 'type': 'BIT STRING'}, 'EventHistory': {'element': {'type': 'EventPoint'}, 'size': [(1, 23)], 'type': 'SEQUENCE OF'}, 'EventPoint': {'members': [{'name': 'eventPosition', 'type': 'DeltaReferencePosition'}, {'name': 'eventDeltaTime', 'optional': True, 'type': 'PathDeltaTime'}, {'name': 'informationQuality', 'type': 'InformationQuality'}], 'type': 'SEQUENCE'}, 'ExteriorLights': {'named-bits': [('lowBeamHeadlightsOn', '0'), ('highBeamHeadlightsOn', '1'), ('leftTurnSignalOn', '2'), ('rightTurnSignalOn', '3'), ('daytimeRunningLightsOn', '4'), ('reverseLightOn', '5'), ('fogLightOn', '6'), ('parkingLightsOn', '7')], 'size': [8], 'type': 'BIT STRING'}, 'HardShoulderStatus': {'type': 'ENUMERATED', 'values': [('availableForStopping', 0), ('closed', 1), ('availableForDriving', 2)]}, 'HazardousLocation-AnimalOnTheRoadSubCauseCode': {'named-numbers': {'herdOfAnimals': 2, 'largeAnimals': 4, 'smallAnimals': 3, 'unavailable': 0, 'wildAnimals': 1}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'HazardousLocation-DangerousCurveSubCauseCode': {'named-numbers': {'dangerousLeftTurnCurve': 1, 'dangerousRightTurnCurve': 2, 'multipleCurvesStartingWithLeftTurn': 4, 'multipleCurvesStartingWithRightTurn': 5, 'multipleCurvesStartingWithUnknownTurningDirection': 3, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'HazardousLocation-ObstacleOnTheRoadSubCauseCode': {'named-numbers': {'bigObjects': 4, 'fallenTrees': 5, 'hubCaps': 6, 'partsOfTyres': 3, 'partsOfVehicles': 2, 'shedLoad': 1, 'unavailable': 0, 'waitingVehicles': 7}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'HazardousLocation-SurfaceConditionSubCauseCode': {'named-numbers': {'burstPipe': 7, 'earthquakeDamage': 2, 'fallingIce': 9, 'rockfalls': 1, 'sewerCollapse': 3, 'snowDrifts': 5, 'stormDamage': 6, 'subsidence': 4, 'unavailable': 0, 'volcanoEruption': 8}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'Heading': {'members': [{'name': 'headingValue', 'type': 'HeadingValue'}, {'name': 'headingConfidence', 'type': 'HeadingConfidence'}], 'type': 'SEQUENCE'}, 'HeadingConfidence': {'named-numbers': {'equalOrWithinOneDegree': 10, 'equalOrWithinZeroPointOneDegree': 1, 'outOfRange': 126, 'unavailable': 127}, 'restricted-to': [(1, 127)], 'type': 'INTEGER'}, 'HeadingValue': {'named-numbers': {'unavailable': 3601, 'wgs84East': 900, 'wgs84North': 0, 'wgs84South': 1800, 'wgs84West': 2700}, 'restricted-to': [(0, 3601)], 'type': 'INTEGER'}, 'HeightLonCarr': {'named-numbers': {'oneCentimeter': 1, 'unavailable': 100}, 'restricted-to': [(1, 100)], 'type': 'INTEGER'}, 'HumanPresenceOnTheRoadSubCauseCode': {'named-numbers': {'childrenOnRoadway': 1, 'cyclistOnRoadway': 2, 'motorcyclistOnRoadway': 3, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'HumanProblemSubCauseCode': {'named-numbers': {'glycemiaProblem': 1, 'heartProblem': 2, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'InformationQuality': {'named-numbers': {'highest': 7, 'lowest': 1, 'unavailable': 0}, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, 'ItineraryPath': {'element': {'type': 'ReferencePosition'}, 'size': [(1, 40)], 'type': 'SEQUENCE OF'}, 'ItsPduHeader': {'members': [{'name': 'protocolVersion', 'named-numbers': {'currentVersion': 1}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'messageID', 'named-numbers': {'cam': 2, 'denm': 1, 'ev-rsr': 7, 'ivi': 6, 'map': 5, 'poi': 3, 'spat': 4}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'stationID', 'type': 'StationID'}], 'type': 'SEQUENCE'}, 'LanePosition': {'named-numbers': {'hardShoulder': 0, 'offTheRoad': -1, 'outermostDrivingLane': 1, 'secondLaneFromOutside': 2}, 'restricted-to': [(-1, 14)], 'type': 'INTEGER'}, 'LateralAcceleration': {'members': [{'name': 'lateralAccelerationValue', 'type': 'LateralAccelerationValue'}, {'name': 'lateralAccelerationConfidence', 'type': 'AccelerationConfidence'}], 'type': 'SEQUENCE'}, 'LateralAccelerationValue': {'named-numbers': {'pointOneMeterPerSecSquaredToLeft': 1, 'pointOneMeterPerSecSquaredToRight': -1, 'unavailable': 161}, 'restricted-to': [(-160, 161)], 'type': 'INTEGER'}, 'Latitude': {'named-numbers': {'oneMicrodegreeNorth': 10, 'oneMicrodegreeSouth': -10, 'unavailable': 900000001}, 'restricted-to': [(-900000000, 900000001)], 'type': 'INTEGER'}, 'LightBarSirenInUse': {'named-bits': [('lightBarActivated', '0'), ('sirenActivated', '1')], 'size': [2], 'type': 'BIT STRING'}, 'Longitude': {'named-numbers': {'oneMicrodegreeEast': 10, 'oneMicrodegreeWest': -10, 'unavailable': 1800000001}, 'restricted-to': [(-1800000000, 1800000001)], 'type': 'INTEGER'}, 'LongitudinalAcceleration': {'members': [{'name': 'longitudinalAccelerationValue', 'type': 'LongitudinalAccelerationValue'}, {'name': 'longitudinalAccelerationConfidence', 'type': 'AccelerationConfidence'}], 'type': 'SEQUENCE'}, 'LongitudinalAccelerationValue': {'named-numbers': {'pointOneMeterPerSecSquaredBackward': -1, 'pointOneMeterPerSecSquaredForward': 1, 'unavailable': 161}, 'restricted-to': [(-160, 161)], 'type': 'INTEGER'}, 'NumberOfOccupants': {'named-numbers': {'oneOccupant': 1, 'unavailable': 127}, 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, 'PathDeltaTime': {'named-numbers': {'tenMilliSecondsInPast': 1}, 'restricted-to': [(1, 65535), None], 'type': 'INTEGER'}, 'PathHistory': {'element': {'type': 'PathPoint'}, 'size': [(0, 40)], 'type': 'SEQUENCE OF'}, 'PathPoint': {'members': [{'name': 'pathPosition', 'type': 'DeltaReferencePosition'}, {'name': 'pathDeltaTime', 'optional': True, 'type': 'PathDeltaTime'}], 'type': 'SEQUENCE'}, 'PerformanceClass': {'named-numbers': {'performanceClassA': 1, 'performanceClassB': 2, 'unavailable': 0}, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, 'PosCentMass': {'named-numbers': {'tenCentimeters': 1, 'unavailable': 63}, 'restricted-to': [(1, 63)], 'type': 'INTEGER'}, 'PosConfidenceEllipse': {'members': [{'name': 'semiMajorConfidence', 'type': 'SemiAxisLength'}, {'name': 'semiMinorConfidence', 'type': 'SemiAxisLength'}, {'name': 'semiMajorOrientation', 'type': 'HeadingValue'}], 'type': 'SEQUENCE'}, 'PosFrontAx': {'named-numbers': {'tenCentimeters': 1, 'unavailable': 20}, 'restricted-to': [(1, 20)], 'type': 'INTEGER'}, 'PosLonCarr': {'named-numbers': {'oneCentimeter': 1, 'unavailable': 127}, 'restricted-to': [(1, 127)], 'type': 'INTEGER'}, 'PosPillar': {'named-numbers': {'tenCentimeters': 1, 'unavailable': 30}, 'restricted-to': [(1, 30)], 'type': 'INTEGER'}, 'PositionOfOccupants': {'named-bits': [('row1LeftOccupied', '0'), ('row1RightOccupied', '1'), ('row1MidOccupied', '2'), ('row1NotDetectable', '3'), ('row1NotPresent', '4'), ('row2LeftOccupied', '5'), ('row2RightOccupied', '6'), ('row2MidOccupied', '7'), ('row2NotDetectable', '8'), ('row2NotPresent', '9'), ('row3LeftOccupied', '10'), ('row3RightOccupied', '11'), ('row3MidOccupied', '12'), ('row3NotDetectable', '13'), ('row3NotPresent', '14'), ('row4LeftOccupied', '15'), ('row4RightOccupied', '16'), ('row4MidOccupied', '17'), ('row4NotDetectable', '18'), ('row4NotPresent', '19')], 'size': [20], 'type': 'BIT STRING'}, 'PositionOfPillars': {'element': {'type': 'PosPillar'}, 'size': [(1, 3), None], 'type': 'SEQUENCE OF'}, 'PositioningSolutionType': {'type': 'ENUMERATED', 'values': [('noPositioningSolution', 0), ('sGNSS', 1), ('dGNSS', 2), ('sGNSSplusDR', 3), ('dGNSSplusDR', 4), ('dR', 5), None]}, 'PostCrashSubCauseCode': {'named-numbers': {'accidentWithECallAutomaticallyTriggered': 3, 'accidentWithECallManuallyTriggered': 2, 'accidentWithECallTriggeredWithoutAccessToCellularNetwork': 4, 'accidentWithoutECallTriggered': 1, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'ProtectedCommunicationZone': {'members': [{'name': 'protectedZoneType', 'type': 'ProtectedZoneType'}, {'name': 'expiryTime', 'optional': True, 'type': 'TimestampIts'}, {'name': 'protectedZoneLatitude', 'type': 'Latitude'}, {'name': 'protectedZoneLongitude', 'type': 'Longitude'}, {'name': 'protectedZoneRadius', 'optional': True, 'type': 'ProtectedZoneRadius'}, {'name': 'protectedZoneID', 'optional': True, 'type': 'ProtectedZoneID'}], 'type': 'SEQUENCE'}, 'ProtectedCommunicationZonesRSU': {'element': {'type': 'ProtectedCommunicationZone'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'ProtectedZoneID': {'restricted-to': [(0, 134217727)], 'type': 'INTEGER'}, 'ProtectedZoneRadius': {'named-numbers': {'oneMeter': 1}, 'restricted-to': [(1, 255), None], 'type': 'INTEGER'}, 'ProtectedZoneType': {'type': 'ENUMERATED', 'values': [('cenDsrcTolling', 0), None]}, 'PtActivation': {'members': [{'name': 'ptActivationType', 'type': 'PtActivationType'}, {'name': 'ptActivationData', 'type': 'PtActivationData'}], 'type': 'SEQUENCE'}, 'PtActivationData': {'size': [(1, 20)], 'type': 'OCTET STRING'}, 'PtActivationType': {'named-numbers': {'r09-16CodingType': 1, 'undefinedCodingType': 0, 'vdv-50149CodingType': 2}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'ReferencePosition': {'members': [{'name': 'latitude', 'type': 'Latitude'}, {'name': 'longitude', 'type': 'Longitude'}, {'name': 'positionConfidenceEllipse', 'type': 'PosConfidenceEllipse'}, {'name': 'altitude', 'type': 'Altitude'}], 'type': 'SEQUENCE'}, 'RelevanceDistance': {'type': 'ENUMERATED', 'values': [('lessThan50m', 0), ('lessThan100m', 1), ('lessThan200m', 2), ('lessThan500m', 3), ('lessThan1000m', 4), ('lessThan5km', 5), ('lessThan10km', 6), ('over10km', 7)]}, 'RelevanceTrafficDirection': {'type': 'ENUMERATED', 'values': [('allTrafficDirections', 0), ('upstreamTraffic', 1), ('downstreamTraffic', 2), ('oppositeTraffic', 3)]}, 'RequestResponseIndication': {'type': 'ENUMERATED', 'values': [('request', 0), ('response', 1)]}, 'RescueAndRecoveryWorkInProgressSubCauseCode': {'named-numbers': {'childAbductionInProgress': 5, 'emergencyVehicles': 1, 'medicalEmergencyOngoing': 4, 'policeActivityOngoing': 3, 'rescueHelicopterLanding': 2, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'RestrictedTypes': {'element': {'type': 'StationType'}, 'size': [(1, 3), None], 'type': 'SEQUENCE OF'}, 'RoadType': {'type': 'ENUMERATED', 'values': [('urban-NoStructuralSeparationToOppositeLanes', 0), ('urban-WithStructuralSeparationToOppositeLanes', 1), ('nonUrban-NoStructuralSeparationToOppositeLanes', 2), ('nonUrban-WithStructuralSeparationToOppositeLanes', 3)]}, 'RoadworksSubCauseCode': {'named-numbers': {'majorRoadworks': 1, 'roadMarkingWork': 2, 'shortTermStationaryRoadworks': 4, 'slowMovingRoadMaintenance': 3, 'streetCleaning': 5, 'unavailable': 0, 'winterService': 6}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'SemiAxisLength': {'named-numbers': {'oneCentimeter': 1, 'outOfRange': 4094, 'unavailable': 4095}, 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, 'SequenceNumber': {'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, 'SignalViolationSubCauseCode': {'named-numbers': {'stopSignViolation': 1, 'trafficLightViolation': 2, 'turningRegulationViolation': 3, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'SlowVehicleSubCauseCode': {'named-numbers': {'abnormalLoad': 3, 'abnormalWideLoad': 4, 'convoy': 5, 'deicing': 7, 'maintenanceVehicle': 1, 'saltingVehicles': 8, 'snowplough': 6, 'unavailable': 0, 'vehiclesSlowingToLookAtAccident': 2}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'SpecialTransportType': {'named-bits': [('heavyLoad', '0'), ('excessWidth', '1'), ('excessLength', '2'), ('excessHeight', '3')], 'size': [4], 'type': 'BIT STRING'}, 'Speed': {'members': [{'name': 'speedValue', 'type': 'SpeedValue'}, {'name': 'speedConfidence', 'type': 'SpeedConfidence'}], 'type': 'SEQUENCE'}, 'SpeedConfidence': {'named-numbers': {'equalOrWithinOneCentimeterPerSec': 1, 'equalOrWithinOneMeterPerSec': 100, 'outOfRange': 126, 'unavailable': 127}, 'restricted-to': [(1, 127)], 'type': 'INTEGER'}, 'SpeedLimit': {'named-numbers': {'oneKmPerHour': 1}, 'restricted-to': [(1, 255)], 'type': 'INTEGER'}, 'SpeedValue': {'named-numbers': {'oneCentimeterPerSec': 1, 'standstill': 0, 'unavailable': 16383}, 'restricted-to': [(0, 16383)], 'type': 'INTEGER'}, 'StationID': {'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}, 'StationType': {'named-numbers': {'bus': 6, 'cyclist': 2, 'heavyTruck': 8, 'lightTruck': 7, 'moped': 3, 'motorcycle': 4, 'passengerCar': 5, 'pedestrian': 1, 'roadSideUnit': 15, 'specialVehicles': 10, 'trailer': 9, 'tram': 11, 'unknown': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'StationarySince': {'type': 'ENUMERATED', 'values': [('lessThan1Minute', 0), ('lessThan2Minutes', 1), ('lessThan15Minutes', 2), ('equalOrGreater15Minutes', 3)]}, 'StationaryVehicleSubCauseCode': {'named-numbers': {'carryingDangerousGoods': 5, 'humanProblem': 1, 'postCrash': 3, 'publicTransportStop': 4, 'unavailable': 0, 'vehicleBreakdown': 2}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'SteeringWheelAngle': {'members': [{'name': 'steeringWheelAngleValue', 'type': 'SteeringWheelAngleValue'}, {'name': 'steeringWheelAngleConfidence', 'type': 'SteeringWheelAngleConfidence'}], 'type': 'SEQUENCE'}, 'SteeringWheelAngleConfidence': {'named-numbers': {'equalOrWithinOnePointFiveDegree': 1, 'outOfRange': 126, 'unavailable': 127}, 'restricted-to': [(1, 127)], 'type': 'INTEGER'}, 'SteeringWheelAngleValue': {'named-numbers': {'onePointFiveDegreesToLeft': 1, 'onePointFiveDegreesToRight': -1, 'straight': 0, 'unavailable': 512}, 'restricted-to': [(-511, 512)], 'type': 'INTEGER'}, 'SubCauseCodeType': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'Temperature': {'named-numbers': {'equalOrGreaterThan67Deg': 67, 'equalOrSmallerThanMinus60Deg': -60, 'oneDegreeCelsius': 1}, 'restricted-to': [(-60, 67)], 'type': 'INTEGER'}, 'TimestampIts': {'named-numbers': {'oneMillisecAfterUTCStartOf2004': 1, 'utcStartOf2004': 0}, 'restricted-to': [(0, 4398046511103)], 'type': 'INTEGER'}, 'Traces': {'element': {'type': 'PathHistory'}, 'size': [(1, 7)], 'type': 'SEQUENCE OF'}, 'TrafficConditionSubCauseCode': {'named-numbers': {'increasedVolumeOfTraffic': 1, 'trafficJamDecreasing': 7, 'trafficJamIncreasing': 3, 'trafficJamSlightlyDecreasing': 6, 'trafficJamSlowlyIncreasing': 2, 'trafficJamStronglyDecreasing': 8, 'trafficJamStronglyIncreasing': 4, 'trafficStationary': 5, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'TrafficRule': {'type': 'ENUMERATED', 'values': [('noPassing', 0), ('noPassingForTrucks', 1), ('passToRight', 2), ('passToLeft', 3), None]}, 'TransmissionInterval': {'named-numbers': {'oneMilliSecond': 1, 'tenSeconds': 10000}, 'restricted-to': [(1, 10000)], 'type': 'INTEGER'}, 'TurningRadius': {'named-numbers': {'point4Meters': 1, 'unavailable': 255}, 'restricted-to': [(1, 255)], 'type': 'INTEGER'}, 'VDS': {'size': [6], 'type': 'IA5String'}, 'ValidityDuration': {'named-numbers': {'oneSecondAfterDetection': 1, 'timeOfDetection': 0}, 'restricted-to': [(0, 86400)], 'type': 'INTEGER'}, 'VehicleBreakdownSubCauseCode': {'named-numbers': {'brakingSystemProblem': 6, 'engineCoolingProblem': 5, 'engineProblem': 3, 'lackOfBatteryPower': 2, 'lackOfFuel': 1, 'steeringProblem': 7, 'transmissionProblem': 4, 'tyrePuncture': 8, 'unavailable': 0}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'VehicleIdentification': {'members': [{'name': 'wMInumber', 'optional': True, 'type': 'WMInumber'}, {'name': 'vDS', 'optional': True, 'type': 'VDS'}, None], 'type': 'SEQUENCE'}, 'VehicleLength': {'members': [{'name': 'vehicleLengthValue', 'type': 'VehicleLengthValue'}, {'name': 'vehicleLengthConfidenceIndication', 'type': 'VehicleLengthConfidenceIndication'}], 'type': 'SEQUENCE'}, 'VehicleLengthConfidenceIndication': {'type': 'ENUMERATED', 'values': [('noTrailerPresent', 0), ('trailerPresentWithKnownLength', 1), ('trailerPresentWithUnknownLength', 2), ('trailerPresenceIsUnknown', 3), ('unavailable', 4)]}, 'VehicleLengthValue': {'named-numbers': {'outOfRange': 1022, 'tenCentimeters': 1, 'unavailable': 1023}, 'restricted-to': [(1, 1023)], 'type': 'INTEGER'}, 'VehicleMass': {'named-numbers': {'hundredKg': 1, 'unavailable': 1024}, 'restricted-to': [(1, 1024)], 'type': 'INTEGER'}, 'VehicleRole': {'type': 'ENUMERATED', 'values': [('default', 0), ('publicTransport', 1), ('specialTransport', 2), ('dangerousGoods', 3), ('roadWork', 4), ('rescue', 5), ('emergency', 6), ('safetyCar', 7), ('agriculture', 8), ('commercial', 9), ('military', 10), ('roadOperator', 11), ('taxi', 12), ('reserved1', 13), ('reserved2', 14), ('reserved3', 15)]}, 'VehicleWidth': {'named-numbers': {'outOfRange': 61, 'tenCentimeters': 1, 'unavailable': 62}, 'restricted-to': [(1, 62)], 'type': 'INTEGER'}, 'VerticalAcceleration': {'members': [{'name': 'verticalAccelerationValue', 'type': 'VerticalAccelerationValue'}, {'name': 'verticalAccelerationConfidence', 'type': 'AccelerationConfidence'}], 'type': 'SEQUENCE'}, 'VerticalAccelerationValue': {'named-numbers': {'pointOneMeterPerSecSquaredDown': -1, 'pointOneMeterPerSecSquaredUp': 1, 'unavailable': 161}, 'restricted-to': [(-160, 161)], 'type': 'INTEGER'}, 'WMInumber': {'size': [(1, 3)], 'type': 'IA5String'}, 'WheelBaseVehicle': {'named-numbers': {'tenCentimeters': 1, 'unavailable': 127}, 'restricted-to': [(1, 127)], 'type': 'INTEGER'}, 'WrongWayDrivingSubCauseCode': {'named-numbers': {'unavailable': 0, 'wrongDirection': 2, 'wrongLane': 1}, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'YawRate': {'members': [{'name': 'yawRateValue', 'type': 'YawRateValue'}, {'name': 'yawRateConfidence', 'type': 'YawRateConfidence'}], 'type': 'SEQUENCE'}, 'YawRateConfidence': {'type': 'ENUMERATED', 'values': [('degSec-000-01', 0), ('degSec-000-05', 1), ('degSec-000-10', 2), ('degSec-001-00', 3), ('degSec-005-00', 4), ('degSec-010-00', 5), ('degSec-100-00', 6), ('outOfRange', 7), ('unavailable', 8)]}, 'YawRateValue': {'named-numbers': {'degSec-000-01ToLeft': 1, 'degSec-000-01ToRight': -1, 'straight': 0, 'unavailable': 32767}, 'restricted-to': [(-32766, 32767)], 'type': 'INTEGER'}}, 'values': {}}}asn1tools-0.169.0/tests/files/etsi/mapem_2_1_1.asn000066400000000000000000000030421524544274600215210ustar00rootroot00000000000000-- @brief Specification of the Map (lane topology) extended Message ETSI TS 103 301 -- Latest version available at @url https://forge.etsi.org/rep/ITS/asn1/is_ts103301.git MAPEM-PDU-Descriptions { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts103301 (103301) mapem (1) version2 (2) } DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS -- @brief Include ISO TS 19091 -- Include references from @url https://standards.iso.org/iso/ts/19091/ed-2/en/ISO-TS-19091-addgrp-C-2018.asn MapData FROM DSRC { iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version2 (2) } -- @brief Include ETSI TS 102 894-2 -- Include references from @url https://forge.etsi.org/rep/ITS/ITS_ASN1/blob/master/CDD_TS102894-2/ITS-Container.asn ItsPduHeader FROM ITS-Container { itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2)}; -- Map (lane topology) extended Message -- @brief Map (lane topology) extended Message Root -- This DF includes DEs for the MAPEM: protocolVersion, the MAPEM message type identifier _messageID_, -- the station identifier _stationID_ of the originating ITS-S and the Map data from ISO TS 19091. MAPEM ::= SEQUENCE { -- @details header -- The DE _protocolVersion_ is used to select the appropriate protocol decoder at the receiving ITS-S. -- It shall be set to 2. -- The DE _messageID_ shall be mapem(5). header ItsPduHeader, -- @details map -- The DE _map_ contains the MAP data as defined in ISO TS 19091. map MapData } END asn1tools-0.169.0/tests/files/etsi/mapem_2_1_1.py000066400000000000000000000012001524544274600213620ustar00rootroot00000000000000EXPECTED = {'MAPEM-PDU-Descriptions': {'extensibility-implied': False, 'imports': { 'DSRC': ['MapData'], 'ITS-Container': ['ItsPduHeader'] }, 'types': { 'MAPEM': { 'type': 'SEQUENCE', 'members': [{ 'type': 'ItsPduHeader', 'name': 'header' }, { 'type': 'MapData', 'name': 'map' }] } }, 'values': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC' } } asn1tools-0.169.0/tests/files/extensibility_implied.asn000066400000000000000000000015321524544274600231760ustar00rootroot00000000000000ExtensibilityImplied DEFINITIONS EXTENSIBILITY IMPLIED::= BEGIN Sequence ::= SEQUENCE {} Sequence2 ::= SEQUENCE { a INTEGER DEFAULT 0 } Sequence3 ::= SEQUENCE { a BOOLEAN, ... } Sequence4 ::= SEQUENCE { a BOOLEAN, ..., [[ b BOOLEAN ]] } Sequence5 ::= SEQUENCE { a BOOLEAN, ..., [[ b BOOLEAN ]], ... } Sequence6 ::= SEQUENCE { a BOOLEAN, ..., [[ b BOOLEAN ]], ..., c BOOLEAN } Sequence7 ::= SEQUENCE { a BOOLEAN, ..., [[ b BOOLEAN ]], [[ c BOOLEAN ]], ..., d BOOLEAN } Sequence8 ::= SEQUENCE { a BOOLEAN, ..., ... } Set ::= SET {} Set2 ::= SET { a INTEGER DEFAULT 1 } Choice ::= CHOICE { a INTEGER } Choice2 ::= CHOICE { a INTEGER, ... } Nested ::= SET { a SEQUENCE { b CHOICE { a INTEGER } } } Enum ::= ENUMERATED { one(1), two(2), ... } END asn1tools-0.169.0/tests/files/extensibility_implied.py000066400000000000000000000127601524544274600230520ustar00rootroot00000000000000EXPECTED = {'ExtensibilityImplied': {'extensibility-implied': True, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'Choice': {'members': [{'name': 'a', 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'Choice2': {'members': [{'name': 'a', 'type': 'INTEGER'}, None], 'type': 'CHOICE'}, 'Enum': {'type': 'ENUMERATED', 'values': [('one', 1), ('two', 2), None]}, 'Nested': {'members': [{'members': [{'members': [{'name': 'a', 'type': 'INTEGER'}], 'name': 'b', 'type': 'CHOICE'}], 'name': 'a', 'type': 'SEQUENCE'}], 'type': 'SET'}, 'Sequence': {'members': [], 'type': 'SEQUENCE'}, 'Sequence2': {'members': [{'default': 0, 'name': 'a', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Sequence3': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'Sequence4': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, [{'name': 'b', 'type': 'BOOLEAN'}]], 'type': 'SEQUENCE'}, 'Sequence5': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, [{'name': 'b', 'type': 'BOOLEAN'}], None], 'type': 'SEQUENCE'}, 'Sequence6': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, [{'name': 'b', 'type': 'BOOLEAN'}], None, {'name': 'c', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'Sequence7': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, [{'name': 'b', 'type': 'BOOLEAN'}], [{'name': 'c', 'type': 'BOOLEAN'}], None, {'name': 'd', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'Sequence8': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, None], 'type': 'SEQUENCE'}, 'Set': {'members': [], 'type': 'SET'}, 'Set2': {'members': [{'default': 1, 'name': 'a', 'type': 'INTEGER'}], 'type': 'SET'}}, 'values': {}}}asn1tools-0.169.0/tests/files/extensibility_implied_pp.py000066400000000000000000000136601524544274600235510ustar00rootroot00000000000000EXPECTED = {'ExtensibilityImplied': {'extensibility-implied': True, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'Choice': {'members': [{'name': 'a', 'type': 'INTEGER'}, None], 'type': 'CHOICE'}, 'Choice2': {'members': [{'name': 'a', 'type': 'INTEGER'}, None], 'type': 'CHOICE'}, 'Enum': {'values': [('one', 1), ('two', 2), None], 'type': 'ENUMERATED'}, 'Nested': {'members': [{'members': [{'members': [{'name': 'a', 'type': 'INTEGER'}, None], 'name': 'b', 'type': 'CHOICE'}, None], 'name': 'a', 'type': 'SEQUENCE'}, None], 'type': 'SET'}, 'Sequence': {'members': [None], 'type': 'SEQUENCE'}, 'Sequence2': {'members': [{'default': 0, 'name': 'a', 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'Sequence3': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'Sequence4': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, [{'name': 'b', 'type': 'BOOLEAN'}]], 'type': 'SEQUENCE'}, 'Sequence5': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, [{'name': 'b', 'type': 'BOOLEAN'}], None], 'type': 'SEQUENCE'}, 'Sequence6': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, [{'name': 'b', 'type': 'BOOLEAN'}], None, {'name': 'c', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'Sequence7': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, [{'name': 'b', 'type': 'BOOLEAN'}], [{'name': 'c', 'type': 'BOOLEAN'}], None, {'name': 'd', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'Sequence8': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, None, None], 'type': 'SEQUENCE'}, 'Set': {'members': [None], 'type': 'SET'}, 'Set2': {'members': [{'default': 1, 'name': 'a', 'type': 'INTEGER'}, None], 'type': 'SET'}}, 'values': {}}} asn1tools-0.169.0/tests/files/foo.asn000066400000000000000000000003731524544274600173640ustar00rootroot00000000000000-- A simple protocol taken from Wikipedia. Foo DEFINITIONS ::= BEGIN Question ::= SEQUENCE { id INTEGER, question IA5String } Answer ::= SEQUENCE { id INTEGER, answer BOOLEAN } END asn1tools-0.169.0/tests/files/foo.py000066400000000000000000000012451524544274600172320ustar00rootroot00000000000000EXPECTED = {'Foo': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'Answer': {'members': [{'name': 'id', 'type': 'INTEGER'}, {'name': 'answer', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'Question': {'members': [{'name': 'id', 'type': 'INTEGER'}, {'name': 'question', 'type': 'IA5String'}], 'type': 'SEQUENCE'}}, 'values': {}}}asn1tools-0.169.0/tests/files/ieee/000077500000000000000000000000001524544274600170025ustar00rootroot00000000000000asn1tools-0.169.0/tests/files/ieee/ieee1609_2.asn000066400000000000000000000521571524544274600211670ustar00rootroot00000000000000-- B.1.1 1609.2 schema IEEE1609dot2 {iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base (1) schema (1)} -- ****************************************************************************** -- -- IEEE P1609.2 Data Types -- -- ****************************************************************************** DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS ALL; IMPORTS CrlSeries, EccP256CurvePoint, EciesP256EncryptedKey, EncryptionKey, GeographicRegion, GroupLinkageValue, HashAlgorithm, HashedId3, HashedId8, HashedId32, Hostname, IValue, LinkageValue, Opaque, Psid, PsidSsp, PsidSspRange, PublicEncryptionKey, PublicVerificationKey, SequenceOfPsidSsp, SequenceOfPsidSspRange, ServiceSpecificPermissions, Signature, SubjectAssurance, SymmetricEncryptionKey, ThreeDLocation, Time64, Uint3, Uint8, Uint16, Uint32, ValidityPeriod FROM IEEE1609dot2BaseTypes {iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base(1) base-types(2)} ; -- --********************************************************************* -- -- Structures for describing secured data -- --********************************************************************* -- this structure belongs later in the file but putting it here avoids -- compiler errors with certain tools SignedDataPayload ::= SEQUENCE { data Ieee1609Dot2Data OPTIONAL, extDataHash HashedData OPTIONAL, ... } (WITH COMPONENTS {..., data PRESENT} | WITH COMPONENTS {..., extDataHash PRESENT}) Ieee1609Dot2Data ::= SEQUENCE { protocolVersion Uint8(3), content Ieee1609Dot2Content } Ieee1609Dot2Content ::= CHOICE { unsecuredData Opaque, signedData SignedData, encryptedData EncryptedData, signedCertificateRequest Opaque, ... } SignedData ::= SEQUENCE { hashId HashAlgorithm, tbsData ToBeSignedData, signer SignerIdentifier, signature Signature } SignerIdentifier ::= CHOICE { digest HashedId8, certificate SequenceOfCertificate, self NULL, ... } ToBeSignedData ::= SEQUENCE { payload SignedDataPayload, headerInfo HeaderInfo } HashedData::= CHOICE { sha256HashedData OCTET STRING (SIZE(32)), ... } HeaderInfo ::= SEQUENCE { psid Psid, generationTime Time64 OPTIONAL, expiryTime Time64 OPTIONAL, generationLocation ThreeDLocation OPTIONAL, p2pcdLearningRequest HashedId3 OPTIONAL, missingCrlIdentifier MissingCrlIdentifier OPTIONAL, encryptionKey EncryptionKey OPTIONAL, ... } MissingCrlIdentifier ::= SEQUENCE { cracaId HashedId3, crlSeries CrlSeries, ... } Countersignature ::= Ieee1609Dot2Data (WITH COMPONENTS { ..., content (WITH COMPONENTS { ..., signedData (WITH COMPONENTS { ..., tbsData (WITH COMPONENTS { ..., payload (WITH COMPONENTS { ..., data ABSENT, extDataHash PRESENT }), headerInfo (WITH COMPONENTS { ..., generationTime PRESENT, expiryTime ABSENT, generationLocation ABSENT, p2pcdLearningRequest ABSENT, missingCrlIdentifier ABSENT, encryptionKey ABSENT }) }) }) }) }) --********************************************************************** -- -- Structures for describing encrypted data -- --********************************************************************** EncryptedData ::= SEQUENCE { recipients SequenceOfRecipientInfo, ciphertext SymmetricCiphertext } RecipientInfo ::= CHOICE { pskRecipInfo PreSharedKeyRecipientInfo, symmRecipInfo SymmRecipientInfo, certRecipInfo PKRecipientInfo, signedDataRecipInfo PKRecipientInfo, rekRecipInfo PKRecipientInfo } SequenceOfRecipientInfo ::= SEQUENCE OF RecipientInfo PreSharedKeyRecipientInfo ::= HashedId8 SymmRecipientInfo ::= SEQUENCE { recipientId HashedId8, encKey SymmetricCiphertext } PKRecipientInfo ::= SEQUENCE { recipientId HashedId8, encKey EncryptedDataEncryptionKey } EncryptedDataEncryptionKey ::= CHOICE { eciesNistP256 EciesP256EncryptedKey, eciesBrainpoolP256r1 EciesP256EncryptedKey, ... } SymmetricCiphertext ::= CHOICE { aes128ccm AesCcmCiphertext, ... } AesCcmCiphertext ::= SEQUENCE { nonce OCTET STRING (SIZE (12)), ccmCiphertext Opaque -- 16 bytes longer than plaintext } --********************************************************************** -- -- Certificates and other security management data structures -- --********************************************************************** -- Certificates are implicit (type = implicit, toBeSigned includes -- reconstruction value, signature absent) or explicit (type = explicit, -- toBeSigned includes verification key, signature present). Certificate ::= CertificateBase (ImplicitCertificate | ExplicitCertificate) SequenceOfCertificate ::= SEQUENCE OF Certificate CertificateBase ::= SEQUENCE { version Uint8(3), type CertificateType, issuer IssuerIdentifier, toBeSigned ToBeSignedCertificate, signature Signature OPTIONAL } CertificateType ::= ENUMERATED { explicit, implicit, ... } ImplicitCertificate ::= CertificateBase (WITH COMPONENTS { ..., type(implicit), toBeSigned (WITH COMPONENTS { ..., verifyKeyIndicator (WITH COMPONENTS {reconstructionValue}) }), signature ABSENT }) ExplicitCertificate ::= CertificateBase (WITH COMPONENTS { ..., type(explicit), toBeSigned (WITH COMPONENTS { ..., verifyKeyIndicator (WITH COMPONENTS {verificationKey}) }), signature PRESENT }) IssuerIdentifier ::= CHOICE { sha256AndDigest HashedId8, self HashAlgorithm, ... } ToBeSignedCertificate ::= SEQUENCE { id CertificateId, cracaId HashedId3, crlSeries CrlSeries, validityPeriod ValidityPeriod, region GeographicRegion OPTIONAL, assuranceLevel SubjectAssurance OPTIONAL, appPermissions SequenceOfPsidSsp OPTIONAL, certIssuePermissions SequenceOfPsidGroupPermissions OPTIONAL, certRequestPermissions SequenceOfPsidGroupPermissions OPTIONAL, canRequestRollover NULL OPTIONAL, encryptionKey PublicEncryptionKey OPTIONAL, verifyKeyIndicator VerificationKeyIndicator, ... } (WITH COMPONENTS { ..., appPermissions PRESENT } | WITH COMPONENTS { ..., certIssuePermissions PRESENT } | WITH COMPONENTS { ..., certRequestPermissions PRESENT }) CertificateId ::= CHOICE { linkageData LinkageData, name Hostname, binaryId OCTET STRING(SIZE(1..64)), none NULL, ... } LinkageData ::= SEQUENCE { iCert IValue, linkage-value LinkageValue, group-linkage-value GroupLinkageValue OPTIONAL } EndEntityType ::= BIT STRING {app (0), enrol (1) } (SIZE (8)) PsidGroupPermissions ::= SEQUENCE { appPermissions SubjectPermissions, minChainDepth INTEGER DEFAULT 1, -- 0 for enrolment certs chainDepthRange INTEGER DEFAULT 0, -- max depth = min + range eeType EndEntityType DEFAULT {app} } SequenceOfPsidGroupPermissions ::= SEQUENCE OF PsidGroupPermissions SubjectPermissions ::= CHOICE { explicit SequenceOfPsidSspRange, all NULL, ... } VerificationKeyIndicator ::= CHOICE { verificationKey PublicVerificationKey, reconstructionValue EccP256CurvePoint, ... } END -- B.1.2 1609.2 base types IEEE1609dot2BaseTypes {iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base(1) base-types(2)} -- -- ******************************************************************** -- * IEEE P1609.2 Base Data Types -- -- ******************************************************************** DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS ALL; -- ------------------------------------------------------------------ -- -- Integers -- -- ------------------------------------------------------------------ Uint3 ::= INTEGER (0..7) Uint8 ::= INTEGER (0..255) Uint16 ::= INTEGER (0..65535) Uint32 ::= INTEGER (0..4294967295) Uint64 ::= INTEGER (0..18446744073709551615) SequenceOfUint3 ::= SEQUENCE OF Uint3 SequenceOfUint8 ::= SEQUENCE OF Uint8 SequenceOfUint16 ::= SEQUENCE OF Uint16 -- ------------------------------------------------------------------ -- -- OCTET STRING types -- -- ------------------------------------------------------------------ Opaque ::= OCTET STRING HashedId32 ::= OCTET STRING (SIZE(32)) HashedId10 ::= OCTET STRING (SIZE(10)) HashedId8 ::= OCTET STRING (SIZE(8)) HashedId4 ::= OCTET STRING (SIZE(4)) HashedId3 ::= OCTET STRING (SIZE(3)) -- ------------------------------------------------------------------ -- -- Time -- -- ------------------------------------------------------------------ Time32 ::= Uint32 Time64 ::= Uint64 ValidityPeriod ::= SEQUENCE { start Time32, duration Duration } Duration ::= CHOICE { microseconds Uint16, milliseconds Uint16, seconds Uint16, minutes Uint16, hours Uint16, sixtyHours Uint16, years Uint16 } -- ------------------------------------------------------------------ -- -- Location -- -- ------------------------------------------------------------------ GeographicRegion ::= CHOICE { circularRegion CircularRegion, rectangularRegion SequenceOfRectangularRegion, polygonalRegion PolygonalRegion, identifiedRegion SequenceOfIdentifiedRegion, ... } CircularRegion ::= SEQUENCE { center TwoDLocation, radius Uint16 } RectangularRegion ::= SEQUENCE { northWest TwoDLocation, southEast TwoDLocation } SequenceOfRectangularRegion ::= SEQUENCE OF RectangularRegion PolygonalRegion ::= SEQUENCE SIZE(3..MAX) OF TwoDLocation TwoDLocation ::= SEQUENCE { latitude Latitude, longitude Longitude } IdentifiedRegion ::= CHOICE { countryOnly CountryOnly, countryAndRegions CountryAndRegions, countryAndSubregions CountryAndSubregions, ... } SequenceOfIdentifiedRegion ::= SEQUENCE OF IdentifiedRegion CountryOnly ::= Uint16 CountryAndRegions ::= SEQUENCE { countryOnly CountryOnly, regions SequenceOfUint8 } CountryAndSubregions ::= SEQUENCE { country CountryOnly, regionAndSubregions SequenceOfRegionAndSubregions } RegionAndSubregions ::= SEQUENCE { region Uint8, subregions SequenceOfUint16 } SequenceOfRegionAndSubregions ::= SEQUENCE OF RegionAndSubregions ThreeDLocation ::= SEQUENCE { latitude Latitude, longitude Longitude, elevation Elevation } Latitude ::= NinetyDegreeInt Longitude ::= OneEightyDegreeInt Elevation ::= ElevInt NinetyDegreeInt ::= INTEGER { min (-900000000), max (900000000), unknown (900000001) } (-900000000..900000001) KnownLatitude ::= NinetyDegreeInt (min..max) UnknownLatitude ::= NinetyDegreeInt (unknown) -- Minus 90 deg to +90 -- deg in microdegree -- intervals OneEightyDegreeInt ::= INTEGER { min (-1799999999), max (1800000000), unknown (1800000001) } (-1799999999..1800000001) KnownLongitude ::= OneEightyDegreeInt (min..max) UnknownLongitude ::= OneEightyDegreeInt (unknown) ElevInt ::= Uint16 -- Range is from -4096 to 61439 in units of -- one-tenth of ameter -- ------------------------------------------------------------------ -- -- Crypto -- -- ------------------------------------------------------------------ Signature ::= CHOICE { ecdsaNistP256Signature EcdsaP256Signature, ecdsaBrainpoolP256r1Signature EcdsaP256Signature, ... } EcdsaP256Signature ::= SEQUENCE { r EccP256CurvePoint, s OCTET STRING (SIZE (32)) } EccP256CurvePoint ::= CHOICE { x-only OCTET STRING (SIZE (32)), fill NULL, -- consistency with 1363 / X9.62 compressed-y-0 OCTET STRING (SIZE (32)), compressed-y-1 OCTET STRING (SIZE (32)), uncompressed SEQUENCE { x OCTET STRING (SIZE (32)), y OCTET STRING (SIZE (32)) } } SymmAlgorithm ::= ENUMERATED { aes128Ccm, ... } HashAlgorithm ::= ENUMERATED { sha256, ... } EciesP256EncryptedKey ::= SEQUENCE { v EccP256CurvePoint, c OCTET STRING (SIZE (16)), t OCTET STRING (SIZE (16)) } EncryptionKey ::= CHOICE { public PublicEncryptionKey, symmetric SymmetricEncryptionKey } PublicEncryptionKey ::= SEQUENCE { supportedSymmAlg SymmAlgorithm, publicKey BasePublicEncryptionKey } BasePublicEncryptionKey ::= CHOICE { eciesNistP256 EccP256CurvePoint, eciesBrainpoolP256r1 EccP256CurvePoint, ... } PublicVerificationKey ::= CHOICE { ecdsaNistP256 EccP256CurvePoint, ecdsaBrainpoolP256r1 EccP256CurvePoint, ... } SymmetricEncryptionKey ::= CHOICE { aes128Ccm OCTET STRING(SIZE(16)), ... } -- ------------------------------------------------------------------ -- -- PSID / ITS-AID -- -- ------------------------------------------------------------------ PsidSsp ::= SEQUENCE { psid Psid, ssp ServiceSpecificPermissions OPTIONAL } SequenceOfPsidSsp ::= SEQUENCE OF PsidSsp Psid ::= INTEGER (0..MAX) SequenceOfPsid ::= SEQUENCE OF Psid ServiceSpecificPermissions ::= CHOICE { opaque OCTET STRING (SIZE(0..MAX)), ... -- will define Structured SSP here } PsidSspRange ::= SEQUENCE { psid Psid, sspRange SspRange OPTIONAL } SequenceOfPsidSspRange ::= SEQUENCE OF PsidSspRange SspRange ::= CHOICE { opaque SequenceOfOctetString, all NULL, ... -- will define Structured SSP Range here } SequenceOfOctetString ::= SEQUENCE (SIZE (0..MAX)) OF OCTET STRING (SIZE(0..MAX)) -- ------------------------------------------------------------------ -- -- Goes in certs -- -- ------------------------------------------------------------------ SubjectAssurance ::= OCTET STRING (SIZE(1)) CrlSeries ::= Uint16 -- ------------------------------------------------------------------ -- -- Pseudonym Linkage -- -- ------------------------------------------------------------------ IValue ::= Uint16 Hostname ::= UTF8String (SIZE(0..255)) LinkageValue ::= OCTET STRING (SIZE(9)) GroupLinkageValue ::= SEQUENCE { jValue OCTET STRING (SIZE(4)), value OCTET STRING (SIZE(9)) } LaId ::= OCTET STRING (SIZE(2)) LinkageSeed ::= OCTET STRING (SIZE(16)) END -- B.2.1 Certificate revocation list: Base types IEEE1609dot2CrlBaseTypes {iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) crl(3) base-types(2)} DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS ALL; IMPORTS CrlSeries, GeographicRegion, HashedId8, HashedId10, IValue, LaId, LinkageSeed, Opaque, Psid, Signature, Time32, Uint3, Uint8, Uint16, Uint32, ValidityPeriod FROM IEEE1609dot2BaseTypes {iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base(1) base-types(2)} ; -- -- -- CRL contents -- -- CrlContents ::= SEQUENCE { version Uint8 (1), crlSeries CrlSeries, cracaId HashedId8, issueDate Time32, nextCrl Time32, priorityInfo CrlPriorityInfo, typeSpecific CHOICE { fullHashCrl ToBeSignedHashIdCrl, deltaHashCrl ToBeSignedHashIdCrl, fullLinkedCrl ToBeSignedLinkageValueCrl, deltaLinkedCrl ToBeSignedLinkageValueCrl, ... } } CrlPriorityInfo ::= SEQUENCE { priority Uint8 OPTIONAL, ... } ToBeSignedHashIdCrl ::= SEQUENCE { crlSerial Uint32, entries SequenceOfHashBasedRevocationInfo, ... } HashBasedRevocationInfo ::= SEQUENCE { id HashedId10, expiry Time32 } SequenceOfHashBasedRevocationInfo ::= SEQUENCE OF HashBasedRevocationInfo ToBeSignedLinkageValueCrl ::= SEQUENCE { iRev IValue, indexWithinI Uint8, individual SequenceOfJMaxGroup OPTIONAL, groups SequenceOfGroupCrlEntry OPTIONAL, ... } (WITH COMPONENTS {..., individual PRESENT} | WITH COMPONENTS {..., groups PRESENT}) JMaxGroup ::= SEQUENCE { jmax Uint8, contents SEQUENCE OF LAGroup } SequenceOfJMaxGroup ::= SEQUENCE OF JMaxGroup LAGroup ::= SEQUENCE { la1Id LaId, la2Id LaId, contents SequenceOfIMaxGroup } SequenceOfLAGroup ::= SEQUENCE OF LAGroup IMaxGroup ::= SEQUENCE { iMax Uint16, contents SequenceOfIndividualRevocation } SequenceOfIMaxGroup ::= SEQUENCE OF IMaxGroup IndividualRevocation ::= SEQUENCE { linkage-seed1 LinkageSeed, linkage-seed2 LinkageSeed } SequenceOfIndividualRevocation ::= SEQUENCE OF IndividualRevocation GroupCrlEntry ::= SEQUENCE { iMax Uint16, la1Id LaId, linkageSeed1 LinkageSeed, la2Id LaId, linkageSeed2 LinkageSeed } SequenceOfGroupCrlEntry ::= SEQUENCE OF GroupCrlEntry END -- B.2.2 CRL: Security envelope IEEE1609dot2Crl {iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) crl(3) protocol(1)} DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS ALL; IMPORTS Ieee1609Dot2Data FROM IEEE1609dot2 { iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base (1) schema (1) } Psid, Opaque FROM IEEE1609dot2BaseTypes { iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base(1) base-types(2) } CrlContents FROM IEEE1609dot2CrlBaseTypes { iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) crl(3) base-types(2) } ; CrlPsid ::= Psid(135) SecuredCrl ::= Ieee1609Dot2Data (WITH COMPONENTS { ..., content (WITH COMPONENTS { signedData (WITH COMPONENTS { ..., tbsData (WITH COMPONENTS { payload (WITH COMPONENTS { ..., data (WITH COMPONENTS { ..., content (WITH COMPONENTS { unsecuredData (CONTAINING CrlContents) }) }) }), headerInfo (WITH COMPONENTS { ..., psid (CrlPsid), generationTime ABSENT, expiryTime ABSENT, generationLocation ABSENT, p2pcdLearningRequest ABSENT, missingCrlIdentifier ABSENT, encryptionKey ABSENT }) }) }) }) }) END -- B.2.3 CRL: Service Specific Permissions (SSP) IEEE1609dot2CrlSsp {iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) crl(3) service-specific-permissions (3)} DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS ALL; IMPORTS CrlSeries, Uint8 FROM IEEE1609dot2BaseTypes {iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base(1) base-types(2)} ; CrlSsp::= SEQUENCE { version Uint8(1), associatedCraca CracaType, crls PermissibleCrls, ... } CracaType ::= ENUMERATED {isCraca, issuerIsCraca} PermissibleCrls ::= SEQUENCE OF CrlSeries END -- B.3 Peer-to-peer certificate distribution (P2PCD) IEEE1609dot2-Peer2Peer {iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) management (2) peer-to-peer (1)} --********************************************************************** -- -- Data types for Peer-to-peer distribution of IEEE P1609.2 support data -- -- Associated with a two-byte PSID to be assigned. -- When broadcast over WSMP, to be encoded with COER. -- --********************************************************************** DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS ALL; IMPORTS Uint8 FROM IEEE1609dot2BaseTypes {iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base(1) base-types(2)} Certificate FROM IEEE1609dot2 {iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base(1) schema(1)} ; Ieee1609dot2Peer2PeerPDU ::= SEQUENCE { version Uint8(1), content CHOICE { caCerts CaCertP2pPDU, ... } } CaCertP2pPDU::= SEQUENCE OF Certificate END asn1tools-0.169.0/tests/files/ieee/ieee1609_2.py000066400000000000000000002223551524544274600210350ustar00rootroot00000000000000EXPECTED = {'IEEE1609dot2': {'extensibility-implied': False, 'imports': {'IEEE1609dot2BaseTypes': ['CrlSeries', 'EccP256CurvePoint', 'EciesP256EncryptedKey', 'EncryptionKey', 'GeographicRegion', 'GroupLinkageValue', 'HashAlgorithm', 'HashedId3', 'HashedId32', 'HashedId8', 'Hostname', 'IValue', 'LinkageValue', 'Opaque', 'Psid', 'PsidSsp', 'PsidSspRange', 'PublicEncryptionKey', 'PublicVerificationKey', 'SequenceOfPsidSsp', 'SequenceOfPsidSspRange', 'ServiceSpecificPermissions', 'Signature', 'SubjectAssurance', 'SymmetricEncryptionKey', 'ThreeDLocation', 'Time64', 'Uint16', 'Uint3', 'Uint32', 'Uint8', 'ValidityPeriod']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AesCcmCiphertext': {'members': [{'name': 'nonce', 'size': [12], 'type': 'OCTET ' 'STRING'}, {'name': 'ccmCiphertext', 'type': 'Opaque'}], 'type': 'SEQUENCE'}, 'Certificate': {'restricted-to': [{'type': 'ImplicitCertificate'}, {'type': 'ExplicitCertificate'}], 'type': 'CertificateBase'}, 'CertificateBase': {'members': [{'name': 'version', 'restricted-to': [3], 'type': 'Uint8'}, {'name': 'type', 'type': 'CertificateType'}, {'name': 'issuer', 'type': 'IssuerIdentifier'}, {'name': 'toBeSigned', 'type': 'ToBeSignedCertificate'}, {'name': 'signature', 'optional': True, 'type': 'Signature'}], 'type': 'SEQUENCE'}, 'CertificateId': {'members': [{'name': 'linkageData', 'type': 'LinkageData'}, {'name': 'name', 'type': 'Hostname'}, {'name': 'binaryId', 'size': [(1, 64)], 'type': 'OCTET ' 'STRING'}, {'name': 'none', 'type': 'NULL'}, None], 'type': 'CHOICE'}, 'CertificateType': {'type': 'ENUMERATED', 'values': [('explicit', 0), ('implicit', 1), None]}, 'Countersignature': {'type': 'Ieee1609Dot2Data', 'with-components': [None, ('content', {'with-components': [None, ('signedData', {'with-components': [None, ('tbsData', {'with-components': [None, ('payload', {'with-components': [None, ('data', 'ABSENT'), ('extDataHash', 'PRESENT')]}), ('headerInfo', {'with-components': [None, ('generationTime', 'PRESENT'), ('expiryTime', 'ABSENT'), ('generationLocation', 'ABSENT'), ('p2pcdLearningRequest', 'ABSENT'), ('missingCrlIdentifier', 'ABSENT'), ('encryptionKey', 'ABSENT')]})]})]})]})]}, 'EncryptedData': {'members': [{'name': 'recipients', 'type': 'SequenceOfRecipientInfo'}, {'name': 'ciphertext', 'type': 'SymmetricCiphertext'}], 'type': 'SEQUENCE'}, 'EncryptedDataEncryptionKey': {'members': [{'name': 'eciesNistP256', 'type': 'EciesP256EncryptedKey'}, {'name': 'eciesBrainpoolP256r1', 'type': 'EciesP256EncryptedKey'}, None], 'type': 'CHOICE'}, 'EndEntityType': {'named-bits': [('app', '0'), ('enrol', '1')], 'size': [8], 'type': 'BIT STRING'}, 'ExplicitCertificate': {'type': 'CertificateBase', 'with-components': [None, ('type', 'explicit'), ('toBeSigned', {'with-components': [None, ('verifyKeyIndicator', {'with-components': [['verificationKey']]})]}), ('signature', 'PRESENT')]}, 'HashedData': {'members': [{'name': 'sha256HashedData', 'size': [32], 'type': 'OCTET STRING'}, None], 'type': 'CHOICE'}, 'HeaderInfo': {'members': [{'name': 'psid', 'type': 'Psid'}, {'name': 'generationTime', 'optional': True, 'type': 'Time64'}, {'name': 'expiryTime', 'optional': True, 'type': 'Time64'}, {'name': 'generationLocation', 'optional': True, 'type': 'ThreeDLocation'}, {'name': 'p2pcdLearningRequest', 'optional': True, 'type': 'HashedId3'}, {'name': 'missingCrlIdentifier', 'optional': True, 'type': 'MissingCrlIdentifier'}, {'name': 'encryptionKey', 'optional': True, 'type': 'EncryptionKey'}, None], 'type': 'SEQUENCE'}, 'Ieee1609Dot2Content': {'members': [{'name': 'unsecuredData', 'type': 'Opaque'}, {'name': 'signedData', 'type': 'SignedData'}, {'name': 'encryptedData', 'type': 'EncryptedData'}, {'name': 'signedCertificateRequest', 'type': 'Opaque'}, None], 'type': 'CHOICE'}, 'Ieee1609Dot2Data': {'members': [{'name': 'protocolVersion', 'restricted-to': [3], 'type': 'Uint8'}, {'name': 'content', 'type': 'Ieee1609Dot2Content'}], 'type': 'SEQUENCE'}, 'ImplicitCertificate': {'type': 'CertificateBase', 'with-components': [None, ('type', 'implicit'), ('toBeSigned', {'with-components': [None, ('verifyKeyIndicator', {'with-components': [['reconstructionValue']]})]}), ('signature', 'ABSENT')]}, 'IssuerIdentifier': {'members': [{'name': 'sha256AndDigest', 'type': 'HashedId8'}, {'name': 'self', 'type': 'HashAlgorithm'}, None], 'type': 'CHOICE'}, 'LinkageData': {'members': [{'name': 'iCert', 'type': 'IValue'}, {'name': 'linkage-value', 'type': 'LinkageValue'}, {'name': 'group-linkage-value', 'optional': True, 'type': 'GroupLinkageValue'}], 'type': 'SEQUENCE'}, 'MissingCrlIdentifier': {'members': [{'name': 'cracaId', 'type': 'HashedId3'}, {'name': 'crlSeries', 'type': 'CrlSeries'}, None], 'type': 'SEQUENCE'}, 'PKRecipientInfo': {'members': [{'name': 'recipientId', 'type': 'HashedId8'}, {'name': 'encKey', 'type': 'EncryptedDataEncryptionKey'}], 'type': 'SEQUENCE'}, 'PreSharedKeyRecipientInfo': {'type': 'HashedId8'}, 'PsidGroupPermissions': {'members': [{'name': 'appPermissions', 'type': 'SubjectPermissions'}, {'default': 1, 'name': 'minChainDepth', 'type': 'INTEGER'}, {'default': 0, 'name': 'chainDepthRange', 'type': 'INTEGER'}, {'default': ['app'], 'name': 'eeType', 'type': 'EndEntityType'}], 'type': 'SEQUENCE'}, 'RecipientInfo': {'members': [{'name': 'pskRecipInfo', 'type': 'PreSharedKeyRecipientInfo'}, {'name': 'symmRecipInfo', 'type': 'SymmRecipientInfo'}, {'name': 'certRecipInfo', 'type': 'PKRecipientInfo'}, {'name': 'signedDataRecipInfo', 'type': 'PKRecipientInfo'}, {'name': 'rekRecipInfo', 'type': 'PKRecipientInfo'}], 'type': 'CHOICE'}, 'SequenceOfCertificate': {'element': {'type': 'Certificate'}, 'type': 'SEQUENCE OF'}, 'SequenceOfPsidGroupPermissions': {'element': {'type': 'PsidGroupPermissions'}, 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfRecipientInfo': {'element': {'type': 'RecipientInfo'}, 'type': 'SEQUENCE OF'}, 'SignedData': {'members': [{'name': 'hashId', 'type': 'HashAlgorithm'}, {'name': 'tbsData', 'type': 'ToBeSignedData'}, {'name': 'signer', 'type': 'SignerIdentifier'}, {'name': 'signature', 'type': 'Signature'}], 'type': 'SEQUENCE'}, 'SignedDataPayload': {'members': [{'name': 'data', 'optional': True, 'type': 'Ieee1609Dot2Data'}, {'name': 'extDataHash', 'optional': True, 'type': 'HashedData'}, None], 'type': 'SEQUENCE', 'with-components': [None, ('extDataHash', 'PRESENT')]}, 'SignerIdentifier': {'members': [{'name': 'digest', 'type': 'HashedId8'}, {'name': 'certificate', 'type': 'SequenceOfCertificate'}, {'name': 'self', 'type': 'NULL'}, None], 'type': 'CHOICE'}, 'SubjectPermissions': {'members': [{'name': 'explicit', 'type': 'SequenceOfPsidSspRange'}, {'name': 'all', 'type': 'NULL'}, None], 'type': 'CHOICE'}, 'SymmRecipientInfo': {'members': [{'name': 'recipientId', 'type': 'HashedId8'}, {'name': 'encKey', 'type': 'SymmetricCiphertext'}], 'type': 'SEQUENCE'}, 'SymmetricCiphertext': {'members': [{'name': 'aes128ccm', 'type': 'AesCcmCiphertext'}, None], 'type': 'CHOICE'}, 'ToBeSignedCertificate': {'members': [{'name': 'id', 'type': 'CertificateId'}, {'name': 'cracaId', 'type': 'HashedId3'}, {'name': 'crlSeries', 'type': 'CrlSeries'}, {'name': 'validityPeriod', 'type': 'ValidityPeriod'}, {'name': 'region', 'optional': True, 'type': 'GeographicRegion'}, {'name': 'assuranceLevel', 'optional': True, 'type': 'SubjectAssurance'}, {'name': 'appPermissions', 'optional': True, 'type': 'SequenceOfPsidSsp'}, {'name': 'certIssuePermissions', 'optional': True, 'type': 'SequenceOfPsidGroupPermissions'}, {'name': 'certRequestPermissions', 'optional': True, 'type': 'SequenceOfPsidGroupPermissions'}, {'name': 'canRequestRollover', 'optional': True, 'type': 'NULL'}, {'name': 'encryptionKey', 'optional': True, 'type': 'PublicEncryptionKey'}, {'name': 'verifyKeyIndicator', 'type': 'VerificationKeyIndicator'}, None], 'type': 'SEQUENCE', 'with-components': [None, ('certRequestPermissions', 'PRESENT')]}, 'ToBeSignedData': {'members': [{'name': 'payload', 'type': 'SignedDataPayload'}, {'name': 'headerInfo', 'type': 'HeaderInfo'}], 'type': 'SEQUENCE'}, 'VerificationKeyIndicator': {'members': [{'name': 'verificationKey', 'type': 'PublicVerificationKey'}, {'name': 'reconstructionValue', 'type': 'EccP256CurvePoint'}, None], 'type': 'CHOICE'}}, 'values': {}}, 'IEEE1609dot2-Peer2Peer': {'extensibility-implied': False, 'imports': {'IEEE1609dot2': ['Certificate'], 'IEEE1609dot2BaseTypes': ['Uint8']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'CaCertP2pPDU': {'element': {'type': 'Certificate'}, 'type': 'SEQUENCE OF'}, 'Ieee1609dot2Peer2PeerPDU': {'members': [{'name': 'version', 'restricted-to': [1], 'type': 'Uint8'}, {'members': [{'name': 'caCerts', 'type': 'CaCertP2pPDU'}, None], 'name': 'content', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}}, 'values': {}}, 'IEEE1609dot2BaseTypes': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'BasePublicEncryptionKey': {'members': [{'name': 'eciesNistP256', 'type': 'EccP256CurvePoint'}, {'name': 'eciesBrainpoolP256r1', 'type': 'EccP256CurvePoint'}, None], 'type': 'CHOICE'}, 'CircularRegion': {'members': [{'name': 'center', 'type': 'TwoDLocation'}, {'name': 'radius', 'type': 'Uint16'}], 'type': 'SEQUENCE'}, 'CountryAndRegions': {'members': [{'name': 'countryOnly', 'type': 'CountryOnly'}, {'name': 'regions', 'type': 'SequenceOfUint8'}], 'type': 'SEQUENCE'}, 'CountryAndSubregions': {'members': [{'name': 'country', 'type': 'CountryOnly'}, {'name': 'regionAndSubregions', 'type': 'SequenceOfRegionAndSubregions'}], 'type': 'SEQUENCE'}, 'CountryOnly': {'type': 'Uint16'}, 'CrlSeries': {'type': 'Uint16'}, 'Duration': {'members': [{'name': 'microseconds', 'type': 'Uint16'}, {'name': 'milliseconds', 'type': 'Uint16'}, {'name': 'seconds', 'type': 'Uint16'}, {'name': 'minutes', 'type': 'Uint16'}, {'name': 'hours', 'type': 'Uint16'}, {'name': 'sixtyHours', 'type': 'Uint16'}, {'name': 'years', 'type': 'Uint16'}], 'type': 'CHOICE'}, 'EccP256CurvePoint': {'members': [{'name': 'x-only', 'size': [32], 'type': 'OCTET ' 'STRING'}, {'name': 'fill', 'type': 'NULL'}, {'name': 'compressed-y-0', 'size': [32], 'type': 'OCTET ' 'STRING'}, {'name': 'compressed-y-1', 'size': [32], 'type': 'OCTET ' 'STRING'}, {'members': [{'name': 'x', 'size': [32], 'type': 'OCTET ' 'STRING'}, {'name': 'y', 'size': [32], 'type': 'OCTET ' 'STRING'}], 'name': 'uncompressed', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'EcdsaP256Signature': {'members': [{'name': 'r', 'type': 'EccP256CurvePoint'}, {'name': 's', 'size': [32], 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'EciesP256EncryptedKey': {'members': [{'name': 'v', 'type': 'EccP256CurvePoint'}, {'name': 'c', 'size': [16], 'type': 'OCTET ' 'STRING'}, {'name': 't', 'size': [16], 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'ElevInt': {'type': 'Uint16'}, 'Elevation': {'type': 'ElevInt'}, 'EncryptionKey': {'members': [{'name': 'public', 'type': 'PublicEncryptionKey'}, {'name': 'symmetric', 'type': 'SymmetricEncryptionKey'}], 'type': 'CHOICE'}, 'GeographicRegion': {'members': [{'name': 'circularRegion', 'type': 'CircularRegion'}, {'name': 'rectangularRegion', 'type': 'SequenceOfRectangularRegion'}, {'name': 'polygonalRegion', 'type': 'PolygonalRegion'}, {'name': 'identifiedRegion', 'type': 'SequenceOfIdentifiedRegion'}, None], 'type': 'CHOICE'}, 'GroupLinkageValue': {'members': [{'name': 'jValue', 'size': [4], 'type': 'OCTET ' 'STRING'}, {'name': 'value', 'size': [9], 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'HashAlgorithm': {'type': 'ENUMERATED', 'values': [('sha256', 0), None]}, 'HashedId10': {'size': [10], 'type': 'OCTET STRING'}, 'HashedId3': {'size': [3], 'type': 'OCTET STRING'}, 'HashedId32': {'size': [32], 'type': 'OCTET STRING'}, 'HashedId4': {'size': [4], 'type': 'OCTET STRING'}, 'HashedId8': {'size': [8], 'type': 'OCTET STRING'}, 'Hostname': {'size': [(0, 255)], 'type': 'UTF8String'}, 'IValue': {'type': 'Uint16'}, 'IdentifiedRegion': {'members': [{'name': 'countryOnly', 'type': 'CountryOnly'}, {'name': 'countryAndRegions', 'type': 'CountryAndRegions'}, {'name': 'countryAndSubregions', 'type': 'CountryAndSubregions'}, None], 'type': 'CHOICE'}, 'KnownLatitude': {'restricted-to': [('min', 'max')], 'type': 'NinetyDegreeInt'}, 'KnownLongitude': {'restricted-to': [('min', 'max')], 'type': 'OneEightyDegreeInt'}, 'LaId': {'size': [2], 'type': 'OCTET STRING'}, 'Latitude': {'type': 'NinetyDegreeInt'}, 'LinkageSeed': {'size': [16], 'type': 'OCTET STRING'}, 'LinkageValue': {'size': [9], 'type': 'OCTET STRING'}, 'Longitude': {'type': 'OneEightyDegreeInt'}, 'NinetyDegreeInt': {'named-numbers': {'max': 900000000, 'min': -900000000, 'unknown': 900000001}, 'restricted-to': [(-900000000, 900000001)], 'type': 'INTEGER'}, 'OneEightyDegreeInt': {'named-numbers': {'max': 1800000000, 'min': -1799999999, 'unknown': 1800000001}, 'restricted-to': [(-1799999999, 1800000001)], 'type': 'INTEGER'}, 'Opaque': {'type': 'OCTET STRING'}, 'PolygonalRegion': {'element': {'type': 'TwoDLocation'}, 'size': [(3, 'MAX')], 'type': 'SEQUENCE OF'}, 'Psid': {'restricted-to': [(0, 'MAX')], 'type': 'INTEGER'}, 'PsidSsp': {'members': [{'name': 'psid', 'type': 'Psid'}, {'name': 'ssp', 'optional': True, 'type': 'ServiceSpecificPermissions'}], 'type': 'SEQUENCE'}, 'PsidSspRange': {'members': [{'name': 'psid', 'type': 'Psid'}, {'name': 'sspRange', 'optional': True, 'type': 'SspRange'}], 'type': 'SEQUENCE'}, 'PublicEncryptionKey': {'members': [{'name': 'supportedSymmAlg', 'type': 'SymmAlgorithm'}, {'name': 'publicKey', 'type': 'BasePublicEncryptionKey'}], 'type': 'SEQUENCE'}, 'PublicVerificationKey': {'members': [{'name': 'ecdsaNistP256', 'type': 'EccP256CurvePoint'}, {'name': 'ecdsaBrainpoolP256r1', 'type': 'EccP256CurvePoint'}, None], 'type': 'CHOICE'}, 'RectangularRegion': {'members': [{'name': 'northWest', 'type': 'TwoDLocation'}, {'name': 'southEast', 'type': 'TwoDLocation'}], 'type': 'SEQUENCE'}, 'RegionAndSubregions': {'members': [{'name': 'region', 'type': 'Uint8'}, {'name': 'subregions', 'type': 'SequenceOfUint16'}], 'type': 'SEQUENCE'}, 'SequenceOfIdentifiedRegion': {'element': {'type': 'IdentifiedRegion'}, 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfOctetString': {'element': {'size': [(0, 'MAX')], 'type': 'OCTET ' 'STRING'}, 'size': [(0, 'MAX')], 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfPsid': {'element': {'type': 'Psid'}, 'type': 'SEQUENCE OF'}, 'SequenceOfPsidSsp': {'element': {'type': 'PsidSsp'}, 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfPsidSspRange': {'element': {'type': 'PsidSspRange'}, 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfRectangularRegion': {'element': {'type': 'RectangularRegion'}, 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfRegionAndSubregions': {'element': {'type': 'RegionAndSubregions'}, 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfUint16': {'element': {'type': 'Uint16'}, 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfUint3': {'element': {'type': 'Uint3'}, 'type': 'SEQUENCE OF'}, 'SequenceOfUint8': {'element': {'type': 'Uint8'}, 'type': 'SEQUENCE OF'}, 'ServiceSpecificPermissions': {'members': [{'name': 'opaque', 'size': [(0, 'MAX')], 'type': 'OCTET ' 'STRING'}, None], 'type': 'CHOICE'}, 'Signature': {'members': [{'name': 'ecdsaNistP256Signature', 'type': 'EcdsaP256Signature'}, {'name': 'ecdsaBrainpoolP256r1Signature', 'type': 'EcdsaP256Signature'}, None], 'type': 'CHOICE'}, 'SspRange': {'members': [{'name': 'opaque', 'type': 'SequenceOfOctetString'}, {'name': 'all', 'type': 'NULL'}, None], 'type': 'CHOICE'}, 'SubjectAssurance': {'size': [1], 'type': 'OCTET ' 'STRING'}, 'SymmAlgorithm': {'type': 'ENUMERATED', 'values': [('aes128Ccm', 0), None]}, 'SymmetricEncryptionKey': {'members': [{'name': 'aes128Ccm', 'size': [16], 'type': 'OCTET ' 'STRING'}, None], 'type': 'CHOICE'}, 'ThreeDLocation': {'members': [{'name': 'latitude', 'type': 'Latitude'}, {'name': 'longitude', 'type': 'Longitude'}, {'name': 'elevation', 'type': 'Elevation'}], 'type': 'SEQUENCE'}, 'Time32': {'type': 'Uint32'}, 'Time64': {'type': 'Uint64'}, 'TwoDLocation': {'members': [{'name': 'latitude', 'type': 'Latitude'}, {'name': 'longitude', 'type': 'Longitude'}], 'type': 'SEQUENCE'}, 'Uint16': {'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, 'Uint3': {'restricted-to': [(0, 7)], 'type': 'INTEGER'}, 'Uint32': {'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}, 'Uint64': {'restricted-to': [(0, 18446744073709551615)], 'type': 'INTEGER'}, 'Uint8': {'restricted-to': [(0, 255)], 'type': 'INTEGER'}, 'UnknownLatitude': {'restricted-to': ['unknown'], 'type': 'NinetyDegreeInt'}, 'UnknownLongitude': {'restricted-to': ['unknown'], 'type': 'OneEightyDegreeInt'}, 'ValidityPeriod': {'members': [{'name': 'start', 'type': 'Time32'}, {'name': 'duration', 'type': 'Duration'}], 'type': 'SEQUENCE'}}, 'values': {}}, 'IEEE1609dot2Crl': {'extensibility-implied': False, 'imports': {'IEEE1609dot2': ['Ieee1609Dot2Data'], 'IEEE1609dot2BaseTypes': ['Opaque', 'Psid'], 'IEEE1609dot2CrlBaseTypes': ['CrlContents']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'CrlPsid': {'restricted-to': [135], 'type': 'Psid'}, 'SecuredCrl': {'type': 'Ieee1609Dot2Data', 'with-components': [None, ('content', {'with-components': [('signedData', {'with-components': [None, ('tbsData', {'with-components': [('payload', {'with-components': [None, ('data', {'with-components': [None, ('content', {'with-components': [['unsecuredData', 'CONTAINING', [{'type': 'CrlContents'}, []]]]})]})]}), ('headerInfo', {'with-components': [None, ('psid', {'type': 'CrlPsid'}), ('generationTime', 'ABSENT'), ('expiryTime', 'ABSENT'), ('generationLocation', 'ABSENT'), ('p2pcdLearningRequest', 'ABSENT'), ('missingCrlIdentifier', 'ABSENT'), ('encryptionKey', 'ABSENT')]})]})]})]})]}}, 'values': {}}, 'IEEE1609dot2CrlBaseTypes': {'extensibility-implied': False, 'imports': {'IEEE1609dot2BaseTypes': ['CrlSeries', 'GeographicRegion', 'HashedId10', 'HashedId8', 'IValue', 'LaId', 'LinkageSeed', 'Opaque', 'Psid', 'Signature', 'Time32', 'Uint16', 'Uint3', 'Uint32', 'Uint8', 'ValidityPeriod']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'CrlContents': {'members': [{'name': 'version', 'restricted-to': [1], 'type': 'Uint8'}, {'name': 'crlSeries', 'type': 'CrlSeries'}, {'name': 'cracaId', 'type': 'HashedId8'}, {'name': 'issueDate', 'type': 'Time32'}, {'name': 'nextCrl', 'type': 'Time32'}, {'name': 'priorityInfo', 'type': 'CrlPriorityInfo'}, {'members': [{'name': 'fullHashCrl', 'type': 'ToBeSignedHashIdCrl'}, {'name': 'deltaHashCrl', 'type': 'ToBeSignedHashIdCrl'}, {'name': 'fullLinkedCrl', 'type': 'ToBeSignedLinkageValueCrl'}, {'name': 'deltaLinkedCrl', 'type': 'ToBeSignedLinkageValueCrl'}, None], 'name': 'typeSpecific', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CrlPriorityInfo': {'members': [{'name': 'priority', 'optional': True, 'type': 'Uint8'}, None], 'type': 'SEQUENCE'}, 'GroupCrlEntry': {'members': [{'name': 'iMax', 'type': 'Uint16'}, {'name': 'la1Id', 'type': 'LaId'}, {'name': 'linkageSeed1', 'type': 'LinkageSeed'}, {'name': 'la2Id', 'type': 'LaId'}, {'name': 'linkageSeed2', 'type': 'LinkageSeed'}], 'type': 'SEQUENCE'}, 'HashBasedRevocationInfo': {'members': [{'name': 'id', 'type': 'HashedId10'}, {'name': 'expiry', 'type': 'Time32'}], 'type': 'SEQUENCE'}, 'IMaxGroup': {'members': [{'name': 'iMax', 'type': 'Uint16'}, {'name': 'contents', 'type': 'SequenceOfIndividualRevocation'}], 'type': 'SEQUENCE'}, 'IndividualRevocation': {'members': [{'name': 'linkage-seed1', 'type': 'LinkageSeed'}, {'name': 'linkage-seed2', 'type': 'LinkageSeed'}], 'type': 'SEQUENCE'}, 'JMaxGroup': {'members': [{'name': 'jmax', 'type': 'Uint8'}, {'element': {'type': 'LAGroup'}, 'name': 'contents', 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'LAGroup': {'members': [{'name': 'la1Id', 'type': 'LaId'}, {'name': 'la2Id', 'type': 'LaId'}, {'name': 'contents', 'type': 'SequenceOfIMaxGroup'}], 'type': 'SEQUENCE'}, 'SequenceOfGroupCrlEntry': {'element': {'type': 'GroupCrlEntry'}, 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfHashBasedRevocationInfo': {'element': {'type': 'HashBasedRevocationInfo'}, 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfIMaxGroup': {'element': {'type': 'IMaxGroup'}, 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfIndividualRevocation': {'element': {'type': 'IndividualRevocation'}, 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfJMaxGroup': {'element': {'type': 'JMaxGroup'}, 'type': 'SEQUENCE ' 'OF'}, 'SequenceOfLAGroup': {'element': {'type': 'LAGroup'}, 'type': 'SEQUENCE ' 'OF'}, 'ToBeSignedHashIdCrl': {'members': [{'name': 'crlSerial', 'type': 'Uint32'}, {'name': 'entries', 'type': 'SequenceOfHashBasedRevocationInfo'}, None], 'type': 'SEQUENCE'}, 'ToBeSignedLinkageValueCrl': {'members': [{'name': 'iRev', 'type': 'IValue'}, {'name': 'indexWithinI', 'type': 'Uint8'}, {'name': 'individual', 'optional': True, 'type': 'SequenceOfJMaxGroup'}, {'name': 'groups', 'optional': True, 'type': 'SequenceOfGroupCrlEntry'}, None], 'type': 'SEQUENCE', 'with-components': [None, ('groups', 'PRESENT')]}}, 'values': {}}, 'IEEE1609dot2CrlSsp': {'extensibility-implied': False, 'imports': {'IEEE1609dot2BaseTypes': ['CrlSeries', 'Uint8']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'CracaType': {'type': 'ENUMERATED', 'values': [('isCraca', 0), ('issuerIsCraca', 1)]}, 'CrlSsp': {'members': [{'name': 'version', 'restricted-to': [1], 'type': 'Uint8'}, {'name': 'associatedCraca', 'type': 'CracaType'}, {'name': 'crls', 'type': 'PermissibleCrls'}, None], 'type': 'SEQUENCE'}, 'PermissibleCrls': {'element': {'type': 'CrlSeries'}, 'type': 'SEQUENCE OF'}}, 'values': {}}}asn1tools-0.169.0/tests/files/ietf/000077500000000000000000000000001524544274600170225ustar00rootroot00000000000000asn1tools-0.169.0/tests/files/ietf/rfc1155.asn000066400000000000000000000061441524544274600206200ustar00rootroot00000000000000RFC1155-SMI DEFINITIONS ::= BEGIN EXPORTS -- EVERYTHING internet, directory, mgmt, experimental, private, enterprises, -- OBJECT-TYPE, ToDo ObjectName, ObjectSyntax, SimpleSyntax, ApplicationSyntax, NetworkAddress, IpAddress, Counter, Gauge, TimeTicks, Opaque; -- the path to the root internet OBJECT IDENTIFIER ::= { iso org(3) dod(6) 1 } directory OBJECT IDENTIFIER ::= { internet 1 } mgmt OBJECT IDENTIFIER ::= { internet 2 } experimental OBJECT IDENTIFIER ::= { internet 3 } private OBJECT IDENTIFIER ::= { internet 4 } enterprises OBJECT IDENTIFIER ::= { private 1 } -- definition of object types -- ToDo: Add support? This syntax was deprecated 1994. -- -- OBJECT-TYPE MACRO ::= -- BEGIN -- TYPE NOTATION ::= "SYNTAX" type (TYPE ObjectSyntax) -- "ACCESS" Access -- "STATUS" Status -- VALUE NOTATION ::= value (VALUE ObjectName) -- -- Access ::= "read-only" -- | "read-write" -- | "write-only" -- | "not-accessible" -- Status ::= "mandatory" -- | "optional" -- | "obsolete" -- END -- names of objects in the MIB ObjectName ::= OBJECT IDENTIFIER -- syntax of objects in the MIB ObjectSyntax ::= CHOICE { simple SimpleSyntax, -- note that simple SEQUENCEs are not directly -- mentioned here to keep things simple (i.e., -- prevent mis-use). However, application-wide -- types which are IMPLICITly encoded simple -- SEQUENCEs may appear in the following CHOICE application-wide ApplicationSyntax } SimpleSyntax ::= CHOICE { number INTEGER, string OCTET STRING, object OBJECT IDENTIFIER, empty NULL } ApplicationSyntax ::= CHOICE { address NetworkAddress, counter Counter, gauge Gauge, ticks TimeTicks, arbitrary Opaque -- other application-wide types, as they are -- defined, will be added here } -- application-wide types NetworkAddress ::= CHOICE { internet IpAddress } IpAddress ::= [APPLICATION 0] -- in network-byte order IMPLICIT OCTET STRING (SIZE (4)) Counter ::= [APPLICATION 1] IMPLICIT INTEGER (0..4294967295) Gauge ::= [APPLICATION 2] IMPLICIT INTEGER (0..4294967295) TimeTicks ::= [APPLICATION 3] IMPLICIT INTEGER (0..4294967295) Opaque ::= [APPLICATION 4] -- arbitrary ASN.1 value, IMPLICIT OCTET STRING -- "double-wrapped" END asn1tools-0.169.0/tests/files/ietf/rfc1155.py000066400000000000000000000120431524544274600204620ustar00rootroot00000000000000EXPECTED = {'RFC1155-SMI': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'ApplicationSyntax': {'members': [{'name': 'address', 'type': 'NetworkAddress'}, {'name': 'counter', 'type': 'Counter'}, {'name': 'gauge', 'type': 'Gauge'}, {'name': 'ticks', 'type': 'TimeTicks'}, {'name': 'arbitrary', 'type': 'Opaque'}], 'type': 'CHOICE'}, 'Counter': {'restricted-to': [(0, 4294967295)], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 1}, 'type': 'INTEGER'}, 'Gauge': {'restricted-to': [(0, 4294967295)], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 2}, 'type': 'INTEGER'}, 'IpAddress': {'size': [4], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 0}, 'type': 'OCTET STRING'}, 'NetworkAddress': {'members': [{'name': 'internet', 'type': 'IpAddress'}], 'type': 'CHOICE'}, 'ObjectName': {'type': 'OBJECT IDENTIFIER'}, 'ObjectSyntax': {'members': [{'name': 'simple', 'type': 'SimpleSyntax'}, {'name': 'application-wide', 'type': 'ApplicationSyntax'}], 'type': 'CHOICE'}, 'Opaque': {'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 4}, 'type': 'OCTET STRING'}, 'SimpleSyntax': {'members': [{'name': 'number', 'type': 'INTEGER'}, {'name': 'string', 'type': 'OCTET ' 'STRING'}, {'name': 'object', 'type': 'OBJECT ' 'IDENTIFIER'}, {'name': 'empty', 'type': 'NULL'}], 'type': 'CHOICE'}, 'TimeTicks': {'restricted-to': [(0, 4294967295)], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 3}, 'type': 'INTEGER'}}, 'values': {'directory': {'type': 'OBJECT IDENTIFIER', 'value': ['internet', 1]}, 'enterprises': {'type': 'OBJECT IDENTIFIER', 'value': ['private', 1]}, 'experimental': {'type': 'OBJECT IDENTIFIER', 'value': ['internet', 3]}, 'internet': {'type': 'OBJECT IDENTIFIER', 'value': ['iso', ('org', 3), ('dod', 6), 1]}, 'mgmt': {'type': 'OBJECT IDENTIFIER', 'value': ['internet', 2]}, 'private': {'type': 'OBJECT IDENTIFIER', 'value': ['internet', 4]}}}}asn1tools-0.169.0/tests/files/ietf/rfc1157.asn000066400000000000000000000070031524544274600206150ustar00rootroot00000000000000RFC1157-SNMP DEFINITIONS ::= BEGIN IMPORTS ObjectName, ObjectSyntax, NetworkAddress, IpAddress, TimeTicks FROM RFC1155-SMI; -- top-level message Message ::= SEQUENCE { version -- version-1 for this RFC INTEGER { version-1(0) }, community -- community name OCTET STRING, data -- e.g., PDUs if trivial -- ToDo: Originally ANY instead of PDUs. PDUs -- authentication is being used } -- protocol data units PDUs ::= CHOICE { get-request GetRequest-PDU, get-next-request GetNextRequest-PDU, get-response GetResponse-PDU, set-request SetRequest-PDU, trap Trap-PDU } -- PDUs GetRequest-PDU ::= [0] IMPLICIT PDU GetNextRequest-PDU ::= [1] IMPLICIT PDU GetResponse-PDU ::= [2] IMPLICIT PDU SetRequest-PDU ::= [3] IMPLICIT PDU PDU ::= SEQUENCE { request-id INTEGER, error-status -- sometimes ignored INTEGER { noError(0), tooBig(1), noSuchName(2), badValue(3), readOnly(4), genErr(5) }, error-index -- sometimes ignored INTEGER, variable-bindings -- values are sometimes ignored VarBindList } Trap-PDU ::= [4] IMPLICIT SEQUENCE { enterprise -- type of object generating -- trap, see sysObjectID in [5] OBJECT IDENTIFIER, agent-addr -- address of object generating NetworkAddress, -- trap generic-trap -- generic trap type INTEGER { coldStart(0), warmStart(1), linkDown(2), linkUp(3), authenticationFailure(4), egpNeighborLoss(5), enterpriseSpecific(6) }, specific-trap -- specific code, present even INTEGER, -- if generic-trap is not -- enterpriseSpecific time-stamp -- time elapsed between the last TimeTicks, -- (re)initialization of the network -- entity and the generation of the trap variable-bindings -- "interesting" information VarBindList } -- variable bindings VarBind ::= SEQUENCE { name ObjectName, value ObjectSyntax } VarBindList ::= SEQUENCE OF VarBind END asn1tools-0.169.0/tests/files/ietf/rfc1157.py000066400000000000000000000140271524544274600204700ustar00rootroot00000000000000EXPECTED = {'RFC1157-SNMP': {'extensibility-implied': False, 'imports': {'RFC1155-SMI': ['IpAddress', 'NetworkAddress', 'ObjectName', 'ObjectSyntax', 'TimeTicks']}, 'object-classes': {}, 'object-sets': {}, 'types': {'GetNextRequest-PDU': {'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'PDU'}, 'GetRequest-PDU': {'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'PDU'}, 'GetResponse-PDU': {'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'PDU'}, 'Message': {'members': [{'name': 'version', 'named-numbers': {'version-1': 0}, 'type': 'INTEGER'}, {'name': 'community', 'type': 'OCTET STRING'}, {'name': 'data', 'type': 'PDUs'}], 'type': 'SEQUENCE'}, 'PDU': {'members': [{'name': 'request-id', 'type': 'INTEGER'}, {'name': 'error-status', 'named-numbers': {'badValue': 3, 'genErr': 5, 'noError': 0, 'noSuchName': 2, 'readOnly': 4, 'tooBig': 1}, 'type': 'INTEGER'}, {'name': 'error-index', 'type': 'INTEGER'}, {'name': 'variable-bindings', 'type': 'VarBindList'}], 'type': 'SEQUENCE'}, 'PDUs': {'members': [{'name': 'get-request', 'type': 'GetRequest-PDU'}, {'name': 'get-next-request', 'type': 'GetNextRequest-PDU'}, {'name': 'get-response', 'type': 'GetResponse-PDU'}, {'name': 'set-request', 'type': 'SetRequest-PDU'}, {'name': 'trap', 'type': 'Trap-PDU'}], 'type': 'CHOICE'}, 'SetRequest-PDU': {'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'PDU'}, 'Trap-PDU': {'members': [{'name': 'enterprise', 'type': 'OBJECT ' 'IDENTIFIER'}, {'name': 'agent-addr', 'type': 'NetworkAddress'}, {'name': 'generic-trap', 'named-numbers': {'authenticationFailure': 4, 'coldStart': 0, 'egpNeighborLoss': 5, 'enterpriseSpecific': 6, 'linkDown': 2, 'linkUp': 3, 'warmStart': 1}, 'type': 'INTEGER'}, {'name': 'specific-trap', 'type': 'INTEGER'}, {'name': 'time-stamp', 'type': 'TimeTicks'}, {'name': 'variable-bindings', 'type': 'VarBindList'}], 'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'SEQUENCE'}, 'VarBind': {'members': [{'name': 'name', 'type': 'ObjectName'}, {'name': 'value', 'type': 'ObjectSyntax'}], 'type': 'SEQUENCE'}, 'VarBindList': {'element': {'type': 'VarBind'}, 'type': 'SEQUENCE OF'}}, 'values': {}}}asn1tools-0.169.0/tests/files/ietf/rfc2986.asn000066400000000000000000000034001524544274600206250ustar00rootroot00000000000000PKCS-10 {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-10(10) modules(1) pkcs-10(1)} DEFINITIONS IMPLICIT TAGS ::= BEGIN -- EXPORTS All -- -- All types and values defined in this module are exported for use -- in other ASN.1 modules. IMPORTS informationFramework, authenticationFramework FROM UsefulDefinitions {joint-iso-itu-t(2) ds(5) module(1) usefulDefinitions(0) 3} ATTRIBUTE, Name FROM InformationFramework informationFramework ALGORITHM FROM AuthenticationFramework authenticationFramework; -- Certificate requests CertificationRequestInfo ::= SEQUENCE { version INTEGER { v1(0) } (v1,...), subject Name, subjectPKInfo SubjectPublicKeyInfo{{ PKInfoAlgorithms }}, attributes [0] Attributes{{ CRIAttributes }} } SubjectPublicKeyInfo {ALGORITHM: IOSet} ::= SEQUENCE { algorithm AlgorithmIdentifier {{IOSet}}, subjectPublicKey BIT STRING } PKInfoAlgorithms ALGORITHM ::= { ... -- add any locally defined algorithms here -- } Attributes { ATTRIBUTE:IOSet } ::= SET OF Attribute{{ IOSet }} CRIAttributes ATTRIBUTE ::= { ... -- add any locally defined attributes here -- } Attribute { ATTRIBUTE:IOSet } ::= SEQUENCE { type ATTRIBUTE.&id({IOSet}), values SET SIZE(1..MAX) OF ATTRIBUTE.&Type({IOSet}{@type}) } CertificationRequest ::= SEQUENCE { certificationRequestInfo CertificationRequestInfo, signatureAlgorithm AlgorithmIdentifier{{ SignatureAlgorithms }}, signature BIT STRING } AlgorithmIdentifier {ALGORITHM:IOSet } ::= SEQUENCE { algorithm ALGORITHM.&id({IOSet}), parameters ALGORITHM.&Type({IOSet}{@algorithm}) OPTIONAL } SignatureAlgorithms ALGORITHM ::= { ... -- add any locally defined algorithms here -- } END asn1tools-0.169.0/tests/files/ietf/rfc2986.py000066400000000000000000000125621524544274600205050ustar00rootroot00000000000000EXPECTED = {'PKCS-10': {'extensibility-implied': False, 'imports': {'AuthenticationFramework': ['ALGORITHM'], 'InformationFramework': ['ATTRIBUTE', 'Name'], 'UsefulDefinitions': ['authenticationFramework', 'informationFramework']}, 'object-classes': {}, 'object-sets': {'CRIAttributes': {'class': 'ATTRIBUTE', 'members': ['.']}, 'PKInfoAlgorithms': {'class': 'ALGORITHM', 'members': ['.']}, 'SignatureAlgorithms': {'class': 'ALGORITHM', 'members': ['.']}}, 'tags': 'IMPLICIT', 'types': {'AlgorithmIdentifier': {'members': [{'name': 'algorithm', 'table': {'type': 'IOSet'}, 'type': 'ALGORITHM.&id'}, {'name': 'parameters', 'optional': True, 'table': ['IOSet', ['algorithm']], 'type': 'ALGORITHM.&Type'}], 'parameters': ['IOSet'], 'type': 'SEQUENCE'}, 'Attribute': {'members': [{'name': 'type', 'table': {'type': 'IOSet'}, 'type': 'ATTRIBUTE.&id'}, {'element': {'table': ['IOSet', ['type']], 'type': 'ATTRIBUTE.&Type'}, 'name': 'values', 'size': [(1, 'MAX')], 'type': 'SET OF'}], 'parameters': ['IOSet'], 'type': 'SEQUENCE'}, 'Attributes': {'element': {'actual-parameters': ['{'], 'type': 'Attribute'}, 'parameters': ['IOSet'], 'type': 'SET OF'}, 'CertificationRequest': {'members': [{'name': 'certificationRequestInfo', 'type': 'CertificationRequestInfo'}, {'actual-parameters': ['{'], 'name': 'signatureAlgorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'signature', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'CertificationRequestInfo': {'members': [{'name': 'version', 'named-numbers': {'v1': 0}, 'restricted-to': ['v1', None], 'type': 'INTEGER'}, {'name': 'subject', 'type': 'Name'}, {'actual-parameters': ['{'], 'name': 'subjectPKInfo', 'type': 'SubjectPublicKeyInfo'}, {'actual-parameters': ['{'], 'name': 'attributes', 'tag': {'number': 0}, 'type': 'Attributes'}], 'type': 'SEQUENCE'}, 'SubjectPublicKeyInfo': {'members': [{'actual-parameters': ['{'], 'name': 'algorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'subjectPublicKey', 'type': 'BIT ' 'STRING'}], 'parameters': ['IOSet'], 'type': 'SEQUENCE'}}, 'values': {}}}asn1tools-0.169.0/tests/files/ietf/rfc3161.asn000066400000000000000000000115651524544274600206220ustar00rootroot00000000000000PKIXTSP {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-tsp(13)} DEFINITIONS IMPLICIT TAGS ::= BEGIN -- EXPORTS ALL -- IMPORTS Extensions, AlgorithmIdentifier FROM PKIX1Explicit88 {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit-88(1)} GeneralName FROM PKIX1Implicit88 {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)} ContentInfo FROM CryptographicMessageSyntax {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0) cms(1)} PKIFreeText FROM PKIXCMP {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-cmp(9)} ; -- Locally defined OIDs -- -- eContentType for a time-stamp token id-ct-TSTInfo OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 4} -- 2.4.1 TimeStampReq ::= SEQUENCE { version INTEGER { v1(1) }, messageImprint MessageImprint, --a hash algorithm OID and the hash value of the data to be --time-stamped reqPolicy TSAPolicyId OPTIONAL, nonce INTEGER OPTIONAL, certReq BOOLEAN DEFAULT FALSE, extensions [0] IMPLICIT Extensions OPTIONAL } MessageImprint ::= SEQUENCE { hashAlgorithm AlgorithmIdentifier, hashedMessage OCTET STRING } TSAPolicyId ::= OBJECT IDENTIFIER -- 2.4.2 TimeStampResp ::= SEQUENCE { status PKIStatusInfo, timeStampToken TimeStampToken OPTIONAL } -- The status is based on the definition of status -- in section 3.2.3 of [RFC2510] PKIStatusInfo ::= SEQUENCE { status PKIStatus, statusString PKIFreeText OPTIONAL, failInfo PKIFailureInfo OPTIONAL } PKIStatus ::= INTEGER { granted (0), -- when the PKIStatus contains the value zero a TimeStampToken, as -- requested, is present. grantedWithMods (1), -- when the PKIStatus contains the value one a TimeStampToken, -- with modifications, is present. rejection (2), waiting (3), revocationWarning (4), -- this message contains a warning that a revocation is -- imminent revocationNotification (5) -- notification that a revocation has occurred } -- When the TimeStampToken is not present -- failInfo indicates the reason why the -- time-stamp request was rejected and -- may be one of the following values. PKIFailureInfo ::= BIT STRING { badAlg (0), -- unrecognized or unsupported Algorithm Identifier badRequest (2), -- transaction not permitted or supported badDataFormat (5), -- the data submitted has the wrong format timeNotAvailable (14), -- the TSA's time source is not available unacceptedPolicy (15), -- the requested TSA policy is not supported by the TSA. unacceptedExtension (16), -- the requested extension is not supported by the TSA. addInfoNotAvailable (17), -- the additional information requested could not be understood -- or is not available systemFailure (25) -- the request cannot be handled due to system failure } TimeStampToken ::= ContentInfo -- contentType is id-signedData as defined in [CMS] -- content is SignedData as defined in([CMS]) -- eContentType within SignedData is id-ct-TSTInfo -- eContent within SignedData is TSTInfo TSTInfo ::= SEQUENCE { version INTEGER { v1(1) }, policy TSAPolicyId, messageImprint MessageImprint, -- MUST have the same value as the similar field in -- TimeStampReq serialNumber INTEGER, -- Time-Stamping users MUST be ready to accommodate integers -- up to 160 bits. genTime GeneralizedTime, accuracy Accuracy OPTIONAL, ordering BOOLEAN DEFAULT FALSE, nonce INTEGER OPTIONAL, -- MUST be present if the similar field was present -- in TimeStampReq. In that case it MUST have the same value. tsa [0] GeneralName OPTIONAL, extensions [1] IMPLICIT Extensions OPTIONAL } Accuracy ::= SEQUENCE { seconds INTEGER OPTIONAL, millis [0] INTEGER (1..999) OPTIONAL, micros [1] INTEGER (1..999) OPTIONAL } END asn1tools-0.169.0/tests/files/ietf/rfc3161.py000066400000000000000000000211511524544274600204610ustar00rootroot00000000000000EXPECTED = {'PKIXTSP': {'extensibility-implied': False, 'imports': {'CryptographicMessageSyntax': ['ContentInfo'], 'PKIX1Explicit88': ['AlgorithmIdentifier', 'Extensions'], 'PKIX1Implicit88': ['GeneralName'], 'PKIXCMP': ['PKIFreeText']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'IMPLICIT', 'types': {'Accuracy': {'members': [{'name': 'seconds', 'optional': True, 'type': 'INTEGER'}, {'name': 'millis', 'optional': True, 'restricted-to': [(1, 999)], 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'micros', 'optional': True, 'restricted-to': [(1, 999)], 'tag': {'number': 1}, 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'MessageImprint': {'members': [{'name': 'hashAlgorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'hashedMessage', 'type': 'OCTET STRING'}], 'type': 'SEQUENCE'}, 'PKIFailureInfo': {'named-bits': [('badAlg', '0'), ('badRequest', '2'), ('badDataFormat', '5'), ('timeNotAvailable', '14'), ('unacceptedPolicy', '15'), ('unacceptedExtension', '16'), ('addInfoNotAvailable', '17'), ('systemFailure', '25')], 'type': 'BIT STRING'}, 'PKIStatus': {'named-numbers': {'granted': 0, 'grantedWithMods': 1, 'rejection': 2, 'revocationNotification': 5, 'revocationWarning': 4, 'waiting': 3}, 'type': 'INTEGER'}, 'PKIStatusInfo': {'members': [{'name': 'status', 'type': 'PKIStatus'}, {'name': 'statusString', 'optional': True, 'type': 'PKIFreeText'}, {'name': 'failInfo', 'optional': True, 'type': 'PKIFailureInfo'}], 'type': 'SEQUENCE'}, 'TSAPolicyId': {'type': 'OBJECT IDENTIFIER'}, 'TSTInfo': {'members': [{'name': 'version', 'named-numbers': {'v1': 1}, 'type': 'INTEGER'}, {'name': 'policy', 'type': 'TSAPolicyId'}, {'name': 'messageImprint', 'type': 'MessageImprint'}, {'name': 'serialNumber', 'type': 'INTEGER'}, {'name': 'genTime', 'type': 'GeneralizedTime'}, {'name': 'accuracy', 'optional': True, 'type': 'Accuracy'}, {'default': False, 'name': 'ordering', 'type': 'BOOLEAN'}, {'name': 'nonce', 'optional': True, 'type': 'INTEGER'}, {'name': 'tsa', 'optional': True, 'tag': {'number': 0}, 'type': 'GeneralName'}, {'name': 'extensions', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'TimeStampReq': {'members': [{'name': 'version', 'named-numbers': {'v1': 1}, 'type': 'INTEGER'}, {'name': 'messageImprint', 'type': 'MessageImprint'}, {'name': 'reqPolicy', 'optional': True, 'type': 'TSAPolicyId'}, {'name': 'nonce', 'optional': True, 'type': 'INTEGER'}, {'default': False, 'name': 'certReq', 'type': 'BOOLEAN'}, {'name': 'extensions', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'TimeStampResp': {'members': [{'name': 'status', 'type': 'PKIStatusInfo'}, {'name': 'timeStampToken', 'optional': True, 'type': 'TimeStampToken'}], 'type': 'SEQUENCE'}, 'TimeStampToken': {'type': 'ContentInfo'}}, 'values': {'id-ct-TSTInfo': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs-9', 9), ('smime', 16), ('ct', 1), 4]}}}}asn1tools-0.169.0/tests/files/ietf/rfc3279.asn000066400000000000000000000172451524544274600206350ustar00rootroot00000000000000PKIX1Algorithms88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-pkix1-algorithms(17) } DEFINITIONS EXPLICIT TAGS ::= BEGIN -- EXPORTS All; -- IMPORTS NONE; -- -- One-way Hash Functions -- md2 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 2 } md5 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 5 } id-sha1 OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 } -- -- DSA Keys and Signatures -- -- OID for DSA public key id-dsa OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) 1 } -- encoding for DSA public key DSAPublicKey ::= INTEGER -- public key, y Dss-Parms ::= SEQUENCE { p INTEGER, q INTEGER, g INTEGER } -- OID for DSA signature generated with SHA-1 hash id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) x9-57 (10040) x9algorithm(4) 3 } -- encoding for DSA signature generated with SHA-1 hash Dss-Sig-Value ::= SEQUENCE { r INTEGER, s INTEGER } -- -- RSA Keys and Signatures -- -- arc for RSA public key and RSA signature OIDs pkcs-1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 } -- OID for RSA public keys rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 } -- OID for RSA signature generated with MD2 hash md2WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 2 } -- OID for RSA signature generated with MD5 hash md5WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 4 } -- OID for RSA signature generated with SHA-1 hash sha1WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 5 } -- encoding for RSA public key RSAPublicKey ::= SEQUENCE { modulus INTEGER, -- n publicExponent INTEGER } -- e -- -- Diffie-Hellman Keys -- dhpublicnumber OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) ansi-x942(10046) number-type(2) 1 } -- encoding for DSA public key DHPublicKey ::= INTEGER -- public key, y = g^x mod p DomainParameters ::= SEQUENCE { p INTEGER, -- odd prime, p=jq +1 g INTEGER, -- generator, g q INTEGER, -- factor of p-1 j INTEGER OPTIONAL, -- subgroup factor, j>= 2 validationParms ValidationParms OPTIONAL } ValidationParms ::= SEQUENCE { seed BIT STRING, pgenCounter INTEGER } -- -- KEA Keys -- id-keyExchangeAlgorithm OBJECT IDENTIFIER ::= { 2 16 840 1 101 2 1 1 22 } KEA-Parms-Id ::= OCTET STRING -- -- Elliptic Curve Keys, Signatures, and Curves -- ansi-X9-62 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 10045 } FieldID ::= SEQUENCE { -- Finite field fieldType OBJECT IDENTIFIER, parameters ANY DEFINED BY fieldType } -- Arc for ECDSA signature OIDS id-ecSigType OBJECT IDENTIFIER ::= { ansi-X9-62 signatures(4) } -- OID for ECDSA signatures with SHA-1 ecdsa-with-SHA1 OBJECT IDENTIFIER ::= { id-ecSigType 1 } -- OID for an elliptic curve signature -- format for the value of an ECDSA signature value ECDSA-Sig-Value ::= SEQUENCE { r INTEGER, s INTEGER } -- recognized field type OIDs are defined in the following arc id-fieldType OBJECT IDENTIFIER ::= { ansi-X9-62 fieldType(1) } -- where fieldType is prime-field, the parameters are of type Prime-p prime-field OBJECT IDENTIFIER ::= { id-fieldType 1 } Prime-p ::= INTEGER -- Finite field F(p), where p is an odd prime -- where fieldType is characteristic-two-field, the parameters are -- of type Characteristic-two characteristic-two-field OBJECT IDENTIFIER ::= { id-fieldType 2 } Characteristic-two ::= SEQUENCE { m INTEGER, -- Field size 2^m basis OBJECT IDENTIFIER, parameters ANY DEFINED BY basis } -- recognized basis type OIDs are defined in the following arc id-characteristic-two-basis OBJECT IDENTIFIER ::= { characteristic-two-field basisType(3) } -- gnbasis is identified by OID gnBasis and indicates -- parameters are NULL gnBasis OBJECT IDENTIFIER ::= { id-characteristic-two-basis 1 } -- parameters for this basis are NULL -- trinomial basis is identified by OID tpBasis and indicates -- parameters of type Pentanomial tpBasis OBJECT IDENTIFIER ::= { id-characteristic-two-basis 2 } -- Trinomial basis representation of F2^m -- Integer k for reduction polynomial xm + xk + 1 Trinomial ::= INTEGER -- for pentanomial basis is identified by OID ppBasis and indicates -- parameters of type Pentanomial ppBasis OBJECT IDENTIFIER ::= { id-characteristic-two-basis 3 } -- Pentanomial basis representation of F2^m -- reduction polynomial integers k1, k2, k3 -- f(x) = x**m + x**k3 + x**k2 + x**k1 + 1 Pentanomial ::= SEQUENCE { k1 INTEGER, k2 INTEGER, k3 INTEGER } -- The object identifiers gnBasis, tpBasis and ppBasis name -- three kinds of basis for characteristic-two finite fields FieldElement ::= OCTET STRING -- Finite field element ECPoint ::= OCTET STRING -- Elliptic curve point -- Elliptic Curve parameters may be specified explicitly, -- specified implicitly through a "named curve", or -- inherited from the CA EcpkParameters ::= CHOICE { ecParameters ECParameters, namedCurve OBJECT IDENTIFIER, implicitlyCA NULL } ECParameters ::= SEQUENCE { -- Elliptic curve parameters version ECPVer, fieldID FieldID, curve Curve, base ECPoint, -- Base point G order INTEGER, -- Order n of the base point cofactor INTEGER OPTIONAL } -- The integer h = #E(Fq)/n ECPVer ::= INTEGER {ecpVer1(1)} Curve ::= SEQUENCE { a FieldElement, -- Elliptic curve coefficient a b FieldElement, -- Elliptic curve coefficient b seed BIT STRING OPTIONAL } id-publicKeyType OBJECT IDENTIFIER ::= { ansi-X9-62 keyType(2) } id-ecPublicKey OBJECT IDENTIFIER ::= { id-publicKeyType 1 } -- Named Elliptic Curves in ANSI X9.62. ellipticCurve OBJECT IDENTIFIER ::= { ansi-X9-62 curves(3) } c-TwoCurve OBJECT IDENTIFIER ::= { ellipticCurve characteristicTwo(0) } c2pnb163v1 OBJECT IDENTIFIER ::= { c-TwoCurve 1 } c2pnb163v2 OBJECT IDENTIFIER ::= { c-TwoCurve 2 } c2pnb163v3 OBJECT IDENTIFIER ::= { c-TwoCurve 3 } c2pnb176w1 OBJECT IDENTIFIER ::= { c-TwoCurve 4 } c2tnb191v1 OBJECT IDENTIFIER ::= { c-TwoCurve 5 } c2tnb191v2 OBJECT IDENTIFIER ::= { c-TwoCurve 6 } c2tnb191v3 OBJECT IDENTIFIER ::= { c-TwoCurve 7 } c2onb191v4 OBJECT IDENTIFIER ::= { c-TwoCurve 8 } c2onb191v5 OBJECT IDENTIFIER ::= { c-TwoCurve 9 } c2pnb208w1 OBJECT IDENTIFIER ::= { c-TwoCurve 10 } c2tnb239v1 OBJECT IDENTIFIER ::= { c-TwoCurve 11 } c2tnb239v2 OBJECT IDENTIFIER ::= { c-TwoCurve 12 } c2tnb239v3 OBJECT IDENTIFIER ::= { c-TwoCurve 13 } c2onb239v4 OBJECT IDENTIFIER ::= { c-TwoCurve 14 } c2onb239v5 OBJECT IDENTIFIER ::= { c-TwoCurve 15 } c2pnb272w1 OBJECT IDENTIFIER ::= { c-TwoCurve 16 } c2pnb304w1 OBJECT IDENTIFIER ::= { c-TwoCurve 17 } c2tnb359v1 OBJECT IDENTIFIER ::= { c-TwoCurve 18 } c2pnb368w1 OBJECT IDENTIFIER ::= { c-TwoCurve 19 } c2tnb431r1 OBJECT IDENTIFIER ::= { c-TwoCurve 20 } primeCurve OBJECT IDENTIFIER ::= { ellipticCurve prime(1) } prime192v1 OBJECT IDENTIFIER ::= { primeCurve 1 } prime192v2 OBJECT IDENTIFIER ::= { primeCurve 2 } prime192v3 OBJECT IDENTIFIER ::= { primeCurve 3 } prime239v1 OBJECT IDENTIFIER ::= { primeCurve 4 } prime239v2 OBJECT IDENTIFIER ::= { primeCurve 5 } prime239v3 OBJECT IDENTIFIER ::= { primeCurve 6 } prime256v1 OBJECT IDENTIFIER ::= { primeCurve 7 } END asn1tools-0.169.0/tests/files/ietf/rfc3279.py000066400000000000000000000556021524544274600205030ustar00rootroot00000000000000EXPECTED = {'PKIX1Algorithms88': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'EXPLICIT', 'types': {'Characteristic-two': {'members': [{'name': 'm', 'type': 'INTEGER'}, {'name': 'basis', 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'parameters', 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'basis'}], 'type': 'SEQUENCE'}, 'Curve': {'members': [{'name': 'a', 'type': 'FieldElement'}, {'name': 'b', 'type': 'FieldElement'}, {'name': 'seed', 'optional': True, 'type': 'BIT STRING'}], 'type': 'SEQUENCE'}, 'DHPublicKey': {'type': 'INTEGER'}, 'DSAPublicKey': {'type': 'INTEGER'}, 'DomainParameters': {'members': [{'name': 'p', 'type': 'INTEGER'}, {'name': 'g', 'type': 'INTEGER'}, {'name': 'q', 'type': 'INTEGER'}, {'name': 'j', 'optional': True, 'type': 'INTEGER'}, {'name': 'validationParms', 'optional': True, 'type': 'ValidationParms'}], 'type': 'SEQUENCE'}, 'Dss-Parms': {'members': [{'name': 'p', 'type': 'INTEGER'}, {'name': 'q', 'type': 'INTEGER'}, {'name': 'g', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Dss-Sig-Value': {'members': [{'name': 'r', 'type': 'INTEGER'}, {'name': 's', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'ECDSA-Sig-Value': {'members': [{'name': 'r', 'type': 'INTEGER'}, {'name': 's', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'ECPVer': {'named-numbers': {'ecpVer1': 1}, 'type': 'INTEGER'}, 'ECParameters': {'members': [{'name': 'version', 'type': 'ECPVer'}, {'name': 'fieldID', 'type': 'FieldID'}, {'name': 'curve', 'type': 'Curve'}, {'name': 'base', 'type': 'ECPoint'}, {'name': 'order', 'type': 'INTEGER'}, {'name': 'cofactor', 'optional': True, 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'ECPoint': {'type': 'OCTET STRING'}, 'EcpkParameters': {'members': [{'name': 'ecParameters', 'type': 'ECParameters'}, {'name': 'namedCurve', 'type': 'OBJECT ' 'IDENTIFIER'}, {'name': 'implicitlyCA', 'type': 'NULL'}], 'type': 'CHOICE'}, 'FieldElement': {'type': 'OCTET STRING'}, 'FieldID': {'members': [{'name': 'fieldType', 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'parameters', 'type': 'ANY DEFINED ' 'BY', 'value': 'fieldType'}], 'type': 'SEQUENCE'}, 'KEA-Parms-Id': {'type': 'OCTET STRING'}, 'Pentanomial': {'members': [{'name': 'k1', 'type': 'INTEGER'}, {'name': 'k2', 'type': 'INTEGER'}, {'name': 'k3', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Prime-p': {'type': 'INTEGER'}, 'RSAPublicKey': {'members': [{'name': 'modulus', 'type': 'INTEGER'}, {'name': 'publicExponent', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Trinomial': {'type': 'INTEGER'}, 'ValidationParms': {'members': [{'name': 'seed', 'type': 'BIT ' 'STRING'}, {'name': 'pgenCounter', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}}, 'values': {'ansi-X9-62': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), 10045]}, 'c-TwoCurve': {'type': 'OBJECT IDENTIFIER', 'value': ['ellipticCurve', ('characteristicTwo', 0)]}, 'c2onb191v4': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 8]}, 'c2onb191v5': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 9]}, 'c2onb239v4': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 14]}, 'c2onb239v5': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 15]}, 'c2pnb163v1': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 1]}, 'c2pnb163v2': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 2]}, 'c2pnb163v3': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 3]}, 'c2pnb176w1': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 4]}, 'c2pnb208w1': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 10]}, 'c2pnb272w1': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 16]}, 'c2pnb304w1': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 17]}, 'c2pnb368w1': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 19]}, 'c2tnb191v1': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 5]}, 'c2tnb191v2': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 6]}, 'c2tnb191v3': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 7]}, 'c2tnb239v1': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 11]}, 'c2tnb239v2': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 12]}, 'c2tnb239v3': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 13]}, 'c2tnb359v1': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 18]}, 'c2tnb431r1': {'type': 'OBJECT IDENTIFIER', 'value': ['c-TwoCurve', 20]}, 'characteristic-two-field': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-fieldType', 2]}, 'dhpublicnumber': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('ansi-x942', 10046), ('number-type', 2), 1]}, 'ecdsa-with-SHA1': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ecSigType', 1]}, 'ellipticCurve': {'type': 'OBJECT IDENTIFIER', 'value': ['ansi-X9-62', ('curves', 3)]}, 'gnBasis': {'type': 'OBJECT IDENTIFIER', 'value': ['id-characteristic-two-basis', 1]}, 'id-characteristic-two-basis': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['characteristic-two-field', ('basisType', 3)]}, 'id-dsa': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('x9-57', 10040), ('x9algorithm', 4), 1]}, 'id-dsa-with-sha1': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('x9-57', 10040), ('x9algorithm', 4), 3]}, 'id-ecPublicKey': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-publicKeyType', 1]}, 'id-ecSigType': {'type': 'OBJECT IDENTIFIER', 'value': ['ansi-X9-62', ('signatures', 4)]}, 'id-fieldType': {'type': 'OBJECT IDENTIFIER', 'value': ['ansi-X9-62', ('fieldType', 1)]}, 'id-keyExchangeAlgorithm': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [2, 16, 840, 1, 101, 2, 1, 1, 22]}, 'id-publicKeyType': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['ansi-X9-62', ('keyType', 2)]}, 'id-sha1': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('identified-organization', 3), ('oiw', 14), ('secsig', 3), ('algorithms', 2), 26]}, 'md2': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('digestAlgorithm', 2), 2]}, 'md2WithRSAEncryption': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['pkcs-1', 2]}, 'md5': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('digestAlgorithm', 2), 5]}, 'md5WithRSAEncryption': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['pkcs-1', 4]}, 'pkcs-1': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), 1]}, 'ppBasis': {'type': 'OBJECT IDENTIFIER', 'value': ['id-characteristic-two-basis', 3]}, 'prime-field': {'type': 'OBJECT IDENTIFIER', 'value': ['id-fieldType', 1]}, 'prime192v1': {'type': 'OBJECT IDENTIFIER', 'value': ['primeCurve', 1]}, 'prime192v2': {'type': 'OBJECT IDENTIFIER', 'value': ['primeCurve', 2]}, 'prime192v3': {'type': 'OBJECT IDENTIFIER', 'value': ['primeCurve', 3]}, 'prime239v1': {'type': 'OBJECT IDENTIFIER', 'value': ['primeCurve', 4]}, 'prime239v2': {'type': 'OBJECT IDENTIFIER', 'value': ['primeCurve', 5]}, 'prime239v3': {'type': 'OBJECT IDENTIFIER', 'value': ['primeCurve', 6]}, 'prime256v1': {'type': 'OBJECT IDENTIFIER', 'value': ['primeCurve', 7]}, 'primeCurve': {'type': 'OBJECT IDENTIFIER', 'value': ['ellipticCurve', ('prime', 1)]}, 'rsaEncryption': {'type': 'OBJECT IDENTIFIER', 'value': ['pkcs-1', 1]}, 'sha1WithRSAEncryption': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['pkcs-1', 5]}, 'tpBasis': {'type': 'OBJECT IDENTIFIER', 'value': ['id-characteristic-two-basis', 2]}}}}asn1tools-0.169.0/tests/files/ietf/rfc3281.asn000066400000000000000000000154021524544274600206170ustar00rootroot00000000000000PKIXAttributeCertificate {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-attribute-cert(12)} DEFINITIONS IMPLICIT TAGS ::= BEGIN -- EXPORTS ALL -- IMPORTS -- IMPORTed module OIDs MAY change if [PKIXPROF] changes -- PKIX Certificate Extensions Attribute, AlgorithmIdentifier, CertificateSerialNumber, Extensions, UniqueIdentifier, id-pkix, id-pe, id-kp, id-ad, id-at FROM PKIX1Explicit88 {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit-88(1)} GeneralName, GeneralNames, id-ce FROM PKIX1Implicit88 {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)} ; id-pe-ac-auditIdentity OBJECT IDENTIFIER ::= { id-pe 4 } id-pe-aaControls OBJECT IDENTIFIER ::= { id-pe 6 } id-pe-ac-proxying OBJECT IDENTIFIER ::= { id-pe 10 } id-ce-targetInformation OBJECT IDENTIFIER ::= { id-ce 55 } id-aca OBJECT IDENTIFIER ::= { id-pkix 10 } id-aca-authenticationInfo OBJECT IDENTIFIER ::= { id-aca 1 } id-aca-accessIdentity OBJECT IDENTIFIER ::= { id-aca 2 } id-aca-chargingIdentity OBJECT IDENTIFIER ::= { id-aca 3 } id-aca-group OBJECT IDENTIFIER ::= { id-aca 4 } -- { id-aca 5 } is reserved id-aca-encAttrs OBJECT IDENTIFIER ::= { id-aca 6 } id-at-role OBJECT IDENTIFIER ::= { id-at 72} id-at-clearance OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) module(1) selected-attribute-types(5) clearance (55) } -- Uncomment this if using a 1988 level ASN.1 compiler -- UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING AttributeCertificate ::= SEQUENCE { acinfo AttributeCertificateInfo, signatureAlgorithm AlgorithmIdentifier, signatureValue BIT STRING } AttributeCertificateInfo ::= SEQUENCE { version AttCertVersion, -- version is v2 holder Holder, issuer AttCertIssuer, signature AlgorithmIdentifier, serialNumber CertificateSerialNumber, attrCertValidityPeriod AttCertValidityPeriod, attributes SEQUENCE OF Attribute, issuerUniqueID UniqueIdentifier OPTIONAL, extensions Extensions OPTIONAL } AttCertVersion ::= INTEGER { v2(1) } Holder ::= SEQUENCE { baseCertificateID [0] IssuerSerial OPTIONAL, -- the issuer and serial number of -- the holder's Public Key Certificate entityName [1] GeneralNames OPTIONAL, -- the name of the claimant or role objectDigestInfo [2] ObjectDigestInfo OPTIONAL -- used to directly authenticate the -- holder, for example, an executable } ObjectDigestInfo ::= SEQUENCE { digestedObjectType ENUMERATED { publicKey (0), publicKeyCert (1), otherObjectTypes (2) }, -- otherObjectTypes MUST NOT -- MUST NOT be used in this profile otherObjectTypeID OBJECT IDENTIFIER OPTIONAL, digestAlgorithm AlgorithmIdentifier, objectDigest BIT STRING } AttCertIssuer ::= CHOICE { v1Form GeneralNames, -- MUST NOT be used in this -- profile v2Form [0] V2Form -- v2 only } V2Form ::= SEQUENCE { issuerName GeneralNames OPTIONAL, baseCertificateID [0] IssuerSerial OPTIONAL, objectDigestInfo [1] ObjectDigestInfo OPTIONAL -- issuerName MUST be present in this profile -- baseCertificateID and objectDigestInfo MUST -- NOT be present in this profile } IssuerSerial ::= SEQUENCE { issuer GeneralNames, serial CertificateSerialNumber, issuerUID UniqueIdentifier OPTIONAL } AttCertValidityPeriod ::= SEQUENCE { notBeforeTime GeneralizedTime, notAfterTime GeneralizedTime } Targets ::= SEQUENCE OF Target Target ::= CHOICE { targetName [0] GeneralName, targetGroup [1] GeneralName, targetCert [2] TargetCert } TargetCert ::= SEQUENCE { targetCertificate IssuerSerial, targetName GeneralName OPTIONAL, certDigestInfo ObjectDigestInfo OPTIONAL } IetfAttrSyntax ::= SEQUENCE { policyAuthority[0] GeneralNames OPTIONAL, values SEQUENCE OF CHOICE { octets OCTET STRING, oid OBJECT IDENTIFIER, string UTF8String } } SvceAuthInfo ::= SEQUENCE { service GeneralName, ident GeneralName, authInfo OCTET STRING OPTIONAL } RoleSyntax ::= SEQUENCE { roleAuthority [0] GeneralNames OPTIONAL, roleName [1] GeneralName } Clearance ::= SEQUENCE { policyId [0] OBJECT IDENTIFIER, classList [1] ClassList DEFAULT {unclassified}, securityCategories [2] SET OF SecurityCategory OPTIONAL } ClassList ::= BIT STRING { unmarked (0), unclassified (1), restricted (2), confidential (3), secret (4), topSecret (5) } SecurityCategory ::= SEQUENCE { type [0] IMPLICIT OBJECT IDENTIFIER, value [1] ANY DEFINED BY type } AAControls ::= SEQUENCE { pathLenConstraint INTEGER (0..MAX) OPTIONAL, permittedAttrs [0] AttrSpec OPTIONAL, excludedAttrs [1] AttrSpec OPTIONAL, permitUnSpecified BOOLEAN DEFAULT TRUE } AttrSpec::= SEQUENCE OF OBJECT IDENTIFIER ACClearAttrs ::= SEQUENCE { acIssuer GeneralName, acSerial INTEGER, attrs SEQUENCE OF Attribute } ProxyInfo ::= SEQUENCE OF Targets END asn1tools-0.169.0/tests/files/ietf/rfc3281.py000066400000000000000000000627441524544274600205010ustar00rootroot00000000000000EXPECTED = {'PKIXAttributeCertificate': {'extensibility-implied': False, 'imports': {'PKIX1Explicit88': ['AlgorithmIdentifier', 'Attribute', 'CertificateSerialNumber', 'Extensions', 'UniqueIdentifier', 'id-ad', 'id-at', 'id-kp', 'id-pe', 'id-pkix'], 'PKIX1Implicit88': ['GeneralName', 'GeneralNames', 'id-ce']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'IMPLICIT', 'types': {'AAControls': {'members': [{'name': 'pathLenConstraint', 'optional': True, 'restricted-to': [(0, 'MAX')], 'type': 'INTEGER'}, {'name': 'permittedAttrs', 'optional': True, 'tag': {'number': 0}, 'type': 'AttrSpec'}, {'name': 'excludedAttrs', 'optional': True, 'tag': {'number': 1}, 'type': 'AttrSpec'}, {'default': True, 'name': 'permitUnSpecified', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'ACClearAttrs': {'members': [{'name': 'acIssuer', 'type': 'GeneralName'}, {'name': 'acSerial', 'type': 'INTEGER'}, {'element': {'type': 'Attribute'}, 'name': 'attrs', 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'AttCertIssuer': {'members': [{'name': 'v1Form', 'type': 'GeneralNames'}, {'name': 'v2Form', 'tag': {'number': 0}, 'type': 'V2Form'}], 'type': 'CHOICE'}, 'AttCertValidityPeriod': {'members': [{'name': 'notBeforeTime', 'type': 'GeneralizedTime'}, {'name': 'notAfterTime', 'type': 'GeneralizedTime'}], 'type': 'SEQUENCE'}, 'AttCertVersion': {'named-numbers': {'v2': 1}, 'type': 'INTEGER'}, 'AttrSpec': {'element': {'type': 'OBJECT ' 'IDENTIFIER'}, 'type': 'SEQUENCE OF'}, 'AttributeCertificate': {'members': [{'name': 'acinfo', 'type': 'AttributeCertificateInfo'}, {'name': 'signatureAlgorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'signatureValue', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'AttributeCertificateInfo': {'members': [{'name': 'version', 'type': 'AttCertVersion'}, {'name': 'holder', 'type': 'Holder'}, {'name': 'issuer', 'type': 'AttCertIssuer'}, {'name': 'signature', 'type': 'AlgorithmIdentifier'}, {'name': 'serialNumber', 'type': 'CertificateSerialNumber'}, {'name': 'attrCertValidityPeriod', 'type': 'AttCertValidityPeriod'}, {'element': {'type': 'Attribute'}, 'name': 'attributes', 'type': 'SEQUENCE ' 'OF'}, {'name': 'issuerUniqueID', 'optional': True, 'type': 'UniqueIdentifier'}, {'name': 'extensions', 'optional': True, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'ClassList': {'named-bits': [('unmarked', '0'), ('unclassified', '1'), ('restricted', '2'), ('confidential', '3'), ('secret', '4'), ('topSecret', '5')], 'type': 'BIT STRING'}, 'Clearance': {'members': [{'name': 'policyId', 'tag': {'number': 0}, 'type': 'OBJECT ' 'IDENTIFIER'}, {'default': ['unclassified'], 'name': 'classList', 'tag': {'number': 1}, 'type': 'ClassList'}, {'element': {'type': 'SecurityCategory'}, 'name': 'securityCategories', 'optional': True, 'tag': {'number': 2}, 'type': 'SET ' 'OF'}], 'type': 'SEQUENCE'}, 'Holder': {'members': [{'name': 'baseCertificateID', 'optional': True, 'tag': {'number': 0}, 'type': 'IssuerSerial'}, {'name': 'entityName', 'optional': True, 'tag': {'number': 1}, 'type': 'GeneralNames'}, {'name': 'objectDigestInfo', 'optional': True, 'tag': {'number': 2}, 'type': 'ObjectDigestInfo'}], 'type': 'SEQUENCE'}, 'IetfAttrSyntax': {'members': [{'name': 'policyAuthority', 'optional': True, 'tag': {'number': 0}, 'type': 'GeneralNames'}, {'element': {'members': [{'name': 'octets', 'type': 'OCTET ' 'STRING'}, {'name': 'oid', 'type': 'OBJECT ' 'IDENTIFIER'}, {'name': 'string', 'type': 'UTF8String'}], 'type': 'CHOICE'}, 'name': 'values', 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'IssuerSerial': {'members': [{'name': 'issuer', 'type': 'GeneralNames'}, {'name': 'serial', 'type': 'CertificateSerialNumber'}, {'name': 'issuerUID', 'optional': True, 'type': 'UniqueIdentifier'}], 'type': 'SEQUENCE'}, 'ObjectDigestInfo': {'members': [{'name': 'digestedObjectType', 'type': 'ENUMERATED', 'values': [('publicKey', 0), ('publicKeyCert', 1), ('otherObjectTypes', 2)]}, {'name': 'otherObjectTypeID', 'optional': True, 'type': 'OBJECT ' 'IDENTIFIER'}, {'name': 'digestAlgorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'objectDigest', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'ProxyInfo': {'element': {'type': 'Targets'}, 'type': 'SEQUENCE OF'}, 'RoleSyntax': {'members': [{'name': 'roleAuthority', 'optional': True, 'tag': {'number': 0}, 'type': 'GeneralNames'}, {'name': 'roleName', 'tag': {'number': 1}, 'type': 'GeneralName'}], 'type': 'SEQUENCE'}, 'SecurityCategory': {'members': [{'name': 'type', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'value', 'tag': {'number': 1}, 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'type'}], 'type': 'SEQUENCE'}, 'SvceAuthInfo': {'members': [{'name': 'service', 'type': 'GeneralName'}, {'name': 'ident', 'type': 'GeneralName'}, {'name': 'authInfo', 'optional': True, 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'Target': {'members': [{'name': 'targetName', 'tag': {'number': 0}, 'type': 'GeneralName'}, {'name': 'targetGroup', 'tag': {'number': 1}, 'type': 'GeneralName'}, {'name': 'targetCert', 'tag': {'number': 2}, 'type': 'TargetCert'}], 'type': 'CHOICE'}, 'TargetCert': {'members': [{'name': 'targetCertificate', 'type': 'IssuerSerial'}, {'name': 'targetName', 'optional': True, 'type': 'GeneralName'}, {'name': 'certDigestInfo', 'optional': True, 'type': 'ObjectDigestInfo'}], 'type': 'SEQUENCE'}, 'Targets': {'element': {'type': 'Target'}, 'type': 'SEQUENCE OF'}, 'V2Form': {'members': [{'name': 'issuerName', 'optional': True, 'type': 'GeneralNames'}, {'name': 'baseCertificateID', 'optional': True, 'tag': {'number': 0}, 'type': 'IssuerSerial'}, {'name': 'objectDigestInfo', 'optional': True, 'tag': {'number': 1}, 'type': 'ObjectDigestInfo'}], 'type': 'SEQUENCE'}}, 'values': {'id-aca': {'type': 'OBJECT IDENTIFIER', 'value': ['id-pkix', 10]}, 'id-aca-accessIdentity': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-aca', 2]}, 'id-aca-authenticationInfo': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-aca', 1]}, 'id-aca-chargingIdentity': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-aca', 3]}, 'id-aca-encAttrs': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-aca', 6]}, 'id-aca-group': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-aca', 4]}, 'id-at-clearance': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('joint-iso-ccitt', 2), ('ds', 5), ('module', 1), ('selected-attribute-types', 5), ('clearance', 55)]}, 'id-at-role': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-at', 72]}, 'id-ce-targetInformation': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 55]}, 'id-pe-aaControls': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-pe', 6]}, 'id-pe-ac-auditIdentity': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-pe', 4]}, 'id-pe-ac-proxying': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-pe', 10]}}}}asn1tools-0.169.0/tests/files/ietf/rfc3447.asn000066400000000000000000000234251524544274600206270ustar00rootroot00000000000000PKCS-1 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) modules(0) pkcs-1(1) } -- $ Revision: 2.1r1 $ -- This module has been checked for conformance with the ASN.1 -- standard by the OSS ASN.1 Tools DEFINITIONS EXPLICIT TAGS ::= BEGIN -- EXPORTS ALL -- All types and values defined in this module are exported for use -- in other ASN.1 modules. IMPORTS id-sha256, id-sha384, id-sha512 FROM NIST-SHA2 { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistalgorithm(4) modules(0) sha2(1) }; -- ============================ -- Basic object identifiers -- ============================ -- The DER encoding of this in hexadecimal is: -- (0x)06 08 -- 2A 86 48 86 F7 0D 01 01 -- pkcs-1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 } -- -- When rsaEncryption is used in an AlgorithmIdentifier the -- parameters MUST be present and MUST be NULL. -- rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 } -- -- When id-RSAES-OAEP is used in an AlgorithmIdentifier the -- parameters MUST be present and MUST be RSAES-OAEP-params. -- id-RSAES-OAEP OBJECT IDENTIFIER ::= { pkcs-1 7 } -- -- When id-pSpecified is used in an AlgorithmIdentifier the -- parameters MUST be an OCTET STRING. -- id-pSpecified OBJECT IDENTIFIER ::= { pkcs-1 9 } -- When id-RSASSA-PSS is used in an AlgorithmIdentifier the -- parameters MUST be present and MUST be RSASSA-PSS-params. -- id-RSASSA-PSS OBJECT IDENTIFIER ::= { pkcs-1 10 } -- -- When the following OIDs are used in an AlgorithmIdentifier the -- parameters MUST be present and MUST be NULL. -- md2WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 2 } md5WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 4 } sha1WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 5 } sha256WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 11 } sha384WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 12 } sha512WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 13 } -- -- This OID really belongs in a module with the secsig OIDs. -- id-sha1 OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) 26 } -- -- OIDs for MD2 and MD5, allowed only in EMSA-PKCS1-v1_5. -- id-md2 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 2 } id-md5 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) digestAlgorithm(2) 5 } -- -- When id-mgf1 is used in an AlgorithmIdentifier the parameters MUST -- be present and MUST be a HashAlgorithm, for example sha1. -- id-mgf1 OBJECT IDENTIFIER ::= { pkcs-1 8 } -- ================ -- Useful types -- ================ ALGORITHM-IDENTIFIER ::= CLASS { &id OBJECT IDENTIFIER UNIQUE, &Type OPTIONAL } WITH SYNTAX { OID &id [PARAMETERS &Type] } -- -- Note: the parameter InfoObjectSet in the following definitions -- allows a distinct information object set to be specified for sets -- of algorithms such as: -- DigestAlgorithms ALGORITHM-IDENTIFIER ::= { -- { OID id-md2 PARAMETERS NULL }| -- { OID id-md5 PARAMETERS NULL }| -- { OID id-sha1 PARAMETERS NULL } -- } -- AlgorithmIdentifier { ALGORITHM-IDENTIFIER:InfoObjectSet } ::= SEQUENCE { algorithm ALGORITHM-IDENTIFIER.&id({InfoObjectSet}), parameters ALGORITHM-IDENTIFIER.&Type({InfoObjectSet}{@.algorithm}) OPTIONAL } -- ============== -- Algorithms -- ============== -- -- Allowed EME-OAEP and EMSA-PSS digest algorithms. -- OAEP-PSSDigestAlgorithms ALGORITHM-IDENTIFIER ::= { { OID id-sha1 PARAMETERS NULL }| { OID id-sha256 PARAMETERS NULL }| { OID id-sha384 PARAMETERS NULL }| { OID id-sha512 PARAMETERS NULL }, ... -- Allows for future expansion -- } -- -- Allowed EMSA-PKCS1-v1_5 digest algorithms. -- PKCS1-v1-5DigestAlgorithms ALGORITHM-IDENTIFIER ::= { { OID id-md2 PARAMETERS NULL }| { OID id-md5 PARAMETERS NULL }| { OID id-sha1 PARAMETERS NULL }| { OID id-sha256 PARAMETERS NULL }| { OID id-sha384 PARAMETERS NULL }| { OID id-sha512 PARAMETERS NULL } } -- When id-md2 and id-md5 are used in an AlgorithmIdentifier the -- parameters MUST be present and MUST be NULL. -- When id-sha1, id-sha256, id-sha384 and id-sha512 are used in an -- AlgorithmIdentifier the parameters (which are optional) SHOULD -- be omitted. However, an implementation MUST also accept -- AlgorithmIdentifier values where the parameters are NULL. sha1 HashAlgorithm ::= { algorithm id-sha1, parameters SHA1Parameters : NULL -- included for compatibility -- with existing implementations } HashAlgorithm ::= AlgorithmIdentifier { {OAEP-PSSDigestAlgorithms} } SHA1Parameters ::= NULL -- -- Allowed mask generation function algorithms. -- If the identifier is id-mgf1, the parameters are a HashAlgorithm. -- PKCS1MGFAlgorithms ALGORITHM-IDENTIFIER ::= { { OID id-mgf1 PARAMETERS HashAlgorithm }, ... -- Allows for future expansion -- } -- -- Default AlgorithmIdentifier for id-RSAES-OAEP.maskGenAlgorithm and -- id-RSASSA-PSS.maskGenAlgorithm. -- mgf1SHA1 MaskGenAlgorithm ::= { algorithm id-mgf1, parameters HashAlgorithm : sha1 } MaskGenAlgorithm ::= AlgorithmIdentifier { {PKCS1MGFAlgorithms} } -- -- Allowed algorithms for pSourceAlgorithm. -- PKCS1PSourceAlgorithms ALGORITHM-IDENTIFIER ::= { { OID id-pSpecified PARAMETERS EncodingParameters }, ... -- Allows for future expansion -- } EncodingParameters ::= OCTET STRING(SIZE(0..MAX)) -- -- This identifier means that the label L is an empty string, so the -- digest of the empty string appears in the RSA block before -- masking. -- pSpecifiedEmpty PSourceAlgorithm ::= { algorithm id-pSpecified, parameters EncodingParameters : emptyString } PSourceAlgorithm ::= AlgorithmIdentifier { {PKCS1PSourceAlgorithms} } emptyString EncodingParameters ::= ''H -- -- Type identifier definitions for the PKCS #1 OIDs. -- PKCS1Algorithms ALGORITHM-IDENTIFIER ::= { { OID rsaEncryption PARAMETERS NULL } | { OID md2WithRSAEncryption PARAMETERS NULL } | { OID md5WithRSAEncryption PARAMETERS NULL } | { OID sha1WithRSAEncryption PARAMETERS NULL } | { OID sha256WithRSAEncryption PARAMETERS NULL } | { OID sha384WithRSAEncryption PARAMETERS NULL } | { OID sha512WithRSAEncryption PARAMETERS NULL } | { OID id-RSAES-OAEP PARAMETERS RSAES-OAEP-params } | PKCS1PSourceAlgorithms | { OID id-RSASSA-PSS PARAMETERS RSASSA-PSS-params } , ... -- Allows for future expansion -- } -- =================== -- Main structures -- =================== RSAPublicKey ::= SEQUENCE { modulus INTEGER, -- n publicExponent INTEGER -- e } -- -- Representation of RSA private key with information for the CRT -- algorithm. -- RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- p prime2 INTEGER, -- q exponent1 INTEGER, -- d mod (p-1) exponent2 INTEGER, -- d mod (q-1) coefficient INTEGER, -- (inverse of q) mod p otherPrimeInfos OtherPrimeInfos OPTIONAL } Version ::= INTEGER { two-prime(0), multi(1) } (CONSTRAINED BY { -- version must be multi if otherPrimeInfos present -- }) OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo OtherPrimeInfo ::= SEQUENCE { prime INTEGER, -- ri exponent INTEGER, -- di coefficient INTEGER -- ti } -- -- AlgorithmIdentifier.parameters for id-RSAES-OAEP. -- Note that the tags in this Sequence are explicit. -- RSAES-OAEP-params ::= SEQUENCE { hashAlgorithm [0] HashAlgorithm DEFAULT sha1, maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT mgf1SHA1, pSourceAlgorithm [2] PSourceAlgorithm DEFAULT pSpecifiedEmpty } -- -- Identifier for default RSAES-OAEP algorithm identifier. -- The DER Encoding of this is in hexadecimal: -- (0x)30 0D -- 06 09 -- 2A 86 48 86 F7 0D 01 01 07 -- 30 00 -- Notice that the DER encoding of default values is "empty". -- rSAES-OAEP-Default-Identifier RSAES-AlgorithmIdentifier ::= { algorithm id-RSAES-OAEP, parameters RSAES-OAEP-params : { hashAlgorithm sha1, maskGenAlgorithm mgf1SHA1, pSourceAlgorithm pSpecifiedEmpty } } RSAES-AlgorithmIdentifier ::= AlgorithmIdentifier { {PKCS1Algorithms} } -- -- AlgorithmIdentifier.parameters for id-RSASSA-PSS. -- Note that the tags in this Sequence are explicit. -- RSASSA-PSS-params ::= SEQUENCE { hashAlgorithm [0] HashAlgorithm DEFAULT sha1, maskGenAlgorithm [1] MaskGenAlgorithm DEFAULT mgf1SHA1, saltLength [2] INTEGER DEFAULT 20, trailerField [3] TrailerField DEFAULT trailerFieldBC } TrailerField ::= INTEGER { trailerFieldBC(1) } -- -- Identifier for default RSASSA-PSS algorithm identifier -- The DER Encoding of this is in hexadecimal: -- (0x)30 0D -- 06 09 -- 2A 86 48 86 F7 0D 01 01 0A -- 30 00 -- Notice that the DER encoding of default values is "empty". -- rSASSA-PSS-Default-Identifier RSASSA-AlgorithmIdentifier ::= { algorithm id-RSASSA-PSS, parameters RSASSA-PSS-params : { hashAlgorithm sha1, maskGenAlgorithm mgf1SHA1, saltLength 20, trailerField trailerFieldBC } } RSASSA-AlgorithmIdentifier ::= AlgorithmIdentifier { {PKCS1Algorithms} } -- -- Syntax for the EMSA-PKCS1-v1_5 hash identifier. -- DigestInfo ::= SEQUENCE { digestAlgorithm DigestAlgorithm, digest OCTET STRING } DigestAlgorithm ::= AlgorithmIdentifier { {PKCS1-v1-5DigestAlgorithms} } END -- PKCS1Definitions asn1tools-0.169.0/tests/files/ietf/rfc3447.py000066400000000000000000000314311524544274600204720ustar00rootroot00000000000000EXPECTED = {'PKCS-1': {'extensibility-implied': False, 'imports': {'NIST-SHA2': ['id-sha256', 'id-sha384', 'id-sha512']}, 'object-classes': {'ALGORITHM-IDENTIFIER': {'members': [{'name': '&id', 'type': 'OBJECT ' 'IDENTIFIER'}, {'name': '&Type', 'type': 'OpenType'}]}}, 'object-sets': {'OAEP-PSSDigestAlgorithms': {'class': 'ALGORITHM-IDENTIFIER', 'members': []}, 'PKCS1-v1-5DigestAlgorithms': {'class': 'ALGORITHM-IDENTIFIER', 'members': []}, 'PKCS1Algorithms': {'class': 'ALGORITHM-IDENTIFIER', 'members': []}, 'PKCS1MGFAlgorithms': {'class': 'ALGORITHM-IDENTIFIER', 'members': []}, 'PKCS1PSourceAlgorithms': {'class': 'ALGORITHM-IDENTIFIER', 'members': []}}, 'tags': 'EXPLICIT', 'types': {'AlgorithmIdentifier': {'members': [{'name': 'algorithm', 'table': {'type': 'InfoObjectSet'}, 'type': 'ALGORITHM-IDENTIFIER.&id'}, {'name': 'parameters', 'optional': True, 'table': ['InfoObjectSet', ['.algorithm']], 'type': 'ALGORITHM-IDENTIFIER.&Type'}], 'parameters': ['InfoObjectSet'], 'type': 'SEQUENCE'}, 'DigestAlgorithm': {'actual-parameters': ['{'], 'type': 'AlgorithmIdentifier'}, 'DigestInfo': {'members': [{'name': 'digestAlgorithm', 'type': 'DigestAlgorithm'}, {'name': 'digest', 'type': 'OCTET STRING'}], 'type': 'SEQUENCE'}, 'EncodingParameters': {'size': [(0, 'MAX')], 'type': 'OCTET STRING'}, 'HashAlgorithm': {'actual-parameters': ['{'], 'type': 'AlgorithmIdentifier'}, 'MaskGenAlgorithm': {'actual-parameters': ['{'], 'type': 'AlgorithmIdentifier'}, 'OtherPrimeInfo': {'members': [{'name': 'prime', 'type': 'INTEGER'}, {'name': 'exponent', 'type': 'INTEGER'}, {'name': 'coefficient', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'OtherPrimeInfos': {'element': {'type': 'OtherPrimeInfo'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'PSourceAlgorithm': {'actual-parameters': ['{'], 'type': 'AlgorithmIdentifier'}, 'RSAES-AlgorithmIdentifier': {'actual-parameters': ['{'], 'type': 'AlgorithmIdentifier'}, 'RSAES-OAEP-params': {'members': [{'default': 'sha1', 'name': 'hashAlgorithm', 'tag': {'number': 0}, 'type': 'HashAlgorithm'}, {'default': 'mgf1SHA1', 'name': 'maskGenAlgorithm', 'tag': {'number': 1}, 'type': 'MaskGenAlgorithm'}, {'default': 'pSpecifiedEmpty', 'name': 'pSourceAlgorithm', 'tag': {'number': 2}, 'type': 'PSourceAlgorithm'}], 'type': 'SEQUENCE'}, 'RSAPrivateKey': {'members': [{'name': 'version', 'type': 'Version'}, {'name': 'modulus', 'type': 'INTEGER'}, {'name': 'publicExponent', 'type': 'INTEGER'}, {'name': 'privateExponent', 'type': 'INTEGER'}, {'name': 'prime1', 'type': 'INTEGER'}, {'name': 'prime2', 'type': 'INTEGER'}, {'name': 'exponent1', 'type': 'INTEGER'}, {'name': 'exponent2', 'type': 'INTEGER'}, {'name': 'coefficient', 'type': 'INTEGER'}, {'name': 'otherPrimeInfos', 'optional': True, 'type': 'OtherPrimeInfos'}], 'type': 'SEQUENCE'}, 'RSAPublicKey': {'members': [{'name': 'modulus', 'type': 'INTEGER'}, {'name': 'publicExponent', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'RSASSA-AlgorithmIdentifier': {'actual-parameters': ['{'], 'type': 'AlgorithmIdentifier'}, 'RSASSA-PSS-params': {'members': [{'default': 'sha1', 'name': 'hashAlgorithm', 'tag': {'number': 0}, 'type': 'HashAlgorithm'}, {'default': 'mgf1SHA1', 'name': 'maskGenAlgorithm', 'tag': {'number': 1}, 'type': 'MaskGenAlgorithm'}, {'default': 20, 'name': 'saltLength', 'tag': {'number': 2}, 'type': 'INTEGER'}, {'default': 'trailerFieldBC', 'name': 'trailerField', 'tag': {'number': 3}, 'type': 'TrailerField'}], 'type': 'SEQUENCE'}, 'SHA1Parameters': {'type': 'NULL'}, 'TrailerField': {'named-numbers': {'trailerFieldBC': 1}, 'type': 'INTEGER'}, 'Version': {'named-numbers': {'multi': 1, 'two-prime': 0}, 'type': 'INTEGER'}}, 'values': {'emptyString': {'type': 'EncodingParameters', 'value': '0x'}, 'id-RSAES-OAEP': {'type': 'OBJECT IDENTIFIER', 'value': ['pkcs-1', 7]}, 'id-RSASSA-PSS': {'type': 'OBJECT IDENTIFIER', 'value': ['pkcs-1', 10]}, 'id-md2': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('digestAlgorithm', 2), 2]}, 'id-md5': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('digestAlgorithm', 2), 5]}, 'id-mgf1': {'type': 'OBJECT IDENTIFIER', 'value': ['pkcs-1', 8]}, 'id-pSpecified': {'type': 'OBJECT IDENTIFIER', 'value': ['pkcs-1', 9]}, 'id-sha1': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('identified-organization', 3), ('oiw', 14), ('secsig', 3), ('algorithms', 2), 26]}, 'md2WithRSAEncryption': {'type': 'OBJECT IDENTIFIER', 'value': ['pkcs-1', 2]}, 'md5WithRSAEncryption': {'type': 'OBJECT IDENTIFIER', 'value': ['pkcs-1', 4]}, 'mgf1SHA1': {'type': 'MaskGenAlgorithm', 'value': '{'}, 'pSpecifiedEmpty': {'type': 'PSourceAlgorithm', 'value': '{'}, 'pkcs-1': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), 1]}, 'rSAES-OAEP-Default-Identifier': {'type': 'RSAES-AlgorithmIdentifier', 'value': '{'}, 'rSASSA-PSS-Default-Identifier': {'type': 'RSASSA-AlgorithmIdentifier', 'value': '{'}, 'rsaEncryption': {'type': 'OBJECT IDENTIFIER', 'value': ['pkcs-1', 1]}, 'sha1': {'type': 'HashAlgorithm', 'value': '{'}, 'sha1WithRSAEncryption': {'type': 'OBJECT IDENTIFIER', 'value': ['pkcs-1', 5]}, 'sha256WithRSAEncryption': {'type': 'OBJECT IDENTIFIER', 'value': ['pkcs-1', 11]}, 'sha384WithRSAEncryption': {'type': 'OBJECT IDENTIFIER', 'value': ['pkcs-1', 12]}, 'sha512WithRSAEncryption': {'type': 'OBJECT IDENTIFIER', 'value': ['pkcs-1', 13]}}}}asn1tools-0.169.0/tests/files/ietf/rfc3852.asn000066400000000000000000000274611524544274600206330ustar00rootroot00000000000000CryptographicMessageSyntax2004 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0) cms-2004(24) } DEFINITIONS IMPLICIT TAGS ::= BEGIN -- EXPORTS All -- The types and values defined in this module are exported for use -- in the other ASN.1 modules. Other applications may use them for -- their own purposes. IMPORTS -- Imports from RFC 3280 [PROFILE], Appendix A.1 AlgorithmIdentifier, Certificate, CertificateList, CertificateSerialNumber, Name FROM PKIX1Explicit88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) mod(0) pkix1-explicit(18) } -- Imports from RFC 3281 [ACPROFILE], Appendix B AttributeCertificate FROM PKIXAttributeCertificate { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) mod(0) attribute-cert(12) } -- Imports from Appendix B of this document AttributeCertificateV1 FROM AttributeCertificateVersion1 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0) v1AttrCert(15) } ; -- Cryptographic Message Syntax ContentInfo ::= SEQUENCE { contentType ContentType, content [0] EXPLICIT ANY DEFINED BY contentType } ContentType ::= OBJECT IDENTIFIER SignedData ::= SEQUENCE { version CMSVersion, digestAlgorithms DigestAlgorithmIdentifiers, encapContentInfo EncapsulatedContentInfo, certificates [0] IMPLICIT CertificateSet OPTIONAL, crls [1] IMPLICIT RevocationInfoChoices OPTIONAL, signerInfos SignerInfos } DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier SignerInfos ::= SET OF SignerInfo EncapsulatedContentInfo ::= SEQUENCE { eContentType ContentType, eContent [0] EXPLICIT OCTET STRING OPTIONAL } SignerInfo ::= SEQUENCE { version CMSVersion, sid SignerIdentifier, digestAlgorithm DigestAlgorithmIdentifier, signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL, signatureAlgorithm SignatureAlgorithmIdentifier, signature SignatureValue, unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL } SignerIdentifier ::= CHOICE { issuerAndSerialNumber IssuerAndSerialNumber, subjectKeyIdentifier [0] SubjectKeyIdentifier } SignedAttributes ::= SET SIZE (1..MAX) OF Attribute UnsignedAttributes ::= SET SIZE (1..MAX) OF Attribute Attribute ::= SEQUENCE { attrType OBJECT IDENTIFIER, attrValues SET OF AttributeValue } AttributeValue ::= ANY SignatureValue ::= OCTET STRING EnvelopedData ::= SEQUENCE { version CMSVersion, originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL, recipientInfos RecipientInfos, encryptedContentInfo EncryptedContentInfo, unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL } OriginatorInfo ::= SEQUENCE { certs [0] IMPLICIT CertificateSet OPTIONAL, crls [1] IMPLICIT RevocationInfoChoices OPTIONAL } RecipientInfos ::= SET SIZE (1..MAX) OF RecipientInfo EncryptedContentInfo ::= SEQUENCE { contentType ContentType, contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier, encryptedContent [0] IMPLICIT EncryptedContent OPTIONAL } EncryptedContent ::= OCTET STRING UnprotectedAttributes ::= SET SIZE (1..MAX) OF Attribute RecipientInfo ::= CHOICE { ktri KeyTransRecipientInfo, kari [1] KeyAgreeRecipientInfo, kekri [2] KEKRecipientInfo, pwri [3] PasswordRecipientInfo, ori [4] OtherRecipientInfo } EncryptedKey ::= OCTET STRING KeyTransRecipientInfo ::= SEQUENCE { version CMSVersion, -- always set to 0 or 2 rid RecipientIdentifier, keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, encryptedKey EncryptedKey } RecipientIdentifier ::= CHOICE { issuerAndSerialNumber IssuerAndSerialNumber, subjectKeyIdentifier [0] SubjectKeyIdentifier } KeyAgreeRecipientInfo ::= SEQUENCE { version CMSVersion, -- always set to 3 originator [0] EXPLICIT OriginatorIdentifierOrKey, ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL, keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, recipientEncryptedKeys RecipientEncryptedKeys } OriginatorIdentifierOrKey ::= CHOICE { issuerAndSerialNumber IssuerAndSerialNumber, subjectKeyIdentifier [0] SubjectKeyIdentifier, originatorKey [1] OriginatorPublicKey } OriginatorPublicKey ::= SEQUENCE { algorithm AlgorithmIdentifier, publicKey BIT STRING } RecipientEncryptedKeys ::= SEQUENCE OF RecipientEncryptedKey RecipientEncryptedKey ::= SEQUENCE { rid KeyAgreeRecipientIdentifier, encryptedKey EncryptedKey } KeyAgreeRecipientIdentifier ::= CHOICE { issuerAndSerialNumber IssuerAndSerialNumber, rKeyId [0] IMPLICIT RecipientKeyIdentifier } RecipientKeyIdentifier ::= SEQUENCE { subjectKeyIdentifier SubjectKeyIdentifier, date GeneralizedTime OPTIONAL, other OtherKeyAttribute OPTIONAL } SubjectKeyIdentifier ::= OCTET STRING KEKRecipientInfo ::= SEQUENCE { version CMSVersion, -- always set to 4 kekid KEKIdentifier, keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, encryptedKey EncryptedKey } KEKIdentifier ::= SEQUENCE { keyIdentifier OCTET STRING, date GeneralizedTime OPTIONAL, other OtherKeyAttribute OPTIONAL } PasswordRecipientInfo ::= SEQUENCE { version CMSVersion, -- always set to 0 keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier OPTIONAL, keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, encryptedKey EncryptedKey } OtherRecipientInfo ::= SEQUENCE { oriType OBJECT IDENTIFIER, oriValue ANY DEFINED BY oriType } DigestedData ::= SEQUENCE { version CMSVersion, digestAlgorithm DigestAlgorithmIdentifier, encapContentInfo EncapsulatedContentInfo, digest Digest } Digest ::= OCTET STRING EncryptedData ::= SEQUENCE { version CMSVersion, encryptedContentInfo EncryptedContentInfo, unprotectedAttrs [1] IMPLICIT UnprotectedAttributes OPTIONAL } AuthenticatedData ::= SEQUENCE { version CMSVersion, originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL, recipientInfos RecipientInfos, macAlgorithm MessageAuthenticationCodeAlgorithm, digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL, encapContentInfo EncapsulatedContentInfo, authAttrs [2] IMPLICIT AuthAttributes OPTIONAL, mac MessageAuthenticationCode, unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL } AuthAttributes ::= SET SIZE (1..MAX) OF Attribute UnauthAttributes ::= SET SIZE (1..MAX) OF Attribute MessageAuthenticationCode ::= OCTET STRING DigestAlgorithmIdentifier ::= AlgorithmIdentifier SignatureAlgorithmIdentifier ::= AlgorithmIdentifier KeyEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier MessageAuthenticationCodeAlgorithm ::= AlgorithmIdentifier KeyDerivationAlgorithmIdentifier ::= AlgorithmIdentifier RevocationInfoChoices ::= SET OF RevocationInfoChoice RevocationInfoChoice ::= CHOICE { crl CertificateList, other [1] IMPLICIT OtherRevocationInfoFormat } OtherRevocationInfoFormat ::= SEQUENCE { otherRevInfoFormat OBJECT IDENTIFIER, otherRevInfo ANY DEFINED BY otherRevInfoFormat } CertificateChoices ::= CHOICE { certificate Certificate, extendedCertificate [0] IMPLICIT ExtendedCertificate, -- Obsolete v1AttrCert [1] IMPLICIT AttributeCertificateV1, -- Obsolete v2AttrCert [2] IMPLICIT AttributeCertificateV2, other [3] IMPLICIT OtherCertificateFormat } AttributeCertificateV2 ::= AttributeCertificate OtherCertificateFormat ::= SEQUENCE { otherCertFormat OBJECT IDENTIFIER, otherCert ANY DEFINED BY otherCertFormat } CertificateSet ::= SET OF CertificateChoices IssuerAndSerialNumber ::= SEQUENCE { issuer Name, serialNumber CertificateSerialNumber } CMSVersion ::= INTEGER { v0(0), v1(1), v2(2), v3(3), v4(4), v5(5) } UserKeyingMaterial ::= OCTET STRING OtherKeyAttribute ::= SEQUENCE { keyAttrId OBJECT IDENTIFIER, keyAttr ANY DEFINED BY keyAttrId OPTIONAL } -- Content Type Object Identifiers id-ct-contentInfo OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) smime(16) ct(1) 6 } id-data OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 1 } id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 } id-envelopedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 3 } id-digestedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 5 } id-encryptedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs7(7) 6 } id-ct-authData OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 2 } -- The CMS Attributes MessageDigest ::= OCTET STRING SigningTime ::= Time Time ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime } Countersignature ::= SignerInfo -- Attribute Object Identifiers id-contentType OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 3 } id-messageDigest OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 4 } id-signingTime OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 5 } id-countersignature OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 6 } -- Obsolete Extended Certificate syntax from PKCS#6 ExtendedCertificateOrCertificate ::= CHOICE { certificate Certificate, extendedCertificate [0] IMPLICIT ExtendedCertificate } ExtendedCertificate ::= SEQUENCE { extendedCertificateInfo ExtendedCertificateInfo, signatureAlgorithm SignatureAlgorithmIdentifier, signature Signature } ExtendedCertificateInfo ::= SEQUENCE { version CMSVersion, certificate Certificate, attributes UnauthAttributes } Signature ::= BIT STRING END -- of CryptographicMessageSyntax2004 AttributeCertificateVersion1 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0) v1AttrCert(15) } DEFINITIONS EXPLICIT TAGS ::= BEGIN -- EXPORTS All IMPORTS -- Imports from RFC 3280 [PROFILE], Appendix A.1 AlgorithmIdentifier, Attribute, CertificateSerialNumber, Extensions, UniqueIdentifier FROM PKIX1Explicit88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) mod(0) pkix1-explicit(18) } -- Imports from RFC 3280 [PROFILE], Appendix A.2 GeneralNames FROM PKIX1Implicit88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) mod(0) pkix1-implicit(19) } -- Imports from RFC 3281 [ACPROFILE], Appendix B AttCertValidityPeriod, IssuerSerial FROM PKIXAttributeCertificate { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) mod(0) attribute-cert(12) } ; -- Definition extracted from X.509-1997 [X.509-97], but -- different type names are used to avoid collisions. AttributeCertificateV1 ::= SEQUENCE { acInfo AttributeCertificateInfoV1, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING } AttributeCertificateInfoV1 ::= SEQUENCE { version AttCertVersionV1 DEFAULT v1, subject CHOICE { baseCertificateID [0] IssuerSerial, -- associated with a Public Key Certificate subjectName [1] GeneralNames }, -- associated with a name issuer GeneralNames, signature AlgorithmIdentifier, serialNumber CertificateSerialNumber, attCertValidityPeriod AttCertValidityPeriod, attributes SEQUENCE OF Attribute, issuerUniqueID UniqueIdentifier OPTIONAL, extensions Extensions OPTIONAL } AttCertVersionV1 ::= INTEGER { v1(0) } END -- of AttributeCertificateVersion1 asn1tools-0.169.0/tests/files/ietf/rfc3852.py000066400000000000000000002026421524544274600204760ustar00rootroot00000000000000EXPECTED = {'AttributeCertificateVersion1': {'extensibility-implied': False, 'imports': {'PKIX1Explicit88': ['AlgorithmIdentifier', 'Attribute', 'CertificateSerialNumber', 'Extensions', 'UniqueIdentifier'], 'PKIX1Implicit88': ['GeneralNames'], 'PKIXAttributeCertificate': ['AttCertValidityPeriod', 'IssuerSerial']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'EXPLICIT', 'types': {'AttCertVersionV1': {'named-numbers': {'v1': 0}, 'type': 'INTEGER'}, 'AttributeCertificateInfoV1': {'members': [{'default': 'v1', 'name': 'version', 'type': 'AttCertVersionV1'}, {'members': [{'name': 'baseCertificateID', 'tag': {'number': 0}, 'type': 'IssuerSerial'}, {'name': 'subjectName', 'tag': {'number': 1}, 'type': 'GeneralNames'}], 'name': 'subject', 'type': 'CHOICE'}, {'name': 'issuer', 'type': 'GeneralNames'}, {'name': 'signature', 'type': 'AlgorithmIdentifier'}, {'name': 'serialNumber', 'type': 'CertificateSerialNumber'}, {'name': 'attCertValidityPeriod', 'type': 'AttCertValidityPeriod'}, {'element': {'type': 'Attribute'}, 'name': 'attributes', 'type': 'SEQUENCE ' 'OF'}, {'name': 'issuerUniqueID', 'optional': True, 'type': 'UniqueIdentifier'}, {'name': 'extensions', 'optional': True, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'AttributeCertificateV1': {'members': [{'name': 'acInfo', 'type': 'AttributeCertificateInfoV1'}, {'name': 'signatureAlgorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'signature', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}}, 'values': {}}, 'CryptographicMessageSyntax2004': {'extensibility-implied': False, 'imports': {'AttributeCertificateVersion1': ['AttributeCertificateV1'], 'PKIX1Explicit88': ['AlgorithmIdentifier', 'Certificate', 'CertificateList', 'CertificateSerialNumber', 'Name'], 'PKIXAttributeCertificate': ['AttributeCertificate']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'IMPLICIT', 'types': {'Attribute': {'members': [{'name': 'attrType', 'type': 'OBJECT ' 'IDENTIFIER'}, {'element': {'type': 'AttributeValue'}, 'name': 'attrValues', 'type': 'SET ' 'OF'}], 'type': 'SEQUENCE'}, 'AttributeCertificateV2': {'type': 'AttributeCertificate'}, 'AttributeValue': {'type': 'ANY'}, 'AuthAttributes': {'element': {'type': 'Attribute'}, 'size': [(1, 'MAX')], 'type': 'SET ' 'OF'}, 'AuthenticatedData': {'members': [{'name': 'version', 'type': 'CMSVersion'}, {'name': 'originatorInfo', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'OriginatorInfo'}, {'name': 'recipientInfos', 'type': 'RecipientInfos'}, {'name': 'macAlgorithm', 'type': 'MessageAuthenticationCodeAlgorithm'}, {'name': 'digestAlgorithm', 'optional': True, 'tag': {'number': 1}, 'type': 'DigestAlgorithmIdentifier'}, {'name': 'encapContentInfo', 'type': 'EncapsulatedContentInfo'}, {'name': 'authAttrs', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'AuthAttributes'}, {'name': 'mac', 'type': 'MessageAuthenticationCode'}, {'name': 'unauthAttrs', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'UnauthAttributes'}], 'type': 'SEQUENCE'}, 'CMSVersion': {'named-numbers': {'v0': 0, 'v1': 1, 'v2': 2, 'v3': 3, 'v4': 4, 'v5': 5}, 'type': 'INTEGER'}, 'CertificateChoices': {'members': [{'name': 'certificate', 'type': 'Certificate'}, {'name': 'extendedCertificate', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'ExtendedCertificate'}, {'name': 'v1AttrCert', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'AttributeCertificateV1'}, {'name': 'v2AttrCert', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'AttributeCertificateV2'}, {'name': 'other', 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'OtherCertificateFormat'}], 'type': 'CHOICE'}, 'CertificateSet': {'element': {'type': 'CertificateChoices'}, 'type': 'SET ' 'OF'}, 'ContentEncryptionAlgorithmIdentifier': {'type': 'AlgorithmIdentifier'}, 'ContentInfo': {'members': [{'name': 'contentType', 'type': 'ContentType'}, {'choices': {}, 'name': 'content', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'contentType'}], 'type': 'SEQUENCE'}, 'ContentType': {'type': 'OBJECT ' 'IDENTIFIER'}, 'Countersignature': {'type': 'SignerInfo'}, 'Digest': {'type': 'OCTET ' 'STRING'}, 'DigestAlgorithmIdentifier': {'type': 'AlgorithmIdentifier'}, 'DigestAlgorithmIdentifiers': {'element': {'type': 'DigestAlgorithmIdentifier'}, 'type': 'SET ' 'OF'}, 'DigestedData': {'members': [{'name': 'version', 'type': 'CMSVersion'}, {'name': 'digestAlgorithm', 'type': 'DigestAlgorithmIdentifier'}, {'name': 'encapContentInfo', 'type': 'EncapsulatedContentInfo'}, {'name': 'digest', 'type': 'Digest'}], 'type': 'SEQUENCE'}, 'EncapsulatedContentInfo': {'members': [{'name': 'eContentType', 'type': 'ContentType'}, {'name': 'eContent', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'EncryptedContent': {'type': 'OCTET ' 'STRING'}, 'EncryptedContentInfo': {'members': [{'name': 'contentType', 'type': 'ContentType'}, {'name': 'contentEncryptionAlgorithm', 'type': 'ContentEncryptionAlgorithmIdentifier'}, {'name': 'encryptedContent', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'EncryptedContent'}], 'type': 'SEQUENCE'}, 'EncryptedData': {'members': [{'name': 'version', 'type': 'CMSVersion'}, {'name': 'encryptedContentInfo', 'type': 'EncryptedContentInfo'}, {'name': 'unprotectedAttrs', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'UnprotectedAttributes'}], 'type': 'SEQUENCE'}, 'EncryptedKey': {'type': 'OCTET ' 'STRING'}, 'EnvelopedData': {'members': [{'name': 'version', 'type': 'CMSVersion'}, {'name': 'originatorInfo', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'OriginatorInfo'}, {'name': 'recipientInfos', 'type': 'RecipientInfos'}, {'name': 'encryptedContentInfo', 'type': 'EncryptedContentInfo'}, {'name': 'unprotectedAttrs', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'UnprotectedAttributes'}], 'type': 'SEQUENCE'}, 'ExtendedCertificate': {'members': [{'name': 'extendedCertificateInfo', 'type': 'ExtendedCertificateInfo'}, {'name': 'signatureAlgorithm', 'type': 'SignatureAlgorithmIdentifier'}, {'name': 'signature', 'type': 'Signature'}], 'type': 'SEQUENCE'}, 'ExtendedCertificateInfo': {'members': [{'name': 'version', 'type': 'CMSVersion'}, {'name': 'certificate', 'type': 'Certificate'}, {'name': 'attributes', 'type': 'UnauthAttributes'}], 'type': 'SEQUENCE'}, 'ExtendedCertificateOrCertificate': {'members': [{'name': 'certificate', 'type': 'Certificate'}, {'name': 'extendedCertificate', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'ExtendedCertificate'}], 'type': 'CHOICE'}, 'IssuerAndSerialNumber': {'members': [{'name': 'issuer', 'type': 'Name'}, {'name': 'serialNumber', 'type': 'CertificateSerialNumber'}], 'type': 'SEQUENCE'}, 'KEKIdentifier': {'members': [{'name': 'keyIdentifier', 'type': 'OCTET ' 'STRING'}, {'name': 'date', 'optional': True, 'type': 'GeneralizedTime'}, {'name': 'other', 'optional': True, 'type': 'OtherKeyAttribute'}], 'type': 'SEQUENCE'}, 'KEKRecipientInfo': {'members': [{'name': 'version', 'type': 'CMSVersion'}, {'name': 'kekid', 'type': 'KEKIdentifier'}, {'name': 'keyEncryptionAlgorithm', 'type': 'KeyEncryptionAlgorithmIdentifier'}, {'name': 'encryptedKey', 'type': 'EncryptedKey'}], 'type': 'SEQUENCE'}, 'KeyAgreeRecipientIdentifier': {'members': [{'name': 'issuerAndSerialNumber', 'type': 'IssuerAndSerialNumber'}, {'name': 'rKeyId', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'RecipientKeyIdentifier'}], 'type': 'CHOICE'}, 'KeyAgreeRecipientInfo': {'members': [{'name': 'version', 'type': 'CMSVersion'}, {'name': 'originator', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'OriginatorIdentifierOrKey'}, {'name': 'ukm', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 1}, 'type': 'UserKeyingMaterial'}, {'name': 'keyEncryptionAlgorithm', 'type': 'KeyEncryptionAlgorithmIdentifier'}, {'name': 'recipientEncryptedKeys', 'type': 'RecipientEncryptedKeys'}], 'type': 'SEQUENCE'}, 'KeyDerivationAlgorithmIdentifier': {'type': 'AlgorithmIdentifier'}, 'KeyEncryptionAlgorithmIdentifier': {'type': 'AlgorithmIdentifier'}, 'KeyTransRecipientInfo': {'members': [{'name': 'version', 'type': 'CMSVersion'}, {'name': 'rid', 'type': 'RecipientIdentifier'}, {'name': 'keyEncryptionAlgorithm', 'type': 'KeyEncryptionAlgorithmIdentifier'}, {'name': 'encryptedKey', 'type': 'EncryptedKey'}], 'type': 'SEQUENCE'}, 'MessageAuthenticationCode': {'type': 'OCTET ' 'STRING'}, 'MessageAuthenticationCodeAlgorithm': {'type': 'AlgorithmIdentifier'}, 'MessageDigest': {'type': 'OCTET ' 'STRING'}, 'OriginatorIdentifierOrKey': {'members': [{'name': 'issuerAndSerialNumber', 'type': 'IssuerAndSerialNumber'}, {'name': 'subjectKeyIdentifier', 'tag': {'number': 0}, 'type': 'SubjectKeyIdentifier'}, {'name': 'originatorKey', 'tag': {'number': 1}, 'type': 'OriginatorPublicKey'}], 'type': 'CHOICE'}, 'OriginatorInfo': {'members': [{'name': 'certs', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'CertificateSet'}, {'name': 'crls', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'RevocationInfoChoices'}], 'type': 'SEQUENCE'}, 'OriginatorPublicKey': {'members': [{'name': 'algorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'publicKey', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'OtherCertificateFormat': {'members': [{'name': 'otherCertFormat', 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'otherCert', 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'otherCertFormat'}], 'type': 'SEQUENCE'}, 'OtherKeyAttribute': {'members': [{'name': 'keyAttrId', 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'keyAttr', 'optional': True, 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'keyAttrId'}], 'type': 'SEQUENCE'}, 'OtherRecipientInfo': {'members': [{'name': 'oriType', 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'oriValue', 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'oriType'}], 'type': 'SEQUENCE'}, 'OtherRevocationInfoFormat': {'members': [{'name': 'otherRevInfoFormat', 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'otherRevInfo', 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'otherRevInfoFormat'}], 'type': 'SEQUENCE'}, 'PasswordRecipientInfo': {'members': [{'name': 'version', 'type': 'CMSVersion'}, {'name': 'keyDerivationAlgorithm', 'optional': True, 'tag': {'number': 0}, 'type': 'KeyDerivationAlgorithmIdentifier'}, {'name': 'keyEncryptionAlgorithm', 'type': 'KeyEncryptionAlgorithmIdentifier'}, {'name': 'encryptedKey', 'type': 'EncryptedKey'}], 'type': 'SEQUENCE'}, 'RecipientEncryptedKey': {'members': [{'name': 'rid', 'type': 'KeyAgreeRecipientIdentifier'}, {'name': 'encryptedKey', 'type': 'EncryptedKey'}], 'type': 'SEQUENCE'}, 'RecipientEncryptedKeys': {'element': {'type': 'RecipientEncryptedKey'}, 'type': 'SEQUENCE ' 'OF'}, 'RecipientIdentifier': {'members': [{'name': 'issuerAndSerialNumber', 'type': 'IssuerAndSerialNumber'}, {'name': 'subjectKeyIdentifier', 'tag': {'number': 0}, 'type': 'SubjectKeyIdentifier'}], 'type': 'CHOICE'}, 'RecipientInfo': {'members': [{'name': 'ktri', 'type': 'KeyTransRecipientInfo'}, {'name': 'kari', 'tag': {'number': 1}, 'type': 'KeyAgreeRecipientInfo'}, {'name': 'kekri', 'tag': {'number': 2}, 'type': 'KEKRecipientInfo'}, {'name': 'pwri', 'tag': {'number': 3}, 'type': 'PasswordRecipientInfo'}, {'name': 'ori', 'tag': {'number': 4}, 'type': 'OtherRecipientInfo'}], 'type': 'CHOICE'}, 'RecipientInfos': {'element': {'type': 'RecipientInfo'}, 'size': [(1, 'MAX')], 'type': 'SET ' 'OF'}, 'RecipientKeyIdentifier': {'members': [{'name': 'subjectKeyIdentifier', 'type': 'SubjectKeyIdentifier'}, {'name': 'date', 'optional': True, 'type': 'GeneralizedTime'}, {'name': 'other', 'optional': True, 'type': 'OtherKeyAttribute'}], 'type': 'SEQUENCE'}, 'RevocationInfoChoice': {'members': [{'name': 'crl', 'type': 'CertificateList'}, {'name': 'other', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'OtherRevocationInfoFormat'}], 'type': 'CHOICE'}, 'RevocationInfoChoices': {'element': {'type': 'RevocationInfoChoice'}, 'type': 'SET ' 'OF'}, 'Signature': {'type': 'BIT ' 'STRING'}, 'SignatureAlgorithmIdentifier': {'type': 'AlgorithmIdentifier'}, 'SignatureValue': {'type': 'OCTET ' 'STRING'}, 'SignedAttributes': {'element': {'type': 'Attribute'}, 'size': [(1, 'MAX')], 'type': 'SET ' 'OF'}, 'SignedData': {'members': [{'name': 'version', 'type': 'CMSVersion'}, {'name': 'digestAlgorithms', 'type': 'DigestAlgorithmIdentifiers'}, {'name': 'encapContentInfo', 'type': 'EncapsulatedContentInfo'}, {'name': 'certificates', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'CertificateSet'}, {'name': 'crls', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'RevocationInfoChoices'}, {'name': 'signerInfos', 'type': 'SignerInfos'}], 'type': 'SEQUENCE'}, 'SignerIdentifier': {'members': [{'name': 'issuerAndSerialNumber', 'type': 'IssuerAndSerialNumber'}, {'name': 'subjectKeyIdentifier', 'tag': {'number': 0}, 'type': 'SubjectKeyIdentifier'}], 'type': 'CHOICE'}, 'SignerInfo': {'members': [{'name': 'version', 'type': 'CMSVersion'}, {'name': 'sid', 'type': 'SignerIdentifier'}, {'name': 'digestAlgorithm', 'type': 'DigestAlgorithmIdentifier'}, {'name': 'signedAttrs', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'SignedAttributes'}, {'name': 'signatureAlgorithm', 'type': 'SignatureAlgorithmIdentifier'}, {'name': 'signature', 'type': 'SignatureValue'}, {'name': 'unsignedAttrs', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'UnsignedAttributes'}], 'type': 'SEQUENCE'}, 'SignerInfos': {'element': {'type': 'SignerInfo'}, 'type': 'SET OF'}, 'SigningTime': {'type': 'Time'}, 'SubjectKeyIdentifier': {'type': 'OCTET ' 'STRING'}, 'Time': {'members': [{'name': 'utcTime', 'type': 'UTCTime'}, {'name': 'generalTime', 'type': 'GeneralizedTime'}], 'type': 'CHOICE'}, 'UnauthAttributes': {'element': {'type': 'Attribute'}, 'size': [(1, 'MAX')], 'type': 'SET ' 'OF'}, 'UnprotectedAttributes': {'element': {'type': 'Attribute'}, 'size': [(1, 'MAX')], 'type': 'SET ' 'OF'}, 'UnsignedAttributes': {'element': {'type': 'Attribute'}, 'size': [(1, 'MAX')], 'type': 'SET ' 'OF'}, 'UserKeyingMaterial': {'type': 'OCTET ' 'STRING'}}, 'values': {'id-contentType': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs9', 9), 3]}, 'id-countersignature': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs9', 9), 6]}, 'id-ct-authData': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs-9', 9), ('smime', 16), ('ct', 1), 2]}, 'id-ct-contentInfo': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs9', 9), ('smime', 16), ('ct', 1), 6]}, 'id-data': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs7', 7), 1]}, 'id-digestedData': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs7', 7), 5]}, 'id-encryptedData': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs7', 7), 6]}, 'id-envelopedData': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs7', 7), 3]}, 'id-messageDigest': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs9', 9), 4]}, 'id-signedData': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs7', 7), 2]}, 'id-signingTime': {'type': 'OBJECT ' 'IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs9', 9), 5]}}}}asn1tools-0.169.0/tests/files/ietf/rfc4210.asn000066400000000000000000000503331524544274600206120ustar00rootroot00000000000000PKIXCMP {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-cmp2000(16)} DEFINITIONS EXPLICIT TAGS ::= BEGIN -- EXPORTS ALL -- IMPORTS Certificate, CertificateList, Extensions, AlgorithmIdentifier, UTF8String -- if required; otherwise, comment out FROM PKIX1Explicit88 {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit-88(1)} GeneralName, KeyIdentifier FROM PKIX1Implicit88 {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)} CertTemplate, PKIPublicationInfo, EncryptedValue, CertId, CertReqMessages FROM PKIXCRMF-2005 {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-crmf2005(36)} -- see also the behavioral clarifications to CRMF codified in -- Appendix C of this specification CertificationRequest FROM PKCS-10 {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-10(10) modules(1) pkcs-10(1)} -- (specified in RFC 2986 with 1993 ASN.1 syntax and IMPLICIT -- tags). Alternatively, implementers may directly include -- the [PKCS10] syntax in this module ; -- the rest of the module contains locally-defined OIDs and -- constructs CMPCertificate ::= CHOICE { x509v3PKCert Certificate } -- This syntax, while bits-on-the-wire compatible with the -- standard X.509 definition of "Certificate", allows the -- possibility of future certificate types (such as X.509 -- attribute certificates, WAP WTLS certificates, or other kinds -- of certificates) within this certificate management protocol, -- should a need ever arise to support such generality. Those -- implementations that do not foresee a need to ever support -- other certificate types MAY, if they wish, comment out the -- above structure and "un-comment" the following one prior to -- compiling this ASN.1 module. (Note that interoperability -- with implementations that don't do this will be unaffected by -- this change.) -- CMPCertificate ::= Certificate PKIMessage ::= SEQUENCE { header PKIHeader, body PKIBody, protection [0] PKIProtection OPTIONAL, extraCerts [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate OPTIONAL } PKIMessages ::= SEQUENCE SIZE (1..MAX) OF PKIMessage PKIHeader ::= SEQUENCE { pvno INTEGER { cmp1999(1), cmp2000(2) }, sender GeneralName, -- identifies the sender recipient GeneralName, -- identifies the intended recipient messageTime [0] GeneralizedTime OPTIONAL, -- time of production of this message (used when sender -- believes that the transport will be "suitable"; i.e., -- that the time will still be meaningful upon receipt) protectionAlg [1] AlgorithmIdentifier OPTIONAL, -- algorithm used for calculation of protection bits senderKID [2] KeyIdentifier OPTIONAL, recipKID [3] KeyIdentifier OPTIONAL, -- to identify specific keys used for protection transactionID [4] OCTET STRING OPTIONAL, -- identifies the transaction; i.e., this will be the same in -- corresponding request, response, certConf, and PKIConf -- messages senderNonce [5] OCTET STRING OPTIONAL, recipNonce [6] OCTET STRING OPTIONAL, -- nonces used to provide replay protection, senderNonce -- is inserted by the creator of this message; recipNonce -- is a nonce previously inserted in a related message by -- the intended recipient of this message freeText [7] PKIFreeText OPTIONAL, -- this may be used to indicate context-specific instructions -- (this field is intended for human consumption) generalInfo [8] SEQUENCE SIZE (1..MAX) OF InfoTypeAndValue OPTIONAL -- this may be used to convey context-specific information -- (this field not primarily intended for human consumption) } PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String -- text encoded as UTF-8 String [RFC3629] (note: each -- UTF8String MAY include an [RFC3066] language tag -- to indicate the language of the contained text -- see [RFC2482] for details) PKIBody ::= CHOICE { -- message-specific body elements ir [0] CertReqMessages, --Initialization Request ip [1] CertRepMessage, --Initialization Response cr [2] CertReqMessages, --Certification Request cp [3] CertRepMessage, --Certification Response p10cr [4] CertificationRequest, --imported from [PKCS10] popdecc [5] POPODecKeyChallContent, --pop Challenge popdecr [6] POPODecKeyRespContent, --pop Response kur [7] CertReqMessages, --Key Update Request kup [8] CertRepMessage, --Key Update Response krr [9] CertReqMessages, --Key Recovery Request krp [10] KeyRecRepContent, --Key Recovery Response rr [11] RevReqContent, --Revocation Request rp [12] RevRepContent, --Revocation Response ccr [13] CertReqMessages, --Cross-Cert. Request ccp [14] CertRepMessage, --Cross-Cert. Response ckuann [15] CAKeyUpdAnnContent, --CA Key Update Ann. cann [16] CertAnnContent, --Certificate Ann. rann [17] RevAnnContent, --Revocation Ann. crlann [18] CRLAnnContent, --CRL Announcement pkiconf [19] PKIConfirmContent, --Confirmation nested [20] NestedMessageContent, --Nested Message genm [21] GenMsgContent, --General Message genp [22] GenRepContent, --General Response error [23] ErrorMsgContent, --Error Message certConf [24] CertConfirmContent, --Certificate confirm pollReq [25] PollReqContent, --Polling request pollRep [26] PollRepContent --Polling response } PKIProtection ::= BIT STRING ProtectedPart ::= SEQUENCE { header PKIHeader, body PKIBody } id-PasswordBasedMac OBJECT IDENTIFIER ::= {1 2 840 113533 7 66 13} PBMParameter ::= SEQUENCE { salt OCTET STRING, -- note: implementations MAY wish to limit acceptable sizes -- of this string to values appropriate for their environment -- in order to reduce the risk of denial-of-service attacks owf AlgorithmIdentifier, -- AlgId for a One-Way Function (SHA-1 recommended) iterationCount INTEGER, -- number of times the OWF is applied -- note: implementations MAY wish to limit acceptable sizes -- of this integer to values appropriate for their environment -- in order to reduce the risk of denial-of-service attacks mac AlgorithmIdentifier -- the MAC AlgId (e.g., DES-MAC, Triple-DES-MAC [PKCS11], } -- or HMAC [RFC2104, RFC2202]) id-DHBasedMac OBJECT IDENTIFIER ::= {1 2 840 113533 7 66 30} DHBMParameter ::= SEQUENCE { owf AlgorithmIdentifier, -- AlgId for a One-Way Function (SHA-1 recommended) mac AlgorithmIdentifier -- the MAC AlgId (e.g., DES-MAC, Triple-DES-MAC [PKCS11], } -- or HMAC [RFC2104, RFC2202]) NestedMessageContent ::= PKIMessages PKIStatus ::= INTEGER { accepted (0), -- you got exactly what you asked for grantedWithMods (1), -- you got something like what you asked for; the -- requester is responsible for ascertaining the differences rejection (2), -- you don't get it, more information elsewhere in the message waiting (3), -- the request body part has not yet been processed; expect to -- hear more later (note: proper handling of this status -- response MAY use the polling req/rep PKIMessages specified -- in Section 5.3.22; alternatively, polling in the underlying -- transport layer MAY have some utility in this regard) revocationWarning (4), -- this message contains a warning that a revocation is -- imminent revocationNotification (5), -- notification that a revocation has occurred keyUpdateWarning (6) -- update already done for the oldCertId specified in -- CertReqMsg } PKIFailureInfo ::= BIT STRING { -- since we can fail in more than one way! -- More codes may be added in the future if/when required. badAlg (0), -- unrecognized or unsupported Algorithm Identifier badMessageCheck (1), -- integrity check failed (e.g., signature did not verify) badRequest (2), -- transaction not permitted or supported badTime (3), -- messageTime was not sufficiently close to the system time, -- as defined by local policy badCertId (4), -- no certificate could be found matching the provided criteria badDataFormat (5), -- the data submitted has the wrong format wrongAuthority (6), -- the authority indicated in the request is different from the -- one creating the response token incorrectData (7), -- the requester's data is incorrect (for notary services) missingTimeStamp (8), -- when the timestamp is missing but should be there -- (by policy) badPOP (9), -- the proof-of-possession failed certRevoked (10), -- the certificate has already been revoked certConfirmed (11), -- the certificate has already been confirmed wrongIntegrity (12), -- invalid integrity, password based instead of signature or -- vice versa badRecipientNonce (13), -- invalid recipient nonce, either missing or wrong value timeNotAvailable (14), -- the TSA's time source is not available unacceptedPolicy (15), -- the requested TSA policy is not supported by the TSA. unacceptedExtension (16), -- the requested extension is not supported by the TSA. addInfoNotAvailable (17), -- the additional information requested could not be -- understood or is not available badSenderNonce (18), -- invalid sender nonce, either missing or wrong size badCertTemplate (19), -- invalid cert. template or missing mandatory information signerNotTrusted (20), -- signer of the message unknown or not trusted transactionIdInUse (21), -- the transaction identifier is already in use unsupportedVersion (22), -- the version of the message is not supported notAuthorized (23), -- the sender was not authorized to make the preceding -- request or perform the preceding action systemUnavail (24), -- the request cannot be handled due to system unavailability systemFailure (25), -- the request cannot be handled due to system failure duplicateCertReq (26) -- certificate cannot be issued because a duplicate -- certificate already exists } PKIStatusInfo ::= SEQUENCE { status PKIStatus, statusString PKIFreeText OPTIONAL, failInfo PKIFailureInfo OPTIONAL } OOBCert ::= CMPCertificate OOBCertHash ::= SEQUENCE { hashAlg [0] AlgorithmIdentifier OPTIONAL, certId [1] CertId OPTIONAL, hashVal BIT STRING -- hashVal is calculated over the DER encoding of the -- self-signed certificate with the identifier certID. } POPODecKeyChallContent ::= SEQUENCE OF Challenge -- One Challenge per encryption key certification request (in the -- same order as these requests appear in CertReqMessages). Challenge ::= SEQUENCE { owf AlgorithmIdentifier OPTIONAL, -- MUST be present in the first Challenge; MAY be omitted in -- any subsequent Challenge in POPODecKeyChallContent (if -- omitted, then the owf used in the immediately preceding -- Challenge is to be used). witness OCTET STRING, -- the result of applying the one-way function (owf) to a -- randomly-generated INTEGER, A. [Note that a different -- INTEGER MUST be used for each Challenge.] challenge OCTET STRING -- the encryption (under the public key for which the cert. -- request is being made) of Rand, where Rand is specified as -- Rand ::= SEQUENCE { -- int INTEGER, -- - the randomly-generated INTEGER A (above) -- sender GeneralName -- - the sender's name (as included in PKIHeader) -- } } POPODecKeyRespContent ::= SEQUENCE OF INTEGER -- One INTEGER per encryption key certification request (in the -- same order as these requests appear in CertReqMessages). The -- retrieved INTEGER A (above) is returned to the sender of the -- corresponding Challenge. CertRepMessage ::= SEQUENCE { caPubs [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate OPTIONAL, response SEQUENCE OF CertResponse } CertResponse ::= SEQUENCE { certReqId INTEGER, -- to match this response with corresponding request (a value -- of -1 is to be used if certReqId is not specified in the -- corresponding request) status PKIStatusInfo, certifiedKeyPair CertifiedKeyPair OPTIONAL, rspInfo OCTET STRING OPTIONAL -- analogous to the id-regInfo-utf8Pairs string defined -- for regInfo in CertReqMsg [CRMF] } CertifiedKeyPair ::= SEQUENCE { certOrEncCert CertOrEncCert, privateKey [0] EncryptedValue OPTIONAL, -- see [CRMF] for comment on encoding publicationInfo [1] PKIPublicationInfo OPTIONAL } CertOrEncCert ::= CHOICE { certificate [0] CMPCertificate, encryptedCert [1] EncryptedValue } KeyRecRepContent ::= SEQUENCE { status PKIStatusInfo, newSigCert [0] CMPCertificate OPTIONAL, caCerts [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate OPTIONAL, keyPairHist [2] SEQUENCE SIZE (1..MAX) OF CertifiedKeyPair OPTIONAL } RevReqContent ::= SEQUENCE OF RevDetails RevDetails ::= SEQUENCE { certDetails CertTemplate, -- allows requester to specify as much as they can about -- the cert. for which revocation is requested -- (e.g., for cases in which serialNumber is not available) crlEntryDetails Extensions OPTIONAL -- requested crlEntryExtensions } RevRepContent ::= SEQUENCE { status SEQUENCE SIZE (1..MAX) OF PKIStatusInfo, -- in same order as was sent in RevReqContent revCerts [0] SEQUENCE SIZE (1..MAX) OF CertId OPTIONAL, -- IDs for which revocation was requested -- (same order as status) crls [1] SEQUENCE SIZE (1..MAX) OF CertificateList OPTIONAL -- the resulting CRLs (there may be more than one) } CAKeyUpdAnnContent ::= SEQUENCE { oldWithNew CMPCertificate, -- old pub signed with new priv newWithOld CMPCertificate, -- new pub signed with old priv newWithNew CMPCertificate -- new pub signed with new priv } CertAnnContent ::= CMPCertificate RevAnnContent ::= SEQUENCE { status PKIStatus, certId CertId, willBeRevokedAt GeneralizedTime, badSinceDate GeneralizedTime, crlDetails Extensions OPTIONAL -- extra CRL details (e.g., crl number, reason, location, etc.) } CRLAnnContent ::= SEQUENCE OF CertificateList CertConfirmContent ::= SEQUENCE OF CertStatus CertStatus ::= SEQUENCE { certHash OCTET STRING, -- the hash of the certificate, using the same hash algorithm -- as is used to create and verify the certificate signature certReqId INTEGER, -- to match this confirmation with the corresponding req/rep statusInfo PKIStatusInfo OPTIONAL } PKIConfirmContent ::= NULL InfoTypeAndValue ::= SEQUENCE { infoType OBJECT IDENTIFIER, infoValue ANY DEFINED BY infoType OPTIONAL } -- Example InfoTypeAndValue contents include, but are not limited -- to, the following (un-comment in this ASN.1 module and use as -- appropriate for a given environment): -- -- id-it-caProtEncCert OBJECT IDENTIFIER ::= {id-it 1} -- CAProtEncCertValue ::= CMPCertificate -- id-it-signKeyPairTypes OBJECT IDENTIFIER ::= {id-it 2} -- SignKeyPairTypesValue ::= SEQUENCE OF AlgorithmIdentifier -- id-it-encKeyPairTypes OBJECT IDENTIFIER ::= {id-it 3} -- EncKeyPairTypesValue ::= SEQUENCE OF AlgorithmIdentifier -- id-it-preferredSymmAlg OBJECT IDENTIFIER ::= {id-it 4} -- PreferredSymmAlgValue ::= AlgorithmIdentifier -- id-it-caKeyUpdateInfo OBJECT IDENTIFIER ::= {id-it 5} -- CAKeyUpdateInfoValue ::= CAKeyUpdAnnContent -- id-it-currentCRL OBJECT IDENTIFIER ::= {id-it 6} -- CurrentCRLValue ::= CertificateList -- id-it-unsupportedOIDs OBJECT IDENTIFIER ::= {id-it 7} -- UnsupportedOIDsValue ::= SEQUENCE OF OBJECT IDENTIFIER -- id-it-keyPairParamReq OBJECT IDENTIFIER ::= {id-it 10} -- KeyPairParamReqValue ::= OBJECT IDENTIFIER -- id-it-keyPairParamRep OBJECT IDENTIFIER ::= {id-it 11} -- KeyPairParamRepValue ::= AlgorithmIdentifer -- id-it-revPassphrase OBJECT IDENTIFIER ::= {id-it 12} -- RevPassphraseValue ::= EncryptedValue -- id-it-implicitConfirm OBJECT IDENTIFIER ::= {id-it 13} -- ImplicitConfirmValue ::= NULL -- id-it-confirmWaitTime OBJECT IDENTIFIER ::= {id-it 14} -- ConfirmWaitTimeValue ::= GeneralizedTime -- id-it-origPKIMessage OBJECT IDENTIFIER ::= {id-it 15} -- OrigPKIMessageValue ::= PKIMessages -- id-it-suppLangTags OBJECT IDENTIFIER ::= {id-it 16} -- SuppLangTagsValue ::= SEQUENCE OF UTF8String -- -- where -- -- id-pkix OBJECT IDENTIFIER ::= { -- iso(1) identified-organization(3) -- dod(6) internet(1) security(5) mechanisms(5) pkix(7)} -- and -- id-it OBJECT IDENTIFIER ::= {id-pkix 4} -- -- -- This construct MAY also be used to define new PKIX Certificate -- Management Protocol request and response messages, or general- -- purpose (e.g., announcement) messages for future needs or for -- specific environments. GenMsgContent ::= SEQUENCE OF InfoTypeAndValue -- May be sent by EE, RA, or CA (depending on message content). -- The OPTIONAL infoValue parameter of InfoTypeAndValue will -- typically be omitted for some of the examples given above. -- The receiver is free to ignore any contained OBJ. IDs that it -- does not recognize. If sent from EE to CA, the empty set -- indicates that the CA may send -- any/all information that it wishes. GenRepContent ::= SEQUENCE OF InfoTypeAndValue -- Receiver MAY ignore any contained OIDs that it does not -- recognize. ErrorMsgContent ::= SEQUENCE { pKIStatusInfo PKIStatusInfo, errorCode INTEGER OPTIONAL, -- implementation-specific error codes errorDetails PKIFreeText OPTIONAL -- implementation-specific error details } PollReqContent ::= SEQUENCE OF SEQUENCE { certReqId INTEGER } PollRepContent ::= SEQUENCE OF SEQUENCE { certReqId INTEGER, checkAfter INTEGER, -- time in seconds reason PKIFreeText OPTIONAL } END -- of CMP module asn1tools-0.169.0/tests/files/ietf/rfc4210.py000066400000000000000000000772361524544274600204740ustar00rootroot00000000000000EXPECTED = {'PKIXCMP': {'extensibility-implied': False, 'imports': {'PKCS-10': ['CertificationRequest'], 'PKIX1Explicit88': ['AlgorithmIdentifier', 'Certificate', 'CertificateList', 'Extensions', 'UTF8String'], 'PKIX1Implicit88': ['GeneralName', 'KeyIdentifier'], 'PKIXCRMF-2005': ['CertId', 'CertReqMessages', 'CertTemplate', 'EncryptedValue', 'PKIPublicationInfo']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'EXPLICIT', 'types': {'CAKeyUpdAnnContent': {'members': [{'name': 'oldWithNew', 'type': 'CMPCertificate'}, {'name': 'newWithOld', 'type': 'CMPCertificate'}, {'name': 'newWithNew', 'type': 'CMPCertificate'}], 'type': 'SEQUENCE'}, 'CMPCertificate': {'members': [{'name': 'x509v3PKCert', 'type': 'Certificate'}], 'type': 'CHOICE'}, 'CRLAnnContent': {'element': {'type': 'CertificateList'}, 'type': 'SEQUENCE OF'}, 'CertAnnContent': {'type': 'CMPCertificate'}, 'CertConfirmContent': {'element': {'type': 'CertStatus'}, 'type': 'SEQUENCE OF'}, 'CertOrEncCert': {'members': [{'name': 'certificate', 'tag': {'number': 0}, 'type': 'CMPCertificate'}, {'name': 'encryptedCert', 'tag': {'number': 1}, 'type': 'EncryptedValue'}], 'type': 'CHOICE'}, 'CertRepMessage': {'members': [{'element': {'type': 'CMPCertificate'}, 'name': 'caPubs', 'optional': True, 'size': [(1, 'MAX')], 'tag': {'number': 1}, 'type': 'SEQUENCE OF'}, {'element': {'type': 'CertResponse'}, 'name': 'response', 'type': 'SEQUENCE OF'}], 'type': 'SEQUENCE'}, 'CertResponse': {'members': [{'name': 'certReqId', 'type': 'INTEGER'}, {'name': 'status', 'type': 'PKIStatusInfo'}, {'name': 'certifiedKeyPair', 'optional': True, 'type': 'CertifiedKeyPair'}, {'name': 'rspInfo', 'optional': True, 'type': 'OCTET STRING'}], 'type': 'SEQUENCE'}, 'CertStatus': {'members': [{'name': 'certHash', 'type': 'OCTET STRING'}, {'name': 'certReqId', 'type': 'INTEGER'}, {'name': 'statusInfo', 'optional': True, 'type': 'PKIStatusInfo'}], 'type': 'SEQUENCE'}, 'CertifiedKeyPair': {'members': [{'name': 'certOrEncCert', 'type': 'CertOrEncCert'}, {'name': 'privateKey', 'optional': True, 'tag': {'number': 0}, 'type': 'EncryptedValue'}, {'name': 'publicationInfo', 'optional': True, 'tag': {'number': 1}, 'type': 'PKIPublicationInfo'}], 'type': 'SEQUENCE'}, 'Challenge': {'members': [{'name': 'owf', 'optional': True, 'type': 'AlgorithmIdentifier'}, {'name': 'witness', 'type': 'OCTET STRING'}, {'name': 'challenge', 'type': 'OCTET STRING'}], 'type': 'SEQUENCE'}, 'DHBMParameter': {'members': [{'name': 'owf', 'type': 'AlgorithmIdentifier'}, {'name': 'mac', 'type': 'AlgorithmIdentifier'}], 'type': 'SEQUENCE'}, 'ErrorMsgContent': {'members': [{'name': 'pKIStatusInfo', 'type': 'PKIStatusInfo'}, {'name': 'errorCode', 'optional': True, 'type': 'INTEGER'}, {'name': 'errorDetails', 'optional': True, 'type': 'PKIFreeText'}], 'type': 'SEQUENCE'}, 'GenMsgContent': {'element': {'type': 'InfoTypeAndValue'}, 'type': 'SEQUENCE OF'}, 'GenRepContent': {'element': {'type': 'InfoTypeAndValue'}, 'type': 'SEQUENCE OF'}, 'InfoTypeAndValue': {'members': [{'name': 'infoType', 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'infoValue', 'optional': True, 'type': 'ANY DEFINED ' 'BY', 'value': 'infoType'}], 'type': 'SEQUENCE'}, 'KeyRecRepContent': {'members': [{'name': 'status', 'type': 'PKIStatusInfo'}, {'name': 'newSigCert', 'optional': True, 'tag': {'number': 0}, 'type': 'CMPCertificate'}, {'element': {'type': 'CMPCertificate'}, 'name': 'caCerts', 'optional': True, 'size': [(1, 'MAX')], 'tag': {'number': 1}, 'type': 'SEQUENCE OF'}, {'element': {'type': 'CertifiedKeyPair'}, 'name': 'keyPairHist', 'optional': True, 'size': [(1, 'MAX')], 'tag': {'number': 2}, 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'NestedMessageContent': {'type': 'PKIMessages'}, 'OOBCert': {'type': 'CMPCertificate'}, 'OOBCertHash': {'members': [{'name': 'hashAlg', 'optional': True, 'tag': {'number': 0}, 'type': 'AlgorithmIdentifier'}, {'name': 'certId', 'optional': True, 'tag': {'number': 1}, 'type': 'CertId'}, {'name': 'hashVal', 'type': 'BIT STRING'}], 'type': 'SEQUENCE'}, 'PBMParameter': {'members': [{'name': 'salt', 'type': 'OCTET STRING'}, {'name': 'owf', 'type': 'AlgorithmIdentifier'}, {'name': 'iterationCount', 'type': 'INTEGER'}, {'name': 'mac', 'type': 'AlgorithmIdentifier'}], 'type': 'SEQUENCE'}, 'PKIBody': {'members': [{'name': 'ir', 'tag': {'number': 0}, 'type': 'CertReqMessages'}, {'name': 'ip', 'tag': {'number': 1}, 'type': 'CertRepMessage'}, {'name': 'cr', 'tag': {'number': 2}, 'type': 'CertReqMessages'}, {'name': 'cp', 'tag': {'number': 3}, 'type': 'CertRepMessage'}, {'name': 'p10cr', 'tag': {'number': 4}, 'type': 'CertificationRequest'}, {'name': 'popdecc', 'tag': {'number': 5}, 'type': 'POPODecKeyChallContent'}, {'name': 'popdecr', 'tag': {'number': 6}, 'type': 'POPODecKeyRespContent'}, {'name': 'kur', 'tag': {'number': 7}, 'type': 'CertReqMessages'}, {'name': 'kup', 'tag': {'number': 8}, 'type': 'CertRepMessage'}, {'name': 'krr', 'tag': {'number': 9}, 'type': 'CertReqMessages'}, {'name': 'krp', 'tag': {'number': 10}, 'type': 'KeyRecRepContent'}, {'name': 'rr', 'tag': {'number': 11}, 'type': 'RevReqContent'}, {'name': 'rp', 'tag': {'number': 12}, 'type': 'RevRepContent'}, {'name': 'ccr', 'tag': {'number': 13}, 'type': 'CertReqMessages'}, {'name': 'ccp', 'tag': {'number': 14}, 'type': 'CertRepMessage'}, {'name': 'ckuann', 'tag': {'number': 15}, 'type': 'CAKeyUpdAnnContent'}, {'name': 'cann', 'tag': {'number': 16}, 'type': 'CertAnnContent'}, {'name': 'rann', 'tag': {'number': 17}, 'type': 'RevAnnContent'}, {'name': 'crlann', 'tag': {'number': 18}, 'type': 'CRLAnnContent'}, {'name': 'pkiconf', 'tag': {'number': 19}, 'type': 'PKIConfirmContent'}, {'name': 'nested', 'tag': {'number': 20}, 'type': 'NestedMessageContent'}, {'name': 'genm', 'tag': {'number': 21}, 'type': 'GenMsgContent'}, {'name': 'genp', 'tag': {'number': 22}, 'type': 'GenRepContent'}, {'name': 'error', 'tag': {'number': 23}, 'type': 'ErrorMsgContent'}, {'name': 'certConf', 'tag': {'number': 24}, 'type': 'CertConfirmContent'}, {'name': 'pollReq', 'tag': {'number': 25}, 'type': 'PollReqContent'}, {'name': 'pollRep', 'tag': {'number': 26}, 'type': 'PollRepContent'}], 'type': 'CHOICE'}, 'PKIConfirmContent': {'type': 'NULL'}, 'PKIFailureInfo': {'named-bits': [('badAlg', '0'), ('badMessageCheck', '1'), ('badRequest', '2'), ('badTime', '3'), ('badCertId', '4'), ('badDataFormat', '5'), ('wrongAuthority', '6'), ('incorrectData', '7'), ('missingTimeStamp', '8'), ('badPOP', '9'), ('certRevoked', '10'), ('certConfirmed', '11'), ('wrongIntegrity', '12'), ('badRecipientNonce', '13'), ('timeNotAvailable', '14'), ('unacceptedPolicy', '15'), ('unacceptedExtension', '16'), ('addInfoNotAvailable', '17'), ('badSenderNonce', '18'), ('badCertTemplate', '19'), ('signerNotTrusted', '20'), ('transactionIdInUse', '21'), ('unsupportedVersion', '22'), ('notAuthorized', '23'), ('systemUnavail', '24'), ('systemFailure', '25'), ('duplicateCertReq', '26')], 'type': 'BIT STRING'}, 'PKIFreeText': {'element': {'type': 'UTF8String'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'PKIHeader': {'members': [{'name': 'pvno', 'named-numbers': {'cmp1999': 1, 'cmp2000': 2}, 'type': 'INTEGER'}, {'name': 'sender', 'type': 'GeneralName'}, {'name': 'recipient', 'type': 'GeneralName'}, {'name': 'messageTime', 'optional': True, 'tag': {'number': 0}, 'type': 'GeneralizedTime'}, {'name': 'protectionAlg', 'optional': True, 'tag': {'number': 1}, 'type': 'AlgorithmIdentifier'}, {'name': 'senderKID', 'optional': True, 'tag': {'number': 2}, 'type': 'KeyIdentifier'}, {'name': 'recipKID', 'optional': True, 'tag': {'number': 3}, 'type': 'KeyIdentifier'}, {'name': 'transactionID', 'optional': True, 'tag': {'number': 4}, 'type': 'OCTET STRING'}, {'name': 'senderNonce', 'optional': True, 'tag': {'number': 5}, 'type': 'OCTET STRING'}, {'name': 'recipNonce', 'optional': True, 'tag': {'number': 6}, 'type': 'OCTET STRING'}, {'name': 'freeText', 'optional': True, 'tag': {'number': 7}, 'type': 'PKIFreeText'}, {'element': {'type': 'InfoTypeAndValue'}, 'name': 'generalInfo', 'optional': True, 'size': [(1, 'MAX')], 'tag': {'number': 8}, 'type': 'SEQUENCE OF'}], 'type': 'SEQUENCE'}, 'PKIMessage': {'members': [{'name': 'header', 'type': 'PKIHeader'}, {'name': 'body', 'type': 'PKIBody'}, {'name': 'protection', 'optional': True, 'tag': {'number': 0}, 'type': 'PKIProtection'}, {'element': {'type': 'CMPCertificate'}, 'name': 'extraCerts', 'optional': True, 'size': [(1, 'MAX')], 'tag': {'number': 1}, 'type': 'SEQUENCE OF'}], 'type': 'SEQUENCE'}, 'PKIMessages': {'element': {'type': 'PKIMessage'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'PKIProtection': {'type': 'BIT STRING'}, 'PKIStatus': {'named-numbers': {'accepted': 0, 'grantedWithMods': 1, 'keyUpdateWarning': 6, 'rejection': 2, 'revocationNotification': 5, 'revocationWarning': 4, 'waiting': 3}, 'type': 'INTEGER'}, 'PKIStatusInfo': {'members': [{'name': 'status', 'type': 'PKIStatus'}, {'name': 'statusString', 'optional': True, 'type': 'PKIFreeText'}, {'name': 'failInfo', 'optional': True, 'type': 'PKIFailureInfo'}], 'type': 'SEQUENCE'}, 'POPODecKeyChallContent': {'element': {'type': 'Challenge'}, 'type': 'SEQUENCE OF'}, 'POPODecKeyRespContent': {'element': {'type': 'INTEGER'}, 'type': 'SEQUENCE OF'}, 'PollRepContent': {'element': {'members': [{'name': 'certReqId', 'type': 'INTEGER'}, {'name': 'checkAfter', 'type': 'INTEGER'}, {'name': 'reason', 'optional': True, 'type': 'PKIFreeText'}], 'type': 'SEQUENCE'}, 'type': 'SEQUENCE OF'}, 'PollReqContent': {'element': {'members': [{'name': 'certReqId', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'type': 'SEQUENCE OF'}, 'ProtectedPart': {'members': [{'name': 'header', 'type': 'PKIHeader'}, {'name': 'body', 'type': 'PKIBody'}], 'type': 'SEQUENCE'}, 'RevAnnContent': {'members': [{'name': 'status', 'type': 'PKIStatus'}, {'name': 'certId', 'type': 'CertId'}, {'name': 'willBeRevokedAt', 'type': 'GeneralizedTime'}, {'name': 'badSinceDate', 'type': 'GeneralizedTime'}, {'name': 'crlDetails', 'optional': True, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'RevDetails': {'members': [{'name': 'certDetails', 'type': 'CertTemplate'}, {'name': 'crlEntryDetails', 'optional': True, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'RevRepContent': {'members': [{'element': {'type': 'PKIStatusInfo'}, 'name': 'status', 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, {'element': {'type': 'CertId'}, 'name': 'revCerts', 'optional': True, 'size': [(1, 'MAX')], 'tag': {'number': 0}, 'type': 'SEQUENCE OF'}, {'element': {'type': 'CertificateList'}, 'name': 'crls', 'optional': True, 'size': [(1, 'MAX')], 'tag': {'number': 1}, 'type': 'SEQUENCE OF'}], 'type': 'SEQUENCE'}, 'RevReqContent': {'element': {'type': 'RevDetails'}, 'type': 'SEQUENCE OF'}}, 'values': {'id-DHBasedMac': {'type': 'OBJECT IDENTIFIER', 'value': [1, 2, 840, 113533, 7, 66, 30]}, 'id-PasswordBasedMac': {'type': 'OBJECT IDENTIFIER', 'value': [1, 2, 840, 113533, 7, 66, 13]}}}}asn1tools-0.169.0/tests/files/ietf/rfc4211.asn000066400000000000000000000246061524544274600206170ustar00rootroot00000000000000PKIXCRMF-2005 {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-crmf2005(36)} DEFINITIONS IMPLICIT TAGS ::= BEGIN IMPORTS -- Directory Authentication Framework (X.509) Version, AlgorithmIdentifier, Name, Time, SubjectPublicKeyInfo, Extensions, UniqueIdentifier, Attribute FROM PKIX1Explicit88 {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18)} -- found in [PROFILE] -- Certificate Extensions (X.509) GeneralName FROM PKIX1Implicit88 {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit(19)} -- found in [PROFILE] -- Cryptographic Message Syntax EnvelopedData FROM CryptographicMessageSyntax2004 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0) cms-2004(24) }; -- found in [CMS] -- The following definition may be uncommented for use with -- ASN.1 compilers that do not understand UTF8String. -- UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING -- The contents of this type correspond to RFC 2279. id-pkix OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) 7 } -- arc for Internet X.509 PKI protocols and their components id-pkip OBJECT IDENTIFIER ::= { id-pkix 5 } id-smime OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 16 } id-ct OBJECT IDENTIFIER ::= { id-smime 1 } -- content types -- Core definitions for this module CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg CertReqMsg ::= SEQUENCE { certReq CertRequest, popo ProofOfPossession OPTIONAL, -- content depends upon key type regInfo SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL } CertRequest ::= SEQUENCE { certReqId INTEGER, -- ID for matching request and reply certTemplate CertTemplate, -- Selected fields of cert to be issued controls Controls OPTIONAL } -- Attributes affecting issuance CertTemplate ::= SEQUENCE { version [0] Version OPTIONAL, serialNumber [1] INTEGER OPTIONAL, signingAlg [2] AlgorithmIdentifier OPTIONAL, issuer [3] Name OPTIONAL, validity [4] OptionalValidity OPTIONAL, subject [5] Name OPTIONAL, publicKey [6] SubjectPublicKeyInfo OPTIONAL, issuerUID [7] UniqueIdentifier OPTIONAL, subjectUID [8] UniqueIdentifier OPTIONAL, extensions [9] Extensions OPTIONAL } OptionalValidity ::= SEQUENCE { notBefore [0] Time OPTIONAL, notAfter [1] Time OPTIONAL } -- at least one MUST be present Controls ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue AttributeTypeAndValue ::= SEQUENCE { type OBJECT IDENTIFIER, value ANY DEFINED BY type } ProofOfPossession ::= CHOICE { raVerified [0] NULL, -- used if the RA has already verified that the requester is in -- possession of the private key signature [1] POPOSigningKey, keyEncipherment [2] POPOPrivKey, keyAgreement [3] POPOPrivKey } POPOSigningKey ::= SEQUENCE { poposkInput [0] POPOSigningKeyInput OPTIONAL, algorithmIdentifier AlgorithmIdentifier, signature BIT STRING } -- The signature (using "algorithmIdentifier") is on the -- DER-encoded value of poposkInput. NOTE: If the CertReqMsg -- certReq CertTemplate contains the subject and publicKey values, -- then poposkInput MUST be omitted and the signature MUST be -- computed over the DER-encoded value of CertReqMsg certReq. If -- the CertReqMsg certReq CertTemplate does not contain both the -- public key and subject values (i.e., if it contains only one -- of these, or neither), then poposkInput MUST be present and -- MUST be signed. POPOSigningKeyInput ::= SEQUENCE { authInfo CHOICE { sender [0] GeneralName, -- used only if an authenticated identity has been -- established for the sender (e.g., a DN from a -- previously-issued and currently-valid certificate) publicKeyMAC PKMACValue }, -- used if no authenticated GeneralName currently exists for -- the sender; publicKeyMAC contains a password-based MAC -- on the DER-encoded value of publicKey publicKey SubjectPublicKeyInfo } -- from CertTemplate PKMACValue ::= SEQUENCE { algId AlgorithmIdentifier, -- algorithm value shall be PasswordBasedMac {1 2 840 113533 7 66 13} -- parameter value is PBMParameter value BIT STRING } PBMParameter ::= SEQUENCE { salt OCTET STRING, owf AlgorithmIdentifier, -- AlgId for a One-Way Function (SHA-1 recommended) iterationCount INTEGER, -- number of times the OWF is applied mac AlgorithmIdentifier -- the MAC AlgId (e.g., DES-MAC, Triple-DES-MAC [PKCS11], } -- or HMAC [HMAC, RFC2202]) POPOPrivKey ::= CHOICE { thisMessage [0] BIT STRING, -- Deprecated -- possession is proven in this message (which contains the private -- key itself (encrypted for the CA)) subsequentMessage [1] SubsequentMessage, -- possession will be proven in a subsequent message dhMAC [2] BIT STRING, -- Deprecated agreeMAC [3] PKMACValue, encryptedKey [4] EnvelopedData } -- for keyAgreement (only), possession is proven in this message -- (which contains a MAC (over the DER-encoded value of the -- certReq parameter in CertReqMsg, which MUST include both subject -- and publicKey) based on a key derived from the end entity's -- private DH key and the CA's public DH key); SubsequentMessage ::= INTEGER { encrCert (0), -- requests that resulting certificate be encrypted for the -- end entity (following which, POP will be proven in a -- confirmation message) challengeResp (1) } -- requests that CA engage in challenge-response exchange with -- end entity in order to prove private key possession -- Object identifier assignments -- -- Registration Controls in CRMF id-regCtrl OBJECT IDENTIFIER ::= { id-pkip 1 } id-regCtrl-regToken OBJECT IDENTIFIER ::= { id-regCtrl 1 } --with syntax: RegToken ::= UTF8String id-regCtrl-authenticator OBJECT IDENTIFIER ::= { id-regCtrl 2 } --with syntax: Authenticator ::= UTF8String id-regCtrl-pkiPublicationInfo OBJECT IDENTIFIER ::= { id-regCtrl 3 } --with syntax: PKIPublicationInfo ::= SEQUENCE { action INTEGER { dontPublish (0), pleasePublish (1) }, pubInfos SEQUENCE SIZE (1..MAX) OF SinglePubInfo OPTIONAL } -- pubInfos MUST NOT be present if action is "dontPublish" -- (if action is "pleasePublish" and pubInfos is omitted, -- "dontCare" is assumed) SinglePubInfo ::= SEQUENCE { pubMethod INTEGER { dontCare (0), x500 (1), web (2), ldap (3) }, pubLocation GeneralName OPTIONAL } id-regCtrl-pkiArchiveOptions OBJECT IDENTIFIER ::= { id-regCtrl 4 } --with syntax: PKIArchiveOptions ::= CHOICE { encryptedPrivKey [0] EncryptedKey, -- the actual value of the private key keyGenParameters [1] KeyGenParameters, -- parameters that allow the private key to be re-generated archiveRemGenPrivKey [2] BOOLEAN } -- set to TRUE if sender wishes receiver to archive the private -- key of a key pair that the receiver generates in response to -- this request; set to FALSE if no archival is desired. EncryptedKey ::= CHOICE { encryptedValue EncryptedValue, -- Deprecated envelopedData [0] EnvelopedData } -- The encrypted private key MUST be placed in the envelopedData -- encryptedContentInfo encryptedContent OCTET STRING. EncryptedValue ::= SEQUENCE { intendedAlg [0] AlgorithmIdentifier OPTIONAL, -- the intended algorithm for which the value will be used symmAlg [1] AlgorithmIdentifier OPTIONAL, -- the symmetric algorithm used to encrypt the value encSymmKey [2] BIT STRING OPTIONAL, -- the (encrypted) symmetric key used to encrypt the value keyAlg [3] AlgorithmIdentifier OPTIONAL, -- algorithm used to encrypt the symmetric key valueHint [4] OCTET STRING OPTIONAL, -- a brief description or identifier of the encValue content -- (may be meaningful only to the sending entity, and used only -- if EncryptedValue might be re-examined by the sending entity -- in the future) encValue BIT STRING } -- the encrypted value itself -- When EncryptedValue is used to carry a private key (as opposed to -- a certificate), implementations MUST support the encValue field -- containing an encrypted PrivateKeyInfo as defined in [PKCS11], -- section 12.11. If encValue contains some other format/encoding -- for the private key, the first octet of valueHint MAY be used -- to indicate the format/encoding (but note that the possible values -- of this octet are not specified at this time). In all cases, the -- intendedAlg field MUST be used to indicate at least the OID of -- the intended algorithm of the private key, unless this information -- is known a priori to both sender and receiver by some other means. KeyGenParameters ::= OCTET STRING id-regCtrl-oldCertID OBJECT IDENTIFIER ::= { id-regCtrl 5 } --with syntax: OldCertId ::= CertId CertId ::= SEQUENCE { issuer GeneralName, serialNumber INTEGER } id-regCtrl-protocolEncrKey OBJECT IDENTIFIER ::= { id-regCtrl 6 } --with syntax: ProtocolEncrKey ::= SubjectPublicKeyInfo -- Registration Info in CRMF id-regInfo OBJECT IDENTIFIER ::= { id-pkip 2 } id-regInfo-utf8Pairs OBJECT IDENTIFIER ::= { id-regInfo 1 } --with syntax UTF8Pairs ::= UTF8String id-regInfo-certReq OBJECT IDENTIFIER ::= { id-regInfo 2 } --with syntax CertReq ::= CertRequest -- id-ct-encKeyWithID is a new content type used for CMS objects. -- it contains both a private key and an identifier for key escrow -- agents to check against recovery requestors. id-ct-encKeyWithID OBJECT IDENTIFIER ::= {id-ct 21} EncKeyWithID ::= SEQUENCE { privateKey PrivateKeyInfo, identifier CHOICE { string UTF8String, generalName GeneralName } OPTIONAL } PrivateKeyInfo ::= SEQUENCE { version INTEGER, privateKeyAlgorithm AlgorithmIdentifier, privateKey OCTET STRING, attributes [0] IMPLICIT Attributes OPTIONAL } Attributes ::= SET OF Attribute END asn1tools-0.169.0/tests/files/ietf/rfc4211.py000066400000000000000000000626271524544274600204730ustar00rootroot00000000000000EXPECTED = {'PKIXCRMF-2005': {'extensibility-implied': False, 'imports': {'CryptographicMessageSyntax2004': ['EnvelopedData'], 'PKIX1Explicit88': ['AlgorithmIdentifier', 'Attribute', 'Extensions', 'Name', 'SubjectPublicKeyInfo', 'Time', 'UniqueIdentifier', 'Version'], 'PKIX1Implicit88': ['GeneralName']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'IMPLICIT', 'types': {'AttributeTypeAndValue': {'members': [{'name': 'type', 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'value', 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'type'}], 'type': 'SEQUENCE'}, 'Attributes': {'element': {'type': 'Attribute'}, 'type': 'SET OF'}, 'Authenticator': {'type': 'UTF8String'}, 'CertId': {'members': [{'name': 'issuer', 'type': 'GeneralName'}, {'name': 'serialNumber', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'CertReq': {'type': 'CertRequest'}, 'CertReqMessages': {'element': {'type': 'CertReqMsg'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'CertReqMsg': {'members': [{'name': 'certReq', 'type': 'CertRequest'}, {'name': 'popo', 'optional': True, 'type': 'ProofOfPossession'}, {'element': {'type': 'AttributeTypeAndValue'}, 'name': 'regInfo', 'optional': True, 'size': [(1, 'MAX')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'CertRequest': {'members': [{'name': 'certReqId', 'type': 'INTEGER'}, {'name': 'certTemplate', 'type': 'CertTemplate'}, {'name': 'controls', 'optional': True, 'type': 'Controls'}], 'type': 'SEQUENCE'}, 'CertTemplate': {'members': [{'name': 'version', 'optional': True, 'tag': {'number': 0}, 'type': 'Version'}, {'name': 'serialNumber', 'optional': True, 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'signingAlg', 'optional': True, 'tag': {'number': 2}, 'type': 'AlgorithmIdentifier'}, {'name': 'issuer', 'optional': True, 'tag': {'number': 3}, 'type': 'Name'}, {'name': 'validity', 'optional': True, 'tag': {'number': 4}, 'type': 'OptionalValidity'}, {'name': 'subject', 'optional': True, 'tag': {'number': 5}, 'type': 'Name'}, {'name': 'publicKey', 'optional': True, 'tag': {'number': 6}, 'type': 'SubjectPublicKeyInfo'}, {'name': 'issuerUID', 'optional': True, 'tag': {'number': 7}, 'type': 'UniqueIdentifier'}, {'name': 'subjectUID', 'optional': True, 'tag': {'number': 8}, 'type': 'UniqueIdentifier'}, {'name': 'extensions', 'optional': True, 'tag': {'number': 9}, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'Controls': {'element': {'type': 'AttributeTypeAndValue'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'EncKeyWithID': {'members': [{'name': 'privateKey', 'type': 'PrivateKeyInfo'}, {'members': [{'name': 'string', 'type': 'UTF8String'}, {'name': 'generalName', 'type': 'GeneralName'}], 'name': 'identifier', 'optional': True, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'EncryptedKey': {'members': [{'name': 'encryptedValue', 'type': 'EncryptedValue'}, {'name': 'envelopedData', 'tag': {'number': 0}, 'type': 'EnvelopedData'}], 'type': 'CHOICE'}, 'EncryptedValue': {'members': [{'name': 'intendedAlg', 'optional': True, 'tag': {'number': 0}, 'type': 'AlgorithmIdentifier'}, {'name': 'symmAlg', 'optional': True, 'tag': {'number': 1}, 'type': 'AlgorithmIdentifier'}, {'name': 'encSymmKey', 'optional': True, 'tag': {'number': 2}, 'type': 'BIT ' 'STRING'}, {'name': 'keyAlg', 'optional': True, 'tag': {'number': 3}, 'type': 'AlgorithmIdentifier'}, {'name': 'valueHint', 'optional': True, 'tag': {'number': 4}, 'type': 'OCTET ' 'STRING'}, {'name': 'encValue', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'KeyGenParameters': {'type': 'OCTET STRING'}, 'OldCertId': {'type': 'CertId'}, 'OptionalValidity': {'members': [{'name': 'notBefore', 'optional': True, 'tag': {'number': 0}, 'type': 'Time'}, {'name': 'notAfter', 'optional': True, 'tag': {'number': 1}, 'type': 'Time'}], 'type': 'SEQUENCE'}, 'PBMParameter': {'members': [{'name': 'salt', 'type': 'OCTET ' 'STRING'}, {'name': 'owf', 'type': 'AlgorithmIdentifier'}, {'name': 'iterationCount', 'type': 'INTEGER'}, {'name': 'mac', 'type': 'AlgorithmIdentifier'}], 'type': 'SEQUENCE'}, 'PKIArchiveOptions': {'members': [{'name': 'encryptedPrivKey', 'tag': {'number': 0}, 'type': 'EncryptedKey'}, {'name': 'keyGenParameters', 'tag': {'number': 1}, 'type': 'KeyGenParameters'}, {'name': 'archiveRemGenPrivKey', 'tag': {'number': 2}, 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'PKIPublicationInfo': {'members': [{'name': 'action', 'named-numbers': {'dontPublish': 0, 'pleasePublish': 1}, 'type': 'INTEGER'}, {'element': {'type': 'SinglePubInfo'}, 'name': 'pubInfos', 'optional': True, 'size': [(1, 'MAX')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'PKMACValue': {'members': [{'name': 'algId', 'type': 'AlgorithmIdentifier'}, {'name': 'value', 'type': 'BIT STRING'}], 'type': 'SEQUENCE'}, 'POPOPrivKey': {'members': [{'name': 'thisMessage', 'tag': {'number': 0}, 'type': 'BIT STRING'}, {'name': 'subsequentMessage', 'tag': {'number': 1}, 'type': 'SubsequentMessage'}, {'name': 'dhMAC', 'tag': {'number': 2}, 'type': 'BIT STRING'}, {'name': 'agreeMAC', 'tag': {'number': 3}, 'type': 'PKMACValue'}, {'name': 'encryptedKey', 'tag': {'number': 4}, 'type': 'EnvelopedData'}], 'type': 'CHOICE'}, 'POPOSigningKey': {'members': [{'name': 'poposkInput', 'optional': True, 'tag': {'number': 0}, 'type': 'POPOSigningKeyInput'}, {'name': 'algorithmIdentifier', 'type': 'AlgorithmIdentifier'}, {'name': 'signature', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'POPOSigningKeyInput': {'members': [{'members': [{'name': 'sender', 'tag': {'number': 0}, 'type': 'GeneralName'}, {'name': 'publicKeyMAC', 'type': 'PKMACValue'}], 'name': 'authInfo', 'type': 'CHOICE'}, {'name': 'publicKey', 'type': 'SubjectPublicKeyInfo'}], 'type': 'SEQUENCE'}, 'PrivateKeyInfo': {'members': [{'name': 'version', 'type': 'INTEGER'}, {'name': 'privateKeyAlgorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'privateKey', 'type': 'OCTET ' 'STRING'}, {'name': 'attributes', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'Attributes'}], 'type': 'SEQUENCE'}, 'ProofOfPossession': {'members': [{'name': 'raVerified', 'tag': {'number': 0}, 'type': 'NULL'}, {'name': 'signature', 'tag': {'number': 1}, 'type': 'POPOSigningKey'}, {'name': 'keyEncipherment', 'tag': {'number': 2}, 'type': 'POPOPrivKey'}, {'name': 'keyAgreement', 'tag': {'number': 3}, 'type': 'POPOPrivKey'}], 'type': 'CHOICE'}, 'ProtocolEncrKey': {'type': 'SubjectPublicKeyInfo'}, 'RegToken': {'type': 'UTF8String'}, 'SinglePubInfo': {'members': [{'name': 'pubMethod', 'named-numbers': {'dontCare': 0, 'ldap': 3, 'web': 2, 'x500': 1}, 'type': 'INTEGER'}, {'name': 'pubLocation', 'optional': True, 'type': 'GeneralName'}], 'type': 'SEQUENCE'}, 'SubsequentMessage': {'named-numbers': {'challengeResp': 1, 'encrCert': 0}, 'type': 'INTEGER'}, 'UTF8Pairs': {'type': 'UTF8String'}}, 'values': {'id-ct': {'type': 'OBJECT IDENTIFIER', 'value': ['id-smime', 1]}, 'id-ct-encKeyWithID': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ct', 21]}, 'id-pkip': {'type': 'OBJECT IDENTIFIER', 'value': ['id-pkix', 5]}, 'id-pkix': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('identified-organization', 3), ('dod', 6), ('internet', 1), ('security', 5), ('mechanisms', 5), 7]}, 'id-regCtrl': {'type': 'OBJECT IDENTIFIER', 'value': ['id-pkip', 1]}, 'id-regCtrl-authenticator': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-regCtrl', 2]}, 'id-regCtrl-oldCertID': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-regCtrl', 5]}, 'id-regCtrl-pkiArchiveOptions': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-regCtrl', 4]}, 'id-regCtrl-pkiPublicationInfo': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-regCtrl', 3]}, 'id-regCtrl-protocolEncrKey': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-regCtrl', 6]}, 'id-regCtrl-regToken': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-regCtrl', 1]}, 'id-regInfo': {'type': 'OBJECT IDENTIFIER', 'value': ['id-pkip', 2]}, 'id-regInfo-certReq': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-regInfo', 2]}, 'id-regInfo-utf8Pairs': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-regInfo', 1]}, 'id-smime': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), ('pkcs9', 9), 16]}}}}asn1tools-0.169.0/tests/files/ietf/rfc4511.py000066400000000000000000001477721524544274600205030ustar00rootroot00000000000000EXPECTED = {'Lightweight-Directory-Access-Protocol-V3': {'extensibility-implied': True, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'IMPLICIT', 'types': {'AbandonRequest': {'tag': {'class': 'APPLICATION', 'number': 16}, 'type': 'MessageID'}, 'AddRequest': {'members': [{'name': 'entry', 'type': 'LDAPDN'}, {'name': 'attributes', 'type': 'AttributeList'}], 'tag': {'class': 'APPLICATION', 'number': 8}, 'type': 'SEQUENCE'}, 'AddResponse': {'tag': {'class': 'APPLICATION', 'number': 9}, 'type': 'LDAPResult'}, 'AssertionValue': {'type': 'OCTET ' 'STRING'}, 'Attribute': {'type': 'PartialAttribute', 'with-components': [None, ('vals', {'size': [(1, 'MAX')]})]}, 'AttributeDescription': {'type': 'LDAPString'}, 'AttributeList': {'element': {'type': 'Attribute'}, 'element_name': 'attribute', 'type': 'SEQUENCE ' 'OF'}, 'AttributeSelection': {'element': {'type': 'LDAPString'}, 'element_name': 'selector', 'type': 'SEQUENCE ' 'OF'}, 'AttributeValue': {'type': 'OCTET ' 'STRING'}, 'AttributeValueAssertion': {'members': [{'name': 'attributeDesc', 'type': 'AttributeDescription'}, {'name': 'assertionValue', 'type': 'AssertionValue'}], 'type': 'SEQUENCE'}, 'AuthenticationChoice': {'members': [{'name': 'simple', 'tag': {'number': 0}, 'type': 'OCTET ' 'STRING'}, {'name': 'sasl', 'tag': {'number': 3}, 'type': 'SaslCredentials'}, None], 'type': 'CHOICE'}, 'BindRequest': {'members': [{'name': 'version', 'restricted-to': [(1, 127)], 'type': 'INTEGER'}, {'name': 'name', 'type': 'LDAPDN'}, {'name': 'authentication', 'type': 'AuthenticationChoice'}], 'tag': {'class': 'APPLICATION', 'number': 0}, 'type': 'SEQUENCE'}, 'BindResponse': {'members': [{'components-of': 'LDAPResult'}, {'name': 'serverSaslCreds', 'optional': True, 'tag': {'number': 7}, 'type': 'OCTET ' 'STRING'}], 'tag': {'class': 'APPLICATION', 'number': 1}, 'type': 'SEQUENCE'}, 'CompareRequest': {'members': [{'name': 'entry', 'type': 'LDAPDN'}, {'name': 'ava', 'type': 'AttributeValueAssertion'}], 'tag': {'class': 'APPLICATION', 'number': 14}, 'type': 'SEQUENCE'}, 'CompareResponse': {'tag': {'class': 'APPLICATION', 'number': 15}, 'type': 'LDAPResult'}, 'Control': {'members': [{'name': 'controlType', 'type': 'LDAPOID'}, {'default': False, 'name': 'criticality', 'type': 'BOOLEAN'}, {'name': 'controlValue', 'optional': True, 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'Controls': {'element': {'type': 'Control'}, 'element_name': 'control', 'type': 'SEQUENCE ' 'OF'}, 'DelRequest': {'tag': {'class': 'APPLICATION', 'number': 10}, 'type': 'LDAPDN'}, 'DelResponse': {'tag': {'class': 'APPLICATION', 'number': 11}, 'type': 'LDAPResult'}, 'ExtendedRequest': {'members': [{'name': 'requestName', 'tag': {'number': 0}, 'type': 'LDAPOID'}, {'name': 'requestValue', 'optional': True, 'tag': {'number': 1}, 'type': 'OCTET ' 'STRING'}], 'tag': {'class': 'APPLICATION', 'number': 23}, 'type': 'SEQUENCE'}, 'ExtendedResponse': {'members': [{'components-of': 'LDAPResult'}, {'name': 'responseName', 'optional': True, 'tag': {'number': 10}, 'type': 'LDAPOID'}, {'name': 'responseValue', 'optional': True, 'tag': {'number': 11}, 'type': 'OCTET ' 'STRING'}], 'tag': {'class': 'APPLICATION', 'number': 24}, 'type': 'SEQUENCE'}, 'Filter': {'members': [{'element': {'type': 'Filter'}, 'name': 'and', 'element_name': 'filter', 'size': [(1, 'MAX')], 'tag': {'number': 0}, 'type': 'SET ' 'OF'}, {'element': {'type': 'Filter'}, 'name': 'or', 'element_name': 'filter', 'size': [(1, 'MAX')], 'tag': {'number': 1}, 'type': 'SET ' 'OF'}, {'name': 'not', 'tag': {'number': 2}, 'type': 'Filter'}, {'name': 'equalityMatch', 'tag': {'number': 3}, 'type': 'AttributeValueAssertion'}, {'name': 'substrings', 'tag': {'number': 4}, 'type': 'SubstringFilter'}, {'name': 'greaterOrEqual', 'tag': {'number': 5}, 'type': 'AttributeValueAssertion'}, {'name': 'lessOrEqual', 'tag': {'number': 6}, 'type': 'AttributeValueAssertion'}, {'name': 'present', 'tag': {'number': 7}, 'type': 'AttributeDescription'}, {'name': 'approxMatch', 'tag': {'number': 8}, 'type': 'AttributeValueAssertion'}, {'name': 'extensibleMatch', 'tag': {'number': 9}, 'type': 'MatchingRuleAssertion'}, None], 'type': 'CHOICE'}, 'IntermediateResponse': {'members': [{'name': 'responseName', 'optional': True, 'tag': {'number': 0}, 'type': 'LDAPOID'}, {'name': 'responseValue', 'optional': True, 'tag': {'number': 1}, 'type': 'OCTET ' 'STRING'}], 'tag': {'class': 'APPLICATION', 'number': 25}, 'type': 'SEQUENCE'}, 'LDAPDN': {'type': 'LDAPString'}, 'LDAPMessage': {'members': [{'name': 'messageID', 'type': 'MessageID'}, {'members': [{'name': 'bindRequest', 'type': 'BindRequest'}, {'name': 'bindResponse', 'type': 'BindResponse'}, {'name': 'unbindRequest', 'type': 'UnbindRequest'}, {'name': 'searchRequest', 'type': 'SearchRequest'}, {'name': 'searchResEntry', 'type': 'SearchResultEntry'}, {'name': 'searchResDone', 'type': 'SearchResultDone'}, {'name': 'searchResRef', 'type': 'SearchResultReference'}, {'name': 'modifyRequest', 'type': 'ModifyRequest'}, {'name': 'modifyResponse', 'type': 'ModifyResponse'}, {'name': 'addRequest', 'type': 'AddRequest'}, {'name': 'addResponse', 'type': 'AddResponse'}, {'name': 'delRequest', 'type': 'DelRequest'}, {'name': 'delResponse', 'type': 'DelResponse'}, {'name': 'modDNRequest', 'type': 'ModifyDNRequest'}, {'name': 'modDNResponse', 'type': 'ModifyDNResponse'}, {'name': 'compareRequest', 'type': 'CompareRequest'}, {'name': 'compareResponse', 'type': 'CompareResponse'}, {'name': 'abandonRequest', 'type': 'AbandonRequest'}, {'name': 'extendedReq', 'type': 'ExtendedRequest'}, {'name': 'extendedResp', 'type': 'ExtendedResponse'}, None, {'name': 'intermediateResponse', 'type': 'IntermediateResponse'}], 'name': 'protocolOp', 'type': 'CHOICE'}, {'name': 'controls', 'optional': True, 'tag': {'number': 0}, 'type': 'Controls'}], 'type': 'SEQUENCE'}, 'LDAPOID': {'type': 'OCTET ' 'STRING'}, 'LDAPResult': {'members': [{'name': 'resultCode', 'type': 'ENUMERATED', 'values': [('success', 0), ('operationsError', 1), ('protocolError', 2), ('timeLimitExceeded', 3), ('sizeLimitExceeded', 4), ('compareFalse', 5), ('compareTrue', 6), ('authMethodNotSupported', 7), ('strongerAuthRequired', 8), ('referral', 10), ('adminLimitExceeded', 11), ('unavailableCriticalExtension', 12), ('confidentialityRequired', 13), ('saslBindInProgress', 14), ('noSuchAttribute', 16), ('undefinedAttributeType', 17), ('inappropriateMatching', 18), ('constraintViolation', 19), ('attributeOrValueExists', 20), ('invalidAttributeSyntax', 21), ('noSuchObject', 32), ('aliasProblem', 33), ('invalidDNSyntax', 34), ('aliasDereferencingProblem', 36), ('inappropriateAuthentication', 48), ('invalidCredentials', 49), ('insufficientAccessRights', 50), ('busy', 51), ('unavailable', 52), ('unwillingToPerform', 53), ('loopDetect', 54), ('namingViolation', 64), ('objectClassViolation', 65), ('notAllowedOnNonLeaf', 66), ('notAllowedOnRDN', 67), ('entryAlreadyExists', 68), ('objectClassModsProhibited', 69), ('affectsMultipleDSAs', 71), ('other', 80), None]}, {'name': 'matchedDN', 'type': 'LDAPDN'}, {'name': 'diagnosticMessage', 'type': 'LDAPString'}, {'name': 'referral', 'optional': True, 'tag': {'number': 3}, 'type': 'Referral'}], 'type': 'SEQUENCE'}, 'LDAPString': {'type': 'OCTET ' 'STRING'}, 'MatchingRuleAssertion': {'members': [{'name': 'matchingRule', 'optional': True, 'tag': {'number': 1}, 'type': 'MatchingRuleId'}, {'name': 'type', 'optional': True, 'tag': {'number': 2}, 'type': 'AttributeDescription'}, {'name': 'matchValue', 'tag': {'number': 3}, 'type': 'AssertionValue'}, {'default': False, 'name': 'dnAttributes', 'tag': {'number': 4}, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'MatchingRuleId': {'type': 'LDAPString'}, 'MessageID': {'restricted-to': [(0, 'maxInt')], 'type': 'INTEGER'}, 'ModifyDNRequest': {'members': [{'name': 'entry', 'type': 'LDAPDN'}, {'name': 'newrdn', 'type': 'RelativeLDAPDN'}, {'name': 'deleteoldrdn', 'type': 'BOOLEAN'}, {'name': 'newSuperior', 'optional': True, 'tag': {'number': 0}, 'type': 'LDAPDN'}], 'tag': {'class': 'APPLICATION', 'number': 12}, 'type': 'SEQUENCE'}, 'ModifyDNResponse': {'tag': {'class': 'APPLICATION', 'number': 13}, 'type': 'LDAPResult'}, 'ModifyRequest': {'members': [{'name': 'object', 'type': 'LDAPDN'}, {'element': {'members': [{'name': 'operation', 'type': 'ENUMERATED', 'values': [('add', 0), ('delete', 1), ('replace', 2), None]}, {'name': 'modification', 'type': 'PartialAttribute'}], 'type': 'SEQUENCE'}, 'element_name': 'change', 'name': 'changes', 'type': 'SEQUENCE ' 'OF'}], 'tag': {'class': 'APPLICATION', 'number': 6}, 'type': 'SEQUENCE'}, 'ModifyResponse': {'tag': {'class': 'APPLICATION', 'number': 7}, 'type': 'LDAPResult'}, 'PartialAttribute': {'members': [{'name': 'type', 'type': 'AttributeDescription'}, {'element': {'type': 'AttributeValue'}, 'element_name': 'value', 'name': 'vals', 'type': 'SET ' 'OF'}], 'type': 'SEQUENCE'}, 'PartialAttributeList': {'element': {'type': 'PartialAttribute'}, 'element_name': 'partialAttribute', 'type': 'SEQUENCE ' 'OF'}, 'Referral': {'element': {'type': 'URI'}, 'element_name': 'uri', 'size': [(1, 'MAX')], 'type': 'SEQUENCE ' 'OF'}, 'RelativeLDAPDN': {'type': 'LDAPString'}, 'SaslCredentials': {'members': [{'name': 'mechanism', 'type': 'LDAPString'}, {'name': 'credentials', 'optional': True, 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'SearchRequest': {'members': [{'name': 'baseObject', 'type': 'LDAPDN'}, {'name': 'scope', 'type': 'ENUMERATED', 'values': [('baseObject', 0), ('singleLevel', 1), ('wholeSubtree', 2), None]}, {'name': 'derefAliases', 'type': 'ENUMERATED', 'values': [('neverDerefAliases', 0), ('derefInSearching', 1), ('derefFindingBaseObj', 2), ('derefAlways', 3)]}, {'name': 'sizeLimit', 'restricted-to': [(0, 'maxInt')], 'type': 'INTEGER'}, {'name': 'timeLimit', 'restricted-to': [(0, 'maxInt')], 'type': 'INTEGER'}, {'name': 'typesOnly', 'type': 'BOOLEAN'}, {'name': 'filter', 'type': 'Filter'}, {'name': 'attributes', 'type': 'AttributeSelection'}], 'tag': {'class': 'APPLICATION', 'number': 3}, 'type': 'SEQUENCE'}, 'SearchResultDone': {'tag': {'class': 'APPLICATION', 'number': 5}, 'type': 'LDAPResult'}, 'SearchResultEntry': {'members': [{'name': 'objectName', 'type': 'LDAPDN'}, {'name': 'attributes', 'type': 'PartialAttributeList'}], 'tag': {'class': 'APPLICATION', 'number': 4}, 'type': 'SEQUENCE'}, 'SearchResultReference': {'element': {'type': 'URI'}, 'element_name': 'uri', 'size': [(1, 'MAX')], 'tag': {'class': 'APPLICATION', 'number': 19}, 'type': 'SEQUENCE ' 'OF'}, 'SubstringFilter': {'members': [{'name': 'type', 'type': 'AttributeDescription'}, {'element': {'members': [{'name': 'initial', 'tag': {'number': 0}, 'type': 'AssertionValue'}, {'name': 'any', 'tag': {'number': 1}, 'type': 'AssertionValue'}, {'name': 'final', 'tag': {'number': 2}, 'type': 'AssertionValue'}], 'type': 'CHOICE'}, 'name': 'substrings', 'element_name': 'substring', 'size': [(1, 'MAX')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'URI': {'type': 'LDAPString'}, 'UnbindRequest': {'tag': {'class': 'APPLICATION', 'number': 2}, 'type': 'NULL'}}, 'values': {'maxInt': {'type': 'INTEGER', 'value': 2147483647}}}}asn1tools-0.169.0/tests/files/ietf/rfc5084.asn000066400000000000000000000020451524544274600206210ustar00rootroot00000000000000CMS-AES-CCM-and-AES-GCM { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) modules(0) cms-aes-ccm-and-gcm(32) } DEFINITIONS IMPLICIT TAGS ::= BEGIN -- EXPORTS All -- Object Identifiers aes OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) csor(3) nistAlgorithm(4) 1 } id-aes128-CCM OBJECT IDENTIFIER ::= { aes 7 } id-aes192-CCM OBJECT IDENTIFIER ::= { aes 27 } id-aes256-CCM OBJECT IDENTIFIER ::= { aes 47 } id-aes128-GCM OBJECT IDENTIFIER ::= { aes 6 } id-aes192-GCM OBJECT IDENTIFIER ::= { aes 26 } id-aes256-GCM OBJECT IDENTIFIER ::= { aes 46 } -- Parameters for AigorithmIdentifier CCMParameters ::= SEQUENCE { aes-nonce OCTET STRING (SIZE(7..13)), aes-ICVlen AES-CCM-ICVlen DEFAULT 12 } AES-CCM-ICVlen ::= INTEGER (4 | 6 | 8 | 10 | 12 | 14 | 16) GCMParameters ::= SEQUENCE { aes-nonce OCTET STRING, -- recommended size is 12 octets aes-ICVlen AES-GCM-ICVlen DEFAULT 12 } AES-GCM-ICVlen ::= INTEGER (12 | 13 | 14 | 15 | 16) END asn1tools-0.169.0/tests/files/ietf/rfc5084.py000066400000000000000000000116171524544274600204750ustar00rootroot00000000000000EXPECTED = {'CMS-AES-CCM-and-AES-GCM': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'IMPLICIT', 'types': {'AES-CCM-ICVlen': {'restricted-to': [4, 6, 8, 10, 12, 14, 16], 'type': 'INTEGER'}, 'AES-GCM-ICVlen': {'restricted-to': [12, 13, 14, 15, 16], 'type': 'INTEGER'}, 'CCMParameters': {'members': [{'name': 'aes-nonce', 'size': [(7, 13)], 'type': 'OCTET ' 'STRING'}, {'default': 12, 'name': 'aes-ICVlen', 'type': 'AES-CCM-ICVlen'}], 'type': 'SEQUENCE'}, 'GCMParameters': {'members': [{'name': 'aes-nonce', 'type': 'OCTET ' 'STRING'}, {'default': 12, 'name': 'aes-ICVlen', 'type': 'AES-GCM-ICVlen'}], 'type': 'SEQUENCE'}}, 'values': {'aes': {'type': 'OBJECT IDENTIFIER', 'value': [('joint-iso-itu-t', 2), ('country', 16), ('us', 840), ('organization', 1), ('gov', 101), ('csor', 3), ('nistAlgorithm', 4), 1]}, 'id-aes128-CCM': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['aes', 7]}, 'id-aes128-GCM': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['aes', 6]}, 'id-aes192-CCM': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['aes', 27]}, 'id-aes192-GCM': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['aes', 26]}, 'id-aes256-CCM': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['aes', 47]}, 'id-aes256-GCM': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['aes', 46]}}}}asn1tools-0.169.0/tests/files/ietf/rfc5280.asn000066400000000000000000001024111524544274600206150ustar00rootroot00000000000000PKIX1Explicit88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18) } DEFINITIONS EXPLICIT TAGS ::= BEGIN -- EXPORTS ALL -- -- IMPORTS NONE -- -- UNIVERSAL Types defined in 1993 and 1998 ASN.1 -- and required by this specification -- UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING -- UniversalString is defined in ASN.1:1993 -- BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING -- BMPString is the subtype of UniversalString and models -- the Basic Multilingual Plane of ISO/IEC 10646 -- UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING -- The content of this type conforms to RFC 3629. -- PKIX specific OIDs id-pkix OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) } -- PKIX arcs id-pe OBJECT IDENTIFIER ::= { id-pkix 1 } -- arc for private certificate extensions id-qt OBJECT IDENTIFIER ::= { id-pkix 2 } -- arc for policy qualifier types id-kp OBJECT IDENTIFIER ::= { id-pkix 3 } -- arc for extended key purpose OIDS id-ad OBJECT IDENTIFIER ::= { id-pkix 48 } -- arc for access descriptors -- policyQualifierIds for Internet policy qualifiers id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 } -- OID for CPS qualifier id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 } -- OID for user notice qualifier -- access descriptor definitions id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 } id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 } id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 } id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 } -- attribute data types Attribute ::= SEQUENCE { type AttributeType, values SET OF AttributeValue } -- at least one value is required AttributeType ::= OBJECT IDENTIFIER AttributeValue ::= ANY -- DEFINED BY AttributeType AttributeTypeAndValue ::= SEQUENCE { type AttributeType, value AttributeValue } -- suggested naming attributes: Definition of the following -- information object set may be augmented to meet local -- requirements. Note that deleting members of the set may -- prevent interoperability with conforming implementations. -- presented in pairs: the AttributeType followed by the -- type definition for the corresponding AttributeValue -- Arc for standard naming attributes id-at OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 4 } -- Naming attributes of type X520name id-at-name AttributeType ::= { id-at 41 } id-at-surname AttributeType ::= { id-at 4 } id-at-givenName AttributeType ::= { id-at 42 } id-at-initials AttributeType ::= { id-at 43 } id-at-generationQualifier AttributeType ::= { id-at 44 } -- Naming attributes of type X520Name: -- X520name ::= DirectoryString (SIZE (1..ub-name)) -- -- Expanded to avoid parameterized type: X520name ::= CHOICE { teletexString TeletexString (SIZE (1..ub-name)), printableString PrintableString (SIZE (1..ub-name)), universalString UniversalString (SIZE (1..ub-name)), utf8String UTF8String (SIZE (1..ub-name)), bmpString BMPString (SIZE (1..ub-name)) } -- Naming attributes of type X520CommonName id-at-commonName AttributeType ::= { id-at 3 } -- Naming attributes of type X520CommonName: -- X520CommonName ::= DirectoryName (SIZE (1..ub-common-name)) -- -- Expanded to avoid parameterized type: X520CommonName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-common-name)), printableString PrintableString (SIZE (1..ub-common-name)), universalString UniversalString (SIZE (1..ub-common-name)), utf8String UTF8String (SIZE (1..ub-common-name)), bmpString BMPString (SIZE (1..ub-common-name)) } -- Naming attributes of type X520LocalityName id-at-localityName AttributeType ::= { id-at 7 } -- Naming attributes of type X520LocalityName: -- X520LocalityName ::= DirectoryName (SIZE (1..ub-locality-name)) -- -- Expanded to avoid parameterized type: X520LocalityName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-locality-name)), printableString PrintableString (SIZE (1..ub-locality-name)), universalString UniversalString (SIZE (1..ub-locality-name)), utf8String UTF8String (SIZE (1..ub-locality-name)), bmpString BMPString (SIZE (1..ub-locality-name)) } -- Naming attributes of type X520StateOrProvinceName id-at-stateOrProvinceName AttributeType ::= { id-at 8 } -- Naming attributes of type X520StateOrProvinceName: -- X520StateOrProvinceName ::= DirectoryName (SIZE (1..ub-state-name)) -- -- Expanded to avoid parameterized type: X520StateOrProvinceName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-state-name)), printableString PrintableString (SIZE (1..ub-state-name)), universalString UniversalString (SIZE (1..ub-state-name)), utf8String UTF8String (SIZE (1..ub-state-name)), bmpString BMPString (SIZE (1..ub-state-name)) } -- Naming attributes of type X520OrganizationName id-at-organizationName AttributeType ::= { id-at 10 } -- Naming attributes of type X520OrganizationName: -- X520OrganizationName ::= -- DirectoryName (SIZE (1..ub-organization-name)) -- -- Expanded to avoid parameterized type: X520OrganizationName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-organization-name)), printableString PrintableString (SIZE (1..ub-organization-name)), universalString UniversalString (SIZE (1..ub-organization-name)), utf8String UTF8String (SIZE (1..ub-organization-name)), bmpString BMPString (SIZE (1..ub-organization-name)) } -- Naming attributes of type X520OrganizationalUnitName id-at-organizationalUnitName AttributeType ::= { id-at 11 } -- Naming attributes of type X520OrganizationalUnitName: -- X520OrganizationalUnitName ::= -- DirectoryName (SIZE (1..ub-organizational-unit-name)) -- -- Expanded to avoid parameterized type: X520OrganizationalUnitName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-organizational-unit-name)), printableString PrintableString (SIZE (1..ub-organizational-unit-name)), universalString UniversalString (SIZE (1..ub-organizational-unit-name)), utf8String UTF8String (SIZE (1..ub-organizational-unit-name)), bmpString BMPString (SIZE (1..ub-organizational-unit-name)) } -- Naming attributes of type X520Title id-at-title AttributeType ::= { id-at 12 } -- Naming attributes of type X520Title: -- X520Title ::= DirectoryName (SIZE (1..ub-title)) -- -- Expanded to avoid parameterized type: X520Title ::= CHOICE { teletexString TeletexString (SIZE (1..ub-title)), printableString PrintableString (SIZE (1..ub-title)), universalString UniversalString (SIZE (1..ub-title)), utf8String UTF8String (SIZE (1..ub-title)), bmpString BMPString (SIZE (1..ub-title)) } -- Naming attributes of type X520dnQualifier id-at-dnQualifier AttributeType ::= { id-at 46 } X520dnQualifier ::= PrintableString -- Naming attributes of type X520countryName (digraph from IS 3166) id-at-countryName AttributeType ::= { id-at 6 } X520countryName ::= PrintableString (SIZE (2)) -- Naming attributes of type X520SerialNumber id-at-serialNumber AttributeType ::= { id-at 5 } X520SerialNumber ::= PrintableString (SIZE (1..ub-serial-number)) -- Naming attributes of type X520Pseudonym id-at-pseudonym AttributeType ::= { id-at 65 } -- Naming attributes of type X520Pseudonym: -- X520Pseudonym ::= DirectoryName (SIZE (1..ub-pseudonym)) -- -- Expanded to avoid parameterized type: X520Pseudonym ::= CHOICE { teletexString TeletexString (SIZE (1..ub-pseudonym)), printableString PrintableString (SIZE (1..ub-pseudonym)), universalString UniversalString (SIZE (1..ub-pseudonym)), utf8String UTF8String (SIZE (1..ub-pseudonym)), bmpString BMPString (SIZE (1..ub-pseudonym)) } -- Naming attributes of type DomainComponent (from RFC 4519) id-domainComponent AttributeType ::= { 0 9 2342 19200300 100 1 25 } DomainComponent ::= IA5String -- Legacy attributes pkcs-9 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 } id-emailAddress AttributeType ::= { pkcs-9 1 } EmailAddress ::= IA5String (SIZE (1..ub-emailaddress-length)) -- naming data types -- Name ::= CHOICE { -- only one possibility for now -- rdnSequence RDNSequence } RDNSequence ::= SEQUENCE OF RelativeDistinguishedName DistinguishedName ::= RDNSequence RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue -- Directory string type -- DirectoryString ::= CHOICE { teletexString TeletexString (SIZE (1..MAX)), printableString PrintableString (SIZE (1..MAX)), universalString UniversalString (SIZE (1..MAX)), utf8String UTF8String (SIZE (1..MAX)), bmpString BMPString (SIZE (1..MAX)) } -- certificate and CRL specific structures begin here Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING } TBSCertificate ::= SEQUENCE { version [0] Version DEFAULT v1, serialNumber CertificateSerialNumber, signature AlgorithmIdentifier, issuer Name, validity Validity, subject Name, subjectPublicKeyInfo SubjectPublicKeyInfo, issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version MUST be v2 or v3 subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version MUST be v2 or v3 extensions [3] Extensions OPTIONAL -- If present, version MUST be v3 -- } Version ::= INTEGER { v1(0), v2(1), v3(2) } CertificateSerialNumber ::= INTEGER Validity ::= SEQUENCE { notBefore Time, notAfter Time } Time ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime } UniqueIdentifier ::= BIT STRING SubjectPublicKeyInfo ::= SEQUENCE { algorithm AlgorithmIdentifier, subjectPublicKey BIT STRING } Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension Extension ::= SEQUENCE { extnID OBJECT IDENTIFIER, critical BOOLEAN DEFAULT FALSE, extnValue OCTET STRING -- contains the DER encoding of an ASN.1 value -- corresponding to the extension type identified -- by extnID } -- CRL structures CertificateList ::= SEQUENCE { tbsCertList TBSCertList, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING } TBSCertList ::= SEQUENCE { version Version OPTIONAL, -- if present, MUST be v2 signature AlgorithmIdentifier, issuer Name, thisUpdate Time, nextUpdate Time OPTIONAL, revokedCertificates SEQUENCE OF SEQUENCE { userCertificate CertificateSerialNumber, revocationDate Time, crlEntryExtensions Extensions OPTIONAL -- if present, version MUST be v2 } OPTIONAL, crlExtensions [0] Extensions OPTIONAL } -- if present, version MUST be v2 -- Version, Time, CertificateSerialNumber, and Extensions were -- defined earlier for use in the certificate structure AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL } -- contains a value of the type -- registered for use with the -- algorithm object identifier value -- X.400 address syntax starts here ORAddress ::= SEQUENCE { built-in-standard-attributes BuiltInStandardAttributes, built-in-domain-defined-attributes BuiltInDomainDefinedAttributes OPTIONAL, -- see also teletex-domain-defined-attributes extension-attributes ExtensionAttributes OPTIONAL } -- Built-in Standard Attributes BuiltInStandardAttributes ::= SEQUENCE { country-name CountryName OPTIONAL, administration-domain-name AdministrationDomainName OPTIONAL, network-address [0] IMPLICIT NetworkAddress OPTIONAL, -- see also extended-network-address terminal-identifier [1] IMPLICIT TerminalIdentifier OPTIONAL, private-domain-name [2] PrivateDomainName OPTIONAL, organization-name [3] IMPLICIT OrganizationName OPTIONAL, -- see also teletex-organization-name numeric-user-identifier [4] IMPLICIT NumericUserIdentifier OPTIONAL, personal-name [5] IMPLICIT PersonalName OPTIONAL, -- see also teletex-personal-name organizational-unit-names [6] IMPLICIT OrganizationalUnitNames OPTIONAL } -- see also teletex-organizational-unit-names CountryName ::= [APPLICATION 1] CHOICE { x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)), iso-3166-alpha2-code PrintableString (SIZE (ub-country-name-alpha-length)) } AdministrationDomainName ::= [APPLICATION 2] CHOICE { numeric NumericString (SIZE (0..ub-domain-name-length)), printable PrintableString (SIZE (0..ub-domain-name-length)) } NetworkAddress ::= X121Address -- see also extended-network-address X121Address ::= NumericString (SIZE (1..ub-x121-address-length)) TerminalIdentifier ::= PrintableString (SIZE (1..ub-terminal-id-length)) PrivateDomainName ::= CHOICE { numeric NumericString (SIZE (1..ub-domain-name-length)), printable PrintableString (SIZE (1..ub-domain-name-length)) } OrganizationName ::= PrintableString (SIZE (1..ub-organization-name-length)) -- see also teletex-organization-name NumericUserIdentifier ::= NumericString (SIZE (1..ub-numeric-user-id-length)) PersonalName ::= SET { surname [0] IMPLICIT PrintableString (SIZE (1..ub-surname-length)), given-name [1] IMPLICIT PrintableString (SIZE (1..ub-given-name-length)) OPTIONAL, initials [2] IMPLICIT PrintableString (SIZE (1..ub-initials-length)) OPTIONAL, generation-qualifier [3] IMPLICIT PrintableString (SIZE (1..ub-generation-qualifier-length)) OPTIONAL } -- see also teletex-personal-name OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units) OF OrganizationalUnitName -- see also teletex-organizational-unit-names OrganizationalUnitName ::= PrintableString (SIZE (1..ub-organizational-unit-name-length)) -- Built-in Domain-defined Attributes BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE (1..ub-domain-defined-attributes) OF BuiltInDomainDefinedAttribute BuiltInDomainDefinedAttribute ::= SEQUENCE { type PrintableString (SIZE (1..ub-domain-defined-attribute-type-length)), value PrintableString (SIZE (1..ub-domain-defined-attribute-value-length)) } -- Extension Attributes ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF ExtensionAttribute ExtensionAttribute ::= SEQUENCE { extension-attribute-type [0] IMPLICIT INTEGER (0..ub-extension-attributes), extension-attribute-value [1] ANY DEFINED BY extension-attribute-type } -- Extension types and attribute values common-name INTEGER ::= 1 CommonName ::= PrintableString (SIZE (1..ub-common-name-length)) teletex-common-name INTEGER ::= 2 TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length)) teletex-organization-name INTEGER ::= 3 TeletexOrganizationName ::= TeletexString (SIZE (1..ub-organization-name-length)) teletex-personal-name INTEGER ::= 4 TeletexPersonalName ::= SET { surname [0] IMPLICIT TeletexString (SIZE (1..ub-surname-length)), given-name [1] IMPLICIT TeletexString (SIZE (1..ub-given-name-length)) OPTIONAL, initials [2] IMPLICIT TeletexString (SIZE (1..ub-initials-length)) OPTIONAL, generation-qualifier [3] IMPLICIT TeletexString (SIZE (1..ub-generation-qualifier-length)) OPTIONAL } teletex-organizational-unit-names INTEGER ::= 5 TeletexOrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units) OF TeletexOrganizationalUnitName TeletexOrganizationalUnitName ::= TeletexString (SIZE (1..ub-organizational-unit-name-length)) pds-name INTEGER ::= 7 PDSName ::= PrintableString (SIZE (1..ub-pds-name-length)) physical-delivery-country-name INTEGER ::= 8 PhysicalDeliveryCountryName ::= CHOICE { x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)), iso-3166-alpha2-code PrintableString (SIZE (ub-country-name-alpha-length)) } postal-code INTEGER ::= 9 PostalCode ::= CHOICE { numeric-code NumericString (SIZE (1..ub-postal-code-length)), printable-code PrintableString (SIZE (1..ub-postal-code-length)) } physical-delivery-office-name INTEGER ::= 10 PhysicalDeliveryOfficeName ::= PDSParameter physical-delivery-office-number INTEGER ::= 11 PhysicalDeliveryOfficeNumber ::= PDSParameter extension-OR-address-components INTEGER ::= 12 ExtensionORAddressComponents ::= PDSParameter physical-delivery-personal-name INTEGER ::= 13 PhysicalDeliveryPersonalName ::= PDSParameter physical-delivery-organization-name INTEGER ::= 14 PhysicalDeliveryOrganizationName ::= PDSParameter extension-physical-delivery-address-components INTEGER ::= 15 ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter unformatted-postal-address INTEGER ::= 16 UnformattedPostalAddress ::= SET { printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines) OF PrintableString (SIZE (1..ub-pds-parameter-length)) OPTIONAL, teletex-string TeletexString (SIZE (1..ub-unformatted-address-length)) OPTIONAL } street-address INTEGER ::= 17 StreetAddress ::= PDSParameter post-office-box-address INTEGER ::= 18 PostOfficeBoxAddress ::= PDSParameter poste-restante-address INTEGER ::= 19 PosteRestanteAddress ::= PDSParameter unique-postal-name INTEGER ::= 20 UniquePostalName ::= PDSParameter local-postal-attributes INTEGER ::= 21 LocalPostalAttributes ::= PDSParameter PDSParameter ::= SET { printable-string PrintableString (SIZE(1..ub-pds-parameter-length)) OPTIONAL, teletex-string TeletexString (SIZE(1..ub-pds-parameter-length)) OPTIONAL } extended-network-address INTEGER ::= 22 ExtendedNetworkAddress ::= CHOICE { e163-4-address SEQUENCE { number [0] IMPLICIT NumericString (SIZE (1..ub-e163-4-number-length)), sub-address [1] IMPLICIT NumericString (SIZE (1..ub-e163-4-sub-address-length)) OPTIONAL }, psap-address [0] IMPLICIT PresentationAddress } PresentationAddress ::= SEQUENCE { pSelector [0] EXPLICIT OCTET STRING OPTIONAL, sSelector [1] EXPLICIT OCTET STRING OPTIONAL, tSelector [2] EXPLICIT OCTET STRING OPTIONAL, nAddresses [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING } terminal-type INTEGER ::= 23 TerminalType ::= INTEGER { telex (3), teletex (4), g3-facsimile (5), g4-facsimile (6), ia5-terminal (7), videotex (8) } (0..ub-integer-options) -- Extension Domain-defined Attributes teletex-domain-defined-attributes INTEGER ::= 6 TeletexDomainDefinedAttributes ::= SEQUENCE SIZE (1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute TeletexDomainDefinedAttribute ::= SEQUENCE { type TeletexString (SIZE (1..ub-domain-defined-attribute-type-length)), value TeletexString (SIZE (1..ub-domain-defined-attribute-value-length)) } -- specifications of Upper Bounds MUST be regarded as mandatory -- from Annex B of ITU-T X.411 Reference Definition of MTS Parameter -- Upper Bounds -- Upper Bounds ub-name INTEGER ::= 32768 ub-common-name INTEGER ::= 64 ub-locality-name INTEGER ::= 128 ub-state-name INTEGER ::= 128 ub-organization-name INTEGER ::= 64 ub-organizational-unit-name INTEGER ::= 64 ub-title INTEGER ::= 64 ub-serial-number INTEGER ::= 64 ub-match INTEGER ::= 128 ub-emailaddress-length INTEGER ::= 255 ub-common-name-length INTEGER ::= 64 ub-country-name-alpha-length INTEGER ::= 2 ub-country-name-numeric-length INTEGER ::= 3 ub-domain-defined-attributes INTEGER ::= 4 ub-domain-defined-attribute-type-length INTEGER ::= 8 ub-domain-defined-attribute-value-length INTEGER ::= 128 ub-domain-name-length INTEGER ::= 16 ub-extension-attributes INTEGER ::= 256 ub-e163-4-number-length INTEGER ::= 15 ub-e163-4-sub-address-length INTEGER ::= 40 ub-generation-qualifier-length INTEGER ::= 3 ub-given-name-length INTEGER ::= 16 ub-initials-length INTEGER ::= 5 ub-integer-options INTEGER ::= 256 ub-numeric-user-id-length INTEGER ::= 32 ub-organization-name-length INTEGER ::= 64 ub-organizational-unit-name-length INTEGER ::= 32 ub-organizational-units INTEGER ::= 4 ub-pds-name-length INTEGER ::= 16 ub-pds-parameter-length INTEGER ::= 30 ub-pds-physical-address-lines INTEGER ::= 6 ub-postal-code-length INTEGER ::= 16 ub-pseudonym INTEGER ::= 128 ub-surname-length INTEGER ::= 40 ub-terminal-id-length INTEGER ::= 24 ub-unformatted-address-length INTEGER ::= 180 ub-x121-address-length INTEGER ::= 16 -- Note - upper bounds on string types, such as TeletexString, are -- measured in characters. Excepting PrintableString or IA5String, a -- significantly greater number of octets will be required to hold -- such a value. As a minimum, 16 octets, or twice the specified -- upper bound, whichever is the larger, should be allowed for -- TeletexString. For UTF8String or UniversalString at least four -- times the upper bound should be allowed. END PKIX1Implicit88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit(19) } DEFINITIONS IMPLICIT TAGS ::= BEGIN -- EXPORTS ALL -- IMPORTS id-pe, id-kp, id-qt-unotice, id-qt-cps, -- delete following line if "new" types are supported -- BMPString, UTF8String, -- end "new" types -- ORAddress, Name, RelativeDistinguishedName, CertificateSerialNumber, Attribute, DirectoryString FROM PKIX1Explicit88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18) }; -- ISO arc for standard certificate and CRL extensions id-ce OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 29} -- authority key identifier OID and syntax id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } AuthorityKeyIdentifier ::= SEQUENCE { keyIdentifier [0] KeyIdentifier OPTIONAL, authorityCertIssuer [1] GeneralNames OPTIONAL, authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL } -- authorityCertIssuer and authorityCertSerialNumber MUST both -- be present or both be absent KeyIdentifier ::= OCTET STRING -- subject key identifier OID and syntax id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 } SubjectKeyIdentifier ::= KeyIdentifier -- key usage extension OID and syntax id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } KeyUsage ::= BIT STRING { digitalSignature (0), nonRepudiation (1), -- recent editions of X.509 have -- renamed this bit to contentCommitment keyEncipherment (2), dataEncipherment (3), keyAgreement (4), keyCertSign (5), cRLSign (6), encipherOnly (7), decipherOnly (8) } -- private key usage period extension OID and syntax id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::= { id-ce 16 } PrivateKeyUsagePeriod ::= SEQUENCE { notBefore [0] GeneralizedTime OPTIONAL, notAfter [1] GeneralizedTime OPTIONAL } -- either notBefore or notAfter MUST be present -- certificate policies extension OID and syntax id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 } anyPolicy OBJECT IDENTIFIER ::= { id-ce-certificatePolicies 0 } CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation PolicyInformation ::= SEQUENCE { policyIdentifier CertPolicyId, policyQualifiers SEQUENCE SIZE (1..MAX) OF PolicyQualifierInfo OPTIONAL } CertPolicyId ::= OBJECT IDENTIFIER PolicyQualifierInfo ::= SEQUENCE { policyQualifierId PolicyQualifierId, qualifier ANY DEFINED BY policyQualifierId } -- Implementations that recognize additional policy qualifiers MUST -- augment the following definition for PolicyQualifierId PolicyQualifierId ::= OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice ) -- CPS pointer qualifier CPSuri ::= IA5String -- user notice qualifier UserNotice ::= SEQUENCE { noticeRef NoticeReference OPTIONAL, explicitText DisplayText OPTIONAL } NoticeReference ::= SEQUENCE { organization DisplayText, noticeNumbers SEQUENCE OF INTEGER } DisplayText ::= CHOICE { ia5String IA5String (SIZE (1..200)), visibleString VisibleString (SIZE (1..200)), bmpString BMPString (SIZE (1..200)), utf8String UTF8String (SIZE (1..200)) } -- policy mapping extension OID and syntax id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 } PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE { issuerDomainPolicy CertPolicyId, subjectDomainPolicy CertPolicyId } -- subject alternative name extension OID and syntax id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 } SubjectAltName ::= GeneralNames GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName GeneralName ::= CHOICE { otherName [0] AnotherName, rfc822Name [1] IA5String, dNSName [2] IA5String, x400Address [3] ORAddress, directoryName [4] Name, ediPartyName [5] EDIPartyName, uniformResourceIdentifier [6] IA5String, iPAddress [7] OCTET STRING, registeredID [8] OBJECT IDENTIFIER } -- AnotherName replaces OTHER-NAME ::= TYPE-IDENTIFIER, as -- TYPE-IDENTIFIER is not supported in the '88 ASN.1 syntax AnotherName ::= SEQUENCE { type-id OBJECT IDENTIFIER, value [0] EXPLICIT ANY DEFINED BY type-id } EDIPartyName ::= SEQUENCE { nameAssigner [0] DirectoryString OPTIONAL, partyName [1] DirectoryString } -- issuer alternative name extension OID and syntax id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 } IssuerAltName ::= GeneralNames id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 } SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute -- basic constraints extension OID and syntax id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 } BasicConstraints ::= SEQUENCE { cA BOOLEAN DEFAULT FALSE, pathLenConstraint INTEGER (0..MAX) OPTIONAL } -- name constraints extension OID and syntax id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 } NameConstraints ::= SEQUENCE { permittedSubtrees [0] GeneralSubtrees OPTIONAL, excludedSubtrees [1] GeneralSubtrees OPTIONAL } GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree GeneralSubtree ::= SEQUENCE { base GeneralName, minimum [0] BaseDistance DEFAULT 0, maximum [1] BaseDistance OPTIONAL } BaseDistance ::= INTEGER (0..MAX) -- policy constraints extension OID and syntax id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 } PolicyConstraints ::= SEQUENCE { requireExplicitPolicy [0] SkipCerts OPTIONAL, inhibitPolicyMapping [1] SkipCerts OPTIONAL } SkipCerts ::= INTEGER (0..MAX) -- CRL distribution points extension OID and syntax id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= {id-ce 31} CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint DistributionPoint ::= SEQUENCE { distributionPoint [0] DistributionPointName OPTIONAL, reasons [1] ReasonFlags OPTIONAL, cRLIssuer [2] GeneralNames OPTIONAL } DistributionPointName ::= CHOICE { fullName [0] GeneralNames, nameRelativeToCRLIssuer [1] RelativeDistinguishedName } ReasonFlags ::= BIT STRING { unused (0), keyCompromise (1), cACompromise (2), affiliationChanged (3), superseded (4), cessationOfOperation (5), certificateHold (6), privilegeWithdrawn (7), aACompromise (8) } -- extended key usage extension OID and syntax id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37} ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId KeyPurposeId ::= OBJECT IDENTIFIER -- permit unspecified key uses anyExtendedKeyUsage OBJECT IDENTIFIER ::= { id-ce-extKeyUsage 0 } -- extended key purpose OIDs id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 } id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 } id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 } id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 } id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 } id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 } -- inhibit any policy OID and syntax id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::= { id-ce 54 } InhibitAnyPolicy ::= SkipCerts -- freshest (delta)CRL extension OID and syntax id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 } FreshestCRL ::= CRLDistributionPoints -- authority info access id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 } AuthorityInfoAccessSyntax ::= SEQUENCE SIZE (1..MAX) OF AccessDescription AccessDescription ::= SEQUENCE { accessMethod OBJECT IDENTIFIER, accessLocation GeneralName } -- subject info access id-pe-subjectInfoAccess OBJECT IDENTIFIER ::= { id-pe 11 } SubjectInfoAccessSyntax ::= SEQUENCE SIZE (1..MAX) OF AccessDescription -- CRL number extension OID and syntax id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 } CRLNumber ::= INTEGER (0..MAX) -- issuing distribution point extension OID and syntax id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 } IssuingDistributionPoint ::= SEQUENCE { distributionPoint [0] DistributionPointName OPTIONAL, onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE, onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE, onlySomeReasons [3] ReasonFlags OPTIONAL, indirectCRL [4] BOOLEAN DEFAULT FALSE, onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE } -- at most one of onlyContainsUserCerts, onlyContainsCACerts, -- and onlyContainsAttributeCerts may be set to TRUE. id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 } BaseCRLNumber ::= CRLNumber -- reason code extension OID and syntax id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 } CRLReason ::= ENUMERATED { unspecified (0), keyCompromise (1), cACompromise (2), affiliationChanged (3), superseded (4), cessationOfOperation (5), certificateHold (6), removeFromCRL (8), privilegeWithdrawn (9), aACompromise (10) } -- certificate issuer CRL entry extension OID and syntax id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 } CertificateIssuer ::= GeneralNames -- hold instruction extension OID and syntax id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 } HoldInstructionCode ::= OBJECT IDENTIFIER -- ANSI x9 arc holdinstruction arc holdInstruction OBJECT IDENTIFIER ::= {joint-iso-itu-t(2) member-body(2) us(840) x9cm(10040) 2} -- ANSI X9 holdinstructions id-holdinstruction-none OBJECT IDENTIFIER ::= {holdInstruction 1} -- deprecated id-holdinstruction-callissuer OBJECT IDENTIFIER ::= {holdInstruction 2} id-holdinstruction-reject OBJECT IDENTIFIER ::= {holdInstruction 3} -- invalidity date CRL entry extension OID and syntax id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 } InvalidityDate ::= GeneralizedTime END asn1tools-0.169.0/tests/files/ietf/rfc5280.py000066400000000000000000003336531524544274600205020ustar00rootroot00000000000000EXPECTED = {'PKIX1Explicit88': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'EXPLICIT', 'types': {'AdministrationDomainName': {'members': [{'name': 'numeric', 'size': [(0, 'ub-domain-name-length')], 'type': 'NumericString'}, {'name': 'printable', 'size': [(0, 'ub-domain-name-length')], 'type': 'PrintableString'}], 'tag': {'class': 'APPLICATION', 'number': 2}, 'type': 'CHOICE'}, 'AlgorithmIdentifier': {'members': [{'name': 'algorithm', 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'parameters', 'optional': True, 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'algorithm'}], 'type': 'SEQUENCE'}, 'Attribute': {'members': [{'name': 'type', 'type': 'AttributeType'}, {'element': {'type': 'AttributeValue'}, 'name': 'values', 'type': 'SET OF'}], 'type': 'SEQUENCE'}, 'AttributeType': {'type': 'OBJECT IDENTIFIER'}, 'AttributeTypeAndValue': {'members': [{'name': 'type', 'type': 'AttributeType'}, {'name': 'value', 'type': 'AttributeValue'}], 'type': 'SEQUENCE'}, 'AttributeValue': {'type': 'ANY'}, 'BuiltInDomainDefinedAttribute': {'members': [{'name': 'type', 'size': [(1, 'ub-domain-defined-attribute-type-length')], 'type': 'PrintableString'}, {'name': 'value', 'size': [(1, 'ub-domain-defined-attribute-value-length')], 'type': 'PrintableString'}], 'type': 'SEQUENCE'}, 'BuiltInDomainDefinedAttributes': {'element': {'type': 'BuiltInDomainDefinedAttribute'}, 'size': [(1, 'ub-domain-defined-attributes')], 'type': 'SEQUENCE ' 'OF'}, 'BuiltInStandardAttributes': {'members': [{'name': 'country-name', 'optional': True, 'type': 'CountryName'}, {'name': 'administration-domain-name', 'optional': True, 'type': 'AdministrationDomainName'}, {'name': 'network-address', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'NetworkAddress'}, {'name': 'terminal-identifier', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'TerminalIdentifier'}, {'name': 'private-domain-name', 'optional': True, 'tag': {'number': 2}, 'type': 'PrivateDomainName'}, {'name': 'organization-name', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'OrganizationName'}, {'name': 'numeric-user-identifier', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'NumericUserIdentifier'}, {'name': 'personal-name', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'PersonalName'}, {'name': 'organizational-unit-names', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 6}, 'type': 'OrganizationalUnitNames'}], 'type': 'SEQUENCE'}, 'Certificate': {'members': [{'name': 'tbsCertificate', 'type': 'TBSCertificate'}, {'name': 'signatureAlgorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'signature', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'CertificateList': {'members': [{'name': 'tbsCertList', 'type': 'TBSCertList'}, {'name': 'signatureAlgorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'signature', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'CertificateSerialNumber': {'type': 'INTEGER'}, 'CommonName': {'size': [(1, 'ub-common-name-length')], 'type': 'PrintableString'}, 'CountryName': {'members': [{'name': 'x121-dcc-code', 'size': ['ub-country-name-numeric-length'], 'type': 'NumericString'}, {'name': 'iso-3166-alpha2-code', 'size': ['ub-country-name-alpha-length'], 'type': 'PrintableString'}], 'tag': {'class': 'APPLICATION', 'number': 1}, 'type': 'CHOICE'}, 'DirectoryString': {'members': [{'name': 'teletexString', 'size': [(1, 'MAX')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'MAX')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'MAX')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'MAX')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'MAX')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'DistinguishedName': {'type': 'RDNSequence'}, 'DomainComponent': {'type': 'IA5String'}, 'EmailAddress': {'size': [(1, 'ub-emailaddress-length')], 'type': 'IA5String'}, 'ExtendedNetworkAddress': {'members': [{'members': [{'name': 'number', 'size': [(1, 'ub-e163-4-number-length')], 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'NumericString'}, {'name': 'sub-address', 'optional': True, 'size': [(1, 'ub-e163-4-sub-address-length')], 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'NumericString'}], 'name': 'e163-4-address', 'type': 'SEQUENCE'}, {'name': 'psap-address', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'PresentationAddress'}], 'type': 'CHOICE'}, 'Extension': {'members': [{'name': 'extnID', 'type': 'OBJECT ' 'IDENTIFIER'}, {'default': False, 'name': 'critical', 'type': 'BOOLEAN'}, {'name': 'extnValue', 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'ExtensionAttribute': {'members': [{'name': 'extension-attribute-type', 'restricted-to': [(0, 'ub-extension-attributes')], 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'choices': {}, 'name': 'extension-attribute-value', 'tag': {'number': 1}, 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'extension-attribute-type'}], 'type': 'SEQUENCE'}, 'ExtensionAttributes': {'element': {'type': 'ExtensionAttribute'}, 'size': [(1, 'ub-extension-attributes')], 'type': 'SET OF'}, 'ExtensionORAddressComponents': {'type': 'PDSParameter'}, 'ExtensionPhysicalDeliveryAddressComponents': {'type': 'PDSParameter'}, 'Extensions': {'element': {'type': 'Extension'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'LocalPostalAttributes': {'type': 'PDSParameter'}, 'Name': {'members': [{'name': 'rdnSequence', 'type': 'RDNSequence'}], 'type': 'CHOICE'}, 'NetworkAddress': {'type': 'X121Address'}, 'NumericUserIdentifier': {'size': [(1, 'ub-numeric-user-id-length')], 'type': 'NumericString'}, 'ORAddress': {'members': [{'name': 'built-in-standard-attributes', 'type': 'BuiltInStandardAttributes'}, {'name': 'built-in-domain-defined-attributes', 'optional': True, 'type': 'BuiltInDomainDefinedAttributes'}, {'name': 'extension-attributes', 'optional': True, 'type': 'ExtensionAttributes'}], 'type': 'SEQUENCE'}, 'OrganizationName': {'size': [(1, 'ub-organization-name-length')], 'type': 'PrintableString'}, 'OrganizationalUnitName': {'size': [(1, 'ub-organizational-unit-name-length')], 'type': 'PrintableString'}, 'OrganizationalUnitNames': {'element': {'type': 'OrganizationalUnitName'}, 'size': [(1, 'ub-organizational-units')], 'type': 'SEQUENCE ' 'OF'}, 'PDSName': {'size': [(1, 'ub-pds-name-length')], 'type': 'PrintableString'}, 'PDSParameter': {'members': [{'name': 'printable-string', 'optional': True, 'size': [(1, 'ub-pds-parameter-length')], 'type': 'PrintableString'}, {'name': 'teletex-string', 'optional': True, 'size': [(1, 'ub-pds-parameter-length')], 'type': 'TeletexString'}], 'type': 'SET'}, 'PersonalName': {'members': [{'name': 'surname', 'size': [(1, 'ub-surname-length')], 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'PrintableString'}, {'name': 'given-name', 'optional': True, 'size': [(1, 'ub-given-name-length')], 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'PrintableString'}, {'name': 'initials', 'optional': True, 'size': [(1, 'ub-initials-length')], 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'PrintableString'}, {'name': 'generation-qualifier', 'optional': True, 'size': [(1, 'ub-generation-qualifier-length')], 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'PrintableString'}], 'type': 'SET'}, 'PhysicalDeliveryCountryName': {'members': [{'name': 'x121-dcc-code', 'size': ['ub-country-name-numeric-length'], 'type': 'NumericString'}, {'name': 'iso-3166-alpha2-code', 'size': ['ub-country-name-alpha-length'], 'type': 'PrintableString'}], 'type': 'CHOICE'}, 'PhysicalDeliveryOfficeName': {'type': 'PDSParameter'}, 'PhysicalDeliveryOfficeNumber': {'type': 'PDSParameter'}, 'PhysicalDeliveryOrganizationName': {'type': 'PDSParameter'}, 'PhysicalDeliveryPersonalName': {'type': 'PDSParameter'}, 'PostOfficeBoxAddress': {'type': 'PDSParameter'}, 'PostalCode': {'members': [{'name': 'numeric-code', 'size': [(1, 'ub-postal-code-length')], 'type': 'NumericString'}, {'name': 'printable-code', 'size': [(1, 'ub-postal-code-length')], 'type': 'PrintableString'}], 'type': 'CHOICE'}, 'PosteRestanteAddress': {'type': 'PDSParameter'}, 'PresentationAddress': {'members': [{'name': 'pSelector', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'OCTET ' 'STRING'}, {'name': 'sSelector', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 1}, 'type': 'OCTET ' 'STRING'}, {'name': 'tSelector', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 2}, 'type': 'OCTET ' 'STRING'}, {'element': {'type': 'OCTET ' 'STRING'}, 'name': 'nAddresses', 'size': [(1, 'MAX')], 'tag': {'kind': 'EXPLICIT', 'number': 3}, 'type': 'SET ' 'OF'}], 'type': 'SEQUENCE'}, 'PrivateDomainName': {'members': [{'name': 'numeric', 'size': [(1, 'ub-domain-name-length')], 'type': 'NumericString'}, {'name': 'printable', 'size': [(1, 'ub-domain-name-length')], 'type': 'PrintableString'}], 'type': 'CHOICE'}, 'RDNSequence': {'element': {'type': 'RelativeDistinguishedName'}, 'type': 'SEQUENCE OF'}, 'RelativeDistinguishedName': {'element': {'type': 'AttributeTypeAndValue'}, 'size': [(1, 'MAX')], 'type': 'SET OF'}, 'StreetAddress': {'type': 'PDSParameter'}, 'SubjectPublicKeyInfo': {'members': [{'name': 'algorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'subjectPublicKey', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'TBSCertList': {'members': [{'name': 'version', 'optional': True, 'type': 'Version'}, {'name': 'signature', 'type': 'AlgorithmIdentifier'}, {'name': 'issuer', 'type': 'Name'}, {'name': 'thisUpdate', 'type': 'Time'}, {'name': 'nextUpdate', 'optional': True, 'type': 'Time'}, {'element': {'members': [{'name': 'userCertificate', 'type': 'CertificateSerialNumber'}, {'name': 'revocationDate', 'type': 'Time'}, {'name': 'crlEntryExtensions', 'optional': True, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'name': 'revokedCertificates', 'optional': True, 'type': 'SEQUENCE ' 'OF'}, {'name': 'crlExtensions', 'optional': True, 'tag': {'number': 0}, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'TBSCertificate': {'members': [{'default': 'v1', 'name': 'version', 'tag': {'number': 0}, 'type': 'Version'}, {'name': 'serialNumber', 'type': 'CertificateSerialNumber'}, {'name': 'signature', 'type': 'AlgorithmIdentifier'}, {'name': 'issuer', 'type': 'Name'}, {'name': 'validity', 'type': 'Validity'}, {'name': 'subject', 'type': 'Name'}, {'name': 'subjectPublicKeyInfo', 'type': 'SubjectPublicKeyInfo'}, {'name': 'issuerUniqueID', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'UniqueIdentifier'}, {'name': 'subjectUniqueID', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'UniqueIdentifier'}, {'name': 'extensions', 'optional': True, 'tag': {'number': 3}, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'TeletexCommonName': {'size': [(1, 'ub-common-name-length')], 'type': 'TeletexString'}, 'TeletexDomainDefinedAttribute': {'members': [{'name': 'type', 'size': [(1, 'ub-domain-defined-attribute-type-length')], 'type': 'TeletexString'}, {'name': 'value', 'size': [(1, 'ub-domain-defined-attribute-value-length')], 'type': 'TeletexString'}], 'type': 'SEQUENCE'}, 'TeletexDomainDefinedAttributes': {'element': {'type': 'TeletexDomainDefinedAttribute'}, 'size': [(1, 'ub-domain-defined-attributes')], 'type': 'SEQUENCE ' 'OF'}, 'TeletexOrganizationName': {'size': [(1, 'ub-organization-name-length')], 'type': 'TeletexString'}, 'TeletexOrganizationalUnitName': {'size': [(1, 'ub-organizational-unit-name-length')], 'type': 'TeletexString'}, 'TeletexOrganizationalUnitNames': {'element': {'type': 'TeletexOrganizationalUnitName'}, 'size': [(1, 'ub-organizational-units')], 'type': 'SEQUENCE ' 'OF'}, 'TeletexPersonalName': {'members': [{'name': 'surname', 'size': [(1, 'ub-surname-length')], 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'TeletexString'}, {'name': 'given-name', 'optional': True, 'size': [(1, 'ub-given-name-length')], 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'TeletexString'}, {'name': 'initials', 'optional': True, 'size': [(1, 'ub-initials-length')], 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'TeletexString'}, {'name': 'generation-qualifier', 'optional': True, 'size': [(1, 'ub-generation-qualifier-length')], 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'TeletexString'}], 'type': 'SET'}, 'TerminalIdentifier': {'size': [(1, 'ub-terminal-id-length')], 'type': 'PrintableString'}, 'TerminalType': {'named-numbers': {'g3-facsimile': 5, 'g4-facsimile': 6, 'ia5-terminal': 7, 'teletex': 4, 'telex': 3, 'videotex': 8}, 'restricted-to': [(0, 'ub-integer-options')], 'type': 'INTEGER'}, 'Time': {'members': [{'name': 'utcTime', 'type': 'UTCTime'}, {'name': 'generalTime', 'type': 'GeneralizedTime'}], 'type': 'CHOICE'}, 'UnformattedPostalAddress': {'members': [{'element': {'size': [(1, 'ub-pds-parameter-length')], 'type': 'PrintableString'}, 'name': 'printable-address', 'optional': True, 'size': [(1, 'ub-pds-physical-address-lines')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'teletex-string', 'optional': True, 'size': [(1, 'ub-unformatted-address-length')], 'type': 'TeletexString'}], 'type': 'SET'}, 'UniqueIdentifier': {'type': 'BIT STRING'}, 'UniquePostalName': {'type': 'PDSParameter'}, 'Validity': {'members': [{'name': 'notBefore', 'type': 'Time'}, {'name': 'notAfter', 'type': 'Time'}], 'type': 'SEQUENCE'}, 'Version': {'named-numbers': {'v1': 0, 'v2': 1, 'v3': 2}, 'type': 'INTEGER'}, 'X121Address': {'size': [(1, 'ub-x121-address-length')], 'type': 'NumericString'}, 'X520CommonName': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-common-name')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-common-name')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-common-name')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-common-name')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-common-name')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520LocalityName': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-locality-name')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-locality-name')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-locality-name')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-locality-name')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-locality-name')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520OrganizationName': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-organization-name')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-organization-name')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-organization-name')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-organization-name')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-organization-name')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520OrganizationalUnitName': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-organizational-unit-name')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-organizational-unit-name')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-organizational-unit-name')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-organizational-unit-name')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-organizational-unit-name')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520Pseudonym': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-pseudonym')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-pseudonym')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-pseudonym')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-pseudonym')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-pseudonym')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520SerialNumber': {'size': [(1, 'ub-serial-number')], 'type': 'PrintableString'}, 'X520StateOrProvinceName': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-state-name')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-state-name')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-state-name')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-state-name')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-state-name')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520Title': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-title')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-title')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-title')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-title')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-title')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520countryName': {'size': [2], 'type': 'PrintableString'}, 'X520dnQualifier': {'type': 'PrintableString'}, 'X520name': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-name')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-name')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-name')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-name')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-name')], 'type': 'BMPString'}], 'type': 'CHOICE'}}, 'values': {'common-name': {'type': 'INTEGER', 'value': 1}, 'extended-network-address': {'type': 'INTEGER', 'value': 22}, 'extension-OR-address-components': {'type': 'INTEGER', 'value': 12}, 'extension-physical-delivery-address-components': {'type': 'INTEGER', 'value': 15}, 'id-ad': {'type': 'OBJECT IDENTIFIER', 'value': ['id-pkix', 48]}, 'id-ad-caIssuers': {'type': 'OBJECT IDENTIFIER', 'value': ['id-ad', 2]}, 'id-ad-caRepository': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ad', 5]}, 'id-ad-ocsp': {'type': 'OBJECT IDENTIFIER', 'value': ['id-ad', 1]}, 'id-ad-timeStamping': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ad', 3]}, 'id-at': {'type': 'OBJECT IDENTIFIER', 'value': [('joint-iso-ccitt', 2), ('ds', 5), 4]}, 'id-at-commonName': {'type': 'AttributeType', 'value': None}, 'id-at-countryName': {'type': 'AttributeType', 'value': None}, 'id-at-dnQualifier': {'type': 'AttributeType', 'value': None}, 'id-at-generationQualifier': {'type': 'AttributeType', 'value': None}, 'id-at-givenName': {'type': 'AttributeType', 'value': None}, 'id-at-initials': {'type': 'AttributeType', 'value': None}, 'id-at-localityName': {'type': 'AttributeType', 'value': None}, 'id-at-name': {'type': 'AttributeType', 'value': None}, 'id-at-organizationName': {'type': 'AttributeType', 'value': None}, 'id-at-organizationalUnitName': {'type': 'AttributeType', 'value': None}, 'id-at-pseudonym': {'type': 'AttributeType', 'value': None}, 'id-at-serialNumber': {'type': 'AttributeType', 'value': None}, 'id-at-stateOrProvinceName': {'type': 'AttributeType', 'value': None}, 'id-at-surname': {'type': 'AttributeType', 'value': None}, 'id-at-title': {'type': 'AttributeType', 'value': None}, 'id-domainComponent': {'type': 'AttributeType', 'value': None}, 'id-emailAddress': {'type': 'AttributeType', 'value': None}, 'id-kp': {'type': 'OBJECT IDENTIFIER', 'value': ['id-pkix', 3]}, 'id-pe': {'type': 'OBJECT IDENTIFIER', 'value': ['id-pkix', 1]}, 'id-pkix': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('identified-organization', 3), ('dod', 6), ('internet', 1), ('security', 5), ('mechanisms', 5), ('pkix', 7)]}, 'id-qt': {'type': 'OBJECT IDENTIFIER', 'value': ['id-pkix', 2]}, 'id-qt-cps': {'type': 'OBJECT IDENTIFIER', 'value': ['id-qt', 1]}, 'id-qt-unotice': {'type': 'OBJECT IDENTIFIER', 'value': ['id-qt', 2]}, 'local-postal-attributes': {'type': 'INTEGER', 'value': 21}, 'pds-name': {'type': 'INTEGER', 'value': 7}, 'physical-delivery-country-name': {'type': 'INTEGER', 'value': 8}, 'physical-delivery-office-name': {'type': 'INTEGER', 'value': 10}, 'physical-delivery-office-number': {'type': 'INTEGER', 'value': 11}, 'physical-delivery-organization-name': {'type': 'INTEGER', 'value': 14}, 'physical-delivery-personal-name': {'type': 'INTEGER', 'value': 13}, 'pkcs-9': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), 9]}, 'post-office-box-address': {'type': 'INTEGER', 'value': 18}, 'postal-code': {'type': 'INTEGER', 'value': 9}, 'poste-restante-address': {'type': 'INTEGER', 'value': 19}, 'street-address': {'type': 'INTEGER', 'value': 17}, 'teletex-common-name': {'type': 'INTEGER', 'value': 2}, 'teletex-domain-defined-attributes': {'type': 'INTEGER', 'value': 6}, 'teletex-organization-name': {'type': 'INTEGER', 'value': 3}, 'teletex-organizational-unit-names': {'type': 'INTEGER', 'value': 5}, 'teletex-personal-name': {'type': 'INTEGER', 'value': 4}, 'terminal-type': {'type': 'INTEGER', 'value': 23}, 'ub-common-name': {'type': 'INTEGER', 'value': 64}, 'ub-common-name-length': {'type': 'INTEGER', 'value': 64}, 'ub-country-name-alpha-length': {'type': 'INTEGER', 'value': 2}, 'ub-country-name-numeric-length': {'type': 'INTEGER', 'value': 3}, 'ub-domain-defined-attribute-type-length': {'type': 'INTEGER', 'value': 8}, 'ub-domain-defined-attribute-value-length': {'type': 'INTEGER', 'value': 128}, 'ub-domain-defined-attributes': {'type': 'INTEGER', 'value': 4}, 'ub-domain-name-length': {'type': 'INTEGER', 'value': 16}, 'ub-e163-4-number-length': {'type': 'INTEGER', 'value': 15}, 'ub-e163-4-sub-address-length': {'type': 'INTEGER', 'value': 40}, 'ub-emailaddress-length': {'type': 'INTEGER', 'value': 255}, 'ub-extension-attributes': {'type': 'INTEGER', 'value': 256}, 'ub-generation-qualifier-length': {'type': 'INTEGER', 'value': 3}, 'ub-given-name-length': {'type': 'INTEGER', 'value': 16}, 'ub-initials-length': {'type': 'INTEGER', 'value': 5}, 'ub-integer-options': {'type': 'INTEGER', 'value': 256}, 'ub-locality-name': {'type': 'INTEGER', 'value': 128}, 'ub-match': {'type': 'INTEGER', 'value': 128}, 'ub-name': {'type': 'INTEGER', 'value': 32768}, 'ub-numeric-user-id-length': {'type': 'INTEGER', 'value': 32}, 'ub-organization-name': {'type': 'INTEGER', 'value': 64}, 'ub-organization-name-length': {'type': 'INTEGER', 'value': 64}, 'ub-organizational-unit-name': {'type': 'INTEGER', 'value': 64}, 'ub-organizational-unit-name-length': {'type': 'INTEGER', 'value': 32}, 'ub-organizational-units': {'type': 'INTEGER', 'value': 4}, 'ub-pds-name-length': {'type': 'INTEGER', 'value': 16}, 'ub-pds-parameter-length': {'type': 'INTEGER', 'value': 30}, 'ub-pds-physical-address-lines': {'type': 'INTEGER', 'value': 6}, 'ub-postal-code-length': {'type': 'INTEGER', 'value': 16}, 'ub-pseudonym': {'type': 'INTEGER', 'value': 128}, 'ub-serial-number': {'type': 'INTEGER', 'value': 64}, 'ub-state-name': {'type': 'INTEGER', 'value': 128}, 'ub-surname-length': {'type': 'INTEGER', 'value': 40}, 'ub-terminal-id-length': {'type': 'INTEGER', 'value': 24}, 'ub-title': {'type': 'INTEGER', 'value': 64}, 'ub-unformatted-address-length': {'type': 'INTEGER', 'value': 180}, 'ub-x121-address-length': {'type': 'INTEGER', 'value': 16}, 'unformatted-postal-address': {'type': 'INTEGER', 'value': 16}, 'unique-postal-name': {'type': 'INTEGER', 'value': 20}}}, 'PKIX1Implicit88': {'extensibility-implied': False, 'imports': {'PKIX1Explicit88': ['Attribute', 'BMPString', 'CertificateSerialNumber', 'DirectoryString', 'Name', 'ORAddress', 'RelativeDistinguishedName', 'UTF8String', 'id-kp', 'id-pe', 'id-qt-cps', 'id-qt-unotice']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'IMPLICIT', 'types': {'AccessDescription': {'members': [{'name': 'accessMethod', 'type': 'OBJECT ' 'IDENTIFIER'}, {'name': 'accessLocation', 'type': 'GeneralName'}], 'type': 'SEQUENCE'}, 'AnotherName': {'members': [{'name': 'type-id', 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'value', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'type-id'}], 'type': 'SEQUENCE'}, 'AuthorityInfoAccessSyntax': {'element': {'type': 'AccessDescription'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE ' 'OF'}, 'AuthorityKeyIdentifier': {'members': [{'name': 'keyIdentifier', 'optional': True, 'tag': {'number': 0}, 'type': 'KeyIdentifier'}, {'name': 'authorityCertIssuer', 'optional': True, 'tag': {'number': 1}, 'type': 'GeneralNames'}, {'name': 'authorityCertSerialNumber', 'optional': True, 'tag': {'number': 2}, 'type': 'CertificateSerialNumber'}], 'type': 'SEQUENCE'}, 'BaseCRLNumber': {'type': 'CRLNumber'}, 'BaseDistance': {'restricted-to': [(0, 'MAX')], 'type': 'INTEGER'}, 'BasicConstraints': {'members': [{'default': False, 'name': 'cA', 'type': 'BOOLEAN'}, {'name': 'pathLenConstraint', 'optional': True, 'restricted-to': [(0, 'MAX')], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'CPSuri': {'type': 'IA5String'}, 'CRLDistributionPoints': {'element': {'type': 'DistributionPoint'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'CRLNumber': {'restricted-to': [(0, 'MAX')], 'type': 'INTEGER'}, 'CRLReason': {'type': 'ENUMERATED', 'values': [('unspecified', 0), ('keyCompromise', 1), ('cACompromise', 2), ('affiliationChanged', 3), ('superseded', 4), ('cessationOfOperation', 5), ('certificateHold', 6), ('removeFromCRL', 8), ('privilegeWithdrawn', 9), ('aACompromise', 10)]}, 'CertPolicyId': {'type': 'OBJECT IDENTIFIER'}, 'CertificateIssuer': {'type': 'GeneralNames'}, 'CertificatePolicies': {'element': {'type': 'PolicyInformation'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'DisplayText': {'members': [{'name': 'ia5String', 'size': [(1, 200)], 'type': 'IA5String'}, {'name': 'visibleString', 'size': [(1, 200)], 'type': 'VisibleString'}, {'name': 'bmpString', 'size': [(1, 200)], 'type': 'BMPString'}, {'name': 'utf8String', 'size': [(1, 200)], 'type': 'UTF8String'}], 'type': 'CHOICE'}, 'DistributionPoint': {'members': [{'name': 'distributionPoint', 'optional': True, 'tag': {'number': 0}, 'type': 'DistributionPointName'}, {'name': 'reasons', 'optional': True, 'tag': {'number': 1}, 'type': 'ReasonFlags'}, {'name': 'cRLIssuer', 'optional': True, 'tag': {'number': 2}, 'type': 'GeneralNames'}], 'type': 'SEQUENCE'}, 'DistributionPointName': {'members': [{'name': 'fullName', 'tag': {'number': 0}, 'type': 'GeneralNames'}, {'name': 'nameRelativeToCRLIssuer', 'tag': {'number': 1}, 'type': 'RelativeDistinguishedName'}], 'type': 'CHOICE'}, 'EDIPartyName': {'members': [{'name': 'nameAssigner', 'optional': True, 'tag': {'number': 0}, 'type': 'DirectoryString'}, {'name': 'partyName', 'tag': {'number': 1}, 'type': 'DirectoryString'}], 'type': 'SEQUENCE'}, 'ExtKeyUsageSyntax': {'element': {'type': 'KeyPurposeId'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'FreshestCRL': {'type': 'CRLDistributionPoints'}, 'GeneralName': {'members': [{'name': 'otherName', 'tag': {'number': 0}, 'type': 'AnotherName'}, {'name': 'rfc822Name', 'tag': {'number': 1}, 'type': 'IA5String'}, {'name': 'dNSName', 'tag': {'number': 2}, 'type': 'IA5String'}, {'name': 'x400Address', 'tag': {'number': 3}, 'type': 'ORAddress'}, {'name': 'directoryName', 'tag': {'number': 4}, 'type': 'Name'}, {'name': 'ediPartyName', 'tag': {'number': 5}, 'type': 'EDIPartyName'}, {'name': 'uniformResourceIdentifier', 'tag': {'number': 6}, 'type': 'IA5String'}, {'name': 'iPAddress', 'tag': {'number': 7}, 'type': 'OCTET ' 'STRING'}, {'name': 'registeredID', 'tag': {'number': 8}, 'type': 'OBJECT ' 'IDENTIFIER'}], 'type': 'CHOICE'}, 'GeneralNames': {'element': {'type': 'GeneralName'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'GeneralSubtree': {'members': [{'name': 'base', 'type': 'GeneralName'}, {'default': 0, 'name': 'minimum', 'tag': {'number': 0}, 'type': 'BaseDistance'}, {'name': 'maximum', 'optional': True, 'tag': {'number': 1}, 'type': 'BaseDistance'}], 'type': 'SEQUENCE'}, 'GeneralSubtrees': {'element': {'type': 'GeneralSubtree'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'HoldInstructionCode': {'type': 'OBJECT ' 'IDENTIFIER'}, 'InhibitAnyPolicy': {'type': 'SkipCerts'}, 'InvalidityDate': {'type': 'GeneralizedTime'}, 'IssuerAltName': {'type': 'GeneralNames'}, 'IssuingDistributionPoint': {'members': [{'name': 'distributionPoint', 'optional': True, 'tag': {'number': 0}, 'type': 'DistributionPointName'}, {'default': False, 'name': 'onlyContainsUserCerts', 'tag': {'number': 1}, 'type': 'BOOLEAN'}, {'default': False, 'name': 'onlyContainsCACerts', 'tag': {'number': 2}, 'type': 'BOOLEAN'}, {'name': 'onlySomeReasons', 'optional': True, 'tag': {'number': 3}, 'type': 'ReasonFlags'}, {'default': False, 'name': 'indirectCRL', 'tag': {'number': 4}, 'type': 'BOOLEAN'}, {'default': False, 'name': 'onlyContainsAttributeCerts', 'tag': {'number': 5}, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'KeyIdentifier': {'type': 'OCTET STRING'}, 'KeyPurposeId': {'type': 'OBJECT IDENTIFIER'}, 'KeyUsage': {'named-bits': [('digitalSignature', '0'), ('nonRepudiation', '1'), ('keyEncipherment', '2'), ('dataEncipherment', '3'), ('keyAgreement', '4'), ('keyCertSign', '5'), ('cRLSign', '6'), ('encipherOnly', '7'), ('decipherOnly', '8')], 'type': 'BIT STRING'}, 'NameConstraints': {'members': [{'name': 'permittedSubtrees', 'optional': True, 'tag': {'number': 0}, 'type': 'GeneralSubtrees'}, {'name': 'excludedSubtrees', 'optional': True, 'tag': {'number': 1}, 'type': 'GeneralSubtrees'}], 'type': 'SEQUENCE'}, 'NoticeReference': {'members': [{'name': 'organization', 'type': 'DisplayText'}, {'element': {'type': 'INTEGER'}, 'name': 'noticeNumbers', 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'PolicyConstraints': {'members': [{'name': 'requireExplicitPolicy', 'optional': True, 'tag': {'number': 0}, 'type': 'SkipCerts'}, {'name': 'inhibitPolicyMapping', 'optional': True, 'tag': {'number': 1}, 'type': 'SkipCerts'}], 'type': 'SEQUENCE'}, 'PolicyInformation': {'members': [{'name': 'policyIdentifier', 'type': 'CertPolicyId'}, {'element': {'type': 'PolicyQualifierInfo'}, 'name': 'policyQualifiers', 'optional': True, 'size': [(1, 'MAX')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'PolicyMappings': {'element': {'members': [{'name': 'issuerDomainPolicy', 'type': 'CertPolicyId'}, {'name': 'subjectDomainPolicy', 'type': 'CertPolicyId'}], 'type': 'SEQUENCE'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'PolicyQualifierId': {'type': 'OBJECT ' 'IDENTIFIER'}, 'PolicyQualifierInfo': {'members': [{'name': 'policyQualifierId', 'type': 'PolicyQualifierId'}, {'choices': {}, 'name': 'qualifier', 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'policyQualifierId'}], 'type': 'SEQUENCE'}, 'PrivateKeyUsagePeriod': {'members': [{'name': 'notBefore', 'optional': True, 'tag': {'number': 0}, 'type': 'GeneralizedTime'}, {'name': 'notAfter', 'optional': True, 'tag': {'number': 1}, 'type': 'GeneralizedTime'}], 'type': 'SEQUENCE'}, 'ReasonFlags': {'named-bits': [('unused', '0'), ('keyCompromise', '1'), ('cACompromise', '2'), ('affiliationChanged', '3'), ('superseded', '4'), ('cessationOfOperation', '5'), ('certificateHold', '6'), ('privilegeWithdrawn', '7'), ('aACompromise', '8')], 'type': 'BIT STRING'}, 'SkipCerts': {'restricted-to': [(0, 'MAX')], 'type': 'INTEGER'}, 'SubjectAltName': {'type': 'GeneralNames'}, 'SubjectDirectoryAttributes': {'element': {'type': 'Attribute'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE ' 'OF'}, 'SubjectInfoAccessSyntax': {'element': {'type': 'AccessDescription'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE ' 'OF'}, 'SubjectKeyIdentifier': {'type': 'KeyIdentifier'}, 'UserNotice': {'members': [{'name': 'noticeRef', 'optional': True, 'type': 'NoticeReference'}, {'name': 'explicitText', 'optional': True, 'type': 'DisplayText'}], 'type': 'SEQUENCE'}}, 'values': {'anyExtendedKeyUsage': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce-extKeyUsage', 0]}, 'anyPolicy': {'type': 'OBJECT IDENTIFIER', 'value': ['id-ce-certificatePolicies', 0]}, 'holdInstruction': {'type': 'OBJECT IDENTIFIER', 'value': [('joint-iso-itu-t', 2), ('member-body', 2), ('us', 840), ('x9cm', 10040), 2]}, 'id-ce': {'type': 'OBJECT IDENTIFIER', 'value': [('joint-iso-ccitt', 2), ('ds', 5), 29]}, 'id-ce-authorityKeyIdentifier': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 35]}, 'id-ce-basicConstraints': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 19]}, 'id-ce-cRLDistributionPoints': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 31]}, 'id-ce-cRLNumber': {'type': 'OBJECT IDENTIFIER', 'value': ['id-ce', 20]}, 'id-ce-cRLReasons': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 21]}, 'id-ce-certificateIssuer': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 29]}, 'id-ce-certificatePolicies': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 32]}, 'id-ce-deltaCRLIndicator': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 27]}, 'id-ce-extKeyUsage': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 37]}, 'id-ce-freshestCRL': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 46]}, 'id-ce-holdInstructionCode': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 23]}, 'id-ce-inhibitAnyPolicy': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 54]}, 'id-ce-invalidityDate': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 24]}, 'id-ce-issuerAltName': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 18]}, 'id-ce-issuingDistributionPoint': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 28]}, 'id-ce-keyUsage': {'type': 'OBJECT IDENTIFIER', 'value': ['id-ce', 15]}, 'id-ce-nameConstraints': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 30]}, 'id-ce-policyConstraints': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 36]}, 'id-ce-policyMappings': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 33]}, 'id-ce-privateKeyUsagePeriod': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 16]}, 'id-ce-subjectAltName': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 17]}, 'id-ce-subjectDirectoryAttributes': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 9]}, 'id-ce-subjectKeyIdentifier': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 14]}, 'id-holdinstruction-callissuer': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['holdInstruction', 2]}, 'id-holdinstruction-none': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['holdInstruction', 1]}, 'id-holdinstruction-reject': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['holdInstruction', 3]}, 'id-kp-OCSPSigning': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-kp', 9]}, 'id-kp-clientAuth': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-kp', 2]}, 'id-kp-codeSigning': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-kp', 3]}, 'id-kp-emailProtection': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-kp', 4]}, 'id-kp-serverAuth': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-kp', 1]}, 'id-kp-timeStamping': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-kp', 8]}, 'id-pe-authorityInfoAccess': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-pe', 1]}, 'id-pe-subjectInfoAccess': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-pe', 11]}}}}asn1tools-0.169.0/tests/files/ietf/rfc5280_modified.asn000066400000000000000000001023751524544274600224660ustar00rootroot00000000000000PKIX1Explicit88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18) } DEFINITIONS EXPLICIT TAGS ::= BEGIN -- EXPORTS ALL -- -- IMPORTS NONE -- -- UNIVERSAL Types defined in 1993 and 1998 ASN.1 -- and required by this specification -- UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING -- UniversalString is defined in ASN.1:1993 -- BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING -- BMPString is the subtype of UniversalString and models -- the Basic Multilingual Plane of ISO/IEC 10646 -- UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING -- The content of this type conforms to RFC 3629. -- PKIX specific OIDs id-pkix OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) } -- PKIX arcs id-pe OBJECT IDENTIFIER ::= { id-pkix 1 } -- arc for private certificate extensions id-qt OBJECT IDENTIFIER ::= { id-pkix 2 } -- arc for policy qualifier types id-kp OBJECT IDENTIFIER ::= { id-pkix 3 } -- arc for extended key purpose OIDS id-ad OBJECT IDENTIFIER ::= { id-pkix 48 } -- arc for access descriptors -- policyQualifierIds for Internet policy qualifiers id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 } -- OID for CPS qualifier id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 } -- OID for user notice qualifier -- access descriptor definitions id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 } id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 } id-ad-timeStamping OBJECT IDENTIFIER ::= { id-ad 3 } id-ad-caRepository OBJECT IDENTIFIER ::= { id-ad 5 } -- attribute data types Attribute ::= SEQUENCE { type AttributeType, values SET OF AttributeValue } -- at least one value is required AttributeType ::= OBJECT IDENTIFIER AttributeValue ::= ANY DEFINED BY type AttributeTypeAndValue ::= SEQUENCE { type AttributeType, value AttributeValue } -- suggested naming attributes: Definition of the following -- information object set may be augmented to meet local -- requirements. Note that deleting members of the set may -- prevent interoperability with conforming implementations. -- presented in pairs: the AttributeType followed by the -- type definition for the corresponding AttributeValue -- Arc for standard naming attributes id-at OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 4 } -- Naming attributes of type X520name id-at-name AttributeType ::= { id-at 41 } id-at-surname AttributeType ::= { id-at 4 } id-at-givenName AttributeType ::= { id-at 42 } id-at-initials AttributeType ::= { id-at 43 } id-at-generationQualifier AttributeType ::= { id-at 44 } -- Naming attributes of type X520Name: -- X520name ::= DirectoryString (SIZE (1..ub-name)) -- -- Expanded to avoid parameterized type: X520name ::= CHOICE { teletexString TeletexString (SIZE (1..ub-name)), printableString PrintableString (SIZE (1..ub-name)), universalString UniversalString (SIZE (1..ub-name)), utf8String UTF8String (SIZE (1..ub-name)), bmpString BMPString (SIZE (1..ub-name)) } -- Naming attributes of type X520CommonName id-at-commonName AttributeType ::= { id-at 3 } -- Naming attributes of type X520CommonName: -- X520CommonName ::= DirectoryName (SIZE (1..ub-common-name)) -- -- Expanded to avoid parameterized type: X520CommonName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-common-name)), printableString PrintableString (SIZE (1..ub-common-name)), universalString UniversalString (SIZE (1..ub-common-name)), utf8String UTF8String (SIZE (1..ub-common-name)), bmpString BMPString (SIZE (1..ub-common-name)) } -- Naming attributes of type X520LocalityName id-at-localityName AttributeType ::= { id-at 7 } -- Naming attributes of type X520LocalityName: -- X520LocalityName ::= DirectoryName (SIZE (1..ub-locality-name)) -- -- Expanded to avoid parameterized type: X520LocalityName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-locality-name)), printableString PrintableString (SIZE (1..ub-locality-name)), universalString UniversalString (SIZE (1..ub-locality-name)), utf8String UTF8String (SIZE (1..ub-locality-name)), bmpString BMPString (SIZE (1..ub-locality-name)) } -- Naming attributes of type X520StateOrProvinceName id-at-stateOrProvinceName AttributeType ::= { id-at 8 } -- Naming attributes of type X520StateOrProvinceName: -- X520StateOrProvinceName ::= DirectoryName (SIZE (1..ub-state-name)) -- -- Expanded to avoid parameterized type: X520StateOrProvinceName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-state-name)), printableString PrintableString (SIZE (1..ub-state-name)), universalString UniversalString (SIZE (1..ub-state-name)), utf8String UTF8String (SIZE (1..ub-state-name)), bmpString BMPString (SIZE (1..ub-state-name)) } -- Naming attributes of type X520OrganizationName id-at-organizationName AttributeType ::= { id-at 10 } -- Naming attributes of type X520OrganizationName: -- X520OrganizationName ::= -- DirectoryName (SIZE (1..ub-organization-name)) -- -- Expanded to avoid parameterized type: X520OrganizationName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-organization-name)), printableString PrintableString (SIZE (1..ub-organization-name)), universalString UniversalString (SIZE (1..ub-organization-name)), utf8String UTF8String (SIZE (1..ub-organization-name)), bmpString BMPString (SIZE (1..ub-organization-name)) } -- Naming attributes of type X520OrganizationalUnitName id-at-organizationalUnitName AttributeType ::= { id-at 11 } -- Naming attributes of type X520OrganizationalUnitName: -- X520OrganizationalUnitName ::= -- DirectoryName (SIZE (1..ub-organizational-unit-name)) -- -- Expanded to avoid parameterized type: X520OrganizationalUnitName ::= CHOICE { teletexString TeletexString (SIZE (1..ub-organizational-unit-name)), printableString PrintableString (SIZE (1..ub-organizational-unit-name)), universalString UniversalString (SIZE (1..ub-organizational-unit-name)), utf8String UTF8String (SIZE (1..ub-organizational-unit-name)), bmpString BMPString (SIZE (1..ub-organizational-unit-name)) } -- Naming attributes of type X520Title id-at-title AttributeType ::= { id-at 12 } -- Naming attributes of type X520Title: -- X520Title ::= DirectoryName (SIZE (1..ub-title)) -- -- Expanded to avoid parameterized type: X520Title ::= CHOICE { teletexString TeletexString (SIZE (1..ub-title)), printableString PrintableString (SIZE (1..ub-title)), universalString UniversalString (SIZE (1..ub-title)), utf8String UTF8String (SIZE (1..ub-title)), bmpString BMPString (SIZE (1..ub-title)) } -- Naming attributes of type X520dnQualifier id-at-dnQualifier AttributeType ::= { id-at 46 } X520dnQualifier ::= PrintableString -- Naming attributes of type X520countryName (digraph from IS 3166) id-at-countryName AttributeType ::= { id-at 6 } X520countryName ::= PrintableString (SIZE (2)) -- Naming attributes of type X520SerialNumber id-at-serialNumber AttributeType ::= { id-at 5 } X520SerialNumber ::= PrintableString (SIZE (1..ub-serial-number)) -- Naming attributes of type X520Pseudonym id-at-pseudonym AttributeType ::= { id-at 65 } -- Naming attributes of type X520Pseudonym: -- X520Pseudonym ::= DirectoryName (SIZE (1..ub-pseudonym)) -- -- Expanded to avoid parameterized type: X520Pseudonym ::= CHOICE { teletexString TeletexString (SIZE (1..ub-pseudonym)), printableString PrintableString (SIZE (1..ub-pseudonym)), universalString UniversalString (SIZE (1..ub-pseudonym)), utf8String UTF8String (SIZE (1..ub-pseudonym)), bmpString BMPString (SIZE (1..ub-pseudonym)) } -- Naming attributes of type DomainComponent (from RFC 4519) id-domainComponent AttributeType ::= { 0 9 2342 19200300 100 1 25 } DomainComponent ::= IA5String -- Legacy attributes pkcs-9 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 } id-emailAddress AttributeType ::= { pkcs-9 1 } EmailAddress ::= IA5String (SIZE (1..ub-emailaddress-length)) -- naming data types -- Name ::= CHOICE { -- only one possibility for now -- rdnSequence RDNSequence } RDNSequence ::= SEQUENCE OF RelativeDistinguishedName DistinguishedName ::= RDNSequence RelativeDistinguishedName ::= SET SIZE (1..MAX) OF AttributeTypeAndValue -- Directory string type -- DirectoryString ::= CHOICE { teletexString TeletexString (SIZE (1..MAX)), printableString PrintableString (SIZE (1..MAX)), universalString UniversalString (SIZE (1..MAX)), utf8String UTF8String (SIZE (1..MAX)), bmpString BMPString (SIZE (1..MAX)) } -- certificate and CRL specific structures begin here Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING } TBSCertificate ::= SEQUENCE { version [0] Version DEFAULT v1, serialNumber CertificateSerialNumber, signature AlgorithmIdentifier, issuer Name, validity Validity, subject Name, subjectPublicKeyInfo SubjectPublicKeyInfo, issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version MUST be v2 or v3 subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, -- If present, version MUST be v2 or v3 extensions [3] Extensions OPTIONAL -- If present, version MUST be v3 -- } Version ::= INTEGER { v1(0), v2(1), v3(2) } CertificateSerialNumber ::= INTEGER Validity ::= SEQUENCE { notBefore Time, notAfter Time } Time ::= CHOICE { utcTime UTCTime, generalTime GeneralizedTime } UniqueIdentifier ::= BIT STRING SubjectPublicKeyInfo ::= SEQUENCE { algorithm AlgorithmIdentifier, subjectPublicKey BIT STRING } Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension Extension ::= SEQUENCE { extnID OBJECT IDENTIFIER, critical BOOLEAN DEFAULT FALSE, extnValue OCTET STRING -- contains the DER encoding of an ASN.1 value -- corresponding to the extension type identified -- by extnID } -- CRL structures CertificateList ::= SEQUENCE { tbsCertList TBSCertList, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING } TBSCertList ::= SEQUENCE { version Version OPTIONAL, -- if present, MUST be v2 signature AlgorithmIdentifier, issuer Name, thisUpdate Time, nextUpdate Time OPTIONAL, revokedCertificates SEQUENCE OF SEQUENCE { userCertificate CertificateSerialNumber, revocationDate Time, crlEntryExtensions Extensions OPTIONAL -- if present, version MUST be v2 } OPTIONAL, crlExtensions [0] Extensions OPTIONAL } -- if present, version MUST be v2 -- Version, Time, CertificateSerialNumber, and Extensions were -- defined earlier for use in the certificate structure AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY DEFINED BY algorithm OPTIONAL } -- contains a value of the type -- registered for use with the -- algorithm object identifier value -- X.400 address syntax starts here ORAddress ::= SEQUENCE { built-in-standard-attributes BuiltInStandardAttributes, built-in-domain-defined-attributes BuiltInDomainDefinedAttributes OPTIONAL, -- see also teletex-domain-defined-attributes extension-attributes ExtensionAttributes OPTIONAL } -- Built-in Standard Attributes BuiltInStandardAttributes ::= SEQUENCE { country-name CountryName OPTIONAL, administration-domain-name AdministrationDomainName OPTIONAL, network-address [0] IMPLICIT NetworkAddress OPTIONAL, -- see also extended-network-address terminal-identifier [1] IMPLICIT TerminalIdentifier OPTIONAL, private-domain-name [2] PrivateDomainName OPTIONAL, organization-name [3] IMPLICIT OrganizationName OPTIONAL, -- see also teletex-organization-name numeric-user-identifier [4] IMPLICIT NumericUserIdentifier OPTIONAL, personal-name [5] IMPLICIT PersonalName OPTIONAL, -- see also teletex-personal-name organizational-unit-names [6] IMPLICIT OrganizationalUnitNames OPTIONAL } -- see also teletex-organizational-unit-names CountryName ::= [APPLICATION 1] CHOICE { x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)), iso-3166-alpha2-code PrintableString (SIZE (ub-country-name-alpha-length)) } AdministrationDomainName ::= [APPLICATION 2] CHOICE { numeric NumericString (SIZE (0..ub-domain-name-length)), printable PrintableString (SIZE (0..ub-domain-name-length)) } NetworkAddress ::= X121Address -- see also extended-network-address X121Address ::= NumericString (SIZE (1..ub-x121-address-length)) TerminalIdentifier ::= PrintableString (SIZE (1..ub-terminal-id-length)) PrivateDomainName ::= CHOICE { numeric NumericString (SIZE (1..ub-domain-name-length)), printable PrintableString (SIZE (1..ub-domain-name-length)) } OrganizationName ::= PrintableString (SIZE (1..ub-organization-name-length)) -- see also teletex-organization-name NumericUserIdentifier ::= NumericString (SIZE (1..ub-numeric-user-id-length)) PersonalName ::= SET { surname [0] IMPLICIT PrintableString (SIZE (1..ub-surname-length)), given-name [1] IMPLICIT PrintableString (SIZE (1..ub-given-name-length)) OPTIONAL, initials [2] IMPLICIT PrintableString (SIZE (1..ub-initials-length)) OPTIONAL, generation-qualifier [3] IMPLICIT PrintableString (SIZE (1..ub-generation-qualifier-length)) OPTIONAL } -- see also teletex-personal-name OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units) OF OrganizationalUnitName -- see also teletex-organizational-unit-names OrganizationalUnitName ::= PrintableString (SIZE (1..ub-organizational-unit-name-length)) -- Built-in Domain-defined Attributes BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE (1..ub-domain-defined-attributes) OF BuiltInDomainDefinedAttribute BuiltInDomainDefinedAttribute ::= SEQUENCE { type PrintableString (SIZE (1..ub-domain-defined-attribute-type-length)), value PrintableString (SIZE (1..ub-domain-defined-attribute-value-length)) } -- Extension Attributes ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF ExtensionAttribute ExtensionAttribute ::= SEQUENCE { extension-attribute-type [0] IMPLICIT INTEGER (0..ub-extension-attributes), extension-attribute-value [1] ANY DEFINED BY extension-attribute-type } -- Extension types and attribute values common-name INTEGER ::= 1 CommonName ::= PrintableString (SIZE (1..ub-common-name-length)) teletex-common-name INTEGER ::= 2 TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length)) teletex-organization-name INTEGER ::= 3 TeletexOrganizationName ::= TeletexString (SIZE (1..ub-organization-name-length)) teletex-personal-name INTEGER ::= 4 TeletexPersonalName ::= SET { surname [0] IMPLICIT TeletexString (SIZE (1..ub-surname-length)), given-name [1] IMPLICIT TeletexString (SIZE (1..ub-given-name-length)) OPTIONAL, initials [2] IMPLICIT TeletexString (SIZE (1..ub-initials-length)) OPTIONAL, generation-qualifier [3] IMPLICIT TeletexString (SIZE (1..ub-generation-qualifier-length)) OPTIONAL } teletex-organizational-unit-names INTEGER ::= 5 TeletexOrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units) OF TeletexOrganizationalUnitName TeletexOrganizationalUnitName ::= TeletexString (SIZE (1..ub-organizational-unit-name-length)) pds-name INTEGER ::= 7 PDSName ::= PrintableString (SIZE (1..ub-pds-name-length)) physical-delivery-country-name INTEGER ::= 8 PhysicalDeliveryCountryName ::= CHOICE { x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)), iso-3166-alpha2-code PrintableString (SIZE (ub-country-name-alpha-length)) } postal-code INTEGER ::= 9 PostalCode ::= CHOICE { numeric-code NumericString (SIZE (1..ub-postal-code-length)), printable-code PrintableString (SIZE (1..ub-postal-code-length)) } physical-delivery-office-name INTEGER ::= 10 PhysicalDeliveryOfficeName ::= PDSParameter physical-delivery-office-number INTEGER ::= 11 PhysicalDeliveryOfficeNumber ::= PDSParameter extension-OR-address-components INTEGER ::= 12 ExtensionORAddressComponents ::= PDSParameter physical-delivery-personal-name INTEGER ::= 13 PhysicalDeliveryPersonalName ::= PDSParameter physical-delivery-organization-name INTEGER ::= 14 PhysicalDeliveryOrganizationName ::= PDSParameter extension-physical-delivery-address-components INTEGER ::= 15 ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter unformatted-postal-address INTEGER ::= 16 UnformattedPostalAddress ::= SET { printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines) OF PrintableString (SIZE (1..ub-pds-parameter-length)) OPTIONAL, teletex-string TeletexString (SIZE (1..ub-unformatted-address-length)) OPTIONAL } street-address INTEGER ::= 17 StreetAddress ::= PDSParameter post-office-box-address INTEGER ::= 18 PostOfficeBoxAddress ::= PDSParameter poste-restante-address INTEGER ::= 19 PosteRestanteAddress ::= PDSParameter unique-postal-name INTEGER ::= 20 UniquePostalName ::= PDSParameter local-postal-attributes INTEGER ::= 21 LocalPostalAttributes ::= PDSParameter PDSParameter ::= SET { printable-string PrintableString (SIZE(1..ub-pds-parameter-length)) OPTIONAL, teletex-string TeletexString (SIZE(1..ub-pds-parameter-length)) OPTIONAL } extended-network-address INTEGER ::= 22 ExtendedNetworkAddress ::= CHOICE { e163-4-address SEQUENCE { number [0] IMPLICIT NumericString (SIZE (1..ub-e163-4-number-length)), sub-address [1] IMPLICIT NumericString (SIZE (1..ub-e163-4-sub-address-length)) OPTIONAL }, psap-address [0] IMPLICIT PresentationAddress } PresentationAddress ::= SEQUENCE { pSelector [0] EXPLICIT OCTET STRING OPTIONAL, sSelector [1] EXPLICIT OCTET STRING OPTIONAL, tSelector [2] EXPLICIT OCTET STRING OPTIONAL, nAddresses [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING } terminal-type INTEGER ::= 23 TerminalType ::= INTEGER { telex (3), teletex (4), g3-facsimile (5), g4-facsimile (6), ia5-terminal (7), videotex (8) } (0..ub-integer-options) -- Extension Domain-defined Attributes teletex-domain-defined-attributes INTEGER ::= 6 TeletexDomainDefinedAttributes ::= SEQUENCE SIZE (1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute TeletexDomainDefinedAttribute ::= SEQUENCE { type TeletexString (SIZE (1..ub-domain-defined-attribute-type-length)), value TeletexString (SIZE (1..ub-domain-defined-attribute-value-length)) } -- specifications of Upper Bounds MUST be regarded as mandatory -- from Annex B of ITU-T X.411 Reference Definition of MTS Parameter -- Upper Bounds -- Upper Bounds ub-name INTEGER ::= 32768 ub-common-name INTEGER ::= 64 ub-locality-name INTEGER ::= 128 ub-state-name INTEGER ::= 128 ub-organization-name INTEGER ::= 64 ub-organizational-unit-name INTEGER ::= 64 ub-title INTEGER ::= 64 ub-serial-number INTEGER ::= 64 ub-match INTEGER ::= 128 ub-emailaddress-length INTEGER ::= 255 ub-common-name-length INTEGER ::= 64 ub-country-name-alpha-length INTEGER ::= 2 ub-country-name-numeric-length INTEGER ::= 3 ub-domain-defined-attributes INTEGER ::= 4 ub-domain-defined-attribute-type-length INTEGER ::= 8 ub-domain-defined-attribute-value-length INTEGER ::= 128 ub-domain-name-length INTEGER ::= 16 ub-extension-attributes INTEGER ::= 256 ub-e163-4-number-length INTEGER ::= 15 ub-e163-4-sub-address-length INTEGER ::= 40 ub-generation-qualifier-length INTEGER ::= 3 ub-given-name-length INTEGER ::= 16 ub-initials-length INTEGER ::= 5 ub-integer-options INTEGER ::= 256 ub-numeric-user-id-length INTEGER ::= 32 ub-organization-name-length INTEGER ::= 64 ub-organizational-unit-name-length INTEGER ::= 32 ub-organizational-units INTEGER ::= 4 ub-pds-name-length INTEGER ::= 16 ub-pds-parameter-length INTEGER ::= 30 ub-pds-physical-address-lines INTEGER ::= 6 ub-postal-code-length INTEGER ::= 16 ub-pseudonym INTEGER ::= 128 ub-surname-length INTEGER ::= 40 ub-terminal-id-length INTEGER ::= 24 ub-unformatted-address-length INTEGER ::= 180 ub-x121-address-length INTEGER ::= 16 -- Note - upper bounds on string types, such as TeletexString, are -- measured in characters. Excepting PrintableString or IA5String, a -- significantly greater number of octets will be required to hold -- such a value. As a minimum, 16 octets, or twice the specified -- upper bound, whichever is the larger, should be allowed for -- TeletexString. For UTF8String or UniversalString at least four -- times the upper bound should be allowed. END PKIX1Implicit88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit(19) } DEFINITIONS IMPLICIT TAGS ::= BEGIN -- EXPORTS ALL -- IMPORTS id-pe, id-kp, id-qt-unotice, id-qt-cps, -- delete following line if "new" types are supported -- BMPString, UTF8String, -- end "new" types -- ORAddress, Name, RelativeDistinguishedName, CertificateSerialNumber, Attribute, DirectoryString FROM PKIX1Explicit88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18) }; -- ISO arc for standard certificate and CRL extensions id-ce OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 29} -- authority key identifier OID and syntax id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } AuthorityKeyIdentifier ::= SEQUENCE { keyIdentifier [0] KeyIdentifier OPTIONAL, authorityCertIssuer [1] GeneralNames OPTIONAL, authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL } -- authorityCertIssuer and authorityCertSerialNumber MUST both -- be present or both be absent KeyIdentifier ::= OCTET STRING -- subject key identifier OID and syntax id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 } SubjectKeyIdentifier ::= KeyIdentifier -- key usage extension OID and syntax id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } KeyUsage ::= BIT STRING { digitalSignature (0), nonRepudiation (1), -- recent editions of X.509 have -- renamed this bit to contentCommitment keyEncipherment (2), dataEncipherment (3), keyAgreement (4), keyCertSign (5), cRLSign (6), encipherOnly (7), decipherOnly (8) } -- private key usage period extension OID and syntax id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::= { id-ce 16 } PrivateKeyUsagePeriod ::= SEQUENCE { notBefore [0] GeneralizedTime OPTIONAL, notAfter [1] GeneralizedTime OPTIONAL } -- either notBefore or notAfter MUST be present -- certificate policies extension OID and syntax id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 } anyPolicy OBJECT IDENTIFIER ::= { id-ce-certificatePolicies 0 } CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation PolicyInformation ::= SEQUENCE { policyIdentifier CertPolicyId, policyQualifiers SEQUENCE SIZE (1..MAX) OF PolicyQualifierInfo OPTIONAL } CertPolicyId ::= OBJECT IDENTIFIER PolicyQualifierInfo ::= SEQUENCE { policyQualifierId PolicyQualifierId, qualifier ANY DEFINED BY policyQualifierId } -- Implementations that recognize additional policy qualifiers MUST -- augment the following definition for PolicyQualifierId PolicyQualifierId ::= OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice ) -- CPS pointer qualifier CPSuri ::= IA5String -- user notice qualifier UserNotice ::= SEQUENCE { noticeRef NoticeReference OPTIONAL, explicitText DisplayText OPTIONAL } NoticeReference ::= SEQUENCE { organization DisplayText, noticeNumbers SEQUENCE OF INTEGER } DisplayText ::= CHOICE { ia5String IA5String (SIZE (1..200)), visibleString VisibleString (SIZE (1..200)), bmpString BMPString (SIZE (1..200)), utf8String UTF8String (SIZE (1..200)) } -- policy mapping extension OID and syntax id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 } PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE { issuerDomainPolicy CertPolicyId, subjectDomainPolicy CertPolicyId } -- subject alternative name extension OID and syntax id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 } SubjectAltName ::= GeneralNames GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName GeneralName ::= CHOICE { otherName [0] AnotherName, rfc822Name [1] IA5String, dNSName [2] IA5String, x400Address [3] ORAddress, directoryName [4] Name, ediPartyName [5] EDIPartyName, uniformResourceIdentifier [6] IA5String, iPAddress [7] OCTET STRING, registeredID [8] OBJECT IDENTIFIER } -- AnotherName replaces OTHER-NAME ::= TYPE-IDENTIFIER, as -- TYPE-IDENTIFIER is not supported in the '88 ASN.1 syntax AnotherName ::= SEQUENCE { type-id OBJECT IDENTIFIER, value [0] EXPLICIT ANY DEFINED BY type-id } EDIPartyName ::= SEQUENCE { nameAssigner [0] DirectoryString OPTIONAL, partyName [1] DirectoryString } -- issuer alternative name extension OID and syntax id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 } IssuerAltName ::= GeneralNames id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 } SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute -- basic constraints extension OID and syntax id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 } BasicConstraints ::= SEQUENCE { cA BOOLEAN DEFAULT FALSE, pathLenConstraint INTEGER (0..MAX) OPTIONAL } -- name constraints extension OID and syntax id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 } NameConstraints ::= SEQUENCE { permittedSubtrees [0] GeneralSubtrees OPTIONAL, excludedSubtrees [1] GeneralSubtrees OPTIONAL } GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree GeneralSubtree ::= SEQUENCE { base GeneralName, minimum [0] BaseDistance DEFAULT 0, maximum [1] BaseDistance OPTIONAL } BaseDistance ::= INTEGER (0..MAX) -- policy constraints extension OID and syntax id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 } PolicyConstraints ::= SEQUENCE { requireExplicitPolicy [0] SkipCerts OPTIONAL, inhibitPolicyMapping [1] SkipCerts OPTIONAL } SkipCerts ::= INTEGER (0..MAX) -- CRL distribution points extension OID and syntax id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= {id-ce 31} CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint DistributionPoint ::= SEQUENCE { distributionPoint [0] DistributionPointName OPTIONAL, reasons [1] ReasonFlags OPTIONAL, cRLIssuer [2] GeneralNames OPTIONAL } DistributionPointName ::= CHOICE { fullName [0] GeneralNames, nameRelativeToCRLIssuer [1] RelativeDistinguishedName } ReasonFlags ::= BIT STRING { unused (0), keyCompromise (1), cACompromise (2), affiliationChanged (3), superseded (4), cessationOfOperation (5), certificateHold (6), privilegeWithdrawn (7), aACompromise (8) } -- extended key usage extension OID and syntax id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37} ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId KeyPurposeId ::= OBJECT IDENTIFIER -- permit unspecified key uses anyExtendedKeyUsage OBJECT IDENTIFIER ::= { id-ce-extKeyUsage 0 } -- extended key purpose OIDs id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 } id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 } id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 } id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 } id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 } id-kp-OCSPSigning OBJECT IDENTIFIER ::= { id-kp 9 } -- inhibit any policy OID and syntax id-ce-inhibitAnyPolicy OBJECT IDENTIFIER ::= { id-ce 54 } InhibitAnyPolicy ::= SkipCerts -- freshest (delta)CRL extension OID and syntax id-ce-freshestCRL OBJECT IDENTIFIER ::= { id-ce 46 } FreshestCRL ::= CRLDistributionPoints -- authority info access id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 } AuthorityInfoAccessSyntax ::= SEQUENCE SIZE (1..MAX) OF AccessDescription AccessDescription ::= SEQUENCE { accessMethod OBJECT IDENTIFIER, accessLocation GeneralName } -- subject info access id-pe-subjectInfoAccess OBJECT IDENTIFIER ::= { id-pe 11 } SubjectInfoAccessSyntax ::= SEQUENCE SIZE (1..MAX) OF AccessDescription -- CRL number extension OID and syntax id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 } CRLNumber ::= INTEGER (0..MAX) -- issuing distribution point extension OID and syntax id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 } IssuingDistributionPoint ::= SEQUENCE { distributionPoint [0] DistributionPointName OPTIONAL, onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE, onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE, onlySomeReasons [3] ReasonFlags OPTIONAL, indirectCRL [4] BOOLEAN DEFAULT FALSE, onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE } -- at most one of onlyContainsUserCerts, onlyContainsCACerts, -- and onlyContainsAttributeCerts may be set to TRUE. id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 } BaseCRLNumber ::= CRLNumber -- reason code extension OID and syntax id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 } CRLReason ::= ENUMERATED { unspecified (0), keyCompromise (1), cACompromise (2), affiliationChanged (3), superseded (4), cessationOfOperation (5), certificateHold (6), removeFromCRL (8), privilegeWithdrawn (9), aACompromise (10) } -- certificate issuer CRL entry extension OID and syntax id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 } CertificateIssuer ::= GeneralNames -- hold instruction extension OID and syntax id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 } HoldInstructionCode ::= OBJECT IDENTIFIER -- ANSI x9 arc holdinstruction arc holdInstruction OBJECT IDENTIFIER ::= {joint-iso-itu-t(2) member-body(2) us(840) x9cm(10040) 2} -- ANSI X9 holdinstructions id-holdinstruction-none OBJECT IDENTIFIER ::= {holdInstruction 1} -- deprecated id-holdinstruction-callissuer OBJECT IDENTIFIER ::= {holdInstruction 2} id-holdinstruction-reject OBJECT IDENTIFIER ::= {holdInstruction 3} -- invalidity date CRL entry extension OID and syntax id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 } InvalidityDate ::= GeneralizedTime END asn1tools-0.169.0/tests/files/ietf/rfc5280_modified.py000066400000000000000000003340721524544274600223360ustar00rootroot00000000000000EXPECTED = {'PKIX1Explicit88': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'EXPLICIT', 'types': {'AdministrationDomainName': {'members': [{'name': 'numeric', 'size': [(0, 'ub-domain-name-length')], 'type': 'NumericString'}, {'name': 'printable', 'size': [(0, 'ub-domain-name-length')], 'type': 'PrintableString'}], 'tag': {'class': 'APPLICATION', 'number': 2}, 'type': 'CHOICE'}, 'AlgorithmIdentifier': {'members': [{'name': 'algorithm', 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'parameters', 'optional': True, 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'algorithm'}], 'type': 'SEQUENCE'}, 'Attribute': {'members': [{'name': 'type', 'type': 'AttributeType'}, {'element': {'type': 'AttributeValue'}, 'name': 'values', 'type': 'SET OF'}], 'type': 'SEQUENCE'}, 'AttributeType': {'type': 'OBJECT IDENTIFIER'}, 'AttributeTypeAndValue': {'members': [{'name': 'type', 'type': 'AttributeType'}, {'name': 'value', 'type': 'AttributeValue'}], 'type': 'SEQUENCE'}, 'AttributeValue': {'choices': {}, 'type': 'ANY DEFINED BY', 'value': 'type'}, 'BuiltInDomainDefinedAttribute': {'members': [{'name': 'type', 'size': [(1, 'ub-domain-defined-attribute-type-length')], 'type': 'PrintableString'}, {'name': 'value', 'size': [(1, 'ub-domain-defined-attribute-value-length')], 'type': 'PrintableString'}], 'type': 'SEQUENCE'}, 'BuiltInDomainDefinedAttributes': {'element': {'type': 'BuiltInDomainDefinedAttribute'}, 'size': [(1, 'ub-domain-defined-attributes')], 'type': 'SEQUENCE ' 'OF'}, 'BuiltInStandardAttributes': {'members': [{'name': 'country-name', 'optional': True, 'type': 'CountryName'}, {'name': 'administration-domain-name', 'optional': True, 'type': 'AdministrationDomainName'}, {'name': 'network-address', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'NetworkAddress'}, {'name': 'terminal-identifier', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'TerminalIdentifier'}, {'name': 'private-domain-name', 'optional': True, 'tag': {'number': 2}, 'type': 'PrivateDomainName'}, {'name': 'organization-name', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'OrganizationName'}, {'name': 'numeric-user-identifier', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'NumericUserIdentifier'}, {'name': 'personal-name', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'PersonalName'}, {'name': 'organizational-unit-names', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 6}, 'type': 'OrganizationalUnitNames'}], 'type': 'SEQUENCE'}, 'Certificate': {'members': [{'name': 'tbsCertificate', 'type': 'TBSCertificate'}, {'name': 'signatureAlgorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'signature', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'CertificateList': {'members': [{'name': 'tbsCertList', 'type': 'TBSCertList'}, {'name': 'signatureAlgorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'signature', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'CertificateSerialNumber': {'type': 'INTEGER'}, 'CommonName': {'size': [(1, 'ub-common-name-length')], 'type': 'PrintableString'}, 'CountryName': {'members': [{'name': 'x121-dcc-code', 'size': ['ub-country-name-numeric-length'], 'type': 'NumericString'}, {'name': 'iso-3166-alpha2-code', 'size': ['ub-country-name-alpha-length'], 'type': 'PrintableString'}], 'tag': {'class': 'APPLICATION', 'number': 1}, 'type': 'CHOICE'}, 'DirectoryString': {'members': [{'name': 'teletexString', 'size': [(1, 'MAX')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'MAX')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'MAX')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'MAX')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'MAX')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'DistinguishedName': {'type': 'RDNSequence'}, 'DomainComponent': {'type': 'IA5String'}, 'EmailAddress': {'size': [(1, 'ub-emailaddress-length')], 'type': 'IA5String'}, 'ExtendedNetworkAddress': {'members': [{'members': [{'name': 'number', 'size': [(1, 'ub-e163-4-number-length')], 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'NumericString'}, {'name': 'sub-address', 'optional': True, 'size': [(1, 'ub-e163-4-sub-address-length')], 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'NumericString'}], 'name': 'e163-4-address', 'type': 'SEQUENCE'}, {'name': 'psap-address', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'PresentationAddress'}], 'type': 'CHOICE'}, 'Extension': {'members': [{'name': 'extnID', 'type': 'OBJECT ' 'IDENTIFIER'}, {'default': False, 'name': 'critical', 'type': 'BOOLEAN'}, {'name': 'extnValue', 'type': 'OCTET ' 'STRING'}], 'type': 'SEQUENCE'}, 'ExtensionAttribute': {'members': [{'name': 'extension-attribute-type', 'restricted-to': [(0, 'ub-extension-attributes')], 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'choices': {}, 'name': 'extension-attribute-value', 'tag': {'number': 1}, 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'extension-attribute-type'}], 'type': 'SEQUENCE'}, 'ExtensionAttributes': {'element': {'type': 'ExtensionAttribute'}, 'size': [(1, 'ub-extension-attributes')], 'type': 'SET OF'}, 'ExtensionORAddressComponents': {'type': 'PDSParameter'}, 'ExtensionPhysicalDeliveryAddressComponents': {'type': 'PDSParameter'}, 'Extensions': {'element': {'type': 'Extension'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'LocalPostalAttributes': {'type': 'PDSParameter'}, 'Name': {'members': [{'name': 'rdnSequence', 'type': 'RDNSequence'}], 'type': 'CHOICE'}, 'NetworkAddress': {'type': 'X121Address'}, 'NumericUserIdentifier': {'size': [(1, 'ub-numeric-user-id-length')], 'type': 'NumericString'}, 'ORAddress': {'members': [{'name': 'built-in-standard-attributes', 'type': 'BuiltInStandardAttributes'}, {'name': 'built-in-domain-defined-attributes', 'optional': True, 'type': 'BuiltInDomainDefinedAttributes'}, {'name': 'extension-attributes', 'optional': True, 'type': 'ExtensionAttributes'}], 'type': 'SEQUENCE'}, 'OrganizationName': {'size': [(1, 'ub-organization-name-length')], 'type': 'PrintableString'}, 'OrganizationalUnitName': {'size': [(1, 'ub-organizational-unit-name-length')], 'type': 'PrintableString'}, 'OrganizationalUnitNames': {'element': {'type': 'OrganizationalUnitName'}, 'size': [(1, 'ub-organizational-units')], 'type': 'SEQUENCE ' 'OF'}, 'PDSName': {'size': [(1, 'ub-pds-name-length')], 'type': 'PrintableString'}, 'PDSParameter': {'members': [{'name': 'printable-string', 'optional': True, 'size': [(1, 'ub-pds-parameter-length')], 'type': 'PrintableString'}, {'name': 'teletex-string', 'optional': True, 'size': [(1, 'ub-pds-parameter-length')], 'type': 'TeletexString'}], 'type': 'SET'}, 'PersonalName': {'members': [{'name': 'surname', 'size': [(1, 'ub-surname-length')], 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'PrintableString'}, {'name': 'given-name', 'optional': True, 'size': [(1, 'ub-given-name-length')], 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'PrintableString'}, {'name': 'initials', 'optional': True, 'size': [(1, 'ub-initials-length')], 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'PrintableString'}, {'name': 'generation-qualifier', 'optional': True, 'size': [(1, 'ub-generation-qualifier-length')], 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'PrintableString'}], 'type': 'SET'}, 'PhysicalDeliveryCountryName': {'members': [{'name': 'x121-dcc-code', 'size': ['ub-country-name-numeric-length'], 'type': 'NumericString'}, {'name': 'iso-3166-alpha2-code', 'size': ['ub-country-name-alpha-length'], 'type': 'PrintableString'}], 'type': 'CHOICE'}, 'PhysicalDeliveryOfficeName': {'type': 'PDSParameter'}, 'PhysicalDeliveryOfficeNumber': {'type': 'PDSParameter'}, 'PhysicalDeliveryOrganizationName': {'type': 'PDSParameter'}, 'PhysicalDeliveryPersonalName': {'type': 'PDSParameter'}, 'PostOfficeBoxAddress': {'type': 'PDSParameter'}, 'PostalCode': {'members': [{'name': 'numeric-code', 'size': [(1, 'ub-postal-code-length')], 'type': 'NumericString'}, {'name': 'printable-code', 'size': [(1, 'ub-postal-code-length')], 'type': 'PrintableString'}], 'type': 'CHOICE'}, 'PosteRestanteAddress': {'type': 'PDSParameter'}, 'PresentationAddress': {'members': [{'name': 'pSelector', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'OCTET ' 'STRING'}, {'name': 'sSelector', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 1}, 'type': 'OCTET ' 'STRING'}, {'name': 'tSelector', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 2}, 'type': 'OCTET ' 'STRING'}, {'element': {'type': 'OCTET ' 'STRING'}, 'name': 'nAddresses', 'size': [(1, 'MAX')], 'tag': {'kind': 'EXPLICIT', 'number': 3}, 'type': 'SET ' 'OF'}], 'type': 'SEQUENCE'}, 'PrivateDomainName': {'members': [{'name': 'numeric', 'size': [(1, 'ub-domain-name-length')], 'type': 'NumericString'}, {'name': 'printable', 'size': [(1, 'ub-domain-name-length')], 'type': 'PrintableString'}], 'type': 'CHOICE'}, 'RDNSequence': {'element': {'type': 'RelativeDistinguishedName'}, 'type': 'SEQUENCE OF'}, 'RelativeDistinguishedName': {'element': {'type': 'AttributeTypeAndValue'}, 'size': [(1, 'MAX')], 'type': 'SET OF'}, 'StreetAddress': {'type': 'PDSParameter'}, 'SubjectPublicKeyInfo': {'members': [{'name': 'algorithm', 'type': 'AlgorithmIdentifier'}, {'name': 'subjectPublicKey', 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'TBSCertList': {'members': [{'name': 'version', 'optional': True, 'type': 'Version'}, {'name': 'signature', 'type': 'AlgorithmIdentifier'}, {'name': 'issuer', 'type': 'Name'}, {'name': 'thisUpdate', 'type': 'Time'}, {'name': 'nextUpdate', 'optional': True, 'type': 'Time'}, {'element': {'members': [{'name': 'userCertificate', 'type': 'CertificateSerialNumber'}, {'name': 'revocationDate', 'type': 'Time'}, {'name': 'crlEntryExtensions', 'optional': True, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'name': 'revokedCertificates', 'optional': True, 'type': 'SEQUENCE ' 'OF'}, {'name': 'crlExtensions', 'optional': True, 'tag': {'number': 0}, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'TBSCertificate': {'members': [{'default': 'v1', 'name': 'version', 'tag': {'number': 0}, 'type': 'Version'}, {'name': 'serialNumber', 'type': 'CertificateSerialNumber'}, {'name': 'signature', 'type': 'AlgorithmIdentifier'}, {'name': 'issuer', 'type': 'Name'}, {'name': 'validity', 'type': 'Validity'}, {'name': 'subject', 'type': 'Name'}, {'name': 'subjectPublicKeyInfo', 'type': 'SubjectPublicKeyInfo'}, {'name': 'issuerUniqueID', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'UniqueIdentifier'}, {'name': 'subjectUniqueID', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'UniqueIdentifier'}, {'name': 'extensions', 'optional': True, 'tag': {'number': 3}, 'type': 'Extensions'}], 'type': 'SEQUENCE'}, 'TeletexCommonName': {'size': [(1, 'ub-common-name-length')], 'type': 'TeletexString'}, 'TeletexDomainDefinedAttribute': {'members': [{'name': 'type', 'size': [(1, 'ub-domain-defined-attribute-type-length')], 'type': 'TeletexString'}, {'name': 'value', 'size': [(1, 'ub-domain-defined-attribute-value-length')], 'type': 'TeletexString'}], 'type': 'SEQUENCE'}, 'TeletexDomainDefinedAttributes': {'element': {'type': 'TeletexDomainDefinedAttribute'}, 'size': [(1, 'ub-domain-defined-attributes')], 'type': 'SEQUENCE ' 'OF'}, 'TeletexOrganizationName': {'size': [(1, 'ub-organization-name-length')], 'type': 'TeletexString'}, 'TeletexOrganizationalUnitName': {'size': [(1, 'ub-organizational-unit-name-length')], 'type': 'TeletexString'}, 'TeletexOrganizationalUnitNames': {'element': {'type': 'TeletexOrganizationalUnitName'}, 'size': [(1, 'ub-organizational-units')], 'type': 'SEQUENCE ' 'OF'}, 'TeletexPersonalName': {'members': [{'name': 'surname', 'size': [(1, 'ub-surname-length')], 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'TeletexString'}, {'name': 'given-name', 'optional': True, 'size': [(1, 'ub-given-name-length')], 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'TeletexString'}, {'name': 'initials', 'optional': True, 'size': [(1, 'ub-initials-length')], 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'TeletexString'}, {'name': 'generation-qualifier', 'optional': True, 'size': [(1, 'ub-generation-qualifier-length')], 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'TeletexString'}], 'type': 'SET'}, 'TerminalIdentifier': {'size': [(1, 'ub-terminal-id-length')], 'type': 'PrintableString'}, 'TerminalType': {'named-numbers': {'g3-facsimile': 5, 'g4-facsimile': 6, 'ia5-terminal': 7, 'teletex': 4, 'telex': 3, 'videotex': 8}, 'restricted-to': [(0, 'ub-integer-options')], 'type': 'INTEGER'}, 'Time': {'members': [{'name': 'utcTime', 'type': 'UTCTime'}, {'name': 'generalTime', 'type': 'GeneralizedTime'}], 'type': 'CHOICE'}, 'UnformattedPostalAddress': {'members': [{'element': {'size': [(1, 'ub-pds-parameter-length')], 'type': 'PrintableString'}, 'name': 'printable-address', 'optional': True, 'size': [(1, 'ub-pds-physical-address-lines')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'teletex-string', 'optional': True, 'size': [(1, 'ub-unformatted-address-length')], 'type': 'TeletexString'}], 'type': 'SET'}, 'UniqueIdentifier': {'type': 'BIT STRING'}, 'UniquePostalName': {'type': 'PDSParameter'}, 'Validity': {'members': [{'name': 'notBefore', 'type': 'Time'}, {'name': 'notAfter', 'type': 'Time'}], 'type': 'SEQUENCE'}, 'Version': {'named-numbers': {'v1': 0, 'v2': 1, 'v3': 2}, 'type': 'INTEGER'}, 'X121Address': {'size': [(1, 'ub-x121-address-length')], 'type': 'NumericString'}, 'X520CommonName': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-common-name')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-common-name')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-common-name')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-common-name')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-common-name')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520LocalityName': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-locality-name')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-locality-name')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-locality-name')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-locality-name')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-locality-name')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520OrganizationName': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-organization-name')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-organization-name')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-organization-name')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-organization-name')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-organization-name')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520OrganizationalUnitName': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-organizational-unit-name')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-organizational-unit-name')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-organizational-unit-name')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-organizational-unit-name')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-organizational-unit-name')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520Pseudonym': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-pseudonym')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-pseudonym')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-pseudonym')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-pseudonym')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-pseudonym')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520SerialNumber': {'size': [(1, 'ub-serial-number')], 'type': 'PrintableString'}, 'X520StateOrProvinceName': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-state-name')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-state-name')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-state-name')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-state-name')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-state-name')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520Title': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-title')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-title')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-title')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-title')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-title')], 'type': 'BMPString'}], 'type': 'CHOICE'}, 'X520countryName': {'size': [2], 'type': 'PrintableString'}, 'X520dnQualifier': {'type': 'PrintableString'}, 'X520name': {'members': [{'name': 'teletexString', 'size': [(1, 'ub-name')], 'type': 'TeletexString'}, {'name': 'printableString', 'size': [(1, 'ub-name')], 'type': 'PrintableString'}, {'name': 'universalString', 'size': [(1, 'ub-name')], 'type': 'UniversalString'}, {'name': 'utf8String', 'size': [(1, 'ub-name')], 'type': 'UTF8String'}, {'name': 'bmpString', 'size': [(1, 'ub-name')], 'type': 'BMPString'}], 'type': 'CHOICE'}}, 'values': {'common-name': {'type': 'INTEGER', 'value': 1}, 'extended-network-address': {'type': 'INTEGER', 'value': 22}, 'extension-OR-address-components': {'type': 'INTEGER', 'value': 12}, 'extension-physical-delivery-address-components': {'type': 'INTEGER', 'value': 15}, 'id-ad': {'type': 'OBJECT IDENTIFIER', 'value': ['id-pkix', 48]}, 'id-ad-caIssuers': {'type': 'OBJECT IDENTIFIER', 'value': ['id-ad', 2]}, 'id-ad-caRepository': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ad', 5]}, 'id-ad-ocsp': {'type': 'OBJECT IDENTIFIER', 'value': ['id-ad', 1]}, 'id-ad-timeStamping': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ad', 3]}, 'id-at': {'type': 'OBJECT IDENTIFIER', 'value': [('joint-iso-ccitt', 2), ('ds', 5), 4]}, 'id-at-commonName': {'type': 'AttributeType', 'value': None}, 'id-at-countryName': {'type': 'AttributeType', 'value': None}, 'id-at-dnQualifier': {'type': 'AttributeType', 'value': None}, 'id-at-generationQualifier': {'type': 'AttributeType', 'value': None}, 'id-at-givenName': {'type': 'AttributeType', 'value': None}, 'id-at-initials': {'type': 'AttributeType', 'value': None}, 'id-at-localityName': {'type': 'AttributeType', 'value': None}, 'id-at-name': {'type': 'AttributeType', 'value': None}, 'id-at-organizationName': {'type': 'AttributeType', 'value': None}, 'id-at-organizationalUnitName': {'type': 'AttributeType', 'value': None}, 'id-at-pseudonym': {'type': 'AttributeType', 'value': None}, 'id-at-serialNumber': {'type': 'AttributeType', 'value': None}, 'id-at-stateOrProvinceName': {'type': 'AttributeType', 'value': None}, 'id-at-surname': {'type': 'AttributeType', 'value': None}, 'id-at-title': {'type': 'AttributeType', 'value': None}, 'id-domainComponent': {'type': 'AttributeType', 'value': None}, 'id-emailAddress': {'type': 'AttributeType', 'value': None}, 'id-kp': {'type': 'OBJECT IDENTIFIER', 'value': ['id-pkix', 3]}, 'id-pe': {'type': 'OBJECT IDENTIFIER', 'value': ['id-pkix', 1]}, 'id-pkix': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('identified-organization', 3), ('dod', 6), ('internet', 1), ('security', 5), ('mechanisms', 5), ('pkix', 7)]}, 'id-qt': {'type': 'OBJECT IDENTIFIER', 'value': ['id-pkix', 2]}, 'id-qt-cps': {'type': 'OBJECT IDENTIFIER', 'value': ['id-qt', 1]}, 'id-qt-unotice': {'type': 'OBJECT IDENTIFIER', 'value': ['id-qt', 2]}, 'local-postal-attributes': {'type': 'INTEGER', 'value': 21}, 'pds-name': {'type': 'INTEGER', 'value': 7}, 'physical-delivery-country-name': {'type': 'INTEGER', 'value': 8}, 'physical-delivery-office-name': {'type': 'INTEGER', 'value': 10}, 'physical-delivery-office-number': {'type': 'INTEGER', 'value': 11}, 'physical-delivery-organization-name': {'type': 'INTEGER', 'value': 14}, 'physical-delivery-personal-name': {'type': 'INTEGER', 'value': 13}, 'pkcs-9': {'type': 'OBJECT IDENTIFIER', 'value': [('iso', 1), ('member-body', 2), ('us', 840), ('rsadsi', 113549), ('pkcs', 1), 9]}, 'post-office-box-address': {'type': 'INTEGER', 'value': 18}, 'postal-code': {'type': 'INTEGER', 'value': 9}, 'poste-restante-address': {'type': 'INTEGER', 'value': 19}, 'street-address': {'type': 'INTEGER', 'value': 17}, 'teletex-common-name': {'type': 'INTEGER', 'value': 2}, 'teletex-domain-defined-attributes': {'type': 'INTEGER', 'value': 6}, 'teletex-organization-name': {'type': 'INTEGER', 'value': 3}, 'teletex-organizational-unit-names': {'type': 'INTEGER', 'value': 5}, 'teletex-personal-name': {'type': 'INTEGER', 'value': 4}, 'terminal-type': {'type': 'INTEGER', 'value': 23}, 'ub-common-name': {'type': 'INTEGER', 'value': 64}, 'ub-common-name-length': {'type': 'INTEGER', 'value': 64}, 'ub-country-name-alpha-length': {'type': 'INTEGER', 'value': 2}, 'ub-country-name-numeric-length': {'type': 'INTEGER', 'value': 3}, 'ub-domain-defined-attribute-type-length': {'type': 'INTEGER', 'value': 8}, 'ub-domain-defined-attribute-value-length': {'type': 'INTEGER', 'value': 128}, 'ub-domain-defined-attributes': {'type': 'INTEGER', 'value': 4}, 'ub-domain-name-length': {'type': 'INTEGER', 'value': 16}, 'ub-e163-4-number-length': {'type': 'INTEGER', 'value': 15}, 'ub-e163-4-sub-address-length': {'type': 'INTEGER', 'value': 40}, 'ub-emailaddress-length': {'type': 'INTEGER', 'value': 255}, 'ub-extension-attributes': {'type': 'INTEGER', 'value': 256}, 'ub-generation-qualifier-length': {'type': 'INTEGER', 'value': 3}, 'ub-given-name-length': {'type': 'INTEGER', 'value': 16}, 'ub-initials-length': {'type': 'INTEGER', 'value': 5}, 'ub-integer-options': {'type': 'INTEGER', 'value': 256}, 'ub-locality-name': {'type': 'INTEGER', 'value': 128}, 'ub-match': {'type': 'INTEGER', 'value': 128}, 'ub-name': {'type': 'INTEGER', 'value': 32768}, 'ub-numeric-user-id-length': {'type': 'INTEGER', 'value': 32}, 'ub-organization-name': {'type': 'INTEGER', 'value': 64}, 'ub-organization-name-length': {'type': 'INTEGER', 'value': 64}, 'ub-organizational-unit-name': {'type': 'INTEGER', 'value': 64}, 'ub-organizational-unit-name-length': {'type': 'INTEGER', 'value': 32}, 'ub-organizational-units': {'type': 'INTEGER', 'value': 4}, 'ub-pds-name-length': {'type': 'INTEGER', 'value': 16}, 'ub-pds-parameter-length': {'type': 'INTEGER', 'value': 30}, 'ub-pds-physical-address-lines': {'type': 'INTEGER', 'value': 6}, 'ub-postal-code-length': {'type': 'INTEGER', 'value': 16}, 'ub-pseudonym': {'type': 'INTEGER', 'value': 128}, 'ub-serial-number': {'type': 'INTEGER', 'value': 64}, 'ub-state-name': {'type': 'INTEGER', 'value': 128}, 'ub-surname-length': {'type': 'INTEGER', 'value': 40}, 'ub-terminal-id-length': {'type': 'INTEGER', 'value': 24}, 'ub-title': {'type': 'INTEGER', 'value': 64}, 'ub-unformatted-address-length': {'type': 'INTEGER', 'value': 180}, 'ub-x121-address-length': {'type': 'INTEGER', 'value': 16}, 'unformatted-postal-address': {'type': 'INTEGER', 'value': 16}, 'unique-postal-name': {'type': 'INTEGER', 'value': 20}}}, 'PKIX1Implicit88': {'extensibility-implied': False, 'imports': {'PKIX1Explicit88': ['Attribute', 'BMPString', 'CertificateSerialNumber', 'DirectoryString', 'Name', 'ORAddress', 'RelativeDistinguishedName', 'UTF8String', 'id-kp', 'id-pe', 'id-qt-cps', 'id-qt-unotice']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'IMPLICIT', 'types': {'AccessDescription': {'members': [{'name': 'accessMethod', 'type': 'OBJECT ' 'IDENTIFIER'}, {'name': 'accessLocation', 'type': 'GeneralName'}], 'type': 'SEQUENCE'}, 'AnotherName': {'members': [{'name': 'type-id', 'type': 'OBJECT ' 'IDENTIFIER'}, {'choices': {}, 'name': 'value', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'type-id'}], 'type': 'SEQUENCE'}, 'AuthorityInfoAccessSyntax': {'element': {'type': 'AccessDescription'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE ' 'OF'}, 'AuthorityKeyIdentifier': {'members': [{'name': 'keyIdentifier', 'optional': True, 'tag': {'number': 0}, 'type': 'KeyIdentifier'}, {'name': 'authorityCertIssuer', 'optional': True, 'tag': {'number': 1}, 'type': 'GeneralNames'}, {'name': 'authorityCertSerialNumber', 'optional': True, 'tag': {'number': 2}, 'type': 'CertificateSerialNumber'}], 'type': 'SEQUENCE'}, 'BaseCRLNumber': {'type': 'CRLNumber'}, 'BaseDistance': {'restricted-to': [(0, 'MAX')], 'type': 'INTEGER'}, 'BasicConstraints': {'members': [{'default': False, 'name': 'cA', 'type': 'BOOLEAN'}, {'name': 'pathLenConstraint', 'optional': True, 'restricted-to': [(0, 'MAX')], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'CPSuri': {'type': 'IA5String'}, 'CRLDistributionPoints': {'element': {'type': 'DistributionPoint'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'CRLNumber': {'restricted-to': [(0, 'MAX')], 'type': 'INTEGER'}, 'CRLReason': {'type': 'ENUMERATED', 'values': [('unspecified', 0), ('keyCompromise', 1), ('cACompromise', 2), ('affiliationChanged', 3), ('superseded', 4), ('cessationOfOperation', 5), ('certificateHold', 6), ('removeFromCRL', 8), ('privilegeWithdrawn', 9), ('aACompromise', 10)]}, 'CertPolicyId': {'type': 'OBJECT IDENTIFIER'}, 'CertificateIssuer': {'type': 'GeneralNames'}, 'CertificatePolicies': {'element': {'type': 'PolicyInformation'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'DisplayText': {'members': [{'name': 'ia5String', 'size': [(1, 200)], 'type': 'IA5String'}, {'name': 'visibleString', 'size': [(1, 200)], 'type': 'VisibleString'}, {'name': 'bmpString', 'size': [(1, 200)], 'type': 'BMPString'}, {'name': 'utf8String', 'size': [(1, 200)], 'type': 'UTF8String'}], 'type': 'CHOICE'}, 'DistributionPoint': {'members': [{'name': 'distributionPoint', 'optional': True, 'tag': {'number': 0}, 'type': 'DistributionPointName'}, {'name': 'reasons', 'optional': True, 'tag': {'number': 1}, 'type': 'ReasonFlags'}, {'name': 'cRLIssuer', 'optional': True, 'tag': {'number': 2}, 'type': 'GeneralNames'}], 'type': 'SEQUENCE'}, 'DistributionPointName': {'members': [{'name': 'fullName', 'tag': {'number': 0}, 'type': 'GeneralNames'}, {'name': 'nameRelativeToCRLIssuer', 'tag': {'number': 1}, 'type': 'RelativeDistinguishedName'}], 'type': 'CHOICE'}, 'EDIPartyName': {'members': [{'name': 'nameAssigner', 'optional': True, 'tag': {'number': 0}, 'type': 'DirectoryString'}, {'name': 'partyName', 'tag': {'number': 1}, 'type': 'DirectoryString'}], 'type': 'SEQUENCE'}, 'ExtKeyUsageSyntax': {'element': {'type': 'KeyPurposeId'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'FreshestCRL': {'type': 'CRLDistributionPoints'}, 'GeneralName': {'members': [{'name': 'otherName', 'tag': {'number': 0}, 'type': 'AnotherName'}, {'name': 'rfc822Name', 'tag': {'number': 1}, 'type': 'IA5String'}, {'name': 'dNSName', 'tag': {'number': 2}, 'type': 'IA5String'}, {'name': 'x400Address', 'tag': {'number': 3}, 'type': 'ORAddress'}, {'name': 'directoryName', 'tag': {'number': 4}, 'type': 'Name'}, {'name': 'ediPartyName', 'tag': {'number': 5}, 'type': 'EDIPartyName'}, {'name': 'uniformResourceIdentifier', 'tag': {'number': 6}, 'type': 'IA5String'}, {'name': 'iPAddress', 'tag': {'number': 7}, 'type': 'OCTET ' 'STRING'}, {'name': 'registeredID', 'tag': {'number': 8}, 'type': 'OBJECT ' 'IDENTIFIER'}], 'type': 'CHOICE'}, 'GeneralNames': {'element': {'type': 'GeneralName'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'GeneralSubtree': {'members': [{'name': 'base', 'type': 'GeneralName'}, {'default': 0, 'name': 'minimum', 'tag': {'number': 0}, 'type': 'BaseDistance'}, {'name': 'maximum', 'optional': True, 'tag': {'number': 1}, 'type': 'BaseDistance'}], 'type': 'SEQUENCE'}, 'GeneralSubtrees': {'element': {'type': 'GeneralSubtree'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'HoldInstructionCode': {'type': 'OBJECT ' 'IDENTIFIER'}, 'InhibitAnyPolicy': {'type': 'SkipCerts'}, 'InvalidityDate': {'type': 'GeneralizedTime'}, 'IssuerAltName': {'type': 'GeneralNames'}, 'IssuingDistributionPoint': {'members': [{'name': 'distributionPoint', 'optional': True, 'tag': {'number': 0}, 'type': 'DistributionPointName'}, {'default': False, 'name': 'onlyContainsUserCerts', 'tag': {'number': 1}, 'type': 'BOOLEAN'}, {'default': False, 'name': 'onlyContainsCACerts', 'tag': {'number': 2}, 'type': 'BOOLEAN'}, {'name': 'onlySomeReasons', 'optional': True, 'tag': {'number': 3}, 'type': 'ReasonFlags'}, {'default': False, 'name': 'indirectCRL', 'tag': {'number': 4}, 'type': 'BOOLEAN'}, {'default': False, 'name': 'onlyContainsAttributeCerts', 'tag': {'number': 5}, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'KeyIdentifier': {'type': 'OCTET STRING'}, 'KeyPurposeId': {'type': 'OBJECT IDENTIFIER'}, 'KeyUsage': {'named-bits': [('digitalSignature', '0'), ('nonRepudiation', '1'), ('keyEncipherment', '2'), ('dataEncipherment', '3'), ('keyAgreement', '4'), ('keyCertSign', '5'), ('cRLSign', '6'), ('encipherOnly', '7'), ('decipherOnly', '8')], 'type': 'BIT STRING'}, 'NameConstraints': {'members': [{'name': 'permittedSubtrees', 'optional': True, 'tag': {'number': 0}, 'type': 'GeneralSubtrees'}, {'name': 'excludedSubtrees', 'optional': True, 'tag': {'number': 1}, 'type': 'GeneralSubtrees'}], 'type': 'SEQUENCE'}, 'NoticeReference': {'members': [{'name': 'organization', 'type': 'DisplayText'}, {'element': {'type': 'INTEGER'}, 'name': 'noticeNumbers', 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'PolicyConstraints': {'members': [{'name': 'requireExplicitPolicy', 'optional': True, 'tag': {'number': 0}, 'type': 'SkipCerts'}, {'name': 'inhibitPolicyMapping', 'optional': True, 'tag': {'number': 1}, 'type': 'SkipCerts'}], 'type': 'SEQUENCE'}, 'PolicyInformation': {'members': [{'name': 'policyIdentifier', 'type': 'CertPolicyId'}, {'element': {'type': 'PolicyQualifierInfo'}, 'name': 'policyQualifiers', 'optional': True, 'size': [(1, 'MAX')], 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'PolicyMappings': {'element': {'members': [{'name': 'issuerDomainPolicy', 'type': 'CertPolicyId'}, {'name': 'subjectDomainPolicy', 'type': 'CertPolicyId'}], 'type': 'SEQUENCE'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE OF'}, 'PolicyQualifierId': {'type': 'OBJECT ' 'IDENTIFIER'}, 'PolicyQualifierInfo': {'members': [{'name': 'policyQualifierId', 'type': 'PolicyQualifierId'}, {'choices': {}, 'name': 'qualifier', 'type': 'ANY ' 'DEFINED ' 'BY', 'value': 'policyQualifierId'}], 'type': 'SEQUENCE'}, 'PrivateKeyUsagePeriod': {'members': [{'name': 'notBefore', 'optional': True, 'tag': {'number': 0}, 'type': 'GeneralizedTime'}, {'name': 'notAfter', 'optional': True, 'tag': {'number': 1}, 'type': 'GeneralizedTime'}], 'type': 'SEQUENCE'}, 'ReasonFlags': {'named-bits': [('unused', '0'), ('keyCompromise', '1'), ('cACompromise', '2'), ('affiliationChanged', '3'), ('superseded', '4'), ('cessationOfOperation', '5'), ('certificateHold', '6'), ('privilegeWithdrawn', '7'), ('aACompromise', '8')], 'type': 'BIT STRING'}, 'SkipCerts': {'restricted-to': [(0, 'MAX')], 'type': 'INTEGER'}, 'SubjectAltName': {'type': 'GeneralNames'}, 'SubjectDirectoryAttributes': {'element': {'type': 'Attribute'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE ' 'OF'}, 'SubjectInfoAccessSyntax': {'element': {'type': 'AccessDescription'}, 'size': [(1, 'MAX')], 'type': 'SEQUENCE ' 'OF'}, 'SubjectKeyIdentifier': {'type': 'KeyIdentifier'}, 'UserNotice': {'members': [{'name': 'noticeRef', 'optional': True, 'type': 'NoticeReference'}, {'name': 'explicitText', 'optional': True, 'type': 'DisplayText'}], 'type': 'SEQUENCE'}}, 'values': {'anyExtendedKeyUsage': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce-extKeyUsage', 0]}, 'anyPolicy': {'type': 'OBJECT IDENTIFIER', 'value': ['id-ce-certificatePolicies', 0]}, 'holdInstruction': {'type': 'OBJECT IDENTIFIER', 'value': [('joint-iso-itu-t', 2), ('member-body', 2), ('us', 840), ('x9cm', 10040), 2]}, 'id-ce': {'type': 'OBJECT IDENTIFIER', 'value': [('joint-iso-ccitt', 2), ('ds', 5), 29]}, 'id-ce-authorityKeyIdentifier': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 35]}, 'id-ce-basicConstraints': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 19]}, 'id-ce-cRLDistributionPoints': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 31]}, 'id-ce-cRLNumber': {'type': 'OBJECT IDENTIFIER', 'value': ['id-ce', 20]}, 'id-ce-cRLReasons': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 21]}, 'id-ce-certificateIssuer': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 29]}, 'id-ce-certificatePolicies': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 32]}, 'id-ce-deltaCRLIndicator': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 27]}, 'id-ce-extKeyUsage': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 37]}, 'id-ce-freshestCRL': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 46]}, 'id-ce-holdInstructionCode': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 23]}, 'id-ce-inhibitAnyPolicy': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 54]}, 'id-ce-invalidityDate': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 24]}, 'id-ce-issuerAltName': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 18]}, 'id-ce-issuingDistributionPoint': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 28]}, 'id-ce-keyUsage': {'type': 'OBJECT IDENTIFIER', 'value': ['id-ce', 15]}, 'id-ce-nameConstraints': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 30]}, 'id-ce-policyConstraints': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 36]}, 'id-ce-policyMappings': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 33]}, 'id-ce-privateKeyUsagePeriod': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 16]}, 'id-ce-subjectAltName': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 17]}, 'id-ce-subjectDirectoryAttributes': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 9]}, 'id-ce-subjectKeyIdentifier': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-ce', 14]}, 'id-holdinstruction-callissuer': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['holdInstruction', 2]}, 'id-holdinstruction-none': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['holdInstruction', 1]}, 'id-holdinstruction-reject': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['holdInstruction', 3]}, 'id-kp-OCSPSigning': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-kp', 9]}, 'id-kp-clientAuth': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-kp', 2]}, 'id-kp-codeSigning': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-kp', 3]}, 'id-kp-emailProtection': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-kp', 4]}, 'id-kp-serverAuth': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-kp', 1]}, 'id-kp-timeStamping': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-kp', 8]}, 'id-pe-authorityInfoAccess': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-pe', 1]}, 'id-pe-subjectInfoAccess': {'type': 'OBJECT ' 'IDENTIFIER', 'value': ['id-pe', 11]}}}}asn1tools-0.169.0/tests/files/import_imported.asn000066400000000000000000000012751524544274600220200ustar00rootroot00000000000000-- Import imported type and value. A DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS ALL; Type ::= INTEGER value Type ::= 5 END B DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Type, value FROM A; AnotherType ::= Type anotherValue AnotherType ::= value END C DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Type, anotherValue FROM B; AndAnotherType ::= Type andAnotherValue AndAnotherType ::= anotherValue END D DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Type FROM B anotherValue FROM B; AndAnotherType ::= Type andAnotherValue AndAnotherType ::= anotherValue END asn1tools-0.169.0/tests/files/import_imported.py000066400000000000000000000023661524544274600216710ustar00rootroot00000000000000EXPECTED = {'A': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'Type': {'type': 'INTEGER'}}, 'values': {'value': {'type': 'Type', 'value': 5}}}, 'B': {'extensibility-implied': False, 'imports': {'A': ['Type', 'value']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AnotherType': {'type': 'Type'}}, 'values': {'anotherValue': {'type': 'AnotherType', 'value': 'value'}}}, 'C': {'extensibility-implied': False, 'imports': {'B': ['Type', 'anotherValue']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AndAnotherType': {'type': 'Type'}}, 'values': {'andAnotherValue': {'type': 'AndAnotherType', 'value': 'anotherValue'}}}, 'D': {'extensibility-implied': False, 'imports': {'B': ['Type', 'anotherValue']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AndAnotherType': {'type': 'Type'}}, 'values': {'andAnotherValue': {'type': 'AndAnotherType', 'value': 'anotherValue'}}}}asn1tools-0.169.0/tests/files/information_object.asn000066400000000000000000000110741524544274600224540ustar00rootroot00000000000000InformationObjectClass DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- The ITEM class. ITEM ::= CLASS { &id INTEGER UNIQUE, &Value, -- An open type member. &comment String } String ::= IA5String END InformationObject DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS ITEM FROM InformationObjectClass; -- Should not be used. String in module InformationObjectClass should -- be used instead. String ::= NULL -- The object set containing two objects, 0 and 1. Items ITEM ::= { { &id 0, &Value BOOLEAN, &comment "item 0" } | -- The open type (Value) contains a sequence that contains an open -- type. { &id 1, &Value InnerSequence, &comment "item 1" } } -- Type with table constraints (only items in the union above -- allowed). Encodes and decodes the 'value' member as defined by -- 'id'. BOOLEAN if id is 0, and InnerSequence if id is 1. -- -- Encoding: -- -- 1. Encode 'value' based on 'id'. -- 2. Encode 'id'. -- 3. Encode 'value' open type container. -- 4. Encode 'comment'. -- 5. Encode 'extra'. -- -- Decoding: -- -- 1. Decode 'id'. -- 2. Decode 'value' open type container. -- 3. Decode 'comment'. -- 4. Decode 'extra'. -- 5. Decode 'value' based on 'id'. ItemWithConstraints ::= SEQUENCE { id ITEM.&id ({Items}), value ITEM.&Value ({Items}{@id}), comment ITEM.&comment ({Items}{@id}), extra INTEGER } -- Type without constraints. Encodes and decodes the 'value' member as -- an open type. -- -- Encoding: -- -- 1. Encode 'id'. -- 2. Encode 'value' open type container. -- 3. Encode 'comment'. -- 4. Encode 'extra'. -- -- Decoding: -- -- 1. Decode 'id'. -- 2. Decode 'value' open type container. -- 3. Decode 'comment'. -- 4. Decode 'extra'. ItemWithoutConstraints ::= SEQUENCE { id ITEM.&id, value ITEM.&Value, comment ITEM.&comment, extra INTEGER } -- The INNER-ITEM class, part of the OpenType in ITEM object 1. INNER-ITEM ::= CLASS { &type INTEGER, &Value -- An OpenType member. } -- The object set containing two objects, 0 and 1, of the INNER-ITEM -- type. InnerItems INNER-ITEM ::= { innerItem0 | { &type 1, &Value IA5String } } innerItem0 INNER-ITEM ::= { &type 0, &Value INTEGER } -- myType is decoded after the open type, myValue, is found. The -- decoding of the open type cannot be done until after myType has -- been decoded. InnerSequence ::= SEQUENCE { myValue INNER-ITEM.&Value ({InnerItems}{@myType}), myType INNER-ITEM.&type ({InnerItems}) } ERROR-CLASS ::= CLASS { &category PrintableString (SIZE(1)), &code INTEGER, &Type } ErrorSet ERROR-CLASS ::= { { &category "A", &code 1, &Type INTEGER } | { &category "A", &code 2, &Type BOOLEAN } | { &category "B", &code 1, &Type IA5String } | { &category "B", &code 2, &Type GeneralString } } -- Encoding: -- -- 1. Encode 'errorInfo' based on 'errorCategory' and 'errorCode' for -- each element in the array. -- 2. Encode 'errorCategory'. -- 3. Encode the array 'errors'. -- 1. Encode 'errorCode'. -- 2. Encode 'errorInfo' open type container. -- -- Decoding: -- -- 1. Decode 'errorCategory'. -- 2. Decode the array 'errors'. -- 1. Decode 'errorCode'. -- 2. Decode 'errorInfo' open type container. -- 3. Decode 'errorInfo' based on 'errorCategory' and 'errorCode' for -- each element in the array. ErrorReturn ::= SEQUENCE { errorCategory ERROR-CLASS.&category ({ErrorSet}), errors SEQUENCE OF SEQUENCE { errorCode ERROR-CLASS.&code ({ErrorSet}{@errorCategory}), errorInfo ERROR-CLASS.&Type ({ErrorSet}{@errorCategory,@.errorCode}) } } -- Recursive type. A ::= CLASS { &a INTEGER, &B } As A ::= { { &a 0, &B C } } C ::= SEQUENCE { a A.&a ({As}), b A.&B ({As}{@a}) OPTIONAL } -- Parameterized. GC ::= CLASS { &id INTEGER UNIQUE, &Value } WITH SYNTAX { ID &id VALUE &Value } GCs GC ::= { { ID 0 VALUE INTEGER } | { ID 1 VALUE BOOLEAN } } D1 ::= SEQUENCE { id GC.&id ({GCs}), value GC.&Value ({GCs}{@id}), a E1 {{ GCs }} } E1 {GC : Param} ::= SEQUENCE { id GC.&id ({Param}), value GC.&Value ({Param}{@id}) } -- The same as above, but with parameters expanded. D2 ::= SEQUENCE { id GC.&id ({GCs}), value GC.&Value ({GCs}{@id}), a T1 } T1 ::= SEQUENCE { id GC.&id ({GCs}), value GC.&Value ({GCs}{@id}) } END asn1tools-0.169.0/tests/files/information_object.py000066400000000000000000000312401524544274600223200ustar00rootroot00000000000000EXPECTED = {'InformationObject': {'extensibility-implied': False, 'imports': {'InformationObjectClass': ['ITEM']}, 'object-classes': {'A': {'members': [{'name': '&a', 'type': 'INTEGER'}, {'name': '&B', 'type': 'OpenType'}]}, 'ERROR-CLASS': {'members': [{'name': '&category', 'type': 'PrintableString'}, {'name': '&code', 'type': 'INTEGER'}, {'name': '&Type', 'type': 'OpenType'}]}, 'GC': {'members': [{'name': '&id', 'type': 'INTEGER'}, {'name': '&Value', 'type': 'OpenType'}]}, 'INNER-ITEM': {'members': [{'name': '&type', 'type': 'INTEGER'}, {'name': '&Value', 'type': 'OpenType'}]}}, 'object-sets': {'As': {'class': 'A', 'members': [{'&B': {'type': 'C'}, '&a': 0}]}, 'ErrorSet': {'class': 'ERROR-CLASS', 'members': [{'&Type': {'type': 'INTEGER'}, '&category': 'A', '&code': 1}, {'&Type': {'type': 'BOOLEAN'}, '&category': 'A', '&code': 2}, {'&Type': {'type': 'IA5String'}, '&category': 'B', '&code': 1}, {'&Type': {'type': 'GeneralString'}, '&category': 'B', '&code': 2}]}, 'GCs': {'class': 'GC', 'members': []}, 'InnerItems': {'class': 'INNER-ITEM', 'members': ['innerItem0', {'&Value': {'type': 'IA5String'}, '&type': 1}]}, 'Items': {'class': 'ITEM', 'members': [{'&Value': {'type': 'BOOLEAN'}, '&comment': 'item ' '0', '&id': 0}, {'&Value': {'type': 'InnerSequence'}, '&comment': 'item ' '1', '&id': 1}]}}, 'tags': 'AUTOMATIC', 'types': {'C': {'members': [{'name': 'a', 'table': {'type': 'As'}, 'type': 'A.&a'}, {'name': 'b', 'optional': True, 'table': ['As', ['a']], 'type': 'A.&B'}], 'type': 'SEQUENCE'}, 'D1': {'members': [{'name': 'id', 'table': {'type': 'GCs'}, 'type': 'GC.&id'}, {'name': 'value', 'table': ['GCs', ['id']], 'type': 'GC.&Value'}, {'actual-parameters': ['{'], 'name': 'a', 'type': 'E1'}], 'type': 'SEQUENCE'}, 'D2': {'members': [{'name': 'id', 'table': {'type': 'GCs'}, 'type': 'GC.&id'}, {'name': 'value', 'table': ['GCs', ['id']], 'type': 'GC.&Value'}, {'name': 'a', 'type': 'T1'}], 'type': 'SEQUENCE'}, 'E1': {'members': [{'name': 'id', 'table': {'type': 'Param'}, 'type': 'GC.&id'}, {'name': 'value', 'table': ['Param', ['id']], 'type': 'GC.&Value'}], 'parameters': ['Param'], 'type': 'SEQUENCE'}, 'ErrorReturn': {'members': [{'name': 'errorCategory', 'table': {'type': 'ErrorSet'}, 'type': 'ERROR-CLASS.&category'}, {'element': {'members': [{'name': 'errorCode', 'table': ['ErrorSet', ['errorCategory']], 'type': 'ERROR-CLASS.&code'}, {'name': 'errorInfo', 'table': ['ErrorSet', ['errorCategory', '.errorCode']], 'type': 'ERROR-CLASS.&Type'}], 'type': 'SEQUENCE'}, 'name': 'errors', 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'InnerSequence': {'members': [{'name': 'myValue', 'table': ['InnerItems', ['myType']], 'type': 'INNER-ITEM.&Value'}, {'name': 'myType', 'table': {'type': 'InnerItems'}, 'type': 'INNER-ITEM.&type'}], 'type': 'SEQUENCE'}, 'ItemWithConstraints': {'members': [{'name': 'id', 'table': {'type': 'Items'}, 'type': 'ITEM.&id'}, {'name': 'value', 'table': ['Items', ['id']], 'type': 'ITEM.&Value'}, {'name': 'comment', 'table': ['Items', ['id']], 'type': 'ITEM.&comment'}, {'name': 'extra', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'ItemWithoutConstraints': {'members': [{'name': 'id', 'table': None, 'type': 'ITEM.&id'}, {'name': 'value', 'table': None, 'type': 'ITEM.&Value'}, {'name': 'comment', 'table': None, 'type': 'ITEM.&comment'}, {'name': 'extra', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'String': {'type': 'NULL'}, 'T1': {'members': [{'name': 'id', 'table': {'type': 'GCs'}, 'type': 'GC.&id'}, {'name': 'value', 'table': ['GCs', ['id']], 'type': 'GC.&Value'}], 'type': 'SEQUENCE'}}, 'values': {'innerItem0': {'type': 'INNER-ITEM', 'value': None}}}, 'InformationObjectClass': {'extensibility-implied': False, 'imports': {}, 'object-classes': {'ITEM': {'members': [{'name': '&id', 'type': 'INTEGER'}, {'name': '&Value', 'type': 'OpenType'}, {'name': '&comment', 'type': 'String'}]}}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'String': {'type': 'IA5String'}}, 'values': {}}}asn1tools-0.169.0/tests/files/module-1.asn000066400000000000000000000005231524544274600202210ustar00rootroot00000000000000Module-1 DEFINITIONS AUTOMATIC TAGS ::= BEGIN Identifier ::= INTEGER (0..5) Num ::= INTEGER (0..15) Priority ::= ENUMERATED {high, low} ASequence ::= SEQUENCE { priority Priority, src Identifier, dst Identifier, num Num, length INTEGER (0..1024) } AChoice ::= CHOICE { identity Identifier, num Num } END asn1tools-0.169.0/tests/files/module-2.asn000066400000000000000000000002761524544274600202270ustar00rootroot00000000000000Module-2 DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Identifier FROM Module-1; Id ::= Identifier SeqMod2 ::= SEQUENCE { isvalide BOOLEAN, name IA5String, identity Id } END asn1tools-0.169.0/tests/files/module_tags_automatic.asn000066400000000000000000000022061524544274600231470ustar00rootroot00000000000000ModuleTagsAutomatic DEFINITIONS AUTOMATIC TAGS ::= BEGIN A ::= [3] INTEGER AI ::= [3] IMPLICIT INTEGER BA ::= [4] A BIA ::= [4] IMPLICIT A BIAI ::= [4] IMPLICIT AI CBA ::= [5] BA CBIAI ::= [5] BIAI CIBIA ::= [5] IMPLICIT BIA CIBIAI ::= [5] IMPLICIT BIAI S1 ::= SEQUENCE { a INTEGER, b BOOLEAN OPTIONAL } S2 ::= SEQUENCE { a INTEGER, b [2] S1, c CHOICE { a BOOLEAN } } S3 ::= SEQUENCE { a INTEGER, b [2] S1, c [3] EXPLICIT CHOICE { a BOOLEAN } } -- C1 type becomes EXPLICIT since its type is CHOICE, rest IMPLICIT -- (see X.680 30.6-c). S4 ::= SEQUENCE { a INTEGER, b [1] C1, c [2] S1, d CHOICE { a BOOLEAN } } S5 ::= SEQUENCE { a INTEGER, b S1, c CHOICE { a BOOLEAN } } S6 ::= SEQUENCE { a INTEGER, ..., b BOOLEAN } S7 ::= SEQUENCE { a [2] INTEGER, ..., b BOOLEAN } S8 ::= SEQUENCE { a SEQUENCE OF CHOICE { a INTEGER, b BOOLEAN } } S9 ::= SET { a SET OF CHOICE { a INTEGER, b BOOLEAN } } C1 ::= CHOICE { a [0] CHOICE { a [0] INTEGER } } END asn1tools-0.169.0/tests/files/module_tags_automatic.py000066400000000000000000000177151524544274600230310ustar00rootroot00000000000000EXPECTED = {'ModuleTagsAutomatic': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'A': {'tag': {'number': 3}, 'type': 'INTEGER'}, 'AI': {'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'INTEGER'}, 'BA': {'tag': {'number': 4}, 'type': 'A'}, 'BIA': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'A'}, 'BIAI': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'AI'}, 'C1': {'members': [{'members': [{'name': 'a', 'tag': {'number': 0}, 'type': 'INTEGER'}], 'name': 'a', 'tag': {'number': 0}, 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'CBA': {'tag': {'number': 5}, 'type': 'BA'}, 'CBIAI': {'tag': {'number': 5}, 'type': 'BIAI'}, 'CIBIA': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIA'}, 'CIBIAI': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIAI'}, 'S1': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S2': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S3': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'tag': {'kind': 'EXPLICIT', 'number': 3}, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S4': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'number': 1}, 'type': 'C1'}, {'name': 'c', 'tag': {'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'd', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S5': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S6': {'members': [{'name': 'a', 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S7': {'members': [{'name': 'a', 'tag': {'number': 2}, 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S8': {'members': [{'element': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'name': 'a', 'type': 'SEQUENCE OF'}], 'type': 'SEQUENCE'}, 'S9': {'members': [{'element': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'name': 'a', 'type': 'SET OF'}], 'type': 'SET'}}, 'values': {}}}asn1tools-0.169.0/tests/files/module_tags_automatic_pp.py000066400000000000000000000275401524544274600235250ustar00rootroot00000000000000EXPECTED = {'ModuleTagsAutomatic': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'A': {'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'INTEGER'}, 'AI': {'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'INTEGER'}, 'BA': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'A'}, 'BIA': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'A'}, 'BIAI': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'AI'}, 'C1': {'members': [{'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'INTEGER'}], 'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'CBA': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BA'}, 'CBIAI': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIAI'}, 'CIBIA': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIA'}, 'CIBIAI': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIAI'}, 'S1': {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'name': 'b', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S2': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'BOOLEAN'}], 'name': 'c', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S3': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'BOOLEAN'}], 'name': 'c', 'tag': {'kind': 'EXPLICIT', 'number': 3}, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S4': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'EXPLICIT', 'number': 1}, 'type': 'C1'}, {'name': 'c', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'BOOLEAN'}], 'name': 'd', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S5': {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'S1'}, {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'BOOLEAN'}], 'name': 'c', 'tag': {'kind': 'EXPLICIT', 'number': 2}, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S6': {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'INTEGER'}, None, {'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S7': {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S8': {'members': [{'element': {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'SEQUENCE OF'}], 'type': 'SEQUENCE'}, 'S9': {'members': [{'element': {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'SET OF'}], 'type': 'SET'}}, 'values': {}}} asn1tools-0.169.0/tests/files/module_tags_explicit.asn000066400000000000000000000022731524544274600230060ustar00rootroot00000000000000ModuleTagsExplicit DEFINITIONS ::= BEGIN A ::= [3] INTEGER AI ::= [3] IMPLICIT INTEGER BA ::= [4] A BIA ::= [4] IMPLICIT A BIAI ::= [4] IMPLICIT AI CBA ::= [5] BA CBIAI ::= [5] BIAI CIBIA ::= [5] IMPLICIT BIA CIBIAI ::= [5] IMPLICIT BIAI S1 ::= SEQUENCE { a INTEGER, b BOOLEAN OPTIONAL } S2 ::= SEQUENCE { a INTEGER, b [2] S1, c CHOICE { a BOOLEAN } } S3 ::= SEQUENCE { a INTEGER, b [2] S1, c [3] EXPLICIT CHOICE { a BOOLEAN } } S4 ::= SEQUENCE { a INTEGER, b [1] C1, c [2] S1, d CHOICE { a BOOLEAN } } S5 ::= SEQUENCE { a INTEGER, b S1, c CHOICE { a BOOLEAN } } S6 ::= SEQUENCE { a INTEGER, ..., b BOOLEAN } S7 ::= SEQUENCE { a [2] INTEGER, ..., b BOOLEAN } S8 ::= SEQUENCE { a SEQUENCE OF CHOICE { a INTEGER, b BOOLEAN } } S9 ::= SET { a SET OF CHOICE { a INTEGER, b BOOLEAN } } C1 ::= CHOICE { a [0] CHOICE { a [0] INTEGER } } Type1 ::= VisibleString Type2 ::= [APPLICATION 3] IMPLICIT Type1 Type3 ::= [2] Type2 Type4 ::= [APPLICATION 7] IMPLICIT Type3 Type5 ::= [2] IMPLICIT Type2 END asn1tools-0.169.0/tests/files/module_tags_explicit.py000066400000000000000000000213451524544274600226560ustar00rootroot00000000000000EXPECTED = {'ModuleTagsExplicit': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'A': {'tag': {'number': 3}, 'type': 'INTEGER'}, 'AI': {'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'INTEGER'}, 'BA': {'tag': {'number': 4}, 'type': 'A'}, 'BIA': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'A'}, 'BIAI': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'AI'}, 'C1': {'members': [{'members': [{'name': 'a', 'tag': {'number': 0}, 'type': 'INTEGER'}], 'name': 'a', 'tag': {'number': 0}, 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'CBA': {'tag': {'number': 5}, 'type': 'BA'}, 'CBIAI': {'tag': {'number': 5}, 'type': 'BIAI'}, 'CIBIA': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIA'}, 'CIBIAI': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIAI'}, 'S1': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S2': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S3': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'tag': {'kind': 'EXPLICIT', 'number': 3}, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S4': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'number': 1}, 'type': 'C1'}, {'name': 'c', 'tag': {'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'd', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S5': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S6': {'members': [{'name': 'a', 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S7': {'members': [{'name': 'a', 'tag': {'number': 2}, 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S8': {'members': [{'element': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'name': 'a', 'type': 'SEQUENCE OF'}], 'type': 'SEQUENCE'}, 'S9': {'members': [{'element': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'name': 'a', 'type': 'SET OF'}], 'type': 'SET'}, 'Type1': {'type': 'VisibleString'}, 'Type2': {'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 3}, 'type': 'Type1'}, 'Type3': {'tag': {'number': 2}, 'type': 'Type2'}, 'Type4': {'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 7}, 'type': 'Type3'}, 'Type5': {'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'Type2'}}, 'values': {}}}asn1tools-0.169.0/tests/files/module_tags_explicit_pp.py000066400000000000000000000233551524544274600233600ustar00rootroot00000000000000EXPECTED = {'ModuleTagsExplicit': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'A': {'tag': {'kind': 'EXPLICIT', 'number': 3}, 'type': 'INTEGER'}, 'AI': {'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'INTEGER'}, 'BA': {'tag': {'kind': 'EXPLICIT', 'number': 4}, 'type': 'A'}, 'BIA': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'A'}, 'BIAI': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'AI'}, 'C1': {'members': [{'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'INTEGER'}], 'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'CBA': {'tag': {'kind': 'EXPLICIT', 'number': 5}, 'type': 'BA'}, 'CBIAI': {'tag': {'kind': 'EXPLICIT', 'number': 5}, 'type': 'BIAI'}, 'CIBIA': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIA'}, 'CIBIAI': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIAI'}, 'S1': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S2': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'EXPLICIT', 'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S3': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'EXPLICIT', 'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'tag': {'kind': 'EXPLICIT', 'number': 3}, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S4': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'EXPLICIT', 'number': 1}, 'type': 'C1'}, {'name': 'c', 'tag': {'kind': 'EXPLICIT', 'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'd', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S5': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S6': {'members': [{'name': 'a', 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S7': {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 2}, 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S8': {'members': [{'element': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'name': 'a', 'type': 'SEQUENCE OF'}], 'type': 'SEQUENCE'}, 'S9': {'members': [{'element': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'name': 'a', 'type': 'SET OF'}], 'type': 'SET'}, 'Type1': {'type': 'VisibleString'}, 'Type2': {'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 3}, 'type': 'Type1'}, 'Type3': {'tag': {'kind': 'EXPLICIT', 'number': 2}, 'type': 'Type2'}, 'Type4': {'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 7}, 'type': 'Type3'}, 'Type5': {'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'Type2'}}, 'values': {}}} asn1tools-0.169.0/tests/files/module_tags_implicit.asn000066400000000000000000000020511524544274600227710ustar00rootroot00000000000000ModuleTagsImplicit DEFINITIONS IMPLICIT TAGS ::= BEGIN A ::= [3] INTEGER AI ::= [3] IMPLICIT INTEGER BA ::= [4] A BIA ::= [4] IMPLICIT A BIAI ::= [4] IMPLICIT AI CBA ::= [5] BA CBIAI ::= [5] BIAI CIBIA ::= [5] IMPLICIT BIA CIBIAI ::= [5] IMPLICIT BIAI S1 ::= SEQUENCE { a INTEGER, b BOOLEAN OPTIONAL } S2 ::= SEQUENCE { a INTEGER, b [2] S1, c CHOICE { a BOOLEAN } } S3 ::= SEQUENCE { a INTEGER, b [2] S1, c [3] EXPLICIT CHOICE { a BOOLEAN } } S4 ::= SEQUENCE { a INTEGER, b [1] C1, c [2] S1, d CHOICE { a BOOLEAN } } S5 ::= SEQUENCE { a INTEGER, b S1, c CHOICE { a BOOLEAN } } S6 ::= SEQUENCE { a INTEGER, ..., b BOOLEAN } S7 ::= SEQUENCE { a [2] INTEGER, ..., b BOOLEAN } S8 ::= SEQUENCE { a SEQUENCE OF CHOICE { a INTEGER, b BOOLEAN } } S9 ::= SET { a SET OF CHOICE { a INTEGER, b BOOLEAN } } C1 ::= CHOICE { a [0] CHOICE { a [0] INTEGER } } END asn1tools-0.169.0/tests/files/module_tags_implicit.py000066400000000000000000000175331524544274600226530ustar00rootroot00000000000000EXPECTED = {'ModuleTagsImplicit': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'IMPLICIT', 'types': {'A': {'tag': {'number': 3}, 'type': 'INTEGER'}, 'AI': {'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'INTEGER'}, 'BA': {'tag': {'number': 4}, 'type': 'A'}, 'BIA': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'A'}, 'BIAI': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'AI'}, 'C1': {'members': [{'members': [{'name': 'a', 'tag': {'number': 0}, 'type': 'INTEGER'}], 'name': 'a', 'tag': {'number': 0}, 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'CBA': {'tag': {'number': 5}, 'type': 'BA'}, 'CBIAI': {'tag': {'number': 5}, 'type': 'BIAI'}, 'CIBIA': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIA'}, 'CIBIAI': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIAI'}, 'S1': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S2': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S3': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'tag': {'kind': 'EXPLICIT', 'number': 3}, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S4': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'number': 1}, 'type': 'C1'}, {'name': 'c', 'tag': {'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'd', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S5': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S6': {'members': [{'name': 'a', 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S7': {'members': [{'name': 'a', 'tag': {'number': 2}, 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S8': {'members': [{'element': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'name': 'a', 'type': 'SEQUENCE OF'}], 'type': 'SEQUENCE'}, 'S9': {'members': [{'element': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'name': 'a', 'type': 'SET OF'}], 'type': 'SET'}}, 'values': {}}}asn1tools-0.169.0/tests/files/module_tags_implicit_pp.py000066400000000000000000000214311524544274600233420ustar00rootroot00000000000000EXPECTED = {'ModuleTagsImplicit': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'IMPLICIT', 'types': {'A': {'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'INTEGER'}, 'AI': {'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'INTEGER'}, 'BA': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'A'}, 'BIA': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'A'}, 'BIAI': {'tag': {'kind': 'IMPLICIT', 'number': 4}, 'type': 'AI'}, 'C1': {'members': [{'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'INTEGER'}], 'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'CHOICE'}], 'type': 'CHOICE'}, 'CBA': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BA'}, 'CBIAI': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIAI'}, 'CIBIA': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIA'}, 'CIBIAI': {'tag': {'kind': 'IMPLICIT', 'number': 5}, 'type': 'BIAI'}, 'S1': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S2': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S3': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'tag': {'kind': 'EXPLICIT', 'number': 3}, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S4': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'EXPLICIT', 'number': 1}, 'type': 'C1'}, {'name': 'c', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'd', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S5': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'S1'}, {'members': [{'name': 'a', 'type': 'BOOLEAN'}], 'name': 'c', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'S6': {'members': [{'name': 'a', 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S7': {'members': [{'name': 'a', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'S8': {'members': [{'element': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'name': 'a', 'type': 'SEQUENCE OF'}], 'type': 'SEQUENCE'}, 'S9': {'members': [{'element': {'members': [{'name': 'a', 'type': 'INTEGER'}, {'name': 'b', 'type': 'BOOLEAN'}], 'type': 'CHOICE'}, 'name': 'a', 'type': 'SET OF'}], 'type': 'SET'}}, 'values': {}}} asn1tools-0.169.0/tests/files/named_numbers.asn000066400000000000000000000007221524544274600214160ustar00rootroot00000000000000Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN Constants ::= INTEGER { min (-1), max (1), unknown (2) } (-1..2) A ::= Constants (min..max) B ::= Constants (unknown) -- Mix of value and named number in same constraint. C ::= Constants (zero..max) zero INTEGER ::= 0 -- This value should not be used in the constraints above, but -- instead the named numbers in the type. min INTEGER ::= 3 END asn1tools-0.169.0/tests/files/named_numbers.py000066400000000000000000000015631524544274600212710ustar00rootroot00000000000000EXPECTED = {'Foo': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'A': {'restricted-to': [('min', 'max')], 'type': 'Constants'}, 'B': {'restricted-to': ['unknown'], 'type': 'Constants'}, 'C': {'restricted-to': [('zero', 'max')], 'type': 'Constants'}, 'Constants': {'named-numbers': {'max': 1, 'min': -1, 'unknown': 2}, 'restricted-to': [(-1, 2)], 'type': 'INTEGER'}}, 'values': {'min': {'type': 'INTEGER', 'value': 3}, 'zero': {'type': 'INTEGER', 'value': 0}}}}asn1tools-0.169.0/tests/files/oma/000077500000000000000000000000001524544274600166475ustar00rootroot00000000000000asn1tools-0.169.0/tests/files/oma/ulp.asn000066400000000000000000001724511524544274600201640ustar00rootroot00000000000000--ASN.1 Encoding of ULP messages (Normative) --This section defines the ULP messages and common elements with ASN.1 (Normative). --Common Part ULP DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS Version, SessionID FROM ULP-Components SUPLINIT FROM SUPL-INIT SUPLSTART FROM SUPL-START SUPLRESPONSE FROM SUPL-RESPONSE SUPLPOSINIT FROM SUPL-POS-INIT SUPLPOS FROM SUPL-POS SUPLEND FROM SUPL-END SUPLAUTHREQ FROM SUPL-AUTH-REQ SUPLAUTHRESP FROM SUPL-AUTH-RESP Ver2-SUPLTRIGGEREDSTART FROM SUPL-TRIGGERED-START Ver2-SUPLTRIGGEREDRESPONSE FROM SUPL-TRIGGERED-RESPONSE Ver2-SUPLREPORT FROM SUPL-REPORT Ver2-SUPLTRIGGEREDSTOP FROM SUPL-TRIGGERED-STOP Ver2-SUPLSETINIT FROM SUPL-SET-INIT Ver2-SUPLNOTIFY FROM SUPL-NOTIFY Ver2-SUPLNOTIFYRESPONSE FROM SUPL-NOTIFY-RESPONSE; -- general ULP PDU layout;-- ULP-PDU ::= SEQUENCE { length INTEGER(0..65535), version Version, sessionID SessionID, message UlpMessage} UlpMessage ::= CHOICE { msSUPLINIT SUPLINIT, msSUPLSTART SUPLSTART, msSUPLRESPONSE SUPLRESPONSE, msSUPLPOSINIT SUPLPOSINIT, msSUPLPOS SUPLPOS, msSUPLEND SUPLEND, msSUPLAUTHREQ SUPLAUTHREQ, msSUPLAUTHRESP SUPLAUTHRESP, ..., msSUPLTRIGGEREDSTART Ver2-SUPLTRIGGEREDSTART, msSUPLTRIGGEREDRESPONSE Ver2-SUPLTRIGGEREDRESPONSE, msSUPLTRIGGEREDSTOP Ver2-SUPLTRIGGEREDSTOP, msSUPLNOTIFY Ver2-SUPLNOTIFY, msSUPLNOTIFYRESPONSE Ver2-SUPLNOTIFYRESPONSE, msSUPLSETINIT Ver2-SUPLSETINIT, msSUPLREPORT Ver2-SUPLREPORT} END --Message Specific Part --SUPL INIT SUPL-INIT DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLINIT, Notification; IMPORTS SLPAddress, QoP, PosMethod FROM ULP-Components Ver2-SUPL-INIT-extension FROM ULP-Version-2-message-extensions Ver2-Notification-extension FROM ULP-Version-2-parameter-extensions; SUPLINIT ::= SEQUENCE { posMethod PosMethod, notification Notification OPTIONAL, sLPAddress SLPAddress OPTIONAL, qoP QoP OPTIONAL, sLPMode SLPMode, mAC MAC OPTIONAL, -- included for backwards compatibility keyIdentity KeyIdentity OPTIONAL, -- included for backwards compatibility ..., -- version 2 extension element ver2-SUPL-INIT-extension Ver2-SUPL-INIT-extension OPTIONAL} Notification ::= SEQUENCE { notificationType NotificationType, encodingType EncodingType OPTIONAL, requestorId OCTET STRING(SIZE (1..maxReqLength)) OPTIONAL, requestorIdType FormatIndicator OPTIONAL, clientName OCTET STRING(SIZE (1..maxClientLength)) OPTIONAL, clientNameType FormatIndicator OPTIONAL, ..., ver2-Notification-extension Ver2-Notification-extension OPTIONAL} NotificationType ::= ENUMERATED { noNotificationNoVerification(0), notificationOnly(1), notificationAndVerficationAllowedNA(2), notificationAndVerficationDeniedNA(3), privacyOverride(4), ...} EncodingType ::= ENUMERATED {ucs2(0), gsmDefault(1), utf8(2), ...} maxReqLength INTEGER ::= 50 maxClientLength INTEGER ::= 50 FormatIndicator ::= ENUMERATED { logicalName(0), e-mailAddress(1), msisdn(2), url(3), sipUrl(4), min(5), mdn(6), iMSPublicidentity(7), ...} SLPMode ::= ENUMERATED {proxy(0), nonProxy(1)} MAC ::= BIT STRING(SIZE (64)) -- empty placeholder required for SUPL 1.0 backwards compatibility KeyIdentity ::= BIT STRING(SIZE (128)) -- empty placeholder required for SUPL 1.0 backwards compatibility END --SUPL START SUPL-START DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLSTART, SETCapabilities; IMPORTS LocationId, QoP FROM ULP-Components Ver2-SUPL-START-extension FROM ULP-Version-2-message-extensions Ver2-SETCapabilities-extension, Ver2-PosProtocol-extension, Ver2-PosTechnology-extension FROM ULP-Version-2-parameter-extensions; SUPLSTART ::= SEQUENCE { sETCapabilities SETCapabilities, locationId LocationId, qoP QoP OPTIONAL, ..., -- version 2 extension element ver2-SUPL-START-extension Ver2-SUPL-START-extension OPTIONAL} SETCapabilities ::= SEQUENCE { posTechnology PosTechnology, prefMethod PrefMethod, posProtocol PosProtocol, ..., ver2-SETCapabilities-extension Ver2-SETCapabilities-extension OPTIONAL} PosTechnology ::= SEQUENCE { agpsSETassisted BOOLEAN, agpsSETBased BOOLEAN, autonomousGPS BOOLEAN, aFLT BOOLEAN, eCID BOOLEAN, eOTD BOOLEAN, oTDOA BOOLEAN, ..., ver2-PosTechnology-extension Ver2-PosTechnology-extension OPTIONAL} PrefMethod ::= ENUMERATED { agpsSETassistedPreferred, agpsSETBasedPreferred, noPreference} -- To achieve compatibility with ULP V1.0 the names of the enumerations are -- kept the same as in ULP V1.0. agps shall be interpreted as agnss. PosProtocol ::= SEQUENCE { tia801 BOOLEAN, rrlp BOOLEAN, rrc BOOLEAN, ..., ver2-PosProtocol-extension Ver2-PosProtocol-extension OPTIONAL} END --SUPL-RESPONSE SUPL-RESPONSE DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLRESPONSE; IMPORTS PosMethod, SLPAddress FROM ULP-Components Ver2-SUPL-RESPONSE-extension FROM ULP-Version-2-message-extensions; SUPLRESPONSE ::= SEQUENCE { posMethod PosMethod, sLPAddress SLPAddress OPTIONAL, sETAuthKey SETAuthKey OPTIONAL, -- included for backwards compatibility keyIdentity4 KeyIdentity4 OPTIONAL, -- included for backwards compatibility ..., -- version 2 extension element ver2-SUPL-RESPONSE-extension Ver2-SUPL-RESPONSE-extension OPTIONAL} SETAuthKey ::= CHOICE { shortKey BIT STRING(SIZE (128)), longKey BIT STRING(SIZE (256)), ...} KeyIdentity4 ::= BIT STRING(SIZE (128)) END --SUPL-POS-INIT SUPL-POS-INIT DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLPOSINIT; IMPORTS SUPLPOS FROM SUPL-POS SETCapabilities FROM SUPL-START LocationId, Position, Ver FROM ULP-Components Ver2-SUPL-POS-INIT-extension FROM ULP-Version-2-message-extensions Ver2-RequestedAssistData-extension FROM ULP-Version-2-parameter-extensions; SUPLPOSINIT ::= SEQUENCE { sETCapabilities SETCapabilities, requestedAssistData RequestedAssistData OPTIONAL, locationId LocationId, position Position OPTIONAL, sUPLPOS SUPLPOS OPTIONAL, ver Ver OPTIONAL, ..., -- version 2 extension element ver2-SUPL-POS-INIT-extension Ver2-SUPL-POS-INIT-extension OPTIONAL} RequestedAssistData ::= SEQUENCE { almanacRequested BOOLEAN, utcModelRequested BOOLEAN, ionosphericModelRequested BOOLEAN, dgpsCorrectionsRequested BOOLEAN, referenceLocationRequested BOOLEAN, -- Note: Used also for GANSS referenceTimeRequested BOOLEAN, acquisitionAssistanceRequested BOOLEAN, realTimeIntegrityRequested BOOLEAN, navigationModelRequested BOOLEAN, navigationModelData NavigationModel OPTIONAL, ..., ver2-RequestedAssistData-extension Ver2-RequestedAssistData-extension OPTIONAL} NavigationModel ::= SEQUENCE { gpsWeek INTEGER(0..1023), gpsToe INTEGER(0..167), nSAT INTEGER(0..31), toeLimit INTEGER(0..10), satInfo SatelliteInfo OPTIONAL, ...} -- Further information on this fields can be found -- in [3GPP RRLP]and [3GPP 49.031] SatelliteInfo ::= SEQUENCE (SIZE (1..31)) OF SatelliteInfoElement SatelliteInfoElement ::= SEQUENCE { satId INTEGER(0..63), iODE INTEGER(0..255), ...} END --SUPL-POS SUPL-POS DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLPOS, PosPayLoad; IMPORTS Velocity FROM ULP-Components Ver2-SUPL-POS-extension FROM ULP-Version-2-message-extensions Ver2-PosPayLoad-extension FROM ULP-Version-2-parameter-extensions; SUPLPOS ::= SEQUENCE { posPayLoad PosPayLoad, velocity Velocity OPTIONAL, ..., -- version 2 extension element ver2-SUPL-POS-extension Ver2-SUPL-POS-extension OPTIONAL} PosPayLoad ::= CHOICE { tia801payload OCTET STRING(SIZE (1..8192)), rrcPayload OCTET STRING(SIZE (1..8192)), rrlpPayload OCTET STRING(SIZE (1..8192)), ..., ver2-PosPayLoad-extension Ver2-PosPayLoad-extension} END --SUPL-END SUPL-END DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLEND; IMPORTS StatusCode, Position, Ver FROM ULP-Components Ver2-SUPL-END-extension FROM ULP-Version-2-message-extensions; SUPLEND ::= SEQUENCE { position Position OPTIONAL, statusCode StatusCode OPTIONAL, ver Ver OPTIONAL, ..., -- version 2 extension element ver2-SUPL-END-extension Ver2-SUPL-END-extension OPTIONAL} END --SUPL-AUTH-REQ SUPL-AUTH-REQ DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLAUTHREQ; IMPORTS Ver FROM ULP-Components SETCapabilities FROM SUPL-START; SUPLAUTHREQ ::= SEQUENCE { ver Ver OPTIONAL, sETCapabilities SETCapabilities OPTIONAL, ...} END SUPL-AUTH-RESP DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS SUPLAUTHRESP; IMPORTS SPCSETKey, SPCTID, SPCSETKeylifetime FROM Ver2-ULP-Components; SUPLAUTHRESP ::= SEQUENCE { sPCSETKey SPCSETKey, sPCTID SPCTID, sPCSETKeylifetime SPCSETKeylifetime OPTIONAL, ...} END --SUPL-NOTIFY SUPL-NOTIFY DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS Ver2-SUPLNOTIFY; IMPORTS Notification FROM SUPL-INIT; Ver2-SUPLNOTIFY ::= SEQUENCE { notification Notification, ...} END --SUPL-NOTIFY-RESPONSE SUPL-NOTIFY-RESPONSE DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS Ver2-SUPLNOTIFYRESPONSE, NotificationResponse; Ver2-SUPLNOTIFYRESPONSE ::= SEQUENCE { notificationResponse NotificationResponse OPTIONAL, ...} NotificationResponse ::= ENUMERATED {allowed(0), notAllowed(1), ...} END --SUPL-SET-INIT SUPL-SET-INIT DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS Ver2-SUPLSETINIT; IMPORTS SETId, QoP FROM ULP-Components ApplicationID FROM Ver2-ULP-Components; Ver2-SUPLSETINIT ::= SEQUENCE { targetSETID SETId, --Target SETid identifies the target SET to be located qoP QoP OPTIONAL, applicationID ApplicationID OPTIONAL} END --SUPL-TRIGGERED-START SUPL-TRIGGERED-START DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS Ver2-SUPLTRIGGEREDSTART, TriggerType, TriggerParams, maxNumGeoArea, maxAreaId, maxAreaIdList, GeographicTargetAreaList, GeographicTargetArea, AreaIdList; IMPORTS LocationId, QoP, Ver, Position FROM ULP-Components MultipleLocationIds, CauseCode, ThirdParty, ApplicationID, ReportingCap, Coordinate, CircularArea, EllipticalArea, PolygonArea FROM Ver2-ULP-Components SETCapabilities FROM SUPL-START; Ver2-SUPLTRIGGEREDSTART ::= SEQUENCE { sETCapabilities SETCapabilities, locationId LocationId, ver Ver OPTIONAL, qoP QoP OPTIONAL, multipleLocationIds MultipleLocationIds OPTIONAL, thirdParty ThirdParty OPTIONAL, applicationID ApplicationID OPTIONAL, triggerType TriggerType OPTIONAL, triggerParams TriggerParams OPTIONAL, position Position OPTIONAL, reportingCap ReportingCap OPTIONAL, causeCode CauseCode OPTIONAL, ...} TriggerType ::= ENUMERATED { periodic(0), areaEvent(1), ...} TriggerParams ::= CHOICE { periodicParams PeriodicParams, areaEventParams AreaEventParams, ...} PeriodicParams ::= SEQUENCE{ numberOfFixes INTEGER(1.. 8639999), intervalBetweenFixes INTEGER(1.. 8639999), startTime INTEGER(0..2678400) OPTIONAL, ...} -- intervalBetweenFixes and startTime are in seconds. -- numberOfFixes * intervalBetweenFixes shall not exceed 8639999 -- (100 days in seconds) for compatibility with OMA MLP and RLP -- startTime is in relative time in units of seconds measured from "now" -- a value of 0 signifies "now", a value of "startTime" signifies startTime -- seconds from "now" AreaEventParams ::= SEQUENCE { areaEventType AreaEventType, locationEstimate BOOLEAN, repeatedReportingParams RepeatedReportingParams OPTIONAL, startTime INTEGER(0..2678400) OPTIONAL, stopTime INTEGER(0..11318399) OPTIONAL, geographicTargetAreaList GeographicTargetAreaList OPTIONAL, areaIdLists SEQUENCE (SIZE (1..maxAreaIdList)) OF AreaIdList OPTIONAL, ...} -- startTime and stopTime are in seconds. -- startTime and stop Time are in relative time in units of seconds measured -- from "now" -- a value of 0 signifies "now" -- stopTime must be > startTime -- stopTime - startTime shall not exceed 8639999 -- (100 days in seconds) for compatibility with OMA MLP and RLP AreaEventType ::= ENUMERATED {enteringArea(0), insideArea(1), outsideArea(2), leavingArea(3), ...} RepeatedReportingParams ::= SEQUENCE { minimumIntervalTime INTEGER (1..604800), -- time in seconds maximumNumberOfReports INTEGER (1..1024), ...} GeographicTargetAreaList ::= SEQUENCE (SIZE (1..maxNumGeoArea)) OF GeographicTargetArea GeographicTargetArea ::= CHOICE { circularArea CircularArea, ellipticalArea EllipticalArea, polygonArea PolygonArea, ...} AreaIdList ::= SEQUENCE { areaIdSet AreaIdSet, areaIdSetType AreaIdSetType OPTIONAL, geoAreaMappingList GeoAreaMappingList OPTIONAL} AreaIdSet ::= SEQUENCE SIZE (1..maxAreaId) OF AreaId AreaId ::= CHOICE { gSMAreaId GSMAreaId, wCDMAAreaId WCDMAAreaId, -- For TD-SCDMA networks, this parameter indicates a TD-SCDMA Area ID cDMAAreaId CDMAAreaId, hRPDAreaId HRPDAreaId, uMBAreaId UMBAreaId, lTEAreaId LTEAreaId, wLANAreaId WLANAreaId, wiMAXAreaId WimaxAreaId, ...} GSMAreaId ::= SEQUENCE { refMCC INTEGER(0..999) OPTIONAL, -- Mobile Country Code refMNC INTEGER(0..999) OPTIONAL, -- Mobile Network Code refLAC INTEGER(0..65535) OPTIONAL, -- Location Area Code refCI INTEGER(0..65535) OPTIONAL, -- Cell Id ...} -- if only CI is present, MCC, MNC and LAC are assumed to be identical to the current serving or camped on network values -- if only CI + LAC are present, MCC and MNC are assumed to be identical to the current serving or camped on network values -- if only CI + LAC + MNC are present, MCC is assumed to be identical to the current serving or camped on network values -- if only LAC is present, MCC and MNC are assumed to be identical to the current serving or camped on network values -- if only MNC is present, MCC is assumed to be identical to the current serving or camped on network value WCDMAAreaId ::= SEQUENCE { refMCC INTEGER(0..999) OPTIONAL, -- Mobile Country Code refMNC INTEGER(0..999) OPTIONAL, -- Mobile Network Code refLAC INTEGER(0..65535) OPTIONAL, -- Location Area Code refUC INTEGER(0..268435455) OPTIONAL, -- Cell identity ...} -- if only UC is present, MCC and MNC are assumed to be identical to the current serving or camped on network values -- if only LAC is present, MCC and MNC are assumed to be identical to the current serving or camped on network values -- if only MNC is present, MCC is assumed to be identical to the current serving or camped on network value CDMAAreaId::= SEQUENCE { refSID INTEGER(0..65535) OPTIONAL, -- System Id refNID INTEGER(0..32767) OPTIONAL, -- Network Id refBASEID INTEGER(0..65535) OPTIONAL, -- Base Station Id ...} -- if only BASEID is present, SID and NID are assumed to be identical to the current serving or camped on network values -- if only NID is present, SID is assumed to be identical to the current serving or camped on network value HRPDAreaId::= SEQUENCE { refSECTORID BIT STRING(SIZE (128)), -- HRPD Sector Id ...} UMBAreaId::= SEQUENCE { refMCC INTEGER(0..999) OPTIONAL, -- Mobile Country Code refMNC INTEGER(0..999) OPTIONAL, -- Mobile Network Code refSECTORID BIT STRING(SIZE (128)) OPTIONAL, -- UMB Sector Id ...} -- if only SECTORID is present, MCC and MNC are assumed to be identical to the current serving or camped on network values -- if only SECTORID + MNC are present, MCC is assumed to be identical to the current serving or camped on network values -- if only MNC is present, MCC is assumed to be identical to the current serving or camped on network value LTEAreaId::= SEQUENCE { refMCC INTEGER(0..999) OPTIONAL, -- Mobile Country Code refMNC INTEGER(0..999) OPTIONAL, -- Mobile Network Code refCI BIT STRING(SIZE (29)) OPTIONAL, -- LTE Cell-Id ...} -- The LTE Cell-Id is encoded in the 28 Least Significant Bits of refCI -- The Most Significant Bit of refCI shall be ignored -- if only CI is present, MCC and MNC are assumed to be identical to the current serving or camped on network values -- if only CI + MNC are present, MCC is assumed to be identical to the current serving or camped on network values -- if only MNC is present, MCC is assumed to be identical to the current serving or camped on network value WLANAreaId::= SEQUENCE { apMACAddress BIT STRING(SIZE (48)), -- AP MAC Address ...} WimaxAreaId ::= SEQUENCE { bsID-MSB BIT STRING (SIZE(24)) OPTIONAL, bsID-LSB BIT STRING (SIZE(24)) } -- if only LSB is present, MSB is assumed to be identical to the current serving BS or clamped on network value AreaIdSetType ::= ENUMERATED {border(0), within(1), ...} GeoAreaMappingList ::= SEQUENCE (SIZE (1..maxNumGeoArea)) OF GeoAreaIndex GeoAreaIndex ::= INTEGER (1..maxNumGeoArea) maxNumGeoArea INTEGER ::= 32 maxAreaId INTEGER ::= 256 maxAreaIdList INTEGER ::= 32 END --SUPL-TRIGGERED-RESPONSE SUPL-TRIGGERED-RESPONSE DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS Ver2-SUPLTRIGGEREDRESPONSE; IMPORTS PosMethod, SLPAddress FROM ULP-Components SupportedNetworkInformation, SPCSETKey, SPCTID, SPCSETKeylifetime, GNSSPosTechnology FROM Ver2-ULP-Components TriggerParams FROM SUPL-TRIGGERED-START; Ver2-SUPLTRIGGEREDRESPONSE::= SEQUENCE{ posMethod PosMethod, triggerParams TriggerParams OPTIONAL, sLPAddress SLPAddress OPTIONAL, supportedNetworkInformation SupportedNetworkInformation OPTIONAL, reportingMode ReportingMode OPTIONAL, sPCSETKey SPCSETKey OPTIONAL, sPCTID SPCTID OPTIONAL, sPCSETKeylifetime SPCSETKeylifetime OPTIONAL, gnssPosTechnology GNSSPosTechnology OPTIONAL, ...} ReportingMode ::= SEQUENCE { repMode RepModee, batchRepConditions BatchRepConditions OPTIONAL, -- only used for batch reporting batchRepType BatchRepType OPTIONAL, -- only used for batch reporting ...} RepModee ::= ENUMERATED {realtime(1), quasirealtime(2), batch(3), ...} BatchRepConditions ::= CHOICE { num-interval INTEGER (1..1024), -- number of periodic fixes/measurements after which the batch report is sent to the SLP num-minutes INTEGER (1..2048), -- number of minutes after which the batch report is sent to the SLP endofsession NULL, -- if selected batch report is to be sent at the end of the session ...} BatchRepType ::= SEQUENCE { reportPosition BOOLEAN, -- set to "true" if reporting of position is allowed reportMeasurements BOOLEAN, -- set to "true" if reporting of measurements is allowed intermediateReports BOOLEAN, -- set to "true" if the SET is allowed to send intermediate reports if it runs out of memory discardOldest BOOLEAN OPTIONAL, -- set to "true" if the SET should discard the oldest positions or measurements of the batch report in order to save memory, set to "false" the SET should discard the latest positions or measurements ...} END --SUPL-REPORT SUPL-REPORT DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS Ver2-SUPLREPORT, SessionList, maxnumSessions; IMPORTS SETCapabilities FROM SUPL-START Position, PosMethod, SessionID, Ver FROM ULP-Components MultipleLocationIds, GNSSPosTechnology, GANSSSignals FROM Ver2-ULP-Components maxGANSS FROM ULP-Version-2-parameter-extensions; Ver2-SUPLREPORT ::= SEQUENCE { sessionList SessionList OPTIONAL, sETCapabilities SETCapabilities OPTIONAL, reportDataList ReportDataList OPTIONAL, ver Ver OPTIONAL, moreComponents NULL OPTIONAL, ...} SessionList ::= SEQUENCE SIZE (1..maxnumSessions) OF SessionInformation SessionInformation ::= SEQUENCE { sessionID SessionID, ...} maxnumSessions INTEGER ::= 64 ReportDataList ::= SEQUENCE SIZE (1.. 1024) OF ReportData ReportData ::= SEQUENCE { positionData PositionData OPTIONAL, multipleLocationIds MultipleLocationIds OPTIONAL, resultCode ResultCode OPTIONAL, timestamp TimeStamp OPTIONAL, ...} PositionData ::= SEQUENCE { position Position, posMethod PosMethod OPTIONAL, gnssPosTechnology GNSSPosTechnology OPTIONAL, ganssSignalsInfo GANSSsignalsInfo OPTIONAL, ...} GANSSsignalsInfo ::= SEQUENCE SIZE (1..maxGANSS) OF GANSSSignalsDescription GANSSSignalsDescription ::= SEQUENCE { ganssId INTEGER(0..15), -- coding according to parameter definition in section 10.10 gANSSSignals GANSSSignals, ...} ResultCode ::= ENUMERATED {outofradiocoverage(1), noposition(2), nomeasurement(3), nopositionnomeasurement(4), outofmemory(5), outofmemoryintermediatereporting(6), other(7), ...} TimeStamp ::= CHOICE { absoluteTime UTCTime, relativeTime INTEGER (0..31536000)} -- relative time to when the SUPL REPORT message is sent in units of 1 sec, where 0 signifies "now" and n signifies n seconds in the past END --SUPL-TRIGGERED-STOP SUPL-TRIGGERED-STOP DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS Ver2-SUPLTRIGGEREDSTOP; IMPORTS StatusCode FROM ULP-Components; Ver2-SUPLTRIGGEREDSTOP::= SEQUENCE{ statusCode StatusCode OPTIONAL, ...} END --ULP-Version-2-message-extensions ULP-Version-2-message-extensions DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS Ver2-SUPL-INIT-extension, Ver2-SUPL-START-extension, Ver2-SUPL-RESPONSE-extension, Ver2-SUPL-POS-INIT-extension, Ver2-SUPL-POS-extension, Ver2-SUPL-END-extension; IMPORTS SLPAddress, Position, Ver FROM ULP-Components SETCapabilities FROM SUPL-START SupportedNetworkInformation, GNSSPosTechnology, MultipleLocationIds, UTRAN-GPSReferenceTimeResult, UTRAN-GANSSReferenceTimeResult, UTRAN-GPSReferenceTimeAssistance, UTRAN-GANSSReferenceTimeAssistance, SPCSETKey, SPCTID, SPCSETKeylifetime, ThirdParty, ApplicationID FROM Ver2-ULP-Components TriggerType FROM SUPL-TRIGGERED-START; Ver2-SUPL-INIT-extension ::= SEQUENCE { notificationMode NotificationMode OPTIONAL, supportedNetworkInformation SupportedNetworkInformation OPTIONAL, triggerType TriggerType OPTIONAL, e-SLPAddress SLPAddress OPTIONAL, historicReporting HistoricReporting OPTIONAL, protectionLevel ProtectionLevel OPTIONAL, gnssPosTechnology GNSSPosTechnology OPTIONAL, minimumMajorVersion INTEGER (0..255) OPTIONAL, ...} NotificationMode ::= ENUMERATED {normal(0), basedOnLocation(1), ...} HistoricReporting ::= SEQUENCE { allowedReportingType AllowedReportingType, reportingCriteria ReportingCriteria OPTIONAL,...} AllowedReportingType ::= ENUMERATED {positionsOnly(0), measurementsOnly(1), positionsAndMeasurements(2),...} ReportingCriteria ::= SEQUENCE { timeWindow TimeWindow OPTIONAL, maxNumberofReports INTEGER(1..65536) OPTIONAL, minTimeInterval INTEGER(1..86400) OPTIONAL, ...} TimeWindow ::= SEQUENCE { startTime INTEGER(-525600..-1), -- Time in minutes stopTime INTEGER(-525599..0)} -- Time in minutes ProtectionLevel ::= SEQUENCE { protlevel ProtLevel, basicProtectionParams BasicProtectionParams OPTIONAL, ...} ProtLevel ::= ENUMERATED { nullProtection(0), basicProtection(1), ...} BasicProtectionParams ::= SEQUENCE { keyIdentifier OCTET STRING(SIZE (8)), basicReplayCounter INTEGER(0..65535), basicMAC BIT STRING(SIZE (32)), ...} Ver2-SUPL-START-extension ::= SEQUENCE { multipleLocationIds MultipleLocationIds OPTIONAL, thirdParty ThirdParty OPTIONAL, applicationID ApplicationID OPTIONAL, position Position OPTIONAL, ...} Ver2-SUPL-RESPONSE-extension ::= SEQUENCE { supportedNetworkInformation SupportedNetworkInformation OPTIONAL, sPCSETKey SPCSETKey OPTIONAL, sPCTID SPCTID OPTIONAL, sPCSETKeylifetime SPCSETKeylifetime OPTIONAL, initialApproximateposition Position OPTIONAL, gnssPosTechnology GNSSPosTechnology OPTIONAL, ...} Ver2-SUPL-POS-INIT-extension ::= SEQUENCE { multipleLocationIds MultipleLocationIds OPTIONAL, utran-GPSReferenceTimeResult UTRAN-GPSReferenceTimeResult OPTIONAL, utran-GANSSReferenceTimeResult UTRAN-GANSSReferenceTimeResult OPTIONAL, ...} Ver2-SUPL-POS-extension ::= SEQUENCE { utran-GPSReferenceTimeAssistance UTRAN-GPSReferenceTimeAssistance OPTIONAL, utran-GPSReferenceTimeResult UTRAN-GPSReferenceTimeResult OPTIONAL, utran-GANSSReferenceTimeAssistance UTRAN-GANSSReferenceTimeAssistance OPTIONAL, utran-GANSSReferenceTimeResult UTRAN-GANSSReferenceTimeResult OPTIONAL, ...} Ver2-SUPL-END-extension ::= SEQUENCE { sETCapabilities SETCapabilities OPTIONAL, ...} END --ULP-Version-2-parameter-extensions ULP-Version-2-parameter-extensions DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS maxGANSS, Ver2-Notification-extension, Ver2-SETCapabilities-extension, Ver2-PosProtocol-extension, Ver2-PosTechnology-extension, Ver2-RequestedAssistData-extension, Ver2-PosPayLoad-extension; IMPORTS GANSSSignals, ReportingCap FROM Ver2-ULP-Components maxNumGeoArea, maxAreaId, maxAreaIdList FROM SUPL-TRIGGERED-START; Ver2-Notification-extension ::= SEQUENCE { emergencyCallLocation NULL OPTIONAL, ...} Ver2-SETCapabilities-extension ::= SEQUENCE { serviceCapabilities ServiceCapabilities OPTIONAL, ..., supportedBearers SupportedBearers OPTIONAL} ServiceCapabilities ::= SEQUENCE { servicesSupported ServicesSupported, reportingCapabilities ReportingCap OPTIONAL, eventTriggerCapabilities EventTriggerCapabilities OPTIONAL, sessionCapabilities SessionCapabilities, ...} ServicesSupported ::= SEQUENCE { periodicTrigger BOOLEAN, areaEventTrigger BOOLEAN, ...} EventTriggerCapabilities ::= SEQUENCE { geoAreaShapesSupported GeoAreaShapesSupported, maxNumGeoAreaSupported INTEGER (0..maxNumGeoArea) OPTIONAL, maxAreaIdListSupported INTEGER (0..maxAreaIdList) OPTIONAL, maxAreaIdSupportedPerList INTEGER (0..maxAreaId) OPTIONAL, ...} GeoAreaShapesSupported ::= SEQUENCE { ellipticalArea BOOLEAN, polygonArea BOOLEAN, ...} SessionCapabilities ::= SEQUENCE { maxNumberTotalSessions INTEGER (1..128), maxNumberPeriodicSessions INTEGER (1..32), maxNumberTriggeredSessions INTEGER (1..32), ...} SupportedBearers ::= SEQUENCE { gsm BOOLEAN, wcdma BOOLEAN, lte BOOLEAN, cdma BOOLEAN, hprd BOOLEAN, umb BOOLEAN, wlan BOOLEAN, wiMAX BOOLEAN, ...} Ver2-PosProtocol-extension ::= SEQUENCE { lpp BOOLEAN, posProtocolVersionRRLP PosProtocolVersion3GPP OPTIONAL, posProtocolVersionRRC PosProtocolVersion3GPP OPTIONAL, posProtocolVersionTIA801 PosProtocolVersion3GPP2 OPTIONAL, posProtocolVersionLPP PosProtocolVersion3GPP OPTIONAL, ..., lppe BOOLEAN OPTIONAL, posProtocolVersionLPPe PosProtocolVersionOMA OPTIONAL} PosProtocolVersion3GPP ::= SEQUENCE { majorVersionField INTEGER(0..255), technicalVersionField INTEGER(0..255), editorialVersionField INTEGER(0..255), ...} PosProtocolVersion3GPP2 ::= SEQUENCE (SIZE(1..8)) OF Supported3GPP2PosProtocolVersion Supported3GPP2PosProtocolVersion ::= SEQUENCE { revisionNumber BIT STRING(SIZE (6)), -- the location standard revision number the SET supports coded according to 3GPP2 C.S0022 pointReleaseNumber INTEGER(0..255), internalEditLevel INTEGER(0..255), ...} PosProtocolVersionOMA ::= SEQUENCE { majorVersionField INTEGER(0..255), minorVersionField INTEGER(0..255), ...} Ver2-PosTechnology-extension ::= SEQUENCE { gANSSPositionMethods GANSSPositionMethods OPTIONAL, ..., additionalPositioningMethods AdditionalPositioningMethods OPTIONAL} GANSSPositionMethods ::= SEQUENCE (SIZE(1..16)) OF GANSSPositionMethod GANSSPositionMethod ::= SEQUENCE { ganssId INTEGER(0..15), -- coding according to parameter definition in section 10.10 ganssSBASid BIT STRING(SIZE(3)) OPTIONAL, --coding according to parameter definition in section 10.10 gANSSPositioningMethodTypes GANSSPositioningMethodTypes, gANSSSignals GANSSSignals, ...} GANSSPositioningMethodTypes ::= SEQUENCE { setAssisted BOOLEAN, setBased BOOLEAN, autonomous BOOLEAN, ...} AdditionalPositioningMethods ::= SEQUENCE (SIZE(1..8)) OF AddPosSupport-Element AddPosSupport-Element ::= SEQUENCE { addPosID ENUMERATED { mBS, ... }, addPosMode BIT STRING { standalone (0), setBased (1), setAssisted (2)} (SIZE (1..8)) OPTIONAL, ...} Ver2-RequestedAssistData-extension ::= SEQUENCE { ganssRequestedCommonAssistanceDataList GanssRequestedCommonAssistanceDataList OPTIONAL, ganssRequestedGenericAssistanceDataList GanssRequestedGenericAssistanceDataList OPTIONAL, extendedEphemeris ExtendedEphemeris OPTIONAL, extendedEphemerisCheck ExtendedEphCheck OPTIONAL, ...} GanssRequestedCommonAssistanceDataList ::= SEQUENCE { ganssReferenceTime BOOLEAN, ganssIonosphericModel BOOLEAN, ganssAdditionalIonosphericModelForDataID00 BOOLEAN, ganssAdditionalIonosphericModelForDataID11 BOOLEAN, ganssEarthOrientationParameters BOOLEAN, ..., ganssAdditionalIonosphericModelForDataID01 BOOLEAN OPTIONAL} GanssRequestedGenericAssistanceDataList ::= SEQUENCE(SIZE(1..maxGANSS)) OF GanssReqGenericData GanssReqGenericData ::= SEQUENCE { ganssId INTEGER(0..15), -- coding according to parameter definition in section 10.10 ganssSBASid BIT STRING(SIZE(3)) OPTIONAL, --coding according to parameter definition in section 10.10 ganssRealTimeIntegrity BOOLEAN, ganssDifferentialCorrection DGANSS-Sig-Id-Req OPTIONAL, ganssAlmanac BOOLEAN, ganssNavigationModelData GanssNavigationModelData OPTIONAL, ganssTimeModels BIT STRING(SIZE(16)) OPTIONAL, ganssReferenceMeasurementInfo BOOLEAN, ganssDataBits GanssDataBits OPTIONAL, ganssUTCModel BOOLEAN, ganssAdditionalDataChoices GanssAdditionalDataChoices OPTIONAL, ganssAuxiliaryInformation BOOLEAN, ganssExtendedEphemeris ExtendedEphemeris OPTIONAL, ganssExtendedEphemerisCheck GanssExtendedEphCheck OPTIONAL, ..., bds-DifferentialCorrection BDS-Sig-Id-Req OPTIONAL, bds-GridModelReq BOOLEAN OPTIONAL} DGANSS-Sig-Id-Req ::= BIT STRING (SIZE(8)) -- coding according to parameter definition in section 10.9 BDS-Sig-Id-Req ::= BIT STRING (SIZE(8)) -- coding according to parameter definition in section 10.9 GanssNavigationModelData ::= SEQUENCE { ganssWeek INTEGER(0..4095), ganssToe INTEGER(0..167), t-toeLimit INTEGER(0..15), satellitesListRelatedDataList SatellitesListRelatedDataList OPTIONAL, ...} SatellitesListRelatedDataList ::= SEQUENCE(SIZE(0..maxGANSSSat)) OF SatellitesListRelatedData SatellitesListRelatedData ::= SEQUENCE { satId INTEGER(0..63), iod INTEGER(0..1023), ...} maxGANSS INTEGER ::= 16 maxGANSSSat INTEGER ::= 32 GanssDataBits ::= SEQUENCE { ganssTODmin INTEGER (0..59), reqDataBitAssistanceList ReqDataBitAssistanceList, ...} ReqDataBitAssistanceList ::= SEQUENCE { gnssSignals GANSSSignals, ganssDataBitInterval INTEGER (0..15), ganssDataBitSatList SEQUENCE (SIZE(1..maxGANSSSat)) OF INTEGER (0..63) OPTIONAL, ...} GanssAdditionalDataChoices ::= SEQUENCE { orbitModelID INTEGER(0..7) OPTIONAL, clockModelID INTEGER(0..7) OPTIONAL, utcModelID INTEGER(0..7) OPTIONAL, almanacModelID INTEGER(0..7) OPTIONAL, ...} ExtendedEphemeris ::= SEQUENCE { validity INTEGER (1..256), -- Requested validity in 4 hour steps ...} ExtendedEphCheck ::= SEQUENCE { beginTime GPSTime, -- Begin time of ephemeris extension held by SET endTime GPSTime, -- End time of ephemeris extension held by SET ...} GanssExtendedEphCheck ::= SEQUENCE { beginTime GANSSextEphTime, -- Begin time of ephemeris extension held by SET endTime GANSSextEphTime, -- End time of ephemeris extension held by SET ...} GPSTime ::= SEQUENCE { gPSWeek INTEGER (0..1023), gPSTOWhour INTEGER (0..167), ...} GANSSextEphTime ::= SEQUENCE { gANSSday INTEGER (0..8191), gANSSTODhour INTEGER (0..23), ...} Ver2-PosPayLoad-extension ::= SEQUENCE { lPPPayload SEQUENCE (SIZE (1..3)) OF OCTET STRING(SIZE (1..60000)) OPTIONAL, tIA801Payload SEQUENCE (SIZE(1..3)) OF OCTET STRING(SIZE (1..60000)) OPTIONAL, ...} END --ULP-Components ULP-Components DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS Version, SessionID, IPAddress, SLPAddress, LocationId, Position, StatusCode, Velocity, QoP, PosMethod, Ver, SETId, PrimaryCPICH-Info, CellParametersID, FQDN; IMPORTS Ver2-CellInfo-extension FROM Ver2-ULP-Components; -- protocol version expressed as x.y.z (e.g., 5.1.0) Version ::= SEQUENCE { maj INTEGER(0..255), min INTEGER(0..255), servind INTEGER(0..255)} SessionID ::= SEQUENCE { setSessionID SetSessionID OPTIONAL, -- the semantics of OPTIONAL applies to the encoding only. The parameter itself is MANDATORY. This is introduced only to minimize bandwidth for the SUPL INIT message. Since the setSessionID is allocated by the SET, there is no setSessionID to be transmitted in the SUPL INIT message. slpSessionID SlpSessionID OPTIONAL -- the semantics of OPTIONAL applies to the encoding only. The parameter itself is MANDATORY. This is introduced only to minimize bandwidth for the SUPL START, SUPL TRIGGERED START and SUPL SET INIT messages. Since the slpSessionID is allocated by the SLP, there is no slpSessionID to be transmitted in these messages (with the exception described in section 10.14). } SetSessionID ::= SEQUENCE {sessionId INTEGER(0..65535), setId SETId} SETId ::= CHOICE { msisdn OCTET STRING(SIZE (8)), mdn OCTET STRING(SIZE (8)), min BIT STRING(SIZE (34)), -- coded according to TIA-553 imsi OCTET STRING(SIZE (8)), nai IA5String(SIZE (1..1000)), iPAddress IPAddress, ..., imei OCTET STRING(SIZE (8))} -- msisdn, mnd, imsi and imei are a BCD (Binary Coded Decimal) string -- represent digits from 0 through 9, -- two digits per octet, each digit encoded 0000 to 1001 (0 to 9) -- bits 8765 of octet n encoding digit 2n -- bits 4321 of octet n encoding digit 2(n-1) +1 -- not used digits in the string shall be filled with 1111 SlpSessionID ::= SEQUENCE { sessionID OCTET STRING(SIZE (4)), slpId SLPAddress} IPAddress ::= CHOICE { ipv4Address OCTET STRING(SIZE (4)), ipv6Address OCTET STRING(SIZE (16))} SLPAddress ::= CHOICE { iPAddress IPAddress, fQDN FQDN, ...} FQDN ::= VisibleString(FROM ("a".."z" | "A".."Z" | "0".."9" |".-"))(SIZE (1..255)) Ver ::= BIT STRING(SIZE (64)) LocationId ::= SEQUENCE { cellInfo CellInfo, status Status, ...} Status ::= ENUMERATED {stale(0), current(1), unknown(2), ...} CellInfo ::= CHOICE { gsmCell GsmCellInformation, wcdmaCell WcdmaCellInformation, --WCDMA Cell Information/TD-SCDMA Cell Information cdmaCell CdmaCellInformation, ..., ver2-CellInfo-extension Ver2-CellInfo-extension} Position ::= SEQUENCE { timestamp UTCTime, -- shall include seconds and shall use UTC time. positionEstimate PositionEstimate, velocity Velocity OPTIONAL, ...} PositionEstimate ::= SEQUENCE { latitudeSign ENUMERATED {north, south}, latitude INTEGER(0..8388607), longitude INTEGER(-8388608..8388607), uncertainty SEQUENCE { uncertaintySemiMajor INTEGER(0..127), uncertaintySemiMinor INTEGER(0..127), orientationMajorAxis INTEGER(0..180)} OPTIONAL, -- angle in degree between major axis and North confidence INTEGER(0..100) OPTIONAL, altitudeInfo AltitudeInfo OPTIONAL, ...} -- Coding as in [3GPP GAD] AltitudeInfo ::= SEQUENCE { altitudeDirection ENUMERATED {height, depth}, altitude INTEGER(0..32767), altUncertainty INTEGER(0..127), ... } -- based on [3GPP GAD] CdmaCellInformation ::= SEQUENCE { refNID INTEGER(0..65535), -- Network Id refSID INTEGER(0..32767), -- System Id refBASEID INTEGER(0..65535), -- Base Station Id refBASELAT INTEGER(0..4194303), -- Base Station Latitude reBASELONG INTEGER(0..8388607), -- Base Station Longitude refREFPN INTEGER(0..511), -- Base Station PN Code refWeekNumber INTEGER(0..65535), -- GPS Week Number refSeconds INTEGER(0..4194303), -- GPS Seconds ...} GsmCellInformation ::= SEQUENCE { refMCC INTEGER(0..999), -- Mobile Country Code refMNC INTEGER(0..999), -- Mobile Network Code refLAC INTEGER(0..65535), -- Location area code refCI INTEGER(0..65535), -- Cell identity nMR NMR OPTIONAL, tA INTEGER(0..255) OPTIONAL, --Timing Advance ...} WcdmaCellInformation ::= SEQUENCE { refMCC INTEGER(0..999), -- Mobile Country Code refMNC INTEGER(0..999), -- Mobile Network Code refUC INTEGER(0..268435455), -- Cell identity frequencyInfo FrequencyInfo OPTIONAL, primaryScramblingCode INTEGER(0..511) OPTIONAL, -- Not applicable for TDD measuredResultsList MeasuredResultsList OPTIONAL, ..., cellParametersId INTEGER(0..127) OPTIONAL, -- Not applicable for FDD timingAdvance TimingAdvance OPTIONAL -- Not applicable for FDD } TimingAdvance ::= SEQUENCE { tA INTEGER (0..8191), tAResolution TAResolution OPTIONAL, -- If missing, resolution is 0.125 chips chipRate ChipRate OPTIONAL, -- If missing, chip rate is 1.28 Mchip/s ...} TAResolution ::= ENUMERATED {res10chip(0),res05chip(1),res0125chip(2), ...} -- Corresponding to 1.0-chip, 0.5-chip and 0.125-chip resolutions, respectively ChipRate ::= ENUMERATED {tdd128(0),tdd384(1), tdd768(2), ...} -- Corresponding to 1.28-Mchips/s, 3.84-Mchips/s and 7.68-Mchips/s chip rates, respectively FrequencyInfo ::= SEQUENCE { modeSpecificInfo CHOICE { fdd FrequencyInfoFDD, tdd FrequencyInfoTDD, ...}, ...} FrequencyInfoFDD ::= SEQUENCE { uarfcn-UL UARFCN OPTIONAL, uarfcn-DL UARFCN, ...} FrequencyInfoTDD ::= SEQUENCE {uarfcn-Nt UARFCN, ...} UARFCN ::= INTEGER(0..16383) NMR ::= SEQUENCE (SIZE (1..15)) OF NMRelement NMRelement ::= SEQUENCE { aRFCN INTEGER(0..1023), bSIC INTEGER(0..63), rxLev INTEGER(0..63), ...} MeasuredResultsList ::= SEQUENCE (SIZE (1..maxFreq)) OF MeasuredResults MeasuredResults ::= SEQUENCE { frequencyInfo FrequencyInfo OPTIONAL, utra-CarrierRSSI UTRA-CarrierRSSI OPTIONAL, cellMeasuredResultsList CellMeasuredResultsList OPTIONAL} CellMeasuredResultsList ::= SEQUENCE (SIZE (1..maxCellMeas)) OF CellMeasuredResults -- SPARE: UTRA-CarrierRSSI, Max = 76 -- Values above Max are spare UTRA-CarrierRSSI ::= INTEGER(0..127) CellMeasuredResults ::= SEQUENCE { cellIdentity INTEGER(0..268435455) OPTIONAL, modeSpecificInfo CHOICE { fdd SEQUENCE { primaryCPICH-Info PrimaryCPICH-Info, cpich-Ec-N0 CPICH-Ec-N0 OPTIONAL, cpich-RSCP CPICH-RSCP OPTIONAL, pathloss Pathloss OPTIONAL}, tdd SEQUENCE { cellParametersID CellParametersID, proposedTGSN TGSN OPTIONAL, primaryCCPCH-RSCP PrimaryCCPCH-RSCP OPTIONAL, pathloss Pathloss OPTIONAL, timeslotISCP-List TimeslotISCP-List OPTIONAL} -- NOTE: TimeSlotISCP measurement list cannot be interpreted without the knowledge of Cell Info as defined in [3GPP RRC] } } CellParametersID ::= INTEGER(0..127) TGSN ::= INTEGER(0..14) PrimaryCCPCH-RSCP ::= INTEGER(0..127) -- SPARE: TimeslotISCP, Max = 91 -- Values above Max are spare TimeslotISCP ::= INTEGER(0..127) TimeslotISCP-List ::= SEQUENCE (SIZE (1..maxTS)) OF TimeslotISCP PrimaryCPICH-Info ::= SEQUENCE {primaryScramblingCode INTEGER(0..511)} -- SPARE: CPICH-Ec-No, Max = 49 -- Values above Max are spare CPICH-Ec-N0 ::= INTEGER(0..63) -- SPARE: CPICH- RSCP, data range from 0 to 91 and from 123 to 127. -- Values from 92 to 122 are spare -- the encoding of cpich-RSCP is (as per [3GPP RRC] V5.11.0) -- cpich-RSCP = 123 CPICH RSCP <-120 dBm -- cpich-RSCP = 124 -120 鈮� CPICH RSCP < -119 dBm -- cpich-RSCP = 125 -119 鈮� CPICH RSCP < -118 dBm -- cpich-RSCP = 126 -118 鈮� CPICH RSCP < -117 dBm -- cpich-RSCP = 127 -117 鈮� CPICH RSCP < -116 dBm -- cpich-RSCP = 0 -116 鈮� CPICH RSCP < -115 dBm -- cpich-RSCP = 1 -115 鈮� CPICH RSCP < -114 dBm -- -- cpich-RSCP = 89 -27 鈮� CPICH RSCP < -26 dBm -- cpich-RSCP = 90 -26 鈮� CPICH RSCP < -25 dBm -- cpich-RSCP = 91 -25 鈮� CPICH RSCP dBm CPICH-RSCP ::= INTEGER(0..127) -- SPARE: Pathloss, Max = 158 -- Values above Max are spare Pathloss ::= INTEGER(46..173) maxCellMeas INTEGER ::= 32 maxFreq INTEGER ::= 8 maxTS INTEGER ::= 14 StatusCode ::= ENUMERATED { unspecified(0), systemFailure(1), unexpectedMessage(2), protocolError(3), dataMissing(4), unexpectedDataValue(5), posMethodFailure(6), posMethodMismatch(7), posProtocolMismatch(8), targetSETnotReachable(9), versionNotSupported(10), resourceShortage(11), invalidSessionId(12), nonProxyModeNotSupported(13), proxyModeNotSupported(14), positioningNotPermitted(15), authNetFailure(16), authSuplinitFailure(17), consentDeniedByUser(100), consentGrantedByUser(101), ..., ver2-incompatibleProtectionLevel(18), ver2-serviceNotSupported(19), ver2-insufficientInterval(20), ver2-noSUPLCoverage(21), ver2-sessionStopped(102), ver2-appIdDenied(103)} QoP ::= SEQUENCE { horacc INTEGER(0..127), veracc INTEGER(0..127) OPTIONAL, -- as defined in [3GPP GAD] "uncertainty altitude" maxLocAge INTEGER(0..65535) OPTIONAL, delay INTEGER(0..7) OPTIONAL, -- as defined in [3GPP RRLP] ...} Velocity ::= CHOICE { -- velocity definition as per [3GPP GAD] horvel Horvel, horandvervel Horandvervel, horveluncert Horveluncert, horandveruncert Horandveruncert, ...} Horvel ::= SEQUENCE { bearing BIT STRING(SIZE (9)), horspeed BIT STRING(SIZE (16)), ...} Horandvervel ::= SEQUENCE { verdirect BIT STRING(SIZE (1)), bearing BIT STRING(SIZE (9)), horspeed BIT STRING(SIZE (16)), verspeed BIT STRING(SIZE (8)), ...} Horveluncert ::= SEQUENCE { bearing BIT STRING(SIZE (9)), horspeed BIT STRING(SIZE (16)), uncertspeed BIT STRING(SIZE (8)), ...} Horandveruncert ::= SEQUENCE { verdirect BIT STRING(SIZE (1)), bearing BIT STRING(SIZE (9)), horspeed BIT STRING(SIZE (16)), verspeed BIT STRING(SIZE (8)), horuncertspeed BIT STRING(SIZE (8)), veruncertspeed BIT STRING(SIZE (8)), ...} PosMethod ::= ENUMERATED { agpsSETassisted(0), agpsSETbased(1), agpsSETassistedpref(2), agpsSETbasedpref(3), autonomousGPS(4), aFLT(5), eCID(6), eOTD(7), oTDOA(8), noPosition(9), ..., ver2-historicalDataRetrieval(10), ver2-agnssSETassisted(11), ver2-agnssSETbased(12), ver2-agnssSETassistedpref(13), ver2-agnssSETbasedpref(14), ver2-autonomousGNSS(15), ver2-sessioninfoquery(16), ver2-mbs(17)} END --Ver2-ULP-Components Ver2-ULP-Components DEFINITIONS AUTOMATIC TAGS ::= BEGIN EXPORTS Ver2-CellInfo-extension, MultipleLocationIds, SupportedNetworkInformation, CauseCode,UTRAN-GPSReferenceTimeAssistance, UTRAN-GPSReferenceTimeResult, SPCSETKey, SPCTID, SPCSETKeylifetime, UTRAN-GANSSReferenceTimeAssistance, UTRAN-GANSSReferenceTimeResult, GNSSPosTechnology, GANSSSignals, ThirdParty, ApplicationID, ReportingCap, Coordinate, CircularArea, EllipticalArea, PolygonArea; IMPORTS LocationId, PrimaryCPICH-Info, CellParametersID, FQDN FROM ULP-Components; MultipleLocationIds ::= SEQUENCE SIZE (1..maxLidSize) OF LocationIdData LocationIdData ::= SEQUENCE { locationId LocationId, relativetimestamp RelativeTime OPTIONAL, -- if relativetimestamp is present, then data represents historical measurement, if absent, data represents current measurements servingFlag BOOLEAN, -- if "true" measurements represent serving cell ...} RelativeTime ::= INTEGER (0..65535) -- relative time to "current" Location Id in multiples of 0.01sec maxLidSize INTEGER ::= 64 SupportedNetworkInformation ::= SEQUENCE { wLAN BOOLEAN, supportedWLANInfo SupportedWLANInfo OPTIONAL, supportedWLANApsList SupportedWLANApsList OPTIONAL, gSM BOOLEAN, wCDMA BOOLEAN, supportedWCDMAInfo SupportedWCDMAInfo OPTIONAL, cDMA BOOLEAN, hRDP BOOLEAN, uMB BOOLEAN, lTE BOOLEAN, wIMAX BOOLEAN, historic BOOLEAN, nonServing BOOLEAN, uTRANGPSReferenceTime BOOLEAN, uTRANGANSSReferenceTime BOOLEAN, ...} SupportedWLANInfo ::= SEQUENCE { apTP BOOLEAN, -- AP transmit power apAG BOOLEAN, -- AP antenna gain apSN BOOLEAN, -- AP S/N received at SET apDevType BOOLEAN, -- Device type apRSSI BOOLEAN, -- AP signal strength at SET apChanFreq BOOLEAN, -- AP channel/frequency of Tx/Rx apRTD BOOLEAN, -- Round Trip Delay between SET and AP setTP BOOLEAN, -- SET transmit power setAG BOOLEAN, -- SET antenna gain setSN BOOLEAN, -- SET S/N received at AP setRSSI BOOLEAN, -- SET signal strength at AP apRepLoc BOOLEAN, -- AP Location as reported by AP ... } maxWLANApDataSize INTEGER ::= 128 SupportedWLANApsList ::= SEQUENCE { supportedWLANApDataList SEQUENCE (SIZE (1..maxWLANApDataSize)) OF SupportedWLANApData, supportedWLANapsChannel11a SupportedWLANApsChannel11a OPTIONAL, supportedWLANapsChannel11bg SupportedWLANApsChannel11bg OPTIONAL, ... } SupportedWLANApsChannel11a ::= SEQUENCE { ch34 BOOLEAN, ch36 BOOLEAN, ch38 BOOLEAN, ch40 BOOLEAN, ch42 BOOLEAN, ch44 BOOLEAN, ch46 BOOLEAN, ch48 BOOLEAN, ch52 BOOLEAN, ch56 BOOLEAN, ch60 BOOLEAN, ch64 BOOLEAN, ch149 BOOLEAN, ch153 BOOLEAN, ch157 BOOLEAN, ch161 BOOLEAN } SupportedWLANApsChannel11bg ::= SEQUENCE { ch1 BOOLEAN, ch2 BOOLEAN, ch3 BOOLEAN, ch4 BOOLEAN, ch5 BOOLEAN, ch6 BOOLEAN, ch7 BOOLEAN, ch8 BOOLEAN, ch9 BOOLEAN, ch10 BOOLEAN, ch11 BOOLEAN, ch12 BOOLEAN, ch13 BOOLEAN, ch14 BOOLEAN } SupportedWLANApData ::= SEQUENCE { apMACAddress BIT STRING (SIZE (48)), apDevType ENUMERATED {wlan802-11a(0), wlan802-11b(1), wlan802-11g(2), ...}, ...} SupportedWCDMAInfo ::= SEQUENCE { mRL BOOLEAN, -- Measured Results List ...} Ver2-CellInfo-extension ::= CHOICE { hrpdCell HrpdCellInformation, umbCell UmbCellInformation, lteCell LteCellInformation, wlanAP WlanAPInformation, wimaxBS WimaxBSInformation, ...} HrpdCellInformation ::= SEQUENCE { refSECTORID BIT STRING(SIZE (128)) OPTIONAL, -- HRPD Sector Id refBASELAT INTEGER(0..4194303), -- Base Station Latitude reBASELONG INTEGER(0..8388607), -- Base Station Longitude refWeekNumber INTEGER(0..65535), -- GPS Week Number refSeconds INTEGER(0..4194303), -- GPS Seconds ...} UmbCellInformation ::= SEQUENCE { refSECTORID BIT STRING(SIZE (128)), -- UMB Sector Id refMCC INTEGER(0..999), -- Mobile Country Code refMNC INTEGER(0..999), -- Mobile Network Code refBASELAT INTEGER(0..4194303), -- Base Station Latitude reBASELONG INTEGER(0..8388607), -- Base Station Longitude refWeekNumber INTEGER(0..65535), -- GPS Week Number refSeconds INTEGER(0..4194303), -- GPS Seconds ...} -- LTE Cell info per 3GPP TS 36.331. -- If not otherwise stated info is related to serving cell LteCellInformation ::= SEQUENCE { cellGlobalIdEUTRA CellGlobalIdEUTRA, physCellId PhysCellId, trackingAreaCode TrackingAreaCode, rsrpResult RSRP-Range OPTIONAL, rsrqResult RSRQ-Range OPTIONAL, tA INTEGER(0..1282) OPTIONAL, -- Currently used Timing Advance value (N_TA/16 as per [3GPP TS 36.213]). measResultListEUTRA MeasResultListEUTRA OPTIONAL, --Neighbour measurements ..., earfcn INTEGER(0..65535) OPTIONAL, -- see Table 37 earfcn-ext INTEGER (65536..262143) OPTIONAL -- see Table 37 } -- Measured results of neighbours cells per 3GPP TS 36.331 MeasResultListEUTRA ::= SEQUENCE (SIZE (1..maxCellReport)) OF MeasResultEUTRA MeasResultEUTRA ::= SEQUENCE { physCellId PhysCellId, cgi-Info SEQUENCE { cellGlobalId CellGlobalIdEUTRA, trackingAreaCode TrackingAreaCode } OPTIONAL, measResult SEQUENCE { rsrpResult RSRP-Range OPTIONAL, -- Mapping to measured values rsrqResult RSRQ-Range OPTIONAL, -- in 3GPP TS 36.133 ..., earfcn INTEGER(0..65535) OPTIONAL, -- see Table 37 earfcn-ext INTEGER (65536..262143) OPTIONAL -- see Table 37 } } PhysCellId ::= INTEGER (0..503) TrackingAreaCode ::= BIT STRING (SIZE (16)) CellGlobalIdEUTRA ::= SEQUENCE { plmn-Identity PLMN-Identity, cellIdentity CellIdentity, ... } PLMN-Identity ::= SEQUENCE { mcc MCC OPTIONAL, mnc MNC } CellIdentity ::= BIT STRING (SIZE (28)) MCC ::= SEQUENCE (SIZE (3)) OF MCC-MNC-Digit MNC ::= SEQUENCE (SIZE (2..3)) OF MCC-MNC-Digit MCC-MNC-Digit ::= INTEGER (0..9) RSRP-Range ::= INTEGER(0..97) RSRQ-Range ::= INTEGER(0..34) maxCellReport INTEGER ::= 8 WlanAPInformation ::= SEQUENCE { -- as per [IEEE 802.11] apMACAddress BIT STRING(SIZE (48)), -- AP MAC Address apTransmitPower INTEGER(-127..128) OPTIONAL, -- AP transmit power in dbm apAntennaGain INTEGER(-127..128) OPTIONAL, -- AP antenna gain in dBi apSignaltoNoise INTEGER(-127..128) OPTIONAL, -- AP S/N received at SET apDeviceType ENUMERATED {wlan802-11a(0), wlan802-11b(1), wlan802-11g(2), ..., wlan802-11n(3), wlan802-11ac(4), wlan802-11ad(5)} OPTIONAL, apSignalStrength INTEGER(-127..128) OPTIONAL, -- AP signal strength at SET apChannelFrequency INTEGER(0..256) OPTIONAL, -- AP channel/frequency of Tx/Rx apRoundTripDelay RTD OPTIONAL, -- Round Trip Delay between SET and AP setTransmitPower INTEGER(-127..128) OPTIONAL, -- SET transmit power in dBm setAntennaGain INTEGER (-127..128) OPTIONAL, -- SET antenna gain in dBi setSignaltoNoise INTEGER (-127..128) OPTIONAL, -- SET S/N received at AP setSignalStrength INTEGER(-127..128) OPTIONAL, -- SET signal strength at AP apReportedLocation ReportedLocation OPTIONAL, -- AP Location reported by AP (legacy encoding) ..., apRepLocation RepLocation OPTIONAL, -- AP Location reported by AP apSignalStrengthDelta INTEGER (0..1) OPTIONAL, -- see Table 41 apSignaltoNoiseDelta INTEGER (0..1) OPTIONAL, -- see Table 41 setSignalStrengthDelta INTEGER (0..1) OPTIONAL, -- see Table 41 setSignaltoNoiseDelta INTEGER (0..1) OPTIONAL, -- see Table 41 operatingClass INTEGER (0..255) OPTIONAL, apSSID OCTET STRING (SIZE (1..32)) OPTIONAL, apPHYType ENUMERATED {unknown(0), any(1), fhss(2), dsss(3), irbaseband(4), ofdm(5), hrdsss(6), erp(7), ht(8), ihv(9), ...} OPTIONAL, setMACAddress BIT STRING(SIZE (48)) OPTIONAL -- MAC Address used by SET to connect to AP } RTD ::= SEQUENCE { -- as per [IEEE 802.11] rTDValue INTEGER(0..16777216), -- measured RTD value corresponding to -- about 500km in units of 1/10 of nanoseconds rTDUnits RTDUnits, -- units of RTD rTDAccuracy INTEGER(0..255) OPTIONAL, -- RTD accuracy ...} RTDUnits ::= ENUMERATED {microseconds(0), hundredsofnanoseconds(1), tensofnanoseconds(2), nanoseconds(3), tenthsofnanoseconds(4), ...} ReportedLocation ::= SEQUENCE { -- as per [IEEE 802.11v] locationEncodingDescriptor LocationEncodingDescriptor, locationData LocationData, -- location data field ...} LocationEncodingDescriptor ::= ENUMERATED {lCI(0), aSN1(1), ...} LocationData ::= SEQUENCE { locationAccuracy INTEGER(0..4294967295) OPTIONAL, locationValue OCTET STRING (SIZE(1..128)), ...} RepLocation ::= CHOICE { lciLocData LciLocData, -- location data field as per [IEEE 802.11] and [RFC 3825] ... -- future formats may be added here } LciLocData ::= SEQUENCE { locationDataLCI LocationDataLCI OPTIONAL, ...} LocationDataLCI ::= SEQUENCE { latitudeResolution BIT STRING (SIZE (6)), latitude BIT STRING (SIZE (34)), longitudeResolution BIT STRING (SIZE (6)), longitude BIT STRING (SIZE (34)), altitudeType BIT STRING (SIZE (4)), altitudeResolution BIT STRING (SIZE (6)), altitude BIT STRING (SIZE (30)), datum BIT STRING (SIZE (8)), ...} WimaxBSInformation ::= SEQUENCE { wimaxBsID WimaxBsID, -- WiMax serving base station ID wimaxRTD WimaxRTD OPTIONAL, -- Round Trip Delay measurements wimaxNMRList WimaxNMRList OPTIONAL, -- Network measurements ...} WimaxBsID ::= SEQUENCE { bsID-MSB BIT STRING (SIZE(24)) OPTIONAL, bsID-LSB BIT STRING (SIZE(24)), ...} -- if only LSB is present, MSB is assumed to be identical to the current serving BS or clamped on network value WimaxRTD ::= SEQUENCE { rTD INTEGER (0..65535), -- Round trip delay of serving BS in units of 10 ns rTDstd INTEGER (0..1023) OPTIONAL, -- Standard deviation of round trip delay in units of 10 ns ...} WimaxNMRList ::= SEQUENCE (SIZE (1..maxWimaxBSMeas)) OF WimaxNMR WimaxNMR ::= SEQUENCE { wimaxBsID WimaxBsID, -- WiMax BS ID for the measurement relDelay INTEGER (-32768..32767) OPTIONAL, -- Relative delay for this neighbouring BSs to the serving cell in units of 10 ns relDelaystd INTEGER (0..1023) OPTIONAL, -- Standard deviation of Relative delay in units of 10 ns rSSI INTEGER (0..255) OPTIONAL, -- RSSI in 0.25 dBm steps, starting from -103.75 dBm rSSIstd INTEGER (0..63) OPTIONAL, -- Standard deviation of RSSI in dB bSTxPower INTEGER (0..255) OPTIONAL, -- BS transmit power in 0.25 dBm steps, starting from -103.75 dBm cINR INTEGER (0..255) OPTIONAL, -- in dB cINRstd INTEGER (0..63) OPTIONAL, -- Standard deviation of CINR in dB bSLocation ReportedLocation OPTIONAL, -- Reported location of the BS ...} maxWimaxBSMeas INTEGER ::= 32 UTRAN-GPSReferenceTimeAssistance ::= SEQUENCE { utran-GPSReferenceTime UTRAN-GPSReferenceTime, gpsReferenceTimeUncertainty INTEGER (0..127) OPTIONAL, utranGPSDriftRate UTRANGPSDriftRate OPTIONAL} UTRAN-GPSReferenceTime ::= SEQUENCE { -- For utran-GPSTimingOfCell values above 2322431999999 are not used in this version of the specification. Actual value utran-GPSTimingOfCell = (ms-part * 4294967296) + ls-part used on the downlink i.e. sent from the SLP to the SET utran-GPSTimingOfCell SEQUENCE { ms-part INTEGER (0..1023), ls-part INTEGER (0..4294967295)}, modeSpecificInfo CHOICE { fdd SEQUENCE {referenceIdentity PrimaryCPICH-Info}, tdd SEQUENCE {referenceIdentity CellParametersID} } OPTIONAL, sfn INTEGER (0..4095)} UTRANGPSDriftRate ::= ENUMERATED { utran-GPSDrift0, utran-GPSDrift1, utran-GPSDrift2, utran-GPSDrift5, utran-GPSDrift10, utran-GPSDrift15, utran-GPSDrift25, utran-GPSDrift50, utran-GPSDrift-1, utran-GPSDrift-2, utran-GPSDrift-5, utran-GPSDrift-10, utran-GPSDrift-15, utran-GPSDrift-25, utran-GPSDrift-50} UTRAN-GPSReferenceTimeResult ::= SEQUENCE { -- For ue-GPSTimingOfCell values above 37158911999999 are not used in this version of the specification. Actual value utran-GPSTimingOfCell = (ms-part * 4294967296) + ls-part used on the uplink i.e. reported by the SET to the SLP set-GPSTimingOfCell SEQUENCE { ms-part INTEGER (0.. 16383), ls-part INTEGER (0..4294967295)}, modeSpecificInfo CHOICE { fdd SEQUENCE {referenceIdentity PrimaryCPICH-Info}, tdd SEQUENCE {referenceIdentity CellParametersID} } OPTIONAL, sfn INTEGER (0..4095), gpsReferenceTimeUncertainty INTEGER (0..127) OPTIONAL, ...} UTRAN-GANSSReferenceTimeAssistance ::= SEQUENCE { ganssDay INTEGER (0..8191) OPTIONAL, ganssTimeID INTEGER (0..15), utran-GANSSReferenceTime UTRAN-GANSSReferenceTime, utranGANSSDriftRate UTRANGANSSDriftRate OPTIONAL} UTRAN-GANSSReferenceTime ::= SEQUENCE { ganssTOD INTEGER (0..86399), utran-GANSSTimingOfCell INTEGER (0..3999999)OPTIONAL, modeSpecificInfo CHOICE { fdd SEQUENCE { referenceIdentity PrimaryCPICH-Info}, tdd SEQUENCE { referenceIdentity CellParametersID} } OPTIONAL, sfn INTEGER (0..4095), ganss-TODUncertainty INTEGER (0..127) OPTIONAL, ...} UTRANGANSSDriftRate ::= ENUMERATED { utran-GANSSDrift0, utran-GANSSDrift1, utran-GANSSDrift2, utran-GANSSDrift5, utran-GANSSDrift10, utran-GANSSDrift15, utran-GANSSDrift25, utran-GANSSDrift50, utran-GANSSDrift-1, utran-GANSSDrift-2, utran-GANSSDrift-5, utran-GANSSDrift-10, utran-GANSSDrift-15, utran-GANSSDrift-25, utran-GANSSDrift-50} UTRAN-GANSSReferenceTimeResult ::= SEQUENCE { ganssTimeID INTEGER (0..15), set-GANSSReferenceTime SET-GANSSReferenceTime, ...} SET-GANSSReferenceTime ::= SEQUENCE { -- Actual value [ns] = (ms-Part * 4294967296 + ls-Part) * 250 -- Actual values [ns] > 86399999999750 are reserved and are considered a -- protocol error set-GANSSTimingOfCell SEQUENCE { ms-part INTEGER (0..80), ls-part INTEGER (0..4294967295)} OPTIONAL, modeSpecificInfo CHOICE { fdd SEQUENCE {referenceIdentity PrimaryCPICH-Info}, tdd SEQUENCE {referenceIdentity CellParametersID} } OPTIONAL, sfn INTEGER (0..4095), ganss-TODUncertainty INTEGER (0..127) OPTIONAL, ...} GNSSPosTechnology ::= SEQUENCE { gps BOOLEAN, galileo BOOLEAN, sbas BOOLEAN, modernized-gps BOOLEAN, qzss BOOLEAN, glonass BOOLEAN, ..., bds BOOLEAN OPTIONAL} -- indicates MS support for particular GANSS signals and frequencies coding according to parameter definition in section 10.9 GANSSSignals ::= BIT STRING { signal1 (0), signal2 (1), signal3 (2), signal4 (3), signal5 (4), signal6 (5), signal7 (6), signal8 (7)} (SIZE (1..8)) SPCSETKey ::= BIT STRING(SIZE (128)) SPCTID ::= SEQUENCE { rAND BIT STRING(SIZE (128)), slpFQDN FQDN, ...} SPCSETKeylifetime ::= INTEGER (1..24) -- units in hours CauseCode ::= ENUMERATED {servingNetWorkNotInAreaIdList(0), sETCapabilitiesChanged(1), noSUPLCoverage(2), ...} ThirdParty ::= SEQUENCE (SIZE (1..64)) OF ThirdPartyID ThirdPartyID ::= CHOICE { logicalName IA5String(SIZE (1..1000)), msisdn OCTET STRING(SIZE (8)), emailaddr IA5String(SIZE (1..1000)), sip-uri VisibleString(FROM ("a".."z" | "A".."Z" | "0".."9" | ":./-_~%#@?")) (SIZE (1..255)), ims-public-identity VisibleString(FROM ("a".."z" | "A".."Z" | "0".."9" | ":./-_~%#@?")) (SIZE (1..255)), min BIT STRING(SIZE (34)), -- coded according to TIA-553 mdn OCTET STRING(SIZE (8)), uri VisibleString(FROM ("a".."z" | "A".."Z" | "0".."9" | "./-_~%#")) (SIZE (1..255)), ...} ApplicationID ::= SEQUENCE { appProvider IA5String(SIZE (1..24)), -- The application provider appName IA5String(SIZE (1..32)), -- The application name appVersion IA5String(SIZE (1..8)) OPTIONAL, -- The application version ...} ReportingCap ::= SEQUENCE { minInt INTEGER (1..3600), -- units in seconds maxInt INTEGER (1..1440) OPTIONAL, -- units in minutes repMode RepMode, batchRepCap BatchRepCap OPTIONAL, -- only used for batch and quasi real time reporting ...} RepMode ::= SEQUENCE { realtime BOOLEAN, quasirealtime BOOLEAN, batch BOOLEAN, ...} BatchRepCap ::= SEQUENCE { report-position BOOLEAN, -- set to "true" if reporting of position is supported report-measurements BOOLEAN, -- set to "true" if reporting of measurements is supported max-num-positions INTEGER (1..1024) OPTIONAL, max-num-measurements INTEGER (1..1024) OPTIONAL, ...} Coordinate::= SEQUENCE { latitudeSign ENUMERATED {north(0), south(1)}, latitude INTEGER(0..8388607), longitude INTEGER(-8388608..8388607)} -- Coding as in [3GPP GAD] CircularArea ::= SEQUENCE { coordinate Coordinate, radius INTEGER(1..1000000), -- radius in meters radius-min INTEGER(1..1000000) OPTIONAL, -- hysteresis minimum radius radius-max INTEGER(1..1500000) OPTIONAL} -- hysteresis maximum radius EllipticalArea ::= SEQUENCE { coordinate Coordinate, semiMajor INTEGER(1..1000000), -- units in meters semiMajor-min INTEGER(1..1000000) OPTIONAL, -- hysteresis minimum semiMajor semiMajor-max INTEGER(1..1500000) OPTIONAL, -- hysteresis maximum semiMajor semiMinor INTEGER(1..1000000), -- units in meters semiMinor-min INTEGER(1..1000000) OPTIONAL, -- hysteresis minimum semiMinor semiMinor-max INTEGER(1..1500000) OPTIONAL, -- hysteresis maximum semiMinor angle INTEGER(0.. 179)} -- units in degrees. The angle is defined as the angle between the semi-major axis and North, increasing in a clockwise direction. An angle of 0 represents an ellipse with the semi-major axis pointing North/South while an angle of 90 represents an ellipse with the semi-major axis pointing East/West. PolygonArea ::= SEQUENCE { polygonDescription PolygonDescription, polygonHysteresis INTEGER(1..100000) OPTIONAL} -- units in meters PolygonDescription ::= SEQUENCE (SIZE (3..15)) OF Coordinate END asn1tools-0.169.0/tests/files/oma/ulp.py000066400000000000000000011033401524544274600200230ustar00rootroot00000000000000EXPECTED = {'SUPL-AUTH-REQ': {'extensibility-implied': False, 'imports': {'SUPL-START': ['SETCapabilities'], 'ULP-Components': ['Ver']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'SUPLAUTHREQ': {'members': [{'name': 'ver', 'optional': True, 'type': 'Ver'}, {'name': 'sETCapabilities', 'optional': True, 'type': 'SETCapabilities'}, None], 'type': 'SEQUENCE'}}, 'values': {}}, 'SUPL-AUTH-RESP': {'extensibility-implied': False, 'imports': {'Ver2-ULP-Components': ['SPCSETKey', 'SPCSETKeylifetime', 'SPCTID']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'SUPLAUTHRESP': {'members': [{'name': 'sPCSETKey', 'type': 'SPCSETKey'}, {'name': 'sPCTID', 'type': 'SPCTID'}, {'name': 'sPCSETKeylifetime', 'optional': True, 'type': 'SPCSETKeylifetime'}, None], 'type': 'SEQUENCE'}}, 'values': {}}, 'SUPL-END': {'extensibility-implied': False, 'imports': {'ULP-Components': ['Position', 'StatusCode', 'Ver'], 'ULP-Version-2-message-extensions': ['Ver2-SUPL-END-extension']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'SUPLEND': {'members': [{'name': 'position', 'optional': True, 'type': 'Position'}, {'name': 'statusCode', 'optional': True, 'type': 'StatusCode'}, {'name': 'ver', 'optional': True, 'type': 'Ver'}, None, {'name': 'ver2-SUPL-END-extension', 'optional': True, 'type': 'Ver2-SUPL-END-extension'}], 'type': 'SEQUENCE'}}, 'values': {}}, 'SUPL-INIT': {'extensibility-implied': False, 'imports': {'ULP-Components': ['PosMethod', 'QoP', 'SLPAddress'], 'ULP-Version-2-message-extensions': ['Ver2-SUPL-INIT-extension'], 'ULP-Version-2-parameter-extensions': ['Ver2-Notification-extension']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'EncodingType': {'type': 'ENUMERATED', 'values': [('ucs2', 0), ('gsmDefault', 1), ('utf8', 2), None]}, 'FormatIndicator': {'type': 'ENUMERATED', 'values': [('logicalName', 0), ('e-mailAddress', 1), ('msisdn', 2), ('url', 3), ('sipUrl', 4), ('min', 5), ('mdn', 6), ('iMSPublicidentity', 7), None]}, 'KeyIdentity': {'size': [128], 'type': 'BIT STRING'}, 'MAC': {'size': [64], 'type': 'BIT STRING'}, 'Notification': {'members': [{'name': 'notificationType', 'type': 'NotificationType'}, {'name': 'encodingType', 'optional': True, 'type': 'EncodingType'}, {'name': 'requestorId', 'optional': True, 'size': [(1, 'maxReqLength')], 'type': 'OCTET STRING'}, {'name': 'requestorIdType', 'optional': True, 'type': 'FormatIndicator'}, {'name': 'clientName', 'optional': True, 'size': [(1, 'maxClientLength')], 'type': 'OCTET STRING'}, {'name': 'clientNameType', 'optional': True, 'type': 'FormatIndicator'}, None, {'name': 'ver2-Notification-extension', 'optional': True, 'type': 'Ver2-Notification-extension'}], 'type': 'SEQUENCE'}, 'NotificationType': {'type': 'ENUMERATED', 'values': [('noNotificationNoVerification', 0), ('notificationOnly', 1), ('notificationAndVerficationAllowedNA', 2), ('notificationAndVerficationDeniedNA', 3), ('privacyOverride', 4), None]}, 'SLPMode': {'type': 'ENUMERATED', 'values': [('proxy', 0), ('nonProxy', 1)]}, 'SUPLINIT': {'members': [{'name': 'posMethod', 'type': 'PosMethod'}, {'name': 'notification', 'optional': True, 'type': 'Notification'}, {'name': 'sLPAddress', 'optional': True, 'type': 'SLPAddress'}, {'name': 'qoP', 'optional': True, 'type': 'QoP'}, {'name': 'sLPMode', 'type': 'SLPMode'}, {'name': 'mAC', 'optional': True, 'type': 'MAC'}, {'name': 'keyIdentity', 'optional': True, 'type': 'KeyIdentity'}, None, {'name': 'ver2-SUPL-INIT-extension', 'optional': True, 'type': 'Ver2-SUPL-INIT-extension'}], 'type': 'SEQUENCE'}}, 'values': {'maxClientLength': {'type': 'INTEGER', 'value': 50}, 'maxReqLength': {'type': 'INTEGER', 'value': 50}}}, 'SUPL-NOTIFY': {'extensibility-implied': False, 'imports': {'SUPL-INIT': ['Notification']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'Ver2-SUPLNOTIFY': {'members': [{'name': 'notification', 'type': 'Notification'}, None], 'type': 'SEQUENCE'}}, 'values': {}}, 'SUPL-NOTIFY-RESPONSE': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'NotificationResponse': {'type': 'ENUMERATED', 'values': [('allowed', 0), ('notAllowed', 1), None]}, 'Ver2-SUPLNOTIFYRESPONSE': {'members': [{'name': 'notificationResponse', 'optional': True, 'type': 'NotificationResponse'}, None], 'type': 'SEQUENCE'}}, 'values': {}}, 'SUPL-POS': {'extensibility-implied': False, 'imports': {'ULP-Components': ['Velocity'], 'ULP-Version-2-message-extensions': ['Ver2-SUPL-POS-extension'], 'ULP-Version-2-parameter-extensions': ['Ver2-PosPayLoad-extension']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'PosPayLoad': {'members': [{'name': 'tia801payload', 'size': [(1, 8192)], 'type': 'OCTET STRING'}, {'name': 'rrcPayload', 'size': [(1, 8192)], 'type': 'OCTET STRING'}, {'name': 'rrlpPayload', 'size': [(1, 8192)], 'type': 'OCTET STRING'}, None, {'name': 'ver2-PosPayLoad-extension', 'type': 'Ver2-PosPayLoad-extension'}], 'type': 'CHOICE'}, 'SUPLPOS': {'members': [{'name': 'posPayLoad', 'type': 'PosPayLoad'}, {'name': 'velocity', 'optional': True, 'type': 'Velocity'}, None, {'name': 'ver2-SUPL-POS-extension', 'optional': True, 'type': 'Ver2-SUPL-POS-extension'}], 'type': 'SEQUENCE'}}, 'values': {}}, 'SUPL-POS-INIT': {'extensibility-implied': False, 'imports': {'SUPL-POS': ['SUPLPOS'], 'SUPL-START': ['SETCapabilities'], 'ULP-Components': ['LocationId', 'Position', 'Ver'], 'ULP-Version-2-message-extensions': ['Ver2-SUPL-POS-INIT-extension'], 'ULP-Version-2-parameter-extensions': ['Ver2-RequestedAssistData-extension']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'NavigationModel': {'members': [{'name': 'gpsWeek', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'gpsToe', 'restricted-to': [(0, 167)], 'type': 'INTEGER'}, {'name': 'nSAT', 'restricted-to': [(0, 31)], 'type': 'INTEGER'}, {'name': 'toeLimit', 'restricted-to': [(0, 10)], 'type': 'INTEGER'}, {'name': 'satInfo', 'optional': True, 'type': 'SatelliteInfo'}, None], 'type': 'SEQUENCE'}, 'RequestedAssistData': {'members': [{'name': 'almanacRequested', 'type': 'BOOLEAN'}, {'name': 'utcModelRequested', 'type': 'BOOLEAN'}, {'name': 'ionosphericModelRequested', 'type': 'BOOLEAN'}, {'name': 'dgpsCorrectionsRequested', 'type': 'BOOLEAN'}, {'name': 'referenceLocationRequested', 'type': 'BOOLEAN'}, {'name': 'referenceTimeRequested', 'type': 'BOOLEAN'}, {'name': 'acquisitionAssistanceRequested', 'type': 'BOOLEAN'}, {'name': 'realTimeIntegrityRequested', 'type': 'BOOLEAN'}, {'name': 'navigationModelRequested', 'type': 'BOOLEAN'}, {'name': 'navigationModelData', 'optional': True, 'type': 'NavigationModel'}, None, {'name': 'ver2-RequestedAssistData-extension', 'optional': True, 'type': 'Ver2-RequestedAssistData-extension'}], 'type': 'SEQUENCE'}, 'SUPLPOSINIT': {'members': [{'name': 'sETCapabilities', 'type': 'SETCapabilities'}, {'name': 'requestedAssistData', 'optional': True, 'type': 'RequestedAssistData'}, {'name': 'locationId', 'type': 'LocationId'}, {'name': 'position', 'optional': True, 'type': 'Position'}, {'name': 'sUPLPOS', 'optional': True, 'type': 'SUPLPOS'}, {'name': 'ver', 'optional': True, 'type': 'Ver'}, None, {'name': 'ver2-SUPL-POS-INIT-extension', 'optional': True, 'type': 'Ver2-SUPL-POS-INIT-extension'}], 'type': 'SEQUENCE'}, 'SatelliteInfo': {'element': {'type': 'SatelliteInfoElement'}, 'size': [(1, 31)], 'type': 'SEQUENCE OF'}, 'SatelliteInfoElement': {'members': [{'name': 'satId', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'iODE', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}}, 'values': {}}, 'SUPL-REPORT': {'extensibility-implied': False, 'imports': {'SUPL-START': ['SETCapabilities'], 'ULP-Components': ['PosMethod', 'Position', 'SessionID', 'Ver'], 'ULP-Version-2-parameter-extensions': ['maxGANSS'], 'Ver2-ULP-Components': ['GANSSSignals', 'GNSSPosTechnology', 'MultipleLocationIds']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'GANSSSignalsDescription': {'members': [{'name': 'ganssId', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'gANSSSignals', 'type': 'GANSSSignals'}, None], 'type': 'SEQUENCE'}, 'GANSSsignalsInfo': {'element': {'type': 'GANSSSignalsDescription'}, 'size': [(1, 'maxGANSS')], 'type': 'SEQUENCE OF'}, 'PositionData': {'members': [{'name': 'position', 'type': 'Position'}, {'name': 'posMethod', 'optional': True, 'type': 'PosMethod'}, {'name': 'gnssPosTechnology', 'optional': True, 'type': 'GNSSPosTechnology'}, {'name': 'ganssSignalsInfo', 'optional': True, 'type': 'GANSSsignalsInfo'}, None], 'type': 'SEQUENCE'}, 'ReportData': {'members': [{'name': 'positionData', 'optional': True, 'type': 'PositionData'}, {'name': 'multipleLocationIds', 'optional': True, 'type': 'MultipleLocationIds'}, {'name': 'resultCode', 'optional': True, 'type': 'ResultCode'}, {'name': 'timestamp', 'optional': True, 'type': 'TimeStamp'}, None], 'type': 'SEQUENCE'}, 'ReportDataList': {'element': {'type': 'ReportData'}, 'size': [(1, 1024)], 'type': 'SEQUENCE OF'}, 'ResultCode': {'type': 'ENUMERATED', 'values': [('outofradiocoverage', 1), ('noposition', 2), ('nomeasurement', 3), ('nopositionnomeasurement', 4), ('outofmemory', 5), ('outofmemoryintermediatereporting', 6), ('other', 7), None]}, 'SessionInformation': {'members': [{'name': 'sessionID', 'type': 'SessionID'}, None], 'type': 'SEQUENCE'}, 'SessionList': {'element': {'type': 'SessionInformation'}, 'size': [(1, 'maxnumSessions')], 'type': 'SEQUENCE OF'}, 'TimeStamp': {'members': [{'name': 'absoluteTime', 'type': 'UTCTime'}, {'name': 'relativeTime', 'restricted-to': [(0, 31536000)], 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'Ver2-SUPLREPORT': {'members': [{'name': 'sessionList', 'optional': True, 'type': 'SessionList'}, {'name': 'sETCapabilities', 'optional': True, 'type': 'SETCapabilities'}, {'name': 'reportDataList', 'optional': True, 'type': 'ReportDataList'}, {'name': 'ver', 'optional': True, 'type': 'Ver'}, {'name': 'moreComponents', 'optional': True, 'type': 'NULL'}, None], 'type': 'SEQUENCE'}}, 'values': {'maxnumSessions': {'type': 'INTEGER', 'value': 64}}}, 'SUPL-RESPONSE': {'extensibility-implied': False, 'imports': {'ULP-Components': ['PosMethod', 'SLPAddress'], 'ULP-Version-2-message-extensions': ['Ver2-SUPL-RESPONSE-extension']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'KeyIdentity4': {'size': [128], 'type': 'BIT STRING'}, 'SETAuthKey': {'members': [{'name': 'shortKey', 'size': [128], 'type': 'BIT STRING'}, {'name': 'longKey', 'size': [256], 'type': 'BIT STRING'}, None], 'type': 'CHOICE'}, 'SUPLRESPONSE': {'members': [{'name': 'posMethod', 'type': 'PosMethod'}, {'name': 'sLPAddress', 'optional': True, 'type': 'SLPAddress'}, {'name': 'sETAuthKey', 'optional': True, 'type': 'SETAuthKey'}, {'name': 'keyIdentity4', 'optional': True, 'type': 'KeyIdentity4'}, None, {'name': 'ver2-SUPL-RESPONSE-extension', 'optional': True, 'type': 'Ver2-SUPL-RESPONSE-extension'}], 'type': 'SEQUENCE'}}, 'values': {}}, 'SUPL-SET-INIT': {'extensibility-implied': False, 'imports': {'ULP-Components': ['QoP', 'SETId'], 'Ver2-ULP-Components': ['ApplicationID']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'Ver2-SUPLSETINIT': {'members': [{'name': 'targetSETID', 'type': 'SETId'}, {'name': 'qoP', 'optional': True, 'type': 'QoP'}, {'name': 'applicationID', 'optional': True, 'type': 'ApplicationID'}], 'type': 'SEQUENCE'}}, 'values': {}}, 'SUPL-START': {'extensibility-implied': False, 'imports': {'ULP-Components': ['LocationId', 'QoP'], 'ULP-Version-2-message-extensions': ['Ver2-SUPL-START-extension'], 'ULP-Version-2-parameter-extensions': ['Ver2-PosProtocol-extension', 'Ver2-PosTechnology-extension', 'Ver2-SETCapabilities-extension']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'PosProtocol': {'members': [{'name': 'tia801', 'type': 'BOOLEAN'}, {'name': 'rrlp', 'type': 'BOOLEAN'}, {'name': 'rrc', 'type': 'BOOLEAN'}, None, {'name': 'ver2-PosProtocol-extension', 'optional': True, 'type': 'Ver2-PosProtocol-extension'}], 'type': 'SEQUENCE'}, 'PosTechnology': {'members': [{'name': 'agpsSETassisted', 'type': 'BOOLEAN'}, {'name': 'agpsSETBased', 'type': 'BOOLEAN'}, {'name': 'autonomousGPS', 'type': 'BOOLEAN'}, {'name': 'aFLT', 'type': 'BOOLEAN'}, {'name': 'eCID', 'type': 'BOOLEAN'}, {'name': 'eOTD', 'type': 'BOOLEAN'}, {'name': 'oTDOA', 'type': 'BOOLEAN'}, None, {'name': 'ver2-PosTechnology-extension', 'optional': True, 'type': 'Ver2-PosTechnology-extension'}], 'type': 'SEQUENCE'}, 'PrefMethod': {'type': 'ENUMERATED', 'values': [('agpsSETassistedPreferred', 0), ('agpsSETBasedPreferred', 1), ('noPreference', 2)]}, 'SETCapabilities': {'members': [{'name': 'posTechnology', 'type': 'PosTechnology'}, {'name': 'prefMethod', 'type': 'PrefMethod'}, {'name': 'posProtocol', 'type': 'PosProtocol'}, None, {'name': 'ver2-SETCapabilities-extension', 'optional': True, 'type': 'Ver2-SETCapabilities-extension'}], 'type': 'SEQUENCE'}, 'SUPLSTART': {'members': [{'name': 'sETCapabilities', 'type': 'SETCapabilities'}, {'name': 'locationId', 'type': 'LocationId'}, {'name': 'qoP', 'optional': True, 'type': 'QoP'}, None, {'name': 'ver2-SUPL-START-extension', 'optional': True, 'type': 'Ver2-SUPL-START-extension'}], 'type': 'SEQUENCE'}}, 'values': {}}, 'SUPL-TRIGGERED-RESPONSE': {'extensibility-implied': False, 'imports': {'SUPL-TRIGGERED-START': ['TriggerParams'], 'ULP-Components': ['PosMethod', 'SLPAddress'], 'Ver2-ULP-Components': ['GNSSPosTechnology', 'SPCSETKey', 'SPCSETKeylifetime', 'SPCTID', 'SupportedNetworkInformation']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'BatchRepConditions': {'members': [{'name': 'num-interval', 'restricted-to': [(1, 1024)], 'type': 'INTEGER'}, {'name': 'num-minutes', 'restricted-to': [(1, 2048)], 'type': 'INTEGER'}, {'name': 'endofsession', 'type': 'NULL'}, None], 'type': 'CHOICE'}, 'BatchRepType': {'members': [{'name': 'reportPosition', 'type': 'BOOLEAN'}, {'name': 'reportMeasurements', 'type': 'BOOLEAN'}, {'name': 'intermediateReports', 'type': 'BOOLEAN'}, {'name': 'discardOldest', 'optional': True, 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'RepModee': {'type': 'ENUMERATED', 'values': [('realtime', 1), ('quasirealtime', 2), ('batch', 3), None]}, 'ReportingMode': {'members': [{'name': 'repMode', 'type': 'RepModee'}, {'name': 'batchRepConditions', 'optional': True, 'type': 'BatchRepConditions'}, {'name': 'batchRepType', 'optional': True, 'type': 'BatchRepType'}, None], 'type': 'SEQUENCE'}, 'Ver2-SUPLTRIGGEREDRESPONSE': {'members': [{'name': 'posMethod', 'type': 'PosMethod'}, {'name': 'triggerParams', 'optional': True, 'type': 'TriggerParams'}, {'name': 'sLPAddress', 'optional': True, 'type': 'SLPAddress'}, {'name': 'supportedNetworkInformation', 'optional': True, 'type': 'SupportedNetworkInformation'}, {'name': 'reportingMode', 'optional': True, 'type': 'ReportingMode'}, {'name': 'sPCSETKey', 'optional': True, 'type': 'SPCSETKey'}, {'name': 'sPCTID', 'optional': True, 'type': 'SPCTID'}, {'name': 'sPCSETKeylifetime', 'optional': True, 'type': 'SPCSETKeylifetime'}, {'name': 'gnssPosTechnology', 'optional': True, 'type': 'GNSSPosTechnology'}, None], 'type': 'SEQUENCE'}}, 'values': {}}, 'SUPL-TRIGGERED-START': {'extensibility-implied': False, 'imports': {'SUPL-START': ['SETCapabilities'], 'ULP-Components': ['LocationId', 'Position', 'QoP', 'Ver'], 'Ver2-ULP-Components': ['ApplicationID', 'CauseCode', 'CircularArea', 'Coordinate', 'EllipticalArea', 'MultipleLocationIds', 'PolygonArea', 'ReportingCap', 'ThirdParty']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AreaEventParams': {'members': [{'name': 'areaEventType', 'type': 'AreaEventType'}, {'name': 'locationEstimate', 'type': 'BOOLEAN'}, {'name': 'repeatedReportingParams', 'optional': True, 'type': 'RepeatedReportingParams'}, {'name': 'startTime', 'optional': True, 'restricted-to': [(0, 2678400)], 'type': 'INTEGER'}, {'name': 'stopTime', 'optional': True, 'restricted-to': [(0, 11318399)], 'type': 'INTEGER'}, {'name': 'geographicTargetAreaList', 'optional': True, 'type': 'GeographicTargetAreaList'}, {'element': {'type': 'AreaIdList'}, 'name': 'areaIdLists', 'optional': True, 'size': [(1, 'maxAreaIdList')], 'type': 'SEQUENCE ' 'OF'}, None], 'type': 'SEQUENCE'}, 'AreaEventType': {'type': 'ENUMERATED', 'values': [('enteringArea', 0), ('insideArea', 1), ('outsideArea', 2), ('leavingArea', 3), None]}, 'AreaId': {'members': [{'name': 'gSMAreaId', 'type': 'GSMAreaId'}, {'name': 'wCDMAAreaId', 'type': 'WCDMAAreaId'}, {'name': 'cDMAAreaId', 'type': 'CDMAAreaId'}, {'name': 'hRPDAreaId', 'type': 'HRPDAreaId'}, {'name': 'uMBAreaId', 'type': 'UMBAreaId'}, {'name': 'lTEAreaId', 'type': 'LTEAreaId'}, {'name': 'wLANAreaId', 'type': 'WLANAreaId'}, {'name': 'wiMAXAreaId', 'type': 'WimaxAreaId'}, None], 'type': 'CHOICE'}, 'AreaIdList': {'members': [{'name': 'areaIdSet', 'type': 'AreaIdSet'}, {'name': 'areaIdSetType', 'optional': True, 'type': 'AreaIdSetType'}, {'name': 'geoAreaMappingList', 'optional': True, 'type': 'GeoAreaMappingList'}], 'type': 'SEQUENCE'}, 'AreaIdSet': {'element': {'type': 'AreaId'}, 'size': [(1, 'maxAreaId')], 'type': 'SEQUENCE OF'}, 'AreaIdSetType': {'type': 'ENUMERATED', 'values': [('border', 0), ('within', 1), None]}, 'CDMAAreaId': {'members': [{'name': 'refSID', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'refNID', 'optional': True, 'restricted-to': [(0, 32767)], 'type': 'INTEGER'}, {'name': 'refBASEID', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GSMAreaId': {'members': [{'name': 'refMCC', 'optional': True, 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refMNC', 'optional': True, 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refLAC', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'refCI', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GeoAreaIndex': {'restricted-to': [(1, 'maxNumGeoArea')], 'type': 'INTEGER'}, 'GeoAreaMappingList': {'element': {'type': 'GeoAreaIndex'}, 'size': [(1, 'maxNumGeoArea')], 'type': 'SEQUENCE ' 'OF'}, 'GeographicTargetArea': {'members': [{'name': 'circularArea', 'type': 'CircularArea'}, {'name': 'ellipticalArea', 'type': 'EllipticalArea'}, {'name': 'polygonArea', 'type': 'PolygonArea'}, None], 'type': 'CHOICE'}, 'GeographicTargetAreaList': {'element': {'type': 'GeographicTargetArea'}, 'size': [(1, 'maxNumGeoArea')], 'type': 'SEQUENCE ' 'OF'}, 'HRPDAreaId': {'members': [{'name': 'refSECTORID', 'size': [128], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'LTEAreaId': {'members': [{'name': 'refMCC', 'optional': True, 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refMNC', 'optional': True, 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refCI', 'optional': True, 'size': [29], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'PeriodicParams': {'members': [{'name': 'numberOfFixes', 'restricted-to': [(1, 8639999)], 'type': 'INTEGER'}, {'name': 'intervalBetweenFixes', 'restricted-to': [(1, 8639999)], 'type': 'INTEGER'}, {'name': 'startTime', 'optional': True, 'restricted-to': [(0, 2678400)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'RepeatedReportingParams': {'members': [{'name': 'minimumIntervalTime', 'restricted-to': [(1, 604800)], 'type': 'INTEGER'}, {'name': 'maximumNumberOfReports', 'restricted-to': [(1, 1024)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'TriggerParams': {'members': [{'name': 'periodicParams', 'type': 'PeriodicParams'}, {'name': 'areaEventParams', 'type': 'AreaEventParams'}, None], 'type': 'CHOICE'}, 'TriggerType': {'type': 'ENUMERATED', 'values': [('periodic', 0), ('areaEvent', 1), None]}, 'UMBAreaId': {'members': [{'name': 'refMCC', 'optional': True, 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refMNC', 'optional': True, 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refSECTORID', 'optional': True, 'size': [128], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'Ver2-SUPLTRIGGEREDSTART': {'members': [{'name': 'sETCapabilities', 'type': 'SETCapabilities'}, {'name': 'locationId', 'type': 'LocationId'}, {'name': 'ver', 'optional': True, 'type': 'Ver'}, {'name': 'qoP', 'optional': True, 'type': 'QoP'}, {'name': 'multipleLocationIds', 'optional': True, 'type': 'MultipleLocationIds'}, {'name': 'thirdParty', 'optional': True, 'type': 'ThirdParty'}, {'name': 'applicationID', 'optional': True, 'type': 'ApplicationID'}, {'name': 'triggerType', 'optional': True, 'type': 'TriggerType'}, {'name': 'triggerParams', 'optional': True, 'type': 'TriggerParams'}, {'name': 'position', 'optional': True, 'type': 'Position'}, {'name': 'reportingCap', 'optional': True, 'type': 'ReportingCap'}, {'name': 'causeCode', 'optional': True, 'type': 'CauseCode'}, None], 'type': 'SEQUENCE'}, 'WCDMAAreaId': {'members': [{'name': 'refMCC', 'optional': True, 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refMNC', 'optional': True, 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refLAC', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'refUC', 'optional': True, 'restricted-to': [(0, 268435455)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'WLANAreaId': {'members': [{'name': 'apMACAddress', 'size': [48], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'WimaxAreaId': {'members': [{'name': 'bsID-MSB', 'optional': True, 'size': [24], 'type': 'BIT ' 'STRING'}, {'name': 'bsID-LSB', 'size': [24], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}}, 'values': {'maxAreaId': {'type': 'INTEGER', 'value': 256}, 'maxAreaIdList': {'type': 'INTEGER', 'value': 32}, 'maxNumGeoArea': {'type': 'INTEGER', 'value': 32}}}, 'SUPL-TRIGGERED-STOP': {'extensibility-implied': False, 'imports': {'ULP-Components': ['StatusCode']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'Ver2-SUPLTRIGGEREDSTOP': {'members': [{'name': 'statusCode', 'optional': True, 'type': 'StatusCode'}, None], 'type': 'SEQUENCE'}}, 'values': {}}, 'ULP': {'extensibility-implied': False, 'imports': {'SUPL-AUTH-REQ': ['SUPLAUTHREQ'], 'SUPL-AUTH-RESP': ['SUPLAUTHRESP'], 'SUPL-END': ['SUPLEND'], 'SUPL-INIT': ['SUPLINIT'], 'SUPL-NOTIFY': ['Ver2-SUPLNOTIFY'], 'SUPL-NOTIFY-RESPONSE': ['Ver2-SUPLNOTIFYRESPONSE'], 'SUPL-POS': ['SUPLPOS'], 'SUPL-POS-INIT': ['SUPLPOSINIT'], 'SUPL-REPORT': ['Ver2-SUPLREPORT'], 'SUPL-RESPONSE': ['SUPLRESPONSE'], 'SUPL-SET-INIT': ['Ver2-SUPLSETINIT'], 'SUPL-START': ['SUPLSTART'], 'SUPL-TRIGGERED-RESPONSE': ['Ver2-SUPLTRIGGEREDRESPONSE'], 'SUPL-TRIGGERED-START': ['Ver2-SUPLTRIGGEREDSTART'], 'SUPL-TRIGGERED-STOP': ['Ver2-SUPLTRIGGEREDSTOP'], 'ULP-Components': ['SessionID', 'Version']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'ULP-PDU': {'members': [{'name': 'length', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'version', 'type': 'Version'}, {'name': 'sessionID', 'type': 'SessionID'}, {'name': 'message', 'type': 'UlpMessage'}], 'type': 'SEQUENCE'}, 'UlpMessage': {'members': [{'name': 'msSUPLINIT', 'type': 'SUPLINIT'}, {'name': 'msSUPLSTART', 'type': 'SUPLSTART'}, {'name': 'msSUPLRESPONSE', 'type': 'SUPLRESPONSE'}, {'name': 'msSUPLPOSINIT', 'type': 'SUPLPOSINIT'}, {'name': 'msSUPLPOS', 'type': 'SUPLPOS'}, {'name': 'msSUPLEND', 'type': 'SUPLEND'}, {'name': 'msSUPLAUTHREQ', 'type': 'SUPLAUTHREQ'}, {'name': 'msSUPLAUTHRESP', 'type': 'SUPLAUTHRESP'}, None, {'name': 'msSUPLTRIGGEREDSTART', 'type': 'Ver2-SUPLTRIGGEREDSTART'}, {'name': 'msSUPLTRIGGEREDRESPONSE', 'type': 'Ver2-SUPLTRIGGEREDRESPONSE'}, {'name': 'msSUPLTRIGGEREDSTOP', 'type': 'Ver2-SUPLTRIGGEREDSTOP'}, {'name': 'msSUPLNOTIFY', 'type': 'Ver2-SUPLNOTIFY'}, {'name': 'msSUPLNOTIFYRESPONSE', 'type': 'Ver2-SUPLNOTIFYRESPONSE'}, {'name': 'msSUPLSETINIT', 'type': 'Ver2-SUPLSETINIT'}, {'name': 'msSUPLREPORT', 'type': 'Ver2-SUPLREPORT'}], 'type': 'CHOICE'}}, 'values': {}}, 'ULP-Components': {'extensibility-implied': False, 'imports': {'Ver2-ULP-Components': ['Ver2-CellInfo-extension']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AltitudeInfo': {'members': [{'name': 'altitudeDirection', 'type': 'ENUMERATED', 'values': [('height', 0), ('depth', 1)]}, {'name': 'altitude', 'restricted-to': [(0, 32767)], 'type': 'INTEGER'}, {'name': 'altUncertainty', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'CPICH-Ec-N0': {'restricted-to': [(0, 63)], 'type': 'INTEGER'}, 'CPICH-RSCP': {'restricted-to': [(0, 127)], 'type': 'INTEGER'}, 'CdmaCellInformation': {'members': [{'name': 'refNID', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'refSID', 'restricted-to': [(0, 32767)], 'type': 'INTEGER'}, {'name': 'refBASEID', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'refBASELAT', 'restricted-to': [(0, 4194303)], 'type': 'INTEGER'}, {'name': 'reBASELONG', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'refREFPN', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, {'name': 'refWeekNumber', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'refSeconds', 'restricted-to': [(0, 4194303)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'CellInfo': {'members': [{'name': 'gsmCell', 'type': 'GsmCellInformation'}, {'name': 'wcdmaCell', 'type': 'WcdmaCellInformation'}, {'name': 'cdmaCell', 'type': 'CdmaCellInformation'}, None, {'name': 'ver2-CellInfo-extension', 'type': 'Ver2-CellInfo-extension'}], 'type': 'CHOICE'}, 'CellMeasuredResults': {'members': [{'name': 'cellIdentity', 'optional': True, 'restricted-to': [(0, 268435455)], 'type': 'INTEGER'}, {'members': [{'members': [{'name': 'primaryCPICH-Info', 'type': 'PrimaryCPICH-Info'}, {'name': 'cpich-Ec-N0', 'optional': True, 'type': 'CPICH-Ec-N0'}, {'name': 'cpich-RSCP', 'optional': True, 'type': 'CPICH-RSCP'}, {'name': 'pathloss', 'optional': True, 'type': 'Pathloss'}], 'name': 'fdd', 'type': 'SEQUENCE'}, {'members': [{'name': 'cellParametersID', 'type': 'CellParametersID'}, {'name': 'proposedTGSN', 'optional': True, 'type': 'TGSN'}, {'name': 'primaryCCPCH-RSCP', 'optional': True, 'type': 'PrimaryCCPCH-RSCP'}, {'name': 'pathloss', 'optional': True, 'type': 'Pathloss'}, {'name': 'timeslotISCP-List', 'optional': True, 'type': 'TimeslotISCP-List'}], 'name': 'tdd', 'type': 'SEQUENCE'}], 'name': 'modeSpecificInfo', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'CellMeasuredResultsList': {'element': {'type': 'CellMeasuredResults'}, 'size': [(1, 'maxCellMeas')], 'type': 'SEQUENCE ' 'OF'}, 'CellParametersID': {'restricted-to': [(0, 127)], 'type': 'INTEGER'}, 'ChipRate': {'type': 'ENUMERATED', 'values': [('tdd128', 0), ('tdd384', 1), ('tdd768', 2), None]}, 'FQDN': {'from': [('a', 'z'), ('A', 'Z'), ('0', '9'), ('.', '.'), ('-', '-')], 'size': [(1, 255)], 'type': 'VisibleString'}, 'FrequencyInfo': {'members': [{'members': [{'name': 'fdd', 'type': 'FrequencyInfoFDD'}, {'name': 'tdd', 'type': 'FrequencyInfoTDD'}, None], 'name': 'modeSpecificInfo', 'type': 'CHOICE'}, None], 'type': 'SEQUENCE'}, 'FrequencyInfoFDD': {'members': [{'name': 'uarfcn-UL', 'optional': True, 'type': 'UARFCN'}, {'name': 'uarfcn-DL', 'type': 'UARFCN'}, None], 'type': 'SEQUENCE'}, 'FrequencyInfoTDD': {'members': [{'name': 'uarfcn-Nt', 'type': 'UARFCN'}, None], 'type': 'SEQUENCE'}, 'GsmCellInformation': {'members': [{'name': 'refMCC', 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refMNC', 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refLAC', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'refCI', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'nMR', 'optional': True, 'type': 'NMR'}, {'name': 'tA', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'Horandveruncert': {'members': [{'name': 'verdirect', 'size': [1], 'type': 'BIT ' 'STRING'}, {'name': 'bearing', 'size': [9], 'type': 'BIT ' 'STRING'}, {'name': 'horspeed', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'verspeed', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'horuncertspeed', 'size': [8], 'type': 'BIT ' 'STRING'}, {'name': 'veruncertspeed', 'size': [8], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'Horandvervel': {'members': [{'name': 'verdirect', 'size': [1], 'type': 'BIT ' 'STRING'}, {'name': 'bearing', 'size': [9], 'type': 'BIT ' 'STRING'}, {'name': 'horspeed', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'verspeed', 'size': [8], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'Horvel': {'members': [{'name': 'bearing', 'size': [9], 'type': 'BIT STRING'}, {'name': 'horspeed', 'size': [16], 'type': 'BIT STRING'}, None], 'type': 'SEQUENCE'}, 'Horveluncert': {'members': [{'name': 'bearing', 'size': [9], 'type': 'BIT ' 'STRING'}, {'name': 'horspeed', 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'uncertspeed', 'size': [8], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'IPAddress': {'members': [{'name': 'ipv4Address', 'size': [4], 'type': 'OCTET ' 'STRING'}, {'name': 'ipv6Address', 'size': [16], 'type': 'OCTET ' 'STRING'}], 'type': 'CHOICE'}, 'LocationId': {'members': [{'name': 'cellInfo', 'type': 'CellInfo'}, {'name': 'status', 'type': 'Status'}, None], 'type': 'SEQUENCE'}, 'MeasuredResults': {'members': [{'name': 'frequencyInfo', 'optional': True, 'type': 'FrequencyInfo'}, {'name': 'utra-CarrierRSSI', 'optional': True, 'type': 'UTRA-CarrierRSSI'}, {'name': 'cellMeasuredResultsList', 'optional': True, 'type': 'CellMeasuredResultsList'}], 'type': 'SEQUENCE'}, 'MeasuredResultsList': {'element': {'type': 'MeasuredResults'}, 'size': [(1, 'maxFreq')], 'type': 'SEQUENCE OF'}, 'NMR': {'element': {'type': 'NMRelement'}, 'size': [(1, 15)], 'type': 'SEQUENCE OF'}, 'NMRelement': {'members': [{'name': 'aRFCN', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'bSIC', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'rxLev', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'Pathloss': {'restricted-to': [(46, 173)], 'type': 'INTEGER'}, 'PosMethod': {'type': 'ENUMERATED', 'values': [('agpsSETassisted', 0), ('agpsSETbased', 1), ('agpsSETassistedpref', 2), ('agpsSETbasedpref', 3), ('autonomousGPS', 4), ('aFLT', 5), ('eCID', 6), ('eOTD', 7), ('oTDOA', 8), ('noPosition', 9), None, ('ver2-historicalDataRetrieval', 10), ('ver2-agnssSETassisted', 11), ('ver2-agnssSETbased', 12), ('ver2-agnssSETassistedpref', 13), ('ver2-agnssSETbasedpref', 14), ('ver2-autonomousGNSS', 15), ('ver2-sessioninfoquery', 16), ('ver2-mbs', 17)]}, 'Position': {'members': [{'name': 'timestamp', 'type': 'UTCTime'}, {'name': 'positionEstimate', 'type': 'PositionEstimate'}, {'name': 'velocity', 'optional': True, 'type': 'Velocity'}, None], 'type': 'SEQUENCE'}, 'PositionEstimate': {'members': [{'name': 'latitudeSign', 'type': 'ENUMERATED', 'values': [('north', 0), ('south', 1)]}, {'name': 'latitude', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'longitude', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}, {'members': [{'name': 'uncertaintySemiMajor', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'uncertaintySemiMinor', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'orientationMajorAxis', 'restricted-to': [(0, 180)], 'type': 'INTEGER'}], 'name': 'uncertainty', 'optional': True, 'type': 'SEQUENCE'}, {'name': 'confidence', 'optional': True, 'restricted-to': [(0, 100)], 'type': 'INTEGER'}, {'name': 'altitudeInfo', 'optional': True, 'type': 'AltitudeInfo'}, None], 'type': 'SEQUENCE'}, 'PrimaryCCPCH-RSCP': {'restricted-to': [(0, 127)], 'type': 'INTEGER'}, 'PrimaryCPICH-Info': {'members': [{'name': 'primaryScramblingCode', 'restricted-to': [(0, 511)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'QoP': {'members': [{'name': 'horacc', 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'veracc', 'optional': True, 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'maxLocAge', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'delay', 'optional': True, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'SETId': {'members': [{'name': 'msisdn', 'size': [8], 'type': 'OCTET STRING'}, {'name': 'mdn', 'size': [8], 'type': 'OCTET STRING'}, {'name': 'min', 'size': [34], 'type': 'BIT STRING'}, {'name': 'imsi', 'size': [8], 'type': 'OCTET STRING'}, {'name': 'nai', 'size': [(1, 1000)], 'type': 'IA5String'}, {'name': 'iPAddress', 'type': 'IPAddress'}, None, {'name': 'imei', 'size': [8], 'type': 'OCTET STRING'}], 'type': 'CHOICE'}, 'SLPAddress': {'members': [{'name': 'iPAddress', 'type': 'IPAddress'}, {'name': 'fQDN', 'type': 'FQDN'}, None], 'type': 'CHOICE'}, 'SessionID': {'members': [{'name': 'setSessionID', 'optional': True, 'type': 'SetSessionID'}, {'name': 'slpSessionID', 'optional': True, 'type': 'SlpSessionID'}], 'type': 'SEQUENCE'}, 'SetSessionID': {'members': [{'name': 'sessionId', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'setId', 'type': 'SETId'}], 'type': 'SEQUENCE'}, 'SlpSessionID': {'members': [{'name': 'sessionID', 'size': [4], 'type': 'OCTET ' 'STRING'}, {'name': 'slpId', 'type': 'SLPAddress'}], 'type': 'SEQUENCE'}, 'Status': {'type': 'ENUMERATED', 'values': [('stale', 0), ('current', 1), ('unknown', 2), None]}, 'StatusCode': {'type': 'ENUMERATED', 'values': [('unspecified', 0), ('systemFailure', 1), ('unexpectedMessage', 2), ('protocolError', 3), ('dataMissing', 4), ('unexpectedDataValue', 5), ('posMethodFailure', 6), ('posMethodMismatch', 7), ('posProtocolMismatch', 8), ('targetSETnotReachable', 9), ('versionNotSupported', 10), ('resourceShortage', 11), ('invalidSessionId', 12), ('nonProxyModeNotSupported', 13), ('proxyModeNotSupported', 14), ('positioningNotPermitted', 15), ('authNetFailure', 16), ('authSuplinitFailure', 17), ('consentDeniedByUser', 100), ('consentGrantedByUser', 101), None, ('ver2-incompatibleProtectionLevel', 18), ('ver2-serviceNotSupported', 19), ('ver2-insufficientInterval', 20), ('ver2-noSUPLCoverage', 21), ('ver2-sessionStopped', 102), ('ver2-appIdDenied', 103)]}, 'TAResolution': {'type': 'ENUMERATED', 'values': [('res10chip', 0), ('res05chip', 1), ('res0125chip', 2), None]}, 'TGSN': {'restricted-to': [(0, 14)], 'type': 'INTEGER'}, 'TimeslotISCP': {'restricted-to': [(0, 127)], 'type': 'INTEGER'}, 'TimeslotISCP-List': {'element': {'type': 'TimeslotISCP'}, 'size': [(1, 'maxTS')], 'type': 'SEQUENCE OF'}, 'TimingAdvance': {'members': [{'name': 'tA', 'restricted-to': [(0, 8191)], 'type': 'INTEGER'}, {'name': 'tAResolution', 'optional': True, 'type': 'TAResolution'}, {'name': 'chipRate', 'optional': True, 'type': 'ChipRate'}, None], 'type': 'SEQUENCE'}, 'UARFCN': {'restricted-to': [(0, 16383)], 'type': 'INTEGER'}, 'UTRA-CarrierRSSI': {'restricted-to': [(0, 127)], 'type': 'INTEGER'}, 'Velocity': {'members': [{'name': 'horvel', 'type': 'Horvel'}, {'name': 'horandvervel', 'type': 'Horandvervel'}, {'name': 'horveluncert', 'type': 'Horveluncert'}, {'name': 'horandveruncert', 'type': 'Horandveruncert'}, None], 'type': 'CHOICE'}, 'Ver': {'size': [64], 'type': 'BIT STRING'}, 'Version': {'members': [{'name': 'maj', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'min', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'servind', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'WcdmaCellInformation': {'members': [{'name': 'refMCC', 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refMNC', 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refUC', 'restricted-to': [(0, 268435455)], 'type': 'INTEGER'}, {'name': 'frequencyInfo', 'optional': True, 'type': 'FrequencyInfo'}, {'name': 'primaryScramblingCode', 'optional': True, 'restricted-to': [(0, 511)], 'type': 'INTEGER'}, {'name': 'measuredResultsList', 'optional': True, 'type': 'MeasuredResultsList'}, None, {'name': 'cellParametersId', 'optional': True, 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'timingAdvance', 'optional': True, 'type': 'TimingAdvance'}], 'type': 'SEQUENCE'}}, 'values': {'maxCellMeas': {'type': 'INTEGER', 'value': 32}, 'maxFreq': {'type': 'INTEGER', 'value': 8}, 'maxTS': {'type': 'INTEGER', 'value': 14}}}, 'ULP-Version-2-message-extensions': {'extensibility-implied': False, 'imports': {'SUPL-START': ['SETCapabilities'], 'SUPL-TRIGGERED-START': ['TriggerType'], 'ULP-Components': ['Position', 'SLPAddress', 'Ver'], 'Ver2-ULP-Components': ['ApplicationID', 'GNSSPosTechnology', 'MultipleLocationIds', 'SPCSETKey', 'SPCSETKeylifetime', 'SPCTID', 'SupportedNetworkInformation', 'ThirdParty', 'UTRAN-GANSSReferenceTimeAssistance', 'UTRAN-GANSSReferenceTimeResult', 'UTRAN-GPSReferenceTimeAssistance', 'UTRAN-GPSReferenceTimeResult']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AllowedReportingType': {'type': 'ENUMERATED', 'values': [('positionsOnly', 0), ('measurementsOnly', 1), ('positionsAndMeasurements', 2), None]}, 'BasicProtectionParams': {'members': [{'name': 'keyIdentifier', 'size': [8], 'type': 'OCTET ' 'STRING'}, {'name': 'basicReplayCounter', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'basicMAC', 'size': [32], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'HistoricReporting': {'members': [{'name': 'allowedReportingType', 'type': 'AllowedReportingType'}, {'name': 'reportingCriteria', 'optional': True, 'type': 'ReportingCriteria'}, None], 'type': 'SEQUENCE'}, 'NotificationMode': {'type': 'ENUMERATED', 'values': [('normal', 0), ('basedOnLocation', 1), None]}, 'ProtLevel': {'type': 'ENUMERATED', 'values': [('nullProtection', 0), ('basicProtection', 1), None]}, 'ProtectionLevel': {'members': [{'name': 'protlevel', 'type': 'ProtLevel'}, {'name': 'basicProtectionParams', 'optional': True, 'type': 'BasicProtectionParams'}, None], 'type': 'SEQUENCE'}, 'ReportingCriteria': {'members': [{'name': 'timeWindow', 'optional': True, 'type': 'TimeWindow'}, {'name': 'maxNumberofReports', 'optional': True, 'restricted-to': [(1, 65536)], 'type': 'INTEGER'}, {'name': 'minTimeInterval', 'optional': True, 'restricted-to': [(1, 86400)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'TimeWindow': {'members': [{'name': 'startTime', 'restricted-to': [(-525600, -1)], 'type': 'INTEGER'}, {'name': 'stopTime', 'restricted-to': [(-525599, 0)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Ver2-SUPL-END-extension': {'members': [{'name': 'sETCapabilities', 'optional': True, 'type': 'SETCapabilities'}, None], 'type': 'SEQUENCE'}, 'Ver2-SUPL-INIT-extension': {'members': [{'name': 'notificationMode', 'optional': True, 'type': 'NotificationMode'}, {'name': 'supportedNetworkInformation', 'optional': True, 'type': 'SupportedNetworkInformation'}, {'name': 'triggerType', 'optional': True, 'type': 'TriggerType'}, {'name': 'e-SLPAddress', 'optional': True, 'type': 'SLPAddress'}, {'name': 'historicReporting', 'optional': True, 'type': 'HistoricReporting'}, {'name': 'protectionLevel', 'optional': True, 'type': 'ProtectionLevel'}, {'name': 'gnssPosTechnology', 'optional': True, 'type': 'GNSSPosTechnology'}, {'name': 'minimumMajorVersion', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'Ver2-SUPL-POS-INIT-extension': {'members': [{'name': 'multipleLocationIds', 'optional': True, 'type': 'MultipleLocationIds'}, {'name': 'utran-GPSReferenceTimeResult', 'optional': True, 'type': 'UTRAN-GPSReferenceTimeResult'}, {'name': 'utran-GANSSReferenceTimeResult', 'optional': True, 'type': 'UTRAN-GANSSReferenceTimeResult'}, None], 'type': 'SEQUENCE'}, 'Ver2-SUPL-POS-extension': {'members': [{'name': 'utran-GPSReferenceTimeAssistance', 'optional': True, 'type': 'UTRAN-GPSReferenceTimeAssistance'}, {'name': 'utran-GPSReferenceTimeResult', 'optional': True, 'type': 'UTRAN-GPSReferenceTimeResult'}, {'name': 'utran-GANSSReferenceTimeAssistance', 'optional': True, 'type': 'UTRAN-GANSSReferenceTimeAssistance'}, {'name': 'utran-GANSSReferenceTimeResult', 'optional': True, 'type': 'UTRAN-GANSSReferenceTimeResult'}, None], 'type': 'SEQUENCE'}, 'Ver2-SUPL-RESPONSE-extension': {'members': [{'name': 'supportedNetworkInformation', 'optional': True, 'type': 'SupportedNetworkInformation'}, {'name': 'sPCSETKey', 'optional': True, 'type': 'SPCSETKey'}, {'name': 'sPCTID', 'optional': True, 'type': 'SPCTID'}, {'name': 'sPCSETKeylifetime', 'optional': True, 'type': 'SPCSETKeylifetime'}, {'name': 'initialApproximateposition', 'optional': True, 'type': 'Position'}, {'name': 'gnssPosTechnology', 'optional': True, 'type': 'GNSSPosTechnology'}, None], 'type': 'SEQUENCE'}, 'Ver2-SUPL-START-extension': {'members': [{'name': 'multipleLocationIds', 'optional': True, 'type': 'MultipleLocationIds'}, {'name': 'thirdParty', 'optional': True, 'type': 'ThirdParty'}, {'name': 'applicationID', 'optional': True, 'type': 'ApplicationID'}, {'name': 'position', 'optional': True, 'type': 'Position'}, None], 'type': 'SEQUENCE'}}, 'values': {}}, 'ULP-Version-2-parameter-extensions': {'extensibility-implied': False, 'imports': {'SUPL-TRIGGERED-START': ['maxAreaId', 'maxAreaIdList', 'maxNumGeoArea'], 'Ver2-ULP-Components': ['GANSSSignals', 'ReportingCap']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'AddPosSupport-Element': {'members': [{'name': 'addPosID', 'type': 'ENUMERATED', 'values': [('mBS', 0), None]}, {'name': 'addPosMode', 'named-bits': [('standalone', '0'), ('setBased', '1'), ('setAssisted', '2')], 'optional': True, 'size': [(1, 8)], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'AdditionalPositioningMethods': {'element': {'type': 'AddPosSupport-Element'}, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, 'BDS-Sig-Id-Req': {'size': [8], 'type': 'BIT ' 'STRING'}, 'DGANSS-Sig-Id-Req': {'size': [8], 'type': 'BIT ' 'STRING'}, 'EventTriggerCapabilities': {'members': [{'name': 'geoAreaShapesSupported', 'type': 'GeoAreaShapesSupported'}, {'name': 'maxNumGeoAreaSupported', 'optional': True, 'restricted-to': [(0, 'maxNumGeoArea')], 'type': 'INTEGER'}, {'name': 'maxAreaIdListSupported', 'optional': True, 'restricted-to': [(0, 'maxAreaIdList')], 'type': 'INTEGER'}, {'name': 'maxAreaIdSupportedPerList', 'optional': True, 'restricted-to': [(0, 'maxAreaId')], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'ExtendedEphCheck': {'members': [{'name': 'beginTime', 'type': 'GPSTime'}, {'name': 'endTime', 'type': 'GPSTime'}, None], 'type': 'SEQUENCE'}, 'ExtendedEphemeris': {'members': [{'name': 'validity', 'restricted-to': [(1, 256)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GANSSPositionMethod': {'members': [{'name': 'ganssId', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'ganssSBASid', 'optional': True, 'size': [3], 'type': 'BIT ' 'STRING'}, {'name': 'gANSSPositioningMethodTypes', 'type': 'GANSSPositioningMethodTypes'}, {'name': 'gANSSSignals', 'type': 'GANSSSignals'}, None], 'type': 'SEQUENCE'}, 'GANSSPositionMethods': {'element': {'type': 'GANSSPositionMethod'}, 'size': [(1, 16)], 'type': 'SEQUENCE ' 'OF'}, 'GANSSPositioningMethodTypes': {'members': [{'name': 'setAssisted', 'type': 'BOOLEAN'}, {'name': 'setBased', 'type': 'BOOLEAN'}, {'name': 'autonomous', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'GANSSextEphTime': {'members': [{'name': 'gANSSday', 'restricted-to': [(0, 8191)], 'type': 'INTEGER'}, {'name': 'gANSSTODhour', 'restricted-to': [(0, 23)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GPSTime': {'members': [{'name': 'gPSWeek', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'gPSTOWhour', 'restricted-to': [(0, 167)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GanssAdditionalDataChoices': {'members': [{'name': 'orbitModelID', 'optional': True, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'clockModelID', 'optional': True, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'utcModelID', 'optional': True, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, {'name': 'almanacModelID', 'optional': True, 'restricted-to': [(0, 7)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'GanssDataBits': {'members': [{'name': 'ganssTODmin', 'restricted-to': [(0, 59)], 'type': 'INTEGER'}, {'name': 'reqDataBitAssistanceList', 'type': 'ReqDataBitAssistanceList'}, None], 'type': 'SEQUENCE'}, 'GanssExtendedEphCheck': {'members': [{'name': 'beginTime', 'type': 'GANSSextEphTime'}, {'name': 'endTime', 'type': 'GANSSextEphTime'}, None], 'type': 'SEQUENCE'}, 'GanssNavigationModelData': {'members': [{'name': 'ganssWeek', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'ganssToe', 'restricted-to': [(0, 167)], 'type': 'INTEGER'}, {'name': 't-toeLimit', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'satellitesListRelatedDataList', 'optional': True, 'type': 'SatellitesListRelatedDataList'}, None], 'type': 'SEQUENCE'}, 'GanssReqGenericData': {'members': [{'name': 'ganssId', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'ganssSBASid', 'optional': True, 'size': [3], 'type': 'BIT ' 'STRING'}, {'name': 'ganssRealTimeIntegrity', 'type': 'BOOLEAN'}, {'name': 'ganssDifferentialCorrection', 'optional': True, 'type': 'DGANSS-Sig-Id-Req'}, {'name': 'ganssAlmanac', 'type': 'BOOLEAN'}, {'name': 'ganssNavigationModelData', 'optional': True, 'type': 'GanssNavigationModelData'}, {'name': 'ganssTimeModels', 'optional': True, 'size': [16], 'type': 'BIT ' 'STRING'}, {'name': 'ganssReferenceMeasurementInfo', 'type': 'BOOLEAN'}, {'name': 'ganssDataBits', 'optional': True, 'type': 'GanssDataBits'}, {'name': 'ganssUTCModel', 'type': 'BOOLEAN'}, {'name': 'ganssAdditionalDataChoices', 'optional': True, 'type': 'GanssAdditionalDataChoices'}, {'name': 'ganssAuxiliaryInformation', 'type': 'BOOLEAN'}, {'name': 'ganssExtendedEphemeris', 'optional': True, 'type': 'ExtendedEphemeris'}, {'name': 'ganssExtendedEphemerisCheck', 'optional': True, 'type': 'GanssExtendedEphCheck'}, None, {'name': 'bds-DifferentialCorrection', 'optional': True, 'type': 'BDS-Sig-Id-Req'}, {'name': 'bds-GridModelReq', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'GanssRequestedCommonAssistanceDataList': {'members': [{'name': 'ganssReferenceTime', 'type': 'BOOLEAN'}, {'name': 'ganssIonosphericModel', 'type': 'BOOLEAN'}, {'name': 'ganssAdditionalIonosphericModelForDataID00', 'type': 'BOOLEAN'}, {'name': 'ganssAdditionalIonosphericModelForDataID11', 'type': 'BOOLEAN'}, {'name': 'ganssEarthOrientationParameters', 'type': 'BOOLEAN'}, None, {'name': 'ganssAdditionalIonosphericModelForDataID01', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'GanssRequestedGenericAssistanceDataList': {'element': {'type': 'GanssReqGenericData'}, 'size': [(1, 'maxGANSS')], 'type': 'SEQUENCE ' 'OF'}, 'GeoAreaShapesSupported': {'members': [{'name': 'ellipticalArea', 'type': 'BOOLEAN'}, {'name': 'polygonArea', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'PosProtocolVersion3GPP': {'members': [{'name': 'majorVersionField', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'technicalVersionField', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'editorialVersionField', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'PosProtocolVersion3GPP2': {'element': {'type': 'Supported3GPP2PosProtocolVersion'}, 'size': [(1, 8)], 'type': 'SEQUENCE ' 'OF'}, 'PosProtocolVersionOMA': {'members': [{'name': 'majorVersionField', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'minorVersionField', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'ReqDataBitAssistanceList': {'members': [{'name': 'gnssSignals', 'type': 'GANSSSignals'}, {'name': 'ganssDataBitInterval', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'element': {'restricted-to': [(0, 63)], 'type': 'INTEGER'}, 'name': 'ganssDataBitSatList', 'optional': True, 'size': [(1, 'maxGANSSSat')], 'type': 'SEQUENCE ' 'OF'}, None], 'type': 'SEQUENCE'}, 'SatellitesListRelatedData': {'members': [{'name': 'satId', 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'iod', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'SatellitesListRelatedDataList': {'element': {'type': 'SatellitesListRelatedData'}, 'size': [(0, 'maxGANSSSat')], 'type': 'SEQUENCE ' 'OF'}, 'ServiceCapabilities': {'members': [{'name': 'servicesSupported', 'type': 'ServicesSupported'}, {'name': 'reportingCapabilities', 'optional': True, 'type': 'ReportingCap'}, {'name': 'eventTriggerCapabilities', 'optional': True, 'type': 'EventTriggerCapabilities'}, {'name': 'sessionCapabilities', 'type': 'SessionCapabilities'}, None], 'type': 'SEQUENCE'}, 'ServicesSupported': {'members': [{'name': 'periodicTrigger', 'type': 'BOOLEAN'}, {'name': 'areaEventTrigger', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'SessionCapabilities': {'members': [{'name': 'maxNumberTotalSessions', 'restricted-to': [(1, 128)], 'type': 'INTEGER'}, {'name': 'maxNumberPeriodicSessions', 'restricted-to': [(1, 32)], 'type': 'INTEGER'}, {'name': 'maxNumberTriggeredSessions', 'restricted-to': [(1, 32)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'Supported3GPP2PosProtocolVersion': {'members': [{'name': 'revisionNumber', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'pointReleaseNumber', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'internalEditLevel', 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'SupportedBearers': {'members': [{'name': 'gsm', 'type': 'BOOLEAN'}, {'name': 'wcdma', 'type': 'BOOLEAN'}, {'name': 'lte', 'type': 'BOOLEAN'}, {'name': 'cdma', 'type': 'BOOLEAN'}, {'name': 'hprd', 'type': 'BOOLEAN'}, {'name': 'umb', 'type': 'BOOLEAN'}, {'name': 'wlan', 'type': 'BOOLEAN'}, {'name': 'wiMAX', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'Ver2-Notification-extension': {'members': [{'name': 'emergencyCallLocation', 'optional': True, 'type': 'NULL'}, None], 'type': 'SEQUENCE'}, 'Ver2-PosPayLoad-extension': {'members': [{'element': {'size': [(1, 60000)], 'type': 'OCTET ' 'STRING'}, 'name': 'lPPPayload', 'optional': True, 'size': [(1, 3)], 'type': 'SEQUENCE ' 'OF'}, {'element': {'size': [(1, 60000)], 'type': 'OCTET ' 'STRING'}, 'name': 'tIA801Payload', 'optional': True, 'size': [(1, 3)], 'type': 'SEQUENCE ' 'OF'}, None], 'type': 'SEQUENCE'}, 'Ver2-PosProtocol-extension': {'members': [{'name': 'lpp', 'type': 'BOOLEAN'}, {'name': 'posProtocolVersionRRLP', 'optional': True, 'type': 'PosProtocolVersion3GPP'}, {'name': 'posProtocolVersionRRC', 'optional': True, 'type': 'PosProtocolVersion3GPP'}, {'name': 'posProtocolVersionTIA801', 'optional': True, 'type': 'PosProtocolVersion3GPP2'}, {'name': 'posProtocolVersionLPP', 'optional': True, 'type': 'PosProtocolVersion3GPP'}, None, {'name': 'lppe', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'posProtocolVersionLPPe', 'optional': True, 'type': 'PosProtocolVersionOMA'}], 'type': 'SEQUENCE'}, 'Ver2-PosTechnology-extension': {'members': [{'name': 'gANSSPositionMethods', 'optional': True, 'type': 'GANSSPositionMethods'}, None, {'name': 'additionalPositioningMethods', 'optional': True, 'type': 'AdditionalPositioningMethods'}], 'type': 'SEQUENCE'}, 'Ver2-RequestedAssistData-extension': {'members': [{'name': 'ganssRequestedCommonAssistanceDataList', 'optional': True, 'type': 'GanssRequestedCommonAssistanceDataList'}, {'name': 'ganssRequestedGenericAssistanceDataList', 'optional': True, 'type': 'GanssRequestedGenericAssistanceDataList'}, {'name': 'extendedEphemeris', 'optional': True, 'type': 'ExtendedEphemeris'}, {'name': 'extendedEphemerisCheck', 'optional': True, 'type': 'ExtendedEphCheck'}, None], 'type': 'SEQUENCE'}, 'Ver2-SETCapabilities-extension': {'members': [{'name': 'serviceCapabilities', 'optional': True, 'type': 'ServiceCapabilities'}, None, {'name': 'supportedBearers', 'optional': True, 'type': 'SupportedBearers'}], 'type': 'SEQUENCE'}}, 'values': {'maxGANSS': {'type': 'INTEGER', 'value': 16}, 'maxGANSSSat': {'type': 'INTEGER', 'value': 32}}}, 'Ver2-ULP-Components': {'extensibility-implied': False, 'imports': {'ULP-Components': ['CellParametersID', 'FQDN', 'LocationId', 'PrimaryCPICH-Info']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'ApplicationID': {'members': [{'name': 'appProvider', 'size': [(1, 24)], 'type': 'IA5String'}, {'name': 'appName', 'size': [(1, 32)], 'type': 'IA5String'}, {'name': 'appVersion', 'optional': True, 'size': [(1, 8)], 'type': 'IA5String'}, None], 'type': 'SEQUENCE'}, 'BatchRepCap': {'members': [{'name': 'report-position', 'type': 'BOOLEAN'}, {'name': 'report-measurements', 'type': 'BOOLEAN'}, {'name': 'max-num-positions', 'optional': True, 'restricted-to': [(1, 1024)], 'type': 'INTEGER'}, {'name': 'max-num-measurements', 'optional': True, 'restricted-to': [(1, 1024)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'CauseCode': {'type': 'ENUMERATED', 'values': [('servingNetWorkNotInAreaIdList', 0), ('sETCapabilitiesChanged', 1), ('noSUPLCoverage', 2), None]}, 'CellGlobalIdEUTRA': {'members': [{'name': 'plmn-Identity', 'type': 'PLMN-Identity'}, {'name': 'cellIdentity', 'type': 'CellIdentity'}, None], 'type': 'SEQUENCE'}, 'CellIdentity': {'size': [28], 'type': 'BIT STRING'}, 'CircularArea': {'members': [{'name': 'coordinate', 'type': 'Coordinate'}, {'name': 'radius', 'restricted-to': [(1, 1000000)], 'type': 'INTEGER'}, {'name': 'radius-min', 'optional': True, 'restricted-to': [(1, 1000000)], 'type': 'INTEGER'}, {'name': 'radius-max', 'optional': True, 'restricted-to': [(1, 1500000)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Coordinate': {'members': [{'name': 'latitudeSign', 'type': 'ENUMERATED', 'values': [('north', 0), ('south', 1)]}, {'name': 'latitude', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'longitude', 'restricted-to': [(-8388608, 8388607)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'EllipticalArea': {'members': [{'name': 'coordinate', 'type': 'Coordinate'}, {'name': 'semiMajor', 'restricted-to': [(1, 1000000)], 'type': 'INTEGER'}, {'name': 'semiMajor-min', 'optional': True, 'restricted-to': [(1, 1000000)], 'type': 'INTEGER'}, {'name': 'semiMajor-max', 'optional': True, 'restricted-to': [(1, 1500000)], 'type': 'INTEGER'}, {'name': 'semiMinor', 'restricted-to': [(1, 1000000)], 'type': 'INTEGER'}, {'name': 'semiMinor-min', 'optional': True, 'restricted-to': [(1, 1000000)], 'type': 'INTEGER'}, {'name': 'semiMinor-max', 'optional': True, 'restricted-to': [(1, 1500000)], 'type': 'INTEGER'}, {'name': 'angle', 'restricted-to': [(0, 179)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'GANSSSignals': {'named-bits': [('signal1', '0'), ('signal2', '1'), ('signal3', '2'), ('signal4', '3'), ('signal5', '4'), ('signal6', '5'), ('signal7', '6'), ('signal8', '7')], 'size': [(1, 8)], 'type': 'BIT STRING'}, 'GNSSPosTechnology': {'members': [{'name': 'gps', 'type': 'BOOLEAN'}, {'name': 'galileo', 'type': 'BOOLEAN'}, {'name': 'sbas', 'type': 'BOOLEAN'}, {'name': 'modernized-gps', 'type': 'BOOLEAN'}, {'name': 'qzss', 'type': 'BOOLEAN'}, {'name': 'glonass', 'type': 'BOOLEAN'}, None, {'name': 'bds', 'optional': True, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'HrpdCellInformation': {'members': [{'name': 'refSECTORID', 'optional': True, 'size': [128], 'type': 'BIT ' 'STRING'}, {'name': 'refBASELAT', 'restricted-to': [(0, 4194303)], 'type': 'INTEGER'}, {'name': 'reBASELONG', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'refWeekNumber', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'refSeconds', 'restricted-to': [(0, 4194303)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'LciLocData': {'members': [{'name': 'locationDataLCI', 'optional': True, 'type': 'LocationDataLCI'}, None], 'type': 'SEQUENCE'}, 'LocationData': {'members': [{'name': 'locationAccuracy', 'optional': True, 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}, {'name': 'locationValue', 'size': [(1, 128)], 'type': 'OCTET ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'LocationDataLCI': {'members': [{'name': 'latitudeResolution', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'latitude', 'size': [34], 'type': 'BIT ' 'STRING'}, {'name': 'longitudeResolution', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'longitude', 'size': [34], 'type': 'BIT ' 'STRING'}, {'name': 'altitudeType', 'size': [4], 'type': 'BIT ' 'STRING'}, {'name': 'altitudeResolution', 'size': [6], 'type': 'BIT ' 'STRING'}, {'name': 'altitude', 'size': [30], 'type': 'BIT ' 'STRING'}, {'name': 'datum', 'size': [8], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'LocationEncodingDescriptor': {'type': 'ENUMERATED', 'values': [('lCI', 0), ('aSN1', 1), None]}, 'LocationIdData': {'members': [{'name': 'locationId', 'type': 'LocationId'}, {'name': 'relativetimestamp', 'optional': True, 'type': 'RelativeTime'}, {'name': 'servingFlag', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'LteCellInformation': {'members': [{'name': 'cellGlobalIdEUTRA', 'type': 'CellGlobalIdEUTRA'}, {'name': 'physCellId', 'type': 'PhysCellId'}, {'name': 'trackingAreaCode', 'type': 'TrackingAreaCode'}, {'name': 'rsrpResult', 'optional': True, 'type': 'RSRP-Range'}, {'name': 'rsrqResult', 'optional': True, 'type': 'RSRQ-Range'}, {'name': 'tA', 'optional': True, 'restricted-to': [(0, 1282)], 'type': 'INTEGER'}, {'name': 'measResultListEUTRA', 'optional': True, 'type': 'MeasResultListEUTRA'}, None, {'name': 'earfcn', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'earfcn-ext', 'optional': True, 'restricted-to': [(65536, 262143)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'MCC': {'element': {'type': 'MCC-MNC-Digit'}, 'size': [3], 'type': 'SEQUENCE OF'}, 'MCC-MNC-Digit': {'restricted-to': [(0, 9)], 'type': 'INTEGER'}, 'MNC': {'element': {'type': 'MCC-MNC-Digit'}, 'size': [(2, 3)], 'type': 'SEQUENCE OF'}, 'MeasResultEUTRA': {'members': [{'name': 'physCellId', 'type': 'PhysCellId'}, {'members': [{'name': 'cellGlobalId', 'type': 'CellGlobalIdEUTRA'}, {'name': 'trackingAreaCode', 'type': 'TrackingAreaCode'}], 'name': 'cgi-Info', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'name': 'rsrpResult', 'optional': True, 'type': 'RSRP-Range'}, {'name': 'rsrqResult', 'optional': True, 'type': 'RSRQ-Range'}, None, {'name': 'earfcn', 'optional': True, 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'earfcn-ext', 'optional': True, 'restricted-to': [(65536, 262143)], 'type': 'INTEGER'}], 'name': 'measResult', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'MeasResultListEUTRA': {'element': {'type': 'MeasResultEUTRA'}, 'size': [(1, 'maxCellReport')], 'type': 'SEQUENCE ' 'OF'}, 'MultipleLocationIds': {'element': {'type': 'LocationIdData'}, 'size': [(1, 'maxLidSize')], 'type': 'SEQUENCE ' 'OF'}, 'PLMN-Identity': {'members': [{'name': 'mcc', 'optional': True, 'type': 'MCC'}, {'name': 'mnc', 'type': 'MNC'}], 'type': 'SEQUENCE'}, 'PhysCellId': {'restricted-to': [(0, 503)], 'type': 'INTEGER'}, 'PolygonArea': {'members': [{'name': 'polygonDescription', 'type': 'PolygonDescription'}, {'name': 'polygonHysteresis', 'optional': True, 'restricted-to': [(1, 100000)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'PolygonDescription': {'element': {'type': 'Coordinate'}, 'size': [(3, 15)], 'type': 'SEQUENCE ' 'OF'}, 'RSRP-Range': {'restricted-to': [(0, 97)], 'type': 'INTEGER'}, 'RSRQ-Range': {'restricted-to': [(0, 34)], 'type': 'INTEGER'}, 'RTD': {'members': [{'name': 'rTDValue', 'restricted-to': [(0, 16777216)], 'type': 'INTEGER'}, {'name': 'rTDUnits', 'type': 'RTDUnits'}, {'name': 'rTDAccuracy', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'RTDUnits': {'type': 'ENUMERATED', 'values': [('microseconds', 0), ('hundredsofnanoseconds', 1), ('tensofnanoseconds', 2), ('nanoseconds', 3), ('tenthsofnanoseconds', 4), None]}, 'RelativeTime': {'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, 'RepLocation': {'members': [{'name': 'lciLocData', 'type': 'LciLocData'}, None], 'type': 'CHOICE'}, 'RepMode': {'members': [{'name': 'realtime', 'type': 'BOOLEAN'}, {'name': 'quasirealtime', 'type': 'BOOLEAN'}, {'name': 'batch', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'ReportedLocation': {'members': [{'name': 'locationEncodingDescriptor', 'type': 'LocationEncodingDescriptor'}, {'name': 'locationData', 'type': 'LocationData'}, None], 'type': 'SEQUENCE'}, 'ReportingCap': {'members': [{'name': 'minInt', 'restricted-to': [(1, 3600)], 'type': 'INTEGER'}, {'name': 'maxInt', 'optional': True, 'restricted-to': [(1, 1440)], 'type': 'INTEGER'}, {'name': 'repMode', 'type': 'RepMode'}, {'name': 'batchRepCap', 'optional': True, 'type': 'BatchRepCap'}, None], 'type': 'SEQUENCE'}, 'SET-GANSSReferenceTime': {'members': [{'members': [{'name': 'ms-part', 'restricted-to': [(0, 80)], 'type': 'INTEGER'}, {'name': 'ls-part', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}], 'name': 'set-GANSSTimingOfCell', 'optional': True, 'type': 'SEQUENCE'}, {'members': [{'members': [{'name': 'referenceIdentity', 'type': 'PrimaryCPICH-Info'}], 'name': 'fdd', 'type': 'SEQUENCE'}, {'members': [{'name': 'referenceIdentity', 'type': 'CellParametersID'}], 'name': 'tdd', 'type': 'SEQUENCE'}], 'name': 'modeSpecificInfo', 'optional': True, 'type': 'CHOICE'}, {'name': 'sfn', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'ganss-TODUncertainty', 'optional': True, 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'SPCSETKey': {'size': [128], 'type': 'BIT STRING'}, 'SPCSETKeylifetime': {'restricted-to': [(1, 24)], 'type': 'INTEGER'}, 'SPCTID': {'members': [{'name': 'rAND', 'size': [128], 'type': 'BIT ' 'STRING'}, {'name': 'slpFQDN', 'type': 'FQDN'}, None], 'type': 'SEQUENCE'}, 'SupportedNetworkInformation': {'members': [{'name': 'wLAN', 'type': 'BOOLEAN'}, {'name': 'supportedWLANInfo', 'optional': True, 'type': 'SupportedWLANInfo'}, {'name': 'supportedWLANApsList', 'optional': True, 'type': 'SupportedWLANApsList'}, {'name': 'gSM', 'type': 'BOOLEAN'}, {'name': 'wCDMA', 'type': 'BOOLEAN'}, {'name': 'supportedWCDMAInfo', 'optional': True, 'type': 'SupportedWCDMAInfo'}, {'name': 'cDMA', 'type': 'BOOLEAN'}, {'name': 'hRDP', 'type': 'BOOLEAN'}, {'name': 'uMB', 'type': 'BOOLEAN'}, {'name': 'lTE', 'type': 'BOOLEAN'}, {'name': 'wIMAX', 'type': 'BOOLEAN'}, {'name': 'historic', 'type': 'BOOLEAN'}, {'name': 'nonServing', 'type': 'BOOLEAN'}, {'name': 'uTRANGPSReferenceTime', 'type': 'BOOLEAN'}, {'name': 'uTRANGANSSReferenceTime', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'SupportedWCDMAInfo': {'members': [{'name': 'mRL', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'SupportedWLANApData': {'members': [{'name': 'apMACAddress', 'size': [48], 'type': 'BIT ' 'STRING'}, {'name': 'apDevType', 'type': 'ENUMERATED', 'values': [('wlan802-11a', 0), ('wlan802-11b', 1), ('wlan802-11g', 2), None]}, None], 'type': 'SEQUENCE'}, 'SupportedWLANApsChannel11a': {'members': [{'name': 'ch34', 'type': 'BOOLEAN'}, {'name': 'ch36', 'type': 'BOOLEAN'}, {'name': 'ch38', 'type': 'BOOLEAN'}, {'name': 'ch40', 'type': 'BOOLEAN'}, {'name': 'ch42', 'type': 'BOOLEAN'}, {'name': 'ch44', 'type': 'BOOLEAN'}, {'name': 'ch46', 'type': 'BOOLEAN'}, {'name': 'ch48', 'type': 'BOOLEAN'}, {'name': 'ch52', 'type': 'BOOLEAN'}, {'name': 'ch56', 'type': 'BOOLEAN'}, {'name': 'ch60', 'type': 'BOOLEAN'}, {'name': 'ch64', 'type': 'BOOLEAN'}, {'name': 'ch149', 'type': 'BOOLEAN'}, {'name': 'ch153', 'type': 'BOOLEAN'}, {'name': 'ch157', 'type': 'BOOLEAN'}, {'name': 'ch161', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'SupportedWLANApsChannel11bg': {'members': [{'name': 'ch1', 'type': 'BOOLEAN'}, {'name': 'ch2', 'type': 'BOOLEAN'}, {'name': 'ch3', 'type': 'BOOLEAN'}, {'name': 'ch4', 'type': 'BOOLEAN'}, {'name': 'ch5', 'type': 'BOOLEAN'}, {'name': 'ch6', 'type': 'BOOLEAN'}, {'name': 'ch7', 'type': 'BOOLEAN'}, {'name': 'ch8', 'type': 'BOOLEAN'}, {'name': 'ch9', 'type': 'BOOLEAN'}, {'name': 'ch10', 'type': 'BOOLEAN'}, {'name': 'ch11', 'type': 'BOOLEAN'}, {'name': 'ch12', 'type': 'BOOLEAN'}, {'name': 'ch13', 'type': 'BOOLEAN'}, {'name': 'ch14', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'SupportedWLANApsList': {'members': [{'element': {'type': 'SupportedWLANApData'}, 'name': 'supportedWLANApDataList', 'size': [(1, 'maxWLANApDataSize')], 'type': 'SEQUENCE ' 'OF'}, {'name': 'supportedWLANapsChannel11a', 'optional': True, 'type': 'SupportedWLANApsChannel11a'}, {'name': 'supportedWLANapsChannel11bg', 'optional': True, 'type': 'SupportedWLANApsChannel11bg'}, None], 'type': 'SEQUENCE'}, 'SupportedWLANInfo': {'members': [{'name': 'apTP', 'type': 'BOOLEAN'}, {'name': 'apAG', 'type': 'BOOLEAN'}, {'name': 'apSN', 'type': 'BOOLEAN'}, {'name': 'apDevType', 'type': 'BOOLEAN'}, {'name': 'apRSSI', 'type': 'BOOLEAN'}, {'name': 'apChanFreq', 'type': 'BOOLEAN'}, {'name': 'apRTD', 'type': 'BOOLEAN'}, {'name': 'setTP', 'type': 'BOOLEAN'}, {'name': 'setAG', 'type': 'BOOLEAN'}, {'name': 'setSN', 'type': 'BOOLEAN'}, {'name': 'setRSSI', 'type': 'BOOLEAN'}, {'name': 'apRepLoc', 'type': 'BOOLEAN'}, None], 'type': 'SEQUENCE'}, 'ThirdParty': {'element': {'type': 'ThirdPartyID'}, 'size': [(1, 64)], 'type': 'SEQUENCE OF'}, 'ThirdPartyID': {'members': [{'name': 'logicalName', 'size': [(1, 1000)], 'type': 'IA5String'}, {'name': 'msisdn', 'size': [8], 'type': 'OCTET ' 'STRING'}, {'name': 'emailaddr', 'size': [(1, 1000)], 'type': 'IA5String'}, {'from': [('a', 'z'), ('A', 'Z'), ('0', '9'), (':', ':'), ('.', '.'), ('/', '/'), ('-', '-'), ('_', '_'), ('~', '~'), ('%', '%'), ('#', '#'), ('@', '@'), ('?', '?')], 'name': 'sip-uri', 'size': [(1, 255)], 'type': 'VisibleString'}, {'from': [('a', 'z'), ('A', 'Z'), ('0', '9'), (':', ':'), ('.', '.'), ('/', '/'), ('-', '-'), ('_', '_'), ('~', '~'), ('%', '%'), ('#', '#'), ('@', '@'), ('?', '?')], 'name': 'ims-public-identity', 'size': [(1, 255)], 'type': 'VisibleString'}, {'name': 'min', 'size': [34], 'type': 'BIT ' 'STRING'}, {'name': 'mdn', 'size': [8], 'type': 'OCTET ' 'STRING'}, {'from': [('a', 'z'), ('A', 'Z'), ('0', '9'), ('.', '.'), ('/', '/'), ('-', '-'), ('_', '_'), ('~', '~'), ('%', '%'), ('#', '#')], 'name': 'uri', 'size': [(1, 255)], 'type': 'VisibleString'}, None], 'type': 'CHOICE'}, 'TrackingAreaCode': {'size': [16], 'type': 'BIT STRING'}, 'UTRAN-GANSSReferenceTime': {'members': [{'name': 'ganssTOD', 'restricted-to': [(0, 86399)], 'type': 'INTEGER'}, {'name': 'utran-GANSSTimingOfCell', 'optional': True, 'restricted-to': [(0, 3999999)], 'type': 'INTEGER'}, {'members': [{'members': [{'name': 'referenceIdentity', 'type': 'PrimaryCPICH-Info'}], 'name': 'fdd', 'type': 'SEQUENCE'}, {'members': [{'name': 'referenceIdentity', 'type': 'CellParametersID'}], 'name': 'tdd', 'type': 'SEQUENCE'}], 'name': 'modeSpecificInfo', 'optional': True, 'type': 'CHOICE'}, {'name': 'sfn', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'ganss-TODUncertainty', 'optional': True, 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'UTRAN-GANSSReferenceTimeAssistance': {'members': [{'name': 'ganssDay', 'optional': True, 'restricted-to': [(0, 8191)], 'type': 'INTEGER'}, {'name': 'ganssTimeID', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'utran-GANSSReferenceTime', 'type': 'UTRAN-GANSSReferenceTime'}, {'name': 'utranGANSSDriftRate', 'optional': True, 'type': 'UTRANGANSSDriftRate'}], 'type': 'SEQUENCE'}, 'UTRAN-GANSSReferenceTimeResult': {'members': [{'name': 'ganssTimeID', 'restricted-to': [(0, 15)], 'type': 'INTEGER'}, {'name': 'set-GANSSReferenceTime', 'type': 'SET-GANSSReferenceTime'}, None], 'type': 'SEQUENCE'}, 'UTRAN-GPSReferenceTime': {'members': [{'members': [{'name': 'ms-part', 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'ls-part', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}], 'name': 'utran-GPSTimingOfCell', 'type': 'SEQUENCE'}, {'members': [{'members': [{'name': 'referenceIdentity', 'type': 'PrimaryCPICH-Info'}], 'name': 'fdd', 'type': 'SEQUENCE'}, {'members': [{'name': 'referenceIdentity', 'type': 'CellParametersID'}], 'name': 'tdd', 'type': 'SEQUENCE'}], 'name': 'modeSpecificInfo', 'optional': True, 'type': 'CHOICE'}, {'name': 'sfn', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'UTRAN-GPSReferenceTimeAssistance': {'members': [{'name': 'utran-GPSReferenceTime', 'type': 'UTRAN-GPSReferenceTime'}, {'name': 'gpsReferenceTimeUncertainty', 'optional': True, 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, {'name': 'utranGPSDriftRate', 'optional': True, 'type': 'UTRANGPSDriftRate'}], 'type': 'SEQUENCE'}, 'UTRAN-GPSReferenceTimeResult': {'members': [{'members': [{'name': 'ms-part', 'restricted-to': [(0, 16383)], 'type': 'INTEGER'}, {'name': 'ls-part', 'restricted-to': [(0, 4294967295)], 'type': 'INTEGER'}], 'name': 'set-GPSTimingOfCell', 'type': 'SEQUENCE'}, {'members': [{'members': [{'name': 'referenceIdentity', 'type': 'PrimaryCPICH-Info'}], 'name': 'fdd', 'type': 'SEQUENCE'}, {'members': [{'name': 'referenceIdentity', 'type': 'CellParametersID'}], 'name': 'tdd', 'type': 'SEQUENCE'}], 'name': 'modeSpecificInfo', 'optional': True, 'type': 'CHOICE'}, {'name': 'sfn', 'restricted-to': [(0, 4095)], 'type': 'INTEGER'}, {'name': 'gpsReferenceTimeUncertainty', 'optional': True, 'restricted-to': [(0, 127)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'UTRANGANSSDriftRate': {'type': 'ENUMERATED', 'values': [('utran-GANSSDrift0', 0), ('utran-GANSSDrift1', 1), ('utran-GANSSDrift2', 2), ('utran-GANSSDrift5', 3), ('utran-GANSSDrift10', 4), ('utran-GANSSDrift15', 5), ('utran-GANSSDrift25', 6), ('utran-GANSSDrift50', 7), ('utran-GANSSDrift-1', 8), ('utran-GANSSDrift-2', 9), ('utran-GANSSDrift-5', 10), ('utran-GANSSDrift-10', 11), ('utran-GANSSDrift-15', 12), ('utran-GANSSDrift-25', 13), ('utran-GANSSDrift-50', 14)]}, 'UTRANGPSDriftRate': {'type': 'ENUMERATED', 'values': [('utran-GPSDrift0', 0), ('utran-GPSDrift1', 1), ('utran-GPSDrift2', 2), ('utran-GPSDrift5', 3), ('utran-GPSDrift10', 4), ('utran-GPSDrift15', 5), ('utran-GPSDrift25', 6), ('utran-GPSDrift50', 7), ('utran-GPSDrift-1', 8), ('utran-GPSDrift-2', 9), ('utran-GPSDrift-5', 10), ('utran-GPSDrift-10', 11), ('utran-GPSDrift-15', 12), ('utran-GPSDrift-25', 13), ('utran-GPSDrift-50', 14)]}, 'UmbCellInformation': {'members': [{'name': 'refSECTORID', 'size': [128], 'type': 'BIT ' 'STRING'}, {'name': 'refMCC', 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refMNC', 'restricted-to': [(0, 999)], 'type': 'INTEGER'}, {'name': 'refBASELAT', 'restricted-to': [(0, 4194303)], 'type': 'INTEGER'}, {'name': 'reBASELONG', 'restricted-to': [(0, 8388607)], 'type': 'INTEGER'}, {'name': 'refWeekNumber', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'refSeconds', 'restricted-to': [(0, 4194303)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'Ver2-CellInfo-extension': {'members': [{'name': 'hrpdCell', 'type': 'HrpdCellInformation'}, {'name': 'umbCell', 'type': 'UmbCellInformation'}, {'name': 'lteCell', 'type': 'LteCellInformation'}, {'name': 'wlanAP', 'type': 'WlanAPInformation'}, {'name': 'wimaxBS', 'type': 'WimaxBSInformation'}, None], 'type': 'CHOICE'}, 'WimaxBSInformation': {'members': [{'name': 'wimaxBsID', 'type': 'WimaxBsID'}, {'name': 'wimaxRTD', 'optional': True, 'type': 'WimaxRTD'}, {'name': 'wimaxNMRList', 'optional': True, 'type': 'WimaxNMRList'}, None], 'type': 'SEQUENCE'}, 'WimaxBsID': {'members': [{'name': 'bsID-MSB', 'optional': True, 'size': [24], 'type': 'BIT ' 'STRING'}, {'name': 'bsID-LSB', 'size': [24], 'type': 'BIT ' 'STRING'}, None], 'type': 'SEQUENCE'}, 'WimaxNMR': {'members': [{'name': 'wimaxBsID', 'type': 'WimaxBsID'}, {'name': 'relDelay', 'optional': True, 'restricted-to': [(-32768, 32767)], 'type': 'INTEGER'}, {'name': 'relDelaystd', 'optional': True, 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, {'name': 'rSSI', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'rSSIstd', 'optional': True, 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'bSTxPower', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'cINR', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'cINRstd', 'optional': True, 'restricted-to': [(0, 63)], 'type': 'INTEGER'}, {'name': 'bSLocation', 'optional': True, 'type': 'ReportedLocation'}, None], 'type': 'SEQUENCE'}, 'WimaxNMRList': {'element': {'type': 'WimaxNMR'}, 'size': [(1, 'maxWimaxBSMeas')], 'type': 'SEQUENCE OF'}, 'WimaxRTD': {'members': [{'name': 'rTD', 'restricted-to': [(0, 65535)], 'type': 'INTEGER'}, {'name': 'rTDstd', 'optional': True, 'restricted-to': [(0, 1023)], 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'WlanAPInformation': {'members': [{'name': 'apMACAddress', 'size': [48], 'type': 'BIT ' 'STRING'}, {'name': 'apTransmitPower', 'optional': True, 'restricted-to': [(-127, 128)], 'type': 'INTEGER'}, {'name': 'apAntennaGain', 'optional': True, 'restricted-to': [(-127, 128)], 'type': 'INTEGER'}, {'name': 'apSignaltoNoise', 'optional': True, 'restricted-to': [(-127, 128)], 'type': 'INTEGER'}, {'name': 'apDeviceType', 'optional': True, 'type': 'ENUMERATED', 'values': [('wlan802-11a', 0), ('wlan802-11b', 1), ('wlan802-11g', 2), None, ('wlan802-11n', 3), ('wlan802-11ac', 4), ('wlan802-11ad', 5)]}, {'name': 'apSignalStrength', 'optional': True, 'restricted-to': [(-127, 128)], 'type': 'INTEGER'}, {'name': 'apChannelFrequency', 'optional': True, 'restricted-to': [(0, 256)], 'type': 'INTEGER'}, {'name': 'apRoundTripDelay', 'optional': True, 'type': 'RTD'}, {'name': 'setTransmitPower', 'optional': True, 'restricted-to': [(-127, 128)], 'type': 'INTEGER'}, {'name': 'setAntennaGain', 'optional': True, 'restricted-to': [(-127, 128)], 'type': 'INTEGER'}, {'name': 'setSignaltoNoise', 'optional': True, 'restricted-to': [(-127, 128)], 'type': 'INTEGER'}, {'name': 'setSignalStrength', 'optional': True, 'restricted-to': [(-127, 128)], 'type': 'INTEGER'}, {'name': 'apReportedLocation', 'optional': True, 'type': 'ReportedLocation'}, None, {'name': 'apRepLocation', 'optional': True, 'type': 'RepLocation'}, {'name': 'apSignalStrengthDelta', 'optional': True, 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'apSignaltoNoiseDelta', 'optional': True, 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'setSignalStrengthDelta', 'optional': True, 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'setSignaltoNoiseDelta', 'optional': True, 'restricted-to': [(0, 1)], 'type': 'INTEGER'}, {'name': 'operatingClass', 'optional': True, 'restricted-to': [(0, 255)], 'type': 'INTEGER'}, {'name': 'apSSID', 'optional': True, 'size': [(1, 32)], 'type': 'OCTET ' 'STRING'}, {'name': 'apPHYType', 'optional': True, 'type': 'ENUMERATED', 'values': [('unknown', 0), ('any', 1), ('fhss', 2), ('dsss', 3), ('irbaseband', 4), ('ofdm', 5), ('hrdsss', 6), ('erp', 7), ('ht', 8), ('ihv', 9), None]}, {'name': 'setMACAddress', 'optional': True, 'size': [48], 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}}, 'values': {'maxCellReport': {'type': 'INTEGER', 'value': 8}, 'maxLidSize': {'type': 'INTEGER', 'value': 64}, 'maxWLANApDataSize': {'type': 'INTEGER', 'value': 128}, 'maxWimaxBSMeas': {'type': 'INTEGER', 'value': 32}}}}asn1tools-0.169.0/tests/files/overview_of_oer.asn000066400000000000000000000013441524544274600217770ustar00rootroot00000000000000OverviewOfOer DEFINITIONS AUTOMATIC TAGS ::= BEGIN A ::= SEQUENCE { a1 INTEGER (0..100), a2 INTEGER (-290..399), a3 INTEGER (0..60000) OPTIONAL, a4 INTEGER (-5000000..5000000), a5 INTEGER (1000..MAX), a6 INTEGER (-1..MAX), a7 INTEGER OPTIONAL } a A ::= { a1 4, a2 4, a3 4, --optional and present a4 4, a5 1024, a6 4, a7 4 --optional and present } B ::= SEQUENCE { b1 IA5String (SIZE (0..10)), b2 IA5String (SIZE (3)), b3 IA5String, b4 OCTET STRING, b5 BIT STRING (SIZE (4)), b6 BIT STRING } b B ::= { b1 "ABC", b2 "ABC", b3 "ABC", b4 '01020304'H, b5 '0101'B, b6 '0101'B } C ::= CHOICE { c1 BOOLEAN, c2 SEQUENCE OF ENUMERATED { a, b, c, d, e } } c C ::= c2 : { b, c, d, e } END asn1tools-0.169.0/tests/files/parameterization.asn000066400000000000000000000036061524544274600221610ustar00rootroot00000000000000Parameterization DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS B2, D2, E2, F2 FROM Parameterization2; -- One parameter. A { B } ::= SEQUENCE { a B } A-Boolean ::= A { BOOLEAN } A-Integer ::= A { INTEGER } -- Two parameters. B { A, B } ::= SEQUENCE { a A, b B OPTIONAL } B-BooleanInteger ::= B { BOOLEAN, INTEGER } -- Use a parameterized type (B) within a parameterized type (C). C { A } ::= CHOICE { a A, b B { A, INTEGER } } D ::= SEQUENCE { a C { B-BooleanInteger }, b CHOICE { c A { B { NULL, INTEGER } }, d B { NULL, INTEGER } } } -- SEQUENCE, SEQUENCE OF and CHOICE mixed. E { A } ::= SEQUENCE (SIZE (0..5)) OF CHOICE { a A, b SEQUENCE { c SEQUENCE OF B { A, BOOLEAN } } } F ::= E { INTEGER } -- Value parameter in SIZE. G { INTEGER : a } ::= SEQUENCE (SIZE (0..a)) OF BOOLEAN H ::= G { 5 } i INTEGER ::= 1 I ::= G { i } J { INTEGER : b } ::= SEQUENCE (SIZE (b)) OF BOOLEAN K ::= J { 3 } -- Value parameter in integer range. L { INTEGER : a, INTEGER : b } ::= INTEGER (a..b) M ::= L { 3, 9 } -- Both value and type parameter. N { INTEGER : a, B } ::= B (-5..a) O ::= N { -2, INTEGER } -- Multiple parameterized levels. P { A } ::= SEQUENCE { a A } Q { A } ::= P { A } R ::= Q { INTEGER } -- Use imported type. S ::= B2 { BOOLEAN } A2 ::= BOOLEAN T ::= D2 { OCTET STRING } U ::= E2 { INTEGER } V ::= F2 { INTEGER } END Parameterization2 DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS B3, D3 FROM Parameterization3; A2 ::= INTEGER B2 { A } ::= SEQUENCE { a A, b A2 } C2 ::= INTEGER D2 { A } ::= SEQUENCE { a A, b C2 } E2 { A } ::= SEQUENCE { a A, b B3 { A } } F2 { A } ::= D3 { A } END Parameterization3 DEFINITIONS AUTOMATIC TAGS ::= BEGIN A3 ::= INTEGER B3 { A } ::= SEQUENCE { a A, b A3 } C3 ::= OCTET STRING D3 { A } ::= C3 (CONTAINING A) END asn1tools-0.169.0/tests/files/parameterization.py000066400000000000000000000232661524544274600220340ustar00rootroot00000000000000EXPECTED = {'Parameterization': {'extensibility-implied': False, 'imports': {'Parameterization2': ['B2', 'D2', 'E2', 'F2']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'A': {'members': [{'name': 'a', 'type': 'B'}], 'parameters': ['B'], 'type': 'SEQUENCE'}, 'A-Boolean': {'actual-parameters': [{'type': 'BOOLEAN'}], 'type': 'A'}, 'A-Integer': {'actual-parameters': [{'type': 'INTEGER'}], 'type': 'A'}, 'A2': {'type': 'BOOLEAN'}, 'B': {'members': [{'name': 'a', 'type': 'A'}, {'name': 'b', 'optional': True, 'type': 'B'}], 'parameters': ['A', 'B'], 'type': 'SEQUENCE'}, 'B-BooleanInteger': {'actual-parameters': [{'type': 'BOOLEAN'}, {'type': 'INTEGER'}], 'type': 'B'}, 'C': {'members': [{'name': 'a', 'type': 'A'}, {'actual-parameters': [{'type': 'A'}, {'type': 'INTEGER'}], 'name': 'b', 'type': 'B'}], 'parameters': ['A'], 'type': 'CHOICE'}, 'D': {'members': [{'actual-parameters': [{'type': 'B-BooleanInteger'}], 'name': 'a', 'type': 'C'}, {'members': [{'actual-parameters': [{'actual-parameters': [{'type': 'NULL'}, {'type': 'INTEGER'}], 'type': 'B'}], 'name': 'c', 'type': 'A'}, {'actual-parameters': [{'type': 'NULL'}, {'type': 'INTEGER'}], 'name': 'd', 'type': 'B'}], 'name': 'b', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'E': {'element': {'members': [{'name': 'a', 'type': 'A'}, {'members': [{'element': {'actual-parameters': [{'type': 'A'}, {'type': 'BOOLEAN'}], 'type': 'B'}, 'name': 'c', 'type': 'SEQUENCE ' 'OF'}], 'name': 'b', 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'parameters': ['A'], 'size': [(0, 5)], 'type': 'SEQUENCE OF'}, 'F': {'actual-parameters': [{'type': 'INTEGER'}], 'type': 'E'}, 'G': {'element': {'type': 'BOOLEAN'}, 'parameters': ['a'], 'size': [(0, 'a')], 'type': 'SEQUENCE OF'}, 'H': {'actual-parameters': [5], 'type': 'G'}, 'I': {'actual-parameters': ['i'], 'type': 'G'}, 'J': {'element': {'type': 'BOOLEAN'}, 'parameters': ['b'], 'size': ['b'], 'type': 'SEQUENCE OF'}, 'K': {'actual-parameters': [3], 'type': 'J'}, 'L': {'parameters': ['a', 'b'], 'restricted-to': [('a', 'b')], 'type': 'INTEGER'}, 'M': {'actual-parameters': [3, 9], 'type': 'L'}, 'N': {'parameters': ['a', 'B'], 'restricted-to': [(-5, 'a')], 'type': 'B'}, 'O': {'actual-parameters': [-2, {'type': 'INTEGER'}], 'type': 'N'}, 'P': {'members': [{'name': 'a', 'type': 'A'}], 'parameters': ['A'], 'type': 'SEQUENCE'}, 'Q': {'actual-parameters': [{'type': 'A'}], 'parameters': ['A'], 'type': 'P'}, 'R': {'actual-parameters': [{'type': 'INTEGER'}], 'type': 'Q'}, 'S': {'actual-parameters': [{'type': 'BOOLEAN'}], 'type': 'B2'}, 'T': {'actual-parameters': [{'type': 'OCTET ' 'STRING'}], 'type': 'D2'}, 'U': {'actual-parameters': [{'type': 'INTEGER'}], 'type': 'E2'}, 'V': {'actual-parameters': [{'type': 'INTEGER'}], 'type': 'F2'}}, 'values': {'i': {'type': 'INTEGER', 'value': 1}}}, 'Parameterization2': {'extensibility-implied': False, 'imports': {'Parameterization3': ['B3', 'D3']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'A2': {'type': 'INTEGER'}, 'B2': {'members': [{'name': 'a', 'type': 'A'}, {'name': 'b', 'type': 'A2'}], 'parameters': ['A'], 'type': 'SEQUENCE'}, 'C2': {'type': 'INTEGER'}, 'D2': {'members': [{'name': 'a', 'type': 'A'}, {'name': 'b', 'type': 'C2'}], 'parameters': ['A'], 'type': 'SEQUENCE'}, 'E2': {'members': [{'name': 'a', 'type': 'A'}, {'actual-parameters': [{'type': 'A'}], 'name': 'b', 'type': 'B3'}], 'parameters': ['A'], 'type': 'SEQUENCE'}, 'F2': {'actual-parameters': [{'type': 'A'}], 'parameters': ['A'], 'type': 'D3'}}, 'values': {}}, 'Parameterization3': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'A3': {'type': 'INTEGER'}, 'B3': {'members': [{'name': 'a', 'type': 'A'}, {'name': 'b', 'type': 'A3'}], 'parameters': ['A'], 'type': 'SEQUENCE'}, 'C3': {'type': 'OCTET STRING'}, 'D3': {'parameters': ['A'], 'type': 'C3'}}, 'values': {}}}asn1tools-0.169.0/tests/files/parameterization_pp.py000066400000000000000000000350151524544274600225260ustar00rootroot00000000000000EXPECTED = {'Parameterization': {'extensibility-implied': False, 'imports': {'Parameterization2': ['B2', 'D2', 'E2', 'F2']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'A-Boolean': {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'A-Integer': {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'A2': {'type': 'BOOLEAN'}, 'B-BooleanInteger': {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'BOOLEAN'}, {'name': 'b', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 1}, 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'D': {'members': [{'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'B-BooleanInteger'}, {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'B-BooleanInteger'}, {'name': 'b', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 1}, 'type': 'INTEGER'}], 'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'SEQUENCE'}], 'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'CHOICE'}, {'members': [{'members': [{'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'NULL'}, {'name': 'b', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 1}, 'type': 'INTEGER'}], 'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'SEQUENCE'}], 'name': 'c', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'SEQUENCE'}, {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'NULL'}, {'name': 'b', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 1}, 'type': 'INTEGER'}], 'name': 'd', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'SEQUENCE'}], 'name': 'b', 'tag': {'kind': 'EXPLICIT', 'number': 1}, 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'F': {'element': {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'members': [{'element': {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'name': 'b', 'optional': True, 'tag': {'kind': 'EXPLICIT', 'number': 1}, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'name': 'c', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'SEQUENCE ' 'OF'}], 'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'SEQUENCE'}], 'type': 'CHOICE'}, 'size': [(0, 5)], 'type': 'SEQUENCE OF'}, 'H': {'element': {'type': 'BOOLEAN'}, 'size': [(0, 5)], 'type': 'SEQUENCE OF'}, 'I': {'element': {'type': 'BOOLEAN'}, 'size': [(0, 'i')], 'type': 'SEQUENCE OF'}, 'K': {'element': {'type': 'BOOLEAN'}, 'size': [3], 'type': 'SEQUENCE OF'}, 'M': {'restricted-to': [(3, 9)], 'type': 'INTEGER'}, 'O': {'restricted-to': [(-5, -2)], 'type': 'INTEGER'}, 'R': {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'S': {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'BOOLEAN'}, {'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'A2'}], 'module-name': 'Parameterization2', 'type': 'SEQUENCE'}, 'T': {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'OCTET STRING'}, {'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'C2'}], 'module-name': 'Parameterization2', 'type': 'SEQUENCE'}, 'U': {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'members': [{'name': 'a', 'tag': {'kind': 'EXPLICIT', 'number': 0}, 'type': 'INTEGER'}, {'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'A3'}], 'module-name': 'Parameterization3', 'name': 'b', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'SEQUENCE'}], 'module-name': 'Parameterization2', 'type': 'SEQUENCE'}, 'V': {'module-name': 'Parameterization3', 'type': 'C3'}}, 'values': {'i': {'type': 'INTEGER', 'value': 1}}}, 'Parameterization2': {'extensibility-implied': False, 'imports': {'Parameterization3': ['B3', 'D3']}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'A2': {'type': 'INTEGER'}, 'C2': {'type': 'INTEGER'}}, 'values': {}}, 'Parameterization3': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'A3': {'type': 'INTEGER'}, 'C3': {'type': 'OCTET STRING'}}, 'values': {}}} asn1tools-0.169.0/tests/files/rust_source/000077500000000000000000000000001524544274600204505ustar00rootroot00000000000000asn1tools-0.169.0/tests/files/rust_source/rust_source.asn000066400000000000000000000152641524544274600235400ustar00rootroot00000000000000RustSource DEFINITIONS AUTOMATIC TAGS ::= BEGIN A ::= SEQUENCE { a INTEGER (-128..127), b INTEGER (-32768..32767), c INTEGER (-2147483648..2147483647), d INTEGER (-9223372036854775808..9223372036854775807), e INTEGER (0..255), f INTEGER (0..65535), g INTEGER (0..4294967295), h INTEGER (0..18446744073709551615), i BOOLEAN, j OCTET STRING (SIZE (11)) } B ::= CHOICE { a INTEGER (-128..127), b A, c NULL } C ::= SEQUENCE (SIZE (0..2)) OF B D ::= SEQUENCE (SIZE (1..10)) OF SEQUENCE { a SEQUENCE { b CHOICE { c INTEGER (0..1), d BOOLEAN }, e SEQUENCE (SIZE (3..4)) OF NULL, f NULL }, g SEQUENCE { h ENUMERATED { i, j, k }, l OCTET STRING (SIZE (1..2)) }, m SEQUENCE { n BOOLEAN OPTIONAL, o INTEGER (-2..4) DEFAULT 3, p SEQUENCE { q OCTET STRING (SIZE (5)), r BOOLEAN OPTIONAL } OPTIONAL } } E ::= SEQUENCE { a CHOICE { b CHOICE { c BOOLEAN } } } F ::= SEQUENCE (SIZE (1..2)) OF SEQUENCE (SIZE (1)) OF BOOLEAN G ::= SEQUENCE { a BOOLEAN OPTIONAL, b BOOLEAN OPTIONAL, c BOOLEAN OPTIONAL, d BOOLEAN OPTIONAL, e BOOLEAN OPTIONAL, f BOOLEAN OPTIONAL, g BOOLEAN OPTIONAL, h BOOLEAN OPTIONAL, i BOOLEAN OPTIONAL } H ::= NULL I ::= OCTET STRING (SIZE (24)) J ::= OCTET STRING (SIZE (22..23)) K ::= ENUMERATED { a } L ::= OCTET STRING (SIZE (0..500)) M ::= SEQUENCE { a K, b N } N ::= SEQUENCE { a K, b A, c O } O ::= SEQUENCE (SIZE (1..260)) OF BOOLEAN P ::= SEQUENCE { a A, b M, c F } Q ::= CHOICE { c001 BOOLEAN, c002 BOOLEAN, c003 BOOLEAN, c004 BOOLEAN, c005 BOOLEAN, c006 BOOLEAN, c007 BOOLEAN, c008 BOOLEAN, c009 BOOLEAN, c010 BOOLEAN, c011 BOOLEAN, c012 BOOLEAN, c013 BOOLEAN, c014 BOOLEAN, c015 BOOLEAN, c016 BOOLEAN, c017 BOOLEAN, c018 BOOLEAN, c019 BOOLEAN, c020 BOOLEAN, c021 BOOLEAN, c022 BOOLEAN, c023 BOOLEAN, c024 BOOLEAN, c025 BOOLEAN, c026 BOOLEAN, c027 BOOLEAN, c028 BOOLEAN, c029 BOOLEAN, c030 BOOLEAN, c031 BOOLEAN, c032 BOOLEAN, c033 BOOLEAN, c034 BOOLEAN, c035 BOOLEAN, c036 BOOLEAN, c037 BOOLEAN, c038 BOOLEAN, c039 BOOLEAN, c040 BOOLEAN, c041 BOOLEAN, c042 BOOLEAN, c043 BOOLEAN, c044 BOOLEAN, c045 BOOLEAN, c046 BOOLEAN, c047 BOOLEAN, c048 BOOLEAN, c049 BOOLEAN, c050 BOOLEAN, c051 BOOLEAN, c052 BOOLEAN, c053 BOOLEAN, c054 BOOLEAN, c055 BOOLEAN, c056 BOOLEAN, c057 BOOLEAN, c058 BOOLEAN, c059 BOOLEAN, c060 BOOLEAN, c061 BOOLEAN, c062 BOOLEAN, c063 BOOLEAN, c064 BOOLEAN, c065 BOOLEAN, c066 BOOLEAN, c067 BOOLEAN, c068 BOOLEAN, c069 BOOLEAN, c070 BOOLEAN, c071 BOOLEAN, c072 BOOLEAN, c073 BOOLEAN, c074 BOOLEAN, c075 BOOLEAN, c076 BOOLEAN, c077 BOOLEAN, c078 BOOLEAN, c079 BOOLEAN, c080 BOOLEAN, c081 BOOLEAN, c082 BOOLEAN, c083 BOOLEAN, c084 BOOLEAN, c085 BOOLEAN, c086 BOOLEAN, c087 BOOLEAN, c088 BOOLEAN, c089 BOOLEAN, c090 BOOLEAN, c091 BOOLEAN, c092 BOOLEAN, c093 BOOLEAN, c094 BOOLEAN, c095 BOOLEAN, c096 BOOLEAN, c097 BOOLEAN, c098 BOOLEAN, c099 BOOLEAN, c100 BOOLEAN, c101 BOOLEAN, c102 BOOLEAN, c103 BOOLEAN, c104 BOOLEAN, c105 BOOLEAN, c106 BOOLEAN, c107 BOOLEAN, c108 BOOLEAN, c109 BOOLEAN, c110 BOOLEAN, c111 BOOLEAN, c112 BOOLEAN, c113 BOOLEAN, c114 BOOLEAN, c115 BOOLEAN, c116 BOOLEAN, c117 BOOLEAN, c118 BOOLEAN, c119 BOOLEAN, c120 BOOLEAN, c121 BOOLEAN, c122 BOOLEAN, c123 BOOLEAN, c124 BOOLEAN, c125 BOOLEAN, c126 BOOLEAN, c127 BOOLEAN, c128 BOOLEAN, c129 BOOLEAN, c130 BOOLEAN, c131 BOOLEAN, c132 BOOLEAN, c133 BOOLEAN, c134 BOOLEAN, c135 BOOLEAN, c136 BOOLEAN, c137 BOOLEAN, c138 BOOLEAN, c139 BOOLEAN, c140 BOOLEAN, c141 BOOLEAN, c142 BOOLEAN, c143 BOOLEAN, c144 BOOLEAN, c145 BOOLEAN, c146 BOOLEAN, c147 BOOLEAN, c148 BOOLEAN, c149 BOOLEAN, c150 BOOLEAN, c151 BOOLEAN, c152 BOOLEAN, c153 BOOLEAN, c154 BOOLEAN, c155 BOOLEAN, c156 BOOLEAN, c157 BOOLEAN, c158 BOOLEAN, c159 BOOLEAN, c160 BOOLEAN, c161 BOOLEAN, c162 BOOLEAN, c163 BOOLEAN, c164 BOOLEAN, c165 BOOLEAN, c166 BOOLEAN, c167 BOOLEAN, c168 BOOLEAN, c169 BOOLEAN, c170 BOOLEAN, c171 BOOLEAN, c172 BOOLEAN, c173 BOOLEAN, c174 BOOLEAN, c175 BOOLEAN, c176 BOOLEAN, c177 BOOLEAN, c178 BOOLEAN, c179 BOOLEAN, c180 BOOLEAN, c181 BOOLEAN, c182 BOOLEAN, c183 BOOLEAN, c184 BOOLEAN, c185 BOOLEAN, c186 BOOLEAN, c187 BOOLEAN, c188 BOOLEAN, c189 BOOLEAN, c190 BOOLEAN, c191 BOOLEAN, c192 BOOLEAN, c193 BOOLEAN, c194 BOOLEAN, c195 BOOLEAN, c196 BOOLEAN, c197 BOOLEAN, c198 BOOLEAN, c199 BOOLEAN, c200 BOOLEAN, c201 BOOLEAN, c202 BOOLEAN, c203 BOOLEAN, c204 BOOLEAN, c205 BOOLEAN, c206 BOOLEAN, c207 BOOLEAN, c208 BOOLEAN, c209 BOOLEAN, c210 BOOLEAN, c211 BOOLEAN, c212 BOOLEAN, c213 BOOLEAN, c214 BOOLEAN, c215 BOOLEAN, c216 BOOLEAN, c217 BOOLEAN, c218 BOOLEAN, c219 BOOLEAN, c220 BOOLEAN, c221 BOOLEAN, c222 BOOLEAN, c223 BOOLEAN, c224 BOOLEAN, c225 BOOLEAN, c226 BOOLEAN, c227 BOOLEAN, c228 BOOLEAN, c229 BOOLEAN, c230 BOOLEAN, c231 BOOLEAN, c232 BOOLEAN, c233 BOOLEAN, c234 BOOLEAN, c235 BOOLEAN, c236 BOOLEAN, c237 BOOLEAN, c238 BOOLEAN, c239 BOOLEAN, c240 BOOLEAN, c241 BOOLEAN, c242 BOOLEAN, c243 BOOLEAN, c244 BOOLEAN, c245 BOOLEAN, c246 BOOLEAN, c247 BOOLEAN, c248 BOOLEAN, c249 BOOLEAN, c250 BOOLEAN, c251 BOOLEAN, c252 BOOLEAN, c253 BOOLEAN, c254 BOOLEAN, c255 BOOLEAN, c256 BOOLEAN, c257 BOOLEAN } -- 1 bit signed R ::= INTEGER (-1..0) -- 2 bits signed S ::= INTEGER (-2..1) T ::= INTEGER (-1..2) -- 7 bits signed U ::= INTEGER (-64..63) -- 8 bits signed V ::= INTEGER (-128..127) -- 9 bits signed W ::= INTEGER (-1..510) -- 10 bits signed X ::= INTEGER (-2..510) -- 10 bits unsigned Y ::= INTEGER (10000..10512) Z ::= BOOLEAN -- Parameterization AA {Param1, Param2} ::= SEQUENCE { a Param1, b Param2 } AB ::= AA { R, Y } AC ::= AA { Q, D } END asn1tools-0.169.0/tests/files/rust_source/rust_source.rs000066400000000000000000003533041524544274600234030ustar00rootroot00000000000000//! This file was generated by asn1tools version 0.145.3 Thu Jan 31 06:24:48 2019. #[derive(Debug, PartialEq, Copy, Clone)] pub enum Error { BadChoice, BadEnum, BadLength, OutOfData, OutOfMemory } struct Encoder<'a> { buf: &'a mut [u8], size: usize, pos: usize, error: Option } struct Decoder<'a> { buf: &'a[u8], size: usize, pos: usize, error: Option } impl<'a> Encoder<'a> { fn new(dst: &'a mut [u8]) -> Encoder { Encoder { size: 8 * dst.len(), buf: dst, pos: 0, error: None } } fn get_result(&self) -> Result { if self.error.is_none() { return Ok((self.pos + 7) / 8); } else { return Err(self.error.unwrap()); } } fn abort(&mut self, error: Error) { if self.error.is_none() { self.error = Some(error); } } fn alloc(&mut self, size: usize) -> Result { if self.pos + size <= self.size { let pos = self.pos; self.pos += size; Ok(pos) } else { self.abort(Error::OutOfMemory); Err(()) } } fn append_bit(&mut self, value: u8) { if let Ok(pos) = self.alloc(1) { if pos % 8 == 0 { self.buf[pos / 8] = 0; } self.buf[pos / 8] |= value << (7 - (pos % 8)); } } fn append_bytes(&mut self, buf: &[u8]) { if let Ok(pos) = self.alloc(8 * buf.len()) { let byte_pos = pos / 8; let pos_in_byte = pos % 8; if pos_in_byte == 0 { self.buf.get_mut(byte_pos..byte_pos + buf.len()) .unwrap() .copy_from_slice(buf.get(0..buf.len()).unwrap()); } else { for i in 0..buf.len() { self.buf[byte_pos + i] |= buf[i] >> pos_in_byte; self.buf[byte_pos + i + 1] = buf[i] << (8 - pos_in_byte); } } } } fn append_u8(&mut self, value: u8) { self.append_bytes(&value.to_be_bytes()); } fn append_u16(&mut self, value: u16) { self.append_bytes(&value.to_be_bytes()); } fn append_u32(&mut self, value: u32) { self.append_bytes(&value.to_be_bytes()); } fn append_u64(&mut self, value: u64) { self.append_bytes(&value.to_be_bytes()); } fn append_i8(&mut self, value: i8) { self.append_u8((value as u8).wrapping_add(128)); } fn append_i16(&mut self, value: i16) { self.append_u16((value as u16).wrapping_add(32768)); } fn append_i32(&mut self, value: i32) { self.append_u32((value as u32).wrapping_add(2147483648)); } fn append_i64(&mut self, value: i64) { self.append_u64((value as u64).wrapping_add(9223372036854775808)); } fn append_bool(&mut self, value: bool) { self.append_bit(value as u8); } fn append_non_negative_binary_integer(&mut self, value: u64, size: usize) { for i in 0..size { self.append_bit((value >> (size - i - 1)) as u8 & 1); } } } impl<'a> Decoder<'a> { fn new(src: &'a[u8]) -> Decoder { Decoder { buf: src, size: 8 * src.len(), pos: 0, error: None } } fn get_result(&self) -> Result { if self.error.is_none() { Ok((self.pos + 7) / 8) } else { Err(self.error.unwrap()) } } fn abort(&mut self, error: Error) { if self.error.is_none() { self.error = Some(error); } } fn free(&mut self, size: usize) -> Result { if self.pos + size <= self.size { let pos = self.pos; self.pos += size; Ok(pos) } else { self.abort(Error::OutOfData); Err(()) } } fn read_bit(&mut self) -> u8 { if let Ok(pos) = self.free(1) { (self.buf[pos / 8] >> (7 - (pos % 8))) & 1 } else { 0 } } fn read_bytes(&mut self, buf: &mut [u8]) { if let Ok(pos) = self.free(8 * buf.len()) { let byte_pos = pos / 8; let pos_in_byte = pos % 8; if pos_in_byte == 0 { buf.copy_from_slice( self.buf.get(byte_pos..byte_pos + buf.len()).unwrap()); } else { for i in 0..buf.len() { buf[i] = self.buf[byte_pos + i] << pos_in_byte; buf[i] |= self.buf[byte_pos + i + 1] >> (8 - pos_in_byte); } } } } fn read_u8(&mut self) -> u8 { let mut buf = [0; 1]; self.read_bytes(&mut buf); u8::from_be_bytes(buf) } fn read_u16(&mut self) -> u16 { let mut buf = [0; 2]; self.read_bytes(&mut buf); u16::from_be_bytes(buf) } fn read_u32(&mut self) -> u32 { let mut buf = [0; 4]; self.read_bytes(&mut buf); u32::from_be_bytes(buf) } fn read_u64(&mut self) -> u64 { let mut buf = [0; 8]; self.read_bytes(&mut buf); u64::from_be_bytes(buf) } fn read_i8(&mut self) -> i8 { self.read_u8().wrapping_sub(128) as i8 } fn read_i16(&mut self) -> i16 { self.read_u16().wrapping_sub(32768) as i16 } fn read_i32(&mut self) -> i32 { self.read_u32().wrapping_sub(2147483648) as i32 } fn read_i64(&mut self) -> i64 { self.read_u64().wrapping_sub(9223372036854775808) as i64 } fn read_bool(&mut self) -> bool { self.read_bit() != 0 } fn read_non_negative_binary_integer(&mut self, size: usize) -> u64 { let mut value: u64 = 0; for _ in 0..size { value <<= 1; value |= self.read_bit() as u64; } value } } /// Type A in module RustSource. #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceAJ { pub buf: [u8; 11] } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceA { pub a: i8, pub b: i16, pub c: i32, pub d: i64, pub e: u8, pub f: u16, pub g: u32, pub h: u64, pub i: bool, pub j: RustSourceAJ } impl RustSourceA { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_i8(self.a); encoder.append_i16(self.b); encoder.append_i32(self.c); encoder.append_i64(self.d); encoder.append_u8(self.e); encoder.append_u16(self.f); encoder.append_u32(self.g); encoder.append_u64(self.h); encoder.append_bool(self.i); encoder.append_bytes(&self.j.buf); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.a = decoder.read_i8(); self.b = decoder.read_i16(); self.c = decoder.read_i32(); self.d = decoder.read_i64(); self.e = decoder.read_u8(); self.f = decoder.read_u16(); self.g = decoder.read_u32(); self.h = decoder.read_u64(); self.i = decoder.read_bool(); decoder.read_bytes(&mut self.j.buf); } } /// Type AB in module RustSource. #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceAB { pub a: i8, pub b: u16 } impl RustSourceAB { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.a - -1) as u64, 1); encoder.append_non_negative_binary_integer( (self.b - 10000) as u64, 10); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.a = decoder.read_non_negative_binary_integer(1) as i8; self.a += -1; self.b = decoder.read_non_negative_binary_integer(10) as u16; self.b += 10000; } } /// Type D in module RustSource. let length: u8; #[derive(Debug, PartialEq, Copy, Clone)] pub enum RustSourceDElemAB { C(u8), D(bool) } struct { let length: u8; } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemA { pub b: RustSourceDElemAB, pub e: RustSourceDElemAE } #[derive(Debug, PartialEq, Copy, Clone)] pub enum RustSourceDElemGH { I, J, K, } impl Default for RustSourceDElemGH { fn default() -> Self { RustSourceDElemGH::I } } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemGL { let length: u8; pub buf: [u8; 2] } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemG { pub h: RustSourceDElemGH, pub l: RustSourceDElemGL } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemMPQ { pub buf: [u8; 5] } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemMP { pub q: RustSourceDElemMPQ, pub is_r_present: bool, pub r: bool } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemM { pub is_n_present: bool, pub n: bool, pub o: i8, pub is_p_present: bool, pub p: RustSourceDElemMP } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElem { pub a: RustSourceDElemA, pub g: RustSourceDElemG, pub m: RustSourceDElemM } elements[10]; impl RustSourceD { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.length - 1) as u64, 4); for i in 0..self.length { match self { C(choice) => { encoder.append_non_negative_binary_integer(0, 1); encoder.append_non_negative_binary_integer( (self.elements[i].a.b.c - 0) as u64, 1); }, D(choice) => { encoder.append_non_negative_binary_integer(1, 1); encoder.append_bool(self.elements[i].a.b.d); }, _ => encoder.abort(Error::BadChoice); } encoder.append_non_negative_binary_integer( (self.elements[i].a.e.length - 3) as u64, 1); for i_2 in 0..self.elements[i].a.e.length { } encoder.append_non_negative_binary_integer(self.elements[i].g.h, 2); encoder.append_non_negative_binary_integer( (self.elements[i].g.l.length - 1) as u64, 1); encoder.append_bytes(&self.elements[i].g.l.buf, self.elements[i].g.l.length); encoder.append_bit(self.elements[i].m.is_n_present as u8); encoder.append_bit((self.elements[i].m.o != 3) as u8); encoder.append_bit(self.elements[i].m.is_p_present as u8); if src.elements[i].m.is_n_present { encoder.append_bool(self.elements[i].m.n); } if src.elements[i].m.o != 3 { encoder.append_non_negative_binary_integer( (self.elements[i].m.o - -2) as u64, 3); } if src.elements[i].m.is_p_present { encoder.append_bit(self.elements[i].m.p.is_r_present as u8); encoder.append_bytes(&self.elements[i].m.p.q.buf); if src.elements[i].m.p.is_r_present { encoder.append_bool(self.elements[i].m.p.r); } } } } fn decode_inner(&mut self, decoder: &mut Decoder) { self.length = decoder.read_non_negative_binary_integer(4); self.length += 1; if self.length > 10 { decoder.abort(Error::BadLength); return; } for i in 0..self.length { match decoder.read_non_negative_binary_integer(1) { 0 => { self.elements[i].a.b.choice = RustSourceDABC; self.elements[i].a.b.c = decoder.read_non_negative_binary_integer(1) as u8; self.elements[i].a.b.c += 0; }, 1 => { self.elements[i].a.b.choice = RustSourceDABD; self.elements[i].a.b.d = decoder.read_bool(); }, _ => decoder.abort(Error::BadChoice); } self.elements[i].a.e.length = decoder.read_non_negative_binary_integer(1); self.elements[i].a.e.length += 3; for i_2 in 0..self.elements[i].a.e.length { } self.elements[i].g.h = decoder.read_non_negative_binary_integer(2); self.elements[i].g.l.length = decoder.read_non_negative_binary_integer( 1); self.elements[i].g.l.length += 1; decoder.read_bytes(&mut self.elements[i].g.l.buf, self.elements[i].g.l.length); self.elements[i].m.is_n_present = decoder.read_bit() != 0; is_present = decoder.read_bit() == 1; self.elements[i].m.is_p_present = decoder.read_bit() != 0; if dst.elements[i].m.is_n_present { self.elements[i].m.n = decoder.read_bool(); } if is_present { self.elements[i].m.o = decoder.read_non_negative_binary_integer(3) as i8; self.elements[i].m.o += -2; } else { dst.elements[i].m.o = 3; } if dst.elements[i].m.is_p_present { self.elements[i].m.p.is_r_present = decoder.read_bit() != 0; decoder.read_bytes(&mut self.elements[i].m.p.q.buf); if dst.elements[i].m.p.is_r_present { self.elements[i].m.p.r = decoder.read_bool(); } } } } } /// Type Q in module RustSource. #[derive(Debug, PartialEq, Copy, Clone)] pub enum RustSourceQ { C001(bool), C002(bool), C003(bool), C004(bool), C005(bool), C006(bool), C007(bool), C008(bool), C009(bool), C010(bool), C011(bool), C012(bool), C013(bool), C014(bool), C015(bool), C016(bool), C017(bool), C018(bool), C019(bool), C020(bool), C021(bool), C022(bool), C023(bool), C024(bool), C025(bool), C026(bool), C027(bool), C028(bool), C029(bool), C030(bool), C031(bool), C032(bool), C033(bool), C034(bool), C035(bool), C036(bool), C037(bool), C038(bool), C039(bool), C040(bool), C041(bool), C042(bool), C043(bool), C044(bool), C045(bool), C046(bool), C047(bool), C048(bool), C049(bool), C050(bool), C051(bool), C052(bool), C053(bool), C054(bool), C055(bool), C056(bool), C057(bool), C058(bool), C059(bool), C060(bool), C061(bool), C062(bool), C063(bool), C064(bool), C065(bool), C066(bool), C067(bool), C068(bool), C069(bool), C070(bool), C071(bool), C072(bool), C073(bool), C074(bool), C075(bool), C076(bool), C077(bool), C078(bool), C079(bool), C080(bool), C081(bool), C082(bool), C083(bool), C084(bool), C085(bool), C086(bool), C087(bool), C088(bool), C089(bool), C090(bool), C091(bool), C092(bool), C093(bool), C094(bool), C095(bool), C096(bool), C097(bool), C098(bool), C099(bool), C100(bool), C101(bool), C102(bool), C103(bool), C104(bool), C105(bool), C106(bool), C107(bool), C108(bool), C109(bool), C110(bool), C111(bool), C112(bool), C113(bool), C114(bool), C115(bool), C116(bool), C117(bool), C118(bool), C119(bool), C120(bool), C121(bool), C122(bool), C123(bool), C124(bool), C125(bool), C126(bool), C127(bool), C128(bool), C129(bool), C130(bool), C131(bool), C132(bool), C133(bool), C134(bool), C135(bool), C136(bool), C137(bool), C138(bool), C139(bool), C140(bool), C141(bool), C142(bool), C143(bool), C144(bool), C145(bool), C146(bool), C147(bool), C148(bool), C149(bool), C150(bool), C151(bool), C152(bool), C153(bool), C154(bool), C155(bool), C156(bool), C157(bool), C158(bool), C159(bool), C160(bool), C161(bool), C162(bool), C163(bool), C164(bool), C165(bool), C166(bool), C167(bool), C168(bool), C169(bool), C170(bool), C171(bool), C172(bool), C173(bool), C174(bool), C175(bool), C176(bool), C177(bool), C178(bool), C179(bool), C180(bool), C181(bool), C182(bool), C183(bool), C184(bool), C185(bool), C186(bool), C187(bool), C188(bool), C189(bool), C190(bool), C191(bool), C192(bool), C193(bool), C194(bool), C195(bool), C196(bool), C197(bool), C198(bool), C199(bool), C200(bool), C201(bool), C202(bool), C203(bool), C204(bool), C205(bool), C206(bool), C207(bool), C208(bool), C209(bool), C210(bool), C211(bool), C212(bool), C213(bool), C214(bool), C215(bool), C216(bool), C217(bool), C218(bool), C219(bool), C220(bool), C221(bool), C222(bool), C223(bool), C224(bool), C225(bool), C226(bool), C227(bool), C228(bool), C229(bool), C230(bool), C231(bool), C232(bool), C233(bool), C234(bool), C235(bool), C236(bool), C237(bool), C238(bool), C239(bool), C240(bool), C241(bool), C242(bool), C243(bool), C244(bool), C245(bool), C246(bool), C247(bool), C248(bool), C249(bool), C250(bool), C251(bool), C252(bool), C253(bool), C254(bool), C255(bool), C256(bool), C257(bool) } impl RustSourceQ { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { match self { C001(choice) => { encoder.append_non_negative_binary_integer(0, 9); encoder.append_bool(self.c001); }, C002(choice) => { encoder.append_non_negative_binary_integer(1, 9); encoder.append_bool(self.c002); }, C003(choice) => { encoder.append_non_negative_binary_integer(2, 9); encoder.append_bool(self.c003); }, C004(choice) => { encoder.append_non_negative_binary_integer(3, 9); encoder.append_bool(self.c004); }, C005(choice) => { encoder.append_non_negative_binary_integer(4, 9); encoder.append_bool(self.c005); }, C006(choice) => { encoder.append_non_negative_binary_integer(5, 9); encoder.append_bool(self.c006); }, C007(choice) => { encoder.append_non_negative_binary_integer(6, 9); encoder.append_bool(self.c007); }, C008(choice) => { encoder.append_non_negative_binary_integer(7, 9); encoder.append_bool(self.c008); }, C009(choice) => { encoder.append_non_negative_binary_integer(8, 9); encoder.append_bool(self.c009); }, C010(choice) => { encoder.append_non_negative_binary_integer(9, 9); encoder.append_bool(self.c010); }, C011(choice) => { encoder.append_non_negative_binary_integer(10, 9); encoder.append_bool(self.c011); }, C012(choice) => { encoder.append_non_negative_binary_integer(11, 9); encoder.append_bool(self.c012); }, C013(choice) => { encoder.append_non_negative_binary_integer(12, 9); encoder.append_bool(self.c013); }, C014(choice) => { encoder.append_non_negative_binary_integer(13, 9); encoder.append_bool(self.c014); }, C015(choice) => { encoder.append_non_negative_binary_integer(14, 9); encoder.append_bool(self.c015); }, C016(choice) => { encoder.append_non_negative_binary_integer(15, 9); encoder.append_bool(self.c016); }, C017(choice) => { encoder.append_non_negative_binary_integer(16, 9); encoder.append_bool(self.c017); }, C018(choice) => { encoder.append_non_negative_binary_integer(17, 9); encoder.append_bool(self.c018); }, C019(choice) => { encoder.append_non_negative_binary_integer(18, 9); encoder.append_bool(self.c019); }, C020(choice) => { encoder.append_non_negative_binary_integer(19, 9); encoder.append_bool(self.c020); }, C021(choice) => { encoder.append_non_negative_binary_integer(20, 9); encoder.append_bool(self.c021); }, C022(choice) => { encoder.append_non_negative_binary_integer(21, 9); encoder.append_bool(self.c022); }, C023(choice) => { encoder.append_non_negative_binary_integer(22, 9); encoder.append_bool(self.c023); }, C024(choice) => { encoder.append_non_negative_binary_integer(23, 9); encoder.append_bool(self.c024); }, C025(choice) => { encoder.append_non_negative_binary_integer(24, 9); encoder.append_bool(self.c025); }, C026(choice) => { encoder.append_non_negative_binary_integer(25, 9); encoder.append_bool(self.c026); }, C027(choice) => { encoder.append_non_negative_binary_integer(26, 9); encoder.append_bool(self.c027); }, C028(choice) => { encoder.append_non_negative_binary_integer(27, 9); encoder.append_bool(self.c028); }, C029(choice) => { encoder.append_non_negative_binary_integer(28, 9); encoder.append_bool(self.c029); }, C030(choice) => { encoder.append_non_negative_binary_integer(29, 9); encoder.append_bool(self.c030); }, C031(choice) => { encoder.append_non_negative_binary_integer(30, 9); encoder.append_bool(self.c031); }, C032(choice) => { encoder.append_non_negative_binary_integer(31, 9); encoder.append_bool(self.c032); }, C033(choice) => { encoder.append_non_negative_binary_integer(32, 9); encoder.append_bool(self.c033); }, C034(choice) => { encoder.append_non_negative_binary_integer(33, 9); encoder.append_bool(self.c034); }, C035(choice) => { encoder.append_non_negative_binary_integer(34, 9); encoder.append_bool(self.c035); }, C036(choice) => { encoder.append_non_negative_binary_integer(35, 9); encoder.append_bool(self.c036); }, C037(choice) => { encoder.append_non_negative_binary_integer(36, 9); encoder.append_bool(self.c037); }, C038(choice) => { encoder.append_non_negative_binary_integer(37, 9); encoder.append_bool(self.c038); }, C039(choice) => { encoder.append_non_negative_binary_integer(38, 9); encoder.append_bool(self.c039); }, C040(choice) => { encoder.append_non_negative_binary_integer(39, 9); encoder.append_bool(self.c040); }, C041(choice) => { encoder.append_non_negative_binary_integer(40, 9); encoder.append_bool(self.c041); }, C042(choice) => { encoder.append_non_negative_binary_integer(41, 9); encoder.append_bool(self.c042); }, C043(choice) => { encoder.append_non_negative_binary_integer(42, 9); encoder.append_bool(self.c043); }, C044(choice) => { encoder.append_non_negative_binary_integer(43, 9); encoder.append_bool(self.c044); }, C045(choice) => { encoder.append_non_negative_binary_integer(44, 9); encoder.append_bool(self.c045); }, C046(choice) => { encoder.append_non_negative_binary_integer(45, 9); encoder.append_bool(self.c046); }, C047(choice) => { encoder.append_non_negative_binary_integer(46, 9); encoder.append_bool(self.c047); }, C048(choice) => { encoder.append_non_negative_binary_integer(47, 9); encoder.append_bool(self.c048); }, C049(choice) => { encoder.append_non_negative_binary_integer(48, 9); encoder.append_bool(self.c049); }, C050(choice) => { encoder.append_non_negative_binary_integer(49, 9); encoder.append_bool(self.c050); }, C051(choice) => { encoder.append_non_negative_binary_integer(50, 9); encoder.append_bool(self.c051); }, C052(choice) => { encoder.append_non_negative_binary_integer(51, 9); encoder.append_bool(self.c052); }, C053(choice) => { encoder.append_non_negative_binary_integer(52, 9); encoder.append_bool(self.c053); }, C054(choice) => { encoder.append_non_negative_binary_integer(53, 9); encoder.append_bool(self.c054); }, C055(choice) => { encoder.append_non_negative_binary_integer(54, 9); encoder.append_bool(self.c055); }, C056(choice) => { encoder.append_non_negative_binary_integer(55, 9); encoder.append_bool(self.c056); }, C057(choice) => { encoder.append_non_negative_binary_integer(56, 9); encoder.append_bool(self.c057); }, C058(choice) => { encoder.append_non_negative_binary_integer(57, 9); encoder.append_bool(self.c058); }, C059(choice) => { encoder.append_non_negative_binary_integer(58, 9); encoder.append_bool(self.c059); }, C060(choice) => { encoder.append_non_negative_binary_integer(59, 9); encoder.append_bool(self.c060); }, C061(choice) => { encoder.append_non_negative_binary_integer(60, 9); encoder.append_bool(self.c061); }, C062(choice) => { encoder.append_non_negative_binary_integer(61, 9); encoder.append_bool(self.c062); }, C063(choice) => { encoder.append_non_negative_binary_integer(62, 9); encoder.append_bool(self.c063); }, C064(choice) => { encoder.append_non_negative_binary_integer(63, 9); encoder.append_bool(self.c064); }, C065(choice) => { encoder.append_non_negative_binary_integer(64, 9); encoder.append_bool(self.c065); }, C066(choice) => { encoder.append_non_negative_binary_integer(65, 9); encoder.append_bool(self.c066); }, C067(choice) => { encoder.append_non_negative_binary_integer(66, 9); encoder.append_bool(self.c067); }, C068(choice) => { encoder.append_non_negative_binary_integer(67, 9); encoder.append_bool(self.c068); }, C069(choice) => { encoder.append_non_negative_binary_integer(68, 9); encoder.append_bool(self.c069); }, C070(choice) => { encoder.append_non_negative_binary_integer(69, 9); encoder.append_bool(self.c070); }, C071(choice) => { encoder.append_non_negative_binary_integer(70, 9); encoder.append_bool(self.c071); }, C072(choice) => { encoder.append_non_negative_binary_integer(71, 9); encoder.append_bool(self.c072); }, C073(choice) => { encoder.append_non_negative_binary_integer(72, 9); encoder.append_bool(self.c073); }, C074(choice) => { encoder.append_non_negative_binary_integer(73, 9); encoder.append_bool(self.c074); }, C075(choice) => { encoder.append_non_negative_binary_integer(74, 9); encoder.append_bool(self.c075); }, C076(choice) => { encoder.append_non_negative_binary_integer(75, 9); encoder.append_bool(self.c076); }, C077(choice) => { encoder.append_non_negative_binary_integer(76, 9); encoder.append_bool(self.c077); }, C078(choice) => { encoder.append_non_negative_binary_integer(77, 9); encoder.append_bool(self.c078); }, C079(choice) => { encoder.append_non_negative_binary_integer(78, 9); encoder.append_bool(self.c079); }, C080(choice) => { encoder.append_non_negative_binary_integer(79, 9); encoder.append_bool(self.c080); }, C081(choice) => { encoder.append_non_negative_binary_integer(80, 9); encoder.append_bool(self.c081); }, C082(choice) => { encoder.append_non_negative_binary_integer(81, 9); encoder.append_bool(self.c082); }, C083(choice) => { encoder.append_non_negative_binary_integer(82, 9); encoder.append_bool(self.c083); }, C084(choice) => { encoder.append_non_negative_binary_integer(83, 9); encoder.append_bool(self.c084); }, C085(choice) => { encoder.append_non_negative_binary_integer(84, 9); encoder.append_bool(self.c085); }, C086(choice) => { encoder.append_non_negative_binary_integer(85, 9); encoder.append_bool(self.c086); }, C087(choice) => { encoder.append_non_negative_binary_integer(86, 9); encoder.append_bool(self.c087); }, C088(choice) => { encoder.append_non_negative_binary_integer(87, 9); encoder.append_bool(self.c088); }, C089(choice) => { encoder.append_non_negative_binary_integer(88, 9); encoder.append_bool(self.c089); }, C090(choice) => { encoder.append_non_negative_binary_integer(89, 9); encoder.append_bool(self.c090); }, C091(choice) => { encoder.append_non_negative_binary_integer(90, 9); encoder.append_bool(self.c091); }, C092(choice) => { encoder.append_non_negative_binary_integer(91, 9); encoder.append_bool(self.c092); }, C093(choice) => { encoder.append_non_negative_binary_integer(92, 9); encoder.append_bool(self.c093); }, C094(choice) => { encoder.append_non_negative_binary_integer(93, 9); encoder.append_bool(self.c094); }, C095(choice) => { encoder.append_non_negative_binary_integer(94, 9); encoder.append_bool(self.c095); }, C096(choice) => { encoder.append_non_negative_binary_integer(95, 9); encoder.append_bool(self.c096); }, C097(choice) => { encoder.append_non_negative_binary_integer(96, 9); encoder.append_bool(self.c097); }, C098(choice) => { encoder.append_non_negative_binary_integer(97, 9); encoder.append_bool(self.c098); }, C099(choice) => { encoder.append_non_negative_binary_integer(98, 9); encoder.append_bool(self.c099); }, C100(choice) => { encoder.append_non_negative_binary_integer(99, 9); encoder.append_bool(self.c100); }, C101(choice) => { encoder.append_non_negative_binary_integer(100, 9); encoder.append_bool(self.c101); }, C102(choice) => { encoder.append_non_negative_binary_integer(101, 9); encoder.append_bool(self.c102); }, C103(choice) => { encoder.append_non_negative_binary_integer(102, 9); encoder.append_bool(self.c103); }, C104(choice) => { encoder.append_non_negative_binary_integer(103, 9); encoder.append_bool(self.c104); }, C105(choice) => { encoder.append_non_negative_binary_integer(104, 9); encoder.append_bool(self.c105); }, C106(choice) => { encoder.append_non_negative_binary_integer(105, 9); encoder.append_bool(self.c106); }, C107(choice) => { encoder.append_non_negative_binary_integer(106, 9); encoder.append_bool(self.c107); }, C108(choice) => { encoder.append_non_negative_binary_integer(107, 9); encoder.append_bool(self.c108); }, C109(choice) => { encoder.append_non_negative_binary_integer(108, 9); encoder.append_bool(self.c109); }, C110(choice) => { encoder.append_non_negative_binary_integer(109, 9); encoder.append_bool(self.c110); }, C111(choice) => { encoder.append_non_negative_binary_integer(110, 9); encoder.append_bool(self.c111); }, C112(choice) => { encoder.append_non_negative_binary_integer(111, 9); encoder.append_bool(self.c112); }, C113(choice) => { encoder.append_non_negative_binary_integer(112, 9); encoder.append_bool(self.c113); }, C114(choice) => { encoder.append_non_negative_binary_integer(113, 9); encoder.append_bool(self.c114); }, C115(choice) => { encoder.append_non_negative_binary_integer(114, 9); encoder.append_bool(self.c115); }, C116(choice) => { encoder.append_non_negative_binary_integer(115, 9); encoder.append_bool(self.c116); }, C117(choice) => { encoder.append_non_negative_binary_integer(116, 9); encoder.append_bool(self.c117); }, C118(choice) => { encoder.append_non_negative_binary_integer(117, 9); encoder.append_bool(self.c118); }, C119(choice) => { encoder.append_non_negative_binary_integer(118, 9); encoder.append_bool(self.c119); }, C120(choice) => { encoder.append_non_negative_binary_integer(119, 9); encoder.append_bool(self.c120); }, C121(choice) => { encoder.append_non_negative_binary_integer(120, 9); encoder.append_bool(self.c121); }, C122(choice) => { encoder.append_non_negative_binary_integer(121, 9); encoder.append_bool(self.c122); }, C123(choice) => { encoder.append_non_negative_binary_integer(122, 9); encoder.append_bool(self.c123); }, C124(choice) => { encoder.append_non_negative_binary_integer(123, 9); encoder.append_bool(self.c124); }, C125(choice) => { encoder.append_non_negative_binary_integer(124, 9); encoder.append_bool(self.c125); }, C126(choice) => { encoder.append_non_negative_binary_integer(125, 9); encoder.append_bool(self.c126); }, C127(choice) => { encoder.append_non_negative_binary_integer(126, 9); encoder.append_bool(self.c127); }, C128(choice) => { encoder.append_non_negative_binary_integer(127, 9); encoder.append_bool(self.c128); }, C129(choice) => { encoder.append_non_negative_binary_integer(128, 9); encoder.append_bool(self.c129); }, C130(choice) => { encoder.append_non_negative_binary_integer(129, 9); encoder.append_bool(self.c130); }, C131(choice) => { encoder.append_non_negative_binary_integer(130, 9); encoder.append_bool(self.c131); }, C132(choice) => { encoder.append_non_negative_binary_integer(131, 9); encoder.append_bool(self.c132); }, C133(choice) => { encoder.append_non_negative_binary_integer(132, 9); encoder.append_bool(self.c133); }, C134(choice) => { encoder.append_non_negative_binary_integer(133, 9); encoder.append_bool(self.c134); }, C135(choice) => { encoder.append_non_negative_binary_integer(134, 9); encoder.append_bool(self.c135); }, C136(choice) => { encoder.append_non_negative_binary_integer(135, 9); encoder.append_bool(self.c136); }, C137(choice) => { encoder.append_non_negative_binary_integer(136, 9); encoder.append_bool(self.c137); }, C138(choice) => { encoder.append_non_negative_binary_integer(137, 9); encoder.append_bool(self.c138); }, C139(choice) => { encoder.append_non_negative_binary_integer(138, 9); encoder.append_bool(self.c139); }, C140(choice) => { encoder.append_non_negative_binary_integer(139, 9); encoder.append_bool(self.c140); }, C141(choice) => { encoder.append_non_negative_binary_integer(140, 9); encoder.append_bool(self.c141); }, C142(choice) => { encoder.append_non_negative_binary_integer(141, 9); encoder.append_bool(self.c142); }, C143(choice) => { encoder.append_non_negative_binary_integer(142, 9); encoder.append_bool(self.c143); }, C144(choice) => { encoder.append_non_negative_binary_integer(143, 9); encoder.append_bool(self.c144); }, C145(choice) => { encoder.append_non_negative_binary_integer(144, 9); encoder.append_bool(self.c145); }, C146(choice) => { encoder.append_non_negative_binary_integer(145, 9); encoder.append_bool(self.c146); }, C147(choice) => { encoder.append_non_negative_binary_integer(146, 9); encoder.append_bool(self.c147); }, C148(choice) => { encoder.append_non_negative_binary_integer(147, 9); encoder.append_bool(self.c148); }, C149(choice) => { encoder.append_non_negative_binary_integer(148, 9); encoder.append_bool(self.c149); }, C150(choice) => { encoder.append_non_negative_binary_integer(149, 9); encoder.append_bool(self.c150); }, C151(choice) => { encoder.append_non_negative_binary_integer(150, 9); encoder.append_bool(self.c151); }, C152(choice) => { encoder.append_non_negative_binary_integer(151, 9); encoder.append_bool(self.c152); }, C153(choice) => { encoder.append_non_negative_binary_integer(152, 9); encoder.append_bool(self.c153); }, C154(choice) => { encoder.append_non_negative_binary_integer(153, 9); encoder.append_bool(self.c154); }, C155(choice) => { encoder.append_non_negative_binary_integer(154, 9); encoder.append_bool(self.c155); }, C156(choice) => { encoder.append_non_negative_binary_integer(155, 9); encoder.append_bool(self.c156); }, C157(choice) => { encoder.append_non_negative_binary_integer(156, 9); encoder.append_bool(self.c157); }, C158(choice) => { encoder.append_non_negative_binary_integer(157, 9); encoder.append_bool(self.c158); }, C159(choice) => { encoder.append_non_negative_binary_integer(158, 9); encoder.append_bool(self.c159); }, C160(choice) => { encoder.append_non_negative_binary_integer(159, 9); encoder.append_bool(self.c160); }, C161(choice) => { encoder.append_non_negative_binary_integer(160, 9); encoder.append_bool(self.c161); }, C162(choice) => { encoder.append_non_negative_binary_integer(161, 9); encoder.append_bool(self.c162); }, C163(choice) => { encoder.append_non_negative_binary_integer(162, 9); encoder.append_bool(self.c163); }, C164(choice) => { encoder.append_non_negative_binary_integer(163, 9); encoder.append_bool(self.c164); }, C165(choice) => { encoder.append_non_negative_binary_integer(164, 9); encoder.append_bool(self.c165); }, C166(choice) => { encoder.append_non_negative_binary_integer(165, 9); encoder.append_bool(self.c166); }, C167(choice) => { encoder.append_non_negative_binary_integer(166, 9); encoder.append_bool(self.c167); }, C168(choice) => { encoder.append_non_negative_binary_integer(167, 9); encoder.append_bool(self.c168); }, C169(choice) => { encoder.append_non_negative_binary_integer(168, 9); encoder.append_bool(self.c169); }, C170(choice) => { encoder.append_non_negative_binary_integer(169, 9); encoder.append_bool(self.c170); }, C171(choice) => { encoder.append_non_negative_binary_integer(170, 9); encoder.append_bool(self.c171); }, C172(choice) => { encoder.append_non_negative_binary_integer(171, 9); encoder.append_bool(self.c172); }, C173(choice) => { encoder.append_non_negative_binary_integer(172, 9); encoder.append_bool(self.c173); }, C174(choice) => { encoder.append_non_negative_binary_integer(173, 9); encoder.append_bool(self.c174); }, C175(choice) => { encoder.append_non_negative_binary_integer(174, 9); encoder.append_bool(self.c175); }, C176(choice) => { encoder.append_non_negative_binary_integer(175, 9); encoder.append_bool(self.c176); }, C177(choice) => { encoder.append_non_negative_binary_integer(176, 9); encoder.append_bool(self.c177); }, C178(choice) => { encoder.append_non_negative_binary_integer(177, 9); encoder.append_bool(self.c178); }, C179(choice) => { encoder.append_non_negative_binary_integer(178, 9); encoder.append_bool(self.c179); }, C180(choice) => { encoder.append_non_negative_binary_integer(179, 9); encoder.append_bool(self.c180); }, C181(choice) => { encoder.append_non_negative_binary_integer(180, 9); encoder.append_bool(self.c181); }, C182(choice) => { encoder.append_non_negative_binary_integer(181, 9); encoder.append_bool(self.c182); }, C183(choice) => { encoder.append_non_negative_binary_integer(182, 9); encoder.append_bool(self.c183); }, C184(choice) => { encoder.append_non_negative_binary_integer(183, 9); encoder.append_bool(self.c184); }, C185(choice) => { encoder.append_non_negative_binary_integer(184, 9); encoder.append_bool(self.c185); }, C186(choice) => { encoder.append_non_negative_binary_integer(185, 9); encoder.append_bool(self.c186); }, C187(choice) => { encoder.append_non_negative_binary_integer(186, 9); encoder.append_bool(self.c187); }, C188(choice) => { encoder.append_non_negative_binary_integer(187, 9); encoder.append_bool(self.c188); }, C189(choice) => { encoder.append_non_negative_binary_integer(188, 9); encoder.append_bool(self.c189); }, C190(choice) => { encoder.append_non_negative_binary_integer(189, 9); encoder.append_bool(self.c190); }, C191(choice) => { encoder.append_non_negative_binary_integer(190, 9); encoder.append_bool(self.c191); }, C192(choice) => { encoder.append_non_negative_binary_integer(191, 9); encoder.append_bool(self.c192); }, C193(choice) => { encoder.append_non_negative_binary_integer(192, 9); encoder.append_bool(self.c193); }, C194(choice) => { encoder.append_non_negative_binary_integer(193, 9); encoder.append_bool(self.c194); }, C195(choice) => { encoder.append_non_negative_binary_integer(194, 9); encoder.append_bool(self.c195); }, C196(choice) => { encoder.append_non_negative_binary_integer(195, 9); encoder.append_bool(self.c196); }, C197(choice) => { encoder.append_non_negative_binary_integer(196, 9); encoder.append_bool(self.c197); }, C198(choice) => { encoder.append_non_negative_binary_integer(197, 9); encoder.append_bool(self.c198); }, C199(choice) => { encoder.append_non_negative_binary_integer(198, 9); encoder.append_bool(self.c199); }, C200(choice) => { encoder.append_non_negative_binary_integer(199, 9); encoder.append_bool(self.c200); }, C201(choice) => { encoder.append_non_negative_binary_integer(200, 9); encoder.append_bool(self.c201); }, C202(choice) => { encoder.append_non_negative_binary_integer(201, 9); encoder.append_bool(self.c202); }, C203(choice) => { encoder.append_non_negative_binary_integer(202, 9); encoder.append_bool(self.c203); }, C204(choice) => { encoder.append_non_negative_binary_integer(203, 9); encoder.append_bool(self.c204); }, C205(choice) => { encoder.append_non_negative_binary_integer(204, 9); encoder.append_bool(self.c205); }, C206(choice) => { encoder.append_non_negative_binary_integer(205, 9); encoder.append_bool(self.c206); }, C207(choice) => { encoder.append_non_negative_binary_integer(206, 9); encoder.append_bool(self.c207); }, C208(choice) => { encoder.append_non_negative_binary_integer(207, 9); encoder.append_bool(self.c208); }, C209(choice) => { encoder.append_non_negative_binary_integer(208, 9); encoder.append_bool(self.c209); }, C210(choice) => { encoder.append_non_negative_binary_integer(209, 9); encoder.append_bool(self.c210); }, C211(choice) => { encoder.append_non_negative_binary_integer(210, 9); encoder.append_bool(self.c211); }, C212(choice) => { encoder.append_non_negative_binary_integer(211, 9); encoder.append_bool(self.c212); }, C213(choice) => { encoder.append_non_negative_binary_integer(212, 9); encoder.append_bool(self.c213); }, C214(choice) => { encoder.append_non_negative_binary_integer(213, 9); encoder.append_bool(self.c214); }, C215(choice) => { encoder.append_non_negative_binary_integer(214, 9); encoder.append_bool(self.c215); }, C216(choice) => { encoder.append_non_negative_binary_integer(215, 9); encoder.append_bool(self.c216); }, C217(choice) => { encoder.append_non_negative_binary_integer(216, 9); encoder.append_bool(self.c217); }, C218(choice) => { encoder.append_non_negative_binary_integer(217, 9); encoder.append_bool(self.c218); }, C219(choice) => { encoder.append_non_negative_binary_integer(218, 9); encoder.append_bool(self.c219); }, C220(choice) => { encoder.append_non_negative_binary_integer(219, 9); encoder.append_bool(self.c220); }, C221(choice) => { encoder.append_non_negative_binary_integer(220, 9); encoder.append_bool(self.c221); }, C222(choice) => { encoder.append_non_negative_binary_integer(221, 9); encoder.append_bool(self.c222); }, C223(choice) => { encoder.append_non_negative_binary_integer(222, 9); encoder.append_bool(self.c223); }, C224(choice) => { encoder.append_non_negative_binary_integer(223, 9); encoder.append_bool(self.c224); }, C225(choice) => { encoder.append_non_negative_binary_integer(224, 9); encoder.append_bool(self.c225); }, C226(choice) => { encoder.append_non_negative_binary_integer(225, 9); encoder.append_bool(self.c226); }, C227(choice) => { encoder.append_non_negative_binary_integer(226, 9); encoder.append_bool(self.c227); }, C228(choice) => { encoder.append_non_negative_binary_integer(227, 9); encoder.append_bool(self.c228); }, C229(choice) => { encoder.append_non_negative_binary_integer(228, 9); encoder.append_bool(self.c229); }, C230(choice) => { encoder.append_non_negative_binary_integer(229, 9); encoder.append_bool(self.c230); }, C231(choice) => { encoder.append_non_negative_binary_integer(230, 9); encoder.append_bool(self.c231); }, C232(choice) => { encoder.append_non_negative_binary_integer(231, 9); encoder.append_bool(self.c232); }, C233(choice) => { encoder.append_non_negative_binary_integer(232, 9); encoder.append_bool(self.c233); }, C234(choice) => { encoder.append_non_negative_binary_integer(233, 9); encoder.append_bool(self.c234); }, C235(choice) => { encoder.append_non_negative_binary_integer(234, 9); encoder.append_bool(self.c235); }, C236(choice) => { encoder.append_non_negative_binary_integer(235, 9); encoder.append_bool(self.c236); }, C237(choice) => { encoder.append_non_negative_binary_integer(236, 9); encoder.append_bool(self.c237); }, C238(choice) => { encoder.append_non_negative_binary_integer(237, 9); encoder.append_bool(self.c238); }, C239(choice) => { encoder.append_non_negative_binary_integer(238, 9); encoder.append_bool(self.c239); }, C240(choice) => { encoder.append_non_negative_binary_integer(239, 9); encoder.append_bool(self.c240); }, C241(choice) => { encoder.append_non_negative_binary_integer(240, 9); encoder.append_bool(self.c241); }, C242(choice) => { encoder.append_non_negative_binary_integer(241, 9); encoder.append_bool(self.c242); }, C243(choice) => { encoder.append_non_negative_binary_integer(242, 9); encoder.append_bool(self.c243); }, C244(choice) => { encoder.append_non_negative_binary_integer(243, 9); encoder.append_bool(self.c244); }, C245(choice) => { encoder.append_non_negative_binary_integer(244, 9); encoder.append_bool(self.c245); }, C246(choice) => { encoder.append_non_negative_binary_integer(245, 9); encoder.append_bool(self.c246); }, C247(choice) => { encoder.append_non_negative_binary_integer(246, 9); encoder.append_bool(self.c247); }, C248(choice) => { encoder.append_non_negative_binary_integer(247, 9); encoder.append_bool(self.c248); }, C249(choice) => { encoder.append_non_negative_binary_integer(248, 9); encoder.append_bool(self.c249); }, C250(choice) => { encoder.append_non_negative_binary_integer(249, 9); encoder.append_bool(self.c250); }, C251(choice) => { encoder.append_non_negative_binary_integer(250, 9); encoder.append_bool(self.c251); }, C252(choice) => { encoder.append_non_negative_binary_integer(251, 9); encoder.append_bool(self.c252); }, C253(choice) => { encoder.append_non_negative_binary_integer(252, 9); encoder.append_bool(self.c253); }, C254(choice) => { encoder.append_non_negative_binary_integer(253, 9); encoder.append_bool(self.c254); }, C255(choice) => { encoder.append_non_negative_binary_integer(254, 9); encoder.append_bool(self.c255); }, C256(choice) => { encoder.append_non_negative_binary_integer(255, 9); encoder.append_bool(self.c256); }, C257(choice) => { encoder.append_non_negative_binary_integer(256, 9); encoder.append_bool(self.c257); }, _ => encoder.abort(Error::BadChoice); } } fn decode_inner(&mut self, decoder: &mut Decoder) { match decoder.read_non_negative_binary_integer(9) { 0 => { self.choice = RustSourceQC001; self.c001 = decoder.read_bool(); }, 1 => { self.choice = RustSourceQC002; self.c002 = decoder.read_bool(); }, 2 => { self.choice = RustSourceQC003; self.c003 = decoder.read_bool(); }, 3 => { self.choice = RustSourceQC004; self.c004 = decoder.read_bool(); }, 4 => { self.choice = RustSourceQC005; self.c005 = decoder.read_bool(); }, 5 => { self.choice = RustSourceQC006; self.c006 = decoder.read_bool(); }, 6 => { self.choice = RustSourceQC007; self.c007 = decoder.read_bool(); }, 7 => { self.choice = RustSourceQC008; self.c008 = decoder.read_bool(); }, 8 => { self.choice = RustSourceQC009; self.c009 = decoder.read_bool(); }, 9 => { self.choice = RustSourceQC010; self.c010 = decoder.read_bool(); }, 10 => { self.choice = RustSourceQC011; self.c011 = decoder.read_bool(); }, 11 => { self.choice = RustSourceQC012; self.c012 = decoder.read_bool(); }, 12 => { self.choice = RustSourceQC013; self.c013 = decoder.read_bool(); }, 13 => { self.choice = RustSourceQC014; self.c014 = decoder.read_bool(); }, 14 => { self.choice = RustSourceQC015; self.c015 = decoder.read_bool(); }, 15 => { self.choice = RustSourceQC016; self.c016 = decoder.read_bool(); }, 16 => { self.choice = RustSourceQC017; self.c017 = decoder.read_bool(); }, 17 => { self.choice = RustSourceQC018; self.c018 = decoder.read_bool(); }, 18 => { self.choice = RustSourceQC019; self.c019 = decoder.read_bool(); }, 19 => { self.choice = RustSourceQC020; self.c020 = decoder.read_bool(); }, 20 => { self.choice = RustSourceQC021; self.c021 = decoder.read_bool(); }, 21 => { self.choice = RustSourceQC022; self.c022 = decoder.read_bool(); }, 22 => { self.choice = RustSourceQC023; self.c023 = decoder.read_bool(); }, 23 => { self.choice = RustSourceQC024; self.c024 = decoder.read_bool(); }, 24 => { self.choice = RustSourceQC025; self.c025 = decoder.read_bool(); }, 25 => { self.choice = RustSourceQC026; self.c026 = decoder.read_bool(); }, 26 => { self.choice = RustSourceQC027; self.c027 = decoder.read_bool(); }, 27 => { self.choice = RustSourceQC028; self.c028 = decoder.read_bool(); }, 28 => { self.choice = RustSourceQC029; self.c029 = decoder.read_bool(); }, 29 => { self.choice = RustSourceQC030; self.c030 = decoder.read_bool(); }, 30 => { self.choice = RustSourceQC031; self.c031 = decoder.read_bool(); }, 31 => { self.choice = RustSourceQC032; self.c032 = decoder.read_bool(); }, 32 => { self.choice = RustSourceQC033; self.c033 = decoder.read_bool(); }, 33 => { self.choice = RustSourceQC034; self.c034 = decoder.read_bool(); }, 34 => { self.choice = RustSourceQC035; self.c035 = decoder.read_bool(); }, 35 => { self.choice = RustSourceQC036; self.c036 = decoder.read_bool(); }, 36 => { self.choice = RustSourceQC037; self.c037 = decoder.read_bool(); }, 37 => { self.choice = RustSourceQC038; self.c038 = decoder.read_bool(); }, 38 => { self.choice = RustSourceQC039; self.c039 = decoder.read_bool(); }, 39 => { self.choice = RustSourceQC040; self.c040 = decoder.read_bool(); }, 40 => { self.choice = RustSourceQC041; self.c041 = decoder.read_bool(); }, 41 => { self.choice = RustSourceQC042; self.c042 = decoder.read_bool(); }, 42 => { self.choice = RustSourceQC043; self.c043 = decoder.read_bool(); }, 43 => { self.choice = RustSourceQC044; self.c044 = decoder.read_bool(); }, 44 => { self.choice = RustSourceQC045; self.c045 = decoder.read_bool(); }, 45 => { self.choice = RustSourceQC046; self.c046 = decoder.read_bool(); }, 46 => { self.choice = RustSourceQC047; self.c047 = decoder.read_bool(); }, 47 => { self.choice = RustSourceQC048; self.c048 = decoder.read_bool(); }, 48 => { self.choice = RustSourceQC049; self.c049 = decoder.read_bool(); }, 49 => { self.choice = RustSourceQC050; self.c050 = decoder.read_bool(); }, 50 => { self.choice = RustSourceQC051; self.c051 = decoder.read_bool(); }, 51 => { self.choice = RustSourceQC052; self.c052 = decoder.read_bool(); }, 52 => { self.choice = RustSourceQC053; self.c053 = decoder.read_bool(); }, 53 => { self.choice = RustSourceQC054; self.c054 = decoder.read_bool(); }, 54 => { self.choice = RustSourceQC055; self.c055 = decoder.read_bool(); }, 55 => { self.choice = RustSourceQC056; self.c056 = decoder.read_bool(); }, 56 => { self.choice = RustSourceQC057; self.c057 = decoder.read_bool(); }, 57 => { self.choice = RustSourceQC058; self.c058 = decoder.read_bool(); }, 58 => { self.choice = RustSourceQC059; self.c059 = decoder.read_bool(); }, 59 => { self.choice = RustSourceQC060; self.c060 = decoder.read_bool(); }, 60 => { self.choice = RustSourceQC061; self.c061 = decoder.read_bool(); }, 61 => { self.choice = RustSourceQC062; self.c062 = decoder.read_bool(); }, 62 => { self.choice = RustSourceQC063; self.c063 = decoder.read_bool(); }, 63 => { self.choice = RustSourceQC064; self.c064 = decoder.read_bool(); }, 64 => { self.choice = RustSourceQC065; self.c065 = decoder.read_bool(); }, 65 => { self.choice = RustSourceQC066; self.c066 = decoder.read_bool(); }, 66 => { self.choice = RustSourceQC067; self.c067 = decoder.read_bool(); }, 67 => { self.choice = RustSourceQC068; self.c068 = decoder.read_bool(); }, 68 => { self.choice = RustSourceQC069; self.c069 = decoder.read_bool(); }, 69 => { self.choice = RustSourceQC070; self.c070 = decoder.read_bool(); }, 70 => { self.choice = RustSourceQC071; self.c071 = decoder.read_bool(); }, 71 => { self.choice = RustSourceQC072; self.c072 = decoder.read_bool(); }, 72 => { self.choice = RustSourceQC073; self.c073 = decoder.read_bool(); }, 73 => { self.choice = RustSourceQC074; self.c074 = decoder.read_bool(); }, 74 => { self.choice = RustSourceQC075; self.c075 = decoder.read_bool(); }, 75 => { self.choice = RustSourceQC076; self.c076 = decoder.read_bool(); }, 76 => { self.choice = RustSourceQC077; self.c077 = decoder.read_bool(); }, 77 => { self.choice = RustSourceQC078; self.c078 = decoder.read_bool(); }, 78 => { self.choice = RustSourceQC079; self.c079 = decoder.read_bool(); }, 79 => { self.choice = RustSourceQC080; self.c080 = decoder.read_bool(); }, 80 => { self.choice = RustSourceQC081; self.c081 = decoder.read_bool(); }, 81 => { self.choice = RustSourceQC082; self.c082 = decoder.read_bool(); }, 82 => { self.choice = RustSourceQC083; self.c083 = decoder.read_bool(); }, 83 => { self.choice = RustSourceQC084; self.c084 = decoder.read_bool(); }, 84 => { self.choice = RustSourceQC085; self.c085 = decoder.read_bool(); }, 85 => { self.choice = RustSourceQC086; self.c086 = decoder.read_bool(); }, 86 => { self.choice = RustSourceQC087; self.c087 = decoder.read_bool(); }, 87 => { self.choice = RustSourceQC088; self.c088 = decoder.read_bool(); }, 88 => { self.choice = RustSourceQC089; self.c089 = decoder.read_bool(); }, 89 => { self.choice = RustSourceQC090; self.c090 = decoder.read_bool(); }, 90 => { self.choice = RustSourceQC091; self.c091 = decoder.read_bool(); }, 91 => { self.choice = RustSourceQC092; self.c092 = decoder.read_bool(); }, 92 => { self.choice = RustSourceQC093; self.c093 = decoder.read_bool(); }, 93 => { self.choice = RustSourceQC094; self.c094 = decoder.read_bool(); }, 94 => { self.choice = RustSourceQC095; self.c095 = decoder.read_bool(); }, 95 => { self.choice = RustSourceQC096; self.c096 = decoder.read_bool(); }, 96 => { self.choice = RustSourceQC097; self.c097 = decoder.read_bool(); }, 97 => { self.choice = RustSourceQC098; self.c098 = decoder.read_bool(); }, 98 => { self.choice = RustSourceQC099; self.c099 = decoder.read_bool(); }, 99 => { self.choice = RustSourceQC100; self.c100 = decoder.read_bool(); }, 100 => { self.choice = RustSourceQC101; self.c101 = decoder.read_bool(); }, 101 => { self.choice = RustSourceQC102; self.c102 = decoder.read_bool(); }, 102 => { self.choice = RustSourceQC103; self.c103 = decoder.read_bool(); }, 103 => { self.choice = RustSourceQC104; self.c104 = decoder.read_bool(); }, 104 => { self.choice = RustSourceQC105; self.c105 = decoder.read_bool(); }, 105 => { self.choice = RustSourceQC106; self.c106 = decoder.read_bool(); }, 106 => { self.choice = RustSourceQC107; self.c107 = decoder.read_bool(); }, 107 => { self.choice = RustSourceQC108; self.c108 = decoder.read_bool(); }, 108 => { self.choice = RustSourceQC109; self.c109 = decoder.read_bool(); }, 109 => { self.choice = RustSourceQC110; self.c110 = decoder.read_bool(); }, 110 => { self.choice = RustSourceQC111; self.c111 = decoder.read_bool(); }, 111 => { self.choice = RustSourceQC112; self.c112 = decoder.read_bool(); }, 112 => { self.choice = RustSourceQC113; self.c113 = decoder.read_bool(); }, 113 => { self.choice = RustSourceQC114; self.c114 = decoder.read_bool(); }, 114 => { self.choice = RustSourceQC115; self.c115 = decoder.read_bool(); }, 115 => { self.choice = RustSourceQC116; self.c116 = decoder.read_bool(); }, 116 => { self.choice = RustSourceQC117; self.c117 = decoder.read_bool(); }, 117 => { self.choice = RustSourceQC118; self.c118 = decoder.read_bool(); }, 118 => { self.choice = RustSourceQC119; self.c119 = decoder.read_bool(); }, 119 => { self.choice = RustSourceQC120; self.c120 = decoder.read_bool(); }, 120 => { self.choice = RustSourceQC121; self.c121 = decoder.read_bool(); }, 121 => { self.choice = RustSourceQC122; self.c122 = decoder.read_bool(); }, 122 => { self.choice = RustSourceQC123; self.c123 = decoder.read_bool(); }, 123 => { self.choice = RustSourceQC124; self.c124 = decoder.read_bool(); }, 124 => { self.choice = RustSourceQC125; self.c125 = decoder.read_bool(); }, 125 => { self.choice = RustSourceQC126; self.c126 = decoder.read_bool(); }, 126 => { self.choice = RustSourceQC127; self.c127 = decoder.read_bool(); }, 127 => { self.choice = RustSourceQC128; self.c128 = decoder.read_bool(); }, 128 => { self.choice = RustSourceQC129; self.c129 = decoder.read_bool(); }, 129 => { self.choice = RustSourceQC130; self.c130 = decoder.read_bool(); }, 130 => { self.choice = RustSourceQC131; self.c131 = decoder.read_bool(); }, 131 => { self.choice = RustSourceQC132; self.c132 = decoder.read_bool(); }, 132 => { self.choice = RustSourceQC133; self.c133 = decoder.read_bool(); }, 133 => { self.choice = RustSourceQC134; self.c134 = decoder.read_bool(); }, 134 => { self.choice = RustSourceQC135; self.c135 = decoder.read_bool(); }, 135 => { self.choice = RustSourceQC136; self.c136 = decoder.read_bool(); }, 136 => { self.choice = RustSourceQC137; self.c137 = decoder.read_bool(); }, 137 => { self.choice = RustSourceQC138; self.c138 = decoder.read_bool(); }, 138 => { self.choice = RustSourceQC139; self.c139 = decoder.read_bool(); }, 139 => { self.choice = RustSourceQC140; self.c140 = decoder.read_bool(); }, 140 => { self.choice = RustSourceQC141; self.c141 = decoder.read_bool(); }, 141 => { self.choice = RustSourceQC142; self.c142 = decoder.read_bool(); }, 142 => { self.choice = RustSourceQC143; self.c143 = decoder.read_bool(); }, 143 => { self.choice = RustSourceQC144; self.c144 = decoder.read_bool(); }, 144 => { self.choice = RustSourceQC145; self.c145 = decoder.read_bool(); }, 145 => { self.choice = RustSourceQC146; self.c146 = decoder.read_bool(); }, 146 => { self.choice = RustSourceQC147; self.c147 = decoder.read_bool(); }, 147 => { self.choice = RustSourceQC148; self.c148 = decoder.read_bool(); }, 148 => { self.choice = RustSourceQC149; self.c149 = decoder.read_bool(); }, 149 => { self.choice = RustSourceQC150; self.c150 = decoder.read_bool(); }, 150 => { self.choice = RustSourceQC151; self.c151 = decoder.read_bool(); }, 151 => { self.choice = RustSourceQC152; self.c152 = decoder.read_bool(); }, 152 => { self.choice = RustSourceQC153; self.c153 = decoder.read_bool(); }, 153 => { self.choice = RustSourceQC154; self.c154 = decoder.read_bool(); }, 154 => { self.choice = RustSourceQC155; self.c155 = decoder.read_bool(); }, 155 => { self.choice = RustSourceQC156; self.c156 = decoder.read_bool(); }, 156 => { self.choice = RustSourceQC157; self.c157 = decoder.read_bool(); }, 157 => { self.choice = RustSourceQC158; self.c158 = decoder.read_bool(); }, 158 => { self.choice = RustSourceQC159; self.c159 = decoder.read_bool(); }, 159 => { self.choice = RustSourceQC160; self.c160 = decoder.read_bool(); }, 160 => { self.choice = RustSourceQC161; self.c161 = decoder.read_bool(); }, 161 => { self.choice = RustSourceQC162; self.c162 = decoder.read_bool(); }, 162 => { self.choice = RustSourceQC163; self.c163 = decoder.read_bool(); }, 163 => { self.choice = RustSourceQC164; self.c164 = decoder.read_bool(); }, 164 => { self.choice = RustSourceQC165; self.c165 = decoder.read_bool(); }, 165 => { self.choice = RustSourceQC166; self.c166 = decoder.read_bool(); }, 166 => { self.choice = RustSourceQC167; self.c167 = decoder.read_bool(); }, 167 => { self.choice = RustSourceQC168; self.c168 = decoder.read_bool(); }, 168 => { self.choice = RustSourceQC169; self.c169 = decoder.read_bool(); }, 169 => { self.choice = RustSourceQC170; self.c170 = decoder.read_bool(); }, 170 => { self.choice = RustSourceQC171; self.c171 = decoder.read_bool(); }, 171 => { self.choice = RustSourceQC172; self.c172 = decoder.read_bool(); }, 172 => { self.choice = RustSourceQC173; self.c173 = decoder.read_bool(); }, 173 => { self.choice = RustSourceQC174; self.c174 = decoder.read_bool(); }, 174 => { self.choice = RustSourceQC175; self.c175 = decoder.read_bool(); }, 175 => { self.choice = RustSourceQC176; self.c176 = decoder.read_bool(); }, 176 => { self.choice = RustSourceQC177; self.c177 = decoder.read_bool(); }, 177 => { self.choice = RustSourceQC178; self.c178 = decoder.read_bool(); }, 178 => { self.choice = RustSourceQC179; self.c179 = decoder.read_bool(); }, 179 => { self.choice = RustSourceQC180; self.c180 = decoder.read_bool(); }, 180 => { self.choice = RustSourceQC181; self.c181 = decoder.read_bool(); }, 181 => { self.choice = RustSourceQC182; self.c182 = decoder.read_bool(); }, 182 => { self.choice = RustSourceQC183; self.c183 = decoder.read_bool(); }, 183 => { self.choice = RustSourceQC184; self.c184 = decoder.read_bool(); }, 184 => { self.choice = RustSourceQC185; self.c185 = decoder.read_bool(); }, 185 => { self.choice = RustSourceQC186; self.c186 = decoder.read_bool(); }, 186 => { self.choice = RustSourceQC187; self.c187 = decoder.read_bool(); }, 187 => { self.choice = RustSourceQC188; self.c188 = decoder.read_bool(); }, 188 => { self.choice = RustSourceQC189; self.c189 = decoder.read_bool(); }, 189 => { self.choice = RustSourceQC190; self.c190 = decoder.read_bool(); }, 190 => { self.choice = RustSourceQC191; self.c191 = decoder.read_bool(); }, 191 => { self.choice = RustSourceQC192; self.c192 = decoder.read_bool(); }, 192 => { self.choice = RustSourceQC193; self.c193 = decoder.read_bool(); }, 193 => { self.choice = RustSourceQC194; self.c194 = decoder.read_bool(); }, 194 => { self.choice = RustSourceQC195; self.c195 = decoder.read_bool(); }, 195 => { self.choice = RustSourceQC196; self.c196 = decoder.read_bool(); }, 196 => { self.choice = RustSourceQC197; self.c197 = decoder.read_bool(); }, 197 => { self.choice = RustSourceQC198; self.c198 = decoder.read_bool(); }, 198 => { self.choice = RustSourceQC199; self.c199 = decoder.read_bool(); }, 199 => { self.choice = RustSourceQC200; self.c200 = decoder.read_bool(); }, 200 => { self.choice = RustSourceQC201; self.c201 = decoder.read_bool(); }, 201 => { self.choice = RustSourceQC202; self.c202 = decoder.read_bool(); }, 202 => { self.choice = RustSourceQC203; self.c203 = decoder.read_bool(); }, 203 => { self.choice = RustSourceQC204; self.c204 = decoder.read_bool(); }, 204 => { self.choice = RustSourceQC205; self.c205 = decoder.read_bool(); }, 205 => { self.choice = RustSourceQC206; self.c206 = decoder.read_bool(); }, 206 => { self.choice = RustSourceQC207; self.c207 = decoder.read_bool(); }, 207 => { self.choice = RustSourceQC208; self.c208 = decoder.read_bool(); }, 208 => { self.choice = RustSourceQC209; self.c209 = decoder.read_bool(); }, 209 => { self.choice = RustSourceQC210; self.c210 = decoder.read_bool(); }, 210 => { self.choice = RustSourceQC211; self.c211 = decoder.read_bool(); }, 211 => { self.choice = RustSourceQC212; self.c212 = decoder.read_bool(); }, 212 => { self.choice = RustSourceQC213; self.c213 = decoder.read_bool(); }, 213 => { self.choice = RustSourceQC214; self.c214 = decoder.read_bool(); }, 214 => { self.choice = RustSourceQC215; self.c215 = decoder.read_bool(); }, 215 => { self.choice = RustSourceQC216; self.c216 = decoder.read_bool(); }, 216 => { self.choice = RustSourceQC217; self.c217 = decoder.read_bool(); }, 217 => { self.choice = RustSourceQC218; self.c218 = decoder.read_bool(); }, 218 => { self.choice = RustSourceQC219; self.c219 = decoder.read_bool(); }, 219 => { self.choice = RustSourceQC220; self.c220 = decoder.read_bool(); }, 220 => { self.choice = RustSourceQC221; self.c221 = decoder.read_bool(); }, 221 => { self.choice = RustSourceQC222; self.c222 = decoder.read_bool(); }, 222 => { self.choice = RustSourceQC223; self.c223 = decoder.read_bool(); }, 223 => { self.choice = RustSourceQC224; self.c224 = decoder.read_bool(); }, 224 => { self.choice = RustSourceQC225; self.c225 = decoder.read_bool(); }, 225 => { self.choice = RustSourceQC226; self.c226 = decoder.read_bool(); }, 226 => { self.choice = RustSourceQC227; self.c227 = decoder.read_bool(); }, 227 => { self.choice = RustSourceQC228; self.c228 = decoder.read_bool(); }, 228 => { self.choice = RustSourceQC229; self.c229 = decoder.read_bool(); }, 229 => { self.choice = RustSourceQC230; self.c230 = decoder.read_bool(); }, 230 => { self.choice = RustSourceQC231; self.c231 = decoder.read_bool(); }, 231 => { self.choice = RustSourceQC232; self.c232 = decoder.read_bool(); }, 232 => { self.choice = RustSourceQC233; self.c233 = decoder.read_bool(); }, 233 => { self.choice = RustSourceQC234; self.c234 = decoder.read_bool(); }, 234 => { self.choice = RustSourceQC235; self.c235 = decoder.read_bool(); }, 235 => { self.choice = RustSourceQC236; self.c236 = decoder.read_bool(); }, 236 => { self.choice = RustSourceQC237; self.c237 = decoder.read_bool(); }, 237 => { self.choice = RustSourceQC238; self.c238 = decoder.read_bool(); }, 238 => { self.choice = RustSourceQC239; self.c239 = decoder.read_bool(); }, 239 => { self.choice = RustSourceQC240; self.c240 = decoder.read_bool(); }, 240 => { self.choice = RustSourceQC241; self.c241 = decoder.read_bool(); }, 241 => { self.choice = RustSourceQC242; self.c242 = decoder.read_bool(); }, 242 => { self.choice = RustSourceQC243; self.c243 = decoder.read_bool(); }, 243 => { self.choice = RustSourceQC244; self.c244 = decoder.read_bool(); }, 244 => { self.choice = RustSourceQC245; self.c245 = decoder.read_bool(); }, 245 => { self.choice = RustSourceQC246; self.c246 = decoder.read_bool(); }, 246 => { self.choice = RustSourceQC247; self.c247 = decoder.read_bool(); }, 247 => { self.choice = RustSourceQC248; self.c248 = decoder.read_bool(); }, 248 => { self.choice = RustSourceQC249; self.c249 = decoder.read_bool(); }, 249 => { self.choice = RustSourceQC250; self.c250 = decoder.read_bool(); }, 250 => { self.choice = RustSourceQC251; self.c251 = decoder.read_bool(); }, 251 => { self.choice = RustSourceQC252; self.c252 = decoder.read_bool(); }, 252 => { self.choice = RustSourceQC253; self.c253 = decoder.read_bool(); }, 253 => { self.choice = RustSourceQC254; self.c254 = decoder.read_bool(); }, 254 => { self.choice = RustSourceQC255; self.c255 = decoder.read_bool(); }, 255 => { self.choice = RustSourceQC256; self.c256 = decoder.read_bool(); }, 256 => { self.choice = RustSourceQC257; self.c257 = decoder.read_bool(); }, _ => decoder.abort(Error::BadChoice); } } } /// Type AC in module RustSource. #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceAC { pub a: RustSourceQ, pub b: RustSourceD } impl RustSourceAC { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { self.a.encode_inner(&mut encoder); self.b.encode_inner(&mut encoder); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.a.decode_inner(&mut decoder); self.b.decode_inner(&mut decoder); } } /// Type B in module RustSource. #[derive(Debug, PartialEq, Copy, Clone)] pub enum RustSourceB { A(i8), B(RustSourceA) } impl RustSourceB { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { match self { A(choice) => { encoder.append_non_negative_binary_integer(0, 2); encoder.append_i8(self.a); }, B(choice) => { encoder.append_non_negative_binary_integer(1, 2); self.b.encode_inner(&mut encoder); }, C(choice) => { encoder.append_non_negative_binary_integer(2, 2); }, _ => encoder.abort(Error::BadChoice); } } fn decode_inner(&mut self, decoder: &mut Decoder) { match decoder.read_non_negative_binary_integer(2) { 0 => { self.choice = RustSourceBA; self.a = decoder.read_i8(); }, 1 => { self.choice = RustSourceBB; self.b.decode_inner(&mut decoder); }, 2 => { self.choice = RustSourceBC; }, _ => decoder.abort(Error::BadChoice); } } } /// Type C in module RustSource. let length: u8; RustSourceB elements[2]; impl RustSourceC { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.length - 0) as u64, 2); for i in 0..self.length { self.elements[i].encode_inner(&mut encoder); } } fn decode_inner(&mut self, decoder: &mut Decoder) { self.length = decoder.read_non_negative_binary_integer(2); self.length += 0; if self.length > 2 { decoder.abort(Error::BadLength); return; } for i in 0..self.length { self.elements[i].decode_inner(&mut decoder); } } } /// Type E in module RustSource. #[derive(Debug, PartialEq, Copy, Clone)] pub enum RustSourceEAB { C(bool) } #[derive(Debug, PartialEq, Copy, Clone)] pub enum RustSourceEA { pub b: RustSourceEAB } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceE { pub a: RustSourceEA } impl RustSourceE { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { match self { B(choice) => { encoder.append_non_negative_binary_integer(0, 0); match self { C(choice_2) => { encoder.append_non_negative_binary_integer(0, 0); encoder.append_bool(self.a.b.c); }, _ => encoder.abort(Error::BadChoice); } }, _ => encoder.abort(Error::BadChoice); } } fn decode_inner(&mut self, decoder: &mut Decoder) { match decoder.read_non_negative_binary_integer(0) { 0 => { self.a.choice = RustSourceEAB; match decoder.read_non_negative_binary_integer(0) { 0 => { self.a.b.choice = RustSourceEABC; self.a.b.c = decoder.read_bool(); }, _ => decoder.abort(Error::BadChoice); } }, _ => decoder.abort(Error::BadChoice); } } } /// Type F in module RustSource. let length: u8; struct { bool elements[1]; } elements[2]; impl RustSourceF { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.length - 1) as u64, 1); for i in 0..self.length { for i_2 in 0..1 { encoder.append_bool(self.elements[i].elements[i_2]); } } } fn decode_inner(&mut self, decoder: &mut Decoder) { self.length = decoder.read_non_negative_binary_integer(1); self.length += 1; for i in 0..self.length { for i_2 in 0..1 { self.elements[i].elements[i_2] = decoder.read_bool(); } } } } /// Type G in module RustSource. #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceG { pub is_a_present: bool, pub a: bool, pub is_b_present: bool, pub b: bool, pub is_c_present: bool, pub c: bool, pub is_d_present: bool, pub d: bool, pub is_e_present: bool, pub e: bool, pub is_f_present: bool, pub f: bool, pub is_g_present: bool, pub g: bool, pub is_h_present: bool, pub h: bool, pub is_i_present: bool, pub i: bool } impl RustSourceG { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_bit(self.is_a_present as u8); encoder.append_bit(self.is_b_present as u8); encoder.append_bit(self.is_c_present as u8); encoder.append_bit(self.is_d_present as u8); encoder.append_bit(self.is_e_present as u8); encoder.append_bit(self.is_f_present as u8); encoder.append_bit(self.is_g_present as u8); encoder.append_bit(self.is_h_present as u8); encoder.append_bit(self.is_i_present as u8); if src.is_a_present { encoder.append_bool(self.a); } if src.is_b_present { encoder.append_bool(self.b); } if src.is_c_present { encoder.append_bool(self.c); } if src.is_d_present { encoder.append_bool(self.d); } if src.is_e_present { encoder.append_bool(self.e); } if src.is_f_present { encoder.append_bool(self.f); } if src.is_g_present { encoder.append_bool(self.g); } if src.is_h_present { encoder.append_bool(self.h); } if src.is_i_present { encoder.append_bool(self.i); } } fn decode_inner(&mut self, decoder: &mut Decoder) { self.is_a_present = decoder.read_bit() != 0; self.is_b_present = decoder.read_bit() != 0; self.is_c_present = decoder.read_bit() != 0; self.is_d_present = decoder.read_bit() != 0; self.is_e_present = decoder.read_bit() != 0; self.is_f_present = decoder.read_bit() != 0; self.is_g_present = decoder.read_bit() != 0; self.is_h_present = decoder.read_bit() != 0; self.is_i_present = decoder.read_bit() != 0; if dst.is_a_present { self.a = decoder.read_bool(); } if dst.is_b_present { self.b = decoder.read_bool(); } if dst.is_c_present { self.c = decoder.read_bool(); } if dst.is_d_present { self.d = decoder.read_bool(); } if dst.is_e_present { self.e = decoder.read_bool(); } if dst.is_f_present { self.f = decoder.read_bool(); } if dst.is_g_present { self.g = decoder.read_bool(); } if dst.is_h_present { self.h = decoder.read_bool(); } if dst.is_i_present { self.i = decoder.read_bool(); } } } /// Type H in module RustSource. dummy: u8; impl RustSourceH { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { (void)src_p; } fn decode_inner(&mut self, decoder: &mut Decoder) { (void)dst_p; } } /// Type I in module RustSource. struct RustSourceI { pub buf: [u8; 24] impl RustSourceI { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_bytes(&self.buf); } fn decode_inner(&mut self, decoder: &mut Decoder) { decoder.read_bytes(&mut self.buf); } } /// Type J in module RustSource. struct RustSourceJ { let length: u8; pub buf: [u8; 23] impl RustSourceJ { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.length - 22) as u64, 1); encoder.append_bytes(&self.buf, self.length); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.length = decoder.read_non_negative_binary_integer( 1); self.length += 22; decoder.read_bytes(&mut self.buf, self.length); } } /// Type K in module RustSource. #[derive(Debug, PartialEq, Copy, Clone)] value; pub enum RustSourceK { A, } impl Default for RustSourceK { fn default() -> Self { RustSourceK::A } } impl RustSourceK { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer(self.value, 0); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.value = decoder.read_non_negative_binary_integer(0); } } /// Type L in module RustSource. struct RustSourceL { let length: u32; pub buf: [u8; 500] impl RustSourceL { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.length - 0) as u64, 9); encoder.append_bytes(&self.buf, self.length); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.length = decoder.read_non_negative_binary_integer( 9); self.length += 0; if self.length > 500 { decoder.abort(Error::BadLength); return; } decoder.read_bytes(&mut self.buf, self.length); } } /// Type O in module RustSource. let length: u32; bool elements[260]; impl RustSourceO { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.length - 1) as u64, 9); for i in 0..self.length { encoder.append_bool(self.elements[i]); } } fn decode_inner(&mut self, decoder: &mut Decoder) { self.length = decoder.read_non_negative_binary_integer(9); self.length += 1; if self.length > 260 { decoder.abort(Error::BadLength); return; } for i in 0..self.length { self.elements[i] = decoder.read_bool(); } } } /// Type N in module RustSource. #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceN { pub a: RustSourceK, pub b: RustSourceA, pub c: RustSourceO } impl RustSourceN { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { self.a.encode_inner(&mut encoder); self.b.encode_inner(&mut encoder); self.c.encode_inner(&mut encoder); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.a.decode_inner(&mut decoder); self.b.decode_inner(&mut decoder); self.c.decode_inner(&mut decoder); } } /// Type M in module RustSource. #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceM { pub a: RustSourceK, pub b: RustSourceN } impl RustSourceM { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { self.a.encode_inner(&mut encoder); self.b.encode_inner(&mut encoder); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.a.decode_inner(&mut decoder); self.b.decode_inner(&mut decoder); } } /// Type P in module RustSource. #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceP { pub a: RustSourceA, pub b: RustSourceM, pub c: RustSourceF } impl RustSourceP { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { self.a.encode_inner(&mut encoder); self.b.encode_inner(&mut encoder); self.c.encode_inner(&mut encoder); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.a.decode_inner(&mut decoder); self.b.decode_inner(&mut decoder); self.c.decode_inner(&mut decoder); } } /// Type R in module RustSource. i8 value; impl RustSourceR { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.value - -1) as u64, 1); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.value = decoder.read_non_negative_binary_integer(1) as i8; self.value += -1; } } /// Type S in module RustSource. i8 value; impl RustSourceS { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.value - -2) as u64, 2); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.value = decoder.read_non_negative_binary_integer(2) as i8; self.value += -2; } } /// Type T in module RustSource. i8 value; impl RustSourceT { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.value - -1) as u64, 2); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.value = decoder.read_non_negative_binary_integer(2) as i8; self.value += -1; } } /// Type U in module RustSource. i8 value; impl RustSourceU { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.value - -64) as u64, 7); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.value = decoder.read_non_negative_binary_integer(7) as i8; self.value += -64; } } /// Type V in module RustSource. i8 value; impl RustSourceV { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_i8(self.value); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.value = decoder.read_i8(); } } /// Type W in module RustSource. i16 value; impl RustSourceW { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.value - -1) as u64, 9); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.value = decoder.read_non_negative_binary_integer(9) as i16; self.value += -1; } } /// Type X in module RustSource. i16 value; impl RustSourceX { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.value - -2) as u64, 10); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.value = decoder.read_non_negative_binary_integer(10) as i16; self.value += -2; } } /// Type Y in module RustSource. u16 value; impl RustSourceY { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.value - 10000) as u64, 10); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.value = decoder.read_non_negative_binary_integer(10) as u16; self.value += 10000; } } /// Type Z in module RustSource. bool value; impl RustSourceZ { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_bool(self.value); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.value = decoder.read_bool(); } } asn1tools-0.169.0/tests/files/time_types.asn000066400000000000000000000001201524544274600207510ustar00rootroot00000000000000Foo DEFINITIONS ::= BEGIN B ::= DATE C ::= TIME-OF-DAY D ::= DATE-TIME END asn1tools-0.169.0/tests/files/time_types.py000066400000000000000000000004511524544274600206270ustar00rootroot00000000000000EXPECTED = {'Foo': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'B': {'type': 'DATE'}, 'C': {'type': 'TIME-OF-DAY'}, 'D': {'type': 'DATE-TIME'}}, 'values': {}}}asn1tools-0.169.0/tests/files/time_types_pp.py000066400000000000000000000004521524544274600213270ustar00rootroot00000000000000EXPECTED = {'Foo': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'B': {'type': 'DATE'}, 'C': {'type': 'TIME-OF-DAY'}, 'D': {'type': 'DATE-TIME'}}, 'values': {}}} asn1tools-0.169.0/tests/files/versions.asn000066400000000000000000000013741524544274600204530ustar00rootroot00000000000000Versions DEFINITIONS AUTOMATIC TAGS ::= BEGIN V1 ::= SEQUENCE { userName VisibleString, password VisibleString, accountNumber INTEGER, ..., ... } V2 ::= SEQUENCE { userName VisibleString, password VisibleString, accountNumber INTEGER, ..., [[ lastLoggedIn GeneralizedTime OPTIONAL, minutesLastLoggedIn INTEGER ]], ... } V3 ::= SEQUENCE { userName VisibleString, password VisibleString, accountNumber INTEGER, ..., [[ lastLoggedIn GeneralizedTime OPTIONAL, minutesLastLoggedIn INTEGER ]], [[ certificate NULL, thumb NULL OPTIONAL ]], ... } END asn1tools-0.169.0/tests/files/with_components.asn000066400000000000000000000006321524544274600220170ustar00rootroot00000000000000Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN Foo ::= SEQUENCE { a Uint8 (1), b Bar (WITH COMPONENTS { c (SIZE (1) INTERSECTION (WITH COMPONENT ( Fie (WITH COMPONENTS { f })))) }) } Uint8 ::= INTEGER (0..255) Bar ::= SEQUENCE { c SequenceOfFie, d INTEGER } Fie ::= CHOICE { e INTEGER, f BOOLEAN, g NULL } SequenceOfFie ::= SEQUENCE OF Fie END asn1tools-0.169.0/tests/files/x680.asn000066400000000000000000000505051524544274600173100ustar00rootroot00000000000000X680 DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- 14.10 T-14-10 ::= SEQUENCE { a BOOLEAN, b SET OF INTEGER } -- 19.5 A-19-5 ::= ENUMERATED { a, b(3), ..., c(1) } D-19-5 ::= ENUMERATED { a, b, ..., c(2) } -- 19.6 A-19-6 ::= ENUMERATED {a, b, ..., c} B-19-6 ::= ENUMERATED {a, b, c(0), ..., d} C-19-6 ::= ENUMERATED {a, b, ..., c(3), d} D-19-6 ::= ENUMERATED {a, z(25), ..., d} -- Annex E -- E.1.1 Informal description of Personnel Record PersonnelRecord-E-1-1 ::= [APPLICATION 0] SET { name Name-E-1-1, title VisibleString, number EmployeeNumber-E-1-1, dateOfHire Date-E-1-1, nameOfSpouse Name-E-1-1, children SEQUENCE OF ChildInformation-E-1-1 DEFAULT {} } ChildInformation-E-1-1 ::= SET { name Name-E-1-1, dateOfBirth Date-E-1-1 } Name-E-1-1 ::= [APPLICATION 1] SEQUENCE { givenName VisibleString, initial VisibleString, familyName VisibleString } EmployeeNumber-E-1-1 ::= [APPLICATION 2] INTEGER Date-E-1-1 ::= [APPLICATION 3] VisibleString -- YYYY MMDD -- E.2.1 Boolean Employed-E-2-1 ::= BOOLEAN -- E.2.2 Integer CheckingAccountBalance-E-2-2 ::= INTEGER -- in cents; negative means overdrawn. balance-E-2-2 CheckingAccountBalance-E-2-2 ::= 0 DayOfTheMonth-E-2-2 ::= INTEGER {first(1), last(31)} today-E-2-2 DayOfTheMonth-E-2-2 ::= first unknown-E-2-2 DayOfTheMonth-E-2-2 ::= 0 DayOfTheMonth-E-2-2-a ::= INTEGER {first(1), last(31)} (first | last) DayOfTheMonth-E-2-2-b ::= INTEGER {first(1), last(31)} (first .. last) dayOfTheMonth-E-2-2-c DayOfTheMonth-E-2-2 ::= 4 -- E.2.3 Enumerated DayOfTheWeek-E-2-3 ::= ENUMERATED {sunday(0), monday(1), tuesday(2), wednesday(3), thursday(4), friday(5), saturday(6)} firstDay-E-2-3 DayOfTheWeek-E-2-3 ::= sunday MaritalStatus-E-2-3-a ::= ENUMERATED {single, married} MaritalStatus-E-2-3-b ::= ENUMERATED {single, married, ..., widowed} MaritalStatus-E-2-3-c ::= ENUMERATED {single, married, ..., widowed, divorced} -- E.2.4 Real AngleInRadians-E-2-4 ::= REAL pi-E-2-4-a REAL ::= {mantissa 3141592653589793, base 10, exponent -30} pi-E-2-4-b REAL ::= 3.141592653589793 App-X-Real-E-2-4 ::= REAL (WITH COMPONENTS { mantissa (-16777215..16777215), base (2), exponent (-125..128) } ) girth-E-2-4 App-X-Real-E-2-4 ::= {mantissa 16, base 2, exponent 1} -- E.2.5 Bit string G3FacsimilePage-E-2-5 ::= BIT STRING image-E-2-5 G3FacsimilePage-E-2-5 ::= '100110100100001110110'B trailer-E-2-5 BIT STRING ::= '0123456789ABCDEF'H body1-E-2-5 G3FacsimilePage-E-2-5 ::= '1101'B body2-E-2-5 G3FacsimilePage-E-2-5 ::= '1101000'B BitField-E-2-5 ::= BIT STRING (SIZE (12)) map1-E-2-5 BitField-E-2-5 ::= '100110100100'B map2-E-2-5 BitField-E-2-5 ::= '9A4'H DaysOfTheWeek-E-2-5-a ::= BIT STRING { sunday(0), monday (1), tuesday(2), wednesday(3), thursday(4), friday(5), saturday(6) } (SIZE (0..7)) sunnyDaysLastWeek1-E-2-5-a DaysOfTheWeek-E-2-5-a ::= {sunday, monday, wednesday} sunnyDaysLastWeek2-E-2-5-a DaysOfTheWeek-E-2-5-a ::= '1101'B sunnyDaysLastWeek3-E-2-5-a DaysOfTheWeek-E-2-5-a ::= '1101000'B DaysOfTheWeek-E-2-5-b ::= BIT STRING { sunday(0), monday (1), tuesday(2), wednesday(3), thursday(4), friday(5), saturday(6) } (SIZE (7)) sunnyDaysLastWeek1-E-2-5-b DaysOfTheWeek-E-2-5-b ::= {sunday, monday, wednesday} sunnyDaysLastWeek3-E-2-5-b DaysOfTheWeek-E-2-5-b ::= '1101000'B PersonalStatus-E-2-5 ::= BIT STRING {married(0), employed(1), veteran(2), collegeGraduate(3)} billClinton-E-2-5 PersonalStatus-E-2-5 ::= {married, employed, collegeGraduate} hillaryClinton-E-2-5 PersonalStatus-E-2-5 ::= '110100'B -- E.2.6 Octet string G4FacsimileImage-E-2-6 ::= OCTET STRING image-E-2-6 G4FacsimileImage-E-2-6 ::= '3FE2EBAD471005'H Surname-E-2-6 ::= PrintableString president-E-2-6 Surname-E-2-6 ::= "Clinton" -- E.2.7 UniversalString, BMPString and UTF8String greekCapitalLetterSigma-E-2-7 BMPString ::= {0, 0, 3, 163} rightwardsArrow-E-2-7 UTF8String ::= {0, 0, 33, 146} infinity-E-2-7 UTF8String ::= {0, 0, 34, 30} property-E-2-7 UTF8String ::= {"f ", rightwardsArrow-E-2-7, " ", infinity-E-2-7} -- E.2.8 CHARACTER STRING PackedBCDString-E-2-8 ::= CHARACTER STRING (WITH COMPONENTS { identification (WITH COMPONENTS { fixed PRESENT } ) } ) -- E.2.9 Null PatientIdentifier-E-2-9 ::= SEQUENCE { name VisibleString, roomNumber CHOICE { room INTEGER, outPatient NULL -- if an out-patient -- } } lastPatient-E-2-9 PatientIdentifier-E-2-9 ::= { name "Jane Doe", roomNumber outPatient : NULL } -- E.2.10 Sequence and sequence-of NamesOfMemberNations-E-2-10 ::= SEQUENCE OF VisibleString firstTwo-E-2-10 NamesOfMemberNations-E-2-10 ::= {"Australia", "Austria"} NamesOfMemberNations2-E-2-10 ::= SEQUENCE OF memberNation VisibleString firstTwo2-E-2-10 NamesOfMemberNations2-E-2-10 ::= {memberNation "Australia", memberNation "Austria"} NamesOfOfficers-E-2-10 ::= SEQUENCE { president VisibleString, vicePresident VisibleString, secretary VisibleString } acmeCorp-E-2-10 NamesOfOfficers-E-2-10 ::= { president "Jane Doe", vicePresident "John Doe", secretary "Joe Doe" } Credentials-E-2-10 ::= SEQUENCE { userName VisibleString, password VisibleString, accountNumber INTEGER } -- First version of protocol containing "Record" Record-E-2-10-a ::= SEQUENCE { userName VisibleString, password VisibleString, accountNumber INTEGER, ..., ... } -- Second version of protocol containing "Record" Record-E-2-10-b ::= SEQUENCE { userName VisibleString, password VisibleString, accountNumber INTEGER, ..., -- Extension addition added in protocol version 2 [[ -- 2: lastLoggedIn GeneralizedTime OPTIONAL, minutesLastLoggedIn INTEGER ]], ... } ThumbPrint ::= NULL Certificate ::= NULL -- Third version of protocol containing "Record" Record-E-2-10-c ::= SEQUENCE { userName VisibleString, password VisibleString, accountNumber INTEGER, ..., -- Extension addition added in protocol version 2 [[ -- 2: lastLoggedIn GeneralizedTime OPTIONAL, minutesLastLoggedIn INTEGER ]], -- Extension addition added in protocol version 3 [[ -- 3: certificate Certificate, thumb ThumbPrint OPTIONAL ]], ... } -- E.2.11 Set and set-of UserName-E-2-11-a ::= SET { personalName [0] VisibleString, organizationName [1] VisibleString, countryName [2] VisibleString } user-E-2-11-a UserName-E-2-11-a ::= { countryName "Nigeria", personalName "Jonas Maruba", organizationName "Meteorology, Ltd." } UserName-E-2-11-b ::= SET { personalName [0] VisibleString, organizationName [1] VisibleString OPTIONAL -- defaults to that of the local organization -- , countryName [2] VisibleString OPTIONAL -- defaults to that of the local country -- } UserName-E-2-11-c ::= SET { personalName VisibleString, -- First version of "UserName" organizationName VisibleString OPTIONAL , countryName VisibleString OPTIONAL, ..., ... } user-E-2-11-b UserName-E-2-11-c ::= { personalName "Jonas Maruba" } UserName-E-2-11-d ::= SET { -- Second version of "UserName" personalName VisibleString, organizationName VisibleString OPTIONAL, countryName VisibleString OPTIONAL, ..., [[ --2: \-\- Extension addition added in protocol version 2 internetEmailAddress VisibleString, faxNumber VisibleString OPTIONAL ]], ... } user-E-2-11-c UserName-E-2-11-d ::= { personalName "Jonas Maruba", internetEmailAddress "jonas@meteor.ngo.com" } UserName-E-2-11-e ::= SET { -- Fifth version of protocol containing "UserName" personalName VisibleString, organizationName VisibleString OPTIONAL, countryName VisibleString OPTIONAL, ..., [[ --2: \-\- Extension addition added in version 2 internetEmailAddress VisibleString, faxNumber VisibleString OPTIONAL ]], [[ --5: \-\- Extension addition added in version 5 phoneNumber VisibleString OPTIONAL ]], ... } user-E-2-11-d UserName-E-2-11-e ::= { personalName "Jonas Maruba", internetEmailAddress "jonas@meteor.ngo.com" } Keywords-E-2-11 ::= SET OF VisibleString -- in arbitrary order someASN1Keywords-E-2-11 Keywords-E-2-11 ::= {"INTEGER", "BOOLEAN", "REAL"} Keywords2-E-2-11 ::= SET OF keyword VisibleString -- in arbitrary order someASN1Keywords2-E-2-11 Keywords2-E-2-11 ::= {keyword "INTEGER", keyword "BOOLEAN", keyword "REAL"} -- E.2.12 Tagged FileName-E-2-12 ::= [APPLICATION 8] SEQUENCE { directoryName VisibleString, directoryRelativeFileName VisibleString} CustomerRecord-E-2-12-a ::= SET { name [0] VisibleString, mailingAddress [1] VisibleString, accountNumber [2] INTEGER, balanceDue [3] INTEGER -- in cents -- } CustomerAttribute-E-2-12-a ::= CHOICE { name [0] VisibleString, mailingAddress [1] VisibleString, accountNumber [2] INTEGER, balanceDue [3] INTEGER -- in cents -- } AcmeBadgeNumber-E-2-12 ::= [PRIVATE 2] INTEGER badgeNumber-E-2-12 AcmeBadgeNumber-E-2-12 ::= 2345 CustomerRecord-E-2-12-b ::= SET { name [0] IMPLICIT VisibleString, mailingAddress [1] IMPLICIT VisibleString, accountNumber [2] IMPLICIT INTEGER, balanceDue [3] IMPLICIT INTEGER -- in cents -- } CustomerAttribute-E-2-12-b ::= CHOICE { name [0] IMPLICIT VisibleString, mailingAddress [1] IMPLICIT VisibleString, accountNumber [2] IMPLICIT INTEGER, balanceDue [3] IMPLICIT INTEGER -- in cents -- } -- E.2.13 Choice FileIdentifier-E-2-13-a ::= CHOICE { relativeName VisibleString, -- name of file (for example, "MarchProgressReport") absoluteName VisibleString, -- name of file and containing directory -- (for example, "MarchProgressReport") serialNumber INTEGER -- system-assigned identifier for file -- } file-E-2-13 FileIdentifier-E-2-13-a ::= serialNumber : 106448503 FileIdentifier-E-2-13-b ::= CHOICE { -- First version of FileIdentifier relativeName VisibleString, absoluteName VisibleString, ..., ... } fileId1-E-2-13-a FileIdentifier-E-2-13-b ::= relativeName : "MarchProgressReport.doc" FileIdentifier-E-2-13-c ::= CHOICE { -- Second version of FileIdentifier relativeName VisibleString, absoluteName VisibleString, ..., serialNumber INTEGER, -- Extension addition added in version 2 ... } fileId1-E-2-13-b FileIdentifier-E-2-13-c ::= relativeName : "MarchProgressReport.doc" fileId2-E-2-13-a FileIdentifier-E-2-13-c ::= serialNumber : 214 VendorExt ::= OCTET STRING FileIdentifier-E-2-13-d ::= CHOICE { -- Third version of FileIdentifier relativeName VisibleString, absoluteName VisibleString, ..., serialNumber INTEGER, -- Extension addition added in version 2 [[ -- Extension addition added in version 3 vendorSpecific VendorExt, unidentified NULL ]], ... } fileId1-E-2-13-c FileIdentifier-E-2-13-d ::= relativeName : "MarchProgressReport.doc" fileId2-E-2-13-b FileIdentifier-E-2-13-d ::= serialNumber : 214 fileId3-E-2-13-a FileIdentifier-E-2-13-d ::= unidentified : NULL Greeting-E-2-13-a ::= CHOICE { -- First version of "Greeting" postCard VisibleString, ..., ... } Audio ::= NULL Video ::= REAL Greeting-E-2-13-b ::= CHOICE { -- Second version of "Greeting" postCard VisibleString, ..., [[ --2: \-\- Extension addition added in version 2 audio Audio, video Video ]], ... } Greeting-E-2-13-c ::= [APPLICATION 12] CHOICE { postCard VisibleString, recording Voice-E-2-13 } Voice-E-2-13 ::= CHOICE { english OCTET STRING, swahili OCTET STRING } myGreeting-E-2-13 Greeting-E-2-13-c ::= recording : english : '019838547E0'H -- E.2.14 Selection type -- FileAttribute-E-2-14 ::= CHOICE { -- date-last-used INTEGER, -- file-name VisibleString -- } -- -- AttributeList-E-2-14 ::= SEQUENCE { -- first-attribute date-last-used < FileAttribute, -- second-attribute file-name < FileAttribute -- } -- -- listOfAttributes-E-2-14 AttributeList-E-2-14 ::= { -- first-attribute 27, -- second-attribute "PROGRAM" -- } -- E.2.15 Object class field type ATTRIBUTE-E-2-15 ::= CLASS { &AttributeType, &attributeId OBJECT IDENTIFIER UNIQUE } Attribute-E-2-15 ::= SEQUENCE { attributeID ATTRIBUTE-E-2-15.&attributeId, -- this is normally constrained. attributeValue ATTRIBUTE-E-2-15.&AttributeType -- this is normally constrained. } -- E.2.16 Embedded-pdv -- FileContents-E-2-16 ::= EMBEDDED PDV -- -- DocumentList-E-2-16 ::= SEQUENCE OF document EMBEDDED PDV -- E.2.18 Instance-of -- ACCESS-CONTROL-CLASS-E-2-18 ::= TYPE-IDENTIFIER -- -- Get-Invoke-E-2-18 ::= SEQUENCE { -- objectClass ObjectClass, -- objectInstance ObjectInstance, -- accessControl INSTANCE OF ACCESS-CONTROL-CLASS-E-2-18, \-\- this is normally -- \-\- constrained. -- attributeID ATTRIBUTE-E-2-15.&attributeId -- } -- -- Get-Invoke-E-2-18 ::= SEQUENCE { -- objectClass ObjectClass, -- objectInstance ObjectInstance, -- accessControl [UNIVERSAL 8] IMPLICIT SEQUENCE { -- type-id ACCESS-CONTROL-CLASS-E-2-18.&id, \-\- this is normally -- \-\- constrained. -- value [0] ACCESS-CONTROL-CLASS-E-2-18.&Type \-\- this is normally -- \-\- constrained. -- }, -- attributeID ATTRIBUTE-E-2-15.&attributeId -- } -- E.4 Subtypes AtomicNumber-E-4 ::= INTEGER (1..104) TouchToneString-E-4 ::= IA5String (FROM ("0123456789" | "*" | "#")) (SIZE (1..63)) Parameter ::= NULL ParameterList-E-4 ::= SET SIZE (1..63) OF Parameter SmallPrime-E-4-a ::= INTEGER (2|3|5|7|11|13|17|19|23|29) SmallPrime-E-4-b ::= INTEGER (2 | 3, ...) -- First version of SmallPrime-E-4-c ::= INTEGER (2 | 3, ..., 5 | 7 | 11) SmallPrime-E-4-d ::= INTEGER (2 | 3, ..., 5 | 7 | 11 | 13 | 17 | 19) TypeA ::= INTEGER TypeB ::= BIT STRING TypeC ::= REAL Envelope-E-4 ::= SET { typeA TypeA, typeB TypeB OPTIONAL, typeC TypeC OPTIONAL } ABEnvelope-E-4-a ::= Envelope-E-4 (WITH COMPONENTS {... , typeB PRESENT, typeC ABSENT}) ACEnvelope-E-4-a ::= Envelope-E-4 (WITH COMPONENTS {... , typeB ABSENT, typeC PRESENT}) ABEnvelope-E-4-b ::= Envelope-E-4 (WITH COMPONENTS {typeA, typeB}) ACEnvelope-E-4-b ::= Envelope-E-4 (WITH COMPONENTS {typeA, typeC}) PDU-E-4 ::= SET { alpha INTEGER, beta IA5String OPTIONAL, gamma SEQUENCE OF Parameter, delta BOOLEAN } TestPDU-E-4 ::= PDU-E-4 (WITH COMPONENTS {... , delta (FALSE), alpha (MIN..<0)}) FurtherTestPDU-E-4 ::= TestPDU-E-4 (WITH COMPONENTS {... , beta (SIZE (5|12)) PRESENT} ) Text-block-E-4 ::= SEQUENCE OF VisibleString Address-E-4 ::= Text-block-E-4 (SIZE (1..6)) (WITH COMPONENT (SIZE (1..32))) A ::= NULL B ::= NULL C ::= NULL D ::= NULL E ::= NULL Z-E-4 ::= CHOICE { a A, b B, c C, d D, e E } V-E-4 ::= Z-E-4 (WITH COMPONENTS { ..., a ABSENT, b ABSENT }) W-E-4 ::= Z-E-4 (WITH COMPONENTS { ..., a PRESENT }) X-E-4 ::= Z-E-4 (WITH COMPONENTS { a PRESENT }) Y-E-4 ::= Z-E-4 (WITH COMPONENTS { a ABSENT, b, c }) Months-E-4 ::= ENUMERATED { january (1), february (2), march (3), april (4), may (5), june (6), july (7), august (8), september (9), october (10), november (11), december (12) } First-quarter-E-4 ::= Months-E-4 ( january | february | march ) Second-quarter-E-4 ::= Months-E-4 ( april | may | june ) Third-quarter-E-4 ::= Months-E-4 ( july | august | september ) Fourth-quarter-E-4 ::= Months-E-4 ( october | november | december ) First-half-E-4 ::= Months-E-4 ( First-quarter-E-4 | Second-quarter-E-4 ) Second-half-E-4 ::= Months-E-4 ( Third-quarter-E-4 | Fourth-quarter-E-4 ) -- F.2.6 -- ToDo: Fix. VanillaBMPString-F-2-6-1 ::= BMPString (FROM (ALL EXCEPT ({0,0,0,0}..{0,0,0,31} | {0,0,0,128}..{0,0,0,159}))) C0-F-2-6 ::= BMPString (FROM ({0,0,0,0} .. {0,0,0,31})) -- C0 control functions C1-F-2-6 ::= BMPString (FROM ({0,0,0,128} .. {0,0,0,159})) -- C1 control functions VanillaBMPString-F-2-6-2 ::= BMPString (FROM (ALL EXCEPT (C0 | C1))) -- G.1.4 A-G-1-4-1 ::= SEQUENCE { a INTEGER, ... } A-G-1-4-2 ::= SEQUENCE { a INTEGER, ..., b BOOLEAN, c INTEGER } A-G-1-4-3 ::= SEQUENCE { a INTEGER, ..., b BOOLEAN, c INTEGER, d SEQUENCE { e INTEGER, ..., ..., f IA5String } } A-G-1-4-4 ::= SEQUENCE { a INTEGER, ..., b BOOLEAN, c INTEGER, d SEQUENCE { e INTEGER, ..., g BOOLEAN OPTIONAL, h BMPString, ..., f IA5String } } -- G.1.7 A-G-1-7-1 ::= SEQUENCE { a INTEGER, ... } A-G-1-7-2 ::= SEQUENCE { a INTEGER, ..., [[ b BOOLEAN, c INTEGER ]] } A-G-1-7-3 ::= SEQUENCE { a INTEGER, ..., [[ b BOOLEAN, c INTEGER ]], d SEQUENCE { e INTEGER, ..., ..., f IA5String } } A-G-1-7-4 ::= SEQUENCE { a INTEGER, ..., [[ b BOOLEAN, c INTEGER ]], d SEQUENCE { e INTEGER, ..., [[ g BOOLEAN OPTIONAL, h BMPString ]], ..., f IA5String } } -- G.4.1.2 A-G-4-1-2 ::= INTEGER (MIN .. MAX, ... , 1..10) -- G.4.2.3 A1-G-4-2-3 ::= INTEGER (1..32, ... , 33..128) -- A1 is extensible, and contains values 1 to 128 with 1 to 32 -- in the root and 33 to 128 as extension additions. B1-G-4-2-3 ::= A1-G-4-2-3 (1..128) -- or equivalently -- B1 ::= INTEGER (1..32, ... , 33..128) (1..128) -- \-\- These are illegal, as 128 is not in the parent, which -- \-\- lost its extension additions when it was further constrained B2-G-4-2-3 ::= A1-G-4-2-3 (1..16) -- This is legal. B2 is not extensible, and contains 1 to 16. -- A2 ::= INTEGER (1..32) (MIN .. 63) -- \-\- MIN is 1, and 63 is illegal A3-G-4-2-3 ::= INTEGER ( (1..32) INTERSECTION (MIN..63) ) -- This is legal. MIN is minus infinity and A3 contains 1 to 32 -- G.4.3.4 -- ToDo: Fix. -- A ::= INTEGER ((1..256, ... , B) INTERSECTION (1..256)) -- \-\- A always contains (only) the values 1..256, no matter what values -- \-\- B contains, but is nonetheless formally extensible END asn1tools-0.169.0/tests/files/x680.py000066400000000000000000001562241524544274600171640ustar00rootroot00000000000000EXPECTED = {'X680': {'extensibility-implied': False, 'imports': {}, 'object-classes': {'ATTRIBUTE-E-2-15': {'members': [{'name': '&AttributeType', 'type': 'OpenType'}, {'name': '&attributeId', 'type': 'OBJECT ' 'IDENTIFIER'}]}}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'A': {'type': 'NULL'}, 'A-19-5': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 3), None, ('c', 1)]}, 'A-19-6': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), None, ('c', 2)]}, 'A-G-1-4-1': {'members': [{'name': 'a', 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'A-G-1-4-2': {'members': [{'name': 'a', 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}, {'name': 'c', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'A-G-1-4-3': {'members': [{'name': 'a', 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}, {'name': 'c', 'type': 'INTEGER'}, {'members': [{'name': 'e', 'type': 'INTEGER'}, None, None, {'name': 'f', 'type': 'IA5String'}], 'name': 'd', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'A-G-1-4-4': {'members': [{'name': 'a', 'type': 'INTEGER'}, None, {'name': 'b', 'type': 'BOOLEAN'}, {'name': 'c', 'type': 'INTEGER'}, {'members': [{'name': 'e', 'type': 'INTEGER'}, None, {'name': 'g', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'h', 'type': 'BMPString'}, None, {'name': 'f', 'type': 'IA5String'}], 'name': 'd', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'A-G-1-7-1': {'members': [{'name': 'a', 'type': 'INTEGER'}, None], 'type': 'SEQUENCE'}, 'A-G-1-7-2': {'members': [{'name': 'a', 'type': 'INTEGER'}, None, [{'name': 'b', 'type': 'BOOLEAN'}, {'name': 'c', 'type': 'INTEGER'}]], 'type': 'SEQUENCE'}, 'A-G-1-7-3': {'members': [{'name': 'a', 'type': 'INTEGER'}, None, [{'name': 'b', 'type': 'BOOLEAN'}, {'name': 'c', 'type': 'INTEGER'}], {'members': [{'name': 'e', 'type': 'INTEGER'}, None, None, {'name': 'f', 'type': 'IA5String'}], 'name': 'd', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'A-G-1-7-4': {'members': [{'name': 'a', 'type': 'INTEGER'}, None, [{'name': 'b', 'type': 'BOOLEAN'}, {'name': 'c', 'type': 'INTEGER'}], {'members': [{'name': 'e', 'type': 'INTEGER'}, None, [{'name': 'g', 'optional': True, 'type': 'BOOLEAN'}, {'name': 'h', 'type': 'BMPString'}], None, {'name': 'f', 'type': 'IA5String'}], 'name': 'd', 'type': 'SEQUENCE'}], 'type': 'SEQUENCE'}, 'A-G-4-1-2': {'restricted-to': [('MIN', 'MAX'), None, (1, 10)], 'type': 'INTEGER'}, 'A1-G-4-2-3': {'restricted-to': [(1, 32), None, (33, 128)], 'type': 'INTEGER'}, 'A3-G-4-2-3': {'type': 'INTEGER'}, 'ABEnvelope-E-4-a': {'type': 'Envelope-E-4', 'with-components': [None, ('typeB', 'PRESENT'), ('typeC', 'ABSENT')]}, 'ABEnvelope-E-4-b': {'type': 'Envelope-E-4', 'with-components': [['typeA'], ['typeB']]}, 'ACEnvelope-E-4-a': {'type': 'Envelope-E-4', 'with-components': [None, ('typeB', 'ABSENT'), ('typeC', 'PRESENT')]}, 'ACEnvelope-E-4-b': {'type': 'Envelope-E-4', 'with-components': [['typeA'], ['typeC']]}, 'AcmeBadgeNumber-E-2-12': {'tag': {'class': 'PRIVATE', 'number': 2}, 'type': 'INTEGER'}, 'Address-E-4': {'size': [(1, 6)], 'type': 'Text-block-E-4'}, 'AngleInRadians-E-2-4': {'type': 'REAL'}, 'App-X-Real-E-2-4': {'type': 'REAL', 'with-components': [('mantissa', (-16777215, 16777215)), ('base', 2), ('exponent', (-125, 128))]}, 'AtomicNumber-E-4': {'restricted-to': [(1, 104)], 'type': 'INTEGER'}, 'Attribute-E-2-15': {'members': [{'name': 'attributeID', 'table': None, 'type': 'ATTRIBUTE-E-2-15.&attributeId'}, {'name': 'attributeValue', 'table': None, 'type': 'ATTRIBUTE-E-2-15.&AttributeType'}], 'type': 'SEQUENCE'}, 'Audio': {'type': 'NULL'}, 'B': {'type': 'NULL'}, 'B-19-6': {'type': 'ENUMERATED', 'values': [('a', 1), ('b', 2), ('c', 0), None, ('d', 3)]}, 'B1-G-4-2-3': {'restricted-to': [(1, 128)], 'type': 'A1-G-4-2-3'}, 'B2-G-4-2-3': {'restricted-to': [(1, 16)], 'type': 'A1-G-4-2-3'}, 'BitField-E-2-5': {'size': [12], 'type': 'BIT STRING'}, 'C': {'type': 'NULL'}, 'C-19-6': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), None, ('c', 3), ('d', 4)]}, 'C0-F-2-6': {'from': [('{', '{')], 'type': 'BMPString'}, 'C1-F-2-6': {'from': [('{', '{')], 'type': 'BMPString'}, 'Certificate': {'type': 'NULL'}, 'CheckingAccountBalance-E-2-2': {'type': 'INTEGER'}, 'ChildInformation-E-1-1': {'members': [{'name': 'name', 'type': 'Name-E-1-1'}, {'name': 'dateOfBirth', 'type': 'Date-E-1-1'}], 'type': 'SET'}, 'Credentials-E-2-10': {'members': [{'name': 'userName', 'type': 'VisibleString'}, {'name': 'password', 'type': 'VisibleString'}, {'name': 'accountNumber', 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'CustomerAttribute-E-2-12-a': {'members': [{'name': 'name', 'tag': {'number': 0}, 'type': 'VisibleString'}, {'name': 'mailingAddress', 'tag': {'number': 1}, 'type': 'VisibleString'}, {'name': 'accountNumber', 'tag': {'number': 2}, 'type': 'INTEGER'}, {'name': 'balanceDue', 'tag': {'number': 3}, 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'CustomerAttribute-E-2-12-b': {'members': [{'name': 'name', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'VisibleString'}, {'name': 'mailingAddress', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'VisibleString'}, {'name': 'accountNumber', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'INTEGER'}, {'name': 'balanceDue', 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'CustomerRecord-E-2-12-a': {'members': [{'name': 'name', 'tag': {'number': 0}, 'type': 'VisibleString'}, {'name': 'mailingAddress', 'tag': {'number': 1}, 'type': 'VisibleString'}, {'name': 'accountNumber', 'tag': {'number': 2}, 'type': 'INTEGER'}, {'name': 'balanceDue', 'tag': {'number': 3}, 'type': 'INTEGER'}], 'type': 'SET'}, 'CustomerRecord-E-2-12-b': {'members': [{'name': 'name', 'tag': {'kind': 'IMPLICIT', 'number': 0}, 'type': 'VisibleString'}, {'name': 'mailingAddress', 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'VisibleString'}, {'name': 'accountNumber', 'tag': {'kind': 'IMPLICIT', 'number': 2}, 'type': 'INTEGER'}, {'name': 'balanceDue', 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'INTEGER'}], 'type': 'SET'}, 'D': {'type': 'NULL'}, 'D-19-5': {'type': 'ENUMERATED', 'values': [('a', 0), ('b', 1), None, ('c', 2)]}, 'D-19-6': {'type': 'ENUMERATED', 'values': [('a', 0), ('z', 25), None, ('d', 1)]}, 'Date-E-1-1': {'tag': {'class': 'APPLICATION', 'number': 3}, 'type': 'VisibleString'}, 'DayOfTheMonth-E-2-2': {'named-numbers': {'first': 1, 'last': 31}, 'type': 'INTEGER'}, 'DayOfTheMonth-E-2-2-a': {'named-numbers': {'first': 1, 'last': 31}, 'restricted-to': ['first', 'last'], 'type': 'INTEGER'}, 'DayOfTheMonth-E-2-2-b': {'named-numbers': {'first': 1, 'last': 31}, 'restricted-to': [('first', 'last')], 'type': 'INTEGER'}, 'DayOfTheWeek-E-2-3': {'type': 'ENUMERATED', 'values': [('sunday', 0), ('monday', 1), ('tuesday', 2), ('wednesday', 3), ('thursday', 4), ('friday', 5), ('saturday', 6)]}, 'DaysOfTheWeek-E-2-5-a': {'named-bits': [('sunday', '0'), ('monday', '1'), ('tuesday', '2'), ('wednesday', '3'), ('thursday', '4'), ('friday', '5'), ('saturday', '6')], 'size': [(0, 7)], 'type': 'BIT STRING'}, 'DaysOfTheWeek-E-2-5-b': {'named-bits': [('sunday', '0'), ('monday', '1'), ('tuesday', '2'), ('wednesday', '3'), ('thursday', '4'), ('friday', '5'), ('saturday', '6')], 'size': [7], 'type': 'BIT STRING'}, 'E': {'type': 'NULL'}, 'Employed-E-2-1': {'type': 'BOOLEAN'}, 'EmployeeNumber-E-1-1': {'tag': {'class': 'APPLICATION', 'number': 2}, 'type': 'INTEGER'}, 'Envelope-E-4': {'members': [{'name': 'typeA', 'type': 'TypeA'}, {'name': 'typeB', 'optional': True, 'type': 'TypeB'}, {'name': 'typeC', 'optional': True, 'type': 'TypeC'}], 'type': 'SET'}, 'FileIdentifier-E-2-13-a': {'members': [{'name': 'relativeName', 'type': 'VisibleString'}, {'name': 'absoluteName', 'type': 'VisibleString'}, {'name': 'serialNumber', 'type': 'INTEGER'}], 'type': 'CHOICE'}, 'FileIdentifier-E-2-13-b': {'members': [{'name': 'relativeName', 'type': 'VisibleString'}, {'name': 'absoluteName', 'type': 'VisibleString'}, None, None], 'type': 'CHOICE'}, 'FileIdentifier-E-2-13-c': {'members': [{'name': 'relativeName', 'type': 'VisibleString'}, {'name': 'absoluteName', 'type': 'VisibleString'}, None, {'name': 'serialNumber', 'type': 'INTEGER'}, None], 'type': 'CHOICE'}, 'FileIdentifier-E-2-13-d': {'members': [{'name': 'relativeName', 'type': 'VisibleString'}, {'name': 'absoluteName', 'type': 'VisibleString'}, None, {'name': 'serialNumber', 'type': 'INTEGER'}, [{'name': 'vendorSpecific', 'type': 'VendorExt'}, {'name': 'unidentified', 'type': 'NULL'}], None], 'type': 'CHOICE'}, 'FileName-E-2-12': {'members': [{'name': 'directoryName', 'type': 'VisibleString'}, {'name': 'directoryRelativeFileName', 'type': 'VisibleString'}], 'tag': {'class': 'APPLICATION', 'number': 8}, 'type': 'SEQUENCE'}, 'First-half-E-4': {'restricted-to': [{'type': 'First-quarter-E-4'}, {'type': 'Second-quarter-E-4'}], 'type': 'Months-E-4'}, 'First-quarter-E-4': {'restricted-to': ['january', 'february', 'march'], 'type': 'Months-E-4'}, 'Fourth-quarter-E-4': {'restricted-to': ['october', 'november', 'december'], 'type': 'Months-E-4'}, 'FurtherTestPDU-E-4': {'type': 'TestPDU-E-4', 'with-components': [None, ['beta', [{'size': [5, 12]}], 'PRESENT']]}, 'G3FacsimilePage-E-2-5': {'type': 'BIT STRING'}, 'G4FacsimileImage-E-2-6': {'type': 'OCTET STRING'}, 'Greeting-E-2-13-a': {'members': [{'name': 'postCard', 'type': 'VisibleString'}, None, None], 'type': 'CHOICE'}, 'Greeting-E-2-13-b': {'members': [{'name': 'postCard', 'type': 'VisibleString'}, None, [{'name': 'audio', 'type': 'Audio'}, {'name': 'video', 'type': 'Video'}], None], 'type': 'CHOICE'}, 'Greeting-E-2-13-c': {'members': [{'name': 'postCard', 'type': 'VisibleString'}, {'name': 'recording', 'type': 'Voice-E-2-13'}], 'tag': {'class': 'APPLICATION', 'number': 12}, 'type': 'CHOICE'}, 'Keywords-E-2-11': {'element': {'type': 'VisibleString'}, 'type': 'SET OF'}, 'Keywords2-E-2-11': {'element': {'type': 'VisibleString'}, 'element_name': 'keyword', 'type': 'SET OF'}, 'MaritalStatus-E-2-3-a': {'type': 'ENUMERATED', 'values': [('single', 0), ('married', 1)]}, 'MaritalStatus-E-2-3-b': {'type': 'ENUMERATED', 'values': [('single', 0), ('married', 1), None, ('widowed', 2)]}, 'MaritalStatus-E-2-3-c': {'type': 'ENUMERATED', 'values': [('single', 0), ('married', 1), None, ('widowed', 2), ('divorced', 3)]}, 'Months-E-4': {'type': 'ENUMERATED', 'values': [('january', 1), ('february', 2), ('march', 3), ('april', 4), ('may', 5), ('june', 6), ('july', 7), ('august', 8), ('september', 9), ('october', 10), ('november', 11), ('december', 12)]}, 'Name-E-1-1': {'members': [{'name': 'givenName', 'type': 'VisibleString'}, {'name': 'initial', 'type': 'VisibleString'}, {'name': 'familyName', 'type': 'VisibleString'}], 'tag': {'class': 'APPLICATION', 'number': 1}, 'type': 'SEQUENCE'}, 'NamesOfMemberNations-E-2-10': {'element': {'type': 'VisibleString'}, 'type': 'SEQUENCE OF'}, 'NamesOfMemberNations2-E-2-10': {'element': {'type': 'VisibleString'}, 'element_name': 'memberNation', 'type': 'SEQUENCE OF'}, 'NamesOfOfficers-E-2-10': {'members': [{'name': 'president', 'type': 'VisibleString'}, {'name': 'vicePresident', 'type': 'VisibleString'}, {'name': 'secretary', 'type': 'VisibleString'}], 'type': 'SEQUENCE'}, 'PDU-E-4': {'members': [{'name': 'alpha', 'type': 'INTEGER'}, {'name': 'beta', 'optional': True, 'type': 'IA5String'}, {'element': {'type': 'Parameter'}, 'name': 'gamma', 'type': 'SEQUENCE OF'}, {'name': 'delta', 'type': 'BOOLEAN'}], 'type': 'SET'}, 'PackedBCDString-E-2-8': {'type': 'CHARACTER STRING', 'with-components': [('identification', {'with-components': [('fixed', 'PRESENT')]})]}, 'Parameter': {'type': 'NULL'}, 'ParameterList-E-4': {'element': {'type': 'Parameter'}, 'size': [(1, 63)], 'type': 'SET OF'}, 'PatientIdentifier-E-2-9': {'members': [{'name': 'name', 'type': 'VisibleString'}, {'members': [{'name': 'room', 'type': 'INTEGER'}, {'name': 'outPatient', 'type': 'NULL'}], 'name': 'roomNumber', 'type': 'CHOICE'}], 'type': 'SEQUENCE'}, 'PersonalStatus-E-2-5': {'named-bits': [('married', '0'), ('employed', '1'), ('veteran', '2'), ('collegeGraduate', '3')], 'type': 'BIT STRING'}, 'PersonnelRecord-E-1-1': {'members': [{'name': 'name', 'type': 'Name-E-1-1'}, {'name': 'title', 'type': 'VisibleString'}, {'name': 'number', 'type': 'EmployeeNumber-E-1-1'}, {'name': 'dateOfHire', 'type': 'Date-E-1-1'}, {'name': 'nameOfSpouse', 'type': 'Name-E-1-1'}, {'default': [], 'element': {'type': 'ChildInformation-E-1-1'}, 'name': 'children', 'type': 'SEQUENCE ' 'OF'}], 'tag': {'class': 'APPLICATION', 'number': 0}, 'type': 'SET'}, 'Record-E-2-10-a': {'members': [{'name': 'userName', 'type': 'VisibleString'}, {'name': 'password', 'type': 'VisibleString'}, {'name': 'accountNumber', 'type': 'INTEGER'}, None, None], 'type': 'SEQUENCE'}, 'Record-E-2-10-b': {'members': [{'name': 'userName', 'type': 'VisibleString'}, {'name': 'password', 'type': 'VisibleString'}, {'name': 'accountNumber', 'type': 'INTEGER'}, None, [{'name': 'lastLoggedIn', 'optional': True, 'type': 'GeneralizedTime'}, {'name': 'minutesLastLoggedIn', 'type': 'INTEGER'}], None], 'type': 'SEQUENCE'}, 'Record-E-2-10-c': {'members': [{'name': 'userName', 'type': 'VisibleString'}, {'name': 'password', 'type': 'VisibleString'}, {'name': 'accountNumber', 'type': 'INTEGER'}, None, [{'name': 'lastLoggedIn', 'optional': True, 'type': 'GeneralizedTime'}, {'name': 'minutesLastLoggedIn', 'type': 'INTEGER'}], [{'name': 'certificate', 'type': 'Certificate'}, {'name': 'thumb', 'optional': True, 'type': 'ThumbPrint'}], None], 'type': 'SEQUENCE'}, 'Second-half-E-4': {'restricted-to': [{'type': 'Third-quarter-E-4'}, {'type': 'Fourth-quarter-E-4'}], 'type': 'Months-E-4'}, 'Second-quarter-E-4': {'restricted-to': ['april', 'may', 'june'], 'type': 'Months-E-4'}, 'SmallPrime-E-4-a': {'restricted-to': [2, 3, 5, 7, 11, 13, 17, 19, 23, 29], 'type': 'INTEGER'}, 'SmallPrime-E-4-b': {'restricted-to': [2, 3, None], 'type': 'INTEGER'}, 'SmallPrime-E-4-c': {'restricted-to': [2, 3, None, 5, 7, 11], 'type': 'INTEGER'}, 'SmallPrime-E-4-d': {'restricted-to': [2, 3, None, 5, 7, 11, 13, 17, 19], 'type': 'INTEGER'}, 'Surname-E-2-6': {'type': 'PrintableString'}, 'T-14-10': {'members': [{'name': 'a', 'type': 'BOOLEAN'}, {'element': {'type': 'INTEGER'}, 'name': 'b', 'type': 'SET OF'}], 'type': 'SEQUENCE'}, 'TestPDU-E-4': {'type': 'PDU-E-4', 'with-components': [None, ('delta', 'FALSE'), ('alpha', ('MIN', '<'))]}, 'Text-block-E-4': {'element': {'type': 'VisibleString'}, 'type': 'SEQUENCE OF'}, 'Third-quarter-E-4': {'restricted-to': ['july', 'august', 'september'], 'type': 'Months-E-4'}, 'ThumbPrint': {'type': 'NULL'}, 'TouchToneString-E-4': {'from': [('0', '0'), ('1', '1'), ('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'), ('7', '7'), ('8', '8'), ('9', '9'), ('*', '*'), ('#', '#')], 'size': [(1, 63)], 'type': 'IA5String'}, 'TypeA': {'type': 'INTEGER'}, 'TypeB': {'type': 'BIT STRING'}, 'TypeC': {'type': 'REAL'}, 'UserName-E-2-11-a': {'members': [{'name': 'personalName', 'tag': {'number': 0}, 'type': 'VisibleString'}, {'name': 'organizationName', 'tag': {'number': 1}, 'type': 'VisibleString'}, {'name': 'countryName', 'tag': {'number': 2}, 'type': 'VisibleString'}], 'type': 'SET'}, 'UserName-E-2-11-b': {'members': [{'name': 'personalName', 'tag': {'number': 0}, 'type': 'VisibleString'}, {'name': 'organizationName', 'optional': True, 'tag': {'number': 1}, 'type': 'VisibleString'}, {'name': 'countryName', 'optional': True, 'tag': {'number': 2}, 'type': 'VisibleString'}], 'type': 'SET'}, 'UserName-E-2-11-c': {'members': [{'name': 'personalName', 'type': 'VisibleString'}, {'name': 'organizationName', 'optional': True, 'type': 'VisibleString'}, {'name': 'countryName', 'optional': True, 'type': 'VisibleString'}, None, None], 'type': 'SET'}, 'UserName-E-2-11-d': {'members': [{'name': 'personalName', 'type': 'VisibleString'}, {'name': 'organizationName', 'optional': True, 'type': 'VisibleString'}, {'name': 'countryName', 'optional': True, 'type': 'VisibleString'}, None, [{'name': 'internetEmailAddress', 'type': 'VisibleString'}, {'name': 'faxNumber', 'optional': True, 'type': 'VisibleString'}], None], 'type': 'SET'}, 'UserName-E-2-11-e': {'members': [{'name': 'personalName', 'type': 'VisibleString'}, {'name': 'organizationName', 'optional': True, 'type': 'VisibleString'}, {'name': 'countryName', 'optional': True, 'type': 'VisibleString'}, None, [{'name': 'internetEmailAddress', 'type': 'VisibleString'}, {'name': 'faxNumber', 'optional': True, 'type': 'VisibleString'}], [{'name': 'phoneNumber', 'optional': True, 'type': 'VisibleString'}], None], 'type': 'SET'}, 'V-E-4': {'type': 'Z-E-4', 'with-components': [None, ('a', 'ABSENT'), ('b', 'ABSENT')]}, 'VanillaBMPString-F-2-6-1': {'from': [], 'type': 'BMPString'}, 'VanillaBMPString-F-2-6-2': {'from': [], 'type': 'BMPString'}, 'VendorExt': {'type': 'OCTET STRING'}, 'Video': {'type': 'REAL'}, 'Voice-E-2-13': {'members': [{'name': 'english', 'type': 'OCTET STRING'}, {'name': 'swahili', 'type': 'OCTET STRING'}], 'type': 'CHOICE'}, 'W-E-4': {'type': 'Z-E-4', 'with-components': [None, ('a', 'PRESENT')]}, 'X-E-4': {'type': 'Z-E-4', 'with-components': [('a', 'PRESENT')]}, 'Y-E-4': {'type': 'Z-E-4', 'with-components': [('a', 'ABSENT'), ['b'], ['c']]}, 'Z-E-4': {'members': [{'name': 'a', 'type': 'A'}, {'name': 'b', 'type': 'B'}, {'name': 'c', 'type': 'C'}, {'name': 'd', 'type': 'D'}, {'name': 'e', 'type': 'E'}], 'type': 'CHOICE'}}, 'values': {'acmeCorp-E-2-10': {'type': 'NamesOfOfficers-E-2-10', 'value': '{'}, 'badgeNumber-E-2-12': {'type': 'AcmeBadgeNumber-E-2-12', 'value': 2345}, 'balance-E-2-2': {'type': 'CheckingAccountBalance-E-2-2', 'value': 0}, 'billClinton-E-2-5': {'type': 'PersonalStatus-E-2-5', 'value': ['married', 'employed', 'collegeGraduate']}, 'body1-E-2-5': {'type': 'G3FacsimilePage-E-2-5', 'value': '0b1101'}, 'body2-E-2-5': {'type': 'G3FacsimilePage-E-2-5', 'value': '0b1101000'}, 'dayOfTheMonth-E-2-2-c': {'type': 'DayOfTheMonth-E-2-2', 'value': 4}, 'file-E-2-13': {'type': 'FileIdentifier-E-2-13-a', 'value': 'serialNumber'}, 'fileId1-E-2-13-a': {'type': 'FileIdentifier-E-2-13-b', 'value': 'relativeName'}, 'fileId1-E-2-13-b': {'type': 'FileIdentifier-E-2-13-c', 'value': 'relativeName'}, 'fileId1-E-2-13-c': {'type': 'FileIdentifier-E-2-13-d', 'value': 'relativeName'}, 'fileId2-E-2-13-a': {'type': 'FileIdentifier-E-2-13-c', 'value': 'serialNumber'}, 'fileId2-E-2-13-b': {'type': 'FileIdentifier-E-2-13-d', 'value': 'serialNumber'}, 'fileId3-E-2-13-a': {'type': 'FileIdentifier-E-2-13-d', 'value': 'unidentified'}, 'firstDay-E-2-3': {'type': 'DayOfTheWeek-E-2-3', 'value': 'sunday'}, 'firstTwo-E-2-10': {'type': 'NamesOfMemberNations-E-2-10', 'value': '{'}, 'firstTwo2-E-2-10': {'type': 'NamesOfMemberNations2-E-2-10', 'value': '{'}, 'girth-E-2-4': {'type': 'App-X-Real-E-2-4', 'value': '{'}, 'greekCapitalLetterSigma-E-2-7': {'type': 'BMPString', 'value': '{'}, 'hillaryClinton-E-2-5': {'type': 'PersonalStatus-E-2-5', 'value': '0b110100'}, 'image-E-2-5': {'type': 'G3FacsimilePage-E-2-5', 'value': '0b100110100100001110110'}, 'image-E-2-6': {'type': 'G4FacsimileImage-E-2-6', 'value': '0x3fe2ebad471005'}, 'infinity-E-2-7': {'type': 'UTF8String', 'value': '{'}, 'lastPatient-E-2-9': {'type': 'PatientIdentifier-E-2-9', 'value': '{'}, 'map1-E-2-5': {'type': 'BitField-E-2-5', 'value': '0b100110100100'}, 'map2-E-2-5': {'type': 'BitField-E-2-5', 'value': '0x9a4'}, 'myGreeting-E-2-13': {'type': 'Greeting-E-2-13-c', 'value': 'recording'}, 'pi-E-2-4-a': {'type': 'REAL', 'value': None}, 'pi-E-2-4-b': {'type': 'REAL', 'value': '3.141592653589793'}, 'president-E-2-6': {'type': 'Surname-E-2-6', 'value': 'Clinton'}, 'property-E-2-7': {'type': 'UTF8String', 'value': '{'}, 'rightwardsArrow-E-2-7': {'type': 'UTF8String', 'value': '{'}, 'someASN1Keywords-E-2-11': {'type': 'Keywords-E-2-11', 'value': '{'}, 'someASN1Keywords2-E-2-11': {'type': 'Keywords2-E-2-11', 'value': '{'}, 'sunnyDaysLastWeek1-E-2-5-a': {'type': 'DaysOfTheWeek-E-2-5-a', 'value': ['sunday', 'monday', 'wednesday']}, 'sunnyDaysLastWeek1-E-2-5-b': {'type': 'DaysOfTheWeek-E-2-5-b', 'value': ['sunday', 'monday', 'wednesday']}, 'sunnyDaysLastWeek2-E-2-5-a': {'type': 'DaysOfTheWeek-E-2-5-a', 'value': '0b1101'}, 'sunnyDaysLastWeek3-E-2-5-a': {'type': 'DaysOfTheWeek-E-2-5-a', 'value': '0b1101000'}, 'sunnyDaysLastWeek3-E-2-5-b': {'type': 'DaysOfTheWeek-E-2-5-b', 'value': '0b1101000'}, 'today-E-2-2': {'type': 'DayOfTheMonth-E-2-2', 'value': 'first'}, 'trailer-E-2-5': {'type': 'BIT STRING', 'value': '0x0123456789abcdef'}, 'unknown-E-2-2': {'type': 'DayOfTheMonth-E-2-2', 'value': 0}, 'user-E-2-11-a': {'type': 'UserName-E-2-11-a', 'value': '{'}, 'user-E-2-11-b': {'type': 'UserName-E-2-11-c', 'value': '{'}, 'user-E-2-11-c': {'type': 'UserName-E-2-11-d', 'value': '{'}, 'user-E-2-11-d': {'type': 'UserName-E-2-11-e', 'value': '{'}}}}asn1tools-0.169.0/tests/files/x683.asn000066400000000000000000000060711524544274600173120ustar00rootroot00000000000000X683 DEFINITIONS ::= BEGIN -- 8.5 Example -- PARAMETERIZED-OBJECT-CLASS { TypeParam, -- INTEGER : valueParam, -- INTEGER : ValueSetParam } ::= CLASS { -- &valueField1 TypeParam, -- &valueField2 INTEGER DEFAULT valueParam, -- &valueField3 INTEGER (ValueSetParam), -- &ValueSetField INTEGER DEFAULT { ValueSetParam } -- } -- 9.6 Example -- MY-OBJECT-CLASS ::= PARAMETERIZED-OBJECT-CLASS { BIT STRING, 123, { 4 | 5 | 6 } } -- A.1 SIGNED { ToBeSigned } ::= SEQUENCE { authenticated-data ToBeSigned, authenticator BIT STRING } SignedUTF8String ::= SIGNED { UTF8String } OPTIONALLY-SIGNED { ToBeSigned } ::= CHOICE { unsigned-data [0] ToBeSigned, signed-data [1] SIGNED { ToBeSigned } } OptionallySignedUTF8String ::= OPTIONALLY-SIGNED { UTF8String } -- A.2 -- A.3 List1 { ElementTypeParam } ::= SEQUENCE { elem ElementTypeParam, next List1 { ElementTypeParam } OPTIONAL } IntegerList1 ::= List1 { INTEGER } -- A.4 -- genericBirthdayGreeting { IA5String : name } IA5String ::= { -- "Happy birthday, ", name, "!!" -- } -- Same as 'greeting2 IA5String ::= "Happy birthday, John!!"' -- greeting1 IA5String ::= genericBirthdayGreeting { "John" } -- A.5 -- QuestList1 {IA5String : extraQuest} IA5String ::= { "Jack" | "John" | extraQuest } -- -- QuestList2 {IA5String : ExtraQuests} IA5String ::= { "Jack" | "John" | ExtraQuests } -- The following value sets denote the same value set: -- SetOfQuests1 IA5String ::= { QuestList1 { "Jill" } } -- -- SetOfQuests2 IA5String ::= { QuestList2 { {"Jill"} } } -- -- SetOfQuests3 IA5String ::= { "Jack" | "John" | "Jill" } -- The following value sets denote the same value set: -- SetOfQuests4 IA5String ::= { QuestList2 { {"Jill" | "Mary"} } } -- -- SetOfQuests5 IA5String ::= { "Jack" | "John" | "Jill" | "Mary"} -- A.6 -- GENERIC-ERROR { ErrorCodeType, ErrorCodeType : ValidErrorCodes } ::= CLASS { -- &errorCode ValidErrorCodes -- } WITH SYNTAX { -- CODE &errorCode -- } -- -- ERROR-1 ::= GENERIC-ERROR { INTEGER, { 1 | 2 | 3 } } -- -- ERROR-2 ::= GENERIC-ERROR { ErrorCodeString, { StringErrorCodes } } -- -- ERROR-3 ::= GENERIC-ERROR { EnumeratedErrorCode, { fatal | error } } -- ErrorCodeString ::= IA5String (SIZE (4)) -- -- StringErrorCodes ErrorCodeString ::= { "E001" | "E002" | "E003" } -- -- EnumeratedErrorCode ::= ENUMERATED { fatal, error, warning } -- -- The defined classes can then be used as follows: -- My-Errors ERROR-2 ::= { { CODE "E001" } | { CODE "E002" } } -- -- fatalError ERROR-3 ::= { CODE fatal } -- A.7 -- A.8 END -- 9.8 Example -- -- M1 DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- -- EXPORTS T1; -- -- T1 ::= SET { -- f1 INTEGER, -- f2 BOOLEAN -- } -- -- END -- -- -- M2 DEFINITIONS EXPLICIT TAGS ::= BEGIN -- -- IMPORTS T1 FROM M1; -- -- T3 ::= T2 { T1 } -- -- T2 { X } ::= SEQUENCE { -- a INTEGER, -- b X -- } -- -- END -- -- -- M3 DEFINITIONS AUTOMATIC TAGS ::= BEGIN -- -- IMPORTS T1 FROM M1; -- -- T5 ::= T4 { T1 } -- -- T4 { Y } ::= SEQUENCE { -- a INTEGER, -- b Y -- } -- -- END asn1tools-0.169.0/tests/files/x683.py000066400000000000000000000044171524544274600171630ustar00rootroot00000000000000EXPECTED = {'X683': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'ErrorCodeString': {'size': [4], 'type': 'IA5String'}, 'IntegerList1': {'actual-parameters': [{'type': 'INTEGER'}], 'type': 'List1'}, 'List1': {'members': [{'name': 'elem', 'type': 'ElementTypeParam'}, {'actual-parameters': [{'type': 'ElementTypeParam'}], 'name': 'next', 'optional': True, 'type': 'List1'}], 'parameters': ['ElementTypeParam'], 'type': 'SEQUENCE'}, 'OPTIONALLY-SIGNED': {'members': [{'name': 'unsigned-data', 'tag': {'number': 0}, 'type': 'ToBeSigned'}, {'actual-parameters': [{'type': 'ToBeSigned'}], 'name': 'signed-data', 'tag': {'number': 1}, 'type': 'SIGNED'}], 'parameters': ['ToBeSigned'], 'type': 'CHOICE'}, 'OptionallySignedUTF8String': {'actual-parameters': [{'type': 'UTF8String'}], 'type': 'OPTIONALLY-SIGNED'}, 'SIGNED': {'members': [{'name': 'authenticated-data', 'type': 'ToBeSigned'}, {'name': 'authenticator', 'type': 'BIT STRING'}], 'parameters': ['ToBeSigned'], 'type': 'SEQUENCE'}, 'SignedUTF8String': {'actual-parameters': [{'type': 'UTF8String'}], 'type': 'SIGNED'}}, 'values': {}}}asn1tools-0.169.0/tests/files/x683_pp.py000066400000000000000000000037131524544274600176600ustar00rootroot00000000000000EXPECTED = {'X683': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'IntegerList1': {'members': [{'name': 'elem', 'type': 'INTEGER'}, {'name': 'next', 'optional': True, 'type': 'IntegerList1'}], 'type': 'SEQUENCE'}, 'OptionallySignedUTF8String': {'members': [{'name': 'unsigned-data', 'tag': {'number': 0}, 'type': 'UTF8String'}, {'name': 'signed-data', 'tag': {'number': 1}, 'type': 'SEQUENCE', 'members': [ {'name': 'authenticated-data', 'type': 'UTF8String'}, {'name': 'authenticator', 'type': 'BIT STRING'}]}], 'type': 'CHOICE'}, 'SignedUTF8String': {'members': [{'name': 'authenticated-data', 'type': 'UTF8String'}, {'name': 'authenticator', 'type': 'BIT STRING'}], 'type': 'SEQUENCE'}}, 'values': {}}} asn1tools-0.169.0/tests/files/x691_a1.asn000066400000000000000000000013561524544274600176730ustar00rootroot00000000000000X691-A1 DEFINITIONS ::= BEGIN PersonnelRecord ::= [APPLICATION 0] IMPLICIT SET { name Name, title [0] VisibleString, number EmployeeNumber, dateOfHire [1] Date, nameOfSpouse [2] Name, children [3] IMPLICIT SEQUENCE OF ChildInformation DEFAULT {} } ChildInformation ::= SET { name Name, dateOfBirth [0] Date } Name ::= [APPLICATION 1] IMPLICIT SEQUENCE { givenName VisibleString, initial VisibleString, familyName VisibleString } EmployeeNumber ::= [APPLICATION 2] IMPLICIT INTEGER Date ::= [APPLICATION 3] IMPLICIT VisibleString -- YYYYMMDD END asn1tools-0.169.0/tests/files/x691_a1.py000066400000000000000000000067001524544274600175400ustar00rootroot00000000000000EXPECTED = {'X691-A1': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'ChildInformation': {'members': [{'name': 'name', 'type': 'Name'}, {'name': 'dateOfBirth', 'tag': {'number': 0}, 'type': 'Date'}], 'type': 'SET'}, 'Date': {'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 3}, 'type': 'VisibleString'}, 'EmployeeNumber': {'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 2}, 'type': 'INTEGER'}, 'Name': {'members': [{'name': 'givenName', 'type': 'VisibleString'}, {'name': 'initial', 'type': 'VisibleString'}, {'name': 'familyName', 'type': 'VisibleString'}], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 1}, 'type': 'SEQUENCE'}, 'PersonnelRecord': {'members': [{'name': 'name', 'type': 'Name'}, {'name': 'title', 'tag': {'number': 0}, 'type': 'VisibleString'}, {'name': 'number', 'type': 'EmployeeNumber'}, {'name': 'dateOfHire', 'tag': {'number': 1}, 'type': 'Date'}, {'name': 'nameOfSpouse', 'tag': {'number': 2}, 'type': 'Name'}, {'default': [], 'element': {'type': 'ChildInformation'}, 'name': 'children', 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'SEQUENCE OF'}], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 0}, 'type': 'SET'}}, 'values': {}}}asn1tools-0.169.0/tests/files/x691_a2.asn000066400000000000000000000015451524544274600176740ustar00rootroot00000000000000X691-A2 DEFINITIONS ::= BEGIN PersonnelRecord ::= [APPLICATION 0] IMPLICIT SET { name Name, title [0] VisibleString, number EmployeeNumber, dateOfHire [1] Date, nameOfSpouse [2] Name, children [3] IMPLICIT SEQUENCE OF ChildInformation DEFAULT {} } ChildInformation ::= SET { name Name, dateOfBirth [0] Date } Name ::= [APPLICATION 1] IMPLICIT SEQUENCE { givenName NameString, initial NameString (SIZE(1)), familyName NameString } EmployeeNumber ::= [APPLICATION 2] IMPLICIT INTEGER Date ::= [APPLICATION 3] IMPLICIT VisibleString (FROM("0".."9") ^ SIZE(8)) -- YYYYMMDD NameString ::= VisibleString (FROM("a".."z" | "A".."Z" | "-.") ^ SIZE(1..64)) END asn1tools-0.169.0/tests/files/x691_a2.py000066400000000000000000000076721524544274600175520ustar00rootroot00000000000000EXPECTED = {'X691-A2': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'ChildInformation': {'members': [{'name': 'name', 'type': 'Name'}, {'name': 'dateOfBirth', 'tag': {'number': 0}, 'type': 'Date'}], 'type': 'SET'}, 'Date': {'from': [('0', '9')], 'size': [8], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 3}, 'type': 'VisibleString'}, 'EmployeeNumber': {'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 2}, 'type': 'INTEGER'}, 'Name': {'members': [{'name': 'givenName', 'type': 'NameString'}, {'name': 'initial', 'size': [1], 'type': 'NameString'}, {'name': 'familyName', 'type': 'NameString'}], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 1}, 'type': 'SEQUENCE'}, 'NameString': {'from': [('a', 'z'), ('A', 'Z'), ('-', '-'), ('.', '.')], 'size': [(1, 64)], 'type': 'VisibleString'}, 'PersonnelRecord': {'members': [{'name': 'name', 'type': 'Name'}, {'name': 'title', 'tag': {'number': 0}, 'type': 'VisibleString'}, {'name': 'number', 'type': 'EmployeeNumber'}, {'name': 'dateOfHire', 'tag': {'number': 1}, 'type': 'Date'}, {'name': 'nameOfSpouse', 'tag': {'number': 2}, 'type': 'Name'}, {'default': [], 'element': {'type': 'ChildInformation'}, 'name': 'children', 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'SEQUENCE OF'}], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 0}, 'type': 'SET'}}, 'values': {}}}asn1tools-0.169.0/tests/files/x691_a3.asn000066400000000000000000000021261524544274600176710ustar00rootroot00000000000000X691-A3 DEFINITIONS ::= BEGIN PersonnelRecord ::= [APPLICATION 0] IMPLICIT SET { name Name, title [0] VisibleString, number EmployeeNumber, dateOfHire [1] Date, nameOfSpouse [2] Name, children [3] IMPLICIT SEQUENCE (SIZE(2, ...)) OF ChildInformation OPTIONAL, ... } ChildInformation ::= SET { name Name, dateOfBirth [0] Date, ..., sex [1] IMPLICIT ENUMERATED { male(1), female(2), unknown(3) } OPTIONAL } Name ::= [APPLICATION 1] IMPLICIT SEQUENCE { givenName NameString, initial NameString (SIZE(1)), familyName NameString, ... } EmployeeNumber ::= [APPLICATION 2] IMPLICIT INTEGER (0..9999, ...) Date ::= [APPLICATION 3] IMPLICIT VisibleString (FROM("0".."9") ^ SIZE(8, ..., 9..20)) -- YYYYMMDD NameString ::= VisibleString (FROM("a".."z" | "A".."Z" | "-.") ^ SIZE(1..64, ...)) END asn1tools-0.169.0/tests/files/x691_a3.py000066400000000000000000000120421524544274600175360ustar00rootroot00000000000000EXPECTED = {'X691-A3': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'ChildInformation': {'members': [{'name': 'name', 'type': 'Name'}, {'name': 'dateOfBirth', 'tag': {'number': 0}, 'type': 'Date'}, None, {'name': 'sex', 'optional': True, 'tag': {'kind': 'IMPLICIT', 'number': 1}, 'type': 'ENUMERATED', 'values': [('male', 1), ('female', 2), ('unknown', 3)]}], 'type': 'SET'}, 'Date': {'from': [('0', '9')], 'size': [8, None, (9, 20)], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 3}, 'type': 'VisibleString'}, 'EmployeeNumber': {'restricted-to': [(0, 9999), None], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 2}, 'type': 'INTEGER'}, 'Name': {'members': [{'name': 'givenName', 'type': 'NameString'}, {'name': 'initial', 'size': [1], 'type': 'NameString'}, {'name': 'familyName', 'type': 'NameString'}, None], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 1}, 'type': 'SEQUENCE'}, 'NameString': {'from': [('a', 'z'), ('A', 'Z'), ('-', '-'), ('.', '.')], 'size': [(1, 64), None], 'type': 'VisibleString'}, 'PersonnelRecord': {'members': [{'name': 'name', 'type': 'Name'}, {'name': 'title', 'tag': {'number': 0}, 'type': 'VisibleString'}, {'name': 'number', 'type': 'EmployeeNumber'}, {'name': 'dateOfHire', 'tag': {'number': 1}, 'type': 'Date'}, {'name': 'nameOfSpouse', 'tag': {'number': 2}, 'type': 'Name'}, {'element': {'type': 'ChildInformation'}, 'name': 'children', 'optional': True, 'size': [2, None], 'tag': {'kind': 'IMPLICIT', 'number': 3}, 'type': 'SEQUENCE OF'}, None], 'tag': {'class': 'APPLICATION', 'kind': 'IMPLICIT', 'number': 0}, 'type': 'SET'}}, 'values': {}}}asn1tools-0.169.0/tests/files/x691_a4.asn000066400000000000000000000010261524544274600176700ustar00rootroot00000000000000X691-A4 DEFINITIONS AUTOMATIC TAGS ::= BEGIN Ax ::= SEQUENCE { a INTEGER (250..253), b BOOLEAN, c CHOICE { d INTEGER, ..., [[ e BOOLEAN, f IA5String ]], ... }, ..., [[ g NumericString (SIZE(3)), h BOOLEAN OPTIONAL ]], ..., i BMPString OPTIONAL, j PrintableString OPTIONAL } END asn1tools-0.169.0/tests/files/x691_a4.py000066400000000000000000000040031524544274600175350ustar00rootroot00000000000000EXPECTED = {'X691-A4': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'AUTOMATIC', 'types': {'Ax': {'members': [{'name': 'a', 'restricted-to': [(250, 253)], 'type': 'INTEGER'}, {'name': 'b', 'type': 'BOOLEAN'}, {'members': [{'name': 'd', 'type': 'INTEGER'}, None, [{'name': 'e', 'type': 'BOOLEAN'}, {'name': 'f', 'type': 'IA5String'}], None], 'name': 'c', 'type': 'CHOICE'}, None, [{'name': 'g', 'size': [3], 'type': 'NumericString'}, {'name': 'h', 'optional': True, 'type': 'BOOLEAN'}], None, {'name': 'i', 'optional': True, 'type': 'BMPString'}, {'name': 'j', 'optional': True, 'type': 'PrintableString'}], 'type': 'SEQUENCE'}}, 'values': {}}}asn1tools-0.169.0/tests/files/zforce.asn000066400000000000000000001273301524544274600200740ustar00rootroot00000000000000-- Neonode zForce Communication Protocol ASN.1 PDU definition -- Protocol ASN.1 PDU Definition for Platform Version 7 -- Status: Draft -- Definition version: 1.5-WIP -- Last update: 2016-06-13 -- See end of document for changelog ProtocolMessage DEFINITIONS IMPLICIT TAGS EXTENSIBILITY IMPLIED ::= BEGIN -- General notes; -- items typed as INTEGER are unsigned, unless -- explicitly using the SignedInteger datatype -- -------------------------------------------- -- -- Top level PDU -- -- -------------------------------------------- -- -- Top level container of choice type, to be able to -- give implicit tag identifier. To replicate old protocol -- PRIVATE 14 generates id EE using DER encoding ProtocolMessage ::= CHOICE { request [PRIVATE 14] Message, response [PRIVATE 15] Message, notification [PRIVATE 16] Notification } -- General top level info: -- Request is sent from host to device, and is -- responded to with a response. The structure -- of both request and response are the same, -- the Message sequence. -- Notifications are reports from the platform -- to the host that are not explicitly requested. -- This contains startup information and touch -- notifications. -- -------------------------------------------- -- -- Message - Input & Output -- -- -------------------------------------------- -- -- Used for input and output to the system. -- In the request case the host device will send a -- top level Message with the request identifier and -- fill it out with operations to perform. -- The system will respond with response messages -- contained in a Message with the response identifier -- including requested data or operation results. -- General way of working: -- To perform a get request, make sure to send the -- message with an empty sequence for the data being -- requested -- To perform a set request, send the message with -- the sequence for the command filled with the -- appropriate parameters as payload -- All requests will get a response message with -- the sequences existing in the request message -- filled with their current values. If a set -- request was performed the returned value should -- be checked to verify the operation was successful -- The current communications layer handles a single -- command/sequence at a time. As such each setting -- should be sent in their own message. Message ::= SEQUENCE { deviceAddress DeviceAddress OPTIONAL, -- Used to address a specific device when multiple devices are in the same system. -- For request, the last value is kept so multiple requests to the same -- device only needs to include the deviceAddress in the first of the requests. -- Command/Message to start. -- Do all configuration before issuing. enable [APPLICATION 5] SEQUENCE { disable [0] NULL OPTIONAL, -- Send enable with value 0 to enable continuous mode. -- If any other value is given, scanning will stop -- after that number of frames of data has been sent. -- This is useful for diagnostics scans and robot measurements. enable [1] INTEGER (0..127) OPTIONAL, reset [2] NULL OPTIONAL } OPTIONAL, -- If enable is in a set request, e.g. populated with any member, -- no more commands should be included in the same message. -- Request for touch format descriptor. See TouchDescriptor -- in primitive data types section below for more info. touchFormat [APPLICATION 6] SEQUENCE { -- Read only, touchDescriptor will be ignored in request message touchDescriptor TouchDescriptor OPTIONAL } OPTIONAL, -- The various types of data that can be reported -- are controlled indepentenly by sending boolean -- values for them. operationMode [APPLICATION 7] SEQUENCE { -- Initial state after power up detection [0] BOOLEAN OPTIONAL, -- Enabled signals [1] BOOLEAN OPTIONAL, -- Disabled ledLevels [2] BOOLEAN OPTIONAL, -- Disabled detectionHid [3] BOOLEAN OPTIONAL, -- Only for USB Equipped devices - Disabled gestures [4] BOOLEAN OPTIONAL -- Only for gesture supporting devices - Enabled } OPTIONAL, -- Target frequency for different modes of operation frequency [APPLICATION 8] SEQUENCE { finger [0] INTEGER OPTIONAL, stylus [1] INTEGER OPTIONAL, idle [2] INTEGER OPTIONAL } OPTIONAL, -- Scaling factor for coordinates reported. -- Does not affect internal working resolution. resolution [APPLICATION 9] SEQUENCE { x [0] INTEGER OPTIONAL, y [1] INTEGER OPTIONAL, z [2] INTEGER OPTIONAL } OPTIONAL, -- Diagnostic method for reporting open or short LEDs/PDs. -- Always run on platform level, as such all ASICs independent of device will be reported. -- OpenShortInformation in constructed data types provides more info openShort [APPLICATION 10] SEQUENCE { -- Read only, openShortInfo will be ignored in request message openShortInfo [0] SEQUENCE OF OpenShortInformation OPTIONAL, -- One result set for each ASIC errorCount [1] INTEGER (0..127) OPTIONAL -- Total number of open and short errors encountered across -- all ASICs. Should always be 0 on a correctly assembled system. -- If larger than 127 the number is restricted to 127. } OPTIONAL, -- Static information about the platform or a device can be fetched by requesting deviceInformation deviceInformation [APPLICATION 12] SEQUENCE {-- Read only, all parameters will be ignored in request message -- Information returned when deviceInformation is addressed to the platform device platformInformation [0] SEQUENCE { platformVersionMajor [0] INTEGER (0..32767) OPTIONAL, platformVersionMinor [1] INTEGER (0..32767) OPTIONAL, protocolVersionMajor [2] INTEGER (0..32767) OPTIONAL, protocolVersionMinor [3] INTEGER (0..32767) OPTIONAL, firmwareVersionMajor [4] INTEGER (0..32767) OPTIONAL, firmwareVersionMinor [5] INTEGER (0..32767) OPTIONAL, hardwareIdentifier [6] IA5String OPTIONAL, hardwareVersion [7] IA5String OPTIONAL, asicType [8] AsicType OPTIONAL, numberOfAsics [9] INTEGER (0..127) OPTIONAL, mcuUniqueIdentifier [10] OCTET STRING (SIZE(0..32)) OPTIONAL, -- MCU Serial or die and chip identifier when such is available projectReference [11] IA5String OPTIONAL, platformReference [12] IA5String OPTIONAL, buildTime [13] IA5String OPTIONAL, buildDate [14] IA5String OPTIONAL } OPTIONAL, -- Information returned from other device instances. Please note that -- each instance, if more than one available according to deviceCount, -- may return different data, as they are configured independently. deviceInstanceInformation [1] SEQUENCE { -- Device type restrictions productVersionMajor [0] INTEGER (0..32767) OPTIONAL, productVersionMinor [1] INTEGER (0..32767) OPTIONAL, physicalWidth [2] INTEGER (0..32767) OPTIONAL, physicalHeight [3] INTEGER (0..32767) OPTIONAL, -- N/A for Air Devices numberOfSignalAxes [4] INTEGER (0..32767) OPTIONAL, signalsPerSignalAxis [5] SEQUENCE OF [0] INTEGER OPTIONAL, -- Added in protocol 1.1 ledsPerPhysicalAxis [6] SEQUENCE OF [0] INTEGER OPTIONAL, pdsPerPhysicalAxis [7] SEQUENCE OF [0] INTEGER OPTIONAL, ledPdPlacementPerPhysicalAxis [8] SEQUENCE OF [0] LedPdPlacement OPTIONAL } OPTIONAL, -- If device contains any readable or writable storage areas -- each such area will be presented with a StorageArea sequence storageInformation [2] SEQUENCE { storageAreas [0] SEQUENCE OF [0] StorageArea, -- Buffer size indicators, to indicate maximum payloads maxReadSize [1] INTEGER, maxWriteSize [2] INTEGER } OPTIONAL, -- Response type expected from devices of type lightingDevices -- Provides metadata about the type and amount of available lights lightingInformation [3] SEQUENCE { numberOfLeds [0] INTEGER OPTIONAL, bitsPerLedChannel [1] SEQUENCE OF [0] INTEGER OPTIONAL -- Regular LEDs will only give a single channel while -- RGB LEDs will give three integers, one for each color channel -- Simple on/off channels will only be a single bit while -- channels with controllable intensity will have multiple bits } OPTIONAL } OPTIONAL, -- To be able to enumerate the virtual devices a request for deviceCount gives -- the count of each type of device. deviceCount [APPLICATION 15] SEQUENCE {-- Read only, all parameters will be ignored in request message totalNumberOfDevices [0] INTEGER (0..127) OPTIONAL, -- Total number of devices does not include the platform and -- will always equal the sum of the other members of the sequence. -- Devices of which there are none is not reported. coreDevices [1] INTEGER (0..127) OPTIONAL, airDevices [2] INTEGER (0..127) OPTIONAL, plusDevices [3] INTEGER (0..127) OPTIONAL, lightingDevices [4] INTEGER (0..127) OPTIONAL } OPTIONAL, status [APPLICATION 13] SEQUENCE { -- Read only, all parameters will be ignored in request message -- If you want to restrict the get request to a subset, include a empty sequence corresponding -- to the subset you want. If left entirely empty the full get response will be provided counters [0] SEQUENCE { currentContacts [0] INTEGER (0..127) OPTIONAL, scanningCounter [1] INTEGER (0..65535) OPTIONAL, preparedTouchCounter [2] INTEGER (0..65535) OPTIONAL, sentTouchCounter [3] INTEGER (0..65535) OPTIONAL, invalidTouchCounter [4] INTEGER (0..65535) OPTIONAL } OPTIONAL } OPTIONAL, resultCode [APPLICATION 20] INTEGER { ok (0), fail (1) } OPTIONAL, -- Instance specific settings for a device deviceConfiguration [APPLICATION 19] SEQUENCE { -- Set / get the number of touches to be tracked: numberOfTrackedTouches [0] INTEGER (0..255) OPTIONAL, -- Set / get the minimal distance for updating a tracked touch in move state trackingMinDistanceMove [1] INTEGER (0..16383) OPTIONAL, -- Set / get the sub touch active area low bound in X coordinate subTouchActiveArea [2] SEQUENCE { -- Write Request and Read Response only: -- Set / get the sub touch active area low bound in X coordinate lowBoundX [0] INTEGER (0..16383) OPTIONAL, -- Set / get the sub touch active area low bound in Y coordinate lowBoundY [1] INTEGER (0..16383) OPTIONAL, -- Set / get the sub touch active area high bound in X coordinate highBoundX [2] INTEGER (0..16383) OPTIONAL, -- Set / get the sub touch active area high bound in Y coordinate highBoundY [3] INTEGER (0..16383) OPTIONAL, -- subTaa Reverse X coordinates, set / get true or false reverseX [4] BOOLEAN OPTIONAL, -- SubTaa Reverse Y coordinates, set / get true or false reverseY [5] BOOLEAN OPTIONAL } OPTIONAL, -- configure the reference signal setting referenceSignalConfig [3] INTEGER (0..255) OPTIONAL, -- Restriction of detected objects based on their size sizeRestriction [4] SEQUENCE { maxSizeEnabled [0] BOOLEAN OPTIONAL, maxSize [1] INTEGER (0..255) OPTIONAL, minSizeEnabled [2] BOOLEAN OPTIONAL, minSize [3] INTEGER (0..255) OPTIONAL } OPTIONAL, -- configure the detection mode -- Standard modes increasing from 0, custom modes decreasing from 64 -- Giving an unlisted value will have no effect. detectionMode [5] INTEGER { -- Reserved modes from (0) to (63) are listed below: default (0), -- finger and stylus are both enabled finger (1), -- stylus (2), -- Special modes for customized applications are listed below: mergeTouches (32), -- merges all touch objects into one insensitiveFTIR (64) } OPTIONAL, -- Set / get the number of touches to be reported: numberOfReportedTouches [6] INTEGER (0..255) OPTIONAL } OPTIONAL, -- Configurable options useful for retrieving diagnostic information diagnosticsSettings [APPLICATION 21] SEQUENCE { -- If fixedStrength is set, the next scan uses the -- set strength for all LEDs. The value is cleared upon receiving -- a disable command, or the fixed number of scans are done. fixedStrength [0] INTEGER (0..255) OPTIONAL, -- If forceCalibration is set to anything other than 0 -- the device will recalibrate itself next time it is -- enabled. As a recalibration of led levels is needed -- when the ASIC gain is calibrated, this is included -- in the same settings level. -- Not cleared on disable/end of fixed number scan, -- so make sure to set to noCalibration when done. -- Ignored if fixedStrength is set at the same time. forceCalibration [1] INTEGER { noCalibration (0), calibrateLedLevels (1), calibrateLedLevelsWithHighestASICGain (2) } OPTIONAL, -- To enable filtering or normalization of raw signals -- reported, enable it here. rawSignalFiltering [2] INTEGER { disabled (0), enabled (1) } OPTIONAL, -- For systems with calibration data the storage area currently -- being used is indicated and set by altering the following parameter. calibrationStorageAreaInUse [3] StorageIdentifier OPTIONAL, -- Sends Air maximum filter result. signalMaximum [4] BOOLEAN OPTIONAL } OPTIONAL, -- Storage operations, available for storage devices -- Only one type of operation can be performed per request storageOperation [APPLICATION 25] SEQUENCE { storageIdentifier [0] StorageIdentifier, operationType [1] INTEGER { read (0), write (1), delete (2) }, -- Offset into the storage area. -- Offset + size should never exceed the size of the storage area offset [2] INTEGER, size [3] INTEGER, -- Payload should only be populated in the request -- when doing a write operation. It will only be -- populated in a response after a read operation payload [4] OCTET STRING OPTIONAL, -- Operation status code should never be -- included in requests, only returned in responses. -- This indicates the status operationStatusCode [5] INTEGER { success (0), genericError (1), -- For errors without specific status code outOfBounds (2), -- Read or write outside of storage area mediaNotPresent (3), -- For removable media identifierError (4), -- Storage with identifier does not exist. bufferOverflow (5), -- Storage read or write buffer not big enough for request. writeProtected (6), -- Storage is write protected, maybe ROM type. deleteNotApplicable (7) -- Delete attempted on media where operation not available } OPTIONAL } OPTIONAL, signalsLayout [APPLICATION 18] Vector OPTIONAL, -- For altering state of RGB LEDs on a device -- It is write only, and will only generate an empty sequence -- as a response to keep bandwidth usage low. lighting [APPLICATION 26] SEQUENCE { presenceBitMask [0] BIT STRING OPTIONAL, -- To avoid having to send state for all LEDs every -- time, this bitmask signifies the LEDs for which -- the state is to be changed. To set a LED to a -- specific color make sure to include it in the bitMask -- and send the color values in the right position of the -- state OCTET STRING state [1] OCTET STRING OPTIONAL, -- State data for the LEDs to be set. -- presenceBitMask indicates in rising order -- what LEDs' states are included in the payload. -- Expected format of each state is according to the -- number of bits per channel in the deviceInformation, -- where each channel is 0-padded to be evenly aligned -- on byte boundaries. -- The size of the entire state payload should be a -- multiple of the total state size per LED. -- The maximum size will be the number of bits enabled in -- precenceBitMask * total size per LED. -- If state contains a smaller payload than maximum the -- last state information is repeated for all successive LEDs -- As such, to set all LEDs to the same state only a single state -- payload is required while setting all bits enabled in the -- presenceBitMask -- Some examples: -- Type - Bits per channel - Size per LED state -- On/Off - 1 - 1 byte -- Single - 8 - 1 byte -- RGB LED - 8, 8, 8 - 3 byte globalIntensity [2] INTEGER (0..65535) OPTIONAL -- Allows you to control the intensity level for all -- LEDs at the same time. } OPTIONAL, -- Low signal information. -- Get the comparing results between all signals to a minimal -- signal alert level. lowSignal [APPLICATION 28] SEQUENCE { -- Bit mask stating which signals having low signal error. lowSignalInfo [0] BIT STRING OPTIONAL } OPTIONAL, -- For systems where error counters are available, -- they can be cleared by sending a NULL value errorCounterClear [APPLICATION 31] NULL OPTIONAL, -- Error Information. -- Only Platform responds to this. errorInformation [APPLICATION 32] ErrorInformation OPTIONAL, -- Ask device to stream the Error Log for either a specific session, -- the current session (specify -1 as value) or all sessions (-2). -- The Error Log is streamed using ErrorLog entries. -- See the "errorLog" entry in StatusNotification for the Notification sent. -- Only Platform responds to this. errorLog [APPLICATION 33] INTEGER { currentSession (-1), allSessions (-2) } OPTIONAL, -- Get or Set Error Thresholds. errorThresholds [APPLICATION 34] ErrorThresholds OPTIONAL } -- -------------------------------------------- -- -- Notifications - Touch data -- -- -------------------------------------------- -- Notification ::= SEQUENCE { deviceAddress DeviceAddress OPTIONAL, -- Present when more than one device is available in system. -- Indicates the source of the notification message. notificationMessage CHOICE { singleTouch TouchNotification, -- This will be used in cases where only single touch is available. touchNotifications [0] SEQUENCE (SIZE(0..127)) OF TouchNotification, -- In cases where multi touch of 2 or more touches will be available -- this sequence will be used. -- The payload, sizes and offsets for each TouchNotification -- is described by the TouchDescriptor bit string bootCompleteNotification BootCompleteNotification, -- BootCompleteNotification is sent upon system start, -- see definition of BootCompleteNotification further down -- to see what flags and states are reported ledLevels [APPLICATION 11] RawData, coreSignals [APPLICATION 14] RawData, airSignals [APPLICATION 17] Vector, airMaximum [1] Vector, statusNotification StatusNotification, gestureNotifications [2] SEQUENCE (SIZE(0..127)) OF GestureNotification }, notificationTimestamp Timestamp OPTIONAL, -- For notifications which have use of temporal data -- the notification contains a timestamp notificationLatency Latency OPTIONAL -- For notifications which have use of temporal data -- the notification contains a processing latency value. -- Currently this is only used for TouchNotification. -- For touchNotification, the latency time starts from the -- beginning of the first frame after a touch object -- presented in active area, and ends at the current touch -- notification encoded. } -- -------------------------------------------- -- -- Primitive Data Types -- -- -------------------------------------------- -- DeviceAddress ::= [APPLICATION 0] OCTET STRING (SIZE (2)) -- Addressing information used when multiple touch devices are present -- in the system. -- Byte0 - deviceType, Byte1 - deviceIndex -- DeviceTypes: 0x00 - Platform -- 0x01 - zForce Core -- 0x02 - zForce Air -- 0x03 - zForce Plus -- 0x04 - Lighting devices TouchDescriptor ::= [APPLICATION 1] BIT STRING { -- Bitmask descriptor outlining the payload each -- TouchNotification contains. -- Name (bit) - Description - size - comment id (0), -- Touch Identifier - 1 byte event (1), -- Up/Down/Move - 1 byte - 0=Down; 1=Move; 2=Up; 3=Invalid; 4=Ghost loc-x-byte1 (2), -- X coordinate - 1 byte loc-x-byte2 (3), -- X expanded - 1 byte - for higher precision loc-x-byte3 (4), -- X expanded - 1 byte - for higher precision loc-y-byte1 (5), -- Y coordinate - 1 byte loc-y-byte2 (6), -- Y expanded - 1 byte - for higher precision loc-y-byte3 (7), -- Y expanded - 1 byte - for higher precision loc-z-byte1 (8), -- Z coordinate - 1 byte loc-z-byte2 (9), -- Z expanded - 1 byte - for higher precision loc-z-byte3 (10), -- Z expanded - 1 byte - for higher precision size-x-byte1 (11), -- X size - 1 byte size-x-byte2 (12), -- X size - 1 byte - for higher precision size-x-byte3 (13), -- X size - 1 byte - for higher precision size-y-byte1 (14), -- Y size - 1 byte size-y-byte2 (15), -- Y size - 1 byte - for higher precision size-y-byte3 (16), -- Y size - 1 byte - for higher precision size-z-byte1 (17), -- Z size - 1 byte size-z-byte2 (18), -- Z size - 1 byte - for higher precision size-z-byte3 (19), -- Z size - 1 byte - for higher precision orientation (20), -- Orientation - 1 byte - Hand orientation confidence (21), -- Confidence - 1 byte pressure (22) -- Pressure - 1 byte } -- Total maximum size: 23 bytes per touch TouchNotification ::= [APPLICATION 2] OCTET STRING -- Binary payload with content as outlined by TouchDescriptor Timestamp ::= [APPLICATION 24] INTEGER -- Timestamps for general use Latency ::= [APPLICATION 35] INTEGER -- Latency value for measurement use. Payload value is in millisecond unit. -- List of known ASIC types AsicType ::= INTEGER { nn1001 (1), nn1002 (2), nn1003 (3) } -- Addressing method for storage areas StorageIdentifier ::= INTEGER (0..127) -- Explicit notification for integers that -- contains signed values SignedInteger ::= INTEGER -- LED and PD placement types LedPdPlacement ::= INTEGER { pdFirstPdLast (0), pdFirstLedLast (1), ledFirstPdLast (2), ledFirstLedLast (3) } -- -------------------------------------------- -- -- Constructed Data Types -- -- -------------------------------------------- -- GestureNotification ::= [APPLICATION 4] SEQUENCE { gestureStatus [0] INTEGER { detection (0), -- New gesture detected update (1), -- Update of previously detected gesture stop (2) -- Final update for previously detected gesture }, -- Unique identifier for the gesture notification. -- If status is detection the first unoccupied ID is used, -- otherwise the ID is related to a previously detected gesture. gestureIdentifier [1] INTEGER OPTIONAL, gestureType [2] INTEGER { -- Type Continuous/Single Shot Generic/Specific case iOS Equivalent Android equivalent tap (0), -- Single Shot Generic UITapGesture onDown / onSingleTapUp / onDoubleTap (GestureDetector) longPress (1), -- Continuous Generic UILongPressGesture onLongPress (GestureDetector) swipe (2), -- Continuous Generic UISwipeGesture onFling (GestureDetector) pan (3), -- Continuous Generic UIPanGesture onScroll (GestureDetector) pinch (4), -- Continuous Generic UIPinchGesture onScale (ScaleGestureDetector) rotation (5), -- Continuous Generic UIRotationGesture Not available grab (6), -- Continuous Steering Wheel specific N/A N/A rimTap (7) -- Single Shot Steering Wheel specific N/A N/A }, originX [3] INTEGER OPTIONAL, originY [4] INTEGER OPTIONAL, sizeX [5] INTEGER OPTIONAL, sizeY [6] INTEGER OPTIONAL, deltaX [7] SignedInteger OPTIONAL, deltaY [8] SignedInteger OPTIONAL } -- Startup notification, indicating reset causes, proper ASIC -- function and global state before reset, in case of watchdog reset BootCompleteNotification ::= [APPLICATION 3] SEQUENCE { asicStatus [0] INTEGER { asicExists (0), asicNotFound (1) }, resetSource [1] BIT STRING { powerUp (0), rstLow (1), watchdogExpired (2), flashViolation (3), nonMaskableInterrupt (4) }, globalState [2] BIT STRING { watchDogExpiredWaitingForASICIRQ (0), watchDogExpiredWaitingForSPITXComm (1), watchDogExpiredWaitingForSPIRXComm (2), watchDogExpiredUnhandledIRQ (3), asicFlaggedUnexpectedPOR (4), asicFlaggedTSDFault (5), asicFlaggedVBGFault (6), asicFlaggedMemOverFlow (7) } } RawData ::= SEQUENCE OF VariableSizeIntegerString VariableSizeIntegerString ::= CHOICE { uint8 [0] OCTET STRING, uint12 [1] OCTET STRING, uint16 [2] OCTET STRING } -- A sequence containing the results for all LEDs and PDs -- of an Open Short test on an ASIC OpenShortInformation ::= [APPLICATION 23] SEQUENCE { asicIndex [0] INTEGER OPTIONAL, -- Which ASIC the results belong to. ledOpen [1] BIT STRING, -- Bit mask stating which LEDs indicate a open fault ledShort [2] BIT STRING, -- Bit mask stating which LEDs indicate a short fault pdOpen [3] BIT STRING OPTIONAL, -- Bit mask stating which PDs indicate a open fault -- NN1001 does not support PD open checks, so this may be omitted pdShort [4] BIT STRING -- Bit mask stating which PDs indicate a short fault } -- For devices providing reading and writing of data to volatile or non-volatile -- memory, each available area that can be addressed will be described using a -- StorageArea sequence for each area. StorageArea ::= SEQUENCE { storageIdentifier [0] StorageIdentifier, -- Integer index required to pinpoint the specific storage area, to allow -- for multiple storage areas associated with the same device. storageDescription [1] IA5String (SIZE(0..32)) OPTIONAL, -- Description about the intended usage for this storage, -- e.g. Calibration, Configuration etc. storageType [2] INTEGER { rom (0), flash (1), eeprom (2), ram (3), asicRegister (4), asicSram (5) } OPTIONAL, storageLocation [3] INTEGER { internal (0), -- e.g. MCU flash memory external (1), -- e.g. external flash chip removable (2) -- e.g. SD card } OPTIONAL, storageSize [4] INTEGER -- Total size of the storage area. -- Addressable space will always be 0 <= address < storageSize -- deleteLevel [5] INTEGER { -- byteLevel (0), -- blockLevel (1) -- } OPTIONAL, -- If deletions for this storage area is done on -- block level, with lesser granularity than a byte -- it is indicated by deleteLevel -- blockSize [6] INTEGER OPTIONAL, -- If deleteLevel is indeed an block level operation -- the block size is necessary to know starting addresses -- and block sizes of affected data. } Vector ::= SEQUENCE { dataType [0] ENUMERATED { uint8 (0), int8 (1), uint12 (2), int12 (3), uint16 (4), int16 (5), uint24 (6), int24 (7), uint32 (8), int32 (9), uint64 (10), int64 (11), float (12), double (13) } OPTIONAL, shape [1] SEQUENCE OF [0] INTEGER OPTIONAL, -- data format: -- Row major order (C) -- Big endian. When LSB is a partial octet, it is in the most significant bits -- no padding data [2] OCTET STRING OPTIONAL } StatusNotification ::= [APPLICATION 27] SEQUENCE { -- Hardware Error detected. This only signals that it has occurred, not what it is. -- That is read separately. hardwareError [0] NULL OPTIONAL, -- True if the device is receiving touches on a single axis. This can be due to -- for example a user touching the outside of the light guide, thereby changing -- the reflectiveness of the mirror. -- False if it is no longer detected. singleAxisTouchError [1] BOOLEAN OPTIONAL, -- True if touches are no longer detected and sent. -- False if touches are now sent normally. touchesIgnored [2] BOOLEAN OPTIONAL, -- True if any signal is lower than predefined minimum level. -- False if all the signals are back to normal level. lowSignalError [3] BOOLEAN OPTIONAL, -- Hardware Error Detected. This also contains specifics about the error. -- Replaces hardwareError above. error [4] ErrorNotification OPTIONAL, -- Error Log Transfer. errorLog [5] ErrorLog OPTIONAL } ErrorInformation ::= SEQUENCE { systemTests [0] SystemErrorInformation OPTIONAL, asics [1] SEQUENCE OF [0] AsicInformation OPTIONAL, visibleLedDrivers [2] SEQUENCE OF [0] VisibleLedDriverInformation OPTIONAL } SystemErrorInformation ::= SEQUENCE { cpu [0] ErrorFlags OPTIONAL, -- CPU Error Detected. internalWatchdog [1] ErrorFlags OPTIONAL, -- Internal Watchdog flashProgramChecksum [2] ErrorFlags OPTIONAL, -- Flash Program Checksum ram [3] ErrorFlags OPTIONAL, -- RAM pll [4] ErrorFlags OPTIONAL, -- Phase Locked Loop startupTestChecksum2 [5] ErrorFlags OPTIONAL, -- Startup Test Checksum 2 lsi [6] ErrorFlags OPTIONAL, -- Low Speed Internal Clock hse [7] ErrorFlags OPTIONAL, -- High Speed External Clock hseSwitch [8] ErrorFlags OPTIONAL, -- High Speed External Clock Switch externalClockSource [9] ErrorFlags OPTIONAL, -- External Clock Source abnormalTermination [10] ErrorFlags OPTIONAL, -- Abnormal Termination of Clock Test testFlowCheckpoint1 [11] ErrorFlags OPTIONAL, -- Test Flow Checkpoint 1 testFlowCheckpoint2 [12] ErrorFlags OPTIONAL, -- Test Flow Checkpoint 2 nvmLogFull [13] ErrorFlags OPTIONAL, -- NVM Log Full nvmFlashCorrupt [14] ErrorFlags OPTIONAL, -- NVM Log Flash Corrupt stackOverflow [15] ErrorFlags OPTIONAL, -- Stack Overflow hardFault [16] ErrorFlags OPTIONAL, -- Hard Fault logicError [17] ErrorFlags OPTIONAL, -- Software triggered logic errors. assert() in the firmware. asicSyncSwitch [18] ErrorFlags OPTIONAL -- ASIC sync switch test failed } ErrorFlags ::= BIT STRING { applicable (0), -- Test has been run. qualified (1) -- Error is qualified. } AsicInformation ::= SEQUENCE { index [0] INTEGER OPTIONAL, irLeds [1] DiodeComponentInformation OPTIONAL, irPds [2] DiodeComponentInformation OPTIONAL, offline [3] ErrorFlags OPTIONAL, -- ASIC Offline. timeout [4] ErrorFlags OPTIONAL, -- ASIC Timeout. overTemperatureExternalSensor [5] ErrorFlags OPTIONAL, -- External Temperature Sensor Overtemperature. porFault [6] ErrorFlags OPTIONAL, -- POR Fault. analogOrVbgFault [7] ErrorFlags OPTIONAL, -- Analogue circuits reporting Vref drop or VBG Fault. memoryOverflow [8] ErrorFlags OPTIONAL, -- Memory Overflow, Storage memory full. internalThermalShutdown [9] ErrorFlags OPTIONAL, -- Internal sensor tripped Thermal Shutdown. proxResultOverflow [10] ErrorFlags OPTIONAL -- PROX instruction result out of range. } VisibleLedDriverInformation ::= SEQUENCE { index [0] INTEGER OPTIONAL, visibleLeds [1] DiodeComponentInformation OPTIONAL, offline [2] ErrorFlags OPTIONAL } DiodeComponentInformation ::= SEQUENCE { componentOpen [0] BIT STRING OPTIONAL, componentOpenApplicable [1] BIT STRING OPTIONAL, componentShort [2] BIT STRING OPTIONAL, componentShortApplicable [3] BIT STRING OPTIONAL } ErrorLog ::= SEQUENCE { sessionIdentifier [0] INTEGER OPTIONAL, timestamp [1] Timestamp OPTIONAL, isLastEntry [2] NULL OPTIONAL, errorEntry [3] ErrorEntry OPTIONAL, resetCause [4] INTEGER { hard (0), -- Reset pin soft (1), -- Software reset internalWatchdog (2), -- Internal Watchdog brownOut (3) -- Power loss } OPTIONAL } ErrorNotification ::= SEQUENCE { errorEntry [0] ErrorEntry OPTIONAL } -- Can either be none or one. ErrorEntry ::= CHOICE { systemTest [0] SystemErrorInformation, asic [1] AsicErrorEntry, visibleLedDriver [2] VisibleLedDriverErrorEntry } -- For a description of error types, check AsicInformation above. AsicErrorEntry ::= SEQUENCE { index [0] INTEGER OPTIONAL, irLedIndex [1] INTEGER OPTIONAL, irPdIndex [2] INTEGER OPTIONAL, open [3] BOOLEAN OPTIONAL, short [4] BOOLEAN OPTIONAL, offline [5] BOOLEAN OPTIONAL, timeout [6] BOOLEAN OPTIONAL, overTemperatureExternalSensor [7] BOOLEAN OPTIONAL, porFault [8] BOOLEAN OPTIONAL, analogOrVbgFault [9] BOOLEAN OPTIONAL, memoryOverflow [10] BOOLEAN OPTIONAL, internalThermalShutdown [11] BOOLEAN OPTIONAL, proxResultOverflow [12] BOOLEAN OPTIONAL } VisibleLedDriverErrorEntry ::= SEQUENCE { index [0] INTEGER OPTIONAL, ledChannelIndex [1] INTEGER OPTIONAL, open [2] BOOLEAN OPTIONAL, short [3] BOOLEAN OPTIONAL, offline [4] BOOLEAN OPTIONAL } -- Exposes system Error Thresholds. Structures based on (and used together with) -- ErrorInformation. ErrorThresholds ::= SEQUENCE { asicsThresholds [0] SEQUENCE OF [0] AsicThresholds OPTIONAL, visibleLedDriversThresholds [1] SEQUENCE OF [0] VisibleLedDriverThresholds OPTIONAL } AsicThresholds ::= SEQUENCE { asicIdentifier [0] INTEGER OPTIONAL, irLedOpenThresholds [1] Thresholds OPTIONAL, irLedShortThresholds [2] Thresholds OPTIONAL, irPdOpenThresholds [3] Thresholds OPTIONAL, irPdShortThresholds [4] Thresholds OPTIONAL } VisibleLedDriverThresholds ::= SEQUENCE { visibleLedDriverIdentifier [0] INTEGER OPTIONAL, visibleLedOpenThresholds [1] Thresholds OPTIONAL, visibleLedShortThresholds [2] Thresholds OPTIONAL } Thresholds ::= SEQUENCE { low [0] INTEGER OPTIONAL, high [1] INTEGER OPTIONAL } END asn1tools-0.169.0/tests/files/zforce.py000066400000000000000000003463421524544274600177510ustar00rootroot00000000000000EXPECTED = {'ProtocolMessage': {'extensibility-implied': True, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'tags': 'IMPLICIT', 'types': {'AsicErrorEntry': {'members': [{'name': 'index', 'optional': True, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'irLedIndex', 'optional': True, 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'irPdIndex', 'optional': True, 'tag': {'number': 2}, 'type': 'INTEGER'}, {'name': 'open', 'optional': True, 'tag': {'number': 3}, 'type': 'BOOLEAN'}, {'name': 'short', 'optional': True, 'tag': {'number': 4}, 'type': 'BOOLEAN'}, {'name': 'offline', 'optional': True, 'tag': {'number': 5}, 'type': 'BOOLEAN'}, {'name': 'timeout', 'optional': True, 'tag': {'number': 6}, 'type': 'BOOLEAN'}, {'name': 'overTemperatureExternalSensor', 'optional': True, 'tag': {'number': 7}, 'type': 'BOOLEAN'}, {'name': 'porFault', 'optional': True, 'tag': {'number': 8}, 'type': 'BOOLEAN'}, {'name': 'analogOrVbgFault', 'optional': True, 'tag': {'number': 9}, 'type': 'BOOLEAN'}, {'name': 'memoryOverflow', 'optional': True, 'tag': {'number': 10}, 'type': 'BOOLEAN'}, {'name': 'internalThermalShutdown', 'optional': True, 'tag': {'number': 11}, 'type': 'BOOLEAN'}, {'name': 'proxResultOverflow', 'optional': True, 'tag': {'number': 12}, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'AsicInformation': {'members': [{'name': 'index', 'optional': True, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'irLeds', 'optional': True, 'tag': {'number': 1}, 'type': 'DiodeComponentInformation'}, {'name': 'irPds', 'optional': True, 'tag': {'number': 2}, 'type': 'DiodeComponentInformation'}, {'name': 'offline', 'optional': True, 'tag': {'number': 3}, 'type': 'ErrorFlags'}, {'name': 'timeout', 'optional': True, 'tag': {'number': 4}, 'type': 'ErrorFlags'}, {'name': 'overTemperatureExternalSensor', 'optional': True, 'tag': {'number': 5}, 'type': 'ErrorFlags'}, {'name': 'porFault', 'optional': True, 'tag': {'number': 6}, 'type': 'ErrorFlags'}, {'name': 'analogOrVbgFault', 'optional': True, 'tag': {'number': 7}, 'type': 'ErrorFlags'}, {'name': 'memoryOverflow', 'optional': True, 'tag': {'number': 8}, 'type': 'ErrorFlags'}, {'name': 'internalThermalShutdown', 'optional': True, 'tag': {'number': 9}, 'type': 'ErrorFlags'}, {'name': 'proxResultOverflow', 'optional': True, 'tag': {'number': 10}, 'type': 'ErrorFlags'}], 'type': 'SEQUENCE'}, 'AsicThresholds': {'members': [{'name': 'asicIdentifier', 'optional': True, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'irLedOpenThresholds', 'optional': True, 'tag': {'number': 1}, 'type': 'Thresholds'}, {'name': 'irLedShortThresholds', 'optional': True, 'tag': {'number': 2}, 'type': 'Thresholds'}, {'name': 'irPdOpenThresholds', 'optional': True, 'tag': {'number': 3}, 'type': 'Thresholds'}, {'name': 'irPdShortThresholds', 'optional': True, 'tag': {'number': 4}, 'type': 'Thresholds'}], 'type': 'SEQUENCE'}, 'AsicType': {'named-numbers': {'nn1001': 1, 'nn1002': 2, 'nn1003': 3}, 'type': 'INTEGER'}, 'BootCompleteNotification': {'members': [{'name': 'asicStatus', 'named-numbers': {'asicExists': 0, 'asicNotFound': 1}, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'resetSource', 'named-bits': [('powerUp', '0'), ('rstLow', '1'), ('watchdogExpired', '2'), ('flashViolation', '3'), ('nonMaskableInterrupt', '4')], 'tag': {'number': 1}, 'type': 'BIT ' 'STRING'}, {'name': 'globalState', 'named-bits': [('watchDogExpiredWaitingForASICIRQ', '0'), ('watchDogExpiredWaitingForSPITXComm', '1'), ('watchDogExpiredWaitingForSPIRXComm', '2'), ('watchDogExpiredUnhandledIRQ', '3'), ('asicFlaggedUnexpectedPOR', '4'), ('asicFlaggedTSDFault', '5'), ('asicFlaggedVBGFault', '6'), ('asicFlaggedMemOverFlow', '7')], 'tag': {'number': 2}, 'type': 'BIT ' 'STRING'}], 'tag': {'class': 'APPLICATION', 'number': 3}, 'type': 'SEQUENCE'}, 'DeviceAddress': {'size': [2], 'tag': {'class': 'APPLICATION', 'number': 0}, 'type': 'OCTET STRING'}, 'DiodeComponentInformation': {'members': [{'name': 'componentOpen', 'optional': True, 'tag': {'number': 0}, 'type': 'BIT ' 'STRING'}, {'name': 'componentOpenApplicable', 'optional': True, 'tag': {'number': 1}, 'type': 'BIT ' 'STRING'}, {'name': 'componentShort', 'optional': True, 'tag': {'number': 2}, 'type': 'BIT ' 'STRING'}, {'name': 'componentShortApplicable', 'optional': True, 'tag': {'number': 3}, 'type': 'BIT ' 'STRING'}], 'type': 'SEQUENCE'}, 'ErrorEntry': {'members': [{'name': 'systemTest', 'tag': {'number': 0}, 'type': 'SystemErrorInformation'}, {'name': 'asic', 'tag': {'number': 1}, 'type': 'AsicErrorEntry'}, {'name': 'visibleLedDriver', 'tag': {'number': 2}, 'type': 'VisibleLedDriverErrorEntry'}], 'type': 'CHOICE'}, 'ErrorFlags': {'named-bits': [('applicable', '0'), ('qualified', '1')], 'type': 'BIT STRING'}, 'ErrorInformation': {'members': [{'name': 'systemTests', 'optional': True, 'tag': {'number': 0}, 'type': 'SystemErrorInformation'}, {'element': {'tag': {'number': 0}, 'type': 'AsicInformation'}, 'name': 'asics', 'optional': True, 'tag': {'number': 1}, 'type': 'SEQUENCE ' 'OF'}, {'element': {'tag': {'number': 0}, 'type': 'VisibleLedDriverInformation'}, 'name': 'visibleLedDrivers', 'optional': True, 'tag': {'number': 2}, 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'ErrorLog': {'members': [{'name': 'sessionIdentifier', 'optional': True, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'timestamp', 'optional': True, 'tag': {'number': 1}, 'type': 'Timestamp'}, {'name': 'isLastEntry', 'optional': True, 'tag': {'number': 2}, 'type': 'NULL'}, {'name': 'errorEntry', 'optional': True, 'tag': {'number': 3}, 'type': 'ErrorEntry'}, {'name': 'resetCause', 'named-numbers': {'brownOut': 3, 'hard': 0, 'internalWatchdog': 2, 'soft': 1}, 'optional': True, 'tag': {'number': 4}, 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'ErrorNotification': {'members': [{'name': 'errorEntry', 'optional': True, 'tag': {'number': 0}, 'type': 'ErrorEntry'}], 'type': 'SEQUENCE'}, 'ErrorThresholds': {'members': [{'element': {'tag': {'number': 0}, 'type': 'AsicThresholds'}, 'name': 'asicsThresholds', 'optional': True, 'tag': {'number': 0}, 'type': 'SEQUENCE ' 'OF'}, {'element': {'tag': {'number': 0}, 'type': 'VisibleLedDriverThresholds'}, 'name': 'visibleLedDriversThresholds', 'optional': True, 'tag': {'number': 1}, 'type': 'SEQUENCE ' 'OF'}], 'type': 'SEQUENCE'}, 'GestureNotification': {'members': [{'name': 'gestureStatus', 'named-numbers': {'detection': 0, 'stop': 2, 'update': 1}, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'gestureIdentifier', 'optional': True, 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'gestureType', 'named-numbers': {'grab': 6, 'longPress': 1, 'pan': 3, 'pinch': 4, 'rimTap': 7, 'rotation': 5, 'swipe': 2, 'tap': 0}, 'tag': {'number': 2}, 'type': 'INTEGER'}, {'name': 'originX', 'optional': True, 'tag': {'number': 3}, 'type': 'INTEGER'}, {'name': 'originY', 'optional': True, 'tag': {'number': 4}, 'type': 'INTEGER'}, {'name': 'sizeX', 'optional': True, 'tag': {'number': 5}, 'type': 'INTEGER'}, {'name': 'sizeY', 'optional': True, 'tag': {'number': 6}, 'type': 'INTEGER'}, {'name': 'deltaX', 'optional': True, 'tag': {'number': 7}, 'type': 'SignedInteger'}, {'name': 'deltaY', 'optional': True, 'tag': {'number': 8}, 'type': 'SignedInteger'}], 'tag': {'class': 'APPLICATION', 'number': 4}, 'type': 'SEQUENCE'}, 'Latency': {'tag': {'class': 'APPLICATION', 'number': 35}, 'type': 'INTEGER'}, 'LedPdPlacement': {'named-numbers': {'ledFirstLedLast': 3, 'ledFirstPdLast': 2, 'pdFirstLedLast': 1, 'pdFirstPdLast': 0}, 'type': 'INTEGER'}, 'Message': {'members': [{'name': 'deviceAddress', 'optional': True, 'type': 'DeviceAddress'}, {'members': [{'name': 'disable', 'optional': True, 'tag': {'number': 0}, 'type': 'NULL'}, {'name': 'enable', 'optional': True, 'restricted-to': [(0, 127)], 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'reset', 'optional': True, 'tag': {'number': 2}, 'type': 'NULL'}], 'name': 'enable', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 5}, 'type': 'SEQUENCE'}, {'members': [{'name': 'touchDescriptor', 'optional': True, 'type': 'TouchDescriptor'}], 'name': 'touchFormat', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 6}, 'type': 'SEQUENCE'}, {'members': [{'name': 'detection', 'optional': True, 'tag': {'number': 0}, 'type': 'BOOLEAN'}, {'name': 'signals', 'optional': True, 'tag': {'number': 1}, 'type': 'BOOLEAN'}, {'name': 'ledLevels', 'optional': True, 'tag': {'number': 2}, 'type': 'BOOLEAN'}, {'name': 'detectionHid', 'optional': True, 'tag': {'number': 3}, 'type': 'BOOLEAN'}, {'name': 'gestures', 'optional': True, 'tag': {'number': 4}, 'type': 'BOOLEAN'}], 'name': 'operationMode', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 7}, 'type': 'SEQUENCE'}, {'members': [{'name': 'finger', 'optional': True, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'stylus', 'optional': True, 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'idle', 'optional': True, 'tag': {'number': 2}, 'type': 'INTEGER'}], 'name': 'frequency', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 8}, 'type': 'SEQUENCE'}, {'members': [{'name': 'x', 'optional': True, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'y', 'optional': True, 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'z', 'optional': True, 'tag': {'number': 2}, 'type': 'INTEGER'}], 'name': 'resolution', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 9}, 'type': 'SEQUENCE'}, {'members': [{'element': {'type': 'OpenShortInformation'}, 'name': 'openShortInfo', 'optional': True, 'tag': {'number': 0}, 'type': 'SEQUENCE ' 'OF'}, {'name': 'errorCount', 'optional': True, 'restricted-to': [(0, 127)], 'tag': {'number': 1}, 'type': 'INTEGER'}], 'name': 'openShort', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 10}, 'type': 'SEQUENCE'}, {'members': [{'members': [{'name': 'platformVersionMajor', 'optional': True, 'restricted-to': [(0, 32767)], 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'platformVersionMinor', 'optional': True, 'restricted-to': [(0, 32767)], 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'protocolVersionMajor', 'optional': True, 'restricted-to': [(0, 32767)], 'tag': {'number': 2}, 'type': 'INTEGER'}, {'name': 'protocolVersionMinor', 'optional': True, 'restricted-to': [(0, 32767)], 'tag': {'number': 3}, 'type': 'INTEGER'}, {'name': 'firmwareVersionMajor', 'optional': True, 'restricted-to': [(0, 32767)], 'tag': {'number': 4}, 'type': 'INTEGER'}, {'name': 'firmwareVersionMinor', 'optional': True, 'restricted-to': [(0, 32767)], 'tag': {'number': 5}, 'type': 'INTEGER'}, {'name': 'hardwareIdentifier', 'optional': True, 'tag': {'number': 6}, 'type': 'IA5String'}, {'name': 'hardwareVersion', 'optional': True, 'tag': {'number': 7}, 'type': 'IA5String'}, {'name': 'asicType', 'optional': True, 'tag': {'number': 8}, 'type': 'AsicType'}, {'name': 'numberOfAsics', 'optional': True, 'restricted-to': [(0, 127)], 'tag': {'number': 9}, 'type': 'INTEGER'}, {'name': 'mcuUniqueIdentifier', 'optional': True, 'size': [(0, 32)], 'tag': {'number': 10}, 'type': 'OCTET ' 'STRING'}, {'name': 'projectReference', 'optional': True, 'tag': {'number': 11}, 'type': 'IA5String'}, {'name': 'platformReference', 'optional': True, 'tag': {'number': 12}, 'type': 'IA5String'}, {'name': 'buildTime', 'optional': True, 'tag': {'number': 13}, 'type': 'IA5String'}, {'name': 'buildDate', 'optional': True, 'tag': {'number': 14}, 'type': 'IA5String'}], 'name': 'platformInformation', 'optional': True, 'tag': {'number': 0}, 'type': 'SEQUENCE'}, {'members': [{'name': 'productVersionMajor', 'optional': True, 'restricted-to': [(0, 32767)], 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'productVersionMinor', 'optional': True, 'restricted-to': [(0, 32767)], 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'physicalWidth', 'optional': True, 'restricted-to': [(0, 32767)], 'tag': {'number': 2}, 'type': 'INTEGER'}, {'name': 'physicalHeight', 'optional': True, 'restricted-to': [(0, 32767)], 'tag': {'number': 3}, 'type': 'INTEGER'}, {'name': 'numberOfSignalAxes', 'optional': True, 'restricted-to': [(0, 32767)], 'tag': {'number': 4}, 'type': 'INTEGER'}, {'element': {'tag': {'number': 0}, 'type': 'INTEGER'}, 'name': 'signalsPerSignalAxis', 'optional': True, 'tag': {'number': 5}, 'type': 'SEQUENCE ' 'OF'}, {'element': {'tag': {'number': 0}, 'type': 'INTEGER'}, 'name': 'ledsPerPhysicalAxis', 'optional': True, 'tag': {'number': 6}, 'type': 'SEQUENCE ' 'OF'}, {'element': {'tag': {'number': 0}, 'type': 'INTEGER'}, 'name': 'pdsPerPhysicalAxis', 'optional': True, 'tag': {'number': 7}, 'type': 'SEQUENCE ' 'OF'}, {'element': {'tag': {'number': 0}, 'type': 'LedPdPlacement'}, 'name': 'ledPdPlacementPerPhysicalAxis', 'optional': True, 'tag': {'number': 8}, 'type': 'SEQUENCE ' 'OF'}], 'name': 'deviceInstanceInformation', 'optional': True, 'tag': {'number': 1}, 'type': 'SEQUENCE'}, {'members': [{'element': {'tag': {'number': 0}, 'type': 'StorageArea'}, 'name': 'storageAreas', 'tag': {'number': 0}, 'type': 'SEQUENCE ' 'OF'}, {'name': 'maxReadSize', 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'maxWriteSize', 'tag': {'number': 2}, 'type': 'INTEGER'}], 'name': 'storageInformation', 'optional': True, 'tag': {'number': 2}, 'type': 'SEQUENCE'}, {'members': [{'name': 'numberOfLeds', 'optional': True, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'element': {'tag': {'number': 0}, 'type': 'INTEGER'}, 'name': 'bitsPerLedChannel', 'optional': True, 'tag': {'number': 1}, 'type': 'SEQUENCE ' 'OF'}], 'name': 'lightingInformation', 'optional': True, 'tag': {'number': 3}, 'type': 'SEQUENCE'}], 'name': 'deviceInformation', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 12}, 'type': 'SEQUENCE'}, {'members': [{'name': 'totalNumberOfDevices', 'optional': True, 'restricted-to': [(0, 127)], 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'coreDevices', 'optional': True, 'restricted-to': [(0, 127)], 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'airDevices', 'optional': True, 'restricted-to': [(0, 127)], 'tag': {'number': 2}, 'type': 'INTEGER'}, {'name': 'plusDevices', 'optional': True, 'restricted-to': [(0, 127)], 'tag': {'number': 3}, 'type': 'INTEGER'}, {'name': 'lightingDevices', 'optional': True, 'restricted-to': [(0, 127)], 'tag': {'number': 4}, 'type': 'INTEGER'}], 'name': 'deviceCount', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 15}, 'type': 'SEQUENCE'}, {'members': [{'members': [{'name': 'currentContacts', 'optional': True, 'restricted-to': [(0, 127)], 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'scanningCounter', 'optional': True, 'restricted-to': [(0, 65535)], 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'preparedTouchCounter', 'optional': True, 'restricted-to': [(0, 65535)], 'tag': {'number': 2}, 'type': 'INTEGER'}, {'name': 'sentTouchCounter', 'optional': True, 'restricted-to': [(0, 65535)], 'tag': {'number': 3}, 'type': 'INTEGER'}, {'name': 'invalidTouchCounter', 'optional': True, 'restricted-to': [(0, 65535)], 'tag': {'number': 4}, 'type': 'INTEGER'}], 'name': 'counters', 'optional': True, 'tag': {'number': 0}, 'type': 'SEQUENCE'}], 'name': 'status', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 13}, 'type': 'SEQUENCE'}, {'name': 'resultCode', 'named-numbers': {'fail': 1, 'ok': 0}, 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 20}, 'type': 'INTEGER'}, {'members': [{'name': 'numberOfTrackedTouches', 'optional': True, 'restricted-to': [(0, 255)], 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'trackingMinDistanceMove', 'optional': True, 'restricted-to': [(0, 16383)], 'tag': {'number': 1}, 'type': 'INTEGER'}, {'members': [{'name': 'lowBoundX', 'optional': True, 'restricted-to': [(0, 16383)], 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'lowBoundY', 'optional': True, 'restricted-to': [(0, 16383)], 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'highBoundX', 'optional': True, 'restricted-to': [(0, 16383)], 'tag': {'number': 2}, 'type': 'INTEGER'}, {'name': 'highBoundY', 'optional': True, 'restricted-to': [(0, 16383)], 'tag': {'number': 3}, 'type': 'INTEGER'}, {'name': 'reverseX', 'optional': True, 'tag': {'number': 4}, 'type': 'BOOLEAN'}, {'name': 'reverseY', 'optional': True, 'tag': {'number': 5}, 'type': 'BOOLEAN'}], 'name': 'subTouchActiveArea', 'optional': True, 'tag': {'number': 2}, 'type': 'SEQUENCE'}, {'name': 'referenceSignalConfig', 'optional': True, 'restricted-to': [(0, 255)], 'tag': {'number': 3}, 'type': 'INTEGER'}, {'members': [{'name': 'maxSizeEnabled', 'optional': True, 'tag': {'number': 0}, 'type': 'BOOLEAN'}, {'name': 'maxSize', 'optional': True, 'restricted-to': [(0, 255)], 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'minSizeEnabled', 'optional': True, 'tag': {'number': 2}, 'type': 'BOOLEAN'}, {'name': 'minSize', 'optional': True, 'restricted-to': [(0, 255)], 'tag': {'number': 3}, 'type': 'INTEGER'}], 'name': 'sizeRestriction', 'optional': True, 'tag': {'number': 4}, 'type': 'SEQUENCE'}, {'name': 'detectionMode', 'named-numbers': {'default': 0, 'finger': 1, 'insensitiveFTIR': 64, 'mergeTouches': 32}, 'optional': True, 'tag': {'number': 5}, 'type': 'INTEGER'}, {'name': 'numberOfReportedTouches', 'optional': True, 'restricted-to': [(0, 255)], 'tag': {'number': 6}, 'type': 'INTEGER'}], 'name': 'deviceConfiguration', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 19}, 'type': 'SEQUENCE'}, {'members': [{'name': 'fixedStrength', 'optional': True, 'restricted-to': [(0, 255)], 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'forceCalibration', 'named-numbers': {'calibrateLedLevels': 1, 'calibrateLedLevelsWithHighestASICGain': 2, 'noCalibration': 0}, 'optional': True, 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'rawSignalFiltering', 'named-numbers': {'disabled': 0, 'enabled': 1}, 'optional': True, 'tag': {'number': 2}, 'type': 'INTEGER'}, {'name': 'calibrationStorageAreaInUse', 'optional': True, 'tag': {'number': 3}, 'type': 'StorageIdentifier'}, {'name': 'signalMaximum', 'optional': True, 'tag': {'number': 4}, 'type': 'BOOLEAN'}], 'name': 'diagnosticsSettings', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 21}, 'type': 'SEQUENCE'}, {'members': [{'name': 'storageIdentifier', 'tag': {'number': 0}, 'type': 'StorageIdentifier'}, {'name': 'operationType', 'named-numbers': {'delete': 2, 'read': 0, 'write': 1}, 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'offset', 'tag': {'number': 2}, 'type': 'INTEGER'}, {'name': 'size', 'tag': {'number': 3}, 'type': 'INTEGER'}, {'name': 'payload', 'optional': True, 'tag': {'number': 4}, 'type': 'OCTET ' 'STRING'}, {'name': 'operationStatusCode', 'named-numbers': {'bufferOverflow': 5, 'deleteNotApplicable': 7, 'genericError': 1, 'identifierError': 4, 'mediaNotPresent': 3, 'outOfBounds': 2, 'success': 0, 'writeProtected': 6}, 'optional': True, 'tag': {'number': 5}, 'type': 'INTEGER'}], 'name': 'storageOperation', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 25}, 'type': 'SEQUENCE'}, {'name': 'signalsLayout', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 18}, 'type': 'Vector'}, {'members': [{'name': 'presenceBitMask', 'optional': True, 'tag': {'number': 0}, 'type': 'BIT ' 'STRING'}, {'name': 'state', 'optional': True, 'tag': {'number': 1}, 'type': 'OCTET ' 'STRING'}, {'name': 'globalIntensity', 'optional': True, 'restricted-to': [(0, 65535)], 'tag': {'number': 2}, 'type': 'INTEGER'}], 'name': 'lighting', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 26}, 'type': 'SEQUENCE'}, {'members': [{'name': 'lowSignalInfo', 'optional': True, 'tag': {'number': 0}, 'type': 'BIT ' 'STRING'}], 'name': 'lowSignal', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 28}, 'type': 'SEQUENCE'}, {'name': 'errorCounterClear', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 31}, 'type': 'NULL'}, {'name': 'errorInformation', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 32}, 'type': 'ErrorInformation'}, {'name': 'errorLog', 'named-numbers': {'allSessions': -2, 'currentSession': -1}, 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 33}, 'type': 'INTEGER'}, {'name': 'errorThresholds', 'optional': True, 'tag': {'class': 'APPLICATION', 'number': 34}, 'type': 'ErrorThresholds'}], 'type': 'SEQUENCE'}, 'Notification': {'members': [{'name': 'deviceAddress', 'optional': True, 'type': 'DeviceAddress'}, {'members': [{'name': 'singleTouch', 'type': 'TouchNotification'}, {'element': {'type': 'TouchNotification'}, 'name': 'touchNotifications', 'size': [(0, 127)], 'tag': {'number': 0}, 'type': 'SEQUENCE ' 'OF'}, {'name': 'bootCompleteNotification', 'type': 'BootCompleteNotification'}, {'name': 'ledLevels', 'tag': {'class': 'APPLICATION', 'number': 11}, 'type': 'RawData'}, {'name': 'coreSignals', 'tag': {'class': 'APPLICATION', 'number': 14}, 'type': 'RawData'}, {'name': 'airSignals', 'tag': {'class': 'APPLICATION', 'number': 17}, 'type': 'Vector'}, {'name': 'airMaximum', 'tag': {'number': 1}, 'type': 'Vector'}, {'name': 'statusNotification', 'type': 'StatusNotification'}, {'element': {'type': 'GestureNotification'}, 'name': 'gestureNotifications', 'size': [(0, 127)], 'tag': {'number': 2}, 'type': 'SEQUENCE ' 'OF'}], 'name': 'notificationMessage', 'type': 'CHOICE'}, {'name': 'notificationTimestamp', 'optional': True, 'type': 'Timestamp'}, {'name': 'notificationLatency', 'optional': True, 'type': 'Latency'}], 'type': 'SEQUENCE'}, 'OpenShortInformation': {'members': [{'name': 'asicIndex', 'optional': True, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'ledOpen', 'tag': {'number': 1}, 'type': 'BIT ' 'STRING'}, {'name': 'ledShort', 'tag': {'number': 2}, 'type': 'BIT ' 'STRING'}, {'name': 'pdOpen', 'optional': True, 'tag': {'number': 3}, 'type': 'BIT ' 'STRING'}, {'name': 'pdShort', 'tag': {'number': 4}, 'type': 'BIT ' 'STRING'}], 'tag': {'class': 'APPLICATION', 'number': 23}, 'type': 'SEQUENCE'}, 'ProtocolMessage': {'members': [{'name': 'request', 'tag': {'class': 'PRIVATE', 'number': 14}, 'type': 'Message'}, {'name': 'response', 'tag': {'class': 'PRIVATE', 'number': 15}, 'type': 'Message'}, {'name': 'notification', 'tag': {'class': 'PRIVATE', 'number': 16}, 'type': 'Notification'}], 'type': 'CHOICE'}, 'RawData': {'element': {'type': 'VariableSizeIntegerString'}, 'type': 'SEQUENCE OF'}, 'SignedInteger': {'type': 'INTEGER'}, 'StatusNotification': {'members': [{'name': 'hardwareError', 'optional': True, 'tag': {'number': 0}, 'type': 'NULL'}, {'name': 'singleAxisTouchError', 'optional': True, 'tag': {'number': 1}, 'type': 'BOOLEAN'}, {'name': 'touchesIgnored', 'optional': True, 'tag': {'number': 2}, 'type': 'BOOLEAN'}, {'name': 'lowSignalError', 'optional': True, 'tag': {'number': 3}, 'type': 'BOOLEAN'}, {'name': 'error', 'optional': True, 'tag': {'number': 4}, 'type': 'ErrorNotification'}, {'name': 'errorLog', 'optional': True, 'tag': {'number': 5}, 'type': 'ErrorLog'}], 'tag': {'class': 'APPLICATION', 'number': 27}, 'type': 'SEQUENCE'}, 'StorageArea': {'members': [{'name': 'storageIdentifier', 'tag': {'number': 0}, 'type': 'StorageIdentifier'}, {'name': 'storageDescription', 'optional': True, 'size': [(0, 32)], 'tag': {'number': 1}, 'type': 'IA5String'}, {'name': 'storageType', 'named-numbers': {'asicRegister': 4, 'asicSram': 5, 'eeprom': 2, 'flash': 1, 'ram': 3, 'rom': 0}, 'optional': True, 'tag': {'number': 2}, 'type': 'INTEGER'}, {'name': 'storageLocation', 'named-numbers': {'external': 1, 'internal': 0, 'removable': 2}, 'optional': True, 'tag': {'number': 3}, 'type': 'INTEGER'}, {'name': 'storageSize', 'tag': {'number': 4}, 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'StorageIdentifier': {'restricted-to': [(0, 127)], 'type': 'INTEGER'}, 'SystemErrorInformation': {'members': [{'name': 'cpu', 'optional': True, 'tag': {'number': 0}, 'type': 'ErrorFlags'}, {'name': 'internalWatchdog', 'optional': True, 'tag': {'number': 1}, 'type': 'ErrorFlags'}, {'name': 'flashProgramChecksum', 'optional': True, 'tag': {'number': 2}, 'type': 'ErrorFlags'}, {'name': 'ram', 'optional': True, 'tag': {'number': 3}, 'type': 'ErrorFlags'}, {'name': 'pll', 'optional': True, 'tag': {'number': 4}, 'type': 'ErrorFlags'}, {'name': 'startupTestChecksum2', 'optional': True, 'tag': {'number': 5}, 'type': 'ErrorFlags'}, {'name': 'lsi', 'optional': True, 'tag': {'number': 6}, 'type': 'ErrorFlags'}, {'name': 'hse', 'optional': True, 'tag': {'number': 7}, 'type': 'ErrorFlags'}, {'name': 'hseSwitch', 'optional': True, 'tag': {'number': 8}, 'type': 'ErrorFlags'}, {'name': 'externalClockSource', 'optional': True, 'tag': {'number': 9}, 'type': 'ErrorFlags'}, {'name': 'abnormalTermination', 'optional': True, 'tag': {'number': 10}, 'type': 'ErrorFlags'}, {'name': 'testFlowCheckpoint1', 'optional': True, 'tag': {'number': 11}, 'type': 'ErrorFlags'}, {'name': 'testFlowCheckpoint2', 'optional': True, 'tag': {'number': 12}, 'type': 'ErrorFlags'}, {'name': 'nvmLogFull', 'optional': True, 'tag': {'number': 13}, 'type': 'ErrorFlags'}, {'name': 'nvmFlashCorrupt', 'optional': True, 'tag': {'number': 14}, 'type': 'ErrorFlags'}, {'name': 'stackOverflow', 'optional': True, 'tag': {'number': 15}, 'type': 'ErrorFlags'}, {'name': 'hardFault', 'optional': True, 'tag': {'number': 16}, 'type': 'ErrorFlags'}, {'name': 'logicError', 'optional': True, 'tag': {'number': 17}, 'type': 'ErrorFlags'}, {'name': 'asicSyncSwitch', 'optional': True, 'tag': {'number': 18}, 'type': 'ErrorFlags'}], 'type': 'SEQUENCE'}, 'Thresholds': {'members': [{'name': 'low', 'optional': True, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'high', 'optional': True, 'tag': {'number': 1}, 'type': 'INTEGER'}], 'type': 'SEQUENCE'}, 'Timestamp': {'tag': {'class': 'APPLICATION', 'number': 24}, 'type': 'INTEGER'}, 'TouchDescriptor': {'named-bits': [('id', '0'), ('event', '1'), ('loc-x-byte1', '2'), ('loc-x-byte2', '3'), ('loc-x-byte3', '4'), ('loc-y-byte1', '5'), ('loc-y-byte2', '6'), ('loc-y-byte3', '7'), ('loc-z-byte1', '8'), ('loc-z-byte2', '9'), ('loc-z-byte3', '10'), ('size-x-byte1', '11'), ('size-x-byte2', '12'), ('size-x-byte3', '13'), ('size-y-byte1', '14'), ('size-y-byte2', '15'), ('size-y-byte3', '16'), ('size-z-byte1', '17'), ('size-z-byte2', '18'), ('size-z-byte3', '19'), ('orientation', '20'), ('confidence', '21'), ('pressure', '22')], 'tag': {'class': 'APPLICATION', 'number': 1}, 'type': 'BIT STRING'}, 'TouchNotification': {'tag': {'class': 'APPLICATION', 'number': 2}, 'type': 'OCTET STRING'}, 'VariableSizeIntegerString': {'members': [{'name': 'uint8', 'tag': {'number': 0}, 'type': 'OCTET ' 'STRING'}, {'name': 'uint12', 'tag': {'number': 1}, 'type': 'OCTET ' 'STRING'}, {'name': 'uint16', 'tag': {'number': 2}, 'type': 'OCTET ' 'STRING'}], 'type': 'CHOICE'}, 'Vector': {'members': [{'name': 'dataType', 'optional': True, 'tag': {'number': 0}, 'type': 'ENUMERATED', 'values': [('uint8', 0), ('int8', 1), ('uint12', 2), ('int12', 3), ('uint16', 4), ('int16', 5), ('uint24', 6), ('int24', 7), ('uint32', 8), ('int32', 9), ('uint64', 10), ('int64', 11), ('float', 12), ('double', 13)]}, {'element': {'tag': {'number': 0}, 'type': 'INTEGER'}, 'name': 'shape', 'optional': True, 'tag': {'number': 1}, 'type': 'SEQUENCE OF'}, {'name': 'data', 'optional': True, 'tag': {'number': 2}, 'type': 'OCTET STRING'}], 'type': 'SEQUENCE'}, 'VisibleLedDriverErrorEntry': {'members': [{'name': 'index', 'optional': True, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'ledChannelIndex', 'optional': True, 'tag': {'number': 1}, 'type': 'INTEGER'}, {'name': 'open', 'optional': True, 'tag': {'number': 2}, 'type': 'BOOLEAN'}, {'name': 'short', 'optional': True, 'tag': {'number': 3}, 'type': 'BOOLEAN'}, {'name': 'offline', 'optional': True, 'tag': {'number': 4}, 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'VisibleLedDriverInformation': {'members': [{'name': 'index', 'optional': True, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'visibleLeds', 'optional': True, 'tag': {'number': 1}, 'type': 'DiodeComponentInformation'}, {'name': 'offline', 'optional': True, 'tag': {'number': 2}, 'type': 'ErrorFlags'}], 'type': 'SEQUENCE'}, 'VisibleLedDriverThresholds': {'members': [{'name': 'visibleLedDriverIdentifier', 'optional': True, 'tag': {'number': 0}, 'type': 'INTEGER'}, {'name': 'visibleLedOpenThresholds', 'optional': True, 'tag': {'number': 1}, 'type': 'Thresholds'}, {'name': 'visibleLedShortThresholds', 'optional': True, 'tag': {'number': 2}, 'type': 'Thresholds'}], 'type': 'SEQUENCE'}}, 'values': {}}}asn1tools-0.169.0/tests/js_source/000077500000000000000000000000001524544274600167655ustar00rootroot00000000000000asn1tools-0.169.0/tests/js_source/.gitignore000066400000000000000000000004771524544274600207650ustar00rootroot00000000000000# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies /node_modules /.pnp .pnp.js # testing /coverage # production /build # misc .DS_Store .env.local .env.development.local .env.test.local .env.production.local npm-debug.log* yarn-debug.log* yarn-error.log* yarn.lockasn1tools-0.169.0/tests/js_source/README.rst000066400000000000000000000006021524544274600204520ustar00rootroot00000000000000Perparations and testing. .. code-block:: text $ yarn install $ yarn test The JavaScript client periodically sends a message to the server. The server replies with the same message. Requires ``pip3 install websockets``. Start the servers. The web browser should start automatically when running ``yarn start``. .. code-block:: text $ python3 server.py & $ yarn start asn1tools-0.169.0/tests/js_source/asn1/000077500000000000000000000000001524544274600176275ustar00rootroot00000000000000asn1tools-0.169.0/tests/js_source/asn1/c_source.asn000066400000000000000000000006151524544274600221360ustar00rootroot00000000000000CSource DEFINITIONS AUTOMATIC TAGS ::= BEGIN A ::= SEQUENCE { a INTEGER (-128..127), b INTEGER (-32768..32767), c INTEGER (-2147483648..2147483647), e INTEGER (0..255), f INTEGER (0..65535), g INTEGER (0..4294967295), i BOOLEAN, j OCTET STRING (SIZE (11)) } B ::= CHOICE { a INTEGER (-128..127), b A, c NULL } C ::= SEQUENCE (SIZE (0..2)) OF B END asn1tools-0.169.0/tests/js_source/asn1/programming_types.asn000066400000000000000000000005211524544274600240760ustar00rootroot00000000000000-- -- Types often found in programming languages. -- ProgrammingTypes DEFINITIONS AUTOMATIC TAGS ::= BEGIN Int8 ::= INTEGER (-128..127) Int16 ::= INTEGER (-32768..32767) Int32 ::= INTEGER (-2147483648..2147483647) Uint8 ::= INTEGER (0..255) Uint16 ::= INTEGER (0..65535) Uint32 ::= INTEGER (0..4294967295) Bool ::= BOOLEAN END asn1tools-0.169.0/tests/js_source/package.json000066400000000000000000000011421524544274600212510ustar00rootroot00000000000000{ "name": "test", "version": "0.1.0", "private": true, "dependencies": { "react": "^16.8.6", "react-dom": "^16.8.6", "react-scripts": "3.0.0" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": "react-app" }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } } asn1tools-0.169.0/tests/js_source/public/000077500000000000000000000000001524544274600202435ustar00rootroot00000000000000asn1tools-0.169.0/tests/js_source/public/index.html000066400000000000000000000003411524544274600222360ustar00rootroot00000000000000 JavaScript asn1tools example
asn1tools-0.169.0/tests/js_source/public/manifest.json000066400000000000000000000002751524544274600227500ustar00rootroot00000000000000{ "short_name": "asn1tools App", "name": "asn1tools App", "icons": [ ], "start_url": ".", "display": "standalone", "theme_color": "#000000", "background_color": "#ffffff" } asn1tools-0.169.0/tests/js_source/server.py000066400000000000000000000014171524544274600206500ustar00rootroot00000000000000#!/usr/bin/env python3 import functools import asyncio import websockets import asn1tools async def echo(websocket, _, c_source): print('Client connected!') while True: data = await websocket.recv() print('Received:', c_source.decode('B', data)) await websocket.send(data) print('Response sent.') def main(): c_source = asn1tools.compile_files([ 'asn1/c_source.asn', 'asn1/programming_types.asn' ], 'oer') start_server = websockets.serve( functools.partial(echo, c_source=c_source), 'localhost', 8765) print('Listening for websocket clients on localhost:8765...') asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever() main() asn1tools-0.169.0/tests/js_source/src/000077500000000000000000000000001524544274600175545ustar00rootroot00000000000000asn1tools-0.169.0/tests/js_source/src/App.css000066400000000000000000000004211524544274600210030ustar00rootroot00000000000000.App { text-align: center; } .App-header { background-color: #282c34; min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; font-size: calc(10px + 2vmin); color: white; } .App-link { color: #61dafb; } asn1tools-0.169.0/tests/js_source/src/App.js000066400000000000000000000023221524544274600206310ustar00rootroot00000000000000import React from 'react'; import './App.css'; import { CSourceB } from './c_source'; function App() { return (
Sending messages to the server and waiting for responses.
    ); } var websocket = new WebSocket("ws://127.0.0.1:8765/"); websocket.binaryType = "arraybuffer"; websocket.onmessage = function (event) { var message = new CSourceB(); message.fromUint8Array(new Uint8Array(event.data)); console.log(message); if (message.choice === CSourceB.CHOICE_A) { appendList("Received: " + message.value.a); } }; function appendList(text) { var node = document.createElement("li"); var textnode = document.createTextNode(text); node.appendChild(textnode); document.getElementById("list").appendChild(node); window.scrollTo(0, document.body.scrollHeight); } var message = new CSourceB(); message.choice = CSourceB.CHOICE_A; message.value.a = 0; function tick() { message.value.a++; if (message.value.a > 127) { message.value.a = -128; } appendList("Sending: " + message.value.a); websocket.send(message.toUint8Array()); } setInterval(tick, 500); export default App; asn1tools-0.169.0/tests/js_source/src/App.test.js000066400000000000000000000003701524544274600216100ustar00rootroot00000000000000import React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; it('renders without crashing', () => { const div = document.createElement('div'); ReactDOM.render(, div); ReactDOM.unmountComponentAtNode(div); }); asn1tools-0.169.0/tests/js_source/src/c_source.js000066400000000000000000000225161524544274600217220ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.145.2 Thu Jan 24 07:56:02 2019. */ class Encoder { constructor() { this.buf = []; } append_bytes(buf) { this.buf = this.buf.concat(Array.from(buf)); } append_uint8(value) { this.append_bytes(new Uint8Array([value])); } append_uint16(value) { this.append_bytes(new Uint8Array([ (value >> 8) & 0xff, value & 0xff ])); } append_uint32(value) { this.append_bytes(new Uint8Array([ (value >> 24) & 0xff, (value >> 16) & 0xff, (value >> 8) & 0xff, value & 0xff ])); } append_int8(value) { this.append_uint8(value); } append_int16(value) { this.append_uint16(value); } append_int32(value) { this.append_uint32(value); } append_uint(value, number_of_bytes) { switch (number_of_bytes) { case 1: this.append_uint8(value); break; case 2: this.append_uint16(value); break; case 3: this.append_uint8(value >> 16); this.append_uint16(value); break; default: this.append_uint32(value); break; } } append_bool(value) { if (value) { this.append_uint8(255); } else { this.append_uint8(0); } } append_length_determinant(length) { if (length < 128) { this.append_int8(length); } else if (length < 256) { this.append_uint8(0x81); this.append_uint8(length); } else if (length < 65536) { this.append_uint8(0x82); this.append_uint16(length); } else if (length < 16777216) { length |= (0x83 << 24); this.append_uint32(length); } else { this.append_uint8(0x84); this.append_uint32(length); } } toUint8Array() { return new Uint8Array(this.buf); } } class Decoder { constructor(data) { this.buf = data; this.pos = 0 } read_bytes(size) { var end = this.pos + size; if (this.buf.length < end) { throw Error("Out of data."); } var data = this.buf.subarray(this.pos, end); this.pos += size; return data; } read_uint8() { return this.read_bytes(1)[0]; } read_uint16() { return ((this.read_bytes(1)[0] * 256) + this.read_bytes(1)[0]); } read_uint32() { return ((this.read_bytes(1)[0] * 16777216) + (this.read_bytes(1)[0] * 65536) + (this.read_bytes(1)[0] * 256) + this.read_bytes(1)[0]); } read_int8() { var value = this.read_uint8(); if (value & 0x80) { value -= 256; } return value; } read_int16() { var value = this.read_uint16(); if (value & 0x8000) { value -= 65536; } return value; } read_int32() { var value = this.read_uint32(); if (value & 0x80000000) { value -= 0x100000000; } return value; } read_uint(number_of_bytes) { switch (number_of_bytes) { case 1: return this.read_uint8(); case 2: return this.read_uint16(); case 3: return ((this.read_uint8() * 65536) + this.read_uint16()); case 4: return this.read_uint32(); default: throw Error("Too big value."); } } read_bool() { return this.read_uint8() !== 0; } read_length_determinant() { var length = this.read_uint8(); if (length & 0x80) { switch (length & 0x7f) { case 1: length = this.read_uint8(); break; case 2: length = this.read_uint16(); break; case 3: length = ((this.read_uint8() * 65536) + this.read_uint16()); break; case 4: length = this.read_uint32(); break; default: throw Error("Too big value."); } } return length; } read_tag() { var tag = this.read_uint8(); if ((tag & 0x3f) === 0x3f) { do { tag *= 256; tag += this.read_uint8(); } while ((tag & 0x80) === 0x80); } return tag; } } class Type { toUint8Array() { var encoder = new Encoder(); this.encode(encoder); return encoder.toUint8Array(); } fromUint8Array(buf) { this.decode(new Decoder(buf)); } } function minimum_uint_length(value) { var length; if (value < 256) { length = 1; } else if (value < 65536) { length = 2; } else if (value < 16777216) { length = 3; } else { length = 4; } return length; } class CSourceA extends Type { constructor() { super(); this.a = null; this.b = null; this.c = null; this.e = null; this.f = null; this.g = null; this.i = null; this.j = null; } encode(encoder) { encoder.append_int8(this.a); encoder.append_int16(this.b); encoder.append_int32(this.c); encoder.append_uint8(this.e); encoder.append_uint16(this.f); encoder.append_uint32(this.g); encoder.append_bool(this.i); encoder.append_bytes(this.j); } decode(decoder) { this.a = decoder.read_int8(); this.b = decoder.read_int16(); this.c = decoder.read_int32(); this.e = decoder.read_uint8(); this.f = decoder.read_uint16(); this.g = decoder.read_uint32(); this.i = decoder.read_bool(); this.j = decoder.read_bytes(11); } } class CSourceB extends Type { static CHOICE_A = 0; static CHOICE_B = 1; static CHOICE_C = 2; constructor() { super(); this.choice = null; this.value = { a: null, b: new CSourceA(), c: null }; } encode(encoder) { switch (this.choice) { case CSourceB.CHOICE_A: encoder.append_uint(0x80, 1); encoder.append_int8(this.value.a); break; case CSourceB.CHOICE_B: encoder.append_uint(0x81, 1); this.value.b.encode(encoder); break; case CSourceB.CHOICE_C: encoder.append_uint(0x82, 1); break; default: throw Error("Bad choice."); } } decode(decoder) { var tag = decoder.read_tag(); switch (tag) { case 0x80: this.choice = CSourceB.CHOICE_A; this.value.a = decoder.read_int8(); break; case 0x81: this.choice = CSourceB.CHOICE_B; this.value.b.decode(decoder); break; case 0x82: this.choice = CSourceB.CHOICE_C; break; default: throw Error("Bad choice."); } } } class CSourceC extends Type { constructor() { super(); this.elements = []; } encode(encoder) { var i; var number_of_length_bytes = minimum_uint_length(this.elements.length); encoder.append_uint8(number_of_length_bytes); encoder.append_uint(this.elements.length, number_of_length_bytes); for (i = 0; i < this.elements.length; i++) { this.elements[i].encode(encoder); } } decode(decoder) { var i; var length = decoder.read_uint(decoder.read_uint8()); if (length > 2) { throw Error("Bad length."); } this.elements = []; for (i = 0; i < length; i++) { var element = new CSourceB(); element.decode(decoder) this.elements.push(element) } } } export { CSourceA, CSourceB, CSourceC, Encoder, Decoder }; asn1tools-0.169.0/tests/js_source/src/c_source.test.js000066400000000000000000000250771524544274600227050ustar00rootroot00000000000000import { CSourceA, CSourceB, CSourceC, Encoder, Decoder } from './c_source'; test('bytes', () => { var decoded = new Uint8Array([5, 4, 3]); var encoded = new Uint8Array([5, 4, 3]); var encoder = new Encoder(); encoder.append_bytes(decoded); expect(encoder.toUint8Array()).toEqual(encoded); var decoder = new Decoder(encoded); expect(decoder.read_bytes(3)).toEqual(decoded); }); test('uint8', () => { var decoded = 5 var encoded = new Uint8Array([5]); var encoder = new Encoder(); encoder.append_uint8(decoded); expect(encoder.toUint8Array()).toEqual(encoded); var decoder = new Decoder(encoded); expect(decoder.read_uint8()).toEqual(decoded); }); test('uint16', () => { var decoded = 6 var encoded = new Uint8Array([0, 6]); var encoder = new Encoder(); encoder.append_uint16(decoded); expect(encoder.toUint8Array()).toEqual(encoded); var decoder = new Decoder(encoded); expect(decoder.read_uint16()).toEqual(decoded); }); test('uint32', () => { var decoded_1 = 7; var decoded_2 = 0xffffffff; var encoded = new Uint8Array([0, 0, 0, 7, 255, 255, 255, 255]); var encoder = new Encoder(); encoder.append_uint32(decoded_1); encoder.append_uint32(decoded_2); expect(encoder.toUint8Array()).toEqual(encoded); var decoder = new Decoder(encoded); expect(decoder.read_uint32()).toEqual(decoded_1); expect(decoder.read_uint32()).toEqual(decoded_2); }); test('int8', () => { var decoded_1 = 5; var decoded_2 = -5; var encoded = new Uint8Array([5, 251]); var encoder = new Encoder(); encoder.append_int8(decoded_1); encoder.append_int8(decoded_2); expect(encoder.toUint8Array()).toEqual(encoded); var decoder = new Decoder(encoded); expect(decoder.read_int8()).toEqual(decoded_1); expect(decoder.read_int8()).toEqual(decoded_2); }); test('int16', () => { var decoded_1 = 6; var decoded_2 = -6; var encoded = new Uint8Array([0, 6, 255, 250]); var encoder = new Encoder(); encoder.append_int16(decoded_1); encoder.append_int16(decoded_2); expect(encoder.toUint8Array()).toEqual(encoded); var decoder = new Decoder(encoded); expect(decoder.read_int16()).toEqual(decoded_1); expect(decoder.read_int16()).toEqual(decoded_2); }); test('int32', () => { var decoded_1 = 7; var decoded_2 = -7; var encoded = new Uint8Array([0, 0, 0, 7, 255, 255, 255, 249]); var encoder = new Encoder(); encoder.append_int32(decoded_1); encoder.append_int32(decoded_2); expect(encoder.toUint8Array()).toEqual(encoded); var decoder = new Decoder(encoded); expect(decoder.read_int32()).toEqual(decoded_1); expect(decoder.read_int32()).toEqual(decoded_2); }); test('uint', () => { var decoded_1 = 8; var decoded_2 = 9; var decoded_3 = 10; var decoded_4 = 11; var encoded = new Uint8Array([8, 0, 9, 0, 0, 10, 0, 0, 0, 11]); var encoder = new Encoder(); encoder.append_uint(decoded_1, 1); encoder.append_uint(decoded_2, 2); encoder.append_uint(decoded_3, 3); encoder.append_uint(decoded_4, 4); expect(encoder.toUint8Array()).toEqual(encoded); var decoder = new Decoder(encoded); expect(decoder.read_uint(1)).toEqual(decoded_1); expect(decoder.read_uint(2)).toEqual(decoded_2); expect(decoder.read_uint(3)).toEqual(decoded_3); expect(decoder.read_uint(4)).toEqual(decoded_4); }); test('bool', () => { var decoded_1 = true; var decoded_2 = false; var encoded = new Uint8Array([255, 0]); var encoder = new Encoder(); encoder.append_bool(decoded_1); encoder.append_bool(decoded_2); expect(encoder.toUint8Array()).toEqual(encoded); var decoder = new Decoder(encoded); expect(decoder.read_bool()).toEqual(decoded_1); expect(decoder.read_bool()).toEqual(decoded_2); }); test('length_determinant', () => { var decoded_1 = 0; var decoded_2 = 127; var decoded_3 = 128; var decoded_4 = 255; var decoded_5 = 256; var decoded_6 = 65535; var decoded_7 = 65536; var decoded_8 = 16777215; var decoded_9 = 16777216; var encoded = new Uint8Array([ 0, 127, 0x81, 128, 0x81, 255, 0x82, 1, 0, 0x82, 255, 255, 0x83, 1, 0, 0, 0x83, 255, 255, 255, 0x84, 1, 0, 0, 0 ]); var encoder = new Encoder(); encoder.append_length_determinant(decoded_1); encoder.append_length_determinant(decoded_2); encoder.append_length_determinant(decoded_3); encoder.append_length_determinant(decoded_4); encoder.append_length_determinant(decoded_5); encoder.append_length_determinant(decoded_6); encoder.append_length_determinant(decoded_7); encoder.append_length_determinant(decoded_8); encoder.append_length_determinant(decoded_9); expect(encoder.toUint8Array()).toEqual( new Uint8Array([ 0, 127, 0x81, 128, 0x81, 255, 0x82, 1, 0, 0x82, 255, 255, 0x83, 1, 0, 0, 0x83, 255, 255, 255, 0x84, 1, 0, 0, 0 ])); var decoder = new Decoder(encoded); expect(decoder.read_length_determinant()).toEqual(decoded_1); expect(decoder.read_length_determinant()).toEqual(decoded_2); expect(decoder.read_length_determinant()).toEqual(decoded_3); expect(decoder.read_length_determinant()).toEqual(decoded_4); expect(decoder.read_length_determinant()).toEqual(decoded_5); expect(decoder.read_length_determinant()).toEqual(decoded_6); expect(decoder.read_length_determinant()).toEqual(decoded_7); expect(decoder.read_length_determinant()).toEqual(decoded_8); expect(decoder.read_length_determinant()).toEqual(decoded_9); }); test('read_tag', () => { var decoded_1 = 0; var decoded_2 = 0x3e; var decoded_3 = 0x3f00; var decoded_4 = 0x40; var decoded_5 = 0xffff7f; var decoded_6 = 0xff80807f; var encoded = new Uint8Array([ 0, 0x3e, 0x3f, 0x00, 0x40, 0xff, 0xff, 0x7f, 0xff, 0x80, 0x80, 0x7f ]); var decoder = new Decoder(encoded); expect(decoder.read_tag()).toEqual(decoded_1); expect(decoder.read_tag()).toEqual(decoded_2); expect(decoder.read_tag()).toEqual(decoded_3); expect(decoder.read_tag()).toEqual(decoded_4); expect(decoder.read_tag()).toEqual(decoded_5); expect(decoder.read_tag()).toEqual(decoded_6); }); test('c_source_a', () => { var message = new CSourceA(); var decoded = new CSourceA(); decoded.a = -1; decoded.b = -2; decoded.c = -3; decoded.e = 1; decoded.f = 2; decoded.g = 3; decoded.i = true; decoded.j = new Uint8Array([5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]); var encoded = new Uint8Array([ 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 1, 0, 2, 0, 0, 0, 3, 0xff, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 ]); expect(decoded.toUint8Array()).toEqual(encoded); message.fromUint8Array(encoded); expect(message.a).toEqual(decoded.a); expect(message.b).toEqual(decoded.b); expect(message.c).toEqual(decoded.c); expect(message.e).toEqual(decoded.e); expect(message.f).toEqual(decoded.f); expect(message.g).toEqual(decoded.g); expect(message.i).toEqual(decoded.i); expect(message.j).toEqual(decoded.j); }); test('c_source_a_decode_error_out_of_data', () => { var message = new CSourceA(); var encoded = new Uint8Array([ 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 1, 0, 2, 0, 0, 0, 3, 0xff, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 ]); expect(() => message.fromUint8Array(encoded)).toThrow("Out of data."); }); test('c_source_b_choice_a', () => { var message = new CSourceB(); var decoded = new CSourceB(); decoded.choice = CSourceB.CHOICE_A; decoded.value.a = -10; var encoded = new Uint8Array([0x80, 0xf6]); expect(decoded.toUint8Array()).toEqual(encoded); message.fromUint8Array(encoded); expect(message.choice).toEqual(decoded.choice); expect(message.value.a).toEqual(decoded.value.a); }); test('c_source_b_choice_b', () => { var message = new CSourceB(); var decoded = new CSourceB(); decoded.choice = CSourceB.CHOICE_B; decoded.value.b.a = -1; decoded.value.b.b = -2; decoded.value.b.c = -3; decoded.value.b.e = 1; decoded.value.b.f = 2; decoded.value.b.g = 3; decoded.value.b.i = true; decoded.value.b.j = new Uint8Array([5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]); var encoded = new Uint8Array([ 0x81, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05 ]); expect(decoded.toUint8Array()).toEqual(encoded); message.fromUint8Array(encoded); expect(message.choice).toEqual(decoded.choice); expect(message.value.b).toEqual(decoded.value.b); }); test('c_source_b_choice_b_decode_error_bad_choice', () => { var message = new CSourceB(); var encoded = new Uint8Array([0x83, 0x00]); expect(() => message.fromUint8Array(encoded)).toThrow("Bad choice."); }); test('c_source_c_empty', () => { var message = new CSourceC(); var decoded = new CSourceC(); decoded.elements = [] var encoded = new Uint8Array([0x01, 0x00]); expect(decoded.toUint8Array()).toEqual(encoded); message.fromUint8Array(encoded); expect(message.elements).toEqual(decoded.elements); }); test('c_source_c_2_elements', () => { var message = new CSourceC(); var decoded = new CSourceC(); var element = new CSourceB(); element.choice = CSourceB.CHOICE_A; element.value.a = -11; decoded.elements.push(element) var element = new CSourceB(); element.choice = CSourceB.CHOICE_A; element.value.a = 13; decoded.elements.push(element) var encoded = new Uint8Array([0x01, 0x02, 0x80, 0xf5, 0x80, 0x0d]); expect(decoded.toUint8Array()).toEqual(encoded); message.fromUint8Array(encoded); expect(message.elements[0].choice).toEqual(decoded.elements[0].choice); expect(message.elements[0].value.a).toEqual(decoded.elements[0].value.a); expect(message.elements[1].choice).toEqual(decoded.elements[1].choice); expect(message.elements[1].value.a).toEqual(decoded.elements[1].value.a); }); test('c_source_c_decode_error_bad_length', () => { var message = new CSourceC(); var encoded = new Uint8Array([0x01, 0x03, 0x80, 0xf5, 0x80, 0x0d, 0x80, 0x0e]); expect(() => message.fromUint8Array(encoded)).toThrow("Bad length."); }); asn1tools-0.169.0/tests/js_source/src/index.css000066400000000000000000000005741524544274600214030ustar00rootroot00000000000000body { margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } code { font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace; } asn1tools-0.169.0/tests/js_source/src/index.js000066400000000000000000000007041524544274600212220ustar00rootroot00000000000000import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import * as serviceWorker from './serviceWorker'; ReactDOM.render(, document.getElementById('root')); // If you want your app to work offline and load faster, you can change // unregister() to register() below. Note this comes with some pitfalls. // Learn more about service workers: https://bit.ly/CRA-PWA serviceWorker.unregister(); asn1tools-0.169.0/tests/js_source/src/serviceWorker.js000066400000000000000000000115271524544274600227520ustar00rootroot00000000000000// This optional code is used to register a service worker. // register() is not called by default. // This lets the app load faster on subsequent visits in production, and gives // it offline capabilities. However, it also means that developers (and users) // will only see deployed updates on subsequent visits to a page, after all the // existing tabs open on the page have been closed, since previously cached // resources are updated in the background. // To learn more about the benefits of this model and instructions on how to // opt-in, read https://bit.ly/CRA-PWA const isLocalhost = Boolean( window.location.hostname === 'localhost' || // [::1] is the IPv6 localhost address. window.location.hostname === '[::1]' || // 127.0.0.1/8 is considered localhost for IPv4. window.location.hostname.match( /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ ) ); export function register(config) { if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { // The URL constructor is available in all browsers that support SW. const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href); if (publicUrl.origin !== window.location.origin) { // Our service worker won't work if PUBLIC_URL is on a different origin // from what our page is served on. This might happen if a CDN is used to // serve assets; see https://github.com/facebook/create-react-app/issues/2374 return; } window.addEventListener('load', () => { const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`; if (isLocalhost) { // This is running on localhost. Let's check if a service worker still exists or not. checkValidServiceWorker(swUrl, config); // Add some additional logging to localhost, pointing developers to the // service worker/PWA documentation. navigator.serviceWorker.ready.then(() => { console.log( 'This web app is being served cache-first by a service ' + 'worker. To learn more, visit https://bit.ly/CRA-PWA' ); }); } else { // Is not localhost. Just register service worker registerValidSW(swUrl, config); } }); } } function registerValidSW(swUrl, config) { navigator.serviceWorker .register(swUrl) .then(registration => { registration.onupdatefound = () => { const installingWorker = registration.installing; if (installingWorker == null) { return; } installingWorker.onstatechange = () => { if (installingWorker.state === 'installed') { if (navigator.serviceWorker.controller) { // At this point, the updated precached content has been fetched, // but the previous service worker will still serve the older // content until all client tabs are closed. console.log( 'New content is available and will be used when all ' + 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' ); // Execute callback if (config && config.onUpdate) { config.onUpdate(registration); } } else { // At this point, everything has been precached. // It's the perfect time to display a // "Content is cached for offline use." message. console.log('Content is cached for offline use.'); // Execute callback if (config && config.onSuccess) { config.onSuccess(registration); } } } }; }; }) .catch(error => { console.error('Error during service worker registration:', error); }); } function checkValidServiceWorker(swUrl, config) { // Check if the service worker can be found. If it can't reload the page. fetch(swUrl) .then(response => { // Ensure service worker exists, and that we really are getting a JS file. const contentType = response.headers.get('content-type'); if ( response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1) ) { // No service worker found. Probably a different app. Reload the page. navigator.serviceWorker.ready.then(registration => { registration.unregister().then(() => { window.location.reload(); }); }); } else { // Service worker found. Proceed as normal. registerValidSW(swUrl, config); } }) .catch(() => { console.log( 'No internet connection found. App is running in offline mode.' ); }); } export function unregister() { if ('serviceWorker' in navigator) { navigator.serviceWorker.ready.then(registration => { registration.unregister(); }); } } asn1tools-0.169.0/tests/main_oer_fuzzer.c000066400000000000000000001517201524544274600203410ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.145.2 Thu Jan 24 07:56:59 2019. */ #include #include #include #include #include #include "oer.h" static void assert_first_encode(ssize_t res) { if (res < 0) { printf("First encode failed with %ld.\n", res); __builtin_trap(); } } static void assert_second_decode(ssize_t res) { if (res < 0) { printf("Second decode failed with %ld.\n", res); __builtin_trap(); } } static void assert_second_decode_data(const void *decoded_p, const void *decoded2_p, size_t size) { if (memcmp(decoded_p, decoded2_p, size) != 0) { printf("Second decode data does not match first decoded data.\n"); __builtin_trap(); } } static void assert_second_encode(ssize_t res, ssize_t res2) { if (res != res2) { printf("Second encode result %ld does not match first pack " "result %ld.\n", res, res2); __builtin_trap(); } } static void assert_second_encode_data(const uint8_t *encoded_p, const uint8_t *encoded2_p, ssize_t size) { ssize_t i; if (memcmp(encoded_p, encoded2_p, size) != 0) { for (i = 0; i < size; i++) { printf("[%04ld]: 0x%02x 0x%02x\n", i, encoded_p[i], encoded2_p[i]); } __builtin_trap(); } } static void test_oer_c_source_a( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_a_t decoded; struct oer_c_source_a_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_a_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_a_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_a_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_a_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ab( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ab_t decoded; struct oer_c_source_ab_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ab_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ab_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ab_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ab_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ac( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ac_t decoded; struct oer_c_source_ac_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ac_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ac_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ac_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ac_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ad( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ad_t decoded; struct oer_c_source_ad_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ad_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ad_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ad_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ad_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ae( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ae_t decoded; struct oer_c_source_ae_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ae_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ae_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ae_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ae_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_af( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size + 2]; uint8_t encoded2[size + 2]; struct oer_c_source_af_t decoded; struct oer_c_source_af_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_af_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_af_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_af_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_af_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_ag( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_ag_t decoded; struct oer_c_source_ag_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_ag_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_ag_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_ag_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_ag_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_b( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_b_t decoded; struct oer_c_source_b_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_b_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_b_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_b_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_b_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_c( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_c_t decoded; struct oer_c_source_c_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_c_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_c_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_c_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_c_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_d( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_d_t decoded; struct oer_c_source_d_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_d_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_d_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_d_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_d_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_e( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_e_t decoded; struct oer_c_source_e_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_e_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_e_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_e_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_e_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_f( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_f_t decoded; struct oer_c_source_f_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_f_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_f_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_f_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_f_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_g( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_g_t decoded; struct oer_c_source_g_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_g_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_g_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_g_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_g_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_h( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_h_t decoded; struct oer_c_source_h_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_h_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_h_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_h_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_h_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_i( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_i_t decoded; struct oer_c_source_i_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_i_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_i_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_i_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_i_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_j( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_j_t decoded; struct oer_c_source_j_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_j_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_j_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_j_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_j_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_k( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_k_t decoded; struct oer_c_source_k_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_k_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_k_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_k_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_k_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_l( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_l_t decoded; struct oer_c_source_l_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_l_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_l_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_l_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_l_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_m( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_m_t decoded; struct oer_c_source_m_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_m_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_m_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_m_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_m_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_n( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_n_t decoded; struct oer_c_source_n_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_n_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_n_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_n_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_n_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_o( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_o_t decoded; struct oer_c_source_o_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_o_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_o_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_o_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_o_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_p( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_p_t decoded; struct oer_c_source_p_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_p_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_p_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_p_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_p_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_q( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_q_t decoded; struct oer_c_source_q_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_q_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_q_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_q_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_q_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_r( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_r_t decoded; struct oer_c_source_r_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_r_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_r_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_r_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_r_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_s( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_s_t decoded; struct oer_c_source_s_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_s_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_s_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_s_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_s_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_t( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_t_t decoded; struct oer_c_source_t_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_t_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_t_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_t_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_t_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_u( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_u_t decoded; struct oer_c_source_u_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_u_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_u_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_u_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_u_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_v( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_v_t decoded; struct oer_c_source_v_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_v_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_v_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_v_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_v_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_w( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_w_t decoded; struct oer_c_source_w_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_w_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_w_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_w_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_w_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_x( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_x_t decoded; struct oer_c_source_x_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_x_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_x_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_x_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_x_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_y( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_y_t decoded; struct oer_c_source_y_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_y_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_y_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_y_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_y_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_c_source_z( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_c_source_z_t decoded; struct oer_c_source_z_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_c_source_z_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_c_source_z_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_c_source_z_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_c_source_z_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_bool( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_bool_t decoded; struct oer_programming_types_bool_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_bool_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_bool_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_bool_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_bool_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_double( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_double_t decoded; struct oer_programming_types_double_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_double_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_double_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_double_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_double_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_float( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_float_t decoded; struct oer_programming_types_float_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_float_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_float_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_float_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_float_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_int16( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_int16_t decoded; struct oer_programming_types_int16_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_int16_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_int16_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_int16_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_int16_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_int32( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_int32_t decoded; struct oer_programming_types_int32_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_int32_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_int32_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_int32_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_int32_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_int64( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_int64_t decoded; struct oer_programming_types_int64_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_int64_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_int64_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_int64_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_int64_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_int8( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_int8_t decoded; struct oer_programming_types_int8_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_int8_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_int8_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_int8_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_int8_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_uint16( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_uint16_t decoded; struct oer_programming_types_uint16_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_uint16_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_uint16_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_uint16_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_uint16_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_uint32( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_uint32_t decoded; struct oer_programming_types_uint32_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_uint32_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_uint32_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_uint32_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_uint32_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_uint64( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_uint64_t decoded; struct oer_programming_types_uint64_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_uint64_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_uint64_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_uint64_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_uint64_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_oer_programming_types_uint8( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct oer_programming_types_uint8_t decoded; struct oer_programming_types_uint8_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = oer_programming_types_uint8_decode( &decoded, encoded_p, size); if (res >= 0) { res = oer_programming_types_uint8_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = oer_programming_types_uint8_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = oer_programming_types_uint8_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } int LLVMFuzzerTestOneInput(const uint8_t *data_p, size_t size) { test_oer_c_source_a(data_p, size); test_oer_c_source_ab(data_p, size); test_oer_c_source_ac(data_p, size); test_oer_c_source_ad(data_p, size); test_oer_c_source_ae(data_p, size); test_oer_c_source_af(data_p, size); test_oer_c_source_ag(data_p, size); test_oer_c_source_b(data_p, size); test_oer_c_source_c(data_p, size); test_oer_c_source_d(data_p, size); test_oer_c_source_e(data_p, size); test_oer_c_source_f(data_p, size); test_oer_c_source_g(data_p, size); test_oer_c_source_h(data_p, size); test_oer_c_source_i(data_p, size); test_oer_c_source_j(data_p, size); test_oer_c_source_k(data_p, size); test_oer_c_source_l(data_p, size); test_oer_c_source_m(data_p, size); test_oer_c_source_n(data_p, size); test_oer_c_source_o(data_p, size); test_oer_c_source_p(data_p, size); test_oer_c_source_q(data_p, size); test_oer_c_source_r(data_p, size); test_oer_c_source_s(data_p, size); test_oer_c_source_t(data_p, size); test_oer_c_source_u(data_p, size); test_oer_c_source_v(data_p, size); test_oer_c_source_w(data_p, size); test_oer_c_source_x(data_p, size); test_oer_c_source_y(data_p, size); test_oer_c_source_z(data_p, size); test_oer_programming_types_bool(data_p, size); test_oer_programming_types_double(data_p, size); test_oer_programming_types_float(data_p, size); test_oer_programming_types_int16(data_p, size); test_oer_programming_types_int32(data_p, size); test_oer_programming_types_int64(data_p, size); test_oer_programming_types_int8(data_p, size); test_oer_programming_types_uint16(data_p, size); test_oer_programming_types_uint32(data_p, size); test_oer_programming_types_uint64(data_p, size); test_oer_programming_types_uint8(data_p, size); return (0); } asn1tools-0.169.0/tests/main_uper_fuzzer.c000066400000000000000000001100611524544274600205200ustar00rootroot00000000000000/** * The MIT License (MIT) * * Copyright (c) 2018-2019 Erik Moqvist * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * This file was generated by asn1tools version 0.145.2 Thu Jan 24 07:53:35 2019. */ #include #include #include #include #include #include "uper.h" static void assert_first_encode(ssize_t res) { if (res < 0) { printf("First encode failed with %ld.\n", res); __builtin_trap(); } } static void assert_second_decode(ssize_t res) { if (res < 0) { printf("Second decode failed with %ld.\n", res); __builtin_trap(); } } static void assert_second_decode_data(const void *decoded_p, const void *decoded2_p, size_t size) { if (memcmp(decoded_p, decoded2_p, size) != 0) { printf("Second decode data does not match first decoded data.\n"); __builtin_trap(); } } static void assert_second_encode(ssize_t res, ssize_t res2) { if (res != res2) { printf("Second encode result %ld does not match first pack " "result %ld.\n", res, res2); __builtin_trap(); } } static void assert_second_encode_data(const uint8_t *encoded_p, const uint8_t *encoded2_p, ssize_t size) { ssize_t i; if (memcmp(encoded_p, encoded2_p, size) != 0) { for (i = 0; i < size; i++) { printf("[%04ld]: 0x%02x 0x%02x\n", i, encoded_p[i], encoded2_p[i]); } __builtin_trap(); } } static void test_uper_c_source_a( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_a_t decoded; struct uper_c_source_a_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_a_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_a_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_a_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_a_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ab( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ab_t decoded; struct uper_c_source_ab_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ab_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ab_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ab_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ab_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ac( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ac_t decoded; struct uper_c_source_ac_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ac_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ac_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ac_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ac_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_ad( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_ad_t decoded; struct uper_c_source_ad_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_ad_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_ad_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_ad_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_ad_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_b( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_b_t decoded; struct uper_c_source_b_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_b_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_b_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_b_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_b_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_c( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_c_t decoded; struct uper_c_source_c_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_c_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_c_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_c_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_c_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_d( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_d_t decoded; struct uper_c_source_d_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_d_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_d_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_d_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_d_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_e( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_e_t decoded; struct uper_c_source_e_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_e_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_e_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_e_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_e_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_f( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_f_t decoded; struct uper_c_source_f_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_f_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_f_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_f_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_f_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_g( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_g_t decoded; struct uper_c_source_g_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_g_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_g_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_g_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_g_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_h( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_h_t decoded; struct uper_c_source_h_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_h_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_h_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_h_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_h_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_i( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_i_t decoded; struct uper_c_source_i_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_i_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_i_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_i_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_i_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_j( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_j_t decoded; struct uper_c_source_j_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_j_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_j_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_j_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_j_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_k( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_k_t decoded; struct uper_c_source_k_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_k_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_k_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_k_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_k_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_l( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_l_t decoded; struct uper_c_source_l_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_l_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_l_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_l_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_l_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_m( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_m_t decoded; struct uper_c_source_m_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_m_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_m_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_m_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_m_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_n( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_n_t decoded; struct uper_c_source_n_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_n_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_n_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_n_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_n_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_o( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_o_t decoded; struct uper_c_source_o_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_o_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_o_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_o_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_o_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_p( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_p_t decoded; struct uper_c_source_p_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_p_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_p_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_p_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_p_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_q( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_q_t decoded; struct uper_c_source_q_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_q_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_q_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_q_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_q_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_r( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_r_t decoded; struct uper_c_source_r_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_r_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_r_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_r_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_r_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_s( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_s_t decoded; struct uper_c_source_s_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_s_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_s_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_s_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_s_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_t( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_t_t decoded; struct uper_c_source_t_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_t_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_t_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_t_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_t_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_u( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_u_t decoded; struct uper_c_source_u_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_u_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_u_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_u_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_u_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_v( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_v_t decoded; struct uper_c_source_v_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_v_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_v_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_v_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_v_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_w( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_w_t decoded; struct uper_c_source_w_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_w_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_w_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_w_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_w_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_x( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_x_t decoded; struct uper_c_source_x_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_x_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_x_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_x_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_x_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_y( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_y_t decoded; struct uper_c_source_y_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_y_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_y_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_y_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_y_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } static void test_uper_c_source_z( const uint8_t *encoded_p, size_t size) { ssize_t res; ssize_t res2; ssize_t i; uint8_t encoded[size]; uint8_t encoded2[size]; struct uper_c_source_z_t decoded; struct uper_c_source_z_t decoded2; memset(&decoded, 0, sizeof(decoded)); res = uper_c_source_z_decode( &decoded, encoded_p, size); if (res >= 0) { res = uper_c_source_z_encode( &encoded[0], sizeof(encoded), &decoded); assert_first_encode(res); memset(&decoded2, 0, sizeof(decoded2)); res2 = uper_c_source_z_decode( &decoded2, &encoded[0], res); assert_second_decode(res2); assert_second_decode_data(&decoded, &decoded2, sizeof(decoded)); res2 = uper_c_source_z_encode( &encoded2[0], sizeof(encoded2), &decoded); assert_second_encode(res, res2); assert_second_encode_data(&encoded[0], &encoded2[0], res); } } int LLVMFuzzerTestOneInput(const uint8_t *data_p, size_t size) { test_uper_c_source_a(data_p, size); test_uper_c_source_ab(data_p, size); test_uper_c_source_ac(data_p, size); test_uper_c_source_ad(data_p, size); test_uper_c_source_b(data_p, size); test_uper_c_source_c(data_p, size); test_uper_c_source_d(data_p, size); test_uper_c_source_e(data_p, size); test_uper_c_source_f(data_p, size); test_uper_c_source_g(data_p, size); test_uper_c_source_h(data_p, size); test_uper_c_source_i(data_p, size); test_uper_c_source_j(data_p, size); test_uper_c_source_k(data_p, size); test_uper_c_source_l(data_p, size); test_uper_c_source_m(data_p, size); test_uper_c_source_n(data_p, size); test_uper_c_source_o(data_p, size); test_uper_c_source_p(data_p, size); test_uper_c_source_q(data_p, size); test_uper_c_source_r(data_p, size); test_uper_c_source_s(data_p, size); test_uper_c_source_t(data_p, size); test_uper_c_source_u(data_p, size); test_uper_c_source_v(data_p, size); test_uper_c_source_w(data_p, size); test_uper_c_source_x(data_p, size); test_uper_c_source_y(data_p, size); test_uper_c_source_z(data_p, size); return (0); } asn1tools-0.169.0/tests/rust_source/000077500000000000000000000000001524544274600173465ustar00rootroot00000000000000asn1tools-0.169.0/tests/rust_source/Cargo.toml000066400000000000000000000002061524544274600212740ustar00rootroot00000000000000[package] name = "rust_source" version = "0.1.0" authors = ["Erik Moqvist "] edition = "2018" [dependencies] asn1tools-0.169.0/tests/rust_source/src/000077500000000000000000000000001524544274600201355ustar00rootroot00000000000000asn1tools-0.169.0/tests/rust_source/src/lib.rs000066400000000000000000000461461524544274600212640ustar00rootroot00000000000000//! This file was generated by asn1tools version 0.145.2 Sun Jan 20 10:31:38 2019. #[derive(Debug, PartialEq, Copy, Clone)] pub enum Error { BadChoice, BadEnum, BadLength, OutOfData, OutOfMemory } struct Encoder<'a> { buf: &'a mut [u8], size: usize, pos: usize, error: Option } struct Decoder<'a> { buf: &'a[u8], size: usize, pos: usize, error: Option } impl<'a> Encoder<'a> { fn new(dst: &'a mut [u8]) -> Encoder { Encoder { size: 8 * dst.len(), buf: dst, pos: 0, error: None } } fn get_result(&self) -> Result { if self.error.is_none() { return Ok((self.pos + 7) / 8); } else { return Err(self.error.unwrap()); } } fn abort(&mut self, error: Error) { if self.error.is_none() { self.error = Some(error); } } fn alloc(&mut self, size: usize) -> Result { if self.pos + size <= self.size { let pos = self.pos; self.pos += size; Ok(pos) } else { self.abort(Error::OutOfMemory); Err(()) } } fn append_bit(&mut self, value: u8) { if let Ok(pos) = self.alloc(1) { if pos % 8 == 0 { self.buf[pos / 8] = 0; } self.buf[pos / 8] |= value << (7 - (pos % 8)); } } fn append_bytes(&mut self, buf: &[u8]) { if let Ok(pos) = self.alloc(8 * buf.len()) { let byte_pos = pos / 8; let pos_in_byte = pos % 8; if pos_in_byte == 0 { self.buf.get_mut(byte_pos..byte_pos + buf.len()) .unwrap() .copy_from_slice(buf.get(0..buf.len()).unwrap()); } else { for i in 0..buf.len() { self.buf[byte_pos + i] |= buf[i] >> pos_in_byte; self.buf[byte_pos + i + 1] = buf[i] << (8 - pos_in_byte); } } } } fn append_u8(&mut self, value: u8) { self.append_bytes(&value.to_be_bytes()); } fn append_u16(&mut self, value: u16) { self.append_bytes(&value.to_be_bytes()); } fn append_u32(&mut self, value: u32) { self.append_bytes(&value.to_be_bytes()); } fn append_u64(&mut self, value: u64) { self.append_bytes(&value.to_be_bytes()); } fn append_i8(&mut self, value: i8) { self.append_u8((value as u8).wrapping_add(128)); } fn append_i16(&mut self, value: i16) { self.append_u16((value as u16).wrapping_add(32768)); } fn append_i32(&mut self, value: i32) { self.append_u32((value as u32).wrapping_add(2147483648)); } fn append_i64(&mut self, value: i64) { self.append_u64((value as u64).wrapping_add(9223372036854775808)); } fn append_bool(&mut self, value: bool) { self.append_bit(value as u8); } fn append_non_negative_binary_integer(&mut self, value: u64, size: usize) { for i in 0..size { self.append_bit((value >> (size - i - 1)) as u8 & 1); } } } impl<'a> Decoder<'a> { fn new(src: &'a[u8]) -> Decoder { Decoder { buf: src, size: 8 * src.len(), pos: 0, error: None } } fn get_result(&self) -> Result { if self.error.is_none() { Ok((self.pos + 7) / 8) } else { Err(self.error.unwrap()) } } fn abort(&mut self, error: Error) { if self.error.is_none() { self.error = Some(error); } } fn free(&mut self, size: usize) -> Result { if self.pos + size <= self.size { let pos = self.pos; self.pos += size; Ok(pos) } else { self.abort(Error::OutOfData); Err(()) } } fn read_bit(&mut self) -> u8 { if let Ok(pos) = self.free(1) { (self.buf[pos / 8] >> (7 - (pos % 8))) & 1 } else { 0 } } fn read_bytes(&mut self, buf: &mut [u8]) { if let Ok(pos) = self.free(8 * buf.len()) { let byte_pos = pos / 8; let pos_in_byte = pos % 8; if pos_in_byte == 0 { buf.copy_from_slice( self.buf.get(byte_pos..byte_pos + buf.len()).unwrap()); } else { for i in 0..buf.len() { buf[i] = self.buf[byte_pos + i] << pos_in_byte; buf[i] |= self.buf[byte_pos + i + 1] >> (8 - pos_in_byte); } } } } fn read_u8(&mut self) -> u8 { let mut buf = [0; 1]; self.read_bytes(&mut buf); u8::from_be_bytes(buf) } fn read_u16(&mut self) -> u16 { let mut buf = [0; 2]; self.read_bytes(&mut buf); u16::from_be_bytes(buf) } fn read_u32(&mut self) -> u32 { let mut buf = [0; 4]; self.read_bytes(&mut buf); u32::from_be_bytes(buf) } fn read_u64(&mut self) -> u64 { let mut buf = [0; 8]; self.read_bytes(&mut buf); u64::from_be_bytes(buf) } fn read_i8(&mut self) -> i8 { self.read_u8().wrapping_sub(128) as i8 } fn read_i16(&mut self) -> i16 { self.read_u16().wrapping_sub(32768) as i16 } fn read_i32(&mut self) -> i32 { self.read_u32().wrapping_sub(2147483648) as i32 } fn read_i64(&mut self) -> i64 { self.read_u64().wrapping_sub(9223372036854775808) as i64 } fn read_bool(&mut self) -> bool { self.read_bit() != 0 } fn read_non_negative_binary_integer(&mut self, size: usize) -> u64 { let mut value: u64 = 0; for _ in 0..size { value <<= 1; value |= self.read_bit() as u64; } value } } /// Type A in module RustSource. #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceAJ { pub buf: [u8; 11] } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceA { pub a: i8, pub b: i16, pub c: i32, pub d: i64, pub e: u8, pub f: u16, pub g: u32, pub h: u64, pub i: bool, pub j: RustSourceAJ } impl RustSourceA { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_i8(self.a); encoder.append_i16(self.b); encoder.append_i32(self.c); encoder.append_i64(self.d); encoder.append_u8(self.e); encoder.append_u16(self.f); encoder.append_u32(self.g); encoder.append_u64(self.h); encoder.append_bool(self.i); encoder.append_bytes(&self.j.buf); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.a = decoder.read_i8(); self.b = decoder.read_i16(); self.c = decoder.read_i32(); self.d = decoder.read_i64(); self.e = decoder.read_u8(); self.f = decoder.read_u16(); self.g = decoder.read_u32(); self.h = decoder.read_u64(); self.i = decoder.read_bool(); decoder.read_bytes(&mut self.j.buf); } } /// Type AB in module RustSource. #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceAB { pub a: i8, pub b: u16 } impl RustSourceAB { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( (self.a - -1) as u64, 1); encoder.append_non_negative_binary_integer( (self.b - 10000) as u64, 10); } fn decode_inner(&mut self, decoder: &mut Decoder) { self.a = decoder.read_non_negative_binary_integer(1) as i8; self.a += -1; self.b = decoder.read_non_negative_binary_integer(10) as u16; self.b += 10000; } } /// Type D in module RustSource. #[derive(Debug, PartialEq, Copy, Clone)] pub enum RustSourceDElemGH { I, J, K } impl Default for RustSourceDElemGH { fn default() -> Self { RustSourceDElemGH::I } } #[derive(Debug, PartialEq, Copy, Clone)] pub enum RustSourceDElemAB { C(u8), D(bool) } impl Default for RustSourceDElemAB { fn default() -> Self { RustSourceDElemAB::C(u8::default()) } } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemAE { pub length: u8 } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemA { pub b: RustSourceDElemAB, pub e: RustSourceDElemAE } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemGL { pub length: u8, pub buf: [u8; 2] } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemG { pub h: RustSourceDElemGH, pub l: RustSourceDElemGL } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemMPQ { pub buf: [u8; 5] } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemMP { pub q: RustSourceDElemMPQ, pub is_r_present: bool, pub r: bool } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElemM { pub is_n_present: bool, pub n: bool, pub o: i8, pub is_p_present: bool, pub p: RustSourceDElemMP } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceDElem { pub a: RustSourceDElemA, pub g: RustSourceDElemG, pub m: RustSourceDElemM } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceD { pub length: u8, pub elements: [RustSourceDElem; 10] } impl RustSourceD { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { encoder.append_non_negative_binary_integer( self.length as u64 - 1, 4); for i in 0..self.length as usize { match self.elements[i].a.b { RustSourceDElemAB::C(value) => { encoder.append_non_negative_binary_integer(0, 1); encoder.append_non_negative_binary_integer( value as u64 - 0, 1); }, RustSourceDElemAB::D(value) => { encoder.append_non_negative_binary_integer(1, 1); encoder.append_bool(value); } } encoder.append_non_negative_binary_integer( self.elements[i].a.e.length as u64 - 3, 1); encoder.append_non_negative_binary_integer( self.elements[i].g.h as u64, 2); encoder.append_non_negative_binary_integer( self.elements[i].g.l.length as u64 - 1, 1); encoder.append_bytes( &mut self.elements[i].g.l.buf[0..self.elements[i].g.l.length as usize]); encoder.append_bool(self.elements[i].m.is_n_present); encoder.append_bool(self.elements[i].m.o != 3); encoder.append_bool(self.elements[i].m.is_p_present); if self.elements[i].m.is_n_present { encoder.append_bool(self.elements[i].m.n); } if self.elements[i].m.o != 3 { encoder.append_non_negative_binary_integer( (self.elements[i].m.o - -2) as u64, 3); } if self.elements[i].m.is_p_present { encoder.append_bool(self.elements[i].m.p.is_r_present); encoder.append_bytes(&self.elements[i].m.p.q.buf); if self.elements[i].m.p.is_r_present { encoder.append_bool(self.elements[i].m.p.r); } } } } fn decode_inner(&mut self, decoder: &mut Decoder) { self.length = decoder.read_non_negative_binary_integer(4) as u8; self.length += 1; if self.length > 10 { decoder.abort(Error::BadLength); return; } for i in 0..self.length as usize { match decoder.read_non_negative_binary_integer(1) { 0 => { self.elements[i].a.b = RustSourceDElemAB::C(decoder.read_non_negative_binary_integer(1) as u8 + 0); }, 1 => { self.elements[i].a.b = RustSourceDElemAB::D(decoder.read_bool()); }, _ => { decoder.abort(Error::BadChoice); return; } } self.elements[i].a.e.length = decoder.read_non_negative_binary_integer(1) as u8; self.elements[i].a.e.length += 3; self.elements[i].g.h = match decoder.read_non_negative_binary_integer(2) { 0 => RustSourceDElemGH::I, 1 => RustSourceDElemGH::J, 2 => RustSourceDElemGH::K, _ => { decoder.abort(Error::BadEnum); return; } }; self.elements[i].g.l.length = decoder.read_non_negative_binary_integer(1) as u8; self.elements[i].g.l.length += 1; decoder.read_bytes( &mut self.elements[i].g.l.buf[0..self.elements[i].g.l.length as usize]); self.elements[i].m.is_n_present = decoder.read_bool(); let is_present = decoder.read_bool(); self.elements[i].m.is_p_present = decoder.read_bool(); if self.elements[i].m.is_n_present { self.elements[i].m.n = decoder.read_bool(); } if is_present { self.elements[i].m.o = decoder.read_non_negative_binary_integer(3) as i8; self.elements[i].m.o += -2; } else { self.elements[i].m.o = 3; } if self.elements[i].m.is_p_present { self.elements[i].m.p.is_r_present = decoder.read_bool(); decoder.read_bytes( &mut self.elements[i].m.p.q.buf); if self.elements[i].m.p.is_r_present { self.elements[i].m.p.r = decoder.read_bool(); } } } } } /// Type B in module RustSource. #[derive(Debug, PartialEq, Copy, Clone)] pub enum RustSourceB { A(i8), B(RustSourceA), C } impl Default for RustSourceB { fn default() -> Self { RustSourceB::A(i8::default()) } } impl RustSourceB { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { match self { RustSourceB::A(value) => { encoder.append_non_negative_binary_integer(0, 2); encoder.append_i8(*value); }, RustSourceB::B(value) => { encoder.append_non_negative_binary_integer(1, 2); value.encode_inner(encoder); }, RustSourceB::C => { encoder.append_non_negative_binary_integer(2, 2); } } } fn decode_inner(&mut self, decoder: &mut Decoder) { match decoder.read_non_negative_binary_integer(2) { 0 => { *self = RustSourceB::A(decoder.read_i8()); }, 1 => { *self = RustSourceB::B(Default::default()); if let RustSourceB::B(ref mut a) = self { a.decode_inner(decoder); } }, 2 => { *self = RustSourceB::C; } _ => { decoder.abort(Error::BadChoice); return; } } } } /// Type E in module RustSource. #[derive(Debug, PartialEq, Copy, Clone)] pub enum RustSourceEAB { C(bool) } impl Default for RustSourceEAB { fn default() -> Self { RustSourceEAB::C(bool::default()) } } #[derive(Debug, PartialEq, Copy, Clone)] pub enum RustSourceEA { B(RustSourceEAB) } impl Default for RustSourceEA { fn default() -> Self { RustSourceEA::B(RustSourceEAB::default()) } } #[derive(Debug, Default, PartialEq, Copy, Clone)] pub struct RustSourceE { pub a: RustSourceEA } impl RustSourceE { pub fn encode(&mut self, mut dst: &mut [u8]) -> Result { let mut encoder = Encoder::new(&mut dst); self.encode_inner(&mut encoder); encoder.get_result() } pub fn decode(&mut self, src: &[u8]) -> Result { let mut decoder = Decoder::new(&src); self.decode_inner(&mut decoder); decoder.get_result() } fn encode_inner(&mut self, encoder: &mut Encoder) { match self.a { RustSourceEA::B(value) => { encoder.append_non_negative_binary_integer(0, 0); match value { RustSourceEAB::C(value_2) => { encoder.append_non_negative_binary_integer(0, 0); encoder.append_bool(value_2); } } } } } fn decode_inner(&mut self, decoder: &mut Decoder) { match decoder.read_non_negative_binary_integer(0) { 0 => { let RustSourceEA::B(ref mut b) = self.a; match decoder.read_non_negative_binary_integer(0) { 0 => { *b = RustSourceEAB::C(decoder.read_bool()); }, _ => { decoder.abort(Error::BadChoice); return; } } }, _ => { decoder.abort(Error::BadChoice); return; } } } } asn1tools-0.169.0/tests/rust_source/tests/000077500000000000000000000000001524544274600205105ustar00rootroot00000000000000asn1tools-0.169.0/tests/rust_source/tests/integration_tests.rs000066400000000000000000000174031524544274600246300ustar00rootroot00000000000000use rust_source::Error; use rust_source::{RustSourceA, RustSourceAJ}; use rust_source::RustSourceB; use rust_source::{RustSourceD, RustSourceDElemAB, RustSourceDElemGH}; use rust_source::{RustSourceE, RustSourceEA, RustSourceEAB}; #[test] fn test_uper_c_source_a() { let mut encoded = [0; 42]; let mut a: RustSourceA = Default::default(); // Encode. a.a = -1; a.b = -2; a.c = -3; a.d = -4; a.e = 1; a.f = 2; a.g = 3; a.h = 4; a.i = true; a.j.buf = [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]; assert_eq!(a.encode(&mut encoded).unwrap(), encoded.len()); assert_eq!(encoded[..], [ 0x7f, 0x7f, 0xfe, 0x7f, 0xff, 0xff, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x80 ][..]); // Decode. a = Default::default(); assert_eq!(a.decode(&encoded).unwrap(), encoded.len()); assert_eq!(a, RustSourceA { a: -1, b: -2, c: -3, d: -4, e: 1, f: 2, g: 3, h: 4, i: true, j: RustSourceAJ { buf: [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] } }); } #[test] fn test_uper_c_source_a_encode_error_no_mem() { let mut encoded = [0; 41]; let mut a: RustSourceA = Default::default(); a.a = -1; a.b = -2; a.c = -3; a.d = -4; a.e = 1; a.f = 2; a.g = 3; a.h = 4; a.i = true; a.j.buf = [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]; assert_eq!(a.encode(&mut encoded), Err(Error::OutOfMemory)); } #[test] fn test_uper_c_source_a_decode_error_out_of_data() { let encoded = [ 0x7f, 0x7f, 0xfe, 0x7f, 0xff, 0xff, 0xfd, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82 ]; let mut a: RustSourceA = Default::default(); assert_eq!(a.decode(&encoded), Err(Error::OutOfData)); } #[test] fn test_uper_c_source_b_choice_a() { let mut encoded = [0; 2]; let mut b; // Encode. b = RustSourceB::A(-10); assert_eq!(b.encode(&mut encoded).unwrap(), encoded.len()); assert_eq!(encoded[..], [ 0x1d, 0x80 ][..]); // Decode. b = Default::default(); assert_eq!(b.decode(&encoded).unwrap(), encoded.len()); assert_eq!(b, RustSourceB::A(-10)); } #[test] fn test_uper_c_source_b_choice_b() { let mut encoded = [0; 42]; let mut b; let mut a: RustSourceA = Default::default(); // Encode. a.a = -1; a.b = -2; a.c = -3; a.d = -4; a.e = 1; a.f = 2; a.g = 3; a.h = 4; a.i = true; a.j.buf = [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]; b = RustSourceB::B(a); assert_eq!(b.encode(&mut encoded).unwrap(), encoded.len()); assert_eq!(encoded[..], [ 0x5f, 0xdf, 0xff, 0x9f, 0xff, 0xff, 0xff, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0 ][..]); // Decode. b = Default::default(); assert_eq!(b.decode(&encoded).unwrap(), encoded.len()); match b { RustSourceB::B(value) => { assert_eq!(value, a); }, _ => panic!("") } } #[test] fn test_uper_c_source_b_decode_error_bad_choice() { let encoded = [0xdd, 0x80]; let mut b: RustSourceB = Default::default(); assert_eq!(b.decode(&encoded), Err(Error::BadChoice)); } #[test] fn test_uper_c_source_d_all_present() { let mut encoded = [0; 10]; let mut d: RustSourceD = Default::default(); // Encode. d.length = 1; d.elements[0].a.b = RustSourceDElemAB::C(0); d.elements[0].a.e.length = 3; d.elements[0].g.h = RustSourceDElemGH::J; d.elements[0].g.l.length = 2; d.elements[0].g.l.buf = [0x54, 0x55]; d.elements[0].m.is_n_present = true; d.elements[0].m.n = false; d.elements[0].m.o = 2; d.elements[0].m.is_p_present = true; d.elements[0].m.p.q.buf = [3, 3, 3, 3, 3]; d.elements[0].m.p.is_r_present = true; d.elements[0].m.p.r = true; assert_eq!(d.encode(&mut encoded).unwrap(), encoded.len()); assert_eq!(encoded[..], [ 0x00, 0xd5, 0x15, 0x7a, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0 ][..]); // Decode. d = Default::default(); assert_eq!(d.decode(&encoded).unwrap(), encoded.len()); assert_eq!(d.length, 1); assert_eq!(d.elements[0].a.b, RustSourceDElemAB::C(0)); assert_eq!(d.elements[0].a.e.length, 3); assert_eq!(d.elements[0].g.h, RustSourceDElemGH::J); assert_eq!(d.elements[0].g.l.length, 2); assert_eq!(d.elements[0].g.l.buf, [0x54, 0x55]); assert_eq!(d.elements[0].m.is_n_present, true); assert_eq!(d.elements[0].m.n, false); assert_eq!(d.elements[0].m.o, 2); assert_eq!(d.elements[0].m.is_p_present, true); assert_eq!(d.elements[0].m.p.q.buf, [3, 3, 3, 3, 3]); assert_eq!(d.elements[0].m.p.is_r_present, true); assert_eq!(d.elements[0].m.p.r, true); } #[test] fn test_uper_c_source_d_some_missing() { let mut encoded = [0; 8]; let mut d: RustSourceD = Default::default(); // Encode. d.length = 1; d.elements[0].a.b = RustSourceDElemAB::D(false); d.elements[0].a.e.length = 3; d.elements[0].g.h = RustSourceDElemGH::K; d.elements[0].g.l.length = 1; d.elements[0].g.l.buf[0] = 0x54; d.elements[0].m.is_n_present = false; // Default value 3. d.elements[0].m.o = 3; d.elements[0].m.is_p_present = true; d.elements[0].m.p.q.buf = [3, 3, 3, 3, 3]; d.elements[0].m.p.is_r_present = false; assert_eq!(d.encode(&mut encoded).unwrap(), encoded.len()); assert_eq!(encoded[..], [ 0x09, 0x15, 0x08, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c ][..]); // Decode. d = Default::default(); assert_eq!(d.decode(&encoded).unwrap(), encoded.len()); assert_eq!(d.length, 1); assert_eq!(d.elements[0].a.b, RustSourceDElemAB::D(false)); assert_eq!(d.elements[0].a.e.length, 3); assert_eq!(d.elements[0].g.h, RustSourceDElemGH::K); assert_eq!(d.elements[0].g.l.length, 1); assert_eq!(d.elements[0].g.l.buf[0], 0x54); assert_eq!(d.elements[0].m.is_n_present, false); assert_eq!(d.elements[0].m.o, 3); assert_eq!(d.elements[0].m.is_p_present, true); assert_eq!(d.elements[0].m.p.q.buf, [3, 3, 3, 3, 3]); assert_eq!(d.elements[0].m.p.is_r_present, false); } #[test] fn test_uper_c_source_d_decode_error_bad_enum() { let encoded = [ 0x01, 0xd5, 0x15, 0x7a, 0x40, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0 ]; let mut d: RustSourceD = Default::default(); assert_eq!(d.decode(&encoded), Err(Error::BadEnum)); } #[test] fn test_uper_c_source_e() { let mut encoded = [0; 1]; let mut e: RustSourceE = Default::default(); // Encode. e.a = RustSourceEA::B(RustSourceEAB::C(true)); assert_eq!(e.encode(&mut encoded).unwrap(), encoded.len()); assert_eq!(encoded[..], [ 0x80 ][..]); // Decode. e = Default::default(); assert_eq!(e.decode(&encoded).unwrap(), encoded.len()); let RustSourceEA::B(RustSourceEAB::C(value)) = e.a; assert_eq!(value, true); } asn1tools-0.169.0/tests/test.mk000066400000000000000000000053521524544274600163060ustar00rootroot00000000000000BUILD = build EXE = $(BUILD)/app INC += $(BUILD) INC += $(CURDIR) INC += $(shell $(NALA) include_dir) SRC += $(BUILD)/nala_mocks.c SRC += $(shell $(NALA) c_sources) SRC += $(TESTS) OBJ = $(patsubst %,$(BUILD)%,$(abspath $(SRC:%.c=%.o))) OBJDEPS = $(OBJ:%.o=%.d) MOCKGENDEPS = $(BUILD)/nala_mocks.ldflags.d DEPS = $(OBJDEPS) $(MOCKGENDEPS) CFLAGS += $(INC:%=-I%) CFLAGS += -g CFLAGS += -O0 CFLAGS += -no-pie CFLAGS += -coverage ifeq ($(SANITIZE), yes) CFLAGS += -fsanitize=address CFLAGS += -fsanitize=undefined endif MOCKGENFLAGS += $(IMPLEMENTATION:%=-i %) MOCKGENFLAGS += $(NO_IMPLEMENTATION:%=-n %) REPORT_JSON = $(BUILD)/report.json EXEARGS += $(ARGS) EXEARGS += $(JOBS:%=-j %) EXEARGS += $(REPORT_JSON:%=-r %) NALA = nala .PHONY: all build generate clean coverage gdb gdb-run auto auto-run help all: $(MAKE) build $(EXE) $(EXEARGS) auto: all while true ; do \ $(MAKE) auto-run ; \ done auto-run: for f in $(OBJDEPS) ; do \ ls -1 $$(cat $$f | sed s/\\\\//g | sed s/.*://g) ; \ done | sort | uniq | grep -v $(BUILD) | entr -d -p $(MAKE) build: $(MAKE) generate $(MAKE) $(EXE) generate: $(BUILD)/nala_mocks.ldflags clean: rm -rf $(BUILD) coverage: gcovr $(GCOVR_ARGS) --html-details --output index.html $(BUILD) mkdir -p $(BUILD)/coverage mv index.* $(BUILD)/coverage @echo "Code coverage report: $$(readlink -f $(BUILD)/coverage/index.html)" # Recursive make for helpful output. gdb: test_file_func=$$($(EXE) --print-test-file-func $(TEST)) && \ $(MAKE) gdb-run TEST_FILE_FUNC=$$test_file_func gdb-run: gdb \ -ex "b $(TEST_FILE_FUNC)_before_fork" \ -ex "r $(TEST)" \ -ex "set follow-fork-mode child" \ -ex c \ $(EXE) help: @echo "TARGET DESCRIPTION" @echo "---------------------------------------------------------" @echo "all Build and run with given ARGS." @echo "auto Build and run with given ARGS on source change." @echo "clean Remove build output." @echo "coverage Create the code coverage report." @echo "gdb Debug given test TEST with gdb." $(EXE): $(OBJ) echo "LD $@" $(CC) $(CFLAGS) @$(BUILD)/nala_mocks.ldflags $^ -o $@ define COMPILE_template $(patsubst %.c,$(BUILD)%.o,$(abspath $1)): $1 @echo "CC $1" mkdir -p $$(@D) $$(CC) -MMD $$(CFLAGS) -c -o $$@ $$< $(NALA) wrap_internal_symbols $(BUILD)/nala_mocks.ldflags $$@ endef $(foreach file,$(SRC),$(eval $(call COMPILE_template,$(file)))) $(BUILD)/nala_mocks.ldflags: $(TESTS) echo "MOCKGEN $(TESTS)" mkdir -p $(@D) [ -f $(BUILD)/nala_mocks.h ] || touch $(BUILD)/nala_mocks.h cat $(TESTS) \ | $(CC) $(CFLAGS) -DNALA_GENERATE_MOCKS -x c -E - \ | $(NALA) generate_mocks $(MOCKGENFLAGS) -o $(BUILD) cat $(TESTS) \ | $(CC) -MM -MT $@ $(CFLAGS) -x c -o $@.d - touch $@ -include $(DEPS) asn1tools-0.169.0/tests/test_ber.py000066400000000000000000004065451524544274600171700ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import math import unittest import timeit import sys from copy import deepcopy from datetime import datetime from .utils import Asn1ToolsBaseTest import asn1tools from asn1tools.codecs import utc_time_to_datetime as ut2dt from asn1tools.compat import timezone from asn1tools.compat import timedelta sys.path.append('tests/files') sys.path.append('tests/files/3gpp') sys.path.append('tests/files/ietf') from rrc_8_6_0 import EXPECTED as RRC_8_6_0 from rfc4511 import EXPECTED as RFC4511 from rfc5280 import EXPECTED as RFC5280 from rfc5280_modified import EXPECTED as RFC5280_MODIFIED from zforce import EXPECTED as ZFORCE from enumerated import EXPECTED as ENUMERATED class Asn1ToolsBerTest(Asn1ToolsBaseTest): maxDiff = None def test_boolean(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BOOLEAN " "END") datas = [ ('A', True, b'\x01\x01\xff'), ('A', False, b'\x01\x01\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_boolean_explicit_tags(self): """Test explicit tags on booleans. """ spec = 'Foo DEFINITIONS ::= BEGIN Foo ::= [2] BOOLEAN END' foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', True, b'\xa2\x03\x01\x01\xff') # Bad explicit tag. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('Foo', b'\xa3\x03\x01\x01\x01') self.assertEqual( str(cm.exception), "Foo: Expected ExplicitTag(Foo) with tag 'a2', but got 'a3'. (At offset: 0)") # Bad tag. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('Foo', b'\xa2\x03\x02\x01\x01') self.assertEqual( str(cm.exception), "Foo.Foo: Expected BOOLEAN(Foo) with tag '01', but got '02'. (At offset: 2)") def test_boolean_implicit_tags(self): """Test implicit tags on booleans. """ spec = 'Foo DEFINITIONS ::= BEGIN Foo ::= [2] IMPLICIT BOOLEAN END' foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', True, b'\x82\x01\xff') def test_integer(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= INTEGER " "END") datas = [ ('A', 32768, b'\x02\x03\x00\x80\x00'), ('A', 32767, b'\x02\x02\x7f\xff'), ('A', 256, b'\x02\x02\x01\x00'), ('A', 255, b'\x02\x02\x00\xff'), ('A', 128, b'\x02\x02\x00\x80'), ('A', 127, b'\x02\x01\x7f'), ('A', 1, b'\x02\x01\x01'), ('A', 0, b'\x02\x01\x00'), ('A', -1, b'\x02\x01\xff'), ('A', -128, b'\x02\x01\x80'), ('A', -129, b'\x02\x02\xff\x7f'), ('A', -256, b'\x02\x02\xff\x00'), ('A', -32768, b'\x02\x02\x80\x00'), ('A', -32769, b'\x02\x03\xff\x7f\xff'), ('A', 1 << 2048, b'\x02\x82\x01\x01\x01' + 256 * b'\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_integer_explicit_tags(self): """Test explicit tags on integers. """ spec = 'Foo DEFINITIONS ::= BEGIN Foo ::= [2] INTEGER END' foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', 1, b'\xa2\x03\x02\x01\x01') spec = 'Foo DEFINITIONS ::= BEGIN Foo ::= [2] EXPLICIT INTEGER END' foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', 1, b'\xa2\x03\x02\x01\x01') spec = 'Foo DEFINITIONS EXPLICIT TAGS ::= BEGIN Foo ::= INTEGER END' foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', 1, b'\x02\x01\x01') spec = 'Foo DEFINITIONS ::= BEGIN Foo ::= [2] BOOLEAN END' foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', True, b'\xa2\x03\x01\x01\xff') def test_integer_implicit_tags(self): """Test implicit tags on integers. """ spec = 'Foo DEFINITIONS ::= BEGIN Foo ::= [2] IMPLICIT INTEGER END' foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', 1, b'\x82\x01\x01') spec = 'Foo DEFINITIONS IMPLICIT TAGS ::= BEGIN Foo ::= INTEGER END' foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', 1, b'\x02\x01\x01') spec = ('Foo DEFINITIONS EXPLICIT TAGS ::= BEGIN ' 'Foo ::= [2] IMPLICIT INTEGER END') foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', 1, b'\x82\x01\x01') def test_real(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= REAL " "END") datas = [ ('A', 0.0, b'\x09\x00'), ('A', -0.0, b'\x09\x00'), ('A', float('inf'), b'\x09\x01\x40'), ('A', float('-inf'), b'\x09\x01\x41'), ('A', 1.0, b'\x09\x03\x80\x00\x01'), ('A', 100.0, b'\x09\x03\x80\x02\x19'), ('A', -100.0, b'\x09\x03\xc0\x02\x19'), ('A', 2 ** 1023, b'\x09\x04\x81\x03\xff\x01'), ('A', 2 ** -1022, b'\x09\x04\x81\xfc\x02\x01'), ('A', (2 ** 1023) * (1 + (1 - (2 ** -52))), b'\x09\x0a\x81\x03\xcb\x1f\xff\xff\xff\xff\xff\xff'), ('A', (2 ** -1022) * (1 - (2 ** -52)), b'\x09\x0a\x81\xfb\xce\x0f\xff\xff\xff\xff\xff\xff'), ('A', 2 ** -1074, b'\x09\x04\x81\xfb\xce\x01'), ('A', 1.1, b'\x09\x09\x80\xcd\x08\xcc\xcc\xcc\xcc\xcc\xcd'), ('A', 1234.5678, b'\x09\x09\x80\xd6\x13\x4a\x45\x6d\x5c\xfa\xad'), ('A', 8, b'\x09\x03\x80\x03\x01'), ('A', 0.625, b'\x09\x03\x80\xfd\x05'), ('A', 10000000000000000146306952306748730309700429878646550592786107871697963642511482159104, b'\x09\x0a\x81\x00\xe9\x02\x92\xe3\x2a\xc6\x85\x59'), ('A', 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000001, b'\x09\x0a\x81\xfe\xae\x13\xe4\x97\x06\x5c\xd6\x1f'), ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # NaN cannot be compared. encoded = b'\x09\x01\x42' self.assertEqual(foo.encode('A', float('nan')), encoded) self.assertTrue(math.isnan(foo.decode('A', encoded))) # Minus zero. self.assertEqual(foo.decode('A', b'\x09\x01\x43'), -0.0) # Invalid control words. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'\x09\x01\x44') self.assertEqual(str(cm.exception), 'A: Unsupported special REAL control word 0x44.') with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'\x09\x02\x82\x00') self.assertEqual(str(cm.exception), 'A: Unsupported binary REAL control word 0x82.') # Decode 100.0 in decimal form (1.e2). self.assertEqual(foo.decode('A', b'\x09\x05\x03\x31\x2e\x45\x32'), 100.0) # Decode 100.0 in decimal form with comma (100,0). self.assertEqual(foo.decode('A', b'\x09\x06\x02\x31\x30\x30\x2c\x30'), 100.0) def test_bit_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BIT STRING " "B ::= BIT STRING { " " a (0), " " b (1), " " c (2) " "} " "C ::= SEQUENCE { " " a B DEFAULT {b, c}, " " b B DEFAULT '011'B, " " c B DEFAULT '60'H " "} " "D ::= SEQUENCE { " " a A DEFAULT '00'B, " " b B DEFAULT '00'B " "} " "END") datas = [ ('A', (b'', 0), b'\x03\x01\x00'), ('A', (b'\x40', 4), b'\x03\x02\x04\x40'), ('A', (b'\x80', 1), b'\x03\x02\x07\x80'), ('A', (b'\x00\x00', 9), b'\x03\x03\x07\x00\x00'), ('B', (b'\x80', 1), b'\x03\x02\x07\x80'), ('B', (b'\xe0', 3), b'\x03\x02\x05\xe0'), ('B', (b'\x01', 8), b'\x03\x02\x00\x01'), ('C', {'a': (b'\x40', 2), 'b': (b'\x40', 2), 'c': (b'\x40', 2)}, b'\x30\x0c\x80\x02\x06\x40\x81\x02\x06\x40\x82\x02\x06\x40'), ('C', {'a': (b'\x60', 3), 'b': (b'\x60', 3), 'c': (b'\x60', 3)}, b'\x30\x00'), ('D', {'a': (b'\x00', 2), 'b': (b'\x00', 2)}, b'\x30\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Default value is not encoded, but part of decoded. Also # ignore dangling bits. datas = [ ('C', {}, b'\x30\x00', {'a': (b'\x60', 3), 'b': (b'\x60', 3), 'c': (b'\x60', 3)}), ('C', {'a': (b'\x60', 4), 'b': (b'\x60', 5), 'c': (b'\x60', 6)}, b'\x30\x00', {'a': (b'\x60', 3), 'b': (b'\x60', 3), 'c': (b'\x60', 3)}), ('A', (b'\xff', 1), b'\x03\x02\x07\x80', (b'\x80', 1)), ('D', {'a': (b'\x00', 3), 'b': (b'\x00', 3)}, b'\x30\x04\x80\x02\x05\x00', {'a': (b'\x00', 3), 'b': (b'\x00', 2)}) ] for type_name, decoded_1, encoded, decoded_2 in datas: self.assertEqual(foo.encode(type_name, decoded_1), encoded) self.assertEqual(foo.decode(type_name, encoded), decoded_2) def test_bit_string_explicit_tags(self): """Test explicit tags on bit strings. """ spec = 'Foo DEFINITIONS ::= BEGIN Foo ::= [2] BIT STRING END' foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', (b'\x56', 7), b'\xa2\x04\x03\x02\x01\x56') def test_octet_string_explicit_tags(self): """Test explicit tags on octet strings. """ spec = 'Foo DEFINITIONS ::= BEGIN Foo ::= [2] OCTET STRING END' foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', b'\x56', b'\xa2\x03\x04\x01\x56') def test_object_descriptor(self): foo = asn1tools.compile_string( "Foo DEFINITIONS ::= " "BEGIN " "A ::= ObjectDescriptor " "B ::= [5] ObjectDescriptor " "END") datas = [ ('A', '1234', b'\x07\x04\x31\x32\x33\x34'), ('B', '1234', b'\xa5\x06\x07\x04\x31\x32\x33\x34') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_external_explicit_tags(self): foo = asn1tools.compile_string( "Foo DEFINITIONS ::= " "BEGIN " "A ::= EXTERNAL " "B ::= [0] EXTERNAL " "END") datas = [ ('A', {'encoding': ('octet-aligned', b'\x12')}, b'\x28\x03\x81\x01\x12'), ('A', { 'data-value-descriptor': '12', 'encoding': ('octet-aligned', b'\x34') }, b'\x28\x07\x07\x02\x31\x32\x81\x01\x34'), ('B', {'encoding': ('octet-aligned', b'\x12')}, b'\xa0\x05\x28\x03\x81\x01\x12'), ('B', { 'data-value-descriptor': '12', 'encoding': ('octet-aligned', b'\x34') }, b'\xa0\x09\x28\x07\x07\x02\x31\x32\x81\x01\x34') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_external_implicit_tags(self): foo = asn1tools.compile_string( "Foo DEFINITIONS IMPLICIT TAGS ::= " "BEGIN " "A ::= EXTERNAL " "B ::= [0] EXTERNAL " "END") datas = [ ('A', {'encoding': ('octet-aligned', b'\x12')}, b'\x28\x03\x81\x01\x12'), ('A', { 'data-value-descriptor': '12', 'encoding': ('octet-aligned', b'\x34') }, b'\x28\x07\x07\x02\x31\x32\x81\x01\x34'), ('B', {'encoding': ('octet-aligned', b'\x12')}, b'\xa0\x03\x81\x01\x12'), ('B', { 'data-value-descriptor': '12', 'encoding': ('octet-aligned', b'\x34') }, b'\xa0\x07\x07\x02\x31\x32\x81\x01\x34') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_enumerated(self): foo = asn1tools.compile_dict(deepcopy(ENUMERATED)) datas = [ ('A', 'a', b'\x0a\x01\x00'), ('A', 'b', b'\x0a\x01\x01'), ('A', 'c', b'\x0a\x01\x02'), ('B', 'c', b'\x0a\x01\x00'), ('B', 'a', b'\x0a\x01\x01'), ('B', 'b', b'\x0a\x01\x02'), ('B', 'd', b'\x0a\x01\x03'), ('C', 'a', b'\x0a\x01\x00'), ('C', 'b', b'\x0a\x01\x01'), ('C', 'c', b'\x0a\x01\x03'), ('C', 'd', b'\x0a\x01\x04'), ('D', 'a', b'\x0a\x01\x00'), ('D', 'd', b'\x0a\x01\x01'), ('D', 'z', b'\x0a\x01\x19'), ('E', 'c', b'\x0a\x01\x00'), ('E', 'a', b'\x0a\x01\x01'), ('E', 'b', b'\x0a\x01\x02'), ('E', 'd', b'\x0a\x01\x03'), ('E', 'f', b'\x0a\x01\x04'), ('E', 'g', b'\x0a\x01\x05'), ('E', 'e', b'\x0a\x01\x19'), ('H', 'a', b'\x0a\x01\x0a') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Unknown addition value. self.assertEqual(foo.decode('F', b'\x0a\x01\xff'), None) # No addition present. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('G', b'\x0a\x01\xff') self.assertEqual(str(cm.exception), "G: Expected enumeration value 0, but got -1. (At offset: 2)") def test_sequence(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE {} " "B ::= SEQUENCE { " " a INTEGER DEFAULT 0 " "} " "C ::= SEQUENCE { " " a BOOLEAN, " " ... " "} " "D ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]] " "} " "E ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]], " " ... " "} " "F ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]], " " ..., " " c BOOLEAN " "} " "G ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]], " " [[ " " c BOOLEAN " " ]], " " ..., " " d BOOLEAN " "} " "H ::= SEQUENCE { " " a BOOLEAN, " " ..., " " ... " "} " "I ::= SEQUENCE { " " a BOOLEAN, " " ..., " " b BOOLEAN " "} " "J ::= SEQUENCE { " " a BOOLEAN, " " ..., " " b BOOLEAN OPTIONAL " "} " "K ::= SEQUENCE { " " a BOOLEAN, " " ..., " " b BOOLEAN, " " c BOOLEAN " "} " "L ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN, " " c BOOLEAN " " ]] " "} " "M ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b SEQUENCE { " " a INTEGER" " } OPTIONAL, " " c BOOLEAN " " ]] " "} " "N ::= SEQUENCE { " " a BOOLEAN DEFAULT TRUE " "} " "O ::= SEQUENCE { " " ..., " " a BOOLEAN DEFAULT TRUE " "} " "P ::= SEQUENCE { " " ..., " " [[ " " a BOOLEAN, " " b BOOLEAN DEFAULT TRUE " " ]] " "} " "Q ::= SEQUENCE { " " a C, " " b INTEGER " "} " "R ::= SEQUENCE { " " a D, " " b INTEGER " "} " "S ::= SEQUENCE { " " a INTEGER OPTIONAL " "} " "T ::= SEQUENCE { " " a T OPTIONAL " "} " "U ::= SEQUENCE { " " a SEQUENCE OF U OPTIONAL " "} " "V ::= SEQUENCE { " " a [1] V OPTIONAL, " " b [2] V OPTIONAL, " " c [3] SEQUENCE { " " a [4] V " " } OPTIONAL " "} " "W ::= SEQUENCE { " " a [1] INTEGER OPTIONAL, " " b [2] OCTET STRING OPTIONAL, " " c [3] SEQUENCE { " " a [4] INTEGER " " } OPTIONAL " "} " "END", 'ber') datas = [ ('A', {}, b'\x30\x00'), ('B', {'a': 0}, b'\x30\x00'), ('N', {'a': True}, b'\x30\x00'), ('P', {}, b'\x30\x00'), ('S', {}, b'\x30\x00'), ('T', {}, b'\x30\x00'), ('O', {'a': True}, b'\x30\x00'), ('T', {'a': {}}, b'\x30\x02\xa0\x00'), ('B', {'a': 1}, b'\x30\x03\x80\x01\x01'), ('C', {'a': True}, b'\x30\x03\x80\x01\xff'), ('D', {'a': True}, b'\x30\x03\x80\x01\xff'), ('E', {'a': True}, b'\x30\x03\x80\x01\xff'), ('H', {'a': True}, b'\x30\x03\x80\x01\xff'), ('I', {'a': True}, b'\x30\x03\x80\x01\xff'), ('J', {'a': True}, b'\x30\x03\x80\x01\xff'), ('K', {'a': True}, b'\x30\x03\x80\x01\xff'), ('L', {'a': True}, b'\x30\x03\x80\x01\xff'), ('M', {'a': True}, b'\x30\x03\x80\x01\xff'), ('N', {'a': False}, b'\x30\x03\x80\x01\x00'), ('O', {'a': False}, b'\x30\x03\x80\x01\x00'), ('P', {'a': True, 'b': True}, b'\x30\x03\x80\x01\xff'), ('S', {'a': 1}, b'\x30\x03\x80\x01\x01'), ('U', {'a': [{}]}, b'\x30\x04\xa0\x02\x30\x00'), ('V', {'c': {'a': {}}}, b'\x30\x04\xa3\x02\xa4\x00'), ('P', {'a': True, 'b': False}, b'\x30\x06\x80\x01\xff\x81\x01\x00'), ('D', {'a': True, 'b': True}, b'\x30\x06\x80\x01\xff\x81\x01\xff'), ('E', {'a': True, 'b': True}, b'\x30\x06\x80\x01\xff\x81\x01\xff'), ('F', {'a': True, 'c': True}, b'\x30\x06\x80\x01\xff\x82\x01\xff'), ('G', {'a': True, 'd': True}, b'\x30\x06\x80\x01\xff\x83\x01\xff'), ('I', {'a': True, 'b': True}, b'\x30\x06\x80\x01\xff\x81\x01\xff'), ('J', {'a': True, 'b': True}, b'\x30\x06\x80\x01\xff\x81\x01\xff'), ('K', {'a': True, 'b': True}, b'\x30\x06\x80\x01\xff\x81\x01\xff'), ('F', {'a': True, 'b': True, 'c': True}, b'\x30\x09\x80\x01\xff\x82\x01\xff\x81\x01\xff'), ('K', {'a': True, 'b': True, 'c': True}, b'\x30\x09\x80\x01\xff\x81\x01\xff\x82\x01\xff'), ('L', {'a': True, 'b': True, 'c': True}, b'\x30\x09\x80\x01\xff\x81\x01\xff\x82\x01\xff'), ('G', {'a': True, 'b': True, 'd': True}, b'\x30\x09\x80\x01\xff\x83\x01\xff\x81\x01\xff'), ('G', {'a': True, 'b': True, 'c': True, 'd': True}, b'\x30\x0c\x80\x01\xff\x83\x01\xff\x81\x01\xff\x82\x01\xff'), ('M', {'a': True, 'b': {'a': 5}, 'c': True}, b'\x30\x0b\x80\x01\xff\xa1\x03\x80\x01\x05\x82\x01\xff'), ('Q', {'a': {'a': True}, 'b': 100}, b'\x30\x08\xa0\x03\x80\x01\xff\x81\x01\x64'), ('R', {'a': {'a': True, 'b': True}, 'b': 100}, b'\x30\x0b\xa0\x06\x80\x01\xff\x81\x01\xff\x81\x01\x64'), ('U', {'a': [{'a': []}]}, b'\x30\x06\xa0\x04\x30\x02\xa0\x00'), ('V', {'a': {}, 'b': {}, 'c': {'a': {}}}, b'\x30\x08\xa1\x00\xa2\x00\xa3\x02\xa4\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Non-symmetrical encoding and decoding because default values # are not encoded, but part of the decoded (given that the # root and addition is present). self.assertEqual(foo.encode('N', {}), b'\x30\x00') self.assertEqual(foo.decode('N', b'\x30\x00'), {'a': True}) self.assertEqual(foo.encode('P', {'a': True}), b'\x30\x03\x80\x01\xff') self.assertEqual(foo.decode('P', b'\x30\x03\x80\x01\xff'), {'a': True, 'b': True}) # Decode D as C. Extension addition "a.b" should be skipped. self.assertEqual(foo.decode('C', b'\x30\x06\x80\x01\xff\x81\x01\xff'), {'a': True}) # Decode R as Q. Extension addition "a.b" should be skipped. self.assertEqual( foo.decode('Q', b'\x30\x0b\xa0\x06\x80\x01\xff\x81\x01\xff\x81\x01\x64'), {'a': {'a': True}, 'b': 100}) # Decode S with indefinite length and end-of-contents octet self.assertEqual(foo.decode('S', b'\x30\x80\x80\x01\x01\x00\x00'), {'a': 1}) # Decode W (nested sequence) with indefinite length and end-of-contents octet self.assertEqual(foo.decode('W', b'\x30\x80\x81\x01\x10\x82\x01\x61\xa3\x80\x84\x01\x02\x00\x00\x00\x00'), {'a': 16, 'b': b'a', 'c': {'a': 2}}) # Test error when EOC tag is missing with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('W', b'\x30\x80\x81\x01\x10\x82\x01\x61\xa3\x80\x84\x01\x02\x00\x00') self.assertEqual( str(cm.exception), 'W: Ran out of data when trying to find End of Contents tag for indefinite length field (At offset: 15)') # Missing member. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('C', {}) self.assertEqual(str(cm.exception), "C: Sequence member 'a' not found in {}.") def test_sequence_of(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE OF INTEGER " "END", 'ber') datas = [ ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Test end-of-contents octet self.assertEqual(foo.decode('A', b'\x30\x80\x00\x00'), []) def test_set(self): foo = asn1tools.compile_string( "Foo DEFINITIONS IMPLICIT TAGS ::= " "BEGIN " "A ::= SET { " " a [0] INTEGER, " " b [1] INTEGER " "} " "B ::= SET { " " b [1] INTEGER, " " a [0] INTEGER " "} " "C ::= SET { " " a [0] B, " " b [1] OCTET STRING " "} " "END", 'ber') datas = [ ('A', {'a': 3, 'b': 4}, b'\x31\x06\x80\x01\x03\x81\x01\x04'), ('B', {'a': 3, 'b': 4}, b'\x31\x06\x80\x01\x03\x81\x01\x04'), ('C', {'a': {'a': 3, 'b': 4}, 'b': b'\x12'}, b'\x31\x0b\xa0\x06\x80\x01\x03\x81\x01\x04\x81\x01\x12') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Test indefinite length set with end-of-contents tags self.assertEqual(foo.decode('A', b'\x31\x80\x80\x01\x03\x81\x01\x00\x00\x00'), {'a': 3, 'b': 0}) self.assertEqual(foo.decode('C', b'\x31\x80\xa0\x80\x80\x01\x03\x81\x01\x04\x00\x00\x81\x01\x12\x00\x00'), {'a': {'a': 3, 'b': 4}, 'b': b'\x12'}) # Test error when EOC tag is missing with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('C', b'\x31\x80\xa0\x80\x80\x01\x03\x81\x01\x04\x81\x01\x12\x00\x00') self.assertEqual( str(cm.exception), 'C.a: Could not find end-of-contents tag for indefinite length field. (At offset: 10)') # Test data encoded in different field order self.assertEqual(foo.decode('A', b'\x31\x06\x81\x01\x04\x80\x01\x03'), {'a': 3, 'b': 4}) self.assertEqual(foo.decode('A', b'\x31\x80\x81\x01\x00\x80\x01\x03\x00\x00'), {'a': 3, 'b': 0}) def test_choice(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= CHOICE { " " a BOOLEAN " "} " "B ::= CHOICE { " " a BOOLEAN, " " ... " "} " "C ::= CHOICE { " " a BOOLEAN, " " b INTEGER, " " ..., " " [[ " " c BOOLEAN " " ]] " "} " "D ::= CHOICE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]], " " ... " "} " "E ::= CHOICE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]], " " [[ " " c BOOLEAN " " ]], " " ... " "} " "F ::= CHOICE { " " a BOOLEAN, " " ..., " " ... " "} " "G ::= CHOICE { " " a BOOLEAN, " " ..., " " b BOOLEAN " "} " "H ::= CHOICE { " " a BOOLEAN, " " ..., " " b BOOLEAN, " " c BOOLEAN " "} " "I ::= CHOICE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN, " " c BOOLEAN " " ]] " "} " "J ::= CHOICE { " " a BOOLEAN, " " ..., " " [[ " " b CHOICE { " " a INTEGER" " }, " " c BOOLEAN " " ]] " "} " "K ::= CHOICE { " " m1 NULL, " " m2 NULL, " " m3 NULL, " " m4 NULL, " " m5 NULL, " " m6 NULL, " " m7 NULL, " " m8 NULL, " " m9 NULL, " " m10 NULL, " " m11 NULL, " " m12 NULL, " " m13 NULL, " " m14 NULL, " " m15 NULL, " " m16 NULL, " " m17 NULL, " " m18 NULL, " " m19 NULL, " " m20 NULL, " " m21 NULL, " " m22 NULL, " " m23 NULL, " " m24 NULL, " " m25 NULL, " " m26 NULL, " " m27 NULL, " " m28 NULL, " " m29 NULL, " " m30 NULL, " " m31 NULL, " " m32 NULL, " " m33 NULL, " " m34 NULL, " " m35 NULL, " " m36 NULL, " " m37 NULL, " " m38 NULL, " " m39 NULL " "} " "L ::= CHOICE { " " a OCTET STRING " "} " "M ::= CHOICE { " " a CHOICE { " " b BOOLEAN " " } " "} " "END") datas = [ ('A', ('a', True), b'\x80\x01\xff'), ('B', ('a', True), b'\x80\x01\xff'), ('C', ('a', True), b'\x80\x01\xff'), ('C', ('b', 1), b'\x81\x01\x01'), ('C', ('c', True), b'\x82\x01\xff'), ('D', ('a', True), b'\x80\x01\xff'), ('D', ('b', True), b'\x81\x01\xff'), ('E', ('a', True), b'\x80\x01\xff'), ('E', ('b', True), b'\x81\x01\xff'), ('E', ('c', True), b'\x82\x01\xff'), ('F', ('a', True), b'\x80\x01\xff'), ('G', ('a', True), b'\x80\x01\xff'), ('G', ('b', True), b'\x81\x01\xff'), ('H', ('a', True), b'\x80\x01\xff'), ('H', ('b', True), b'\x81\x01\xff'), ('H', ('c', True), b'\x82\x01\xff'), ('I', ('a', True), b'\x80\x01\xff'), ('I', ('b', True), b'\x81\x01\xff'), ('I', ('c', True), b'\x82\x01\xff'), ('J', ('a', True), b'\x80\x01\xff'), ('J', ('b', ('a', 1)), b'\xa1\x03\x80\x01\x01'), ('J', ('c', True), b'\x82\x01\xff'), ('K', ('m31', None), b'\x9e\x00'), ('K', ('m32', None), b'\x9f\x1f\x00'), ('K', ('m33', None), b'\x9f\x20\x00'), ('M', ('a', ('b', True)), b'\xa0\x03\x80\x01\xff'), ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) self.assertEqual(foo.decode('L', b'\xa0\x03\x04\x01\x12'), ('a', b'\x12')) self.assertEqual(foo.decode('L', b'\x80\x01\x12'), ('a', b'\x12')) with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'\x81\x01\xff') self.assertEqual( str(cm.exception), "A: Expected CHOICE(A) with tags ['80'], but got '81'. (At offset: 0)") # Test indefinite-length choice self.assertEqual(foo.decode('M', b'\xa0\x80\x80\x01\xff\x00\x00'), ('a', ('b', True))) def test_choice_implicit_tags(self): foo = asn1tools.compile_string( "Foo DEFINITIONS IMPLICIT TAGS ::= " "BEGIN " "A ::= CHOICE { " " a BOOLEAN " "} " "B ::= CHOICE { " " a OCTET STRING " "} " "C ::= CHOICE { " " a CHOICE { " " b BOOLEAN, " " c INTEGER " " } " "} " "D ::= [5] CHOICE { " " a BOOLEAN " "} " "F ::= [5] EXPLICIT CHOICE { " " a BOOLEAN " "} " "G ::= [APPLICATION 5] EXPLICIT CHOICE { " " a BOOLEAN " "} " "H ::= [6] IMPLICIT G " "I ::= [APPLICATION 6] IMPLICIT F " "J ::= [6] IMPLICIT F " "K ::= [3] CHOICE { " " a [4] CHOICE { " " a BOOLEAN " " }, " " b [5] CHOICE { " " b INTEGER " " } " "} " "N ::= CHOICE { " " a [1] INTEGER, " " b [2] INTEGER " "} " "END") datas = [ ('A', ('a', True), b'\x01\x01\xff'), ('C', ('a', ('b', True)), b'\x01\x01\xff'), ('C', ('a', ('c', 3)), b'\x02\x01\x03'), ('D', ('a', True), b'\xa5\x03\x01\x01\xff'), ('F', ('a', True), b'\xa5\x03\x01\x01\xff'), ('G', ('a', True), b'\x65\x03\x01\x01\xff'), ('H', ('a', True), b'\xa6\x03\x01\x01\xff'), ('I', ('a', True), b'\x66\x03\x01\x01\xff'), ('J', ('a', True), b'\xa6\x03\x01\x01\xff'), ('K', ('a', ('a', True)), b'\xa3\x05\xa4\x03\x01\x01\xff'), ('K', ('b', ('b', 2)), b'\xa3\x05\xa5\x03\x02\x01\x02'), ('N', ('a', 5), b'\x81\x01\x05'), ('N', ('b', 6), b'\x82\x01\x06'), ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) self.assertEqual(foo.decode('B', b'\x24\x03\x04\x01\x12'), ('a', b'\x12')) self.assertEqual(foo.decode('B', b'\x04\x01\x12'), ('a', b'\x12')) # Test indefinite length self.assertEqual(foo.decode('K', b'\xa3\x80\xa4\x80\x01\x01\x00\x00\x00\x00\x00'), ('a', ('a', False))) # Choice decode fail with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('N', b'\xa1\x01\x05') def test_utf8_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UTF8String " "END", 'ber') datas = [ ('A', u'bar', b'\x0c\x03\x62\x61\x72'), ('A', u'a\u1010c', b'\x0c\x05\x61\xe1\x80\x90\x63'), ('A', u'f → ∝', b'\x0c\x09\x66\x20\xe2\x86\x92\x20\xe2\x88\x9d') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_bmp_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS IMPLICIT TAGS ::= " "BEGIN " "A ::= BMPString " "END") datas = [ ('A', 'hello', b'\x1e\x0a\x00\x68\x00\x65\x00\x6c\x00\x6c\x00\x6f'), ('A', u'\u0102', b'\x1e\x02\x01\x02') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_graphic_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GraphicString " "END") datas = [ ('A', 'f', b'\x19\x01\x66') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_universal_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UniversalString " "END") datas = [ ('A', 'bar', b'\x1c\x0c\x00\x00\x00\x62\x00\x00\x00\x61\x00\x00\x00\x72'), ('A', u'åäö', b'\x1c\x0c\x00\x00\x00\xe5\x00\x00\x00\xe4\x00\x00\x00\xf6') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_utc_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS IMPLICIT TAGS ::= " "BEGIN " "A ::= UTCTime " "END") datas = [ ('A', ut2dt('001001000000Z'), b'\x17\x0b\x30\x30\x31\x30\x30\x31\x30\x30\x30\x30\x5a'), ('A', ut2dt('010203040506Z'), b'\x17\x0d010203040506Z'), ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_utc_time_explicit_tags(self): """Test explicit tags on UTC time. """ spec = 'Foo DEFINITIONS ::= BEGIN Foo ::= [2] UTCTime END' foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', ut2dt('121001230001Z'), b'\xa2\x0f\x17\x0d121001230001Z') def test_generalized_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GeneralizedTime " "END") datas = [ ('A', datetime(2018, 1, 22, 13, 29), b'\x18\x0c\x32\x30\x31\x38\x30\x31\x32\x32\x31\x33\x32\x39'), ('A', datetime(2018, 1, 22, 13, 0), b'\x18\x0c\x32\x30\x31\x38\x30\x31\x32\x32\x31\x33\x30\x30'), ('A', datetime(2018, 1, 22, 13, 2), b'\x18\x0c\x32\x30\x31\x38\x30\x31\x32\x32\x31\x33\x30\x32'), ('A', datetime(2000, 12, 31, 23, 59, 59, 999000, timezone(timedelta(hours=0))), b'\x18\x13\x32\x30\x30\x30\x31\x32\x33\x31\x32\x33\x35\x39' b'\x35\x39\x2e\x39\x39\x39\x5a') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_foo(self): foo = asn1tools.compile_files(['tests/files/foo.asn']) self.assertEqual(len(foo.types), 2) self.assertTrue(foo.types['Question'] is not None) self.assertTrue(foo.types['Answer'] is not None) self.assertEqual(len(foo.modules), 1) self.assertTrue(foo.modules['Foo'] is not None) # Encode a question. encoded = foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'}) self.assertEqual(encoded, b'0\x0e\x02\x01\x01\x16\x09Is 1+1=3?') # Decode the encoded question. decoded = foo.decode('Question', encoded) self.assertEqual(decoded, {'id': 1, 'question': 'Is 1+1=3?'}) # Encode an answer. encoded = foo.encode('Answer', {'id': 1, 'answer': False}) self.assertEqual(encoded, b'0\x06\x02\x01\x01\x01\x01\x00') # Decode the encoded answer. decoded = foo.decode('Answer', encoded) self.assertEqual(decoded, {'id': 1, 'answer': False}) def test_decode_length(self): foo = asn1tools.compile_files('tests/files/foo.asn') # The length can be decoded. datas = [ (b'\x30\x0e\x02\x01\x01\x16\x09Is 1+1=3?', 16), (b'\x30\x10\x02\x02\x01\x16\x09Is 1+10=14?', 18), (b'\x30\x0d', 15), (b'\x30\x84\x00\x00\x00\xb8', 190), (b'\x9f\x1f\x00', 3), (b'\x9f\x80\x80\x01\x02\xff', 7) ] for encoded, decoded_length in datas: length = foo.decode_length(encoded) self.assertEqual(length, decoded_length) # The length cannot be decoded. datas = [ b'\x30', b'', b'\x30\x84\x00\x00\x00' ] for encoded in datas: self.assertIsNone(foo.decode_length(encoded)) def test_complex(self): cmplx = asn1tools.compile_files('tests/files/complex.asn') decoded = { 'boolean': True, 'integer': -7, 'bit-string': (b'\x80', 3), 'octet-string': b'\x31\x32', 'null': None, 'object-identifier': '1.3.2', 'enumerated': 'one', 'sequence': {}, 'ia5-string': 'foo' } encoded = ( b'\x30\x1e\x01\x01\xff\x02\x01\xf9\x03\x02\x05\x80\x04\x02\x31\x32' b'\x05\x00\x06\x02\x2b\x02\x0a\x01\x01\x30\x00\x16\x03\x66\x6f\x6f' ) self.assert_encode_decode(cmplx, 'AllUniversalTypes', decoded, encoded) # Ivalid enumeration value. decoded = { 'boolean': True, 'integer': -7, 'bit-string': (b'\x80', 3), 'octet-string': b'\x31\x32', 'null': None, 'object-identifier': '1.3.2', 'enumerated': 'three', 'sequence': {}, 'ia5-string': 'foo' } with self.assertRaises(asn1tools.EncodeError) as cm: cmplx.encode('AllUniversalTypes', decoded) self.assertEqual( str(cm.exception), "AllUniversalTypes.enumerated: Expected enumeration value 'one' or 'two', but got " "'three'.") def test_rrc_8_6_0(self): rrc = asn1tools.compile_dict(deepcopy(RRC_8_6_0)) # Message 1. decoded = { 'message': ( 'c1', ( 'paging', { 'systemInfoModification': 'true', 'nonCriticalExtension': { } } ) ) } encoded = b'0\x0b\xa0\t\xa0\x07\xa0\x05\x81\x01\x00\xa3\x00' self.assert_encode_decode(rrc, 'PCCH-Message', decoded, encoded) # Message 2. decoded = { 'message': ( 'c1', ('paging', {}) ) } encoded = b'0\x06\xa0\x04\xa0\x02\xa0\x00' self.assert_encode_decode(rrc, 'PCCH-Message', decoded, encoded) # Message 3. decoded = { 'message': { 'dl-Bandwidth': 'n6', 'phich-Config': { 'phich-Duration': 'normal', 'phich-Resource': 'half' }, 'systemFrameNumber': (b'\x12', 8), 'spare': (b'\x34\x40', 10) } } encoded = ( b'0\x16\xa0\x14\x80\x01\x00\xa1\x06\x80\x01\x00\x81\x01\x01\x82' b'\x02\x00\x12\x83\x03\x06\x34\x40' ) self.assert_encode_decode(rrc, 'BCCH-BCH-Message', decoded, encoded) # Message 4. decoded = { 'message': ( 'c1', ( 'systemInformation', { 'criticalExtensions': ( 'systemInformation-r8', { 'sib-TypeAndInfo': [ ( 'sib2', { 'ac-BarringInfo': { 'ac-BarringForEmergency': True, 'ac-BarringForMO-Data': { 'ac-BarringFactor': 'p95', 'ac-BarringTime': 's128', 'ac-BarringForSpecialAC': (b'\xf0', 5) } }, 'radioResourceConfigCommon': { 'rach-ConfigCommon': { 'preambleInfo': { 'numberOfRA-Preambles': 'n24', 'preamblesGroupAConfig': { 'sizeOfRA-PreamblesGroupA': 'n28', 'messageSizeGroupA': 'b144', 'messagePowerOffsetGroupB': 'minusinfinity' } }, 'powerRampingParameters': { 'powerRampingStep': 'dB0', 'preambleInitialReceivedTargetPower': 'dBm-102' }, 'ra-SupervisionInfo': { 'preambleTransMax': 'n8', 'ra-ResponseWindowSize': 'sf6', 'mac-ContentionResolutionTimer': 'sf48' }, 'maxHARQ-Msg3Tx': 8 }, 'bcch-Config': { 'modificationPeriodCoeff': 'n2' }, 'pcch-Config': { 'defaultPagingCycle': 'rf256', 'nB': 'twoT' }, 'prach-Config': { 'rootSequenceIndex': 836, 'prach-ConfigInfo': { 'prach-ConfigIndex': 33, 'highSpeedFlag': False, 'zeroCorrelationZoneConfig': 10, 'prach-FreqOffset': 64 } }, 'pdsch-ConfigCommon': { 'referenceSignalPower': -60, 'p-b': 2 }, 'pusch-ConfigCommon': { 'pusch-ConfigBasic': { 'n-SB': 1, 'hoppingMode': 'interSubFrame', 'pusch-HoppingOffset': 10, 'enable64QAM': False }, 'ul-ReferenceSignalsPUSCH': { 'groupHoppingEnabled': True, 'groupAssignmentPUSCH': 22, 'sequenceHoppingEnabled': False, 'cyclicShift': 5 } }, 'pucch-ConfigCommon': { 'deltaPUCCH-Shift': 'ds1', 'nRB-CQI': 98, 'nCS-AN': 4, 'n1PUCCH-AN': 2047 }, 'soundingRS-UL-ConfigCommon': ( 'setup', { 'srs-BandwidthConfig': 'bw0', 'srs-SubframeConfig': 'sc4', 'ackNackSRS-SimultaneousTransmission': True }), 'uplinkPowerControlCommon': { 'p0-NominalPUSCH': -126, 'alpha': 'al0', 'p0-NominalPUCCH': -127, 'deltaFList-PUCCH': { 'deltaF-PUCCH-Format1': 'deltaF-2', 'deltaF-PUCCH-Format1b': 'deltaF1', 'deltaF-PUCCH-Format2': 'deltaF0', 'deltaF-PUCCH-Format2a': 'deltaF-2', 'deltaF-PUCCH-Format2b': 'deltaF0' }, 'deltaPreambleMsg3': -1 }, 'ul-CyclicPrefixLength': 'len1' }, 'ue-TimersAndConstants': { 't300': 'ms100', 't301': 'ms200', 't310': 'ms50', 'n310': 'n2', 't311': 'ms30000', 'n311': 'n2' }, 'freqInfo': { 'additionalSpectrumEmission': 3 }, 'timeAlignmentTimerCommon': 'sf500' } ), ( 'sib3', { 'cellReselectionInfoCommon': { 'q-Hyst': 'dB0', 'speedStateReselectionPars': { 'mobilityStateParameters': { 't-Evaluation': 's180', 't-HystNormal': 's180', 'n-CellChangeMedium': 1, 'n-CellChangeHigh': 16 }, 'q-HystSF': { 'sf-Medium': 'dB-6', 'sf-High': 'dB-4' } } }, 'cellReselectionServingFreqInfo': { 'threshServingLow': 7, 'cellReselectionPriority': 3 }, 'intraFreqCellReselectionInfo': { 'q-RxLevMin': -33, 's-IntraSearch': 0, 'presenceAntennaPort1': False, 'neighCellConfig': (b'\x80', 2), 't-ReselectionEUTRA': 4 } } ), ( 'sib4', { } ), ( 'sib5', { 'interFreqCarrierFreqList': [ { 'dl-CarrierFreq': 1, 'q-RxLevMin': -45, 't-ReselectionEUTRA': 0, 'threshX-High': 31, 'threshX-Low': 29, 'allowedMeasBandwidth': 'mbw6', 'presenceAntennaPort1': True, 'neighCellConfig': (b'\x00', 2), 'q-OffsetFreq': 'dB0' } ] } ), ( 'sib6', { 't-ReselectionUTRA': 3 } ), ('sib7', { 't-ReselectionGERAN': 3 } ), ('sib8', { 'parameters1XRTT': { 'longCodeState1XRTT': (b'\x01#Eg\x89\x00', 42) } } ), ( 'sib9', { 'hnb-Name': b'4' } ), ('sib10', { 'messageIdentifier': (b'#4', 16), 'serialNumber': (b'\x124', 16), 'warningType': b'2\x12' } ), ( 'sib11', { 'messageIdentifier': (b'g\x88', 16), 'serialNumber': (b'T5', 16), 'warningMessageSegmentType': 'notLastSegment', 'warningMessageSegmentNumber': 19, 'warningMessageSegment': b'\x12' } ) ] } ) } ) ) } encoded = ( b'\x30\x82\x01\x93\xa0\x82\x01\x8f\xa0\x82\x01\x8b\xa0\x82\x01' b'\x87\xa0\x82\x01\x83\xa0\x82\x01\x7f\xa0\x82\x01\x7b\xa0\x81' b'\xdd\xa0\x0f\x80\x01\xff\xa2\x0a\x80\x01\x0f\x81\x01\x05\x82' b'\x02\x03\xf0\xa1\x81\xad\xa0\x26\xa0\x0e\x80\x01\x05\xa1\x09' b'\x80\x01\x06\x81\x01\x01\x82\x01\x00\xa1\x06\x80\x01\x00\x81' b'\x01\x09\xa2\x09\x80\x01\x05\x81\x01\x04\x82\x01\x05\x83\x01' b'\x08\xa1\x03\x80\x01\x00\xa2\x06\x80\x01\x03\x81\x01\x01\xa3' b'\x12\x80\x02\x03\x44\xa1\x0c\x80\x01\x21\x81\x01\x00\x82\x01' b'\x0a\x83\x01\x40\xa4\x06\x80\x01\xc4\x81\x01\x02\xa5\x1c\xa0' b'\x0c\x80\x01\x01\x81\x01\x00\x82\x01\x0a\x83\x01\x00\xa1\x0c' b'\x80\x01\xff\x81\x01\x16\x82\x01\x00\x83\x01\x05\xa6\x0d\x80' b'\x01\x00\x81\x01\x62\x82\x01\x04\x83\x02\x07\xff\xa7\x0b\xa1' b'\x09\x80\x01\x00\x81\x01\x04\x82\x01\xff\xa8\x1d\x80\x01\x82' b'\x81\x01\x00\x82\x01\x81\xa3\x0f\x80\x01\x00\x81\x01\x00\x82' b'\x01\x01\x83\x01\x00\x84\x01\x01\x84\x01\xff\x89\x01\x00\xa2' b'\x12\x80\x01\x00\x81\x01\x01\x82\x01\x01\x83\x01\x01\x84\x01' b'\x06\x85\x01\x01\xa3\x03\x82\x01\x03\x85\x01\x00\xa1\x37\xa0' b'\x1b\x80\x01\x00\xa1\x16\xa0\x0c\x80\x01\x03\x81\x01\x03\x82' b'\x01\x01\x83\x01\x10\xa1\x06\x80\x01\x00\x81\x01\x01\xa1\x06' b'\x81\x01\x07\x82\x01\x03\xa2\x10\x80\x01\xdf\x82\x01\x00\x84' b'\x01\x00\x85\x02\x06\x80\x86\x01\x04\xa2\x00\xa3\x1d\xa0\x1b' b'\x30\x19\x80\x01\x01\x81\x01\xd3\x83\x01\x00\x85\x01\x1f\x86' b'\x01\x1d\x87\x01\x00\x88\x01\xff\x8a\x02\x06\x00\xa4\x03\x82' b'\x01\x03\xa5\x03\x80\x01\x03\xa6\x0b\xa3\x09\x81\x07\x06\x01' b'\x23\x45\x67\x89\x00\xa7\x03\x80\x01\x34\xa8\x0e\x80\x03\x00' b'\x23\x34\x81\x03\x00\x12\x34\x82\x02\x32\x12\xa9\x13\x80\x03' b'\x00\x67\x88\x81\x03\x00\x54\x35\x82\x01\x00\x83\x01\x13\x84' b'\x01\x12' ) self.assert_encode_decode(rrc, 'BCCH-DL-SCH-Message', decoded, encoded) def test_rfc1157(self): rfc1157 = asn1tools.compile_files([ 'tests/files/ietf/rfc1155.asn', 'tests/files/ietf/rfc1157.asn' ]) # First message. decoded = { "version": 0, "community": b'public', "data": ( "set-request", { "request-id": 60, "error-status": 0, "error-index": 0, "variable-bindings": [ { "name": "1.3.6.1.4.1.253.8.51.10.2.1.7.10.14130101", "value": ( "simple", ( "string", (b'\x31\x37\x32\x2e\x33\x31' b'\x2e\x31\x39\x2e\x37\x33') ) ) }, { "name": "1.3.6.1.4.1.253.8.51.10.2.1.5.10.14130400", "value": ( "simple", ( "number", 2 ) ) }, { "name": "1.3.6.1.4.1.253.8.51.10.2.1.7.10.14130102", "value": ( "simple", ( "string", (b'\x32\x35\x35\x2e\x32\x35' b'\x35\x2e\x32\x35\x35\x2e' b'\x30') ) ) }, { "name": "1.3.6.1.4.1.253.8.51.10.2.1.7.10.14130104", "value": ( "simple", ( "string", (b'\x31\x37\x32\x2e\x33\x31' b'\x2e\x31\x39\x2e\x32') ) ) } ] } ) } encoded = ( b'0\x81\x9f\x02\x01\x00\x04\x06public\xa3\x81\x91\x02' b'\x01<\x02\x01\x00\x02\x01\x000\x81\x850"\x06\x12+\x06' b'\x01\x04\x01\x81}\x083\n\x02\x01\x07\n\x86\xde\xb75' b'\x04\x0c172.31.19.730\x17\x06\x12+\x06\x01\x04\x01\x81' b'}\x083\n\x02\x01\x05\n\x86\xde\xb9`\x02\x01\x020#\x06' b'\x12+\x06\x01\x04\x01\x81}\x083\n\x02\x01\x07\n\x86\xde' b'\xb76\x04\r255.255.255.00!\x06\x12+\x06\x01\x04\x01\x81' b'}\x083\n\x02\x01\x07\n\x86\xde\xb78\x04\x0b172.31.19.2' ) self.assert_encode_decode(rfc1157, 'Message', decoded, encoded) # Next message. decoded = { 'version': 1, 'community': b'community', 'data': ( 'set-request', { 'request-id': 1687059484, 'error-status': 0, 'error-index': 0, 'variable-bindings': [ { 'name': '1.3.6.1.999.1.1', 'value': ( 'simple', ( 'number', 1 ) ) }, { 'name': '1.3.6.1.999.2.1', 'value': ( 'simple', ( 'string', b'f00' ) ) }, { 'name': '1.3.6.1.999.3.1', 'value': ( 'application-wide', ( 'address', ( 'internet', b'\xc0\xa8\x01\x01' ) ) ) }, { 'name': '1.3.6.1.999.4.1', 'value': ( 'simple', ( 'object', '1.2.3.444.555' ) ) }, { 'name': '1.3.6.1.999.1.2', 'value': ( 'simple', ( 'number', 1 ) ) }, { 'name': '1.3.6.1.999.2.2', 'value': ( 'simple', ( 'string', b'f00' ) ) }, { 'name': '1.3.6.1.999.3.2', 'value': ( 'application-wide', ( 'address', ( 'internet', b'\xc0\xa8\x01\x01' ) ) ) }, { 'name': '1.3.6.1.999.4.2', 'value': ( 'simple', ( 'object', '1.2.3.444.555' ) ) }, { 'name': '1.3.6.1.999.1.3', 'value': ( 'simple', ( 'number', 1 ) ) }, { 'name': '1.3.6.1.999.2.3', 'value': ( 'simple', ( 'string', b'f00' ) ) }, { 'name': '1.3.6.1.999.3.3', 'value': ( 'application-wide', ( 'address', ( 'internet', b'\xc0\xa8\x01\x01' ) ) ) }, { 'name': '1.3.6.1.999.4.3', 'value': ( 'simple', ( 'object', '1.2.3.444.555' ) ) } ] } ) } encoded = ( b'\x30\x81\xe6\x02\x01\x01\x04\x09\x63\x6f\x6d\x6d\x75\x6e\x69\x74' b'\x79\xa3\x81\xd5\x02\x04\x64\x8e\x7c\x1c\x02\x01\x00\x02\x01\x00' b'\x30\x81\xc6\x30\x0c\x06\x07\x2b\x06\x01\x87\x67\x01\x01\x02\x01' b'\x01\x30\x0e\x06\x07\x2b\x06\x01\x87\x67\x02\x01\x04\x03\x66\x30' b'\x30\x30\x0f\x06\x07\x2b\x06\x01\x87\x67\x03\x01\x40\x04\xc0\xa8' b'\x01\x01\x30\x11\x06\x07\x2b\x06\x01\x87\x67\x04\x01\x06\x06\x2a' b'\x03\x83\x3c\x84\x2b\x30\x0c\x06\x07\x2b\x06\x01\x87\x67\x01\x02' b'\x02\x01\x01\x30\x0e\x06\x07\x2b\x06\x01\x87\x67\x02\x02\x04\x03' b'\x66\x30\x30\x30\x0f\x06\x07\x2b\x06\x01\x87\x67\x03\x02\x40\x04' b'\xc0\xa8\x01\x01\x30\x11\x06\x07\x2b\x06\x01\x87\x67\x04\x02\x06' b'\x06\x2a\x03\x83\x3c\x84\x2b\x30\x0c\x06\x07\x2b\x06\x01\x87\x67' b'\x01\x03\x02\x01\x01\x30\x0e\x06\x07\x2b\x06\x01\x87\x67\x02\x03' b'\x04\x03\x66\x30\x30\x30\x0f\x06\x07\x2b\x06\x01\x87\x67\x03\x03' b'\x40\x04\xc0\xa8\x01\x01\x30\x11\x06\x07\x2b\x06\x01\x87\x67\x04' b'\x03\x06\x06\x2a\x03\x83\x3c\x84\x2b' ) self.assert_encode_decode(rfc1157, 'Message', decoded, encoded) # Next message. decoded = { 'version': 1, 'community': b'community', 'data': ( 'set-request', { 'request-id': 1687059484, 'error-status': 0, 'error-index': 0, 'variable-bindings': [ { 'name': '1.3.6.1.999.1.1', 'value': ( 'simple', ( 'number', -1 ) ) }, { 'name': '1.3.6.1.999.2.1', 'value': ( 'simple', ( 'string', b'f00' ) ) }, { 'name': '1.3.6.1.999.4.1', 'value': ( 'simple', ( 'object', '1.2.3.444.555' ) ) }, { 'name': '1.3.6.1.999.4.1', 'value': ( 'simple', ( 'empty', None ) ) }, { 'name': '1.3.6.1.999.3.1', 'value': ( 'application-wide', ( 'address', ( 'internet', b'\xc0\xa8\x01\x01' ) ) ) }, { 'name': '1.3.6.1.999.3.1', 'value': ( 'application-wide', ( 'counter', 0 ) ) }, { 'name': '1.3.6.1.999.3.1', 'value': ( 'application-wide', ( 'gauge', 4294967295 ) ) }, { 'name': '1.3.6.1.999.3.1', 'value': ( 'application-wide', ( 'ticks', 88 ) ) }, { 'name': '1.3.6.1.999.3.1', 'value': ( 'application-wide', ( 'arbitrary', b'\x31\x32\x33' ) ) } ] } ) } encoded = ( b'\x30\x81\xad\x02\x01\x01\x04\x09\x63\x6f\x6d\x6d\x75\x6e\x69\x74' b'\x79\xa3\x81\x9c\x02\x04\x64\x8e\x7c\x1c\x02\x01\x00\x02\x01\x00' b'\x30\x81\x8d\x30\x0c\x06\x07\x2b\x06\x01\x87\x67\x01\x01\x02\x01' b'\xff\x30\x0e\x06\x07\x2b\x06\x01\x87\x67\x02\x01\x04\x03\x66\x30' b'\x30\x30\x11\x06\x07\x2b\x06\x01\x87\x67\x04\x01\x06\x06\x2a\x03' b'\x83\x3c\x84\x2b\x30\x0b\x06\x07\x2b\x06\x01\x87\x67\x04\x01\x05' b'\x00\x30\x0f\x06\x07\x2b\x06\x01\x87\x67\x03\x01\x40\x04\xc0\xa8' b'\x01\x01\x30\x0c\x06\x07\x2b\x06\x01\x87\x67\x03\x01\x41\x01\x00' b'\x30\x10\x06\x07\x2b\x06\x01\x87\x67\x03\x01\x42\x05\x00\xff\xff' b'\xff\xff\x30\x0c\x06\x07\x2b\x06\x01\x87\x67\x03\x01\x43\x01\x58' b'\x30\x0e\x06\x07\x2b\x06\x01\x87\x67\x03\x01\x44\x03\x31\x32\x33' ) self.assert_encode_decode(rfc1157, 'Message', decoded, encoded) # Next message with missing field 'data' -> 'set-request' -> # 'variable-bindings[0]' -> 'value' -> 'simple'. decoded = { 'version': 1, 'community': b'community', 'data': ( 'set-request', { 'request-id': 1687059484, 'error-status': 0, 'error-index': 0, 'variable-bindings': [ { 'name': '1.3.6.1.999.1.1', 'value': ('', ()) } ] } ) } with self.assertRaises(asn1tools.EncodeError) as cm: rfc1157.encode('Message', decoded) self.assertEqual( str(cm.exception), "Message.data.set-request.variable-bindings.value: Expected choice " "'application-wide' or 'simple', but got ''.") def test_performance(self): cmplx = asn1tools.compile_files('tests/files/complex.asn') decoded = { 'boolean': True, 'integer': -7, 'bit-string': (b'\x80', 3), 'octet-string': b'\x31\x32', 'null': None, 'object-identifier': '1.3.2', 'enumerated': 'one', 'sequence': {}, 'ia5-string': 'foo' } encoded = ( b'\x30\x1e\x01\x01\xff\x02\x01\xf9\x03\x02\x05\x80\x04\x02\x31\x32' b'\x05\x00\x06\x02\x2b\x02\x0a\x01\x01\x30\x00\x16\x03\x66\x6f\x6f' ) def encode(): cmplx.encode('AllUniversalTypes', decoded) def decode(): cmplx.decode('AllUniversalTypes', encoded) iterations = 1000 res = timeit.timeit(encode, number=iterations) ms_per_call = 1000 * res / iterations print('{} ms per encode call.'.format(round(ms_per_call, 3))) res = timeit.timeit(decode, number=iterations) ms_per_call = 1000 * res / iterations print('{} ms per decode call.'.format(round(ms_per_call, 3))) def test_rfc4511(self): rfc4511 = asn1tools.compile_dict(deepcopy(RFC4511)) # A search request message. decoded = { 'messageID': 2, 'protocolOp': ( 'searchRequest', { 'baseObject': b'', 'scope': 'wholeSubtree', 'derefAliases': 'neverDerefAliases', 'sizeLimit': 0, 'timeLimit': 0, 'typesOnly': False, 'filter': ( 'and', [ ( 'substrings', { 'type': b'\x63\x6e', 'substrings': [ ('any', b'\x66\x72\x65\x64') ] } ), ( 'equalityMatch', { 'attributeDesc': b'\x64\x6e', 'assertionValue': b'\x6a\x6f\x65' } ) ] ), 'attributes': [ ] } ) } encoded = ( b'\x30\x33\x02\x01\x02\x63\x2e\x04\x00\x0a\x01\x02\x0a\x01\x00\x02' b'\x01\x00\x02\x01\x00\x01\x01\x00\xa0\x19\xa4\x0c\x04\x02\x63\x6e' b'\x30\x06\x81\x04\x66\x72\x65\x64\xa3\x09\x04\x02\x64\x6e\x04\x03' b'\x6a\x6f\x65\x30\x00' ) self.assert_encode_decode(rfc4511, 'LDAPMessage', decoded, encoded) # A search request message with nested filters and controls # (copied from https://github.com/etingof/pyasn1/issues/116). decoded = { 'controls': [ { 'controlType': b'1.2.840.113556.1.4.319', 'controlValue': b'0\x06\x02\x02\x03\xe7\x04\x00', 'criticality': True }, { 'controlType': b'2.16.840.1.113730.3.4.2', 'criticality': False } ], 'messageID': 5, 'protocolOp': ( 'searchRequest', { 'attributes': [ b'postOfficeBox', b'givenName', b'sn', b'mail', b'homeDirectory', b'memberOf', b'objectGUID', b'postOfficeBox', b'extensionAttribute1', b'mail', b'sAMAccountName' ], 'baseObject': b'dc=arl,dc=local', 'derefAliases': 'derefAlways', 'filter': ( 'and', [ ( 'equalityMatch', { 'assertionValue': b'user', 'attributeDesc': b'objectClass' } ), ( 'or', [ ( 'equalityMatch', { 'assertionValue': b'01107ECBA2', 'attributeDesc': b'postOfficeBox' } ), ( 'equalityMatch', { 'assertionValue': b'01107ECBA2', 'attributeDesc': b'extensionAttribute1' } ) ] ) ] ), 'scope': 'wholeSubtree', 'sizeLimit': 0, 'timeLimit': 0, 'typesOnly': False } ) } encoded = ( b'\x30\x82\x01\x49\x02\x01\x05\x63\x81\xff\x04\x0f\x64\x63\x3d\x61' b'\x72\x6c\x2c\x64\x63\x3d\x6c\x6f\x63\x61\x6c\x0a\x01\x02\x0a\x01' b'\x03\x02\x01\x00\x02\x01\x00\x01\x01\x00\xa0\x57\xa3\x13\x04\x0b' b'\x6f\x62\x6a\x65\x63\x74\x43\x6c\x61\x73\x73\x04\x04\x75\x73\x65' b'\x72\xa1\x40\xa3\x1b\x04\x0d\x70\x6f\x73\x74\x4f\x66\x66\x69\x63' b'\x65\x42\x6f\x78\x04\x0a\x30\x31\x31\x30\x37\x45\x43\x42\x41\x32' b'\xa3\x21\x04\x13\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x41\x74\x74' b'\x72\x69\x62\x75\x74\x65\x31\x04\x0a\x30\x31\x31\x30\x37\x45\x43' b'\x42\x41\x32\x30\x81\x83\x04\x0d\x70\x6f\x73\x74\x4f\x66\x66\x69' b'\x63\x65\x42\x6f\x78\x04\x09\x67\x69\x76\x65\x6e\x4e\x61\x6d\x65' b'\x04\x02\x73\x6e\x04\x04\x6d\x61\x69\x6c\x04\x0d\x68\x6f\x6d\x65' b'\x44\x69\x72\x65\x63\x74\x6f\x72\x79\x04\x08\x6d\x65\x6d\x62\x65' b'\x72\x4f\x66\x04\x0a\x6f\x62\x6a\x65\x63\x74\x47\x55\x49\x44\x04' b'\x0d\x70\x6f\x73\x74\x4f\x66\x66\x69\x63\x65\x42\x6f\x78\x04\x13' b'\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x41\x74\x74\x72\x69\x62\x75' b'\x74\x65\x31\x04\x04\x6d\x61\x69\x6c\x04\x0e\x73\x41\x4d\x41\x63' b'\x63\x6f\x75\x6e\x74\x4e\x61\x6d\x65\xa0\x42\x30\x25\x04\x16\x31' b'\x2e\x32\x2e\x38\x34\x30\x2e\x31\x31\x33\x35\x35\x36\x2e\x31\x2e' b'\x34\x2e\x33\x31\x39\x01\x01\xff\x04\x08\x30\x06\x02\x02\x03\xe7' b'\x04\x00\x30\x19\x04\x17\x32\x2e\x31\x36\x2e\x38\x34\x30\x2e\x31' b'\x2e\x31\x31\x33\x37\x33\x30\x2e\x33\x2e\x34\x2e\x32' ) self.assert_encode_decode(rfc4511, 'LDAPMessage', decoded, encoded) # A search result done message. decoded = { 'messageID': 2, 'protocolOp': ( 'searchResDone', { 'resultCode': 'noSuchObject', 'matchedDN': b'', 'diagnosticMessage': b'' } ) } encoded = ( b'\x30\x0c\x02\x01\x02\x65\x07\x0a\x01\x20\x04\x00\x04\x00' ) self.assert_encode_decode(rfc4511, 'LDAPMessage', decoded, encoded) # A bind request message. decoded = { 'messageID': 1, 'protocolOp': ( 'bindRequest', { 'version': 3, 'name': b'uid=tesla,dc=example,dc=com', 'authentication': ( 'simple', b'password' ) } ) } encoded = ( b'\x30\x2f\x02\x01\x01\x60\x2a\x02\x01\x03\x04\x1b\x75\x69\x64\x3d' b'\x74\x65\x73\x6c\x61\x2c\x64\x63\x3d\x65\x78\x61\x6d\x70\x6c\x65' b'\x2c\x64\x63\x3d\x63\x6f\x6d\x80\x08\x70\x61\x73\x73\x77\x6f\x72' b'\x64' ) self.assert_encode_decode(rfc4511, 'LDAPMessage', decoded, encoded) # A bind response message. decoded = { 'messageID': 1, 'protocolOp': ( 'bindResponse', { 'resultCode': 'success', 'matchedDN': b'', 'diagnosticMessage': b'' } ) } encoded = ( b'\x30\x0c\x02\x01\x01\x61\x07\x0a\x01\x00\x04\x00\x04\x00' ) self.assert_encode_decode(rfc4511, 'LDAPMessage', decoded, encoded) def test_rfc5280(self): rfc5280 = asn1tools.compile_dict(deepcopy(RFC5280)) decoded = { 'tbsCertificate': { 'version': 'v1', 'serialNumber': 3578, 'signature': { 'algorithm': '1.2.840.113549.1.1.5', 'parameters': b'\x05\x00' }, 'issuer': ( 'rdnSequence', [ [{'type': '2.5.4.6', 'value': b'\x13\x02\x4a\x50'}], [{'type': '2.5.4.8', 'value': b'\x13\x05\x54\x6f\x6b\x79\x6f'}], [{'type': '2.5.4.7', 'value': b'\x13\x07\x43\x68\x75\x6f\x2d\x6b\x75'}], [{'type': '2.5.4.10', 'value': b'\x13\x08\x46\x72\x61\x6e\x6b\x34\x44\x44'}], [{'type': '2.5.4.11', 'value': (b'\x13\x0f\x57\x65\x62\x43\x65\x72\x74\x20\x53' b'\x75\x70\x70\x6f\x72\x74')}], [{'type': '2.5.4.3', 'value': (b'\x13\x0f\x46\x72\x61\x6e\x6b\x34\x44\x44\x20' b'\x57\x65\x62\x20\x43\x41')}], [{'type': '1.2.840.113549.1.9.1', 'value': (b'\x16\x14\x73\x75\x70\x70\x6f\x72\x74\x40\x66' b'\x72\x61\x6e\x6b\x34\x64\x64\x2e\x63\x6f\x6d')}] ] ), 'validity': { 'notAfter': ('utcTime', ut2dt('170821052654Z')), 'notBefore': ('utcTime', ut2dt('120822052654Z')) }, 'subject': ( 'rdnSequence', [ [{'type': '2.5.4.6', 'value': b'\x13\x02\x4a\x50'}], [{'type': '2.5.4.8', 'value': b'\x0c\x05\x54\x6f\x6b\x79\x6f'}], [{'type': '2.5.4.10', 'value': b'\x0c\x08\x46\x72\x61\x6e\x6b\x34\x44\x44'}], [{'type': '2.5.4.3', 'value': (b'\x0c\x0f\x77\x77\x77\x2e\x65\x78\x61\x6d\x70' b'\x6c\x65\x2e\x63\x6f\x6d')}] ] ), 'subjectPublicKeyInfo': { 'algorithm': { 'algorithm': '1.2.840.113549.1.1.1', 'parameters': b'\x05\x00' }, 'subjectPublicKey': (b'0H\x02A\x00\x9b\xfcf\x90y\x84B\xbb' b'\xab\x13\xfd+{\xf8\xde\x15\x12\xe5' b'\xf1\x93\xe3\x06\x8a{\xb8\xb1\xe1' b'\x9e&\xbb\x95\x01\xbf\xe70\xedd\x85' b'\x02\xdd\x15i\xa84\xb0\x06\xec?5<' b'\x1e\x1b+\x8f\xfa\x8f\x00\x1b\xdf' b'\x07\xc6\xacS\x07\x02\x03\x01\x00' b'\x01', 592) } }, 'signatureAlgorithm': { 'algorithm': '1.2.840.113549.1.1.5', 'parameters': b'\x05\x00' }, 'signature': (b'\x14\xb6L\xbb\x81y3\xe6q\xa4\xdaQo\xcb\x08\x1d' b'\x8d`\xec\xbc\x18\xc7sGY\xb1\xf2 H\xbba\xfa' b'\xfcM\xad\x89\x8d\xd1!\xeb\xd5\xd8\xe5\xba' b'\xd6\xa66\xfdtP\x83\xb6\x0f\xc7\x1d\xdf}\xe5.\x81' b'\x7fE\xe0\x9f\xe2>y\xee\xd701\xc7 r\xd9X.*\xfe\x12' b'Z4E\xa1\x19\x08|\x89G_J\x95\xbe#!JSr\xda*\x05/.\xc9' b'p\xf6[\xfa\xfd\xdf\xb41\xb2\xc1J\x9c\x06%C\xa1' b'\xe6\xb4\x1e\x7f\x86\x9b\x16@', 1024) } encoded = ( b'\x30\x82\x02\x12\x30\x82\x01\x7b\x02\x02\x0d\xfa\x30\x0d\x06\x09' b'\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05\x05\x00\x30\x81\x9b\x31\x0b' b'\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4a\x50\x31\x0e\x30\x0c\x06' b'\x03\x55\x04\x08\x13\x05\x54\x6f\x6b\x79\x6f\x31\x10\x30\x0e\x06' b'\x03\x55\x04\x07\x13\x07\x43\x68\x75\x6f\x2d\x6b\x75\x31\x11\x30' b'\x0f\x06\x03\x55\x04\x0a\x13\x08\x46\x72\x61\x6e\x6b\x34\x44\x44' b'\x31\x18\x30\x16\x06\x03\x55\x04\x0b\x13\x0f\x57\x65\x62\x43\x65' b'\x72\x74\x20\x53\x75\x70\x70\x6f\x72\x74\x31\x18\x30\x16\x06\x03' b'\x55\x04\x03\x13\x0f\x46\x72\x61\x6e\x6b\x34\x44\x44\x20\x57\x65' b'\x62\x20\x43\x41\x31\x23\x30\x21\x06\x09\x2a\x86\x48\x86\xf7\x0d' b'\x01\x09\x01\x16\x14\x73\x75\x70\x70\x6f\x72\x74\x40\x66\x72\x61' b'\x6e\x6b\x34\x64\x64\x2e\x63\x6f\x6d\x30\x1e\x17\x0d\x31\x32\x30' b'\x38\x32\x32\x30\x35\x32\x36\x35\x34\x5a\x17\x0d\x31\x37\x30\x38' b'\x32\x31\x30\x35\x32\x36\x35\x34\x5a\x30\x4a\x31\x0b\x30\x09\x06' b'\x03\x55\x04\x06\x13\x02\x4a\x50\x31\x0e\x30\x0c\x06\x03\x55\x04' b'\x08\x0c\x05\x54\x6f\x6b\x79\x6f\x31\x11\x30\x0f\x06\x03\x55\x04' b'\x0a\x0c\x08\x46\x72\x61\x6e\x6b\x34\x44\x44\x31\x18\x30\x16\x06' b'\x03\x55\x04\x03\x0c\x0f\x77\x77\x77\x2e\x65\x78\x61\x6d\x70\x6c' b'\x65\x2e\x63\x6f\x6d\x30\x5c\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7' b'\x0d\x01\x01\x01\x05\x00\x03\x4b\x00\x30\x48\x02\x41\x00\x9b\xfc' b'\x66\x90\x79\x84\x42\xbb\xab\x13\xfd\x2b\x7b\xf8\xde\x15\x12\xe5' b'\xf1\x93\xe3\x06\x8a\x7b\xb8\xb1\xe1\x9e\x26\xbb\x95\x01\xbf\xe7' b'\x30\xed\x64\x85\x02\xdd\x15\x69\xa8\x34\xb0\x06\xec\x3f\x35\x3c' b'\x1e\x1b\x2b\x8f\xfa\x8f\x00\x1b\xdf\x07\xc6\xac\x53\x07\x02\x03' b'\x01\x00\x01\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05' b'\x05\x00\x03\x81\x81\x00\x14\xb6\x4c\xbb\x81\x79\x33\xe6\x71\xa4' b'\xda\x51\x6f\xcb\x08\x1d\x8d\x60\xec\xbc\x18\xc7\x73\x47\x59\xb1' b'\xf2\x20\x48\xbb\x61\xfa\xfc\x4d\xad\x89\x8d\xd1\x21\xeb\xd5\xd8' b'\xe5\xba\xd6\xa6\x36\xfd\x74\x50\x83\xb6\x0f\xc7\x1d\xdf\x7d\xe5' b'\x2e\x81\x7f\x45\xe0\x9f\xe2\x3e\x79\xee\xd7\x30\x31\xc7\x20\x72' b'\xd9\x58\x2e\x2a\xfe\x12\x5a\x34\x45\xa1\x19\x08\x7c\x89\x47\x5f' b'\x4a\x95\xbe\x23\x21\x4a\x53\x72\xda\x2a\x05\x2f\x2e\xc9\x70\xf6' b'\x5b\xfa\xfd\xdf\xb4\x31\xb2\xc1\x4a\x9c\x06\x25\x43\xa1\xe6\xb4' b'\x1e\x7f\x86\x9b\x16\x40' ) self.assert_encode_decode(rfc5280, 'Certificate', decoded, encoded) def test_rfc5280_modified(self): any_defined_by_choices = { ('PKIX1Explicit88', 'AlgorithmIdentifier', 'parameters'): { '1.2.840.113549.1.1.1': 'NULL', '1.2.840.113549.1.1.5': 'NULL' }, ('PKIX1Explicit88', 'AttributeValue'): { '2.5.4.3': 'DirectoryString', '2.5.4.6': 'PrintableString', '2.5.4.7': 'PrintableString', '2.5.4.8': 'DirectoryString', '2.5.4.10': 'DirectoryString', '2.5.4.11': 'PrintableString', '1.2.840.113549.1.9.1': 'IA5String' } } rfc5280 = asn1tools.compile_dict( deepcopy(RFC5280_MODIFIED), any_defined_by_choices=any_defined_by_choices) decoded = { 'tbsCertificate': { 'version': 'v1', 'serialNumber': 3578, 'signature': { 'algorithm': '1.2.840.113549.1.1.5', 'parameters': None }, 'issuer': ( 'rdnSequence', [ [{'type': '2.5.4.6', 'value': 'JP'}], [{'type': '2.5.4.8', 'value': ('printableString', 'Tokyo')}], [{'type': '2.5.4.7', 'value': 'Chuo-ku'}], [{'type': '2.5.4.10', 'value': ('printableString', 'Frank4DD')}], [{'type': '2.5.4.11', 'value': 'WebCert Support'}], [{'type': '2.5.4.3', 'value': ('printableString', 'Frank4DD Web CA')}], [{'type': '1.2.840.113549.1.9.1', 'value': 'support@frank4dd.com'}] ] ), 'validity': { 'notAfter': ('utcTime', ut2dt('170821052654Z')), 'notBefore': ('utcTime', ut2dt('120822052654Z')) }, 'subject': ( 'rdnSequence', [ [{'type': '2.5.4.6', 'value': 'JP'}], [{'type': '2.5.4.8', 'value': ('utf8String', 'Tokyo')}], [{'type': '2.5.4.10', 'value': ('utf8String', 'Frank4DD')}], [{'type': '2.5.4.3', 'value': ('utf8String', 'www.example.com')}] ] ), 'subjectPublicKeyInfo': { 'algorithm': { 'algorithm': '1.2.840.113549.1.1.1', 'parameters': None }, 'subjectPublicKey': (b'0H\x02A\x00\x9b\xfcf\x90y\x84B\xbb' b'\xab\x13\xfd+{\xf8\xde\x15\x12\xe5' b'\xf1\x93\xe3\x06\x8a{\xb8\xb1\xe1' b'\x9e&\xbb\x95\x01\xbf\xe70\xedd\x85' b'\x02\xdd\x15i\xa84\xb0\x06\xec?5<' b'\x1e\x1b+\x8f\xfa\x8f\x00\x1b\xdf' b'\x07\xc6\xacS\x07\x02\x03\x01\x00' b'\x01', 592) } }, 'signatureAlgorithm': { 'algorithm': '1.2.840.113549.1.1.5', 'parameters': None }, 'signature': (b'\x14\xb6L\xbb\x81y3\xe6q\xa4\xdaQo\xcb\x08\x1d' b'\x8d`\xec\xbc\x18\xc7sGY\xb1\xf2 H\xbba\xfa' b'\xfcM\xad\x89\x8d\xd1!\xeb\xd5\xd8\xe5\xba' b'\xd6\xa66\xfdtP\x83\xb6\x0f\xc7\x1d\xdf}\xe5.\x81' b'\x7fE\xe0\x9f\xe2>y\xee\xd701\xc7 r\xd9X.*\xfe\x12' b'Z4E\xa1\x19\x08|\x89G_J\x95\xbe#!JSr\xda*\x05/.\xc9' b'p\xf6[\xfa\xfd\xdf\xb41\xb2\xc1J\x9c\x06%C\xa1' b'\xe6\xb4\x1e\x7f\x86\x9b\x16@', 1024) } encoded = ( b'\x30\x82\x02\x12\x30\x82\x01\x7b\x02\x02\x0d\xfa\x30\x0d\x06\x09' b'\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05\x05\x00\x30\x81\x9b\x31\x0b' b'\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4a\x50\x31\x0e\x30\x0c\x06' b'\x03\x55\x04\x08\x13\x05\x54\x6f\x6b\x79\x6f\x31\x10\x30\x0e\x06' b'\x03\x55\x04\x07\x13\x07\x43\x68\x75\x6f\x2d\x6b\x75\x31\x11\x30' b'\x0f\x06\x03\x55\x04\x0a\x13\x08\x46\x72\x61\x6e\x6b\x34\x44\x44' b'\x31\x18\x30\x16\x06\x03\x55\x04\x0b\x13\x0f\x57\x65\x62\x43\x65' b'\x72\x74\x20\x53\x75\x70\x70\x6f\x72\x74\x31\x18\x30\x16\x06\x03' b'\x55\x04\x03\x13\x0f\x46\x72\x61\x6e\x6b\x34\x44\x44\x20\x57\x65' b'\x62\x20\x43\x41\x31\x23\x30\x21\x06\x09\x2a\x86\x48\x86\xf7\x0d' b'\x01\x09\x01\x16\x14\x73\x75\x70\x70\x6f\x72\x74\x40\x66\x72\x61' b'\x6e\x6b\x34\x64\x64\x2e\x63\x6f\x6d\x30\x1e\x17\x0d\x31\x32\x30' b'\x38\x32\x32\x30\x35\x32\x36\x35\x34\x5a\x17\x0d\x31\x37\x30\x38' b'\x32\x31\x30\x35\x32\x36\x35\x34\x5a\x30\x4a\x31\x0b\x30\x09\x06' b'\x03\x55\x04\x06\x13\x02\x4a\x50\x31\x0e\x30\x0c\x06\x03\x55\x04' b'\x08\x0c\x05\x54\x6f\x6b\x79\x6f\x31\x11\x30\x0f\x06\x03\x55\x04' b'\x0a\x0c\x08\x46\x72\x61\x6e\x6b\x34\x44\x44\x31\x18\x30\x16\x06' b'\x03\x55\x04\x03\x0c\x0f\x77\x77\x77\x2e\x65\x78\x61\x6d\x70\x6c' b'\x65\x2e\x63\x6f\x6d\x30\x5c\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7' b'\x0d\x01\x01\x01\x05\x00\x03\x4b\x00\x30\x48\x02\x41\x00\x9b\xfc' b'\x66\x90\x79\x84\x42\xbb\xab\x13\xfd\x2b\x7b\xf8\xde\x15\x12\xe5' b'\xf1\x93\xe3\x06\x8a\x7b\xb8\xb1\xe1\x9e\x26\xbb\x95\x01\xbf\xe7' b'\x30\xed\x64\x85\x02\xdd\x15\x69\xa8\x34\xb0\x06\xec\x3f\x35\x3c' b'\x1e\x1b\x2b\x8f\xfa\x8f\x00\x1b\xdf\x07\xc6\xac\x53\x07\x02\x03' b'\x01\x00\x01\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05' b'\x05\x00\x03\x81\x81\x00\x14\xb6\x4c\xbb\x81\x79\x33\xe6\x71\xa4' b'\xda\x51\x6f\xcb\x08\x1d\x8d\x60\xec\xbc\x18\xc7\x73\x47\x59\xb1' b'\xf2\x20\x48\xbb\x61\xfa\xfc\x4d\xad\x89\x8d\xd1\x21\xeb\xd5\xd8' b'\xe5\xba\xd6\xa6\x36\xfd\x74\x50\x83\xb6\x0f\xc7\x1d\xdf\x7d\xe5' b'\x2e\x81\x7f\x45\xe0\x9f\xe2\x3e\x79\xee\xd7\x30\x31\xc7\x20\x72' b'\xd9\x58\x2e\x2a\xfe\x12\x5a\x34\x45\xa1\x19\x08\x7c\x89\x47\x5f' b'\x4a\x95\xbe\x23\x21\x4a\x53\x72\xda\x2a\x05\x2f\x2e\xc9\x70\xf6' b'\x5b\xfa\xfd\xdf\xb4\x31\xb2\xc1\x4a\x9c\x06\x25\x43\xa1\xe6\xb4' b'\x1e\x7f\x86\x9b\x16\x40' ) self.assert_encode_decode(rfc5280, 'Certificate', decoded, encoded) # Explicit tagging. decoded = ( 'psap-address', { 'pSelector': b'\x12', 'nAddresses': [ b'\x34' ] } ) encoded = b'\xa0\x0c\xa0\x03\x04\x01\x12\xa3\x05\x31\x03\x04\x01\x34' self.assert_encode_decode(rfc5280, 'ExtendedNetworkAddress', decoded, encoded) def test_rfc5280_errors(self): rfc5280 = asn1tools.compile_dict(deepcopy(RFC5280)) # Empty data. encoded = b'' with self.assertRaises(asn1tools.DecodeError) as cm: rfc5280.decode('Certificate', encoded) self.assertEqual( str(cm.exception), "Certificate: Ran out of data when reading tag (At offset: 0)") # Only tag and length, no contents. encoded = b'\x30\x81\x9f' with self.assertRaises(asn1tools.DecodeError) as cm: rfc5280.decode('Certificate', encoded) self.assertEqual( str(cm.exception), 'Certificate: Expected at least 159 contents byte(s), but got 0. (At offset: 3)') # Unexpected tag 'ff'. encoded = b'\xff\x01\x00' with self.assertRaises(asn1tools.DecodeError) as cm: rfc5280.decode('Certificate', encoded) self.assertEqual( str(cm.exception), "Certificate: Expected SEQUENCE(Certificate) with tag '30', but got 'ff'. (At offset: 0)") # Unexpected type '31' embedded in the data. encoded = bytearray( b'\x30\x82\x02\x12\x30\x82\x01\x7b\x02\x02\x0d\xfa\x30\x0d\x06\x09' b'\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05\x05\x00\x30\x81\x9b\x31\x0b' b'\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4a\x50\x31\x0e\x30\x0c\x06' b'\x03\x55\x04\x08\x13\x05\x54\x6f\x6b\x79\x6f\x31\x10\x30\x0e\x06' b'\x03\x55\x04\x07\x13\x07\x43\x68\x75\x6f\x2d\x6b\x75\x31\x11\x30' b'\x0f\x06\x03\x55\x04\x0a\x13\x08\x46\x72\x61\x6e\x6b\x34\x44\x44' b'\x31\x18\x30\x16\x06\x03\x55\x04\x0b\x13\x0f\x57\x65\x62\x43\x65' b'\x72\x74\x20\x53\x75\x70\x70\x6f\x72\x74\x31\x18\x30\x16\x06\x03' b'\x55\x04\x03\x13\x0f\x46\x72\x61\x6e\x6b\x34\x44\x44\x20\x57\x65' b'\x62\x20\x43\x41\x31\x23' b'\x31' b'\x21\x06\x09\x2a\x86\x48\x86\xf7\x0d' b'\x01\x09\x01\x16\x14\x73\x75\x70\x70\x6f\x72\x74\x40\x66\x72\x61' b'\x6e\x6b\x34\x64\x64\x2e\x63\x6f\x6d\x30\x1e\x17\x0d\x31\x32\x30' b'\x38\x32\x32\x30\x35\x32\x36\x35\x34\x5a\x17\x0d\x31\x37\x30\x38' b'\x32\x31\x30\x35\x32\x36\x35\x34\x5a\x30\x4a\x31\x0b\x30\x09\x06' b'\x03\x55\x04\x06\x13\x02\x4a\x50\x31\x0e\x30\x0c\x06\x03\x55\x04' b'\x08\x0c\x05\x54\x6f\x6b\x79\x6f\x31\x11\x30\x0f\x06\x03\x55\x04' b'\x0a\x0c\x08\x46\x72\x61\x6e\x6b\x34\x44\x44\x31\x18\x30\x16\x06' b'\x03\x55\x04\x03\x0c\x0f\x77\x77\x77\x2e\x65\x78\x61\x6d\x70\x6c' b'\x65\x2e\x63\x6f\x6d\x30\x5c\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7' b'\x0d\x01\x01\x01\x05\x00\x03\x4b\x00\x30\x48\x02\x41\x00\x9b\xfc' b'\x66\x90\x79\x84\x42\xbb\xab\x13\xfd\x2b\x7b\xf8\xde\x15\x12\xe5' b'\xf1\x93\xe3\x06\x8a\x7b\xb8\xb1\xe1\x9e\x26\xbb\x95\x01\xbf\xe7' b'\x30\xed\x64\x85\x02\xdd\x15\x69\xa8\x34\xb0\x06\xec\x3f\x35\x3c' b'\x1e\x1b\x2b\x8f\xfa\x8f\x00\x1b\xdf\x07\xc6\xac\x53\x07\x02\x03' b'\x01\x00\x01\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05' b'\x05\x00\x03\x81\x81\x00\x14\xb6\x4c\xbb\x81\x79\x33\xe6\x71\xa4' b'\xda\x51\x6f\xcb\x08\x1d\x8d\x60\xec\xbc\x18\xc7\x73\x47\x59\xb1' b'\xf2\x20\x48\xbb\x61\xfa\xfc\x4d\xad\x89\x8d\xd1\x21\xeb\xd5\xd8' b'\xe5\xba\xd6\xa6\x36\xfd\x74\x50\x83\xb6\x0f\xc7\x1d\xdf\x7d\xe5' b'\x2e\x81\x7f\x45\xe0\x9f\xe2\x3e\x79\xee\xd7\x30\x31\xc7\x20\x72' b'\xd9\x58\x2e\x2a\xfe\x12\x5a\x34\x45\xa1\x19\x08\x7c\x89\x47\x5f' b'\x4a\x95\xbe\x23\x21\x4a\x53\x72\xda\x2a\x05\x2f\x2e\xc9\x70\xf6' b'\x5b\xfa\xfd\xdf\xb4\x31\xb2\xc1\x4a\x9c\x06\x25\x43\xa1\xe6\xb4' b'\x1e\x7f\x86\x9b\x16\x40' ) self.assertEqual(encoded[150], 49) with self.assertRaises(asn1tools.DecodeError) as cm: rfc5280.decode('Certificate', encoded) self.assertEqual(str(cm.exception), "Certificate.tbsCertificate.issuer.rdnSequence: Expected AttributeTypeAndValue " "with tag '30', but got '31'. (At offset: 150)") def test_all_types(self): all_types = asn1tools.compile_files('tests/files/all_types.asn') datas = [ ('Octetstring', b'\x00', b'\x04\x01\x00'), ('Octetstring', 127 * b'\x55', b'\x04\x7f' + 127 * b'\x55'), ('Octetstring', 128 * b'\xaa', b'\x04\x81\x80' + 128 * b'\xaa'), ('Null', None, b'\x05\x00'), ('Objectidentifier', '1.2', b'\x06\x01\x2a'), ('Enumerated', 'one', b'\x0a\x01\x01'), ('Utf8string', 'foo', b'\x0c\x03foo'), ('Sequence', {}, b'\x30\x00'), ('Sequence2', {'a': 0}, b'\x30\x00'), ('Sequence2', {'a': 1}, b'\x30\x03\x02\x01\x01'), ('Sequence13', {'a': [1]}, b'\x30\x05\xa0\x03\x02\x01\x01'), ('Sequence13', {'b': [1]}, b'\x30\x05\xa1\x03\x02\x01\x01'), ('Set', {}, b'\x31\x00'), ('Set2', {'a': 1}, b'\x31\x00'), ('Set2', {'a': 2}, b'\x31\x03\x02\x01\x02'), ('Numericstring', '123', b'\x12\x03123'), ('Printablestring', 'foo', b'\x13\x03foo'), ('Ia5string', 'bar', b'\x16\x03bar'), ('Visiblestring', 'bar', b'\x1a\x03bar'), ('Generalstring', 'bar', b'\x1b\x03bar'), ('SequenceOf', [], b'\x30\x00'), ('SetOf', [], b'\x31\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(all_types, type_name, decoded, encoded) all_types.encode('Sequence12', {'a': [{'a': []}]}) # ToDo: Should return {'a': [{'a': []}]} self.assertEqual( all_types.decode('Sequence12', b'\x30\x04\x30\x02\x30\x00'), {'a': [{}]}) def test_all_types_automatic_tags(self): all_types = asn1tools.compile_files( 'tests/files/all_types_automatic_tags.asn') datas = [ ('Sequence3', {'a': 1, 'c': 2,'d': True}, b'\x30\x09\x80\x01\x01\x82\x01\x02\x83\x01\xff'), ] for type_name, decoded, encoded in datas: self.assert_encode_decode(all_types, type_name, decoded, encoded) def test_module_tags_explicit(self): all_types = asn1tools.compile_files('tests/files/module_tags_explicit.asn') datas = [ ('CBA', 1, b'\xa5\x07\xa4\x05\xa3\x03\x02\x01\x01'), ('CBIAI', 1, b'\xa5\x03\x84\x01\x01'), ('CIBIA', 1, b'\xa5\x03\x02\x01\x01'), ('CIBIAI', 1, b'\x85\x01\x01'), ('S2', {'a': 1, 'b': {'a': 3}, 'c': ('a', True)}, b'\x30\x0d\x02\x01\x01\xa2\x05\x30\x03\x02\x01\x03\x01\x01\xff'), ('S3', {'a': 1, 'b': {'a': 3}, 'c': ('a', True)}, b'\x30\x0f\x02\x01\x01\xa2\x05\x30\x03\x02\x01\x03\xa3\x03\x01' b'\x01\xff'), ('S4', {'a': 1, 'b': ('a', ('a', 2)), 'c': {'a': 3}, 'd': ('a', True)}, b'\x30\x16\x02\x01\x01\xa1\x07\xa0\x05\xa0\x03\x02\x01\x02\xa2' b'\x05\x30\x03\x02\x01\x03\x01\x01\xff'), ('Type1', 'Jones', b'\x1a\x05\x4a\x6f\x6e\x65\x73'), ('Type2', 'Jones', b'\x43\x05\x4a\x6f\x6e\x65\x73'), ('Type3', 'Jones', b'\xa2\x07\x43\x05\x4a\x6f\x6e\x65\x73'), ('Type4', 'Jones', b'\x67\x07\x43\x05\x4a\x6f\x6e\x65\x73'), ('Type5', 'Jones', b'\x82\x05\x4a\x6f\x6e\x65\x73') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(all_types, type_name, decoded, encoded) def test_module_tags_implicit(self): all_types = asn1tools.compile_files('tests/files/module_tags_implicit.asn') datas = [ ('CBA', 1, b'\x85\x01\x01'), ('CBIAI', 1, b'\x85\x01\x01'), ('CIBIA', 1, b'\x85\x01\x01'), ('CIBIAI', 1, b'\x85\x01\x01'), ('S2', {'a': 1, 'b': {'a': 3}, 'c': ('a', True)}, b'\x30\x0b\x02\x01\x01\xa2\x03\x02\x01\x03\x01\x01\xff'), ('S3', {'a': 1, 'b': {'a': 3}, 'c': ('a', True)}, b'\x30\x0d\x02\x01\x01\xa2\x03\x02\x01\x03\xa3\x03\x01\x01\xff'), ('S4', {'a': 1, 'b': ('a', ('a', 2)), 'c': {'a': 3}, 'd': ('a', True)}, b'\x30\x12\x02\x01\x01\xa1\x05\xa0\x03\x80\x01\x02\xa2\x03\x02' b'\x01\x03\x01\x01\xff') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(all_types, type_name, decoded, encoded) def test_module_tags_automatic(self): all_types = asn1tools.compile_files('tests/files/module_tags_automatic.asn') datas = [ ('CBA', 1, b'\x85\x01\x01'), ('CBIAI', 1, b'\x85\x01\x01'), ('CIBIA', 1, b'\x85\x01\x01'), ('CIBIAI', 1, b'\x85\x01\x01'), ('S2', {'a': 1, 'b': {'a': 3}, 'c': ('a', True)}, b'\x30\x0b\x02\x01\x01\xa2\x03\x80\x01\x03\x80\x01\xff'), ('S3', {'a': 1, 'b': {'a': 3}, 'c': ('a', True)}, b'\x30\x0d\x02\x01\x01\xa2\x03\x80\x01\x03\xa3\x03\x80\x01\xff'), ('S4', {'a': 1, 'b': ('a', ('a', 2)), 'c': {'a': 3}, 'd': ('a', True)}, b'\x30\x12\x02\x01\x01\xa1\x05\xa0\x03\x80\x01\x02\xa2\x03\x80' b'\x01\x03\x80\x01\xff' ) ] for type_name, decoded, encoded in datas: self.assert_encode_decode(all_types, type_name, decoded, encoded) def test_decode_all_types_errors(self): all_types = asn1tools.compile_files('tests/files/all_types.asn') # BOOLEAN. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Boolean', b'\xff') self.assertEqual( str(cm.exception), "Boolean: Expected BOOLEAN(Boolean) with tag '01', but got 'ff'. (At offset: 0)") with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Boolean', b'\x01\x02\x01\x01') self.assertEqual( str(cm.exception), "Boolean: Expected BOOLEAN contents length 1, but got 2. (At offset: 1)") # INTEGER. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Integer', b'\xfe') self.assertEqual( str(cm.exception), "Integer: Expected INTEGER(Integer) with tag '02', but got 'fe'. (At offset: 0)") # BIT STRING. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Bitstring', b'\xfd') self.assertEqual( str(cm.exception), "Bitstring: Expected BIT STRING(Bitstring) with tag '03', but got 'fd'. (At offset: 0)") # OCTET STRING. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Octetstring', b'\xfc') self.assertEqual( str(cm.exception), "Octetstring: Expected OCTET STRING(Octetstring) with tag '04', but got 'fc'. (At offset: 0)") # NULL. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Null', b'\xfb') self.assertEqual( str(cm.exception), "Null: Expected NULL(Null) with tag '05', but got 'fb'. (At offset: 0)") # OBJECT IDENTIFIER. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Objectidentifier', b'\xfa') self.assertEqual( str(cm.exception), "Objectidentifier: Expected OBJECT IDENTIFIER(Objectidentifier) with tag '06', " "but got 'fa'. (At offset: 0)") # ENUMERATED. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Enumerated', b'\xf9') self.assertEqual( str(cm.exception), "Enumerated: Expected ENUMERATED(Enumerated) with tag '0a', but got 'f9'. (At offset: 0)") # UTF8String. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Utf8string', b'\xf8') self.assertEqual( str(cm.exception), "Utf8string: Expected UTF8String(Utf8string) with tag '0c', but got 'f8'. (At offset: 0)") # SEQUENCE. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Sequence', b'\xf7') self.assertEqual( str(cm.exception), "Sequence: Expected SEQUENCE(Sequence) with tag '30', but got 'f7'. (At offset: 0)") # SET. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Set', b'\xf6') self.assertEqual(str(cm.exception), "Set: Expected SET(Set) with tag '31', but got 'f6'. (At offset: 0)") # NumericString. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Numericstring', b'\xf5') self.assertEqual(str(cm.exception), "Numericstring: Expected NumericString(Numericstring) with tag '12', " "but got 'f5'. (At offset: 0)") # PrintableString. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Printablestring', b'\xf4') self.assertEqual(str(cm.exception), "Printablestring: Expected PrintableString(Printablestring) with tag '13', " "but got 'f4'. (At offset: 0)") # IA5String. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Ia5string', b'\xf3') self.assertEqual( str(cm.exception), "Ia5string: Expected IA5String(Ia5string) with tag '16', but got 'f3'. (At offset: 0)") # UniversalString. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Universalstring', b'\xf2') self.assertEqual( str(cm.exception), "Universalstring: Expected UniversalString(Universalstring) with tag '1c', but got 'f2'. (At offset: 0)") # VisibleString. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Visiblestring', b'\xf1') self.assertEqual( str(cm.exception), "Visiblestring: Expected VisibleString(Visiblestring) with tag '1a', but got 'f1'. (At offset: 0)") # GeneralString. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Generalstring', b'\xf1') self.assertEqual( str(cm.exception), "Generalstring: Expected GeneralString(Generalstring) with tag '1b', but got 'f1'. (At offset: 0)") # BMPString. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Bmpstring', b'\xf0') self.assertEqual( str(cm.exception), "Bmpstring: Expected BMPString(Bmpstring) with tag '1e', but got 'f0'. (At offset: 0)") # TeletexString. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Teletexstring', b'\xef') self.assertEqual( str(cm.exception), "Teletexstring: Expected TeletexString(Teletexstring) with tag '14', but got 'ef'. (At offset: 0)") # UTCTime. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('Utctime', b'\xee') self.assertEqual( str(cm.exception), "Utctime: Expected UTCTime(Utctime) with tag '17', but got 'ee'. (At offset: 0)") # SequenceOf. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('SequenceOf', b'\xed') self.assertEqual( str(cm.exception), "SequenceOf: Expected SEQUENCE OF(SequenceOf) with tag '30', but got 'ed'. (At offset: 0)") # SetOf. with self.assertRaises(asn1tools.DecodeError) as cm: all_types.decode('SetOf', b'\xec') self.assertEqual( str(cm.exception), "SetOf: Expected SET OF(SetOf) with tag '31', but got 'ec'. (At offset: 0)") def test_repr_all_types(self): all_types = asn1tools.compile_files('tests/files/all_types.asn') self.assertEqual(repr(all_types.types['Boolean']), 'Boolean(Boolean)') self.assertEqual(repr(all_types.types['Integer']), 'Integer(Integer)') self.assertEqual(repr(all_types.types['Real']), 'Real(Real)') self.assertEqual(repr(all_types.types['Bitstring']), 'BitString(Bitstring)') self.assertEqual(repr(all_types.types['Octetstring']), 'OctetString(Octetstring)') self.assertEqual(repr(all_types.types['Null']), 'Null(Null)') self.assertEqual(repr(all_types.types['Objectidentifier']), 'ObjectIdentifier(Objectidentifier)') self.assertEqual(repr(all_types.types['Enumerated']), 'Enumerated(Enumerated)') self.assertEqual(repr(all_types.types['Utf8string']), 'UTF8String(Utf8string)') self.assertEqual(repr(all_types.types['Sequence']), 'Sequence(Sequence, [])') self.assertEqual(repr(all_types.types['Set']), 'Set(Set, [])') self.assertEqual(repr(all_types.types['Sequence2']), 'Sequence(Sequence2, [Integer(a)])') self.assertEqual(repr(all_types.types['Set2']), 'Set(Set2, [Integer(a)])') self.assertEqual(repr(all_types.types['Numericstring']), 'NumericString(Numericstring)') self.assertEqual(repr(all_types.types['Printablestring']), 'PrintableString(Printablestring)') self.assertEqual(repr(all_types.types['Ia5string']), 'IA5String(Ia5string)') self.assertEqual(repr(all_types.types['Universalstring']), 'UniversalString(Universalstring)') self.assertEqual(repr(all_types.types['Visiblestring']), 'VisibleString(Visiblestring)') self.assertEqual(repr(all_types.types['Generalstring']), 'GeneralString(Generalstring)') self.assertEqual(repr(all_types.types['Bmpstring']), 'BMPString(Bmpstring)') self.assertEqual(repr(all_types.types['Teletexstring']), 'TeletexString(Teletexstring)') self.assertEqual(repr(all_types.types['Graphicstring']), 'GraphicString(Graphicstring)') self.assertEqual(repr(all_types.types['Utctime']), 'UTCTime(Utctime)') self.assertEqual(repr(all_types.types['SequenceOf']), 'SequenceOf(SequenceOf, Integer())') self.assertEqual(repr(all_types.types['SetOf']), 'SetOf(SetOf, Integer())') self.assertEqual(repr(all_types.types['GeneralizedTime1']), 'GeneralizedTime(GeneralizedTime1)') self.assertEqual(repr(all_types.types['Choice']), 'Choice(Choice, [Integer(a)])') self.assertEqual(repr(all_types.types['Any']), 'Any(Any)') self.assertEqual(repr(all_types.types['Sequence12']), 'Sequence(Sequence12, [SequenceOf(a, Recursive(Sequence12))])') def test_utf8_string_explicit_tags(self): """Test explicit tags on UTC time. """ spec = 'Foo DEFINITIONS ::= BEGIN Foo ::= [2] UTF8String END' foo = asn1tools.compile_string(spec) self.assert_encode_decode(foo, 'Foo', 'foo', b'\xa2\x05\x0c\x03foo') def test_nested_explicit_tags(self): """Test nested explicit tags. Based on https://github.com/wbond/asn1crypto/issues/63 by tiran. """ spec = """ TESTCASE DEFINITIONS EXPLICIT TAGS ::= BEGIN INNERSEQ ::= SEQUENCE { innernumber [21] INTEGER } INNER ::= [APPLICATION 20] INNERSEQ OUTERSEQ ::= SEQUENCE { outernumber [11] INTEGER, inner [12] INNER } OUTER ::= [APPLICATION 10] OUTERSEQ END """ decoded = { 'outernumber': 23, 'inner': { 'innernumber': 42 } } encoded = ( b'\x6a\x12\x30\x10\xab\x03\x02\x01\x17\xac\x09\x74\x07\x30' b'\x05\xb5\x03\x02\x01\x2a' ) testcase = asn1tools.compile_string(spec) self.assert_encode_decode(testcase, 'OUTER', decoded, encoded) def test_zforce(self): """ """ zforce = asn1tools.compile_dict(deepcopy(ZFORCE)) # PDU 1. decoded = ( 'request', { 'deviceAddress': b'\x00\x01' } ) encoded = b'\xee\x04\x40\x02\x00\x01' self.assert_encode_decode(zforce, 'ProtocolMessage', decoded, encoded) # PDU 2. decoded = ( 'request', { 'enable': { 'enable': 1 } } ) encoded = b'\xee\x05\x65\x03\x81\x01\x01' self.assert_encode_decode(zforce, 'ProtocolMessage', decoded, encoded) # PDU 3. decoded = ( 'response', { 'enable': { 'reset': None }, 'openShort': { 'openShortInfo': [], 'errorCount': 34 } } ) encoded = ( b'\xef\x0b\x65\x02\x82\x00\x6a\x05\xa0\x00\x81\x01\x22' ) self.assert_encode_decode(zforce, 'ProtocolMessage', decoded, encoded) # PDU 4. decoded = ( 'notification', { 'notificationMessage': ( 'ledLevels', [ ('uint8', b'\x55\x44\x33\x22'), ('uint16', b'\x01\x02') ] ), 'notificationTimestamp': 1, 'notificationLatency': 21 } ) encoded = ( b'\xf0\x13\x6b\x0a\x80\x04\x55\x44\x33\x22\x82\x02\x01\x02\x58' b'\x01\x01\x5f\x23\x01\x15' ) self.assert_encode_decode(zforce, 'ProtocolMessage', decoded, encoded) # PDU 5. decoded = ( 'request', { 'errorLog': -2, 'errorThresholds': { 'asicsThresholds': [ { 'asicIdentifier': -256, 'irLedOpenThresholds': { 'low': -4500, 'high': 100000 } } ] } } ) encoded = ( b'\xee\x1a\x5f\x21\x01\xfe\x7f\x22\x13\xa0\x11\xa0\x0f\x80\x02' b'\xff\x00\xa1\x09\x80\x02\xee\x6c\x81\x03\x01\x86\xa0' ) self.assert_encode_decode(zforce, 'ProtocolMessage', decoded, encoded) def test_bar(self): """A simple example. """ bar = asn1tools.compile_files('tests/files/bar.asn') # Message 1. decoded = { 'headerOnly': True, 'lock': False, 'acceptTypes': { 'standardTypes': [(b'\x40', 4), (b'\x80', 4)] }, 'url': b'/ses/magic/moxen.html' } encoded = ( b'\x60\x29\x01\x01\xff\x01\x01\x00\x61\x0a\xa0\x08\x03\x02\x04' b'\x40\x03\x02\x04\x80\x04\x15\x2f\x73\x65\x73\x2f\x6d\x61\x67' b'\x69\x63\x2f\x6d\x6f\x78\x65\x6e\x2e\x68\x74\x6d\x6c' ) self.assert_encode_decode(bar, 'GetRequest', decoded, encoded) # Message 2. decoded = { 'headerOnly': False, 'lock': False, 'url': b'0' } encoded = b'\x60\x09\x01\x01\x00\x01\x01\x00\x04\x01\x30' self.assert_encode_decode(bar, 'GetRequest', decoded, encoded) def test_any_defined_by_integer(self): spec = """ Foo DEFINITIONS ::= BEGIN Fie ::= SEQUENCE { bar INTEGER, fum ANY DEFINED BY bar } END """ any_defined_by_choices = { ('Foo', 'Fie', 'fum'): { 0: 'NULL', 1: 'INTEGER' } } foo = asn1tools.compile_string( spec, any_defined_by_choices=any_defined_by_choices) # Message 1. decoded = { 'bar': 0, 'fum': None } encoded = b'\x30\x05\x02\x01\x00\x05\x00' self.assert_encode_decode(foo, 'Fie', decoded, encoded) # Message 2. decoded = { 'bar': 1, 'fum': 5 } encoded = b'\x30\x06\x02\x01\x01\x02\x01\x05' self.assert_encode_decode(foo, 'Fie', decoded, encoded) # Message 3, key not found. decoded = { 'bar': 2, 'fum': 5 } encoded = b'\x30\x06\x02\x01\x02\x02\x01\x05' with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('Fie', decoded) self.assertEqual(str(cm.exception), "Fie.fum: Bad AnyDefinedBy choice 2.") with self.assertRaises(asn1tools.DecodeError) as cm: decoded = foo.decode('Fie', encoded) self.assertEqual(str(cm.exception), "Fie.fum: Bad AnyDefinedBy choice 2. (At offset: 5)") def test_any_defined_by_object_identifier(self): spec = """ Foo DEFINITIONS ::= BEGIN Fie ::= SEQUENCE { bar OBJECT IDENTIFIER, fum ANY DEFINED BY bar } END """ any_defined_by_choices = { ('Foo', 'Fie', 'fum'): { '1.3.6.2': 'IA5String', '1.3.1000.7': 'BOOLEAN' } } foo = asn1tools.compile_string( spec, any_defined_by_choices=any_defined_by_choices) # Message 1. decoded = { 'bar': '1.3.6.2', 'fum': 'Hello!' } encoded = b'0\r\x06\x03+\x06\x02\x16\x06Hello!' self.assert_encode_decode(foo, 'Fie', decoded, encoded) # Message 2. decoded = { 'bar': '1.3.1000.7', 'fum': True } encoded = b'0\t\x06\x04+\x87h\x07\x01\x01\xff' self.assert_encode_decode(foo, 'Fie', decoded, encoded) # Message 3, key not found. decoded = { 'bar': '1.3.1000.8', 'fum': True } encoded = b'0\t\x06\x04+\x87h\x08\x01\x01\x01' with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('Fie', decoded) self.assertEqual(str(cm.exception), "Fie.fum: Bad AnyDefinedBy choice 1.3.1000.8.") with self.assertRaises(asn1tools.DecodeError) as cm: decoded = foo.decode('Fie', encoded) self.assertEqual(str(cm.exception), "Fie.fum: Bad AnyDefinedBy choice 1.3.1000.8. (At offset: 8)") def test_decode_bad_length(self): foo = asn1tools.compile_files('tests/files/foo.asn') datas = [ (b'0\x0e\x02\x01\x01\x16\x09Is 1+1=3', 'Question: Expected at least 14 contents byte(s), but got 13. (At offset: 2)'), (b'0\x0f\x02\x01\x01\x16\x09Is 1+1=3?', 'Question: Expected at least 15 contents byte(s), but got 14. (At offset: 2)'), (b'0\x0e\x02\x01\x01\x16\x0aIs 1+1=3?', 'Question.question: Expected at least 10 contents byte(s), but got 9. (At offset: 7)'), (b'0\x0e\x02\x02\x01\x16\x09Is 1+1=3?', "Question.question: Expected IA5String(question) with tag '16', but got '09'. (At offset: 6)") ] for encoded, message in datas: with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('Question', encoded) self.assertEqual(str(cm.exception), message) def test_all_types_constructed_definite_length(self): all_types = asn1tools.compile_files('tests/files/all_types.asn') datas = [ ('Bitstring', (b'\x80', 1), b'\x03\x02\x07\x80'), ('Octetstring', b'\x00\x01', b'\x24\x06\x04\x01\x00\x04\x01\x01'), ('Utf8string', 'foo', b'\x2c\x07\x04\x02fo\x04\x01o'), ('Numericstring', '123', b'\x32\x07\x04\x0212\x04\x013'), ('Printablestring', 'foo', b'\x33\x07\x04\x02fo\x04\x01o'), ('Ia5string', 'bar', b'\x36\x07\x04\x02ba\x04\x01r'), ('Universalstring', 'bar', b'\x3c\x10\x04\x08\x00\x00\x00b\x00\x00\x00a\x04\x04\x00\x00\x00r'), ('Visiblestring', 'bar', b'\x3a\x07\x04\x02ba\x04\x01r'), ('Generalstring', 'bar', b'\x3b\x07\x04\x02ba\x04\x01r'), ('Bmpstring', 'fie', b'\x3e\x0a\x04\x02\x00\x66\x04\x04\x00\x69\x00\x65'), ('Teletexstring', 'fum', b'\x34\x07\x04\x01f\x04\x02um') ] for type_name, decoded, encoded in datas: self.assertEqual(all_types.decode(type_name, encoded), decoded) def test_all_types_constructed_indefinite_length(self): all_types = asn1tools.compile_files('tests/files/all_types.asn') datas = [ ('Bitstring', (b'\x11\x22\x80', 17), b'\x23\x80\x03\x02\x00\x11\x03\x02\x00\x22\x03\x02\x07\x80\x00\x00'), ('Octetstring', b'\x00\x01', b'\x24\x80\x04\x01\x00\x24\x80\x04\x01\x01\x00\x00\x00\x00'), ('Utf8string', 'foo', b'\x2c\x80\x04\x02fo\x04\x01o\x00\x00'), #('Sequence', {}, b'\x30\x80\x00\x00'), #('Set', {}, b'\x31\x80\x00\x00'), ('Numericstring', '123', b'\x32\x80\x04\x0212\x04\x013\x00\x00'), ('Printablestring', 'foo', b'\x33\x80\x04\x02fo\x04\x01o\x00\x00'), ('Ia5string', 'bar', b'\x36\x80\x04\x02ba\x04\x01r\x00\x00'), ('Universalstring', 'bar', b'\x3c\x80\x04\x08\x00\x00\x00b\x00\x00\x00a\x04\x04\x00\x00\x00r\x00\x00'), ('Visiblestring', 'bar', b'\x3a\x80\x04\x02ba\x04\x01r\x00\x00'), ('Generalstring', 'bar', b'\x3b\x80\x04\x02ba\x04\x01r\x00\x00'), ('Bmpstring', 'fie', b'\x3e\x80\x04\x02\x00\x66\x04\x04\x00\x69\x00\x65\x00\x00'), ('Teletexstring', 'fum', b'\x34\x80\x04\x01f\x04\x02um\x00\x00'), #('SequenceOf', [], b'\x30\x80\x00\x00'), #('SetOf', [], b'\x31\x80\x00\x00') ] for type_name, decoded, encoded in datas: self.assertEqual(all_types.decode(type_name, encoded), decoded) def test_decode_indefinite_length_in_primitive_encoding(self): """A BOOLEAN always uses primitive encoding with definite length, and decoding should fail if an indefinite length is found. """ spec = 'A DEFINITIONS ::= BEGIN A ::= BOOLEAN END' foo = asn1tools.compile_string(spec) encoded = b'\x01\x80\xff' with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', encoded) self.assertEqual( 'A: Expected definite length, but got indefinite. (At offset: 1)', str(cm.exception)) def test_versions(self): foo = asn1tools.compile_files('tests/files/versions.asn') # Encode as V1, decode as V1, V2 and V3 decoded_v1 = { 'userName': 'myUserName', 'password': 'myPassword', 'accountNumber': 54224445 } encoded_v1 = foo.encode('V1', decoded_v1) self.assertEqual(foo.decode('V1', encoded_v1), decoded_v1) self.assertEqual(foo.decode('V2', encoded_v1), decoded_v1) self.assertEqual(foo.decode('V3', encoded_v1), decoded_v1) # Encode as V2, decode as V1, V2 and V3 decoded_v2 = { 'userName': 'myUserName', 'password': 'myPassword', 'accountNumber': 54224445, 'minutesLastLoggedIn': 5 } encoded_v2 = foo.encode('V2', decoded_v2) self.assertEqual(foo.decode('V1', encoded_v2), decoded_v1) self.assertEqual(foo.decode('V2', encoded_v2), decoded_v2) self.assertEqual(foo.decode('V3', encoded_v2), decoded_v2) # Encode as V3, decode as V1, V2 and V3 decoded_v3 = { 'userName': 'myUserName', 'password': 'myPassword', 'accountNumber': 54224445, 'minutesLastLoggedIn': 5, 'certificate': None, 'thumb': None } encoded_v3 = foo.encode('V3', decoded_v3) self.assertEqual(foo.decode('V1', encoded_v3), decoded_v1) self.assertEqual(foo.decode('V2', encoded_v3), decoded_v2) self.assertEqual(foo.decode('V3', encoded_v3), decoded_v3) def test_long_tag(self): foo = asn1tools.compile_string( "Foo DEFINITIONS IMPLICIT TAGS ::= BEGIN " "A ::= [31] INTEGER " "B ::= [500] INTEGER " "END") datas = [ ('A', 1, b'\x9f\x1f\x01\x01'), ('B', 1, b'\x9f\x83\x74\x01\x01') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_issue_34(self): """Test that a choice type with a recursive member can be compiled and used. """ foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN " "A ::= SEQUENCE { " " a B " "} " "B ::= CHOICE { " " b A, " " c NULL " "} " "END ") decoded = {'a': ('b', {'a': ('c', None)})} encoded = b'\x30\x08\xa0\x06\xa0\x04\xa0\x02\x81\x00' self.assert_encode_decode(foo, 'A', decoded, encoded) def test_decode_with_length(self): foo = asn1tools.compile_string( "Foo DEFINITIONS IMPLICIT TAGS ::= " "BEGIN " "A ::= INTEGER " "B ::= SET { " " b [1] INTEGER, " " a [0] INTEGER " "} " "C ::= SET { " " a [0] B, " " b [1] OCTET STRING " "} " "K ::= [3] CHOICE { " " a [4] CHOICE { " " a BOOLEAN " " }, " " b [5] CHOICE { " " b INTEGER " " } " "} " "END") # Test decoding Integer with length self.assertEqual(foo.decode_with_length('A', b'\x02\x03\x00\x80\x00'), (32768, 5)) # Test decoding indefinite length CHOICE self.assertEqual(foo.decode_with_length('K', b'\xa3\x80\xa4\x80\x01\x01\x00\x00\x00\x00\x00'), (('a', ('a', False)), 11)) # Test decoding definite length CHOICE self.assertEqual(foo.decode_with_length('K', b'\xa3\x05\xa5\x03\x02\x01\x02'), (('b', ('b', 2)), 7)) # Test indefinite length set with end-of-contents tags self.assertEqual(foo.decode_with_length('C', b'\x31\x80\xa0\x80\x80\x01\x03\x81\x01\x04\x00\x00\x81\x01\x12\x00\x00'), ({'a': {'a': 3, 'b': 4}, 'b': b'\x12'},17)) if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_c_source.py000066400000000000000000000232241524544274600202070ustar00rootroot00000000000000import unittest import asn1tools CODECS_AND_MODULES = [ ('oer', asn1tools.source.c.oer), ('uper', asn1tools.source.c.uper) ] class Asn1ToolsCSourceTest(unittest.TestCase): def test_compile_error_unsupported_type(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= OBJECT IDENTIFIER ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: Unsupported type 'OBJECT IDENTIFIER'.") def test_compile_error_unsupported_type_in_sequence(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= SEQUENCE { ' ' a NumericString ' ' } ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A.a: Unsupported type 'NumericString'.") def test_compile_error_integer_no_minimum_nor_maximum(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= INTEGER ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: INTEGER has no minimum value.") def test_compile_error_integer_no_minimum(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= INTEGER (MIN..10) ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: INTEGER has no minimum value.") def test_compile_error_integer_no_maximum(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= INTEGER (1..MAX) ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: INTEGER has no maximum value.") def test_compile_error_unsigned_integer_over_64_bits(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= INTEGER (0..18446744073709551616) ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: 18446744073709551616 does not fit in uint64_t.") def test_compile_error_unsigned_integer_over_64_signed_bits(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= INTEGER (-1..9223372036854775808) ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: 9223372036854775808 does not fit in int64_t.") def test_compile_error_signed_integer_over_64_bits(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= INTEGER (-9223372036854775809..0) ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: -9223372036854775809 does not fit in int64_t.") def test_compile_error_octet_string_no_size(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= OCTET STRING ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: OCTET STRING has no maximum length.") def test_compile_error_octet_string_no_maximum(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= OCTET STRING (SIZE(1..MAX)) ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: OCTET STRING has no maximum length.") def test_compile_error_sequence_of_no_size(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= SEQUENCE OF BOOLEAN ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: SEQUENCE OF has no maximum length.") def test_compile_error_sequence_of_no_maximum(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= SEQUENCE (SIZE(1..MAX)) OF BOOLEAN ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: SEQUENCE OF has no maximum length.") def test_compile_error_oer_real_not_ieee754(self): foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= REAL ' 'END', 'oer') with self.assertRaises(asn1tools.errors.Error) as cm: asn1tools.source.c.oer.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: REAL not IEEE 754 binary32 or binary64.") def test_compile_error_members_backtrace(self): for codec, module in CODECS_AND_MODULES: foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= SEQUENCE { ' ' a CHOICE { ' ' b INTEGER ' ' } ' ' } ' 'END', codec) with self.assertRaises(asn1tools.errors.Error) as cm: module.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A.a.b: INTEGER has no minimum value.") def test_compile_error_oer_enumerated_min(self): foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= ENUMERATED { a(-2147483649) } ' 'END', 'oer') with self.assertRaises(asn1tools.errors.Error) as cm: asn1tools.source.c.oer.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: -2147483649 does not fit in int32_t.") def test_compile_error_oer_enumerated_max(self): foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= ENUMERATED { a(2147483649) } ' 'END', 'oer') with self.assertRaises(asn1tools.errors.Error) as cm: asn1tools.source.c.oer.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: 2147483649 does not fit in int32_t.") def test_compile_error_bit_strings(self): foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= BIT STRING (SIZE(1..2))' 'END', 'oer') with self.assertRaises(asn1tools.errors.Error) as cm: asn1tools.source.c.oer.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: BIT STRING with variable SIZE not supported.") foo = asn1tools.compile_string( 'Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN ' ' A ::= BIT STRING (SIZE(65))' 'END', 'oer') with self.assertRaises(asn1tools.errors.Error) as cm: asn1tools.source.c.oer.generate(foo, 'foo') self.assertEqual(str(cm.exception), "Foo.A: BIT STRING with a length of more than 64 bits are " "not supported.") if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_codecs.py000066400000000000000000000207161524544274600176500ustar00rootroot00000000000000import unittest from datetime import datetime from datetime import timedelta import asn1tools from asn1tools.codecs import utc_time_to_datetime from asn1tools.codecs import utc_time_from_datetime from asn1tools.codecs import generalized_time_to_datetime from asn1tools.codecs import generalized_time_from_datetime from asn1tools.codecs import restricted_utc_time_to_datetime from asn1tools.codecs import restricted_utc_time_from_datetime from asn1tools.codecs import restricted_generalized_time_to_datetime from asn1tools.codecs import restricted_generalized_time_from_datetime try: from datetime import timezone except ImportError: from asn1tools.compat import timezone def tzinfo(hours, minutes=0): return timezone(timedelta(hours=hours, minutes=minutes)) class Asn1ToolsUtilsTest(unittest.TestCase): maxDiff = None def test_utc_time(self): datas = [ ('8201021200Z', datetime(1982, 1, 2, 12, 0)), ('8201021211Z', datetime(1982, 1, 2, 12, 11)), ('820102120005Z', datetime(1982, 1, 2, 12, 0, 5)), ('8201021200+0100', datetime(1982, 1, 2, 12, 0, tzinfo=tzinfo(1))), ('8201021200-0500', datetime(1982, 1, 2, 12, 0, tzinfo=tzinfo(-5))), ('180102120003+0000', datetime(2018, 1, 2, 12, 0, 3, tzinfo=tzinfo(0))) ] for utc_time, date in datas: actual = utc_time_to_datetime(utc_time) self.assertEqual(actual, date) actual = utc_time_from_datetime(date) self.assertEqual(actual, utc_time) def test_restricted_utc_time(self): datas = [ ( datetime(1982, 1, 2, 12, 0, 5), '820102120005Z', datetime(1982, 1, 2, 12, 0, 5) ), ( datetime(1982, 1, 2, 12, 0, 5, tzinfo=tzinfo(1)), '820102110005Z', datetime(1982, 1, 2, 11, 0, 5) ), ( datetime(1982, 1, 2, 12, 0, 5, tzinfo=tzinfo(-12)), '820103000005Z', datetime(1982, 1, 3, 0, 0, 5) ), ( datetime(2032, 12, 31), '321231000000Z', datetime(2032, 12, 31) ) ] for date_in, utc_time, date_out in datas: actual = restricted_utc_time_from_datetime(date_in) self.assertEqual(actual, utc_time) actual = restricted_utc_time_to_datetime(utc_time) self.assertEqual(actual, date_out) def test_generalized_time(self): datas = [ ('19820102120022', datetime(1982, 1, 2, 12, 0, 22)), ('198201021200', datetime(1982, 1, 2, 12, 0, 0)), ('198201021211', datetime(1982, 1, 2, 12, 11)), ('19820102120023.5', datetime(1982, 1, 2, 12, 0, 23, 500000)), ('198201021222.5', datetime(1982, 1, 2, 12, 22, 0, 500000)), ('198201021200.5', datetime(1982, 1, 2, 12, 0, 0, 500000)), ('19820102120024Z', datetime(1982, 1, 2, 12, 0, 24, tzinfo=tzinfo(0))), ('198201021200Z', datetime(1982, 1, 2, 12, 0, 0, tzinfo=tzinfo(0))), ('19820102120025.1Z', datetime(1982, 1, 2, 12, 0, 25, 100000, tzinfo=tzinfo(0))), ('198201021200.1Z', datetime(1982, 1, 2, 12, 0, 0, 100000, tzinfo=tzinfo(0))), ('19820102120026-1000', datetime(1982, 1, 2, 12, 0, 26, tzinfo=tzinfo(-10))), ('198201021200-1000', datetime(1982, 1, 2, 12, 0, 0, tzinfo=tzinfo(-10))), ('19820102120027.1+0100', datetime(1982, 1, 2, 12, 0, 27, 100000, tzinfo=tzinfo(1))), ('198201021200.1+0100', datetime(1982, 1, 2, 12, 0, 0, 100000, tzinfo=tzinfo(1))) ] for generalized_time, date in datas: actual = generalized_time_to_datetime(generalized_time) self.assertEqual(actual, date) actual = generalized_time_from_datetime(date) self.assertEqual(actual, generalized_time) def test_generalized_time_comma(self): datas = [ ('19820102120023,5', datetime(1982, 1, 2, 12, 0, 23, 500000)), ('198201021200,5', datetime(1982, 1, 2, 12, 0, 0, 500000)), ('19820102120027,1+0100', datetime(1982, 1, 2, 12, 0, 27, 100000, tzinfo=tzinfo(1))), ('198201021200,1+0100', datetime(1982, 1, 2, 12, 0, 0, 100000, tzinfo=tzinfo(1))), ] for generalized_time, date in datas: actual = generalized_time_to_datetime(generalized_time) self.assertEqual(actual, date) def test_restricted_generalized_time(self): datas = [ ( datetime(1982, 1, 2, 12, 0, 5), '19820102120005Z', datetime(1982, 1, 2, 12, 0, 5) ), ( datetime(1982, 1, 2, 12, 0, 5, tzinfo=tzinfo(1)), '19820102110005Z', datetime(1982, 1, 2, 11, 0, 5) ), ( datetime(1982, 1, 2, 12, 0, 5, tzinfo=tzinfo(-12)), '19820103000005Z', datetime(1982, 1, 3, 0, 0, 5) ), ( datetime(1932, 12, 31), '19321231000000Z', datetime(1932, 12, 31) ), ( datetime(2032, 12, 31, 0, 2, 1, 100000), '20321231000201.1Z', datetime(2032, 12, 31, 0, 2, 1, 100000) ), ( datetime(1931, 12, 31, 0, 2, 2, 999000), '19311231000202.999Z', datetime(1931, 12, 31, 0, 2, 2, 999000) ) ] for date_in, generalized_time, date_out in datas: actual = restricted_generalized_time_from_datetime(date_in) self.assertEqual(actual, generalized_time) actual = restricted_generalized_time_to_datetime(generalized_time) self.assertEqual(actual, date_out) def test_utc_time_to_datetime_errors(self): datas = [ '', '8201021211', '820102120111', '8201021200K', 'Z820102120011Z', '820102120060Z', '82010212006Z', '8201021200*0100', '82010212000000100', '820102999Z' ] for utc_time in datas: with self.assertRaises(asn1tools.Error) as cm: utc_time_to_datetime(utc_time) self.assertEqual( str(cm.exception), "Expected a UTC time string, but got '{}'.".format(utc_time)) def test_restricted_utc_time_errors(self): datas = [ '', '8201021200Z', '8201021200+0100', '180102120003+0000', '820102999Z' ] for utc_time in datas: with self.assertRaises(asn1tools.Error) as cm: restricted_utc_time_to_datetime(utc_time) self.assertEqual( str(cm.exception), "Expected a restricted UTC time string, but got '{}'.".format( utc_time)) def test_generalized_time_to_datetime_errors(self): datas = [ '', '19820102120022K', '19820102120022.1=0100', '1982010209099', '19820102999' ] for generalized_time in datas: with self.assertRaises(asn1tools.Error) as cm: generalized_time_to_datetime(generalized_time) self.assertEqual( str(cm.exception), "Expected a generalized time string, but got " "'{}'.".format(generalized_time)) def test_restricted_generalized_time_errors(self): datas = [ '', '198201021200Z', '198201021200+0100', '20180102120003.0Z', '20180102120003.Z', '201801021200.1Z', '000102111213Z' ] for generalized_time in datas: with self.assertRaises(asn1tools.Error) as cm: restricted_generalized_time_to_datetime(generalized_time) self.assertEqual( str(cm.exception), "Expected a restricted generalized time string, but got " "'{}'.".format(generalized_time)) if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_codecs_consistency.py000066400000000000000000001621561524544274600222760ustar00rootroot00000000000000import sys import json import unittest from datetime import date from datetime import time from datetime import datetime from copy import deepcopy from .utils import Asn1ToolsBaseTest import asn1tools sys.path.append('tests/files') from parameterization import EXPECTED as PARAMETERIZATION CODECS = ['ber', 'der', 'jer', 'oer', 'per', 'uper', 'xer'] ALL_CODECS = CODECS + ['gser'] def loadb(encoded): return json.loads(encoded.decode('utf-8')) class Asn1ToolsCodecsConsistencyTest(Asn1ToolsBaseTest): maxDiff = None def encode_decode_all_codecs(self, type_spec, values, numeric_enums=False): spec = ( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= " + type_spec + " " + "END" ) foos = [] for codec in CODECS: foos.append(asn1tools.compile_string(spec, codec, numeric_enums=numeric_enums)) gser = asn1tools.compile_string(spec, 'gser', numeric_enums=numeric_enums) for value in values: decoded = value for foo in foos: encoded = foo.encode('A', decoded) decoded = foo.decode('A', encoded) self.assertEqual(type(decoded), type(value)) self.assertEqual(decoded, value) gser.encode('A', decoded) def encode_decode_codec(self, spec, codec, type_name, decoded, encoded): encoded_message = spec.encode(type_name, decoded, check_constraints=True) if codec == 'jer': self.assertEqual(loadb(encoded), loadb(encoded_message)) else: self.assertEqual(encoded_message, encoded) if codec == 'gser': return decoded_message = spec.decode(type_name, encoded, check_constraints=True) self.assertEqual(decoded_message, decoded) def encode_decode_codecs(self, type_spec, decoded, encoded): spec = ( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= " + type_spec + " " + "END" ) for codec, encoded_message in zip(ALL_CODECS, encoded): foo = asn1tools.compile_string(spec, codec) self.encode_decode_codec(foo, codec, 'A', decoded, encoded_message) def encode_decode_codecs_file(self, filename, type_name, decoded, encoded): for codec, encoded_message in zip(ALL_CODECS, encoded): foo = asn1tools.compile_files(filename, codec) self.encode_decode_codec(foo, codec, type_name, decoded, encoded_message) def decode_codecs(self, type_spec, decoded, encoded, numeric_enums=False): spec = ( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= " + type_spec + " " + "END" ) for codec, encoded_message in zip(CODECS, encoded): foo = asn1tools.compile_string(spec, codec, numeric_enums=numeric_enums) decoded_message = foo.decode('A', encoded_message, check_constraints=True) self.assertEqual(decoded_message, decoded) def test_boolean(self): self.encode_decode_all_codecs("BOOLEAN", [True, False]) def test_integer(self): self.encode_decode_all_codecs("INTEGER", [1, 123456789, -2, 0]) def test_integer_versions(self): decoded_v1 = 2 decoded_v2 = 2 encoded_v2 = [ b'\x02\x01\x02', b'\x02\x01\x02', b'2', b'\x01\x02', b'\x80\x01\x02', b'\x80\x81\x00', b'2' ] self.decode_codecs('INTEGER (1, ..., 2)', decoded_v2, encoded_v2) self.decode_codecs('INTEGER (1, ...)', decoded_v1, encoded_v2) def test_real(self): self.encode_decode_all_codecs("REAL", [0.0, 1.0, -1.0]) def test_null(self): self.encode_decode_all_codecs("NULL", [None]) def test_bit_string(self): self.encode_decode_all_codecs("BIT STRING", [(b'\x58', 5), (b'\x58\x80', 9)]) def test_octet_string(self): self.encode_decode_all_codecs("OCTET STRING", [b'', b'\x12\x34']) def test_object_identifier(self): self.encode_decode_all_codecs("OBJECT IDENTIFIER", ['1.2.33']) def test_enumerated(self): self.encode_decode_all_codecs("ENUMERATED { a(0), b(5) }", ['a', 'b']) def test_enumerated_numeric(self): self.encode_decode_all_codecs("ENUMERATED { a(0), b(5) }", [0, 5], numeric_enums=True) # Enum with default decoded = {"e": 5} encoded_messages = [ b'0\x00', b'0\x00', b'{}', b'\x00', b'\x00', b'\x00', b'' ] self.decode_codecs('SEQUENCE { e ENUMERATED { a(0), b(5) } DEFAULT b }', decoded, encoded_messages, numeric_enums=True) def test_enumerated_versions(self): # Unknown enumeration value 'c' decoded as None. decoded_v1 = None decoded_v2 = 'c' encoded_v2 = [ b'\x0a\x01\x02', b'\x0a\x01\x02', b'"c"', b'\x02', b'\x80', b'\x80', b'' ] self.decode_codecs('ENUMERATED {a, b, ..., c}', decoded_v2, encoded_v2) self.decode_codecs('ENUMERATED {a, b, ...}', decoded_v1, encoded_v2) def test_sequence(self): self.encode_decode_all_codecs("SEQUENCE { a NULL }", [{'a': None}]) def test_sequence_of(self): self.encode_decode_all_codecs("SEQUENCE OF NULL", [[], [None, None]]) def test_set(self): self.encode_decode_all_codecs("SET { a NULL }", [{'a': None}]) def test_set_of(self): self.encode_decode_all_codecs("SET OF NULL", [[], [None, None]]) def test_choice(self): self.encode_decode_all_codecs("CHOICE { a NULL }", [('a', None)]) def test_choice_versions(self): # Unknown choice 'c' decoded as (None, None). decoded_v1 = { 'a': (None, None), 'd': True } decoded_v2 = { 'a': ('c', None), 'd': True } encoded_v2 = [ b'\x30\x07\xa0\x02\x81\x00\x81\x01\xff', b'\x30\x07\xa0\x02\x81\x00\x81\x01\xff', b'{"a":{"c":null},"d":true}', b'\x81\x00\xff', b'\x80\x00\x80', b'\x80\x00\x80', b'' ] self.decode_codecs('SEQUENCE { ' ' a CHOICE {b NULL, ..., c NULL}, ' ' d BOOLEAN ' '}', decoded_v2, encoded_v2) self.decode_codecs('SEQUENCE { ' ' a CHOICE {b NULL, ...}, ' ' d BOOLEAN ' '}', decoded_v1, encoded_v2) def test_utf8_string(self): self.encode_decode_all_codecs("UTF8String", [u'hi']) def test_numeric_string(self): self.encode_decode_all_codecs("NumericString", [u'123']) def test_printable_string(self): self.encode_decode_all_codecs("PrintableString", [u'hi']) def test_ia5_string(self): self.encode_decode_all_codecs("IA5String", [u'hi']) def test_visible_string(self): self.encode_decode_all_codecs("VisibleString", [u'hi']) def test_general_string(self): self.encode_decode_all_codecs("GeneralString", [u'hi']) def test_bmp_string(self): self.encode_decode_all_codecs("BMPString", [u'hi']) def test_graphic_string(self): self.encode_decode_all_codecs("GraphicString", [u'hi']) def test_teletex_string(self): self.encode_decode_all_codecs("TeletexString", [u'hi']) def test_universal_string(self): self.encode_decode_all_codecs("UniversalString", [u'hi']) def test_utc_time(self): self.encode_decode_all_codecs("UTCTime", [datetime(2020, 3, 12)]) def test_generalized_time(self): self.encode_decode_all_codecs("GeneralizedTime", [datetime(2021, 3, 12)]) def test_error_location(self): spec = ( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE { " " a SEQUENCE { " " b CHOICE { " " c SEQUENCE { " " d INTEGER " " } " " } " " } " "}" "END" ) for codec in ALL_CODECS: foo = asn1tools.compile_string(spec, codec) with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('A', {'a': {'b': ('c', {})}}) self.assertEqual(str(cm.exception), "A.a.b.c: Sequence member 'd' not found in {}.") def test_recursive(self): spec = ( "SEQUENCE { " " a B " "} " "B ::= CHOICE { " " b A, " " c NULL " "} " ) self.encode_decode_all_codecs(spec, [{'a': ('b', {'a': ('c', None)})}]) def test_with_components(self): decoded = { 'a': 1, 'b': { 'c': [ ( 'f', True ) ], 'd': 2 } } encoded = [ b'\x30\x0d\x80\x01\x01\xa1\x08\xa0\x03\x81\x01\xff\x81\x01\x02', b'\x30\x0d\x80\x01\x01\xa1\x08\xa0\x03\x81\x01\xff\x81\x01\x02', b'{"a":1,"b":{"c":[{"f":true}],"d":2}}', b'\x01\x01\x01\x81\xff\x01\x02', b'\x01\x60\x01\x02', b'\x01\x60\x20\x40', b'12', b'foo Foo ::= { a 1, b { c { f : TRUE }, d 2 } }' ] self.encode_decode_codecs_file('tests/files/with_components.asn', 'Foo', decoded, encoded) def test_integer_min_max(self): decoded = 5 encoded = [ b'\x02\x01\x05', b'\x02\x01\x05', b'5', b'\x01\x05', b'\x01\x05', b'\x01\x05', b'5', b'a A ::= 5' ] self.encode_decode_codecs('INTEGER (MIN..MAX)', decoded, encoded) def test_enumerated_all_except(self): decoded = 'c' encoded = [ b'\x0a\x01\x02', b'\x0a\x01\x02', b'"c"', b'\x02', b'\x40', b'\x40', b'', b'a A ::= c' ] self.encode_decode_codecs('ENUMERATED {a, b, c, d, e} (ALL EXCEPT b)', decoded, encoded) def test_constraints_extensions(self): decoded = { 'a': b'\x12\x34', 'b': b'\x56\x78', 'c': [True, True, False, True, True, False, True, True, False], 'd': [True, True, False, True, True, False, True, True, False, True], 'e': [1, 100, 10000], 'f': [1, 100, 10000, 1000000] } encoded = [ b'\x30\x62\x80\x02\x12\x34\x81\x02\x56\x78\xa2\x1b\x01\x01\xff\x01' b'\x01\xff\x01\x01\x00\x01\x01\xff\x01\x01\xff\x01\x01\x00\x01\x01' b'\xff\x01\x01\xff\x01\x01\x00\xa3\x1e\x01\x01\xff\x01\x01\xff\x01' b'\x01\x00\x01\x01\xff\x01\x01\xff\x01\x01\x00\x01\x01\xff\x01\x01' b'\xff\x01\x01\x00\x01\x01\xff\xa4\x0a\x02\x01\x01\x02\x01\x64\x02' b'\x02\x27\x10\xa5\x0f\x02\x01\x01\x02\x01\x64\x02\x02\x27\x10\x02' b'\x03\x0f\x42\x40', b'\x30\x62\x80\x02\x12\x34\x81\x02\x56\x78\xa2\x1b\x01\x01\xff\x01' b'\x01\xff\x01\x01\x00\x01\x01\xff\x01\x01\xff\x01\x01\x00\x01\x01' b'\xff\x01\x01\xff\x01\x01\x00\xa3\x1e\x01\x01\xff\x01\x01\xff\x01' b'\x01\x00\x01\x01\xff\x01\x01\xff\x01\x01\x00\x01\x01\xff\x01\x01' b'\xff\x01\x01\x00\x01\x01\xff\xa4\x0a\x02\x01\x01\x02\x01\x64\x02' b'\x02\x27\x10\xa5\x0f\x02\x01\x01\x02\x01\x64\x02\x02\x27\x10\x02' b'\x03\x0f\x42\x40', b'{"a":"1234","b":"5678","c":[true,true,false,true,true,false,true' b',true,false],"d":[true,true,false,true,true,false,true,true,fals' b'e,true],"e":[1,100,10000],"f":[1,100,10000,1000000]}', b'\x02\x12\x34\x02\x56\x78\x01\x09\xff\xff\x00\xff\xff\x00\xff\xff' b'\x00\x01\x0a\xff\xff\x00\xff\xff\x00\xff\xff\x00\xff\x01\x03\x01' b'\x01\x01\x64\x02\x27\x10\x01\x04\x01\x01\x01\x64\x02\x27\x10\x03' b'\x0f\x42\x40', b'\x40\x12\x34\x40\x56\x78\x6d\xa0\x0a\xdb\x50\x80\x01\x64\x80\x02' b'\x27\x10\x80\x04\x08\x01\x64\x80\x02\x27\x10\x80\x03\x0f\x42\x40', b'\x44\x8d\x15\x67\x86\xda\x15\xb6\xa1\x01\x64\x81\x13\x88\x41\x02' b'\x02\xc9\x02\x27\x10\x81\x87\xa1\x20\x00', b'12345678110010000' b'1100100001000000', b"a A ::= { a '1234'H, b '5678'H, c { TRUE, TRUE, FALSE, TRUE, TRU" b"E, FALSE, TRUE, TRUE, FALSE }, d { TRUE, TRUE, FALSE, TRUE, TRUE" b", FALSE, TRUE, TRUE, FALSE, TRUE }, e { 1, 100, 10000 }, f { 1, " b"100, 10000, 1000000 } }" ] self.encode_decode_codecs( 'SEQUENCE {' ' a OCTET STRING (SIZE (1..2, ...)),' ' b OCTET STRING (SIZE (1..2), ...),' ' c SEQUENCE (SIZE (9..9), ...) OF BOOLEAN,' ' d SEQUENCE (SIZE (9..9), ...) OF BOOLEAN,' ' e SEQUENCE SIZE (2..3, ...) OF INTEGER (1..5, ...),' ' f SEQUENCE (SIZE (2..3, ...)) OF INTEGER (1..5, ...)' '}', decoded, encoded) def test_date(self): decoded = date(1985, 4, 12) encoded = [ b'\x1f\x1f\x08\x31\x39\x38\x35\x30\x34\x31\x32', b'\x1f\x1f\x08\x31\x39\x38\x35\x30\x34\x31\x32', b'"1985-04-12"', b'\x02\x07\xc1\x04\x0c', b'\x80\xec\x35\x80', b'\xbb\x0d\x60', b'1985-04-12', b'a A ::= "1985-04-12"' ] self.encode_decode_codecs('DATE', decoded, encoded) def test_time_of_day(self): decoded = time(15, 27, 46) encoded = [ b'\x1f\x20\x06\x31\x35\x32\x37\x34\x36', b'\x1f\x20\x06\x31\x35\x32\x37\x34\x36', b'"15:27:46"', b'\x0f\x1b\x2e', b'\x7b\x77\x00', b'\x7b\x77\x00', b'15:27:46', b'a A ::= "15:27:46"' ] self.encode_decode_codecs('TIME-OF-DAY', decoded, encoded) def test_date_time(self): decoded = [ datetime(1985, 4, 12, 15, 27, 46), datetime(1582, 2, 3, 4, 5, 6) ] encoded = [ [ b'\x1f\x21\x0e\x31\x39\x38\x35\x30\x34\x31\x32\x31\x35\x32\x37\x34' b'\x36', b'\x1f\x21\x0e\x31\x39\x38\x35\x30\x34\x31\x32\x31\x35\x32\x37\x34' b'\x36', b'"1985-04-12T15:27:46"', b'\x02\x07\xc1\x04\x0c\x0f\x1b\x2e', b'\x80\xec\x35\xbd\xbb\x80', b'\xbb\x0d\x6f\x6e\xe0', b'1985-04-12T15:27:46', b'a A ::= "1985-04-12T15:27:46"' ], [ b'\x1f\x21\x0e\x31\x35\x38\x32\x30\x32\x30\x33\x30\x34\x30\x35\x30\x36', b'\x1f\x21\x0e\x31\x35\x38\x32\x30\x32\x30\x33\x30\x34\x30\x35\x30\x36', b'"1582-02-03T04:05:06"', b'\x02\x06\x2e\x02\x03\x04\x05\x06', b'\xc0\x02\x06\x2e\x11\x10\x51\x80', b'\xc0\x81\x8b\x84\x44\x14\x60', b'1582-02-03T04:05:06', b'a A ::= "1582-02-03T04:05:06"' ] ] for decoded_message, encoded_message in zip(decoded, encoded): self.encode_decode_codecs('DATE-TIME', decoded_message, encoded_message) def test_named_numbers(self): datas = [ ( 'Constants', -1, [ b'\x02\x01\xff', b'\x02\x01\xff', b'-1', b'\xff', b'\x00', b'\x00', b'-1' ] ), ( 'Constants', 2, [ b'\x02\x01\x02', b'\x02\x01\x02', b'2', b'\x02', b'\xc0', b'\xc0', b'2' ] ), ( 'A', -1, [ b'\x02\x01\xff', b'\x02\x01\xff', b'-1', b'\xff', b'\x00', b'\x00', b'-1' ] ), ( 'A', 1, [ b'\x02\x01\x01', b'\x02\x01\x01', b'1', b'\x01', b'\x80', b'\x80', b'1' ] ), ( 'B', 2, [ b'\x02\x01\x02', b'\x02\x01\x02', b'2', b'\x02', b'', b'', b'2' ] ), ( 'C', 0, [ b'\x02\x01\x00', b'\x02\x01\x00', b'0', b'\x00', b'\x00', b'\x00', b'0' ] ), ( 'C', 1, [ b'\x02\x01\x01', b'\x02\x01\x01', b'1', b'\x01', b'\x80', b'\x80', b'1' ] ) ] for type_name, decoded, encoded in datas: self.encode_decode_codecs_file('tests/files/named_numbers.asn', type_name, decoded, encoded) def test_named_numbers_errors(self): datas = [ ( 'Constants', -2, 'Constants: Expected an integer between -1 and 2, but got -2.' ), ( 'Constants', 3, 'Constants: Expected an integer between -1 and 2, but got 3.' ), ( 'A', -2, 'A: Expected an integer between -1 and 1, but got -2.' ), ( 'A', 2, 'A: Expected an integer between -1 and 1, but got 2.' ), ( 'B', 1, 'B: Expected an integer between 2 and 2, but got 1.' ), ( 'C', -1, 'C: Expected an integer between 0 and 1, but got -1.' ), ( 'C', 2, 'C: Expected an integer between 0 and 1, but got 2.' ) ] for codec in ALL_CODECS: foo = asn1tools.compile_files('tests/files/named_numbers.asn', codec) for type_name, decoded, message in datas: with self.assertRaises(asn1tools.ConstraintsError) as cm: foo.encode(type_name, decoded, check_constraints=True) self.assertEqual(str(cm.exception), message) def test_programming_types(self): specs = [] for codec in CODECS: specs.append(asn1tools.compile_files( 'examples/programming_types/programming_types.asn', codec)) decoded = 1 encoded_messages = [ b'\x02\x01\x01', b'\x02\x01\x01', b'1', b'\x00\x00\x00\x01', b'\xc0\x80\x00\x00\x01', b'\x80\x00\x00\x01', b'1' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'Int32', decoded, encoded) def test_c_source(self): specs = [] for codec in CODECS: specs.append(asn1tools.compile_files([ 'tests/files/c_source/c_source.asn', 'examples/programming_types/programming_types.asn' ], codec)) # Type A. decoded = { 'a': -1, 'b': -2, 'c': -3, 'd': -4, 'e': 1, 'f': 2, 'g': 3, 'h': 4, 'i': True, 'j': 11 * b'\x05' } encoded_messages = [ b'\x30\x28\x80\x01\xff\x81\x01\xfe\x82\x01\xfd\x83\x01\xfc\x84' b'\x01\x01\x85\x01\x02\x86\x01\x03\x87\x01\x04\x88\x01\xff\x89' b'\x0b\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05', b'\x30\x28\x80\x01\xff\x81\x01\xfe\x82\x01\xfd\x83\x01\xfc\x84' b'\x01\x01\x85\x01\x02\x86\x01\x03\x87\x01\x04\x88\x01\xff\x89' b'\x0b\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05', b'{"c":-3,"f":2,"d":-4,"a":-1,"i":true,"e":1,"j":"050505050505' b'0505050505","h":4,"b":-2,"g":3}', b'\xff\xff\xfe\xff\xff\xff\xfd\xff\xff\xff\xff\xff\xff\xff\xfc' b'\x01\x00\x02\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04' b'\xff\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05', b'\x7f\x7f\xfe\xc0\x7f\xff\xff\xfd\xe0\x7f\xff\xff\xff\xff\xff' b'\xff\xfc\x01\x00\x02\x00\x03\x00\x04\x80\x05\x05\x05\x05\x05' b'\x05\x05\x05\x05\x05\x05', b'\x7f\x7f\xfe\x7f\xff\xff\xfd\x7f\xff\xff\xff\xff\xff\xff\xfc' b'\x01\x00\x02\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04' b'\x82\x82\x82\x82\x82\x82\x82\x82\x82\x82\x82\x80', b'-1-2-3-4123<' b'/g>40505050505050505050505' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'A', decoded, encoded) # Type B, choice a. decoded = ('a', -10) encoded_messages = [ b'\x80\x01\xf6', b'\x80\x01\xf6', b'{"a": -10}', b'\x80\xf6', b'\x00\x76', b'\x1d\x80', b'-10' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'B', decoded, encoded) # Type B, choice b. decoded = ( 'b', { 'a': -1, 'b': -2, 'c': -3, 'd': -4, 'e': 1, 'f': 2, 'g': 3, 'h': 4, 'i': True, 'j': 11 * b'\x05' } ) encoded_messages = [ b'\xa1\x28\x80\x01\xff\x81\x01\xfe\x82\x01\xfd\x83\x01\xfc\x84' b'\x01\x01\x85\x01\x02\x86\x01\x03\x87\x01\x04\x88\x01\xff\x89' b'\x0b\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05', b'\xa1\x28\x80\x01\xff\x81\x01\xfe\x82\x01\xfd\x83\x01\xfc\x84' b'\x01\x01\x85\x01\x02\x86\x01\x03\x87\x01\x04\x88\x01\xff\x89' b'\x0b\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05', b'{"b":{"h":4,"f":2,"i":true,"d":-4,"a":-1,"j":"05050505050505' b'05050505","e":1,"g":3,"c":-3,"b":-2}}', b'\x81\xff\xff\xfe\xff\xff\xff\xfd\xff\xff\xff\xff\xff\xff\xff' b'\xfc\x01\x00\x02\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00' b'\x04\xff\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05', b'\x40\x7f\x7f\xfe\xc0\x7f\xff\xff\xfd\xe0\x7f\xff\xff\xff\xff' b'\xff\xff\xfc\x01\x00\x02\x00\x03\x00\x04\x80\x05\x05\x05\x05' b'\x05\x05\x05\x05\x05\x05\x05', b'\x5f\xdf\xff\x9f\xff\xff\xff\x5f\xff\xff\xff\xff\xff\xff\xff' b'\x00\x40\x00\x80\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x01' b'\x20\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0', b'-1-2-3-412340505050505050505050505' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'B', decoded, encoded) # Type C - empty. decoded = [] encoded_messages = [ b'\x30\x00', b'\x30\x00', b'[]', b'\x01\x00', b'\x00', b'\x00', b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'C', decoded, encoded) # Type C - 2 elements. decoded = [('a', -11), ('a', 13)] encoded_messages = [ b'\x30\x06\x80\x01\xf5\x80\x01\x0d', b'\x30\x06\x80\x01\xf5\x80\x01\x0d', b'[{"a": -11}, {"a": 13}]', b'\x01\x02\x80\xf5\x80\x0d', b'\x80\x75\x00\x8d', b'\x87\x52\x34', b'-1113' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'C', decoded, encoded) # Type D. decoded = [ { 'a': { 'b': ('c', 0), 'e': [None, None, None], 'f': None }, 'g': { 'h': 'j', 'l': b'\x54\x55' }, 'm': { 'n': False, 'o': 2, 'p': { 'q': 5 * b'\x03', 'r': True }, 's': True } } ] encoded_messages = [ b'\x30\x30\x30\x2e\xa0\x0f\xa0\x03\x80\x01\x00\xa1\x06\x05\x00\x05' b'\x00\x05\x00\x82\x00\xa1\x04\x81\x02\x54\x55\xa2\x15\x80\x01\x00' b'\x81\x01\x02\xa2\x0a\x80\x05\x03\x03\x03\x03\x03\x81\x01\xff\x83' b'\x01\xff', b'\x30\x30\x30\x2e\xa0\x0f\xa0\x03\x80\x01\x00\xa1\x06\x05\x00\x05' b'\x00\x05\x00\x82\x00\xa1\x04\x81\x02\x54\x55\xa2\x15\x80\x01\x00' b'\x81\x01\x02\xa2\x0a\x80\x05\x03\x03\x03\x03\x03\x81\x01\xff\x83' b'\x01\xff', b'[{"m":{"p":{"q":"0303030303","r":true},"s":true,"o":2,"n":false}' b',"g":{"l":"5455","h":"j"},"a":{"b":{"c":0},"e":[null,null,null],' b'"f":null}}]', b'\x01\x01\x80\x00\x01\x03\x00\x02\x54\x55\xf0\x00\x02\x80\x03\x03' b'\x03\x03\x03\xff\xff', b'\x00\x80\x54\x55\xf4\x80\x03\x03\x03\x03\x03\xc0', b'\x00\xaa\x2a\xfa\x40\xc0\xc0\xc0\xc0\xf0', b'054552' b'

    0303030303

    ' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'D', decoded, encoded) # Type D - some missing. decoded = [ { 'a': { 'b': ('d', False), 'e': [None, None, None], 'f': None }, 'g': { 'h': 'k', 'l': b'\x54' }, 'm': { 'o': 3, 'p': { 'q': 5 * b'\x03' }, 's': False } } ] encoded_messages = [ b'\x30\x27\x30\x25\xa0\x0f\xa0\x03\x81\x01\x00\xa1\x06\x05\x00\x05' b'\x00\x05\x00\x82\x00\xa1\x07\x80\x02\x02\x00\x81\x01\x54\xa2\x09' b'\xa2\x07\x80\x05\x03\x03\x03\x03\x03', b'\x30\x27\x30\x25\xa0\x0f\xa0\x03\x81\x01\x00\xa1\x06\x05\x00\x05' b'\x00\x05\x00\x82\x00\xa1\x07\x80\x02\x02\x00\x81\x01\x54\xa2\x09' b'\xa2\x07\x80\x05\x03\x03\x03\x03\x03', b'[{"a":{"b":{"d":false},"e":[null,null,null],"f":null},"g":{"h":"' b'k","l":"54"},"m":{"o":3,"p":{"q":"0303030303"},"s":false}}]', b'\x01\x01\x81\x00\x01\x03\x80\x82\x02\x00\x01\x54\x20\x00\x03\x03' b'\x03\x03\x03', b'\x09\x80\x54\x20\x03\x03\x03\x03\x03', b'\x09\x8a\x84\x03\x03\x03\x03\x03', b'543

    0303' b'030303

    ' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'D', decoded, encoded) # Type E. decoded = {'a': ('b', ('c', True))} encoded_messages = [ b'\x30\x07\xa0\x05\xa0\x03\x80\x01\xff', b'\x30\x07\xa0\x05\xa0\x03\x80\x01\xff', b'{"a": {"b": {"c": true}}}', b'\x80\x80\xff', b'\x80', b'\x80', b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'E', decoded, encoded) # Type F. decoded = [[False], [True]] encoded_messages = [ b'0\n0\x03\x01\x01\x000\x03\x01\x01\xff', b'0\n0\x03\x01\x01\x000\x03\x01\x01\xff', b'[[false], [true]]', b'\x01\x02\x01\x01\x00\x01\x01\xff', b'\xa0', b'\xa0', b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'F', decoded, encoded) # Type G. decoded = {'a': True, 'i': True} encoded_messages = [ b'\x30\x06\x80\x01\xff\x88\x01\xff', b'\x30\x06\x80\x01\xff\x88\x01\xff', b'{"a": true, "i": true}', b'\x80\x80\xff\xff', b'\x80\xe0', b'\x80\xe0', b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'G', decoded, encoded) # Type H. decoded = None encoded_messages = [ b'\x05\x00', b'\x05\x00', b'null', b'', b'', b'', b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'H', decoded, encoded) # Type I. decoded = ( b'\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03' b'\x04\x01\x02\x03\x04\x01\x02\x03\x04' ) encoded_messages = [ b'\x04\x18\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01' b'\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04', b'\x04\x18\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01' b'\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04', b'"010203040102030401020304010203040102030401020304"', b'\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03' b'\x04\x01\x02\x03\x04\x01\x02\x03\x04', b'\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03' b'\x04\x01\x02\x03\x04\x01\x02\x03\x04', b'\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03' b'\x04\x01\x02\x03\x04\x01\x02\x03\x04', b'010203040102030401020304010203040102030401020304' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'I', decoded, encoded) # Type J. decoded = ( b'\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03' b'\x04\x01\x02\x03\x04\x01\x02' ) encoded_messages = [ b'\x04\x16\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01' b'\x02\x03\x04\x01\x02\x03\x04\x01\x02', b'\x04\x16\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01' b'\x02\x03\x04\x01\x02\x03\x04\x01\x02', b'"01020304010203040102030401020304010203040102"', b'\x16\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02' b'\x03\x04\x01\x02\x03\x04\x01\x02', b'\x00\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02' b'\x03\x04\x01\x02\x03\x04\x01\x02', b'\x00\x81\x01\x82\x00\x81\x01\x82\x00\x81\x01\x82\x00\x81\x01' b'\x82\x00\x81\x01\x82\x00\x81\x00', b'01020304010203040102030401020304010203040102' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'J', decoded, encoded) # Type K. decoded = 'a' encoded_messages = [ b'\x0a\x01\x00', b'\x0a\x01\x00', b'"a"', b'\x00', b'', b'', b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'K', decoded, encoded) # Type L. decoded = 260 * b'\xa5' encoded_messages = [ b'\x04\x82\x01\x04' + 260 * b'\xa5', b'\x04\x82\x01\x04' + 260 * b'\xa5', b'"' + 260 * b'A5' + b'"', b'\x82\x01\x04' + 260 * b'\xa5', b'\x01\x04' + 260 * b'\xa5', b'\x82\x52' + 259 * b'\xd2' + b'\x80', b'' + 260 * b'A5' + b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'L', decoded, encoded) # Type O. decoded = 260 * [True] encoded_messages = [ b'\x30\x82\x03\x0c' + 260 * b'\x01\x01\xff', b'\x30\x82\x03\x0c' + 260 * b'\x01\x01\xff', b'[' + 259 * b'true,' + b'true]', b'\x02\x01\x04' + 260 * b'\xff', b'\x01\x03' + 32 * b'\xff' + b'\xf0', b'\x81' + 32 * b'\xff' + b'\xf8', b'' + 260 * b'' + b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'O', decoded, encoded) # Type Q. decoded = ('c256', True) encoded_messages = [ b'\x9f\x81\x7f\x01\xff', b'\x9f\x81\x7f\x01\xff', b'{"c256": true}', b'\xbf\x81\x7f\xff', b'\x00\xff\x80', b'\x7f\xc0', b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'Q', decoded, encoded) # Type Q. decoded = ('c257', True) encoded_messages = [ b'\x9f\x82\x00\x01\xff', b'\x9f\x82\x00\x01\xff', b'{"c257": true}', b'\xbf\x82\x00\xff', b'\x01\x00\x80', b'\x80\x40', b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'Q', decoded, encoded) # Type R. decoded = -1 encoded_messages = [ b'\x02\x01\xff', b'\x02\x01\xff', b'-1', b'\xff', b'\x00', b'\x00', b'-1' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'R', decoded, encoded) decoded = 0 encoded_messages = [ b'\x02\x01\x00', b'\x02\x01\x00', b'0', b'\x00', b'\x80', b'\x80', b'0' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'R', decoded, encoded) # Type S. decoded = -2 encoded_messages = [ b'\x02\x01\xfe', b'\x02\x01\xfe', b'-2', b'\xfe', b'\x00', b'\x00', b'-2' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'S', decoded, encoded) decoded = 1 encoded_messages = [ b'\x02\x01\x01', b'\x02\x01\x01', b'1', b'\x01', b'\xc0', b'\xc0', b'1' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'S', decoded, encoded) # Type T. decoded = -1 encoded_messages = [ b'\x02\x01\xff', b'\x02\x01\xff', b'-1', b'\xff', b'\x00', b'\x00', b'-1' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'T', decoded, encoded) decoded = 2 encoded_messages = [ b'\x02\x01\x02', b'\x02\x01\x02', b'2', b'\x02', b'\xc0', b'\xc0', b'2' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'T', decoded, encoded) # Type U. decoded = -64 encoded_messages = [ b'\x02\x01\xc0', b'\x02\x01\xc0', b'-64', b'\xc0', b'\x00', b'\x00', b'-64' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'U', decoded, encoded) # Type V. decoded = -128 encoded_messages = [ b'\x02\x01\x80', b'\x02\x01\x80', b'-128', b'\x80', b'\x00', b'\x00', b'-128' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'V', decoded, encoded) # Type W. decoded = -1 encoded_messages = [ b'\x02\x01\xff', b'\x02\x01\xff', b'-1', b'\xff\xff', b'\x00\x00', b'\x00\x00', b'-1' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'W', decoded, encoded) decoded = 510 encoded_messages = [ b'\x02\x02\x01\xfe', b'\x02\x02\x01\xfe', b'510', b'\x01\xfe', b'\x01\xff', b'\xff\x80', b'510' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'W', decoded, encoded) # Type X. decoded = -2 encoded_messages = [ b'\x02\x01\xfe', b'\x02\x01\xfe', b'-2', b'\xff\xfe', b'\x00\x00', b'\x00\x00', b'-2' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'X', decoded, encoded) decoded = 510 encoded_messages = [ b'\x02\x02\x01\xfe', b'\x02\x02\x01\xfe', b'510', b'\x01\xfe', b'\x02\x00', b'\x80\x00', b'510' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'X', decoded, encoded) # Type Y. decoded = 10000 encoded_messages = [ b'\x02\x02\x27\x10', b'\x02\x02\x27\x10', b'10000', b'\x27\x10', b'\x00\x00', b'\x00\x00', b'10000' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'Y', decoded, encoded) decoded = 10512 encoded_messages = [ b'\x02\x02\x29\x10', b'\x02\x02\x29\x10', b'10512', b'\x29\x10', b'\x02\x00', b'\x80\x00', b'10512' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'Y', decoded, encoded) # AB. decoded = { 'a': 0, 'b': 10300 } encoded_messages = [ b'\x30\x0b\xa0\x03\x02\x01\x00\xa1\x04\x02\x02\x28\x3c', b'\x30\x0b\xa0\x03\x02\x01\x00\xa1\x04\x02\x02\x28\x3c', b'{"a": 0, "b": 10300}', b'\x00\x28\x3c', b'\x80\x01,', b'\xa5\x80', b'010300' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'AB', decoded, encoded) # AE decoded = { 'a': False, 'b': True, 'c': False } encoded_messages = [ b'\x30\x06\x80\x01\x00\x82\x01\x00', b'\x30\x06\x80\x01\x00\x82\x01\x00', b'{"a": false, "b": true, "c": false}', b'\x40\x00\x00', b'\x40', b'\x40', b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'AE', decoded, encoded) # AF decoded = { 'a': True, 'b': { 'c': True, 'd': 17, 'e': 'g' }, 'e': 18, 'f': 19, 'g': 20, 'h': 21, 'i': 22, 'j': 23, 'k': 24, 'l': 25, } encoded_messages = [ b'\x30\x23\x80\x01\xff\xa1\x09\x80\x01\xff\x81\x01\x11\x82\x01\x01' b'\x82\x01\x12\x83\x01\x13\x84\x01\x14\x85\x01\x15\x86\x01\x16\x87' b'\x01\x17\x89\x01\x19', b'\x30\x23\x80\x01\xff\xa1\x09\x80\x01\xff\x81\x01\x11\x82\x01\x01' b'\x82\x01\x12\x83\x01\x13\x84\x01\x14\x85\x01\x15\x86\x01\x16\x87' b'\x01\x17\x89\x01\x19', b'{"a": true, "b": {"c":true, "d":17, "e":"g"}, "e":18, "f":19, "g":20,' b'"h":21, "i":22, "j":23, "k":24, "l":25}', b'\x80\xff\x03\x07\xff\x80\x09\x80\xff\x02\x06\xc0\x01\x11\x01\x01' b'\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19', b'\xc4\x7f\xc0\x06\xc0\xe0\x01\x11\x01\x40\x01\x12\x01\x13\x01\x14' b'\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19', b'\xc4\x7f\xc1\xb0\x38\x08\x88\x0a\x00\x00\x44\x80\x44\xc0\x45\x00' b'\x45\x40\x45\x80\x45\xc0\x46\x00\x46\x40', b'1718' b'19202122232425' b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'AF', decoded, encoded) # Type AG decoded = { 'a': True, 'b': b'\x84\x55', 'c': [True, False, True, False], 'd': 'f', 'h': None, 'i': 1.0, 'j': ('k', 60693), 'm': b'\xf0\xf1\xf2\xf3\xf4' } encoded_messages = [ b'\x30\x2e\x80\x01\xff\x81\x02\x84\x55\xa2\x0c\x01\x01\xff\x01\x01' b'\x00\x01\x01\xff\x01\x01\x00\x83\x02\x01\x00\x84\x00\x85\x03\x80' b'\x00\x01\xa6\x05\x80\x03\x00\xed\x15\x87\x05\xf0\xf1\xf2\xf3\xf4', b'\x30\x2e\x80\x01\xff\x81\x02\x84\x55\xa2\x0c\x01\x01\xff\x01\x01' b'\x00\x01\x01\xff\x01\x01\x00\x83\x02\x01\x00\x84\x00\x85\x03\x80' b'\x00\x01\xa6\x05\x80\x03\x00\xed\x15\x87\x05\xf0\xf1\xf2\xf3\xf4', b'{"a": true, "b": "8455", "c": [true, false, true, false], "d": "f",' b'"h": null, "i": 1.0, "j": {"k": 60693}, "m": "F0F1F2F3F4"}', b'\x80\xff\x02\x01\xfe\x03\x02\x84\x55\x06\x01\x04\xff\x00\xff\x00' b'\x03\x82\x01\x00\x00\x04\x3f\x80\x00\x00\x03\x80\xed\x15\x05\xf0' b'\xf1\xf2\xf3\xf4', b'\xc3\x7f\x03\x20\x84\x55\x01\x3a\x01\x40\x00\x04\x03\x80\x00\x01' b'\x03\x00\xed\x15\x05\xf0\xf1\xf2\xf3\xf4', b'\xc3\x7f\x03\x28\x45\x50\x01\x3a\x01\x40\x00\x04\x03\x80\x00\x01' b'\x03\x76\x8a\x80\x05\xf0\xf1\xf2\xf3\xf4', b'8455' b'1.0E060693F0F1F2F3F4' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'AG', decoded, encoded) # Type AL. decoded = -129 encoded_messages = [ b'\x02\x02\xff\x7f', b'\x02\x02\xff\x7f', b'-129', b'\xff\x7f', b'\x00\x00', b'\x00\x00', b'-129' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'AL', decoded, encoded) decoded = 127 encoded_messages = [ b'\x02\x01\x7f', b'\x02\x01\x7f', b'127', b'\x00\x7f', b'\x01\x00', b'\x80\x00', b'127' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'AL', decoded, encoded) # Type AM. decoded = -2 encoded_messages = [ b'\x02\x01\xfe', b'\x02\x01\xfe', b'-2', b'\xff\xfe', b'\x00', b'\x00', b'-2' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'AM', decoded, encoded) decoded = 128 encoded_messages = [ b'\x02\x02\x00\x80', b'\x02\x02\x00\x80', b'128', b'\x00\x80', b'\x82', b'\x82', b'128' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'AM', decoded, encoded) # Type AQ. decoded = 1234 encoded_messages = [ b'\x02\x02\x04\xd2', b'\x02\x02\x04\xd2', b'1234', b'\x00\x00\x04\xd2', b'\x40\x04\xd2', b'\x00\x04\xd2', b'1234' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'AQ', decoded, encoded) decoded = 100001 encoded_messages = [ b'\x02\x03\x01\x86\xa1', b'\x02\x03\x01\x86\xa1', b'100001', b'\x00\x01\x86\xa1', b'\x80\x01\x86\xa1', b'\x01\x86\xa1', b'100001' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'AQ', decoded, encoded) def test_parameterization(self): specs = [] for codec in CODECS: specs.append(asn1tools.compile_dict(deepcopy(PARAMETERIZATION), codec)) # A-Boolean. decoded = {'a': True} encoded_messages = [ b'\x30\x05\xa0\x03\x01\x01\xff', b'\x30\x05\xa0\x03\x01\x01\xff', b'{"a": true}', b'\xff', b'\x80', b'\x80', b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'A-Boolean', decoded, encoded) # A-Integer. decoded = {'a': 555} encoded_messages = [ b'\x30\x06\xa0\x04\x02\x02\x02\x2b', b'\x30\x06\xa0\x04\x02\x02\x02\x2b', b'{"a": 555}', b'\x02\x02\x2b', b'\x02\x02\x2b', b'\x02\x02\x2b', b'555' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'A-Integer', decoded, encoded) # B-BooleanInteger. decoded = { 'a': True, 'b': -40000 } encoded_messages = [ b'\x30\x0c\xa0\x03\x01\x01\xff\xa1\x05\x02\x03\xff\x63\xc0', b'\x30\x0c\xa0\x03\x01\x01\xff\xa1\x05\x02\x03\xff\x63\xc0', b'{"a": true, "b": -40000}', b'\x80\xff\x03\xff\x63\xc0', b'\xc0\x03\xff\x63\xc0', b'\xc0\xff\xd8\xf0\x00', b'-40000' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'B-BooleanInteger', decoded, encoded) # D. decoded = { 'a': ('a', {'a': True}), 'b': ('c', {'a': {'a': None, 'b': 5}}) } encoded_messages = [ b'\x30\x1c\xa0\x09\xa0\x07\x30\x05\xa0\x03\x01\x01\xff\xa1\x0f\xa0' b'\x0d\xa0\x0b\x30\x09\xa0\x02\x05\x00\xa1\x03\x02\x01\x05', b'\x30\x1c\xa0\x09\xa0\x07\x30\x05\xa0\x03\x01\x01\xff\xa1\x0f\xa0' b'\x0d\xa0\x0b\x30\x09\xa0\x02\x05\x00\xa1\x03\x02\x01\x05', b'{"a": {"a": {"a": true}}, "b": {"c": {"a": {"a": null, "b": 5}}}' b'}', b'\x80\x00\xff\x80\x80\x01\x05', b'\x28\x01\x05', b'\x28\x08\x28', b'5' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'D', decoded, encoded) decoded = { 'a': ('a', {'a': True}), 'b': ('d', {'a': None, 'b': 5}) } encoded_messages = [ b'\x30\x18\xa0\x09\xa0\x07\x30\x05\xa0\x03\x01\x01\xff\xa1\x0b\xa1' b'\x09\xa0\x02\x05\x00\xa1\x03\x02\x01\x05', b'\x30\x18\xa0\x09\xa0\x07\x30\x05\xa0\x03\x01\x01\xff\xa1\x0b\xa1' b'\x09\xa0\x02\x05\x00\xa1\x03\x02\x01\x05', b'{"a": {"a": {"a": true}}, "b": {"d": {"a": null, "b": 5}}}', b'\x80\x00\xff\x81\x80\x01\x05', b'\x38\x01\x05', b'\x38\x08\x28', b'5' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'D', decoded, encoded) decoded = { 'a': ('b', {'a': {'a': True}}), 'b': ('d', {'a': None, 'b': 5}) } encoded_messages = [ b'\x30\x1a\xa0\x0b\xa1\x09\xa0\x07\x30\x05\xa0\x03\x01\x01\xff\xa1' b'\x0b\xa1\x09\xa0\x02\x05\x00\xa1\x03\x02\x01\x05', b'\x30\x1a\xa0\x0b\xa1\x09\xa0\x07\x30\x05\xa0\x03\x01\x01\xff\xa1' b'\x0b\xa1\x09\xa0\x02\x05\x00\xa1\x03\x02\x01\x05', b'{"a": {"b": {"a": {"a": true}}}, "b": {"d": {"a": null, "b": 5}}}', b'\x81\x00\x00\xff\x81\x80\x01\x05', b'\x9c\x01\x05', b'\x9c\x04\x14', b'5' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'D', decoded, encoded) # F. decoded = [('b', {'c': [{'a': 2, 'b': True}]})] encoded_messages = [ b'\x30\x10\xa1\x0e\xa0\x0c\x30\x0a\xa0\x03\x02\x01\x02\xa1\x03\x01' b'\x01\xff', b'\x30\x10\xa1\x0e\xa0\x0c\x30\x0a\xa0\x03\x02\x01\x02\xa1\x03\x01' b'\x01\xff', b'[{"b": {"c": [{"a": 2, "b": true}]}}]', b'\x01\x01\x81\x01\x01\x80\x01\x02\xff', b'\x30\x01\x80\x01\x02\x80', b'\x30\x18\x08\x14', b'2
    ' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'F', decoded, encoded) # H. decoded = [True] encoded_messages = [ b'\x30\x03\x01\x01\xff', b'\x30\x03\x01\x01\xff', b'[true]', b'\x01\x01\xff', b'\x30', b'\x30', b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'H', decoded, encoded) # I. decoded = [True] encoded_messages = [ b'\x30\x03\x01\x01\xff', b'\x30\x03\x01\x01\xff', b'[true]', b'\x01\x01\xff', b'\xc0', b'\xc0', b'' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'I', decoded, encoded) # S. decoded = {'a': True, 'b': 7} encoded_messages = [ b'\x30\x08\xa0\x03\x01\x01\xff\x81\x01\x07', b'\x30\x08\xa0\x03\x01\x01\xff\x81\x01\x07', b'{"a": true, "b": 7}', b'\xff\x01\x07', b'\x80\x01\x07', b'\x80\x83\x80', b'7' ] for spec, codec, encoded in zip(specs, CODECS, encoded_messages): self.encode_decode_codec(spec, codec, 'S', decoded, encoded) if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_command_line.py000066400000000000000000000742701524544274600210410ustar00rootroot00000000000000import sys import os import re import unittest try: from StringIO import StringIO except ImportError: from io import StringIO try: from unittest.mock import patch except ImportError: from mock import patch import asn1tools def remove_date_time(string): return re.sub(r'.* This file was generated.*', '', string) def read_file(filename): with open(filename, 'r') as fin: return remove_date_time(fin.read()) class Asn1ToolsCommandLineTest(unittest.TestCase): maxDiff = None def test_command_line_convert_ber_foo_question(self): argv = [ 'asn1tools', 'convert', 'tests/files/foo.asn', 'Question', '300e0201011609497320312b313d333f' ] expected_output = ( 'question Question ::= {\n' ' id 1,\n' ' question "Is 1+1=3?"\n' '}\n' ) stdout = StringIO() with patch('sys.stdout', stdout): with patch('sys.argv', argv): asn1tools._main() print(stdout.getvalue()) self.assertEqual(expected_output, stdout.getvalue()) def test_command_line_convert_uper_foo_question(self): argv = [ 'asn1tools', 'convert', '--input-codec', 'uper', 'tests/files/foo.asn', 'Question', '01010993cd03156c5eb37e' ] expected_output = ( 'question Question ::= {\n' ' id 1,\n' ' question "Is 1+1=3?"\n' '}\n' ) stdout = StringIO() with patch('sys.stdout', stdout): with patch('sys.argv', argv): asn1tools._main() print(stdout.getvalue()) self.assertEqual(expected_output, stdout.getvalue()) def test_command_line_convert_ber_foo_question_stdin(self): argv = [ 'asn1tools', 'convert', 'tests/files/foo.asn', 'Question', '-' ] input_data = '''\ 2018-02-24 11:22:09 300e0201011609497320312b313d333f 2018-02-24 11:24:15 300e0201011609497320312b313d333f 2018-02-24 11:24:16 ff0e0201011609497320312b313d333f 2018-02-24 13:24:16 300e0201011609497320312b313d333''' expected_output = ( "2018-02-24 11:22:09\n" "question Question ::= {\n" " id 1,\n" ' question "Is 1+1=3?"\n' "}\n" "2018-02-24 11:24:15\n" "question Question ::= {\n" " id 1,\n" ' question "Is 1+1=3?"\n' "}\n" "\n" "2018-02-24 11:24:16\n" "ff0e0201011609497320312b313d333f\n" "Question: Expected SEQUENCE(Question) with tag '30', but got 'ff'. (At offset: 0)\n" "2018-02-24 13:24:16\n" "300e0201011609497320312b313d333\n" ) stdout = StringIO() with patch('sys.stdin', StringIO(input_data)): with patch('sys.stdout', stdout): with patch('sys.argv', argv): asn1tools._main() print(stdout.getvalue()) self.assertEqual(expected_output, stdout.getvalue()) def test_command_line_convert_rfc1155_1157(self): argv = [ 'asn1tools', 'convert', 'tests/files/ietf/rfc1155.asn', 'tests/files/ietf/rfc1157.asn', 'Message', '30819f02010004067075626c6963a3819102013c020100020100308185302206' '122b06010401817d08330a0201070a86deb735040c3137322e33312e31392e37' '33301706122b06010401817d08330a0201050a86deb960020102302306122b06' '010401817d08330a0201070a86deb736040d3235352e3235352e3235352e3030' '2106122b06010401817d08330a0201070a86deb738040b3137322e33312e3139' '2e32' ] expected_output = ( "message Message ::= {\n" " version 0,\n" " community '7075626C6963'H,\n" " data set-request : {\n" " request-id 60,\n" " error-status 0,\n" " error-index 0,\n" " variable-bindings {\n" " {\n" " name 1.3.6.1.4.1.253.8.51.10.2.1.7.10.14130101,\n" " value simple : string : '3137322E33312E31392E3733'H\n" " },\n" " {\n" " name 1.3.6.1.4.1.253.8.51.10.2.1.5.10.14130400,\n" " value simple : number : 2\n" " },\n" " {\n" " name 1.3.6.1.4.1.253.8.51.10.2.1.7.10.14130102,\n" " value simple : string : '3235352E3235352E3235352E30'H\n" " },\n" " {\n" " name 1.3.6.1.4.1.253.8.51.10.2.1.7.10.14130104,\n" " value simple : string : '3137322E33312E31392E32'H\n" " }\n" " }\n" " }\n" "}\n" ) stdout = StringIO() with patch('sys.stdout', stdout): with patch('sys.argv', argv): asn1tools._main() print(stdout.getvalue()) self.assertEqual(expected_output, stdout.getvalue()) def test_command_line_convert_rrc_8_6_0_bcch_dl_sch_message(self): argv = [ 'asn1tools', 'convert', 'tests/files/3gpp/rrc_8_6_0.asn', 'BCCH-DL-SCH-Message', '30820193a082018fa082018ba0820187a0820183a082017fa082017ba081' 'dda00f8001ffa20a80010f810105820203f0a181ada026a00e800105a109' '800106810101820100a106800100810109a2098001058101048201058301' '08a103800100a206800103810101a31280020344a10c8001218101008201' '0a830140a4068001c4810102a51ca00c80010181010082010a830100a10c' '8001ff810116820100830105a60d800100810162820104830207ffa70ba1' '098001008101048201ffa81d800182810100820181a30f80010081010082' '01018301008401018401ff890100a2128001008101018201018301018401' '06850101a303820103850100a137a01b800100a116a00c80010381010382' '0101830110a106800100810101a106810107820103a2108001df82010084' '010085020680860104a200a31da01b30198001018101d383010085011f86' '011d8701008801ff8a020600a403820103a503800103a60ba30981070601' '2345678900a703800134a80e8003002334810300123482023212a9138003' '0067888103005435820100830113840112' ] expected_output = ( "bcch-dl-sch-message BCCH-DL-SCH-Message ::= {\n" " message c1 : systemInformation : {\n" " criticalExtensions systemInformation-r8 : {\n" " sib-TypeAndInfo {\n" " sib2 : {\n" " ac-BarringInfo {\n" " ac-BarringForEmergency TRUE,\n" " ac-BarringForMO-Data {\n" " ac-BarringFactor p95,\n" " ac-BarringTime s128,\n" " ac-BarringForSpecialAC '11110'B\n" " }\n" " },\n" " radioResourceConfigCommon {\n" " rach-ConfigCommon {\n" " preambleInfo {\n" " numberOfRA-Preambles n24,\n" " preamblesGroupAConfig {\n" " sizeOfRA-PreamblesGroupA n28,\n" " messageSizeGroupA b144,\n" " messagePowerOffsetGroupB minusinfinity\n" " }\n" " },\n" " powerRampingParameters {\n" " powerRampingStep dB0,\n" " preambleInitialReceivedTargetPower dBm-102\n" " },\n" " ra-SupervisionInfo {\n" " preambleTransMax n8,\n" " ra-ResponseWindowSize sf6,\n" " mac-ContentionResolutionTimer sf48\n" " },\n" " maxHARQ-Msg3Tx 8\n" " },\n" " bcch-Config {\n" " modificationPeriodCoeff n2\n" " },\n" " pcch-Config {\n" " defaultPagingCycle rf256,\n" " nB twoT\n" " },\n" " prach-Config {\n" " rootSequenceIndex 836,\n" " prach-ConfigInfo {\n" " prach-ConfigIndex 33,\n" " highSpeedFlag FALSE,\n" " zeroCorrelationZoneConfig 10,\n" " prach-FreqOffset 64\n" " }\n" " },\n" " pdsch-ConfigCommon {\n" " referenceSignalPower -60,\n" " p-b 2\n" " },\n" " pusch-ConfigCommon {\n" " pusch-ConfigBasic {\n" " n-SB 1,\n" " hoppingMode interSubFrame,\n" " pusch-HoppingOffset 10,\n" " enable64QAM FALSE\n" " },\n" " ul-ReferenceSignalsPUSCH {\n" " groupHoppingEnabled TRUE,\n" " groupAssignmentPUSCH 22,\n" " sequenceHoppingEnabled FALSE,\n" " cyclicShift 5\n" " }\n" " },\n" " pucch-ConfigCommon {\n" " deltaPUCCH-Shift ds1,\n" " nRB-CQI 98,\n" " nCS-AN 4,\n" " n1PUCCH-AN 2047\n" " },\n" " soundingRS-UL-ConfigCommon setup : {\n" " srs-BandwidthConfig bw0,\n" " srs-SubframeConfig sc4,\n" " ackNackSRS-SimultaneousTransmission TRUE\n" " },\n" " uplinkPowerControlCommon {\n" " p0-NominalPUSCH -126,\n" " alpha al0,\n" " p0-NominalPUCCH -127,\n" " deltaFList-PUCCH {\n" " deltaF-PUCCH-Format1 deltaF-2,\n" " deltaF-PUCCH-Format1b deltaF1,\n" " deltaF-PUCCH-Format2 deltaF0,\n" " deltaF-PUCCH-Format2a deltaF-2,\n" " deltaF-PUCCH-Format2b deltaF0\n" " },\n" " deltaPreambleMsg3 -1\n" " },\n" " ul-CyclicPrefixLength len1\n" " },\n" " ue-TimersAndConstants {\n" " t300 ms100,\n" " t301 ms200,\n" " t310 ms50,\n" " n310 n2,\n" " t311 ms30000,\n" " n311 n2\n" " },\n" " freqInfo {\n" " additionalSpectrumEmission 3\n" " },\n" " timeAlignmentTimerCommon sf500\n" " },\n" " sib3 : {\n" " cellReselectionInfoCommon {\n" " q-Hyst dB0,\n" " speedStateReselectionPars {\n" " mobilityStateParameters {\n" " t-Evaluation s180,\n" " t-HystNormal s180,\n" " n-CellChangeMedium 1,\n" " n-CellChangeHigh 16\n" " },\n" " q-HystSF {\n" " sf-Medium dB-6,\n" " sf-High dB-4\n" " }\n" " }\n" " },\n" " cellReselectionServingFreqInfo {\n" " threshServingLow 7,\n" " cellReselectionPriority 3\n" " },\n" " intraFreqCellReselectionInfo {\n" " q-RxLevMin -33,\n" " s-IntraSearch 0,\n" " presenceAntennaPort1 FALSE,\n" " neighCellConfig '10'B,\n" " t-ReselectionEUTRA 4\n" " }\n" " },\n" " sib4 : {\n" " },\n" " sib5 : {\n" " interFreqCarrierFreqList {\n" " {\n" " dl-CarrierFreq 1,\n" " q-RxLevMin -45,\n" " t-ReselectionEUTRA 0,\n" " threshX-High 31,\n" " threshX-Low 29,\n" " allowedMeasBandwidth mbw6,\n" " presenceAntennaPort1 TRUE,\n" " neighCellConfig '00'B,\n" " q-OffsetFreq dB0\n" " }\n" " }\n" " },\n" " sib6 : {\n" " t-ReselectionUTRA 3\n" " },\n" " sib7 : {\n" " t-ReselectionGERAN 3\n" " },\n" " sib8 : {\n" " parameters1XRTT {\n" " longCodeState1XRTT '000000010010001101000101011001111000100100'B\n" " }\n" " },\n" " sib9 : {\n" " hnb-Name '34'H\n" " },\n" " sib10 : {\n" " messageIdentifier '0010001100110100'B,\n" " serialNumber '0001001000110100'B,\n" " warningType '3212'H\n" " },\n" " sib11 : {\n" " messageIdentifier '0110011110001000'B,\n" " serialNumber '0101010000110101'B,\n" " warningMessageSegmentType notLastSegment,\n" " warningMessageSegmentNumber 19,\n" " warningMessageSegment '12'H\n" " }\n" " }\n" " }\n" " }\n" "}\n" ) stdout = StringIO() with patch('sys.stdout', stdout): with patch('sys.argv', argv): asn1tools._main() print(stdout.getvalue()) for line in expected_output: self.assertIn(line, stdout.getvalue()) def test_command_line_convert_bad_type_name(self): argv = [ 'asn1tools', 'convert', 'tests/files/foo.asn', 'Question2', '01010993cd03156c5eb37e' ] stdout = StringIO() with patch('sys.stdout', stdout): with patch('sys.argv', argv): with self.assertRaises(SystemExit) as cm: asn1tools._main() self.assertEqual( str(cm.exception), "error: Type 'Question2' not found in types dictionary.") def test_command_line_convert_bad_data(self): argv = [ 'asn1tools', 'convert', 'tests/files/foo.asn', 'Question', '012' ] stdout = StringIO() with patch('sys.stdout', stdout): with patch('sys.argv', argv): with self.assertRaises(SystemExit) as cm: asn1tools._main() self.assertRegex(str(cm.exception), r"error: '012': Odd.*(length string|number of hexadecimal digits)") def test_command_line_convert_py(self): # Preparations. argv = [ 'asn1tools', 'parse', 'tests/files/foo.asn', 'test_command_line_convert_py.py' ] if os.path.exists('test_command_line_convert_py.py'): os.remove('test_command_line_convert_py.py') with patch('sys.argv', argv): asn1tools._main() # Test convert. argv = [ 'asn1tools', 'convert', 'test_command_line_convert_py.py', 'Question', '300e0201011609497320312b313d333f' ] expected_output = ( 'question Question ::= {\n' ' id 1,\n' ' question "Is 1+1=3?"\n' '}\n' ) stdout = StringIO() with patch('sys.stdout', stdout): with patch('sys.argv', argv): asn1tools._main() print(stdout.getvalue()) self.assertEqual(expected_output, stdout.getvalue()) def test_command_line_convert_py_too_many_files(self): argv = [ 'asn1tools', 'convert', 'spec.py', 'too-many.py', 'Question', '300e0201011609497320312b313d333f' ] stdout = StringIO() with patch('sys.stdout', stdout): with patch('sys.argv', argv): with self.assertRaises(SystemExit) as cm: asn1tools._main() self.assertEqual( str(cm.exception), "error: Expected one .py-file, but got 2.") def test_command_line_shell(self): argv = ['asn1tools', 'shell'] commands = StringIO('''\ help compile tests/files/foo.asn convert Question 300e0201011609497320312b313d333f convert Foo 30 compile -i uper tests/files/foo.asn convert Question 01010993cd03156c5eb37e compile -i ber /x/y/missing missing-command exit ''') class PromptSession(object): def __init__(self, *_args, **_kwargs): pass def prompt(*_args, **_kwargs): return commands.readline() expected_output = ( '\n' 'Welcome to the asn1tools shell!\n' '\n' "Commands:\n" " compile\n" " convert\n" " exit\n" " help\n" 'question Question ::= {\n' ' id 1,\n' ' question "Is 1+1=3?"\n' '}\n' 'error: Type \'Foo\' not found in types dictionary.\n' 'question Question ::= {\n' ' id 1,\n' ' question "Is 1+1=3?"\n' '}\n' 'error: [Errno 2] No such file or directory: \'/x/y/missing\'\n' 'missing-command: command not found\n' ) stdout = StringIO() with patch('asn1tools.PromptSession', PromptSession): with patch('sys.stdout', stdout): with patch('sys.argv', argv): asn1tools._main() print(stdout.getvalue()) self.assertEqual(expected_output, stdout.getvalue()) def test_command_line_shell_compile_without_arguments(self): argv = ['asn1tools', 'shell'] commands = StringIO('''\ compile exit ''') class PromptSession(object): def __init__(self, *_args, **_kwargs): pass def prompt(*_args, **_kwargs): return commands.readline() stdout = StringIO() with patch('asn1tools.PromptSession', PromptSession): with patch('sys.stdout', stdout): with patch('sys.argv', argv): asn1tools._main() self.assertIn('compile: error: ', stdout.getvalue()) def test_command_line_shell_convert_without_compile(self): argv = ['asn1tools', 'shell'] commands = StringIO('''\ convert A 00 exit ''') expected_output = ( '\n' 'Welcome to the asn1tools shell!\n' '\n' "No compiled specification found. Please use the 'compile' command " "to compile one.\n" ) class PromptSession(object): def __init__(self, *_args, **_kwargs): pass def prompt(*_args, **_kwargs): return commands.readline() stdout = StringIO() with patch('asn1tools.PromptSession', PromptSession): with patch('sys.stdout', stdout): with patch('sys.argv', argv): asn1tools._main() self.assertEqual(expected_output, stdout.getvalue()) def test_command_line_shell_compile_help_no_exit(self): argv = ['asn1tools', 'shell'] commands = StringIO('''\ compile --help exit ''') class PromptSession(object): def __init__(self, *_args, **_kwargs): pass def prompt(*_args, **_kwargs): return commands.readline() stdout = StringIO() with patch('asn1tools.PromptSession', PromptSession): with patch('sys.stdout', stdout): with patch('sys.argv', argv): asn1tools._main() self.assertIn('usage:', stdout.getvalue()) def test_command_line_parse(self): argv = [ 'asn1tools', 'parse', 'tests/files/foo.asn', 'test_command_line_parse.py' ] expected_specification = { 'Foo': {'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'Answer': {'members': [{'name': 'id', 'type': 'INTEGER'}, {'name': 'answer', 'type': 'BOOLEAN'}], 'type': 'SEQUENCE'}, 'Question': {'members': [{'name': 'id', 'type': 'INTEGER'}, {'name': 'question', 'type': 'IA5String'}], 'type': 'SEQUENCE'}}, 'values': {}}} if os.path.exists('test_command_line_parse.py'): os.remove('test_command_line_parse.py') with patch('sys.argv', argv): asn1tools._main() from test_command_line_parse import SPECIFICATION self.assertEqual(SPECIFICATION, expected_specification) def test_command_line_generate_c_source_oer(self): argv = [ 'asn1tools', '--debug', 'generate_c_source', '--namespace', 'oer', '--generate-fuzzer', 'tests/files/c_source/c_source.asn', 'tests/files/c_source/programming_types.asn' ] filename_h = 'oer.h' filename_c = 'oer.c' fuzzer_filename_c = 'oer_fuzzer.c' fuzzer_filename_mk = 'oer_fuzzer.mk' if os.path.exists(filename_h): os.remove(filename_h) if os.path.exists(filename_c): os.remove(filename_c) if os.path.exists(fuzzer_filename_c): os.remove(fuzzer_filename_c) if os.path.exists(fuzzer_filename_mk): os.remove(fuzzer_filename_mk) with patch('sys.argv', argv): asn1tools._main() self.assertEqual( read_file('tests/files/c_source/' + filename_h), read_file(filename_h)) self.assertEqual( read_file('tests/files/c_source/' + filename_c), read_file(filename_c)) self.assertEqual( read_file('tests/files/c_source/' + fuzzer_filename_c), read_file(fuzzer_filename_c)) self.assertEqual( read_file('tests/files/c_source/' + fuzzer_filename_mk), read_file(fuzzer_filename_mk)) def test_command_line_generate_c_source_oer_minus(self): argv = [ 'asn1tools', 'generate_c_source', 'tests/files/c_source/c_source-minus.asn' ] filename_h = 'c_source-minus.h' filename_c = 'c_source-minus.c' fuzzer_filename_c = 'c_source-minus_fuzzer.c' fuzzer_filename_mk = 'c_source-minus_fuzzer.mk' if os.path.exists(filename_h): os.remove(filename_h) if os.path.exists(filename_c): os.remove(filename_c) if os.path.exists(fuzzer_filename_c): os.remove(fuzzer_filename_c) if os.path.exists(fuzzer_filename_mk): os.remove(fuzzer_filename_mk) with patch('sys.argv', argv): asn1tools._main() self.assertEqual( read_file('tests/files/c_source/' + filename_h), read_file(filename_h)) self.assertEqual( read_file('tests/files/c_source/' + filename_c), read_file(filename_c)) self.assertFalse(os.path.exists(fuzzer_filename_c)) self.assertFalse(os.path.exists(fuzzer_filename_mk)) def test_command_line_generate_c_source_uper(self): argv = [ 'asn1tools', 'generate_c_source', '--namespace', 'uper', '--codec', 'uper', '--generate-fuzzer', 'tests/files/c_source/c_source.asn' ] filename_h = 'uper.h' filename_c = 'uper.c' fuzzer_filename_c = 'uper_fuzzer.c' fuzzer_filename_mk = 'uper_fuzzer.mk' if os.path.exists(filename_h): os.remove(filename_h) if os.path.exists(filename_c): os.remove(filename_c) if os.path.exists(fuzzer_filename_c): os.remove(fuzzer_filename_c) if os.path.exists(fuzzer_filename_mk): os.remove(fuzzer_filename_mk) with patch('sys.argv', argv): asn1tools._main() self.assertEqual( read_file('tests/files/c_source/' + filename_h), read_file(filename_h)) self.assertEqual( read_file('tests/files/c_source/' + filename_c), read_file(filename_c)) self.assertEqual( read_file('tests/files/c_source/' + fuzzer_filename_c), read_file(fuzzer_filename_c)) self.assertEqual( read_file('tests/files/c_source/' + fuzzer_filename_mk), read_file(fuzzer_filename_mk)) def test_command_line_generate_c_source(self): specs = [ 'boolean', 'octet_string' ] for spec in specs: argv = [ 'asn1tools', 'generate_c_source', '--namespace', '{}_uper'.format(spec), '--codec', 'uper', 'tests/files/c_source/{}.asn'.format(spec) ] filename_h = spec + '_uper.h' filename_c = spec + '_uper.c' if os.path.exists(filename_h): os.remove(filename_h) if os.path.exists(filename_c): os.remove(filename_c) with patch('sys.argv', argv): asn1tools._main() self.assertEqual( read_file('tests/files/c_source/' + filename_h), read_file(filename_h)) self.assertEqual( read_file('tests/files/c_source/' + filename_c), read_file(filename_c)) def test_command_line_generate_rust_source_uper(self): argv = [ 'asn1tools', 'generate_rust_source', 'tests/files/rust_source/rust_source.asn' ] filename_rs = 'rust_source.rs' if os.path.exists(filename_rs): os.remove(filename_rs) with patch('sys.argv', argv): asn1tools._main() self.assertEqual( read_file('tests/files/rust_source/' + filename_rs), read_file(filename_rs)) if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_compile.py000066400000000000000000000211751524544274600200400ustar00rootroot00000000000000import sys import unittest import asn1tools from copy import deepcopy import shutil import os sys.path.append('tests/files') sys.path.append('tests/files/ietf') sys.path.append('tests/files/3gpp') from extensibility_implied import EXPECTED as EXTENSIBILITY_IMPLIED from extensibility_implied_pp import EXPECTED as EXTENSIBILITY_IMPLIED_PP from all_types_automatic_tags import EXPECTED as ALL_TYPES_AUTOMATIC_TAGS from all_types_automatic_tags_pp import EXPECTED as ALL_TYPES_AUTOMATIC_TAGS_PP from module_tags_explicit import EXPECTED as MODULE_TAGS_EXPLICIT from module_tags_explicit_pp import EXPECTED as MODULE_TAGS_EXPLICIT_PP from module_tags_implicit import EXPECTED as MODULE_TAGS_IMPLICIT from module_tags_implicit_pp import EXPECTED as MODULE_TAGS_IMPLICIT_PP from module_tags_automatic import EXPECTED as MODULE_TAGS_AUTOMATIC from module_tags_automatic_pp import EXPECTED as MODULE_TAGS_AUTOMATIC_PP from x683 import EXPECTED as X683 from x683_pp import EXPECTED as X683_PP from parameterization import EXPECTED as PARAMETERIZATION from parameterization_pp import EXPECTED as PARAMETERIZATION_PP from time_types import EXPECTED as TIME_TYPES from time_types_pp import EXPECTED as TIME_TYPES_PP class Asn1ToolsCompileTest(unittest.TestCase): maxDiff = None def test_pre_process_extensibility_implied(self): actual = asn1tools.pre_process_dict(deepcopy(EXTENSIBILITY_IMPLIED)) self.assertEqual(actual, EXTENSIBILITY_IMPLIED_PP) def test_pre_process_all_types_automatic_tags(self): actual = asn1tools.pre_process_dict(deepcopy(ALL_TYPES_AUTOMATIC_TAGS)) self.assertEqual(actual, ALL_TYPES_AUTOMATIC_TAGS_PP) def test_pre_process_module_tags_explicit(self): actual = asn1tools.pre_process_dict(deepcopy(MODULE_TAGS_EXPLICIT)) self.assertEqual(actual, MODULE_TAGS_EXPLICIT_PP) def test_pre_process_module_tags_implicit(self): actual = asn1tools.pre_process_dict(deepcopy(MODULE_TAGS_IMPLICIT)) self.assertEqual(actual, MODULE_TAGS_IMPLICIT_PP) def test_pre_process_module_tags_automatic(self): actual = asn1tools.pre_process_dict(deepcopy(MODULE_TAGS_AUTOMATIC)) self.assertEqual(actual, MODULE_TAGS_AUTOMATIC_PP) def test_pre_process_x683(self): # Todo: Remove expected RecursionError parameterization of # recursive types has been implemented. if sys.version_info[0] == 2: return with self.assertRaises(RecursionError): actual = asn1tools.pre_process_dict(deepcopy(X683)) self.assertEqual(actual, X683_PP) def test_pre_process_parameterization(self): actual = asn1tools.pre_process_dict(deepcopy(PARAMETERIZATION)) self.assertEqual(actual, PARAMETERIZATION_PP) def test_pre_process_time_types(self): actual = asn1tools.pre_process_dict(deepcopy(TIME_TYPES)) self.assertEqual(actual, TIME_TYPES_PP) def test_unsupported_codec(self): with self.assertRaises(asn1tools.CompileError) as cm: asn1tools.compile_files('tests/files/foo.asn', 'bad_codec') self.assertEqual(str(cm.exception), "Unsupported codec 'bad_codec'.") def test_encode_decode_bad_type_name(self): foo = asn1tools.compile_files('tests/files/foo.asn') # Encode. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('BadTypeName', b'') self.assertEqual( str(cm.exception), "Type 'BadTypeName' not found in types dictionary.") # Decode. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('BadTypeName', b'') self.assertEqual( str(cm.exception), "Type 'BadTypeName' not found in types dictionary.") def test_encoding(self): asn1tools.compile_files('tests/files/foo.asn', encoding='ascii') def test_import_imported(self): asn1tools.compile_files('tests/files/import_imported.asn') def test_missing_type(self): with self.assertRaises(asn1tools.CompileError) as cm: asn1tools.compile_string('A DEFINITIONS ::= BEGIN A ::= B END') self.assertEqual(str(cm.exception), "Type 'B' not found in module 'A'.") def test_missing_value(self): with self.assertRaises(asn1tools.CompileError) as cm: asn1tools.compile_string( 'A DEFINITIONS ::= BEGIN A ::= INTEGER (1..a) END', 'uper') self.assertEqual(str(cm.exception), "Value 'a' not found in module 'A'.") def test_missing_import_type(self): with self.assertRaises(asn1tools.CompileError) as cm: asn1tools.compile_string( 'A DEFINITIONS ::= BEGIN IMPORTS B FROM C; D ::= SEQUENCE { a B } END ' 'C DEFINITIONS ::= BEGIN END', 'uper') self.assertEqual(str(cm.exception), "Type 'B' imported by module 'A' not found in module 'C'.") def test_missing_import_value(self): with self.assertRaises(asn1tools.CompileError) as cm: asn1tools.compile_string( 'A DEFINITIONS ::= BEGIN IMPORTS b FROM C; D ::= INTEGER (b..1) END ' 'C DEFINITIONS ::= BEGIN END', 'uper') self.assertEqual(str(cm.exception), "Value 'b' imported by module 'A' not found in module 'C'.") def test_missing_import_type_module(self): with self.assertRaises(asn1tools.CompileError) as cm: asn1tools.compile_string( 'A DEFINITIONS ::= BEGIN IMPORTS B FROM C; D ::= SEQUENCE { a B } END ', 'uper') self.assertEqual(str(cm.exception), "Module 'A' cannot import type 'B' from missing module 'C'.") def test_missing_import_value_module(self): with self.assertRaises(asn1tools.CompileError) as cm: asn1tools.compile_string( 'A DEFINITIONS ::= BEGIN IMPORTS b FROM C; D ::= INTEGER (b..1) END ', 'uper') self.assertEqual(str(cm.exception), "Module 'A' cannot import value 'b' from missing module 'C'.") def test_duplicated_type(self): """Duplicated types are not part of types dictionary. """ spec = asn1tools.compile_string( "Foo DEFINITIONS ::= BEGIN Fum ::= INTEGER END " "Bar DEFINITIONS ::= BEGIN Fum ::= BOOLEAN END " "Fie DEFINITIONS ::= BEGIN Fum ::= REAL END ") self.assertEqual(spec.types, {}) def test_cache(self): cache_dir = 'test_cache' if os.path.exists(cache_dir): shutil.rmtree(cache_dir) foo = asn1tools.compile_files('tests/files/foo.asn', cache_dir=cache_dir) foo_cached = asn1tools.compile_files('tests/files/foo.asn', cache_dir=cache_dir) encoded = foo.encode('Question', {'id': 1, 'question': '???'}) encoded_cached = foo_cached.encode('Question', {'id': 1, 'question': '???'}) self.assertEqual(encoded, encoded_cached) def test_missing_parameterized_type(self): with self.assertRaises(asn1tools.CompileError) as cm: asn1tools.compile_string( 'A DEFINITIONS ::= BEGIN' ' B ::= NULL ' ' B-Integer ::= B { INTEGER } ' 'END ', 'uper') self.assertEqual(str(cm.exception), "Type 'B' in module 'A' is not parameterized.") def test_wrong_parameterized_type_number_of_parameters(self): with self.assertRaises(asn1tools.CompileError) as cm: asn1tools.compile_string( 'A DEFINITIONS ::= BEGIN' ' B { C, D } ::= SEQUENCE { ' ' a C, ' ' b D ' ' } ' ' B-Integer ::= B { INTEGER } ' 'END ', 'uper') self.assertEqual( str(cm.exception), "Parameterized type 'B' in module 'A' takes 2 parameters, " "but 1 are given in type 'B-Integer' in module 'A'.") def test_missing_parameterized_value(self): with self.assertRaises(asn1tools.CompileError) as cm: asn1tools.compile_string( 'A DEFINITIONS ::= BEGIN' ' A { a } ::= INTEGER (a..5) ' ' B ::= A { missing-value } ' 'END ', 'uper') self.assertEqual(str(cm.exception), "Value 'missing-value' not found in module 'A'.") if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_constraints_checker.py000066400000000000000000000324701524544274600224430ustar00rootroot00000000000000import unittest from datetime import datetime from .utils import Asn1ToolsBaseTest import asn1tools class Asn1ToolsCheckConstraintsTest(Asn1ToolsBaseTest): maxDiff = None def assert_encode_decode_ok(self, foo, datas): for type_name, decoded in datas: encoded = foo.encode(type_name, decoded, check_constraints=True) foo.decode(type_name, encoded, check_constraints=True) def assert_encode_decode_bad(self, foo, datas, decode_check=True): for type_name, decoded, message in datas: # Encode check. with self.assertRaises(asn1tools.ConstraintsError) as cm: foo.encode(type_name, decoded, check_constraints=True) self.assertEqual(str(cm.exception), message) # Decode check. if decode_check: encoded = foo.encode(type_name, decoded, check_constraints=False) with self.assertRaises(asn1tools.ConstraintsError) as cm: foo.decode(type_name, encoded, check_constraints=True) self.assertEqual(str(cm.exception), message) def test_all_codecs(self): codecs = [ 'ber', 'der', 'gser', 'jer', 'per', 'uper', 'xer' ] for codec in codecs: foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= INTEGER " "END", codec) encoded = foo.encode('A', 0, check_constraints=True) if codec != 'gser': foo.decode('A', encoded, check_constraints=True) def test_boolean(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BOOLEAN " "END") # Ok. datas = [ ('A', True), ('A', False) ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ] self.assert_encode_decode_bad(foo, datas) def test_integer(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= INTEGER " "B ::= INTEGER (5..99) " "C ::= INTEGER (-10..10) " "D ::= INTEGER (5..99, ...) " "E ::= INTEGER (1000..1000) " "F ::= SEQUENCE { " " a INTEGER (4..4), " " b INTEGER (40..40), " " c INTEGER (400..400) " "} " "G ::= B (6..7) " "H ::= INTEGER (MIN..10) " "I ::= INTEGER (10..MAX) " "J ::= INTEGER (MIN..MAX) " "K ::= INTEGER (1..2 | 4..5) " "END") # Ok. datas = [ ('A', 32768), ('A', 0), ('A', -32769), ('B', 5), ('B', 6), ('B', 99), ('C', -10), ('C', 10), ('D', 99), ('E', 1000), ('F', {'a': 4, 'b': 40, 'c': 400}), ('H', -1000), ('H', 10), ('I', 10), ('I', 1000), ('J', -1000), ('J', 1000), ('K', 1), ('K', 2) ] self.assert_encode_decode_ok(foo, datas) # ToDo: These should be good. datas = [ ('K', 4, 'K: Expected an integer between 1 and 2, but got 4.'), ('K', 5, 'K: Expected an integer between 1 and 2, but got 5.') ] self.assert_encode_decode_bad(foo, datas) # Not ok. datas = [ ('B', 4, 'B: Expected an integer between 5 and 99, but got 4.'), ('B', 100, 'B: Expected an integer between 5 and 99, but got 100.'), ('C', -11, 'C: Expected an integer between -10 and 10, but got -11.'), ('C', 11, 'C: Expected an integer between -10 and 10, but got 11.'), ('E', 0, 'E: Expected an integer between 1000 and 1000, but got 0.'), ('F', {'a': 4, 'b': 41, 'c': 400}, 'F.b: Expected an integer between 40 and 40, but got 41.'), ('H', 11, 'H: Expected an integer between MIN and 10, but got 11.'), ('I', 9, 'I: Expected an integer between 10 and MAX, but got 9.'), # ToDo: 4..5 are allowed as well. ('K', 3, 'K: Expected an integer between 1 and 2, but got 3.') ] self.assert_encode_decode_bad(foo, datas) def test_real(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= REAL " "END") # Ok. datas = [ ('A', 1.0) ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ] self.assert_encode_decode_bad(foo, datas) def test_null(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= NULL " "END") # Ok. datas = [ ('A', None) ] self.assert_encode_decode_ok(foo, datas) def test_bit_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BIT STRING " "B ::= BIT STRING (SIZE (10)) " "END") # Ok. datas = [ ('A', (b'', 0)), ('B', (b'\x01\x23', 10)) ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ('B', (b'\x01\x23', 9), 'B: Expected between 10 and 10 bits, but got 9.') ] self.assert_encode_decode_bad(foo, datas) def test_octet_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OCTET STRING " "B ::= OCTET STRING (SIZE (10)) " "C ::= OCTET STRING (SIZE (10, ...)) " "D ::= OCTET STRING (SIZE (10..MAX)) " "END") # Ok. datas = [ ('A', b''), ('B', 10 * b'\x23'), ('C', 11 * b'\x23'), ('D', 44 * b'\x23') ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ('B', 11 * b'\x01', 'B: Expected between 10 and 10 bytes, but got 11.'), ('D', 9 * b'\x01', 'D: Expected between 10 and MAX bytes, but got 9.') ] self.assert_encode_decode_bad(foo, datas) def test_enumerated(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= ENUMERATED { a, b } " "END") # Ok. datas = [ ('A', 'a') ] self.assert_encode_decode_ok(foo, datas) def test_sequence(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE { " " a A OPTIONAL " "} " "END") # Ok. datas = [ ('A', {'a': {}}) ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ] self.assert_encode_decode_bad(foo, datas) def test_sequence_of(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE (SIZE (2)) OF INTEGER (3..5)" "B ::= SEQUENCE (SIZE (2, ...)) OF INTEGER (3..5)" "C ::= SEQUENCE (SIZE (MIN..2)) OF INTEGER (3..5)" "END") # Ok. datas = [ ('A', [3, 4]), ('B', [3, 4, 5]), ('C', [3, 4]) ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ('A', [3, 4, 5], 'A: Expected a list of between 2 and 2 elements, but got 3.'), ('A', [3, 6], 'A: Expected an integer between 3 and 5, but got 6.'), ('C', [3, 4, 5], 'C: Expected a list of between MIN and 2 elements, but got 3.') ] self.assert_encode_decode_bad(foo, datas) def test_numeric_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= NumericString " "END") # Ok. datas = [ ('A', '0123456789 ') ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ('A', 'a', "A: Expected a character in ' 0123456789', but got 'a' (0x61)."), ('A', '-', "A: Expected a character in ' 0123456789', but got '-' (0x2d).") ] self.assert_encode_decode_bad(foo, datas) def test_printable_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= PrintableString " "END") # Ok. datas = [ ('A', '09azAZ') ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ('A', '{', "A: Expected a character in '" "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" " '()+,-./:=?', but got '{' (0x7b).") ] self.assert_encode_decode_bad(foo, datas) def test_ia5_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= IA5String " "END") # Ok. datas = [ ('A', '09azAZ') ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ('A', b'\x81'.decode('latin-1'), "A: Expected a character in '................................ !\"#$%" "&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcde" "fghijklmnopqrstuvwxyz{|}~.', but got '.' (0x81).") ] self.assert_encode_decode_bad(foo, datas, decode_check=False) def test_visible_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= VisibleString " "B ::= VisibleString (SIZE (2..5)) " "C ::= VisibleString (FROM (\"a\"..\"j\" | \"u\"..\"w\")) " "D ::= VisibleString (SIZE (2..5, ...)) " "END") # Ok. datas = [ ('A', '123'), ('B', '12'), ('B', '12345'), ('C', 'abijuvw'), ('D', '123456') ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ('B', '1', 'B: Expected between 2 and 5 characters, but got 1.'), ('B', '123456', 'B: Expected between 2 and 5 characters, but got 6.'), ('C', 'k', "C: Expected a character in 'abcdefghijuvw', but got 'k' (0x6b).") ] self.assert_encode_decode_bad(foo, datas) def test_utf8_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UTF8String " "B ::= UTF8String (SIZE (2..5)) " "END") # Ok. datas = [ ('A', 'Hello'), ('B', '12'), ('B', '12345') ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ('B', '1', 'B: Expected between 2 and 5 characters, but got 1.'), ('B', '123456', 'B: Expected between 2 and 5 characters, but got 6.') ] self.assert_encode_decode_bad(foo, datas) def test_utc_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UTCTime " "END") # Ok. datas = [ ('A', datetime(1982, 1, 2, 12, 0)) ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ] self.assert_encode_decode_bad(foo, datas) def test_choice(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= CHOICE { a INTEGER (1..2) } " "END") # Ok. datas = [ ('A', ('a', 1)) ] self.assert_encode_decode_ok(foo, datas) # Not ok. datas = [ ('A', ('a', 3), 'A.a: Expected an integer between 1 and 2, but got 3.') ] self.assert_encode_decode_bad(foo, datas) if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_der.py000066400000000000000000000602061524544274600171600ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import unittest from copy import deepcopy from datetime import datetime from .utils import Asn1ToolsBaseTest import asn1tools from asn1tools.codecs import restricted_utc_time_to_datetime as ut2dt from asn1tools.codecs import restricted_generalized_time_to_datetime as gt2dt from asn1tools.compat import timezone from asn1tools.compat import timedelta sys.path.append('tests/files/ietf') from rfc5280 import EXPECTED as RFC5280 class Asn1ToolsDerTest(Asn1ToolsBaseTest): maxDiff = None def test_integer(self): foo = asn1tools.compile_string( "Foo DEFINITIONS ::= " "BEGIN " "A ::= INTEGER " "END", 'der') datas = [ ('A', 32768, b'\x02\x03\x00\x80\x00'), ('A', 32767, b'\x02\x02\x7f\xff'), ('A', 256, b'\x02\x02\x01\x00'), ('A', 255, b'\x02\x02\x00\xff'), ('A', 128, b'\x02\x02\x00\x80'), ('A', 127, b'\x02\x01\x7f'), ('A', 1, b'\x02\x01\x01'), ('A', 0, b'\x02\x01\x00'), ('A', -1, b'\x02\x01\xff'), ('A', -128, b'\x02\x01\x80'), ('A', -129, b'\x02\x02\xff\x7f'), ('A', -256, b'\x02\x02\xff\x00'), ('A', -32768, b'\x02\x02\x80\x00'), ('A', -32769, b'\x02\x03\xff\x7f\xff'), ('A', 1 << 2048, b'\x02\x82\x01\x01\x01' + 256 * b'\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_external(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= EXTERNAL " "END", 'der') datas = [ ('A', {'encoding': ('octet-aligned', b'\x12')}, b'\x28\x03\x81\x01\x12') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_real(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= REAL " "END") datas = [ ('A', 0.0, b'\x09\x00'), ('A', 100.0, b'\x09\x03\x80\x02\x19'), ('A', -100.0, b'\x09\x03\xc0\x02\x19'), ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Decode 100.0 in decimal form (1.e2). self.assertEqual(foo.decode('A', b'\x09\x05\x03\x31\x2e\x45\x32'), 100.0) def test_bit_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BIT STRING " "B ::= BIT STRING { " " a (0), " " b (1), " " c (2) " "} " "C ::= SEQUENCE { " " a B DEFAULT {b, c}, " " b B DEFAULT '011'B, " " c B DEFAULT '60'H " "} " "D ::= SEQUENCE { " " a A DEFAULT '00'B, " " b B DEFAULT '00'B " "} " "E ::= SEQUENCE { " " a A DEFAULT ''B, " " b A DEFAULT ''H, " " c A DEFAULT '005'H " "} " "END", 'der') datas = [ ('A', (b'', 0), b'\x03\x01\x00'), ('A', (b'\x40', 4), b'\x03\x02\x04\x40'), ('A', (b'\x80', 1), b'\x03\x02\x07\x80'), ('A', (b'\x00\x00', 9), b'\x03\x03\x07\x00\x00'), ('B', (b'\x80', 1), b'\x03\x02\x07\x80'), ('B', (b'\xe0', 3), b'\x03\x02\x05\xe0'), ('B', (b'\x01', 8), b'\x03\x02\x00\x01'), ('C', {'a': (b'\x40', 2), 'b': (b'\x40', 2), 'c': (b'\x40', 2)}, b'\x30\x0c\x80\x02\x06\x40\x81\x02\x06\x40\x82\x02\x06\x40'), ('C', {'a': (b'\x60', 3), 'b': (b'\x60', 3), 'c': (b'\x60', 3)}, b'\x30\x00'), ('D', {'a': (b'\x00', 2), 'b': (b'\x00', 2)}, b'\x30\x00'), ('E', {'a': (b'', 0), 'b': (b'', 0), 'c': (b'\x00\x50', 12)}, b'\x30\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Default value is not encoded, but part of decoded. Also # ignore dangling bits. datas = [ ('C', {}, b'\x30\x00', {'a': (b'\x60', 3), 'b': (b'\x60', 3), 'c': (b'\x60', 3)}), ('C', {'a': (b'\x60', 4), 'b': (b'\x60', 5), 'c': (b'\x60', 6)}, b'\x30\x00', {'a': (b'\x60', 3), 'b': (b'\x60', 3), 'c': (b'\x60', 3)}), ('A', (b'\xff', 1), b'\x03\x02\x07\x80', (b'\x80', 1)), ('D', {'a': (b'\x00', 3), 'b': (b'\x00', 3)}, b'\x30\x04\x80\x02\x05\x00', {'a': (b'\x00', 3), 'b': (b'\x00', 2)}), ('E', {}, b'\x30\x00', {'a': (b'', 0), 'b': (b'', 0), 'c': (b'\x00\x50', 12)}) ] for type_name, decoded_1, encoded, decoded_2 in datas: self.assertEqual(foo.encode(type_name, decoded_1), encoded) self.assertEqual(foo.decode(type_name, encoded), decoded_2) def test_octet_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE { " " a OCTET STRING DEFAULT '00000000011'B, " " b OCTET STRING DEFAULT '00060'H " "} " "B ::= SEQUENCE { " " a OCTET STRING DEFAULT ''B, " " b OCTET STRING DEFAULT ''H " "} " "END", 'der') datas = [ ('A', {'a': b'\x00\x60', 'b': b'\x00\x06\x00'}, b'\x30\x00'), ('A', {'a': b'\xcc', 'b': b'\xdd'}, b'\x30\x06\x80\x01\xcc\x81\x01\xdd'), ('B', {'a': b'', 'b': b''}, b'\x30\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Default value is not encoded, but part of decoded. datas = [ ('A', {}, b'\x30\x00', {'a': b'\x00\x60', 'b': b'\x00\x06\x00'}), ('A', {'a': b'\xcc'}, b'\x30\x03\x80\x01\xcc', {'a': b'\xcc', 'b': b'\x00\x06\x00'}), ('B', {}, b'\x30\x00', {'a': b'', 'b': b''}) ] for type_name, decoded_1, encoded, decoded_2 in datas: self.assertEqual(foo.encode(type_name, decoded_1), encoded) self.assertEqual(foo.decode(type_name, encoded), decoded_2) def test_set(self): foo = asn1tools.compile_string( "Foo DEFINITIONS IMPLICIT TAGS ::= " "BEGIN " "A ::= SET { " " a [0] INTEGER, " " b [1] INTEGER " "} " "B ::= SET { " " b [1] INTEGER, " " a [0] INTEGER " "} " "END", 'ber') datas = [ ('A', {'a': 3, 'b': 4}, b'\x31\x06\x80\x01\x03\x81\x01\x04'), ('B', {'a': 3, 'b': 4}, b'\x31\x06\x80\x01\x03\x81\x01\x04') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_utf8_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UTF8String " "END", 'der') datas = [ ('A', u'bar', b'\x0c\x03\x62\x61\x72'), ('A', u'a\u1010c', b'\x0c\x05\x61\xe1\x80\x90\x63') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_graphic_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GraphicString " "END") datas = [ ('A', 'f', b'\x19\x01\x66') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_universal_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UniversalString " "END", 'der') datas = [ ('A', 'bar', b'\x1c\x0c\x00\x00\x00b\x00\x00\x00a\x00\x00\x00r'), ('A', u'åäö', b'\x1c\x0c\x00\x00\x00\xe5\x00\x00\x00\xe4\x00\x00\x00\xf6') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_utc_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UTCTime " "END", 'der') datas = [ ('A', datetime(2018, 1, 22, 13, 0), b'\x17\x0d\x31\x38\x30\x31\x32\x32\x31\x33\x30\x30\x30\x30\x5a'), ('A', datetime(2001, 2, 3, 4, 5, 6), b'\x17\x0d\x30\x31\x30\x32\x30\x33\x30\x34\x30\x35\x30\x36\x5a') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_generalized_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GeneralizedTime " "END", 'der') datas = [ ('A', datetime(2018, 1, 22, 13, 29), b'\x18\x0f\x32\x30\x31\x38\x30\x31\x32\x32\x31\x33\x32\x39\x30' b'\x30\x5a'), ('A', datetime(2018, 1, 22, 13, 0), b'\x18\x0f\x32\x30\x31\x38\x30\x31\x32\x32\x31\x33\x30\x30\x30' b'\x30\x5a'), ('A', datetime(2000, 12, 31, 23, 59, 59), b'\x18\x0f\x32\x30\x30\x30\x31\x32\x33\x31\x32\x33\x35\x39' b'\x35\x39\x5a'), ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_all_types(self): all_types = asn1tools.compile_files('tests/files/all_types.asn', 'der') datas = [ ('Boolean', True, b'\x01\x01\xff'), ('Boolean', False, b'\x01\x01\x00'), ('Bitstring', (b'\x80', 1), b'\x03\x02\x07\x80'), ('Octetstring', b'\x00', b'\x04\x01\x00'), ('Octetstring', 127 * b'\x55', b'\x04\x7f' + 127 * b'\x55'), ('Octetstring', 128 * b'\xaa', b'\x04\x81\x80' + 128 * b'\xaa'), ('Null', None, b'\x05\x00'), ('Objectidentifier', '1.2', b'\x06\x01\x2a'), ('Enumerated', 'one', b'\x0a\x01\x01'), ('Utf8string', 'foo', b'\x0c\x03foo'), ('Sequence', {}, b'\x30\x00'), ('Sequence2', {'a': 0}, b'\x30\x00'), ('Sequence2', {'a': 1}, b'\x30\x03\x02\x01\x01'), ('Sequence13', {'a': [1]}, b'\x30\x05\xa0\x03\x02\x01\x01'), ('Sequence13', {'b': [1]}, b'\x30\x05\xa1\x03\x02\x01\x01'), ('Set', {}, b'\x31\x00'), ('Set2', {'a': 1}, b'\x31\x00'), ('Set2', {'a': 2}, b'\x31\x03\x02\x01\x02'), ('Numericstring', '123', b'\x12\x03123'), ('Printablestring', 'foo', b'\x13\x03foo'), ('Ia5string', 'bar', b'\x16\x03bar'), ('Visiblestring', 'bar', b'\x1a\x03bar'), ('Generalstring', 'bar', b'\x1b\x03bar'), ('Bmpstring', 'bar', b'\x1e\x06\x00\x62\x00\x61\x00\x72'), ('Teletexstring', 'fum', b'\x14\x03fum'), ('SequenceOf', [], b'0\x00'), ('SetOf', [], b'1\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(all_types, type_name, decoded, encoded) all_types.encode('Sequence12', {'a': [{'a': []}]}) # ToDo: Should return {'a': [{'a': []}]} self.assertEqual( all_types.decode('Sequence12', b'\x30\x04\xa0\x02\x30\x00'), {}) def test_repr_all_types(self): all_types = asn1tools.compile_files('tests/files/all_types.asn', 'der') self.assertEqual(repr(all_types.types['Boolean']), 'Boolean(Boolean)') self.assertEqual(repr(all_types.types['Integer']), 'Integer(Integer)') self.assertEqual(repr(all_types.types['Real']), 'Real(Real)') self.assertEqual(repr(all_types.types['Bitstring']), 'BitString(Bitstring)') self.assertEqual(repr(all_types.types['Octetstring']), 'OctetString(Octetstring)') self.assertEqual(repr(all_types.types['Null']), 'Null(Null)') self.assertEqual(repr(all_types.types['Objectidentifier']), 'ObjectIdentifier(Objectidentifier)') self.assertEqual(repr(all_types.types['Enumerated']), 'Enumerated(Enumerated)') self.assertEqual(repr(all_types.types['Utf8string']), 'UTF8String(Utf8string)') self.assertEqual(repr(all_types.types['Sequence']), 'Sequence(Sequence, [])') self.assertEqual(repr(all_types.types['Set']), 'Set(Set, [])') self.assertEqual(repr(all_types.types['Sequence2']), 'Sequence(Sequence2, [Integer(a)])') self.assertEqual(repr(all_types.types['Set2']), 'Set(Set2, [Integer(a)])') self.assertEqual(repr(all_types.types['Numericstring']), 'NumericString(Numericstring)') self.assertEqual(repr(all_types.types['Printablestring']), 'PrintableString(Printablestring)') self.assertEqual(repr(all_types.types['Ia5string']), 'IA5String(Ia5string)') self.assertEqual(repr(all_types.types['Universalstring']), 'UniversalString(Universalstring)') self.assertEqual(repr(all_types.types['Visiblestring']), 'VisibleString(Visiblestring)') self.assertEqual(repr(all_types.types['Generalstring']), 'GeneralString(Generalstring)') self.assertEqual(repr(all_types.types['Bmpstring']), 'BMPString(Bmpstring)') self.assertEqual(repr(all_types.types['Teletexstring']), 'TeletexString(Teletexstring)') self.assertEqual(repr(all_types.types['Graphicstring']), 'GraphicString(Graphicstring)') self.assertEqual(repr(all_types.types['Utctime']), 'UTCTime(Utctime)') self.assertEqual(repr(all_types.types['GeneralizedTime1']), 'GeneralizedTime(GeneralizedTime1)') self.assertEqual(repr(all_types.types['SequenceOf']), 'SequenceOf(SequenceOf, Integer())') self.assertEqual(repr(all_types.types['SetOf']), 'SetOf(SetOf, Integer())') self.assertEqual(repr(all_types.types['Any']), 'Any(Any)') self.assertEqual(repr(all_types.types['Sequence12']), 'Sequence(Sequence12, [SequenceOf(a, Recursive(Sequence12))])') def test_all_types_automatic_tags(self): all_types = asn1tools.compile_files( 'tests/files/all_types_automatic_tags.asn', 'der') datas = [ ('Sequence3', {'a': 1, 'c': 2,'d': True}, b'\x30\x09\x80\x01\x01\x82\x01\x02\x83\x01\xff') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(all_types, type_name, decoded, encoded) def test_decode_length(self): foo = asn1tools.compile_files('tests/files/foo.asn', 'der') # The length can be decoded. datas = [ (b'\x30\x0e\x02\x01\x01\x16\x09Is 1+1=3?', 16), (b'\x30\x10\x02\x02\x01\x16\x09Is 1+10=14?', 18), (b'\x30\x0d', 15), (b'\x30\x84\x00\x00\x00\xb8', 190), (b'\x9f\x1f\x00', 3) ] for encoded_message, decoded_length in datas: length = foo.decode_length(encoded_message) self.assertEqual(length, decoded_length) # The length cannot be decoded. datas = [ b'0', b'', b'0\x84\x00\x00\x00' ] for encoded in datas: self.assertIsNone(foo.decode_length(encoded)) def test_long_tag(self): foo = asn1tools.compile_string( "Foo DEFINITIONS IMPLICIT TAGS ::= BEGIN " "A ::= [31] INTEGER " "B ::= [500] INTEGER " "END") datas = [ ('A', 1, b'\x9f\x1f\x01\x01'), ('B', 1, b'\x9f\x83\x74\x01\x01') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_rfc5280(self): rfc5280 = asn1tools.compile_dict(deepcopy(RFC5280), 'der') decoded = { 'tbsCertificate': { 'version': 'v1', 'serialNumber': 3578, 'signature': { 'algorithm': '1.2.840.113549.1.1.5', 'parameters': b'\x05\x00' }, 'issuer': ( 'rdnSequence', [ [{'type': '2.5.4.6', 'value': b'\x13\x02\x4a\x50'}], [{'type': '2.5.4.8', 'value': b'\x13\x05\x54\x6f\x6b\x79\x6f'}], [{'type': '2.5.4.7', 'value': b'\x13\x07\x43\x68\x75\x6f\x2d\x6b\x75'}], [{'type': '2.5.4.10', 'value': b'\x13\x08\x46\x72\x61\x6e\x6b\x34\x44\x44'}], [{'type': '2.5.4.11', 'value': (b'\x13\x0f\x57\x65\x62\x43\x65\x72\x74\x20\x53' b'\x75\x70\x70\x6f\x72\x74')}], [{'type': '2.5.4.3', 'value': (b'\x13\x0f\x46\x72\x61\x6e\x6b\x34\x44\x44\x20' b'\x57\x65\x62\x20\x43\x41')}], [{'type': '1.2.840.113549.1.9.1', 'value': (b'\x16\x14\x73\x75\x70\x70\x6f\x72\x74\x40\x66' b'\x72\x61\x6e\x6b\x34\x64\x64\x2e\x63\x6f\x6d')}] ] ), 'validity': { 'notAfter': ('utcTime', ut2dt('170821052654Z')), 'notBefore': ('utcTime', ut2dt('120822052654Z')) }, 'subject': ( 'rdnSequence', [ [{'type': '2.5.4.6', 'value': b'\x13\x02\x4a\x50'}], [{'type': '2.5.4.8', 'value': b'\x0c\x05\x54\x6f\x6b\x79\x6f'}], [{'type': '2.5.4.10', 'value': b'\x0c\x08\x46\x72\x61\x6e\x6b\x34\x44\x44'}], [{'type': '2.5.4.3', 'value': (b'\x0c\x0f\x77\x77\x77\x2e\x65\x78\x61\x6d\x70' b'\x6c\x65\x2e\x63\x6f\x6d')}] ] ), 'subjectPublicKeyInfo': { 'algorithm': { 'algorithm': '1.2.840.113549.1.1.1', 'parameters': b'\x05\x00' }, 'subjectPublicKey': (b'0H\x02A\x00\x9b\xfcf\x90y\x84B\xbb' b'\xab\x13\xfd+{\xf8\xde\x15\x12\xe5' b'\xf1\x93\xe3\x06\x8a{\xb8\xb1\xe1' b'\x9e&\xbb\x95\x01\xbf\xe70\xedd\x85' b'\x02\xdd\x15i\xa84\xb0\x06\xec?5<' b'\x1e\x1b+\x8f\xfa\x8f\x00\x1b\xdf' b'\x07\xc6\xacS\x07\x02\x03\x01\x00' b'\x01', 592) } }, 'signatureAlgorithm': { 'algorithm': '1.2.840.113549.1.1.5', 'parameters': b'\x05\x00' }, 'signature': (b'\x14\xb6L\xbb\x81y3\xe6q\xa4\xdaQo\xcb\x08\x1d' b'\x8d`\xec\xbc\x18\xc7sGY\xb1\xf2 H\xbba\xfa' b'\xfcM\xad\x89\x8d\xd1!\xeb\xd5\xd8\xe5\xba' b'\xd6\xa66\xfdtP\x83\xb6\x0f\xc7\x1d\xdf}\xe5.\x81' b'\x7fE\xe0\x9f\xe2>y\xee\xd701\xc7 r\xd9X.*\xfe\x12' b'Z4E\xa1\x19\x08|\x89G_J\x95\xbe#!JSr\xda*\x05/.\xc9' b'p\xf6[\xfa\xfd\xdf\xb41\xb2\xc1J\x9c\x06%C\xa1' b'\xe6\xb4\x1e\x7f\x86\x9b\x16@', 1024) } encoded = ( b'\x30\x82\x02\x12\x30\x82\x01\x7b\x02\x02\x0d\xfa\x30\x0d\x06\x09' b'\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05\x05\x00\x30\x81\x9b\x31\x0b' b'\x30\x09\x06\x03\x55\x04\x06\x13\x02\x4a\x50\x31\x0e\x30\x0c\x06' b'\x03\x55\x04\x08\x13\x05\x54\x6f\x6b\x79\x6f\x31\x10\x30\x0e\x06' b'\x03\x55\x04\x07\x13\x07\x43\x68\x75\x6f\x2d\x6b\x75\x31\x11\x30' b'\x0f\x06\x03\x55\x04\x0a\x13\x08\x46\x72\x61\x6e\x6b\x34\x44\x44' b'\x31\x18\x30\x16\x06\x03\x55\x04\x0b\x13\x0f\x57\x65\x62\x43\x65' b'\x72\x74\x20\x53\x75\x70\x70\x6f\x72\x74\x31\x18\x30\x16\x06\x03' b'\x55\x04\x03\x13\x0f\x46\x72\x61\x6e\x6b\x34\x44\x44\x20\x57\x65' b'\x62\x20\x43\x41\x31\x23\x30\x21\x06\x09\x2a\x86\x48\x86\xf7\x0d' b'\x01\x09\x01\x16\x14\x73\x75\x70\x70\x6f\x72\x74\x40\x66\x72\x61' b'\x6e\x6b\x34\x64\x64\x2e\x63\x6f\x6d\x30\x1e\x17\x0d\x31\x32\x30' b'\x38\x32\x32\x30\x35\x32\x36\x35\x34\x5a\x17\x0d\x31\x37\x30\x38' b'\x32\x31\x30\x35\x32\x36\x35\x34\x5a\x30\x4a\x31\x0b\x30\x09\x06' b'\x03\x55\x04\x06\x13\x02\x4a\x50\x31\x0e\x30\x0c\x06\x03\x55\x04' b'\x08\x0c\x05\x54\x6f\x6b\x79\x6f\x31\x11\x30\x0f\x06\x03\x55\x04' b'\x0a\x0c\x08\x46\x72\x61\x6e\x6b\x34\x44\x44\x31\x18\x30\x16\x06' b'\x03\x55\x04\x03\x0c\x0f\x77\x77\x77\x2e\x65\x78\x61\x6d\x70\x6c' b'\x65\x2e\x63\x6f\x6d\x30\x5c\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7' b'\x0d\x01\x01\x01\x05\x00\x03\x4b\x00\x30\x48\x02\x41\x00\x9b\xfc' b'\x66\x90\x79\x84\x42\xbb\xab\x13\xfd\x2b\x7b\xf8\xde\x15\x12\xe5' b'\xf1\x93\xe3\x06\x8a\x7b\xb8\xb1\xe1\x9e\x26\xbb\x95\x01\xbf\xe7' b'\x30\xed\x64\x85\x02\xdd\x15\x69\xa8\x34\xb0\x06\xec\x3f\x35\x3c' b'\x1e\x1b\x2b\x8f\xfa\x8f\x00\x1b\xdf\x07\xc6\xac\x53\x07\x02\x03' b'\x01\x00\x01\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x05' b'\x05\x00\x03\x81\x81\x00\x14\xb6\x4c\xbb\x81\x79\x33\xe6\x71\xa4' b'\xda\x51\x6f\xcb\x08\x1d\x8d\x60\xec\xbc\x18\xc7\x73\x47\x59\xb1' b'\xf2\x20\x48\xbb\x61\xfa\xfc\x4d\xad\x89\x8d\xd1\x21\xeb\xd5\xd8' b'\xe5\xba\xd6\xa6\x36\xfd\x74\x50\x83\xb6\x0f\xc7\x1d\xdf\x7d\xe5' b'\x2e\x81\x7f\x45\xe0\x9f\xe2\x3e\x79\xee\xd7\x30\x31\xc7\x20\x72' b'\xd9\x58\x2e\x2a\xfe\x12\x5a\x34\x45\xa1\x19\x08\x7c\x89\x47\x5f' b'\x4a\x95\xbe\x23\x21\x4a\x53\x72\xda\x2a\x05\x2f\x2e\xc9\x70\xf6' b'\x5b\xfa\xfd\xdf\xb4\x31\xb2\xc1\x4a\x9c\x06\x25\x43\xa1\xe6\xb4' b'\x1e\x7f\x86\x9b\x16\x40' ) self.assert_encode_decode(rfc5280, 'Certificate', decoded, encoded) if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_gser.py000066400000000000000000001162121524544274600173450ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import unittest from .utils import Asn1ToolsBaseTest import sys from copy import deepcopy from asn1tools.codecs import utc_time_to_datetime as ut2dt from asn1tools.codecs import generalized_time_to_datetime as gt2dt import asn1tools sys.path.append('tests/files') sys.path.append('tests/files/3gpp') sys.path.append('tests/files/ietf') from rrc_8_6_0 import EXPECTED as RRC_8_6_0 from rfc4511 import EXPECTED as RFC4511 class Asn1ToolsGserTest(Asn1ToolsBaseTest): maxDiff = None def test_external(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= EXTERNAL " "END", 'gser') datas = [ ('A', {'encoding': ('octet-aligned', b'\x12')}, b"a A ::= { encoding octet-aligned : '12'H }") ] for name, decoded, encoded in datas: self.assertEqual(foo.encode(name, decoded), encoded) def test_real(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= REAL " "END", 'gser') datas = [ ('A', 0.0, b'a A ::= 0'), ('A', float('inf'), b'a A ::= PLUS-INFINITY'), ('A', float('-inf'), b'a A ::= MINUS-INFINITY'), ('A', 1.0, b'a A ::= 1.0E0'), ('A', 1.1, b'a A ::= 1.1E0'), ('A', 1234.5678, b'a A ::= 1234.5678E0'), ('A', 8, b'a A ::= 8E0'), ('A', 0.625, b'a A ::= 0.625E0') ] for name, decoded, encoded in datas: self.assertEqual(foo.encode(name, decoded), encoded) def test_null(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= NULL " "END", 'gser') decoded = None encoded = b'a A ::= NULL' self.assertEqual(foo.encode('A', decoded), encoded) def test_octet_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OCTET STRING " "END", 'gser') datas = [ ('A', b'\x01\x23\x45\x67\x89\xab\xcd\xef', b"a A ::= '0123456789ABCDEF'H") ] for name, decoded, encoded in datas: self.assertEqual(foo.encode(name, decoded), encoded) def test_sequence(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE { " " a BOOLEAN, " " b BOOLEAN OPTIONAL " "}" "B ::= SEQUENCE { " " a BOOLEAN DEFAULT TRUE " "}" "END", 'gser') datas = [ ('A', {'a': True}, b'a A ::= { a TRUE }'), ('A', {'a': False, 'b': True}, b'a A ::= { a FALSE, b TRUE }'), ('B', {}, b'b B ::= { }') ] for name, decoded, encoded in datas: self.assertEqual(foo.encode(name, decoded), encoded) # Missing member. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('A', {}) self.assertEqual(str(cm.exception), "A: Sequence member 'a' not found in {}.") def test_sequence_of(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE OF INTEGER " "END", 'gser') datas = [ ('A', [], b'a A ::= { }'), ('A', [1], b'a A ::= { 1 }'), ('A', [1, 3], b'a A ::= { 1, 3 }') ] for name, decoded, encoded in datas: self.assertEqual(foo.encode(name, decoded), encoded) def test_set(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SET { " " a BOOLEAN, " " b BOOLEAN OPTIONAL " "}" "B ::= SEQUENCE { " " a BOOLEAN DEFAULT TRUE " "}" "END", 'gser') datas = [ ('A', {'a': True}, b'a A ::= { a TRUE }'), ('A', {'a': False, 'b': True}, b'a A ::= { a FALSE, b TRUE }'), ('B', {}, b'b B ::= { }') ] for name, decoded, encoded in datas: self.assertEqual(foo.encode(name, decoded), encoded) # Missing member. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('A', {}) self.assertEqual(str(cm.exception), "A: Set member 'a' not found in {}.") def test_set_of(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SET OF INTEGER " "END", 'gser') datas = [ ('A', [], b'a A ::= { }'), ('A', [1], b'a A ::= { 1 }'), ('A', [1, 3], b'a A ::= { 1, 3 }') ] for name, decoded, encoded in datas: self.assertEqual(foo.encode(name, decoded), encoded) def test_choice(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= CHOICE { " " a NULL " "} " "END", 'gser') # Bad choice. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('A', ('b', None)) self.assertEqual(str(cm.exception), "A: Expected choice 'a', but got 'b'.") def test_utf8_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UTF8String " "END", 'gser') datas = [ ('A', 'foo', b'a A ::= "foo"'), ('A', u'\u0102', b'a A ::= "\xc4\x82"') ] for name, decoded, encoded in datas: self.assertEqual(foo.encode(name, decoded), encoded) def test_numeric_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= NumericString " "END", 'gser') decoded = '01 23' encoded = b'a A ::= "01 23"' self.assertEqual(foo.encode('A', decoded), encoded) def test_printable_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= PrintableString " "END", 'gser') decoded = 'foo' encoded = b'a A ::= "foo"' self.assertEqual(foo.encode('A', decoded), encoded) def test_visible_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= VisibleString " "END", 'gser') decoded = 'foo' encoded = b'a A ::= "foo"' self.assertEqual(foo.encode('A', decoded), encoded) def test_general_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GeneralString " "END", 'gser') decoded = 'foo' encoded = b'a A ::= "foo"' self.assertEqual(foo.encode('A', decoded), encoded) def test_bmp_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BMPString " "END", 'gser') datas = [ ('A', 'foo', b'a A ::= "foo"'), ('A', u'\u0102', b'a A ::= "\xc4\x82"') ] for name, decoded, encoded in datas: self.assertEqual(foo.encode(name, decoded), encoded) def test_graphic_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GraphicString " "END", 'gser') decoded = 'foo' encoded = b'a A ::= "foo"' self.assertEqual(foo.encode('A', decoded), encoded) def test_teletex_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= TeletexString " "END", 'gser') decoded = 'foo' encoded = b'a A ::= "foo"' self.assertEqual(foo.encode('A', decoded), encoded) def test_universal_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UniversalString " "END", 'gser') datas = [ ('A', u'bar', b'a A ::= "bar"') ] for type_name, decoded, encoded in datas: self.assertEqual(foo.encode(type_name, decoded), encoded) def test_utc_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UTCTime " "END", 'gser') decoded = ut2dt('010203040506Z') encoded = b'a A ::= "010203040506Z"' self.assertEqual(foo.encode('A', decoded), encoded) def test_generalized_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GeneralizedTime " "END", 'gser') decoded = gt2dt('20001231235959.999Z') encoded = b'a A ::= "20001231235959.999Z"' self.assertEqual(foo.encode('A', decoded), encoded) def test_any(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= ANY " "END", 'gser') datas = [ ('A', b'', b"a A ::= ''H"), ('A', b'\x01\x23\x45\x67\x89\xab\xcd\xef', b"a A ::= '0123456789ABCDEF'H") ] for name, decoded, encoded in datas: self.assertEqual(foo.encode(name, decoded), encoded) def test_foo(self): foo = asn1tools.compile_files(['tests/files/foo.asn'], 'gser') datas = [ ('Question', {'id': 1, 'question': 'Is 1+1=3?'}, b'question Question ::= { id 1, question "Is 1+1=3?" }') ] for name, decoded, encoded in datas: self.assertEqual(foo.encode(name, decoded), encoded) def test_foo_indent(self): foo = asn1tools.compile_files(['tests/files/foo.asn'], 'gser') datas = [ ('Question', {'id': 1, 'question': 'Is 1+1=3?'}, b'question Question ::= {\n' b' id 1,\n' b' question "Is 1+1=3?"\n' b'}') ] for name, decoded, encoded in datas: actual = foo.encode(name, decoded, indent=2) self.assertEqual(actual, encoded) def test_rrc_8_6_0(self): rrc = asn1tools.compile_dict(deepcopy(RRC_8_6_0), 'gser') decoded = { 'message': ( 'c1', ( 'systemInformation', { 'criticalExtensions': ( 'systemInformation-r8', { 'sib-TypeAndInfo': [ ( 'sib2', { 'ac-BarringInfo': { 'ac-BarringForEmergency': True, 'ac-BarringForMO-Data': { 'ac-BarringFactor': 'p95', 'ac-BarringTime': 's128', 'ac-BarringForSpecialAC': (b'\xf0', 5) } }, 'radioResourceConfigCommon': { 'rach-ConfigCommon': { 'preambleInfo': { 'numberOfRA-Preambles': 'n24', 'preamblesGroupAConfig': { 'sizeOfRA-PreamblesGroupA': 'n28', 'messageSizeGroupA': 'b144', 'messagePowerOffsetGroupB': 'minusinfinity' } }, 'powerRampingParameters': { 'powerRampingStep': 'dB0', 'preambleInitialReceivedTargetPower': 'dBm-102' }, 'ra-SupervisionInfo': { 'preambleTransMax': 'n8', 'ra-ResponseWindowSize': 'sf6', 'mac-ContentionResolutionTimer': 'sf48' }, 'maxHARQ-Msg3Tx': 8 }, 'bcch-Config': { 'modificationPeriodCoeff': 'n2' }, 'pcch-Config': { 'defaultPagingCycle': 'rf256', 'nB': 'twoT' }, 'prach-Config': { 'rootSequenceIndex': 836, 'prach-ConfigInfo': { 'prach-ConfigIndex': 33, 'highSpeedFlag': False, 'zeroCorrelationZoneConfig': 10, 'prach-FreqOffset': 64 } }, 'pdsch-ConfigCommon': { 'referenceSignalPower': -60, 'p-b': 2 }, 'pusch-ConfigCommon': { 'pusch-ConfigBasic': { 'n-SB': 1, 'hoppingMode': 'interSubFrame', 'pusch-HoppingOffset': 10, 'enable64QAM': False }, 'ul-ReferenceSignalsPUSCH': { 'groupHoppingEnabled': True, 'groupAssignmentPUSCH': 22, 'sequenceHoppingEnabled': False, 'cyclicShift': 5 } }, 'pucch-ConfigCommon': { 'deltaPUCCH-Shift': 'ds1', 'nRB-CQI': 98, 'nCS-AN': 4, 'n1PUCCH-AN': 2047 }, 'soundingRS-UL-ConfigCommon': ( 'setup', { 'srs-BandwidthConfig': 'bw0', 'srs-SubframeConfig': 'sc4', 'ackNackSRS-SimultaneousTransmission': True }), 'uplinkPowerControlCommon': { 'p0-NominalPUSCH': -126, 'alpha': 'al0', 'p0-NominalPUCCH': -127, 'deltaFList-PUCCH': { 'deltaF-PUCCH-Format1': 'deltaF-2', 'deltaF-PUCCH-Format1b': 'deltaF1', 'deltaF-PUCCH-Format2': 'deltaF0', 'deltaF-PUCCH-Format2a': 'deltaF-2', 'deltaF-PUCCH-Format2b': 'deltaF0' }, 'deltaPreambleMsg3': -1 }, 'ul-CyclicPrefixLength': 'len1' }, 'ue-TimersAndConstants': { 't300': 'ms100', 't301': 'ms200', 't310': 'ms50', 'n310': 'n2', 't311': 'ms30000', 'n311': 'n2' }, 'freqInfo': { 'additionalSpectrumEmission': 3 }, 'timeAlignmentTimerCommon': 'sf500' } ), ( 'sib3', { 'cellReselectionInfoCommon': { 'q-Hyst': 'dB0', 'speedStateReselectionPars': { 'mobilityStateParameters': { 't-Evaluation': 's180', 't-HystNormal': 's180', 'n-CellChangeMedium': 1, 'n-CellChangeHigh': 16 }, 'q-HystSF': { 'sf-Medium': 'dB-6', 'sf-High': 'dB-4' } } }, 'cellReselectionServingFreqInfo': { 'threshServingLow': 7, 'cellReselectionPriority': 3 }, 'intraFreqCellReselectionInfo': { 'q-RxLevMin': -33, 's-IntraSearch': 0, 'presenceAntennaPort1': False, 'neighCellConfig': (b'\x80', 2), 't-ReselectionEUTRA': 4 } } ), ( 'sib4', { } ), ( 'sib5', { 'interFreqCarrierFreqList': [ { 'dl-CarrierFreq': 1, 'q-RxLevMin': -45, 't-ReselectionEUTRA': 0, 'threshX-High': 31, 'threshX-Low': 29, 'allowedMeasBandwidth': 'mbw6', 'presenceAntennaPort1': True, 'neighCellConfig': (b'\x00', 2), 'q-OffsetFreq': 'dB0' } ] } ), ( 'sib6', { 't-ReselectionUTRA': 3 } ), ('sib7', { 't-ReselectionGERAN': 3 } ), ('sib8', { 'parameters1XRTT': { 'longCodeState1XRTT': (b'\x01#Eg\x89\x00', 42) } } ), ( 'sib9', { 'hnb-Name': b'4' } ), ('sib10', { 'messageIdentifier': (b'#4', 16), 'serialNumber': (b'\x124', 16), 'warningType': b'2\x12' } ), ( 'sib11', { 'messageIdentifier': (b'g\x88', 16), 'serialNumber': (b'T5', 16), 'warningMessageSegmentType': 'notLastSegment', 'warningMessageSegmentNumber': 19, 'warningMessageSegment': b'\x12' } ) ] } ) } ) ) } encoded = ( b"bcch-dl-sch-message BCCH-DL-SCH-Message ::= {\n" b" message c1 : systemInformation : {\n" b" criticalExtensions systemInformation-r8 : {\n" b" sib-TypeAndInfo {\n" b" sib2 : {\n" b" ac-BarringInfo {\n" b" ac-BarringForEmergency TRUE,\n" b" ac-BarringForMO-Data {\n" b" ac-BarringFactor p95,\n" b" ac-BarringTime s128,\n" b" ac-BarringForSpecialAC '11110'B\n" b" }\n" b" },\n" b" radioResourceConfigCommon {\n" b" rach-ConfigCommon {\n" b" preambleInfo {\n" b" numberOfRA-Preambles n24,\n" b" preamblesGroupAConfig {\n" b" sizeOfRA-PreamblesGroupA n28,\n" b" messageSizeGroupA b144,\n" b" messagePowerOffsetGroupB minusinfinity\n" b" }\n" b" },\n" b" powerRampingParameters {\n" b" powerRampingStep dB0,\n" b" preambleInitialReceivedTargetPower dBm-102\n" b" },\n" b" ra-SupervisionInfo {\n" b" preambleTransMax n8,\n" b" ra-ResponseWindowSize sf6,\n" b" mac-ContentionResolutionTimer sf48\n" b" },\n" b" maxHARQ-Msg3Tx 8\n" b" },\n" b" bcch-Config {\n" b" modificationPeriodCoeff n2\n" b" },\n" b" pcch-Config {\n" b" defaultPagingCycle rf256,\n" b" nB twoT\n" b" },\n" b" prach-Config {\n" b" rootSequenceIndex 836,\n" b" prach-ConfigInfo {\n" b" prach-ConfigIndex 33,\n" b" highSpeedFlag FALSE,\n" b" zeroCorrelationZoneConfig 10,\n" b" prach-FreqOffset 64\n" b" }\n" b" },\n" b" pdsch-ConfigCommon {\n" b" referenceSignalPower -60,\n" b" p-b 2\n" b" },\n" b" pusch-ConfigCommon {\n" b" pusch-ConfigBasic {\n" b" n-SB 1,\n" b" hoppingMode interSubFrame,\n" b" pusch-HoppingOffset 10,\n" b" enable64QAM FALSE\n" b" },\n" b" ul-ReferenceSignalsPUSCH {\n" b" groupHoppingEnabled TRUE,\n" b" groupAssignmentPUSCH 22,\n" b" sequenceHoppingEnabled FALSE,\n" b" cyclicShift 5\n" b" }\n" b" },\n" b" pucch-ConfigCommon {\n" b" deltaPUCCH-Shift ds1,\n" b" nRB-CQI 98,\n" b" nCS-AN 4,\n" b" n1PUCCH-AN 2047\n" b" },\n" b" soundingRS-UL-ConfigCommon setup : {\n" b" srs-BandwidthConfig bw0,\n" b" srs-SubframeConfig sc4,\n" b" ackNackSRS-SimultaneousTransmission TRUE\n" b" },\n" b" uplinkPowerControlCommon {\n" b" p0-NominalPUSCH -126,\n" b" alpha al0,\n" b" p0-NominalPUCCH -127,\n" b" deltaFList-PUCCH {\n" b" deltaF-PUCCH-Format1 deltaF-2,\n" b" deltaF-PUCCH-Format1b deltaF1,\n" b" deltaF-PUCCH-Format2 deltaF0,\n" b" deltaF-PUCCH-Format2a deltaF-2,\n" b" deltaF-PUCCH-Format2b deltaF0\n" b" },\n" b" deltaPreambleMsg3 -1\n" b" },\n" b" ul-CyclicPrefixLength len1\n" b" },\n" b" ue-TimersAndConstants {\n" b" t300 ms100,\n" b" t301 ms200,\n" b" t310 ms50,\n" b" n310 n2,\n" b" t311 ms30000,\n" b" n311 n2\n" b" },\n" b" freqInfo {\n" b" additionalSpectrumEmission 3\n" b" },\n" b" timeAlignmentTimerCommon sf500\n" b" },\n" b" sib3 : {\n" b" cellReselectionInfoCommon {\n" b" q-Hyst dB0,\n" b" speedStateReselectionPars {\n" b" mobilityStateParameters {\n" b" t-Evaluation s180,\n" b" t-HystNormal s180,\n" b" n-CellChangeMedium 1,\n" b" n-CellChangeHigh 16\n" b" },\n" b" q-HystSF {\n" b" sf-Medium dB-6,\n" b" sf-High dB-4\n" b" }\n" b" }\n" b" },\n" b" cellReselectionServingFreqInfo {\n" b" threshServingLow 7,\n" b" cellReselectionPriority 3\n" b" },\n" b" intraFreqCellReselectionInfo {\n" b" q-RxLevMin -33,\n" b" s-IntraSearch 0,\n" b" presenceAntennaPort1 FALSE,\n" b" neighCellConfig '10'B,\n" b" t-ReselectionEUTRA 4\n" b" }\n" b" },\n" b" sib4 : {\n" b" },\n" b" sib5 : {\n" b" interFreqCarrierFreqList {\n" b" {\n" b" dl-CarrierFreq 1,\n" b" q-RxLevMin -45,\n" b" t-ReselectionEUTRA 0,\n" b" threshX-High 31,\n" b" threshX-Low 29,\n" b" allowedMeasBandwidth mbw6,\n" b" presenceAntennaPort1 TRUE,\n" b" neighCellConfig '00'B,\n" b" q-OffsetFreq dB0\n" b" }\n" b" }\n" b" },\n" b" sib6 : {\n" b" t-ReselectionUTRA 3\n" b" },\n" b" sib7 : {\n" b" t-ReselectionGERAN 3\n" b" },\n" b" sib8 : {\n" b" parameters1XRTT {\n" b" longCodeState1XRTT '000000010010001101000101011001111000100100'B\n" b" }\n" b" },\n" b" sib9 : {\n" b" hnb-Name '34'H\n" b" },\n" b" sib10 : {\n" b" messageIdentifier '0010001100110100'B,\n" b" serialNumber '0001001000110100'B,\n" b" warningType '3212'H\n" b" },\n" b" sib11 : {\n" b" messageIdentifier '0110011110001000'B,\n" b" serialNumber '0101010000110101'B,\n" b" warningMessageSegmentType notLastSegment,\n" b" warningMessageSegmentNumber 19,\n" b" warningMessageSegment '12'H\n" b" }\n" b" }\n" b" }\n" b" }\n" b"}" ) self.assertEqual(rrc.encode('BCCH-DL-SCH-Message', decoded, indent=2), encoded) def test_repr_all_types(self): all_types = asn1tools.compile_files('tests/files/all_types.asn', 'gser') self.assertEqual(repr(all_types.types['Boolean']), 'Boolean(Boolean)') self.assertEqual(repr(all_types.types['Integer']), 'Integer(Integer)') self.assertEqual(repr(all_types.types['Real']), 'Real(Real)') self.assertEqual(repr(all_types.types['Bitstring']), 'BitString(Bitstring)') self.assertEqual(repr(all_types.types['Octetstring']), 'OctetString(Octetstring)') self.assertEqual(repr(all_types.types['Null']), 'Null(Null)') self.assertEqual(repr(all_types.types['Objectidentifier']), 'ObjectIdentifier(Objectidentifier)') self.assertEqual(repr(all_types.types['Enumerated']), 'Enumerated(Enumerated)') self.assertEqual(repr(all_types.types['Utf8string']), 'UTF8String(Utf8string)') self.assertEqual(repr(all_types.types['Sequence']), 'Sequence(Sequence, [])') self.assertEqual(repr(all_types.types['Set']), 'Set(Set, [])') self.assertEqual(repr(all_types.types['Sequence2']), 'Sequence(Sequence2, [Integer(a)])') self.assertEqual(repr(all_types.types['Set2']), 'Set(Set2, [Integer(a)])') self.assertEqual(repr(all_types.types['Numericstring']), 'NumericString(Numericstring)') self.assertEqual(repr(all_types.types['Printablestring']), 'PrintableString(Printablestring)') self.assertEqual(repr(all_types.types['Ia5string']), 'IA5String(Ia5string)') self.assertEqual(repr(all_types.types['Universalstring']), 'UniversalString(Universalstring)') self.assertEqual(repr(all_types.types['Visiblestring']), 'VisibleString(Visiblestring)') self.assertEqual(repr(all_types.types['Generalstring']), 'GeneralString(Generalstring)') self.assertEqual(repr(all_types.types['Bmpstring']), 'BMPString(Bmpstring)') self.assertEqual(repr(all_types.types['Graphicstring']), 'GraphicString(Graphicstring)') self.assertEqual(repr(all_types.types['Teletexstring']), 'TeletexString(Teletexstring)') self.assertEqual(repr(all_types.types['Utctime']), 'UTCTime(Utctime)') self.assertEqual(repr(all_types.types['SequenceOf']), 'SequenceOf(SequenceOf, Integer())') self.assertEqual(repr(all_types.types['SetOf']), 'SetOf(SetOf, Integer())') self.assertEqual(repr(all_types.types['GeneralizedTime1']), 'GeneralizedTime(GeneralizedTime1)') self.assertEqual(repr(all_types.types['Choice']), 'Choice(Choice, [Integer(a)])') self.assertEqual(repr(all_types.types['Any']), 'Any(Any)') self.assertEqual(repr(all_types.types['Sequence12']), 'Sequence(Sequence12, [SequenceOf(a, Recursive(Sequence12))])') def test_rfc4511(self): rfc4511 = asn1tools.compile_dict(deepcopy(RFC4511), 'gser') # A search request message. decoded = { 'messageID': 2, 'protocolOp': ( 'searchRequest', { 'baseObject': b'', 'scope': 'wholeSubtree', 'derefAliases': 'neverDerefAliases', 'sizeLimit': 0, 'timeLimit': 0, 'typesOnly': False, 'filter': ( 'and', [ ( 'substrings', { 'type': b'\x63\x6e', 'substrings': [ ('any', b'\x66\x72\x65\x64') ] } ), ( 'equalityMatch', { 'attributeDesc': b'\x64\x6e', 'assertionValue': b'\x6a\x6f\x65' } ) ] ), 'attributes': [ ] } ) } encoded = ( b"ldapmessage LDAPMessage ::= {\n" b" messageID 2,\n" b" protocolOp searchRequest : {\n" b" baseObject ''H,\n" b" scope wholeSubtree,\n" b" derefAliases neverDerefAliases,\n" b" sizeLimit 0,\n" b" timeLimit 0,\n" b" typesOnly FALSE,\n" b" filter and : {\n" b" substrings : {\n" b" type '636E'H,\n" b" substrings {\n" b" any : '66726564'H\n" b" }\n" b" },\n" b" equalityMatch : {\n" b" attributeDesc '646E'H,\n" b" assertionValue '6A6F65'H\n" b" }\n" b" },\n" b" attributes {\n" b" }\n" b" }\n" b"}" ) self.assertEqual(rfc4511.encode('LDAPMessage', decoded, indent=2), encoded) def test_not_support_decode_with_length(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OCTET STRING " "END", 'gser') with self.assertRaises(NotImplementedError) as cm: foo.decode_with_length('A', b'\x01\x23\x45\x67\x89\xab\xcd\xef') self.assertEqual(str(cm.exception), "This codec does not support decode_with_length().") if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_jer.py000066400000000000000000001116441524544274600171710ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import json import unittest import asn1tools import sys import math from copy import deepcopy from asn1tools.codecs import utc_time_to_datetime as ut2dt from asn1tools.codecs import generalized_time_to_datetime as gt2dt sys.path.append('tests/files') sys.path.append('tests/files/3gpp') from rrc_8_6_0 import EXPECTED as RRC_8_6_0 def loadb(encoded): return json.loads(encoded.decode('utf-8')) class Asn1ToolsJerTest(unittest.TestCase): maxDiff = None def assert_encode_decode_string(self, foo, type_name, decoded, encoded): self.assertEqual(loadb(foo.encode(type_name, decoded)), loadb(encoded)) self.assertEqual(foo.decode(type_name, encoded), decoded) def test_real(self): foo = asn1tools.compile_string( "Foo DEFINITIONS ::= " "BEGIN " "A ::= REAL " "END", 'jer') datas = [ ('A', 1.0, b'1.0'), ('A', -2.0, b'-2.0'), ('A', float('inf'), b'"INF"'), ('A', float('-inf'), b'"-INF"') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) self.assertEqual(foo.encode('A', float('nan')), b'"NaN"') self.assertTrue(math.isnan(foo.decode('A', b'"NaN"'))) self.assertEqual(foo.decode('A', b'"0"'), 0.0) self.assertEqual(foo.decode('A', b'"-0"'), 0.0) def test_bit_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BIT STRING " "B ::= BIT STRING (SIZE (6)) " "END", 'jer') datas = [ ('A', (b'\x40', 4), b'{"value": "40", "length": 4}'), ('A', (b'\xab', 8), b'{"value": "AB", "length": 8}'), ('B', (b'\xac', 6), b'"AC"') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_octet_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OCTET STRING " "END", 'jer') datas = [ ('A', b'\x01\x23\x45\x67\x89\xab\xcd\xef', b'"0123456789ABCDEF"') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_object_identifier(self): foo = asn1tools.compile_string( "Foo DEFINITIONS ::= " "BEGIN " "A ::= OBJECT IDENTIFIER " "END", 'jer') datas = [ ('A', '1.2.3', b'"1.2.3"') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_external(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= EXTERNAL " "END", 'jer') datas = [ ('A', {'encoding': ('octet-aligned', b'\x12')}, b'{"encoding": {"octet-aligned": "12"}}') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_enumerated(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= ENUMERATED { " " a(1), " " b(3) " "} " "END", 'jer') datas = [ ('A', 'a', b'"a"'), ('A', 'b', b'"b"') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) # Encode error. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('A', 'c') self.assertEqual(str(cm.exception), "A: Expected enumeration value 'a' or 'b', but got 'c'.") # Decode error. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'"c"') self.assertEqual(str(cm.exception), "A: Expected enumeration value 'a' or 'b', but got 'c'.") def test_sequence(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE { " " a SEQUENCE OF A OPTIONAL " "} " "B ::= SEQUENCE { " " a INTEGER DEFAULT 5 " "} " "C ::= SEQUENCE { " " a INTEGER, " " b INTEGER " "} " "END", 'jer') datas = [ ('A', {}, b'{}'), ('A', {'a': [{}]}, b'{"a": [{}]}'), ('A', {'a': [{'a': []}]}, b'{"a": [{"a": []}]}') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) # Non-symmetrical encoding and decoding because default values # are not encoded, but part of the decoded (given that the # root and addition is present). self.assertEqual(foo.encode('B', {}), b'{}') self.assertEqual(foo.decode('B', b'{}'), {'a': 5}) # Missing member. with self.assertRaises(asn1tools.EncodeError) as cm: encoded = foo.encode('C', {'a': 1}) self.assertEqual( str(cm.exception), "C: Sequence member 'b' not found in {'a': 1}.") def test_sequence_of(self): foo = asn1tools.compile_string( "Foo DEFINITIONS ::= " "BEGIN " "A ::= SEQUENCE OF INTEGER " "END", 'jer') datas = [ ('A', [], b'[]'), ('A', [1, 3], b'[1, 3]') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_set_of(self): foo = asn1tools.compile_string( "Foo DEFINITIONS ::= " "BEGIN " "A ::= SET OF INTEGER " "END", 'jer') datas = [ ('A', [], b'[]'), ('A', [1, 3], b'[1, 3]') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_choice(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= CHOICE { " " a BOOLEAN, " " b INTEGER " "} " "END", 'jer') datas = [ ('A', ('a', True), b'{"a": true}'), ('A', ('b', 3), b'{"b": 3}') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) # Encode error. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('A', ('c', None)) self.assertEqual(str(cm.exception), "A: Expected choice 'a' or 'b', but got 'c'.") # Decode error. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'{"c": null}') self.assertEqual(str(cm.exception), "A: Expected choice 'a' or 'b', but got 'c'.") def test_utf8_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UTF8String " "END", 'jer') datas = [ ('A', u'', b'""'), ('A', u'bar', b'"bar"'), ('A', u'a\u1010c', b'"a\xe1\x80\x90c"'), ('A', u'f → ∝', b'"f \xe2\x86\x92 \xe2\x88\x9d"') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_universal_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UniversalString " "END", 'jer') datas = [ ('A', u'bar', b'"bar"'), ('A', u'åäö', b'\x22\xc3\xa5\xc3\xa4\xc3\xb6\x22') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_utc_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS ::= " "BEGIN " "A ::= UTCTime " "END", 'jer') datas = [ ('A', ut2dt('121001230001Z'), b'"121001230001Z"') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_generalized_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS ::= " "BEGIN " "A ::= GeneralizedTime " "END", 'jer') datas = [ ('A', gt2dt('20001231235959.999'), b'"20001231235959.999"') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_any(self): foo = asn1tools.compile_string( "Foo DEFINITIONS ::= " "BEGIN " "A ::= ANY " "END", 'jer') with self.assertRaises(NotImplementedError) as cm: foo.encode('A', b'') self.assertEqual(str(cm.exception), 'ANY is not yet implemented.') with self.assertRaises(NotImplementedError) as cm: foo.decode('A', b'""') self.assertEqual(str(cm.exception), 'ANY is not yet implemented.') def test_foo(self): foo = asn1tools.compile_files(['tests/files/foo.asn'], 'jer') self.assertEqual(len(foo.types), 2) self.assertTrue(foo.types['Question'] is not None) self.assertTrue(foo.types['Answer'] is not None) self.assertEqual(len(foo.modules), 1) self.assertTrue(foo.modules['Foo'] is not None) # Question. decoded_message = {'id': 1, 'question': 'Is 1+1=3?'} encoded_message = b'{"id":1,"question":"Is 1+1=3?"}' encoded = foo.encode('Question', decoded_message) self.assertEqual(loadb(encoded), loadb(encoded_message)) decoded = foo.decode('Question', encoded) self.assertEqual(decoded, decoded_message) # Answer. decoded_message = {'id': 1, 'answer': False} encoded_message = b'{"id":1,"answer":false}' encoded = foo.encode('Answer', decoded_message) self.assertEqual(loadb(encoded), loadb(encoded_message)) decoded = foo.decode('Answer', encoded) self.assertEqual(decoded, decoded_message) def test_decode_length(self): foo = asn1tools.compile_files('tests/files/foo.asn', 'jer') with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode_length(b'') self.assertEqual(str(cm.exception), 'Decode length is not supported for this codec.') def test_rrc_8_6_0(self): rrc = asn1tools.compile_dict(deepcopy(RRC_8_6_0), 'jer') # Message 1. decoded_message = { 'message': ( 'c1', ( 'paging', { 'systemInfoModification': 'true', 'nonCriticalExtension': { } } ) ) } encoded_message = ( b'{"message":{"c1":{"paging":{"systemInfoModification":"true","' b'nonCriticalExtension":{}}}}}' ) encoded = rrc.encode('PCCH-Message', decoded_message) self.assertEqual(loadb(encoded), loadb(encoded_message)) decoded = rrc.decode('PCCH-Message', encoded) self.assertEqual(decoded, decoded_message) # Message 2. decoded_message = { 'message': { 'dl-Bandwidth': 'n6', 'phich-Config': { 'phich-Duration': 'normal', 'phich-Resource': 'half' }, 'systemFrameNumber': (b'\x12', 8), 'spare': (b'\x34\x40', 10) } } encoded_message = ( b'{"message":{"dl-Bandwidth":"n6","phich-Config":{"phich-Duration' b'":"normal","phich-Resource":"half"},"spare":"3440","' b'systemFrameNumber":"12"}}' ) encoded = rrc.encode('BCCH-BCH-Message', decoded_message) self.assertEqual(loadb(encoded), loadb(encoded_message)) decoded = rrc.decode('BCCH-BCH-Message', encoded) self.assertEqual(decoded, decoded_message) # Message 3. decoded_message = { 'message': ( 'c1', ( 'systemInformation', { 'criticalExtensions': ( 'systemInformation-r8', { 'sib-TypeAndInfo': [ ( 'sib2', { 'ac-BarringInfo': { 'ac-BarringForEmergency': True, 'ac-BarringForMO-Data': { 'ac-BarringFactor': 'p95', 'ac-BarringTime': 's128', 'ac-BarringForSpecialAC': (b'\xf0', 5) } }, 'radioResourceConfigCommon': { 'rach-ConfigCommon': { 'preambleInfo': { 'numberOfRA-Preambles': 'n24', 'preamblesGroupAConfig': { 'sizeOfRA-PreamblesGroupA': 'n28', 'messageSizeGroupA': 'b144', 'messagePowerOffsetGroupB': 'minusinfinity' } }, 'powerRampingParameters': { 'powerRampingStep': 'dB0', 'preambleInitialReceivedTargetPower': 'dBm-102' }, 'ra-SupervisionInfo': { 'preambleTransMax': 'n8', 'ra-ResponseWindowSize': 'sf6', 'mac-ContentionResolutionTimer': 'sf48' }, 'maxHARQ-Msg3Tx': 8 }, 'bcch-Config': { 'modificationPeriodCoeff': 'n2' }, 'pcch-Config': { 'defaultPagingCycle': 'rf256', 'nB': 'twoT' }, 'prach-Config': { 'rootSequenceIndex': 836, 'prach-ConfigInfo': { 'prach-ConfigIndex': 33, 'highSpeedFlag': False, 'zeroCorrelationZoneConfig': 10, 'prach-FreqOffset': 64 } }, 'pdsch-ConfigCommon': { 'referenceSignalPower': -60, 'p-b': 2 }, 'pusch-ConfigCommon': { 'pusch-ConfigBasic': { 'n-SB': 1, 'hoppingMode': 'interSubFrame', 'pusch-HoppingOffset': 10, 'enable64QAM': False }, 'ul-ReferenceSignalsPUSCH': { 'groupHoppingEnabled': True, 'groupAssignmentPUSCH': 22, 'sequenceHoppingEnabled': False, 'cyclicShift': 5 } }, 'pucch-ConfigCommon': { 'deltaPUCCH-Shift': 'ds1', 'nRB-CQI': 98, 'nCS-AN': 4, 'n1PUCCH-AN': 2047 }, 'soundingRS-UL-ConfigCommon': ( 'setup', { 'srs-BandwidthConfig': 'bw0', 'srs-SubframeConfig': 'sc4', 'ackNackSRS-SimultaneousTransmission': True }), 'uplinkPowerControlCommon': { 'p0-NominalPUSCH': -126, 'alpha': 'al0', 'p0-NominalPUCCH': -127, 'deltaFList-PUCCH': { 'deltaF-PUCCH-Format1': 'deltaF-2', 'deltaF-PUCCH-Format1b': 'deltaF1', 'deltaF-PUCCH-Format2': 'deltaF0', 'deltaF-PUCCH-Format2a': 'deltaF-2', 'deltaF-PUCCH-Format2b': 'deltaF0' }, 'deltaPreambleMsg3': -1 }, 'ul-CyclicPrefixLength': 'len1' }, 'ue-TimersAndConstants': { 't300': 'ms100', 't301': 'ms200', 't310': 'ms50', 'n310': 'n2', 't311': 'ms30000', 'n311': 'n2' }, 'freqInfo': { 'additionalSpectrumEmission': 3 }, 'timeAlignmentTimerCommon': 'sf500' } ), ( 'sib3', { 'cellReselectionInfoCommon': { 'q-Hyst': 'dB0', 'speedStateReselectionPars': { 'mobilityStateParameters': { 't-Evaluation': 's180', 't-HystNormal': 's180', 'n-CellChangeMedium': 1, 'n-CellChangeHigh': 16 }, 'q-HystSF': { 'sf-Medium': 'dB-6', 'sf-High': 'dB-4' } } }, 'cellReselectionServingFreqInfo': { 'threshServingLow': 7, 'cellReselectionPriority': 3 }, 'intraFreqCellReselectionInfo': { 'q-RxLevMin': -33, 's-IntraSearch': 0, 'presenceAntennaPort1': False, 'neighCellConfig': (b'\x80', 2), 't-ReselectionEUTRA': 4 } } ), ( 'sib4', { } ), ( 'sib5', { 'interFreqCarrierFreqList': [ { 'dl-CarrierFreq': 1, 'q-RxLevMin': -45, 't-ReselectionEUTRA': 0, 'threshX-High': 31, 'threshX-Low': 29, 'allowedMeasBandwidth': 'mbw6', 'presenceAntennaPort1': True, 'neighCellConfig': (b'\x00', 2), 'q-OffsetFreq': 'dB0' } ] } ), ( 'sib6', { 't-ReselectionUTRA': 3 } ), ('sib7', { 't-ReselectionGERAN': 3 } ), ('sib8', { 'parameters1XRTT': { 'longCodeState1XRTT': (b'\x01#Eg\x89\x00', 42) } } ), ( 'sib9', { 'hnb-Name': b'4' } ), ('sib10', { 'messageIdentifier': (b'#4', 16), 'serialNumber': (b'\x124', 16), 'warningType': b'2\x12' } ), ( 'sib11', { 'messageIdentifier': (b'g\x88', 16), 'serialNumber': (b'T5', 16), 'warningMessageSegmentType': 'notLastSegment', 'warningMessageSegmentNumber': 19, 'warningMessageSegment': b'\x12' } ) ] } ) } ) ) } encoded_message = ( b'{"message":{"c1":{"systemInformation":{"criticalExtensions":{"sy' b'stemInformation-r8":{"sib-TypeAndInfo":[{"sib2":{"ac-BarringInfo' b'":{"ac-BarringForEmergency":true,"ac-BarringForMO-Data":{"ac-Bar' b'ringFactor":"p95","ac-BarringForSpecialAC":"F0","ac-BarringTime"' b':"s128"}},"freqInfo":{"additionalSpectrumEmission":3},"radioReso' b'urceConfigCommon":{"bcch-Config":{"modificationPeriodCoeff":"n2"' b'},"pcch-Config":{"defaultPagingCycle":"rf256","nB":"twoT"},"pdsc' b'h-ConfigCommon":{"p-b":2,"referenceSignalPower":-60},"prach-Conf' b'ig":{"prach-ConfigInfo":{"highSpeedFlag":false,"prach-ConfigInde' b'x":33,"prach-FreqOffset":64,"zeroCorrelationZoneConfig":10},"roo' b'tSequenceIndex":836},"pucch-ConfigCommon":{"deltaPUCCH-Shift":"d' b's1","n1PUCCH-AN":2047,"nCS-AN":4,"nRB-CQI":98},"pusch-ConfigComm' b'on":{"pusch-ConfigBasic":{"enable64QAM":false,"hoppingMode":"int' b'erSubFrame","n-SB":1,"pusch-HoppingOffset":10},"ul-ReferenceSign' b'alsPUSCH":{"cyclicShift":5,"groupAssignmentPUSCH":22,"groupHoppi' b'ngEnabled":true,"sequenceHoppingEnabled":false}},"rach-ConfigCom' b'mon":{"maxHARQ-Msg3Tx":8,"powerRampingParameters":{"powerRamping' b'Step":"dB0","preambleInitialReceivedTargetPower":"dBm-102"},"pre' b'ambleInfo":{"numberOfRA-Preambles":"n24","preamblesGroupAConfig"' b':{"messagePowerOffsetGroupB":"minusinfinity","messageSizeGroupA"' b':"b144","sizeOfRA-PreamblesGroupA":"n28"}},"ra-SupervisionInfo":' b'{"mac-ContentionResolutionTimer":"sf48","preambleTransMax":"n8",' b'"ra-ResponseWindowSize":"sf6"}},"soundingRS-UL-ConfigCommon":{"s' b'etup":{"ackNackSRS-SimultaneousTransmission":true,"srs-Bandwidth' b'Config":"bw0","srs-SubframeConfig":"sc4"}},"ul-CyclicPrefixLengt' b'h":"len1","uplinkPowerControlCommon":{"alpha":"al0","deltaFList-' b'PUCCH":{"deltaF-PUCCH-Format1":"deltaF-2","deltaF-PUCCH-Format1b' b'":"deltaF1","deltaF-PUCCH-Format2":"deltaF0","deltaF-PUCCH-Forma' b't2a":"deltaF-2","deltaF-PUCCH-Format2b":"deltaF0"},"deltaPreambl' b'eMsg3":-1,"p0-NominalPUCCH":-127,"p0-NominalPUSCH":-126}},"timeA' b'lignmentTimerCommon":"sf500","ue-TimersAndConstants":{"n310":"n2' b'","n311":"n2","t300":"ms100","t301":"ms200","t310":"ms50","t311"' b':"ms30000"}}},{"sib3":{"cellReselectionInfoCommon":{"q-Hyst":"dB' b'0","speedStateReselectionPars":{"mobilityStateParameters":{"n-Ce' b'llChangeHigh":16,"n-CellChangeMedium":1,"t-Evaluation":"s180","t' b'-HystNormal":"s180"},"q-HystSF":{"sf-High":"dB-4","sf-Medium":"d' b'B-6"}}},"cellReselectionServingFreqInfo":{"cellReselectionPriori' b'ty":3,"threshServingLow":7},"intraFreqCellReselectionInfo":{"nei' b'ghCellConfig":"80","presenceAntennaPort1":false,"q-RxLevMin":-33' b',"s-IntraSearch":0,"t-ReselectionEUTRA":4}}},{"sib4":{}},{"sib5"' b':{"interFreqCarrierFreqList":[{"allowedMeasBandwidth":"mbw6","dl' b'-CarrierFreq":1,"neighCellConfig":"00","presenceAntennaPort1":tr' b'ue,"q-OffsetFreq":"dB0","q-RxLevMin":-45,"t-ReselectionEUTRA":0,' b'"threshX-High":31,"threshX-Low":29}]}},{"sib6":{"t-ReselectionUT' b'RA":3}},{"sib7":{"t-ReselectionGERAN":3}},{"sib8":{"parameters1X' b'RTT":{"longCodeState1XRTT":"012345678900"}}},{"sib9":{"hnb-Name"' b':"34"}},{"sib10":{"messageIdentifier":"2334","serialNumber":"123' b'4","warningType":"3212"}},{"sib11":{"messageIdentifier":"6788","' b'serialNumber":"5435","warningMessageSegment":"12","warningMessag' b'eSegmentNumber":19,"warningMessageSegmentType":"notLastSegment"}' b'}]}}}}}}' ) encoded = rrc.encode('BCCH-DL-SCH-Message', decoded_message) self.assertEqual(loadb(encoded), loadb(encoded_message)) decoded = rrc.decode('BCCH-DL-SCH-Message', encoded) self.assertEqual(decoded, decoded_message) def test_all_types(self): foo = asn1tools.compile_files('tests/files/all_types.asn', 'jer') datas = [ ('Boolean', True, b'true'), ('Integer', 127, b'127'), ('Integer', 0, b'0'), ('Integer', -128, b'-128'), ('Octetstring', b'\x00', b'"00"'), ('Null', None, b'null'), ('Utf8string', 'foo', b'"foo"'), ('Sequence', {}, b'{}'), ('Sequence2', {'a': 1}, b'{"a":1}'), ('Set', {}, b'{}'), ('Set2', {'a': 2}, b'{"a":2}'), ('Numericstring', '123', b'"123"'), ('Printablestring', 'foo', b'"foo"'), ('Ia5string', 'bar', b'"bar"'), ('Universalstring', 'bar', b'"bar"'), ('Visiblestring', 'bar', b'"bar"'), ('Generalstring', 'bar', b'"bar"'), ('Bmpstring', 'bar', b'"bar"'), ('Graphicstring', 'bar', b'"bar"'), ('Teletexstring', 'fum', b'"fum"') ] for type_name, decoded, encoded in datas: self.assertEqual(foo.encode(type_name, decoded), encoded) self.assertEqual(foo.decode(type_name, encoded), decoded) decoded_message = (b'\x80', 1) encoded_message = b'{"value":"80","length":1}' self.assertEqual(loadb(foo.encode('Bitstring', decoded_message)), loadb(encoded_message)) self.assertEqual(foo.decode('Bitstring', encoded_message), decoded_message) def test_repr_all_types(self): foo = asn1tools.compile_files('tests/files/all_types.asn', 'jer') self.assertEqual(repr(foo.types['Boolean']), 'Boolean(Boolean)') self.assertEqual(repr(foo.types['Integer']), 'Integer(Integer)') self.assertEqual(repr(foo.types['Real']), 'Real(Real)') self.assertEqual(repr(foo.types['Bitstring']), 'BitString(Bitstring)') self.assertEqual(repr(foo.types['Octetstring']), 'OctetString(Octetstring)') self.assertEqual(repr(foo.types['Null']), 'Null(Null)') self.assertEqual(repr(foo.types['Objectidentifier']), 'ObjectIdentifier(Objectidentifier)') self.assertEqual(repr(foo.types['Enumerated']), 'Enumerated(Enumerated)') self.assertEqual(repr(foo.types['Utf8string']), 'UTF8String(Utf8string)') self.assertEqual(repr(foo.types['Sequence']), 'Sequence(Sequence, [])') self.assertEqual(repr(foo.types['Set']), 'Set(Set, [])') self.assertEqual(repr(foo.types['Sequence2']), 'Sequence(Sequence2, [Integer(a)])') self.assertEqual(repr(foo.types['Set2']), 'Set(Set2, [Integer(a)])') self.assertEqual(repr(foo.types['Numericstring']), 'NumericString(Numericstring)') self.assertEqual(repr(foo.types['Printablestring']), 'PrintableString(Printablestring)') self.assertEqual(repr(foo.types['Ia5string']), 'IA5String(Ia5string)') self.assertEqual(repr(foo.types['Universalstring']), 'UniversalString(Universalstring)') self.assertEqual(repr(foo.types['Visiblestring']), 'VisibleString(Visiblestring)') self.assertEqual(repr(foo.types['Generalstring']), 'GeneralString(Generalstring)') self.assertEqual(repr(foo.types['Bmpstring']), 'BMPString(Bmpstring)') self.assertEqual(repr(foo.types['Graphicstring']), 'GraphicString(Graphicstring)') self.assertEqual(repr(foo.types['Teletexstring']), 'TeletexString(Teletexstring)') self.assertEqual(repr(foo.types['Utctime']), 'UTCTime(Utctime)') self.assertEqual(repr(foo.types['SequenceOf']), 'SequenceOf(SequenceOf, Integer())') self.assertEqual(repr(foo.types['SetOf']), 'SetOf(SetOf, Integer())') self.assertEqual(repr(foo.types['GeneralizedTime1']), 'GeneralizedTime(GeneralizedTime1)') self.assertEqual(repr(foo.types['Choice']), 'Choice(Choice, [Integer(a)])') self.assertEqual(repr(foo.types['Any']), 'Any(Any)') self.assertEqual(repr(foo.types['Sequence12']), 'Sequence(Sequence12, [SequenceOf(a, Recursive(Sequence12))])') def test_all_types_automatic_tags(self): foo = asn1tools.compile_files( 'tests/files/all_types_automatic_tags.asn', 'jer') datas = [ ('Sequence3', {'a': 1, 'c': 2,'d': True}, b'{"a":1,"c":2,"d":true}') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_indent(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE { " " a SEQUENCE { " " b BOOLEAN, " " c INTEGER " " } " "} " "END", 'jer') datas = [ ('A', {'a': {'b': True, 'c': 5}}, [ b'{', b' "a": {', b' "c": 5,', b' "c": 5, ', b' "b": true,', b' "b": true, ', b' "c": 5', b' "b": true', b' }', b'}' ]) ] for type_name, decoded, encoded_lines in datas: encoded = foo.encode(type_name, decoded, indent=4) for line in encoded.splitlines(): self.assertIn(line, encoded_lines) def test_not_support_decode_with_length(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OCTET STRING " "END", 'jer') with self.assertRaises(NotImplementedError) as cm: foo.decode_with_length('A', b'\x01\x23\x45\x67\x89\xab\xcd\xef') self.assertEqual(str(cm.exception), "This codec does not support decode_with_length().") if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_oer.c000066400000000000000000001431211524544274600167630ustar00rootroot00000000000000#include #include #include #include #include "nala.h" #include "files/c_source/oer.h" #include "files/c_source/c_source-minus.h" #define membersof(a) (sizeof(a) / (sizeof((a)[0]))) static bool fequal(double v1, double v2) { return (fabs(v1 - v2) < 0.000001); } TEST(oer_c_source_a) { uint8_t encoded[42]; struct oer_c_source_a_t decoded; /* Encode. */ decoded.a = -1; decoded.b = -2; decoded.c = -3; decoded.d = -4; decoded.e = 1; decoded.f = 2; decoded.g = 3; decoded.h = 4; decoded.i = true; memset(&decoded.j.buf[0], 5, sizeof(decoded.j.buf)); memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_a_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\xff\xff\xfe\xff\xff\xff\xfd\xff\xff\xff\xff\xff\xff" "\xff\xfc\x01\x00\x02\x00\x00\x00\x03\x00\x00\x00\x00" "\x00\x00\x00\x04\xff\x05\x05\x05\x05\x05\x05\x05\x05" "\x05\x05\x05", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_a_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a, -1); ASSERT_EQ(decoded.b, -2); ASSERT_EQ(decoded.c, -3); ASSERT_EQ(decoded.d, -4); ASSERT_EQ(decoded.e, 1); ASSERT_EQ(decoded.f, 2); ASSERT_EQ(decoded.g, 3); ASSERT_EQ(decoded.h, 4); ASSERT_TRUE(decoded.i); ASSERT_MEMORY_EQ(&decoded.j.buf[0], "\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05", sizeof(decoded.j.buf)); } TEST(oer_c_source_a_decode_spare_data) { uint8_t encoded[43] = "\xff\xff\xfe\xff\xff\xff\xfd\xff\xff\xff\xff\xff\xff" "\xff\xfc\x01\x00\x02\x00\x00\x00\x03\x00\x00\x00\x00" "\x00\x00\x00\x04\xff\x05\x05\x05\x05\x05\x05\x05\x05" "\x05\x05\x05\x00"; struct oer_c_source_a_t decoded; memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_a_decode(&decoded, &encoded[0], sizeof(encoded)), 42); ASSERT_EQ(decoded.a, -1); ASSERT_EQ(decoded.b, -2); ASSERT_EQ(decoded.c, -3); ASSERT_EQ(decoded.d, -4); ASSERT_EQ(decoded.e, 1); ASSERT_EQ(decoded.f, 2); ASSERT_EQ(decoded.g, 3); ASSERT_EQ(decoded.h, 4); ASSERT_TRUE(decoded.i); ASSERT_MEMORY_EQ(&decoded.j.buf[0], "\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05", sizeof(decoded.j.buf)); } TEST(oer_c_source_a_encode_error_no_mem) { uint8_t encoded[41]; struct oer_c_source_a_t decoded; decoded.a = -1; decoded.b = -2; decoded.c = -3; decoded.d = -4; decoded.e = 1; decoded.f = 2; decoded.g = 3; decoded.h = 4; decoded.i = true; memset(&decoded.j.buf[0], 5, sizeof(decoded.j.buf)); ASSERT_EQ(oer_c_source_a_encode(&encoded[0], sizeof(encoded), &decoded), -ENOMEM); } TEST(oer_c_source_a_decode_error_out_of_data) { uint8_t encoded[41] = "\xff\xff\xfe\xff\xff\xff\xfd\xff\xff\xff\xff\xff\xff" "\xff\xfc\x01\x00\x02\x00\x00\x00\x03\x00\x00\x00\x00" "\x00\x00\x00\x04\xff\x05\x05\x05\x05\x05\x05\x05\x05" "\x05\x05"; struct oer_c_source_a_t decoded; ASSERT_EQ(oer_c_source_a_decode(&decoded, &encoded[0], sizeof(encoded)), -EOUTOFDATA); } TEST(oer_c_source_b_choice_a) { uint8_t encoded[2]; struct oer_c_source_b_t decoded; /* Encode. */ decoded.choice = oer_c_source_b_choice_a_e; decoded.value.a = -10; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_b_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x80\xf6", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_b_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.choice, oer_c_source_b_choice_a_e); ASSERT_EQ(decoded.value.a, -10); } TEST(oer_c_source_b_choice_b) { uint8_t encoded[43]; struct oer_c_source_b_t decoded; /* Encode. */ decoded.choice = oer_c_source_b_choice_b_e; decoded.value.b.a = -1; decoded.value.b.b = -2; decoded.value.b.c = -3; decoded.value.b.d = -4; decoded.value.b.e = 1; decoded.value.b.f = 2; decoded.value.b.g = 3; decoded.value.b.h = 4; decoded.value.b.i = true; memset(&decoded.value.b.j.buf[0], 5, sizeof(decoded.value.b.j.buf)); memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_b_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x81\xff\xff\xfe\xff\xff\xff\xfd\xff\xff\xff\xff\xff" "\xff\xff\xfc\x01\x00\x02\x00\x00\x00\x03\x00\x00\x00" "\x00\x00\x00\x00\x04\xff\x05\x05\x05\x05\x05\x05\x05" "\x05\x05\x05\x05", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_b_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.choice, oer_c_source_b_choice_b_e); ASSERT_EQ(decoded.value.b.a, -1); ASSERT_EQ(decoded.value.b.b, -2); ASSERT_EQ(decoded.value.b.c, -3); ASSERT_EQ(decoded.value.b.d, -4); ASSERT_EQ(decoded.value.b.e, 1); ASSERT_EQ(decoded.value.b.f, 2); ASSERT_EQ(decoded.value.b.g, 3); ASSERT_EQ(decoded.value.b.h, 4); ASSERT_TRUE(decoded.value.b.i); ASSERT_MEMORY_EQ(&decoded.value.b.j.buf[0], "\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05", sizeof(decoded.value.b.j.buf)); } TEST(oer_c_source_b_decode_error_bad_choice) { /* 0x80 (a), 0x81 (b) and 0x82 (c) are valid tags in the encoded data. */ uint8_t encoded[2] = "\x83\x00"; struct oer_c_source_b_t decoded; ASSERT_EQ(oer_c_source_b_decode(&decoded, &encoded[0], sizeof(encoded)), -EBADCHOICE); } TEST(oer_c_source_c_empty) { uint8_t encoded[2]; struct oer_c_source_c_t decoded; /* Encode. */ decoded.length = 0; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_c_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x01\x00", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_c_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.length, 0); } TEST(oer_c_source_c_2_elements) { uint8_t encoded[6]; struct oer_c_source_c_t decoded; /* Encode. */ decoded.length = 2; decoded.elements[0].choice = oer_c_source_b_choice_a_e; decoded.elements[0].value.a = -11; decoded.elements[1].choice = oer_c_source_b_choice_a_e; decoded.elements[1].value.a = 13; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_c_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x01\x02\x80\xf5\x80\x0d", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_c_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.length, 2); ASSERT_EQ(decoded.elements[0].choice, oer_c_source_b_choice_a_e); ASSERT_EQ(decoded.elements[0].value.a, -11); ASSERT_EQ(decoded.elements[1].choice, oer_c_source_b_choice_a_e); ASSERT_EQ(decoded.elements[1].value.a, 13); } TEST(oer_c_source_c_decode_error_bad_length) { uint8_t encoded[8] = "\x01\x03\x80\xf5\x80\x0d\x80\x0e"; struct oer_c_source_c_t decoded; ASSERT_EQ(oer_c_source_c_decode(&decoded, &encoded[0], sizeof(encoded)), -EBADLENGTH); } TEST(oer_c_source_d_all_present) { uint8_t encoded[21]; struct oer_c_source_d_t decoded; /* Encode. */ decoded.length = 1; decoded.elements[0].a.b.choice = oer_c_source_d_a_b_choice_c_e; decoded.elements[0].a.b.value.c = 0; decoded.elements[0].a.e.length = 3; decoded.elements[0].g.h = oer_c_source_d_g_h_j_e; decoded.elements[0].g.l.length = 2; decoded.elements[0].g.l.buf[0] = 0x54; decoded.elements[0].g.l.buf[1] = 0x55; decoded.elements[0].m.is_n_present = true; decoded.elements[0].m.n = false; decoded.elements[0].m.o = 2; decoded.elements[0].m.is_p_present = true; memset(&decoded.elements[0].m.p.q.buf[0], 3, sizeof(decoded.elements[0].m.p.q.buf)); decoded.elements[0].m.p.is_r_present = true; decoded.elements[0].m.p.r = true; decoded.elements[0].m.s = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_d_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x01\x01\x80\x00\x01\x03\x00\x02\x54\x55\xf0\x00\x02\x80\x03\x03" "\x03\x03\x03\xff\xff", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_d_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.length, 1); ASSERT_EQ(decoded.elements[0].a.b.choice, oer_c_source_d_a_b_choice_c_e); ASSERT_EQ(decoded.elements[0].a.b.value.c, 0); ASSERT_EQ(decoded.elements[0].a.e.length, 3); ASSERT_EQ(decoded.elements[0].g.h, oer_c_source_d_g_h_j_e); ASSERT_EQ(decoded.elements[0].g.l.length, 2); ASSERT_EQ(decoded.elements[0].g.l.buf[0], 0x54); ASSERT_EQ(decoded.elements[0].g.l.buf[1], 0x55); ASSERT_TRUE(decoded.elements[0].m.is_n_present); ASSERT_EQ(decoded.elements[0].m.n, false); ASSERT_EQ(decoded.elements[0].m.o, 2); ASSERT_TRUE(decoded.elements[0].m.is_p_present); ASSERT_MEMORY_EQ(&decoded.elements[0].m.p.q.buf[0], "\x03\x03\x03\x03\x03", sizeof(decoded.elements[0].m.p.q.buf)); ASSERT_TRUE(decoded.elements[0].m.p.is_r_present); ASSERT_EQ(decoded.elements[0].m.p.r, true); ASSERT_EQ(decoded.elements[0].m.s, true); } TEST(oer_c_source_d_some_missing) { uint8_t encoded[19]; struct oer_c_source_d_t decoded; /* Encode. */ decoded.length = 1; decoded.elements[0].a.b.choice = oer_c_source_d_a_b_choice_d_e; decoded.elements[0].a.b.value.d = false; decoded.elements[0].a.e.length = 3; decoded.elements[0].g.h = oer_c_source_d_g_h_k_e; decoded.elements[0].g.l.length = 1; decoded.elements[0].g.l.buf[0] = 0x54; decoded.elements[0].m.is_n_present = false; /* Default value 3. */ decoded.elements[0].m.o = 3; decoded.elements[0].m.is_p_present = true; memset(&decoded.elements[0].m.p.q.buf[0], 3, sizeof(decoded.elements[0].m.p.q.buf)); decoded.elements[0].m.p.is_r_present = false; decoded.elements[0].m.s = false; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_d_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x01\x01\x81\x00\x01\x03\x80\x82\x02\x00\x01\x54\x20\x00\x03" "\x03\x03\x03\x03", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_d_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.length, 1); ASSERT_EQ(decoded.elements[0].a.b.choice, oer_c_source_d_a_b_choice_d_e); ASSERT_EQ(decoded.elements[0].a.b.value.d, false); ASSERT_EQ(decoded.elements[0].a.e.length, 3); ASSERT_EQ(decoded.elements[0].g.h, oer_c_source_d_g_h_k_e); ASSERT_EQ(decoded.elements[0].g.l.length, 1); ASSERT_EQ(decoded.elements[0].g.l.buf[0], 0x54); ASSERT_FALSE(decoded.elements[0].m.is_n_present); ASSERT_EQ(decoded.elements[0].m.o, 3); ASSERT_TRUE(decoded.elements[0].m.is_p_present); ASSERT_MEMORY_EQ(&decoded.elements[0].m.p.q.buf[0], "\x03\x03\x03\x03\x03", sizeof(decoded.elements[0].m.p.q.buf)); ASSERT_FALSE(decoded.elements[0].m.p.is_r_present); ASSERT_EQ(decoded.elements[0].m.s, false); } TEST(oer_c_source_e) { uint8_t encoded[3]; struct oer_c_source_e_t decoded; /* Encode. */ decoded.a.choice = oer_c_source_e_a_choice_b_e; decoded.a.value.b.choice = oer_c_source_e_a_b_choice_c_e; decoded.a.value.b.value.c = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_e_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x80\x80\xff", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_e_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a.choice, oer_c_source_e_a_choice_b_e); ASSERT_EQ(decoded.a.value.b.choice, oer_c_source_e_a_b_choice_c_e); ASSERT_EQ(decoded.a.value.b.value.c, true); } TEST(oer_c_source_f) { uint8_t encoded[8]; struct oer_c_source_f_t decoded; /* Encode. */ decoded.length = 2; decoded.elements[0].elements[0] = false; decoded.elements[1].elements[0] = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_f_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x01\x02\x01\x01\x00\x01\x01\xff", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_f_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.length, 2); ASSERT_EQ(decoded.elements[0].elements[0], false); ASSERT_EQ(decoded.elements[1].elements[0], true); } TEST(oer_c_source_g) { uint8_t encoded[4]; struct oer_c_source_g_t decoded; /* Encode. */ decoded.is_a_present = true; decoded.a = true; decoded.is_b_present = false; decoded.is_c_present = false; decoded.is_d_present = false; decoded.is_e_present = false; decoded.is_f_present = false; decoded.is_g_present = false; decoded.is_h_present = false; decoded.is_i_present = true; decoded.i = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_g_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x80\x80\xff\xff", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_g_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_TRUE(decoded.is_a_present); ASSERT_EQ(decoded.a, true); ASSERT_FALSE(decoded.is_b_present); ASSERT_FALSE(decoded.is_c_present); ASSERT_FALSE(decoded.is_d_present); ASSERT_FALSE(decoded.is_e_present); ASSERT_FALSE(decoded.is_f_present); ASSERT_FALSE(decoded.is_g_present); ASSERT_FALSE(decoded.is_h_present); ASSERT_TRUE(decoded.is_i_present); ASSERT_EQ(decoded.i, true); } TEST(oer_c_source_h) { uint8_t encoded[1]; struct oer_c_source_h_t decoded = {0}; /* Encode. */ memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_h_encode(&encoded[0], sizeof(encoded), &decoded), 0); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_h_decode(&decoded, &encoded[0], sizeof(encoded)), 0); } TEST(oer_c_source_i) { uint8_t encoded[24]; struct oer_c_source_i_t decoded; uint8_t data[24] = "\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03" "\x04\x01\x02\x03\x04\x01\x02\x03\x04"; /* Encode. */ memcpy(&decoded.buf[0], &data[0], sizeof(data)); memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_i_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &data[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_i_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_MEMORY_EQ(&decoded.buf[0], &data[0], sizeof(data)); } TEST(oer_c_source_j) { uint8_t encoded[23]; struct oer_c_source_j_t decoded; uint8_t data[22] = "\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03" "\x04\x01\x02\x03\x04\x01\x02"; /* Encode. */ decoded.length = sizeof(data); memcpy(&decoded.buf[0], &data[0], sizeof(data)); memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_j_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x16\x01\x02\x03\x04\x01\x02\x03\x04\x01\x02\x03\x04\x01" "\x02\x03\x04\x01\x02\x03\x04\x01\x02", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_j_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.length, sizeof(data)); ASSERT_MEMORY_EQ(&decoded.buf[0], &data[0], sizeof(data)); } TEST(oer_c_source_k) { uint8_t encoded[1]; struct oer_c_source_k_t decoded; /* Encode. */ decoded.value = oer_c_source_k_a_e; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_k_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x00", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_k_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, oer_c_source_k_a_e); } TEST(oer_c_source_l) { struct data_t { uint16_t data_length; uint16_t encoded_length; uint8_t encoded[263]; } datas[] = { { .data_length = 0, .encoded_length = 1, .encoded = "\x00" }, { .data_length = 127, .encoded_length = 128, .encoded = "\x7f\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5" }, { .data_length = 128, .encoded_length = 130, .encoded = "\x81\x80\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5" }, { .data_length = 260, .encoded_length = 263, .encoded = "\x82\x01\x04\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" } }; uint8_t encoded[263]; struct oer_c_source_l_t decoded; uint8_t data[260] = "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5\xa5" "\xa5\xa5\xa5\xa5\xa5"; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.length = datas[i].data_length; memcpy(&decoded.buf[0], &data[0], decoded.length); memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_l_encode(&encoded[0], sizeof(encoded), &decoded), datas[i].encoded_length); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], datas[i].encoded_length); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_l_decode(&decoded, &encoded[0], sizeof(encoded)), datas[i].encoded_length); ASSERT_EQ(decoded.length, datas[i].data_length); ASSERT_MEMORY_EQ(&decoded.buf[0], &data[0], datas[i].data_length); } } TEST(oer_c_source_l_decode_error_bad_length) { struct data_t { int res; uint16_t length; uint8_t encoded[16]; } datas[] = { { .res = -EBADLENGTH, .length = 3, .encoded = "\x82\x01\xff" }, { .res = -EBADLENGTH, .length = 4, .encoded = "\x83\x01\xff\x00" }, { .res = -EBADLENGTH, .length = 5, .encoded = "\x84\x01\x00\x01\x00" }, { .res = -EOUTOFDATA, .length = 1, .encoded = "\x83" }, { .res = -EBADLENGTH, .length = 2, .encoded = "\xff\x00" } }; struct oer_c_source_l_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_l_decode(&decoded, &datas[i].encoded[0], datas[i].length), datas[i].res); } } TEST(oer_c_source_o) { int i; uint8_t encoded[263]; struct oer_c_source_o_t decoded; /* Encode. */ decoded.length = 260; for (i = 0; i < 260; i++) { decoded.elements[i] = true; } memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_o_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x02\x01\x04\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_o_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.length, 260); for (i = 0; i < 260; i++) { ASSERT_EQ(decoded.elements[i], true); } } TEST(oer_c_source_q_c256) { uint8_t encoded[4]; struct oer_c_source_q_t decoded; /* Encode. */ decoded.choice = oer_c_source_q_choice_c256_e; decoded.value.c256 = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_q_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\xbf\x81\x7f\xff", 4); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_q_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.choice, oer_c_source_q_choice_c256_e); ASSERT_EQ(decoded.value.c256, true); } TEST(oer_c_source_q_c257) { uint8_t encoded[4]; struct oer_c_source_q_t decoded; /* Encode. */ decoded.choice = oer_c_source_q_choice_c257_e; decoded.value.c257 = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_q_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\xbf\x82\x00\xff", 4); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_q_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.choice, oer_c_source_q_choice_c257_e); ASSERT_EQ(decoded.value.c257, true); } TEST(oer_c_source_x) { struct data_t { int16_t decoded; uint8_t encoded[2]; } datas[] = { { .decoded = -2, .encoded = "\xff\xfe" }, { .decoded = 510, .encoded = "\x01\xfe" } }; uint8_t encoded[2]; struct oer_c_source_x_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_x_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_x_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(oer_c_source_y) { struct data_t { uint16_t decoded; uint8_t encoded[2]; } datas[] = { { .decoded = 10000, .encoded = "\x27\x10" }, { .decoded = 10512, .encoded = "\x29\x10" } }; uint8_t encoded[2]; struct oer_c_source_y_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_y_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_y_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(oer_c_source_ab) { uint8_t encoded[3]; struct oer_c_source_ab_t decoded; /* Encode. */ decoded.a = 0; decoded.b = 10300; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_ab_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x00\x28\x3c", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_ab_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a, 0); ASSERT_EQ(decoded.b, 10300); } TEST(oer_c_source_ae) { uint8_t encoded[3]; struct oer_c_source_ae_t decoded; /* Encode. */ decoded.is_a_present = true; decoded.a = false; decoded.b = true; decoded.c = false; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_ae_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x40\x00\x00", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_ae_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a, false); ASSERT_EQ(decoded.b, true); ASSERT_EQ(decoded.c, false); } TEST(oer_c_source_af) { uint8_t encoded[32]; struct oer_c_source_af_t decoded; /* Encode. */ decoded.a = true; decoded.b.c = true; decoded.is_b_addition_present = true; decoded.b.d = 17; decoded.b.is_d_addition_present = true; decoded.b.e = oer_c_source_ah_e_g_e; decoded.b.is_e_addition_present = true; decoded.e = 18; decoded.is_e_addition_present = true; decoded.f = 19; decoded.is_f_addition_present = true; decoded.g = 20; decoded.is_g_addition_present = true; decoded.h = 21; decoded.is_h_addition_present = true; decoded.i = 22; decoded.is_i_addition_present = true; decoded.j = 23; decoded.is_j_addition_present = true; decoded.k = 24; decoded.is_k_addition_present = true; decoded.l = 25; decoded.is_l_addition_present = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_af_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x80\xff\x03\x07\xff\x80\x09\x80\xff\x02\x06\xc0\x01\x11" "\x01\x01\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17" "\x01\x18\x01\x19", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_af_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a, true); ASSERT_TRUE(decoded.is_b_addition_present); ASSERT_EQ(decoded.b.c, true); ASSERT_TRUE(decoded.b.is_d_addition_present); ASSERT_EQ(decoded.b.d, 17); ASSERT_TRUE(decoded.b.is_e_addition_present); ASSERT_EQ(decoded.b.e, oer_c_source_ah_e_g_e); ASSERT_TRUE(decoded.is_e_addition_present); ASSERT_EQ(decoded.e, 18); ASSERT_TRUE(decoded.is_f_addition_present); ASSERT_EQ(decoded.f, 19); ASSERT_TRUE(decoded.is_g_addition_present); ASSERT_EQ(decoded.g, 20); ASSERT_TRUE(decoded.is_h_addition_present); ASSERT_EQ(decoded.h, 21); ASSERT_TRUE(decoded.is_i_addition_present); ASSERT_EQ(decoded.i, 22); ASSERT_TRUE(decoded.is_j_addition_present); ASSERT_EQ(decoded.j, 23); ASSERT_TRUE(decoded.is_k_addition_present); ASSERT_EQ(decoded.k, 24); ASSERT_TRUE(decoded.is_l_addition_present); ASSERT_EQ(decoded.l, 25); } TEST(oer_c_source_af_past) { uint8_t encoded[12] = "\x80\xff\x02\x05\xe0\x02\x00\xff\x01\x12\x01\x13"; struct oer_c_source_af_t decoded; /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_af_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a, true); ASSERT_TRUE(decoded.is_b_addition_present); ASSERT_EQ(decoded.b.c, true); ASSERT_FALSE(decoded.b.is_d_addition_present); ASSERT_TRUE(decoded.is_e_addition_present); ASSERT_EQ(decoded.e, 18); ASSERT_TRUE(decoded.is_f_addition_present); ASSERT_EQ(decoded.f, 19); ASSERT_FALSE(decoded.is_g_addition_present); ASSERT_FALSE(decoded.is_h_addition_present); ASSERT_FALSE(decoded.is_i_addition_present); ASSERT_FALSE(decoded.is_j_addition_present); ASSERT_FALSE(decoded.is_k_addition_present); ASSERT_FALSE(decoded.is_l_addition_present); } TEST(oer_c_source_af_future) { uint8_t encoded[37] = "\x80\xff\x04\x02\xff\xc0\x00\x0b\x80\xff\x02\x03" "\xe0\x01\x11\x01\x01\x01\xab\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01" "\x17\x01\x18\x01\x19\x01\x1a"; struct oer_c_source_af_t decoded; /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_af_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a, true); ASSERT_TRUE(decoded.is_b_addition_present); ASSERT_EQ(decoded.b.c, true); ASSERT_TRUE(decoded.b.is_d_addition_present); ASSERT_EQ(decoded.b.d, 17); ASSERT_TRUE(decoded.is_e_addition_present); ASSERT_EQ(decoded.e, 18); ASSERT_TRUE(decoded.is_f_addition_present); ASSERT_EQ(decoded.f, 19); ASSERT_TRUE(decoded.is_g_addition_present); ASSERT_EQ(decoded.g, 20); ASSERT_TRUE(decoded.is_h_addition_present); ASSERT_EQ(decoded.h, 21); ASSERT_TRUE(decoded.is_i_addition_present); ASSERT_EQ(decoded.i, 22); ASSERT_TRUE(decoded.is_j_addition_present); ASSERT_EQ(decoded.j, 23); ASSERT_TRUE(decoded.is_k_addition_present); ASSERT_EQ(decoded.k, 24); ASSERT_TRUE(decoded.is_l_addition_present); ASSERT_EQ(decoded.l, 25); } TEST(oer_c_source_ag) { uint8_t encoded[36]; struct oer_c_source_ag_t decoded; /* Encode. */ decoded.a = true; decoded.b.length = 2; memcpy(&decoded.b.buf[0], "\x84\x55", 2); decoded.is_b_addition_present = true; decoded.c.length = 4; decoded.c.elements[0] = true; decoded.c.elements[1] = false; decoded.c.elements[2] = true; decoded.c.elements[3] = false; decoded.is_c_addition_present = true; decoded.d = oer_c_source_ag_d_f_e; decoded.is_d_addition_present = true; decoded.is_h_addition_present = true; decoded.i = 1.0f; decoded.is_i_addition_present = true; decoded.j.choice = oer_c_source_ag_j_choice_k_e; decoded.j.value.k = 60693; decoded.is_j_addition_present = true; memcpy(&decoded.m.buf[0], "\xf0\xf1\xf2\xf3\xf4", 5); decoded.is_m_addition_present = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_ag_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x80\xff\x02\x01\xfe\x03\x02\x84\x55\x06\x01\x04\xff\x00" "\xff\x00\x03\x82\x01\x00\x00\x04\x3f\x80\x00\x00\x03\x80" "\xed\x15\x05\xf0\xf1\xf2\xf3\xf4", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_ag_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a, true); ASSERT_TRUE(decoded.is_b_addition_present); ASSERT_EQ(decoded.b.length, 2); ASSERT_MEMORY_EQ(&decoded.b.buf[0], "\x84\x55", 2); ASSERT_TRUE(decoded.is_c_addition_present); ASSERT_EQ(decoded.c.length, 4); ASSERT_TRUE(decoded.c.elements[0]); ASSERT_FALSE(decoded.c.elements[1]); ASSERT_TRUE(decoded.c.elements[2]); ASSERT_FALSE(decoded.c.elements[3]); ASSERT_TRUE(decoded.is_d_addition_present); ASSERT_EQ(decoded.d, oer_c_source_ag_d_f_e); ASSERT_TRUE(decoded.is_h_addition_present); ASSERT_TRUE(decoded.is_i_addition_present); ASSERT_TRUE(decoded.i >= 1.0f); ASSERT_TRUE(decoded.i <= 1.0f); ASSERT_TRUE(decoded.is_j_addition_present); ASSERT_EQ(decoded.j.choice, oer_c_source_ag_j_choice_k_e); ASSERT_EQ(decoded.j.value.k, 60693); ASSERT_TRUE(decoded.is_m_addition_present); ASSERT_MEMORY_EQ(&decoded.m.buf[0], "\xf0\xf1\xf2\xf3\xf4", 5); } TEST(oer_c_source_an) { struct data_t { int32_t decoded; uint8_t encoded[5]; uint8_t encoded_length; } datas[] = { { .decoded = oer_c_source_an_a_e, .encoded = "\x84\xff\x00\x00\x00", .encoded_length = 5 }, { .decoded = oer_c_source_an_b_e, .encoded = "\x83\x80\x00\x00", .encoded_length = 4 }, { .decoded = oer_c_source_an_c_e, .encoded = "\x83\xff\x00\x00", .encoded_length = 4 }, { .decoded = oer_c_source_an_d_e, .encoded = "\x82\x80\x00", .encoded_length = 3 }, { .decoded = oer_c_source_an_e_e, .encoded = "\x81\x80", .encoded_length = 2 }, { .decoded = oer_c_source_an_f_e, .encoded = "\x00", .encoded_length = 1 }, { .decoded = oer_c_source_an_g_e, .encoded = "\x7f", .encoded_length = 1 }, { .decoded = oer_c_source_an_h_e, .encoded = "\x82\x00\x80", .encoded_length = 3 }, { .decoded = oer_c_source_an_i_e, .encoded = "\x82\x7f\xff", .encoded_length = 3 }, { .decoded = oer_c_source_an_j_e, .encoded = "\x83\x01\x00\x00", .encoded_length = 4 }, { .decoded = oer_c_source_an_k_e, .encoded = "\x84\x01\x00\x00\x00", .encoded_length = 5 }, }; uint8_t encoded[5]; struct oer_c_source_an_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_an_encode(&encoded[0], sizeof(encoded), &decoded), datas[i].encoded_length); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], datas[i].encoded_length); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_an_decode(&decoded, &encoded[0], datas[i].encoded_length), datas[i].encoded_length); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(oer_c_source_ao) { uint8_t encoded[17]; struct oer_c_source_ao_t decoded; /* Encode. */ decoded.a = OER_C_SOURCE_AO_A_C; decoded.b = OER_C_SOURCE_AO_B_A; decoded.c = 0x50; decoded.d = OER_C_SOURCE_AO_D_B; decoded.e = OER_C_SOURCE_AO_E_C; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_ao_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x01\x80\x00\x00\x50\x20\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x01", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_ao_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a, OER_C_SOURCE_AO_A_C); ASSERT_EQ(decoded.b, OER_C_SOURCE_AO_B_A); ASSERT_EQ(decoded.c, 0x50); ASSERT_EQ(decoded.d, OER_C_SOURCE_AO_D_B); ASSERT_EQ(decoded.e, OER_C_SOURCE_AO_E_C); } TEST(oer_c_source_ap) { uint8_t encoded[3] = "\x80\x10\x01"; struct oer_c_source_ap_t decoded; decoded.b.a = 16; decoded.c.value = oer_c_ref_referenced_enum_b_e; decoded.d = 1; /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_ap_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.b.a, 16); ASSERT_EQ(decoded.c.value, oer_c_ref_referenced_enum_b_e); ASSERT_EQ(decoded.d, 1); } TEST(oer_c_source_aq) { uint8_t encoded[4] = "\x00\x01\x86\xa1"; struct oer_c_source_aq_t decoded; decoded.value = 100001; /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_aq_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, 100001); } TEST(oer_c_source_ar) { uint8_t encoded[1]; uint8_t encoded_no_default[5]; struct oer_c_source_ar_t decoded; decoded.a.length = 2; decoded.a.buf[0] = 0xAB; decoded.a.buf[1] = 0xCD; /* Encode */ memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_c_source_ar_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x00", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_ar_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a.length, 2); ASSERT_EQ(decoded.a.buf[0], 0xAB); ASSERT_EQ(decoded.a.buf[1], 0xCD); decoded.a.length = 3; decoded.a.buf[2] = 0xEF; /* Encode */ memset(&encoded_no_default[0], 0, sizeof(encoded_no_default)); ASSERT_EQ(oer_c_source_ar_encode(&encoded_no_default[0], sizeof(encoded_no_default), &decoded), sizeof(encoded_no_default)); ASSERT_MEMORY_EQ(&encoded_no_default[0], "\x80\x03\xAB\xCD\xEF", sizeof(encoded_no_default)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_c_source_ar_decode(&decoded, &encoded_no_default[0], sizeof(encoded_no_default)), sizeof(encoded_no_default)); ASSERT_EQ(decoded.a.length, 3); ASSERT_EQ(decoded.a.buf[0], 0xAB); ASSERT_EQ(decoded.a.buf[1], 0xCD); ASSERT_EQ(decoded.a.buf[2], 0xEF); } TEST(oer_c_source_ag_erroneous_data) { struct oer_c_source_ag_t decoded; // Wrong length determinant, valid unused bits uint8_t encoded[4] = "\x80\xff\xff\x00"; ASSERT_EQ(oer_c_source_ag_decode(&decoded, &encoded[0], sizeof(encoded)), -EOUTOFDATA); // Valid length determinant, invalid unused bits uint8_t encoded2[4] = "\x80\xff\x03\x0a"; ASSERT_EQ(oer_c_source_ag_decode(&decoded, &encoded2[0], sizeof(encoded2)), -EBADLENGTH); // Invalid addition length of unknown future additions uint8_t encoded3[6] = "\x80\xff\x02\x00\x01\xff"; ASSERT_EQ(oer_c_source_ag_decode(&decoded, &encoded3[0], sizeof(encoded3)), -EOUTOFDATA); } TEST(oer_programming_types_float) { uint8_t encoded[4]; struct oer_programming_types_float_t decoded; /* Encode. */ decoded.value = 1.0f; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_programming_types_float_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x3f\x80\x00\x00", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_programming_types_float_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_TRUE(fequal(decoded.value, 1.0f)); } TEST(oer_programming_types_double) { uint8_t encoded[8]; struct oer_programming_types_double_t decoded; /* Encode. */ decoded.value = 1.0; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(oer_programming_types_double_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x3f\xf0\x00\x00\x00\x00\x00\x00", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(oer_programming_types_double_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_TRUE(fequal(decoded.value, 1.0)); } asn1tools-0.169.0/tests/test_oer.py000066400000000000000000001117361524544274600172000ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import unittest from .utils import Asn1ToolsBaseTest from datetime import datetime from copy import deepcopy import asn1tools sys.path.append('tests/files/ieee') from ieee1609_2 import EXPECTED as IEEE1609_2 class Asn1ToolsOerTest(Asn1ToolsBaseTest): maxDiff = None def test_boolean(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BOOLEAN " "END", 'oer') datas = [ ('A', True, b'\xff'), ('A', False, b'\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_integer(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= INTEGER " "B ::= INTEGER (-128..127) " "C ::= INTEGER (-32768..32767) " "D ::= INTEGER (-2147483648..2147483647) " "E ::= INTEGER (-9223372036854775808..9223372036854775807) " "F ::= INTEGER (0..255) " "G ::= INTEGER (0..65535) " "H ::= INTEGER (0..4294967295) " "I ::= INTEGER (0..18446744073709551615) " "J ::= INTEGER (0..18446744073709551616) " "K ::= INTEGER (1..MAX) " "L ::= INTEGER (MIN..0) " "END", 'oer') datas = [ ('A', 0, b'\x01\x00'), ('A', 128, b'\x02\x00\x80'), ('A', 100000, b'\x03\x01\x86\xa0'), ('A', -255, b'\x02\xff\x01'), ('A', -1234567, b'\x03\xed\x29\x79'), ('B', -2, b'\xfe'), ('C', -2, b'\xff\xfe'), ('D', -2, b'\xff\xff\xff\xfe'), ('E', -2, b'\xff\xff\xff\xff\xff\xff\xff\xfe'), ('F', 128, b'\x80'), ('G', 128, b'\x00\x80'), ('G', 1000, b'\x03\xe8'), ('H', 128, b'\x00\x00\x00\x80'), ('I', 128, b'\x00\x00\x00\x00\x00\x00\x00\x80'), ('B', 1, b'\x01'), ('C', 1, b'\x00\x01'), ('D', 1, b'\x00\x00\x00\x01'), ('E', 1, b'\x00\x00\x00\x00\x00\x00\x00\x01'), ('B', 127, b'\x7f'), ('C', 127, b'\x00\x7f'), ('D', 127, b'\x00\x00\x00\x7f'), ('E', 127, b'\x00\x00\x00\x00\x00\x00\x00\x7f'), ('I', 1, b'\x00\x00\x00\x00\x00\x00\x00\x01'), ('J', 1, b'\x01\x01'), ('K', 1, b'\x01\x01'), ('K', 127, b'\x01\x7f'), ('K', 128, b'\x01\x80'), ('L', -128, b'\x01\x80') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_real(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= REAL " "B ::= REAL (WITH COMPONENTS { " " mantissa (-16777215..16777215), " " base (2), " " exponent (-149..104) " " })" "C ::= REAL (WITH COMPONENTS { " " mantissa (-9007199254740991..9007199254740991), " " base (2), " " exponent (-1074..971) " " })" "D ::= REAL (WITH COMPONENTS { " " mantissa (-1..1), " " base (10), " " exponent (-1..1) " " })" "E ::= REAL (WITH COMPONENTS { " " mantissa (1..2) " " })" "END", 'oer') datas = [ ('A', 0.0, b'\x00'), ('A', 1.0, b'\x03\x80\x00\x01'), ('A', 100.0, b'\x03\x80\x02\x19'), ('A', -100.0, b'\x03\xc0\x02\x19'), ('B', 0.0, b'\x00\x00\x00\x00'), ('B', 1.0, b'\x3f\x80\x00\x00'), ('B', 2 ** -126, b'\x00\x80\x00\x00'), ('B', (1 - 2 ** -24) * 2 ** 128, b'\x7f\x7f\xff\xff'), ('C', 0.0, b'\x00\x00\x00\x00\x00\x00\x00\x00'), ('C', 1.0, b'\x3f\xf0\x00\x00\x00\x00\x00\x00'), ('C', 2 ** -1022, b'\x00\x10\x00\x00\x00\x00\x00\x00'), ('C', (2 - 2 ** -52) * 2 ** 1023, b'\x7f\xef\xff\xff\xff\xff\xff\xff') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Too large values. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('B', 2 ** 128) self.assertEqual( str(cm.exception), 'B: Expected an IEEE 754 32 bits floating point number, but got ' '340282366920938463463374607431768211456.') with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('C', 2 ** 1024) self.assertEqual( str(cm.exception), 'C: Expected an IEEE 754 64 bits floating point number, but got ' '17976931348623159077293051907890247336179769789423065727343008115' '77326758055009631327084773224075360211201138798713933576587897688' '14416622492847430639474124377767893424865485276302219601246094119' '45308295208500576883815068234246288147391311054082723716335051068' '4586298239947245938479716304835356329624224137216.') # Non-float value. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('C', 2 ** 1025) self.assertEqual( str(cm.exception), 'C: Expected an IEEE 754 64 bits floating point number, but got 35953' '86269724631815458610381578049467235953957884613145468601623154653' '51611001926265416954644815072042240227759742786715317579537628833' '24498569486127894824875553578684973097055260443920249218823890616' '59041700115376763013646849257629478262210816544743267010213691725' '96479894491876959432609670712659248448274432.') def test_null(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= NULL " "END", 'oer') datas = [ ('A', None, b'') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_bit_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BIT STRING " "B ::= BIT STRING (SIZE (9)) " "C ::= BIT STRING (SIZE (9, ...)) " "D ::= BIT STRING (SIZE (5..7)) " "END", 'oer') datas = [ ('A', (b'\x40', 4), b'\x02\x04\x40'), ('A', (b'\x41', 8), b'\x02\x00\x41'), ('B', (b'\x12\x80', 9), b'\x12\x80'), ('C', (b'\x12\x80', 9), b'\x03\x07\x12\x80'), ('D', (b'\x34', 6), b'\x02\x02\x34') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_octet_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OCTET STRING " "B ::= OCTET STRING (SIZE (3)) " "C ::= OCTET STRING (SIZE (3, ...)) " "D ::= OCTET STRING (SIZE (3..7)) " "END", 'oer') datas = [ ('A', b'\x12\x34', b'\x02\x12\x34'), ('A', 999 * b'\x01', b'\x82\x03\xe7' + 999 * b'\x01'), ('B', b'\x12\x34\x56', b'\x12\x34\x56'), ('C', b'\x12\x34\x56', b'\x03\x12\x34\x56'), ('D', b'\x12\x34\x56', b'\x03\x12\x34\x56') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_object_identifier(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OBJECT IDENTIFIER " "END", 'oer') datas = [ ('A', '1.2', b'\x01\x2a'), ('A', '1.2.3321', b'\x03\x2a\x99\x79') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_external(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= EXTERNAL " "END", 'oer') datas = [ ('A', {'encoding': ('octet-aligned', b'\x12')}, b'\x00\x81\x01\x12') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_enumerated(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= ENUMERATED { a(1) } " "B ::= ENUMERATED { a(128) } " "C ::= ENUMERATED { a(0), b(127) } " "D ::= ENUMERATED { a(0), ..., b(127) } " "E ::= ENUMERATED { a(-1), b(1234) } " "F ::= ENUMERATED { a(-16777216), b(-8388608), c(-65536), " "d(-32768), e(-128) } " "END", 'oer') datas = [ ('A', 'a', b'\x01'), ('B', 'a', b'\x82\x00\x80'), ('C', 'a', b'\x00'), ('C', 'b', b'\x7f'), ('D', 'a', b'\x00'), ('D', 'b', b'\x7f'), ('E', 'a', b'\x81\xff'), ('E', 'b', b'\x82\x04\xd2'), ('F', 'a', b'\x84\xff\x00\x00\x00'), ('F', 'b', b'\x83\x80\x00\x00'), ('F', 'c', b'\x83\xff\x00\x00'), ('F', 'd', b'\x82\x80\x00'), ('F', 'e', b'\x81\x80'), ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Encoding bad enumeration value. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('C', 'c') self.assertEqual( str(cm.exception), "C: Expected enumeration value 'a' or 'b', but got 'c'.") # Decoding bad enumeration value. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'\x02') self.assertEqual(str(cm.exception), "A: Expected enumeration value 1, but got 2.") def test_sequence(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE {} " "B ::= SEQUENCE { " " a INTEGER DEFAULT 0 " "} " "C ::= SEQUENCE { " " a BOOLEAN " "} " "D ::= SEQUENCE { " " a BOOLEAN, " " ... " "} " "E ::= SEQUENCE { " " a BOOLEAN, " " ..., " " b BOOLEAN, " " c BOOLEAN " "} " "F ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]] " "} " "G ::= SEQUENCE { " " a BOOLEAN, " " ..., " " b BOOLEAN OPTIONAL " "} " "H ::= SEQUENCE { " " a H OPTIONAL " "} " "I ::= SEQUENCE { " " a BOOLEAN OPTIONAL " "} " "J ::= I (WITH COMPONENTS { a PRESENT }) " "K ::= I (WITH COMPONENTS { a ABSENT }) " "L ::= I (J | K) " "M ::= SEQUENCE { " " a D, " " b INTEGER " "} " "N ::= SEQUENCE { " " a E, " " b INTEGER " "} " "O ::= SEQUENCE { " " a BOOLEAN, " " ..., " " b NULL " "} " "END", 'oer') datas = [ ('A', {}, b''), ('B', {'a': 0}, b'\x00'), ('B', {'a': 1}, b'\x80\x01\x01'), ('C', {'a': True}, b'\xff'), ('D', {'a': True}, b'\x00\xff'), ('E', {'a': True}, b'\x00\xff'), ('E', {'a': True, 'b': True, 'c': True}, b'\x80\xff\x02\x06\xc0\x01\xff\x01\xff'), ('F', {'a': True}, b'\x00\xff'), ('F', {'a': True, 'b': True}, b'\x80\xff\x02\x07\x80\x01\xff'), ('G', {'a': True}, b'\x00\xff'), ('G', {'a': True, 'b': True}, b'\x80\xff\x02\x07\x80\x01\xff'), ('H', {}, b'\x00'), ('H', {'a': {}}, b'\x80\x00'), ('J', {'a': True}, b'\x80\xff'), ('K', {}, b'\x00'), ('L', {'a': True}, b'\x80\xff'), ('L', {}, b'\x00'), ('N', {'a': {'a': True, 'b': True}, 'b': 5}, b'\x80\xff\x02\x06\x80\x01\xff\x01\x05'), ('O', {'a': True, 'b': None}, b'\x80\xff\x02\x07\x80\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Non-symmetrical encoding and decoding because default values # are not encoded, but part of the decoded (given that the # root and addition is present). self.assertEqual(foo.encode('B', {}), b'\x00') self.assertEqual(foo.decode('B', b'\x00'), {'a': 0}) # Decode E as D. Extension addition "a.b" should be skipped. self.assertEqual(foo.decode('D', b'\x80\xff\x02\x07\x80\x01\xff'), {'a': True}) # Decode N as M. Extension addition "a.b" should be skipped. self.assertEqual(foo.decode('M', b'\x80\xff\x02\x07\x80\x01\xff\x01\x05'), {'a': {'a': True}, 'b': 5}) # Out of data skipping extension member a.b. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('M', b'\x80\xff\x02\x07\x80\x01') self.assertEqual(str(cm.exception), "M.a: out of data (At bit offset: 48)") # Out of data decoding extension member a.b. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('N', b'\x80\xff\x02\x07\x80\x01') self.assertEqual(str(cm.exception), 'N.a.b: out of data (At bit offset: 48)') def test_set(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SET { " " a [444] INTEGER, " " b [5] INTEGER, " " c [APPLICATION 5] INTEGER " "} " "END", 'oer') datas = [ ('A', {'a': 5, 'b': 6, 'c': 7}, b'\x01\x07\x01\x06\x01\x05') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_sequence_of(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE OF INTEGER " "B ::= SEQUENCE (SIZE (129)) OF INTEGER " "END", 'oer') datas = [ ('A', [], b'\x01\x00'), ('A', [1, 2], b'\x01\x02\x01\x01\x01\x02'), ('A', 1000 * [0], b'\x02\x03\xe8' + 1000 * b'\x01\x00'), ('B', 129 * [2], b'\x01\x81' + 129 * b'\x01\x02') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_choice(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= CHOICE { " " a BOOLEAN " "} " "B ::= CHOICE { " " a BOOLEAN, " " ..., " " b BOOLEAN, " " c INTEGER " "} " "C ::= CHOICE { " " a CHOICE { " " a [3] INTEGER" " } " "} " "D ::= CHOICE { " " a [62] BOOLEAN, " " b [APPLICATION 63] BOOLEAN, " " c [PRIVATE 963] BOOLEAN " "} " "END", 'oer') datas = [ ('A', ('a', True), b'\x80\xff'), ('B', ('a', True), b'\x80\xff'), ('B', ('b', True), b'\x81\x01\xff'), ('B', ('c', 0), b'\x82\x02\x01\x00'), ('B', ('c', 1000), b'\x82\x03\x02\x03\xe8'), ('C', ('a', ('a', 150)), b'\x80\x83\x02\x00\x96'), ('D', ('a', False), b'\xbe\x00'), ('D', ('b', False), b'\x7f\x3f\x00'), ('D', ('c', False), b'\xff\x87\x43\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Encode bad value. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('B', ('foo', None)) self.assertEqual(str(cm.exception), "B: Expected choice 'a', 'b' or 'c', but got 'foo'.") # Decode bad value. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'\x81\x00\xff') self.assertEqual( str(cm.exception), "A: Expected choice member tag '80', but got '81'.") def test_choice_default_tags(self): foo = asn1tools.compile_string( "Foo DEFINITIONS ::= " "BEGIN " "A ::= CHOICE { " " a CHOICE { " " aa INTEGER " " } " "} " "END", 'oer') datas = [ ('A', ('a', ('aa', 1)), b'\x02\x02\x01\x01') ] for type_name, decoded, encoded in datas: # ToDo: This is a bug. Fix it. with self.assertRaises(TypeError): self.assert_encode_decode(foo, type_name, decoded, encoded) def test_uft8_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UTF8String " "B ::= UTF8String (SIZE (3)) " "C ::= UTF8String (SIZE (3, ...)) " "D ::= UTF8String (SIZE (3..7)) " "END", 'oer') datas = [ ('A', 'foo', b'\x03\x66\x6f\x6f'), ('B', 'foo', b'\x66\x6f\x6f'), ('C', 'foo', b'\x03\x66\x6f\x6f'), ('D', 'foo', b'\x03\x66\x6f\x6f') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_numeric_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= NumericString " "B ::= NumericString (SIZE (3)) " "C ::= NumericString (SIZE (3, ...)) " "D ::= NumericString (SIZE (3..7)) " "END", 'oer') datas = [ ('A', '123', b'\x03\x31\x32\x33'), ('B', '123', b'\x31\x32\x33'), ('C', '123', b'\x03\x31\x32\x33'), ('D', '123', b'\x03\x31\x32\x33') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_printable_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= PrintableString " "B ::= PrintableString (SIZE (3)) " "C ::= PrintableString (SIZE (3, ...)) " "D ::= PrintableString (SIZE (3..7)) " "END", 'oer') datas = [ ('A', 'foo', b'\x03\x66\x6f\x6f'), ('B', 'foo', b'\x66\x6f\x6f'), ('C', 'foo', b'\x03\x66\x6f\x6f'), ('D', 'foo', b'\x03\x66\x6f\x6f') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_ia5_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= IA5String " "B ::= IA5String (SIZE (3)) " "C ::= IA5String (SIZE (3, ...)) " "D ::= IA5String (SIZE (3..7)) " "END", 'oer') datas = [ ('A', 'foo', b'\x03\x66\x6f\x6f'), ('B', 'foo', b'\x66\x6f\x6f'), ('C', 'foo', b'\x03\x66\x6f\x6f'), ('D', 'foo', b'\x03\x66\x6f\x6f') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_visible_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= VisibleString " "B ::= VisibleString (SIZE (3)) " "C ::= VisibleString (SIZE (3, ...)) " "D ::= VisibleString (SIZE (3..7)) " "END", 'oer') datas = [ ('A', 'foo', b'\x03\x66\x6f\x6f'), ('B', 'foo', b'\x66\x6f\x6f'), ('C', 'foo', b'\x03\x66\x6f\x6f'), ('D', 'foo', b'\x03\x66\x6f\x6f') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_general_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GeneralString " "B ::= SEQUENCE { " " a BOOLEAN, " " b GeneralString " "} " "END", 'oer') datas = [ ('A', '', b'\x00'), ('A', '2', b'\x01\x32'), ('B', {'a': False, 'b': u'K'}, b'\x00\x01\x4b') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_graphic_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GraphicString " "END", 'oer') datas = [ ('A', '', b'\x00'), ('A', '2', b'\x01\x32') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_teletex_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= TeletexString " "END", 'oer') datas = [ ('A', u'123', b'\x03\x31\x32\x33') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_universal_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UniversalString " "END", 'oer') datas = [ ('A', u'åäö', b'\x0c\x00\x00\x00\xe5\x00\x00\x00\xe4\x00\x00\x00\xf6'), ('A', u'1𐈃Q', b'\x0c\x00\x00\x00\x31\x00\x01\x02\x03\x00\x00\x00\x51') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_utc_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS IMPLICIT TAGS ::= " "BEGIN " "A ::= UTCTime " "END", 'oer') datas = [ ('A', datetime(2043, 1, 31, 23, 59, 59), b'\x0d\x34\x33\x30\x31\x33\x31\x32\x33\x35\x39\x35\x39\x5a') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_generalized_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GeneralizedTime " "END", 'oer') datas = [ ('A', datetime(2080, 10, 9, 13, 0, 5, 342000), b'\x12\x32\x30\x38\x30\x31\x30\x30\x39\x31\x33\x30\x30\x30\x35' b'\x2e\x33\x34\x32') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_repr_all_types(self): all_types = asn1tools.compile_files('tests/files/all_types.asn', 'oer') self.assertEqual(repr(all_types.types['Boolean']), 'Boolean(Boolean)') self.assertEqual(repr(all_types.types['Integer']), 'Integer(Integer)') self.assertEqual(repr(all_types.types['Real']), 'Real(Real)') self.assertEqual(repr(all_types.types['Bitstring']), 'BitString(Bitstring)') self.assertEqual(repr(all_types.types['Octetstring']), 'OctetString(Octetstring)') self.assertEqual(repr(all_types.types['Null']), 'Null(Null)') self.assertEqual(repr(all_types.types['Objectidentifier']), 'ObjectIdentifier(Objectidentifier)') self.assertEqual(repr(all_types.types['Enumerated']), 'Enumerated(Enumerated)') self.assertEqual(repr(all_types.types['Utf8string']), 'UTF8String(Utf8string)') self.assertEqual(repr(all_types.types['Sequence']), 'Sequence(Sequence, [])') self.assertEqual(repr(all_types.types['Set']), 'Set(Set, [])') self.assertEqual(repr(all_types.types['Sequence2']), 'Sequence(Sequence2, [Integer(a)])') self.assertEqual(repr(all_types.types['Set2']), 'Set(Set2, [Integer(a)])') self.assertEqual(repr(all_types.types['Numericstring']), 'NumericString(Numericstring)') self.assertEqual(repr(all_types.types['Printablestring']), 'PrintableString(Printablestring)') self.assertEqual(repr(all_types.types['Ia5string']), 'IA5String(Ia5string)') self.assertEqual(repr(all_types.types['Universalstring']), 'UniversalString(Universalstring)') self.assertEqual(repr(all_types.types['Visiblestring']), 'VisibleString(Visiblestring)') self.assertEqual(repr(all_types.types['Generalstring']), 'GeneralString(Generalstring)') self.assertEqual(repr(all_types.types['Bmpstring']), 'BMPString(Bmpstring)') self.assertEqual(repr(all_types.types['Teletexstring']), 'TeletexString(Teletexstring)') self.assertEqual(repr(all_types.types['Graphicstring']), 'GraphicString(Graphicstring)') self.assertEqual(repr(all_types.types['Utctime']), 'UTCTime(Utctime)') self.assertEqual(repr(all_types.types['SequenceOf']), 'SequenceOf(SequenceOf, Integer())') self.assertEqual(repr(all_types.types['SetOf']), 'SetOf(SetOf, Integer())') self.assertEqual(repr(all_types.types['GeneralizedTime1']), 'GeneralizedTime(GeneralizedTime1)') self.assertEqual(repr(all_types.types['Choice']), 'Choice(Choice, [Integer(a)])') self.assertEqual(repr(all_types.types['Any']), 'Any(Any)') self.assertEqual(repr(all_types.types['Sequence12']), 'Sequence(Sequence12, [SequenceOf(a, Recursive(Sequence12))])') def test_overview_of_oer(self): foo = asn1tools.compile_files('tests/files/overview_of_oer.asn', 'oer') datas = [ ('A', {'a1': 4, 'a2': 4, 'a3': 4, 'a4': 4, 'a5': 1024, 'a6': 4, 'a7': 4}, ( b'\xc0\x04\x00\x04\x00\x04\x00\x00\x00\x04\x02\x04\x00\x01\x04' b'\x01\x04' )), ('B', { 'b1': 'ABC', 'b2': 'ABC', 'b3': 'ABC', 'b4': b'\x01\x02\x03\x04', 'b5': (b'\x50', 4), 'b6': (b'\x50', 4) }, ( b'\x03\x41\x42\x43\x41\x42\x43\x03\x41\x42\x43\x04\x01\x02\x03' b'\x04\x50\x02\x04\x50' )), ('C', ('c2', ['b', 'c', 'd', 'e']), b'\x81\x01\x04\x01\x02\x03\x04') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_x691_a1(self): a1 = asn1tools.compile_files('tests/files/x691_a1.asn', 'oer') decoded = { 'name': { 'givenName': 'John', 'initial': 'P', 'familyName': 'Smith' }, 'title': 'Director', 'number': 51, 'dateOfHire': '19710917', 'nameOfSpouse': { 'givenName': 'Mary', 'initial': 'T', 'familyName': 'Smith' }, 'children': [ { 'name': { 'givenName': 'Ralph', 'initial': 'T', 'familyName': 'Smith' }, 'dateOfBirth': '19571111' }, { 'name': { 'givenName': 'Susan', 'initial': 'B', 'familyName': 'Jones' }, 'dateOfBirth': '19590717' } ] } encoded = ( b'\x80\x04\x4a\x6f\x68\x6e\x01\x50\x05\x53\x6d\x69\x74\x68\x01\x33' b'\x08\x44\x69\x72\x65\x63\x74\x6f\x72\x08\x31\x39\x37\x31\x30\x39' b'\x31\x37\x04\x4d\x61\x72\x79\x01\x54\x05\x53\x6d\x69\x74\x68\x01' b'\x02\x05\x52\x61\x6c\x70\x68\x01\x54\x05\x53\x6d\x69\x74\x68\x08' b'\x31\x39\x35\x37\x31\x31\x31\x31\x05\x53\x75\x73\x61\x6e\x01\x42' b'\x05\x4a\x6f\x6e\x65\x73\x08\x31\x39\x35\x39\x30\x37\x31\x37' ) self.assert_encode_decode(a1, 'PersonnelRecord', decoded, encoded) def test_ieee1609_2(self): foo = asn1tools.compile_dict(deepcopy(IEEE1609_2), 'oer') decoded = { 'version': 1, 'content': ( 'caCerts', [ { 'version': 3, 'type': 'explicit', 'issuer': ('sha256AndDigest', 8 * b'\x01'), 'toBeSigned': { 'id': ('none', None), 'cracaId': 3 * b'\x32', 'crlSeries': 65535, 'validityPeriod': { 'start': 12345, 'duration': ('seconds', 5) }, 'appPermissions': [], 'certIssuePermissions': [], 'certRequestPermissions': [], 'verifyKeyIndicator': ( 'verificationKey', ( 'ecdsaNistP256', ( 'uncompressed', { 'x': 32 * b'\x14', 'y': 32 * b'\x54' } ) ) ) }, 'signature': ( 'ecdsaNistP256Signature', { 'r' : ('x-only' , 32 * b'\x98'), 's' : 32 * b'\xab' } ) } ] ) } encoded = ( b'\x01\x80\x01\x01\x80\x03\x00\x80\x01\x01\x01\x01\x01\x01\x01\x01' b'\x1c\x83\x32\x32\x32\xff\xff\x00\x00\x30\x39\x82\x00\x05\x01\x00' b'\x01\x00\x01\x00\x80\x80\x84\x14\x14\x14\x14\x14\x14\x14\x14\x14' b'\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14' b'\x14\x14\x14\x14\x14\x14\x14\x54\x54\x54\x54\x54\x54\x54\x54\x54' b'\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54' b'\x54\x54\x54\x54\x54\x54\x54\x80\x80\x98\x98\x98\x98\x98\x98\x98' b'\x98\x98\x98\x98\x98\x98\x98\x98\x98\x98\x98\x98\x98\x98\x98\x98' b'\x98\x98\x98\x98\x98\x98\x98\x98\x98\xab\xab\xab\xab\xab\xab\xab' b'\xab\xab\xab\xab\xab\xab\xab\xab\xab\xab\xab\xab\xab\xab\xab\xab' b'\xab\xab\xab\xab\xab\xab\xab\xab\xab' ) self.assert_encode_decode(foo, 'Ieee1609dot2Peer2PeerPDU', decoded, encoded) def test_out_of_data(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BOOLEAN " "B ::= OCTET STRING " "C ::= SEQUENCE { " " ..., " " a BOOLEAN " "} " "END", 'oer') # Fails trying to read a non-negative number. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'') self.assertEqual(str(cm.exception), "A: out of data (At bit offset: 0)") # Fails trying to read 2 bytes, but only one available. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('B', b'\x02\x00') self.assertEqual(str(cm.exception), "B: out of data (At bit offset: 8)") # Fails trying to read the single additions present bit. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('C', b'') self.assertEqual(str(cm.exception), "C: out of data (At bit offset: 0)") def test_c_source(self): files = [ 'tests/files/c_source/c_source.asn' ] foo = asn1tools.compile_files(files, 'oer') # Type L - decode error bad length. with self.assertRaises(asn1tools.codecs.OutOfDataError): foo.decode('L', b'\x82\x01\xff') with self.assertRaises(asn1tools.codecs.OutOfDataError): foo.decode('L', b'\x83\x01\xff\x00') with self.assertRaises(asn1tools.codecs.OutOfDataError): foo.decode('L', b'\x84\x01\x00\x01\x00') with self.assertRaises(asn1tools.codecs.OutOfDataError): foo.decode('L', b'\x83') with self.assertRaises(asn1tools.codecs.OutOfDataError): foo.decode('L', b'\xff\x00') def test_not_support_decode_with_length(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OCTET STRING " "END", 'oer') with self.assertRaises(NotImplementedError) as cm: foo.decode_with_length('A', b'\x01\x23\x45\x67\x89\xab\xcd\xef') self.assertEqual(str(cm.exception), "This codec does not support decode_with_length().") if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_parse.py000066400000000000000000000477101524544274600175250ustar00rootroot00000000000000import sys import unittest import importlib import asn1tools sys.path.append('tests/files') sys.path.append('tests/files/3gpp') sys.path.append('tests/files/cen') sys.path.append('tests/files/etsi') sys.path.append('tests/files/ieee') sys.path.append('tests/files/ietf') sys.path.append('tests/files/oma') class Asn1ToolsParseTest(unittest.TestCase): maxDiff = None def parse_and_verify(self, module, path='.'): asn_path = 'tests/files/' + path + '/' + module + '.asn' actual = asn1tools.parse_files(asn_path) # from pprint import pformat # # py_path = 'tests/files/' + path + '/' + module + '.py' # # with open(py_path, 'w') as fout: # fout.write('EXPECTED = ' + pformat(actual)) module = importlib.import_module(module) self.assertEqual(actual, module.EXPECTED) def test_parse_foo(self): self.parse_and_verify('foo') def test_parse_bar(self): self.parse_and_verify('bar') def test_parse_all_types(self): self.parse_and_verify('all_types') def test_parse_extensibility_implied(self): self.parse_and_verify('extensibility_implied') def test_parse_all_types_automatic_tags(self): self.parse_and_verify('all_types_automatic_tags') def test_parse_module_tags_explicit(self): self.parse_and_verify('module_tags_explicit') def test_parse_module_tags_implicit(self): self.parse_and_verify('module_tags_implicit') def test_parse_module_tags_automatic(self): self.parse_and_verify('module_tags_automatic') def test_parse_information_object(self): self.parse_and_verify('information_object') def test_parse_x683(self): self.parse_and_verify('x683') def test_parse_x680(self): self.parse_and_verify('x680') def test_parse_x691_a1(self): self.parse_and_verify('x691_a1') def test_parse_x691_a2(self): self.parse_and_verify('x691_a2') def test_parse_x691_a3(self): self.parse_and_verify('x691_a3') def test_parse_x691_a4(self): self.parse_and_verify('x691_a4') def test_parse_zforce(self): self.parse_and_verify('zforce') def test_parse_rrc_8_6_0(self): self.parse_and_verify('rrc_8_6_0', '3gpp') def test_parse_rrc_14_4_0(self): self.parse_and_verify('rrc_14_4_0', '3gpp') def test_parse_s1ap_14_4_0(self): self.parse_and_verify('s1ap_14_4_0', '3gpp') def test_parse_lpp_14_3_0(self): self.parse_and_verify('lpp_14_3_0', '3gpp') def test_parse_rfc1155(self): self.parse_and_verify('rfc1155', 'ietf') def test_parse_rfc1157(self): self.parse_and_verify('rfc1157', 'ietf') def test_parse_rfc2986(self): self.parse_and_verify('rfc2986', 'ietf') def test_parse_rfc3161(self): self.parse_and_verify('rfc3161', 'ietf') def test_parse_rfc3279(self): self.parse_and_verify('rfc3279', 'ietf') def test_parse_rfc3281(self): self.parse_and_verify('rfc3281', 'ietf') def test_parse_rfc3447(self): self.parse_and_verify('rfc3447', 'ietf') def test_parse_rfc3852(self): self.parse_and_verify('rfc3852', 'ietf') def test_parse_rfc4210(self): self.parse_and_verify('rfc4210', 'ietf') def test_parse_rfc4211(self): self.parse_and_verify('rfc4211', 'ietf') def test_parse_rfc5084(self): self.parse_and_verify('rfc5084', 'ietf') def test_parse_rfc5280(self): self.parse_and_verify('rfc5280', 'ietf') def test_parse_rfc5280_modified(self): self.parse_and_verify('rfc5280_modified', 'ietf') def test_parse_etsi_cam_pdu_descriptions_1_3_2(self): self.parse_and_verify('cam_pdu_descriptions_1_3_2', 'etsi') def test_parse_etsi_its_container_1_2_1(self): self.parse_and_verify('its_container_1_2_1', 'etsi') def test_parse_etsi_mapem_2_1_1(self): self.parse_and_verify('mapem_2_1_1', 'etsi') def test_parse_cen_dsrc(self): self.parse_and_verify('dsrc', 'cen') def test_parse_ieee_1609_2(self): self.parse_and_verify('ieee1609_2', 'ieee') def test_parse_oma_ulp(self): self.parse_and_verify('ulp', 'oma') def test_parse_enumerated(self): self.parse_and_verify('enumerated') def test_parse_comments(self): self.parse_and_verify('comments') def test_parse_constraints_extensions(self): self.parse_and_verify('constraints_extensions') def test_parse_time_types(self): self.parse_and_verify('time_types') def test_parse_named_numbers(self): self.parse_and_verify('named_numbers') def test_parse_import_imported(self): self.parse_and_verify('import_imported') def test_parse_parameterization(self): self.parse_and_verify('parameterization') def test_parse_imports_global_module_reference(self): actual = asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'IMPORTS ' 'a FROM B ' 'c, d FROM E global-module-reference ' 'f, g FROM H {iso(1)}; ' 'END') expected = { 'A': { 'extensibility-implied': False, 'imports': { 'B': ['a'], 'E': ['c', 'd'], 'H': ['f', 'g'] }, 'object-classes': {}, 'object-sets': {}, 'types': {}, 'values': {} } } self.assertEqual(actual, expected) def test_parse_imports_single_value_reference(self): """Test that a value reference, in this test 'c', is not parsed as an assignmed identifier, but an imported value from 'D'. """ actual = asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'IMPORTS ' 'A FROM B ' 'c FROM D; ' 'END') expected = { 'A': { 'extensibility-implied': False, 'imports': { 'B': ['A'], 'D': ['c'] }, 'object-classes': {}, 'object-sets': {}, 'types': {}, 'values': {} } } self.assertEqual(actual, expected) def test_parse_empty_imports(self): actual = asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'IMPORTS ; ' 'END') expected = { 'A': { 'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {}, 'values': {} } } self.assertEqual(actual, expected) def test_parse_with_successors_descendants(self): actual = asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'IMPORTS ' 'a FROM B WITH SUCCESSORS ' 'c, d FROM E {iso(1)} WITH DESCENDANTS ; ' 'END') expected = { 'A': { 'extensibility-implied': False, 'imports': { 'B': ['a'], 'E': ['c', 'd'] }, 'object-classes': {}, 'object-sets': {}, 'types': {}, 'values': {} } } self.assertEqual(actual, expected) def test_parse_keyword_in_type_name(self): actual = asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'ENDa ::= INTEGER ' 'END') expected = { 'A': { 'extensibility-implied': False, 'imports': {}, 'object-classes': {}, 'object-sets': {}, 'types': {'ENDa': {'type': 'INTEGER'}}, 'values': {} } } self.assertEqual(actual, expected) def test_parse_error_empty_string(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('') self.assertEqual(str(cm.exception), "Invalid ASN.1 syntax at line 1, column 1: '>!<': " "Expected modulereference.") def test_parse_error_begin_missing(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= END') self.assertEqual(str(cm.exception), "Invalid ASN.1 syntax at line 1, column 19: " "'A DEFINITIONS ::= >!!<': Expected END.") def test_parse_error_type_assignment_missing_assignment(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= BEGIN A END') self.assertEqual(str(cm.exception), "Invalid ASN.1 syntax at line 1, column 27: " "'A DEFINITIONS ::= BEGIN A >!!!<} END': Expected Type.") def test_parse_error_sequence_missing_member_name(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= BEGIN' ' A ::= SEQUENCE { A } ' 'END') self.assertEqual( str(cm.exception), "Invalid ASN.1 syntax at line 1, column 43: 'A DEFINITIONS ::= " "BEGIN A ::= SEQUENCE { >!!<} DEFINITIONS " "::= BEGIN END': Expected {{identifier Suppress:('(') - " "definitiveNumberForm - Suppress:(')')} | identifier | " "definitiveNumberForm}.") def test_parse_error_missing_union_member_beginning(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'B ::= INTEGER (| SIZE (1))' 'END') self.assertEqual( str(cm.exception), "Invalid ASN.1 syntax at line 1, column 40: 'A DEFINITIONS ::= BEGIN " "B ::= INTEGER (>!<| SIZE (1))END': Expected one or more constraints.") def test_parse_error_missing_union_member_middle(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'B ::= INTEGER (SIZE (1) | | (0))' 'END') self.assertEqual( str(cm.exception), "Invalid ASN.1 syntax at line 1, column 49: \'A DEFINITIONS " "::= BEGIN B ::= INTEGER (SIZE (1) >!<| | (0))END\': Expected ')'.") def test_parse_error_missing_union_member_end(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'B ::= INTEGER (SIZE (1) |)' 'END') self.assertEqual( str(cm.exception), "Invalid ASN.1 syntax at line 1, column 49: \'A DEFINITIONS " "::= BEGIN B ::= INTEGER (SIZE (1) >!<|)END\': Expected ')'.") def test_parse_error_size_constraint_missing_parentheses(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'B ::= INTEGER (SIZE 1)' 'END') self.assertEqual( str(cm.exception), "Invalid ASN.1 syntax at line 1, column 45: \'A DEFINITIONS ::= " "BEGIN B ::= INTEGER (SIZE >!<1)END\': Expected '('.") def test_parse_error_size_constraint_missing_size(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'B ::= INTEGER (SIZE ())' 'END') self.assertEqual( str(cm.exception), "Invalid ASN.1 syntax at line 1, column 46: 'A DEFINITIONS ::= " "BEGIN B ::= INTEGER (SIZE (>!<))END': Expected one or more " "constraints.") def test_parse_error_tag_class_number_missing(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'B ::= [] INTEGER ' 'END') self.assertEqual( str(cm.exception), "Invalid ASN.1 syntax at line 1, column 32: 'A DEFINITIONS " "::= BEGIN B ::= [>!<] INTEGER END': Expected ClassNumber.") def test_parse_error_missing_type(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'B ::= ' 'END') self.assertEqual( str(cm.exception), "Invalid ASN.1 syntax at line 1, column 31: 'A DEFINITIONS ::= BEGIN " "B ::= >!!<': Expected END.") def test_parse_error_late_extension_additions(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'Foo ::= SEQUENCE { ' 'a BOOLEAN, ' '..., ' '..., ' '[[ ' 'c BOOLEAN ' ']] ' '} ' 'END') self.assertEqual( str(cm.exception), "Invalid ASN.1 syntax at line 1, column 63: \'A DEFINITIONS ::= " "BEGIN Foo ::= SEQUENCE { a BOOLEAN, ..., ...>!<, [[ c BOOLEAN ]] " "} END\': Expected '}'.") def test_parse_error_too_many_extension_markers(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= BEGIN ' 'Foo ::= SEQUENCE { ' 'a BOOLEAN, ' '..., ' '[[ ' 'b BOOLEAN ' ']], ' '[[ ' 'c BOOLEAN ' ']], ' '..., ' 'd BOOLEAN, ' '... ' '} ' 'END') self.assertEqual( str(cm.exception), "Invalid ASN.1 syntax at line 1, column 108: \'A DEFINITIONS ::= " "BEGIN Foo ::= SEQUENCE { a BOOLEAN, ..., [[ b BOOLEAN ]], [[ c " "BOOLEAN ]], ..., d BOOLEAN>!<, ... } END\': Expected '}'.") def test_parse_error_missing_single_line_comment_end(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= \n' 'BEGIN -- END') self.assertEqual( str(cm.exception), "Invalid ASN.1 syntax at line 2, column 7: 'BEGIN >!<-- END': " "Missing newline or -- for single line comment.") def test_parse_error_missing_multi_line_comment_end(self): with self.assertRaises(asn1tools.ParseError) as cm: asn1tools.parse_string('A DEFINITIONS ::= \n' 'BEGIN /* END') self.assertEqual( str(cm.exception), "Invalid ASN.1 syntax at line 2, column 7: 'BEGIN >!!?@ABCDEF" "GHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~', but got" " '.' (0x19)'.") def test_general_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GeneralString " "B ::= SEQUENCE { " " a BOOLEAN, " " b GeneralString " "} " "END", 'per') datas = [ ('A', '', b'\x00'), ('A', '2', b'\x01\x32'), ('B', {'a': False, 'b': u'K'}, b'\x00\x01\x4b') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_bmp_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BMPString " "B ::= SEQUENCE { " " a BOOLEAN, " " b BMPString " "} " "C ::= SEQUENCE { " " a BMPString (SIZE(1..128)), " " b BMPString (SIZE(1..256)) " "} " "END", 'per') datas = [ ('A', '', b'\x00'), ('A', '123', b'\x03\x00\x31\x00\x32\x00\x33'), ('B', {'a': False, 'b': u'K'}, b'\x00\x01\x00\x4b'), ('C', {'a': '123', 'b': '123'}, b'\x04\x001\x002\x003\x02\x001\x002\x003') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'\x01\xd8\x00') valid_chars = [v for v in range(65536) if v < 0xd800 or v > 0xdfff] self.assertEqual(str(cm.exception), "A: Expected a value in %s, but got %d." % (valid_chars, 0xd800,)) def test_graphic_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GraphicString " "B ::= SEQUENCE { " " a BOOLEAN, " " b GraphicString " "} " "END", 'per') datas = [ ('A', '', b'\x00'), ('A', '2', b'\x01\x32'), ('B', {'a': False, 'b': u'K'}, b'\x00\x01\x4b') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_teletex_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= TeletexString " "B ::= SEQUENCE { " " a BOOLEAN, " " b TeletexString " "} " "END", 'per') datas = [ ('A', u'123', b'\x03\x31\x32\x33'), ('B', {'a': False, 'b': u'K'}, b'\x00\x01\x4b') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_universal_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UniversalString " "B ::= SEQUENCE { " " a BOOLEAN, " " b UniversalString " "} " "END", 'per') datas = [ ('A', u'åäö', b'\x03\x00\x00\x00\xe5\x00\x00\x00\xe4\x00\x00\x00\xf6'), ('A', u'1𐈃Q', b'\x03\x00\x00\x00\x31\x00\x01\x02\x03\x00\x00\x00\x51'), ('B', {'a': False, 'b': u'K'}, b'\x00\x01\x00\x00\x00\x4b') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_foo(self): foo = asn1tools.compile_files('tests/files/foo.asn', 'per') self.assertEqual(len(foo.types), 2) self.assertTrue(foo.types['Question'] is not None) self.assertTrue(foo.types['Answer'] is not None) self.assertEqual(len(foo.modules), 1) self.assertTrue(foo.modules['Foo'] is not None) # Encode a question. encoded = foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'}) self.assertEqual(encoded, b'\x01\x01\x09\x49\x73\x20\x31\x2b\x31\x3d\x33\x3f') # Decode the encoded question. decoded = foo.decode('Question', encoded) self.assertEqual(decoded, {'id': 1, 'question': 'Is 1+1=3?'}) # Encode an answer. encoded = foo.encode('Answer', {'id': 1, 'answer': False}) self.assertEqual(encoded, b'\x01\x01\x00') # Decode the encoded answer. decoded = foo.decode('Answer', encoded) self.assertEqual(decoded, {'id': 1, 'answer': False}) def test_decode_length(self): foo = asn1tools.compile_files('tests/files/foo.asn', 'per') with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode_length(b'') self.assertEqual(str(cm.exception), 'Decode length is not supported for this codec.') def test_versions(self): foo = asn1tools.compile_files('tests/files/versions.asn', 'per') # Encode as V1, decode as V1, V2 and V3 decoded_v1 = { 'userName': 'myUserName', 'password': 'myPassword', 'accountNumber': 54224445 } encoded_v1 = foo.encode('V1', decoded_v1) self.assertEqual(foo.decode('V1', encoded_v1), decoded_v1) self.assertEqual(foo.decode('V2', encoded_v1), decoded_v1) self.assertEqual(foo.decode('V3', encoded_v1), decoded_v1) # Encode as V2, decode as V1, V2 and V3 decoded_v2 = { 'userName': 'myUserName', 'password': 'myPassword', 'accountNumber': 54224445, 'minutesLastLoggedIn': 5 } encoded_v2 = foo.encode('V2', decoded_v2) self.assertEqual(foo.decode('V1', encoded_v2), decoded_v1) self.assertEqual(foo.decode('V2', encoded_v2), decoded_v2) self.assertEqual(foo.decode('V3', encoded_v2), decoded_v2) # Encode as V3, decode as V1, V2 and V3 decoded_v3 = { 'userName': 'myUserName', 'password': 'myPassword', 'accountNumber': 54224445, 'minutesLastLoggedIn': 5, 'certificate': None, 'thumb': None } encoded_v3 = foo.encode('V3', decoded_v3) self.assertEqual(foo.decode('V1', encoded_v3), decoded_v1) self.assertEqual(foo.decode('V2', encoded_v3), decoded_v2) self.assertEqual(foo.decode('V3', encoded_v3), decoded_v3) def test_x691_a1(self): a1 = asn1tools.compile_files('tests/files/x691_a1.asn', 'per') decoded = { 'name': { 'givenName': 'John', 'initial': 'P', 'familyName': 'Smith' }, 'title': 'Director', 'number': 51, 'dateOfHire': '19710917', 'nameOfSpouse': { 'givenName': 'Mary', 'initial': 'T', 'familyName': 'Smith' }, 'children': [ { 'name': { 'givenName': 'Ralph', 'initial': 'T', 'familyName': 'Smith' }, 'dateOfBirth': '19571111' }, { 'name': { 'givenName': 'Susan', 'initial': 'B', 'familyName': 'Jones' }, 'dateOfBirth': '19590717' } ] } encoded = ( b'\x80\x04\x4a\x6f\x68\x6e\x01\x50\x05\x53\x6d\x69\x74\x68\x01\x33' b'\x08\x44\x69\x72\x65\x63\x74\x6f\x72\x08\x31\x39\x37\x31\x30\x39' b'\x31\x37\x04\x4d\x61\x72\x79\x01\x54\x05\x53\x6d\x69\x74\x68\x02' b'\x05\x52\x61\x6c\x70\x68\x01\x54\x05\x53\x6d\x69\x74\x68\x08\x31' b'\x39\x35\x37\x31\x31\x31\x31\x05\x53\x75\x73\x61\x6e\x01\x42\x05' b'\x4a\x6f\x6e\x65\x73\x08\x31\x39\x35\x39\x30\x37\x31\x37' ) self.assert_encode_decode(a1, 'PersonnelRecord', decoded, encoded) def test_x691_a2(self): a2 = asn1tools.compile_files('tests/files/x691_a2.asn', 'per') decoded = { 'name': { 'givenName': 'John', 'initial': 'P', 'familyName': 'Smith' }, 'title': 'Director', 'number': 51, 'dateOfHire': '19710917', 'nameOfSpouse': { 'givenName': 'Mary', 'initial': 'T', 'familyName': 'Smith' }, 'children': [ { 'name': { 'givenName': 'Ralph', 'initial': 'T', 'familyName': 'Smith' }, 'dateOfBirth': '19571111' }, { 'name': { 'givenName': 'Susan', 'initial': 'B', 'familyName': 'Jones' }, 'dateOfBirth': '19590717' } ] } encoded = ( b'\x86\x4a\x6f\x68\x6e\x50\x10\x53\x6d\x69\x74\x68\x01\x33\x08\x44' b'\x69\x72\x65\x63\x74\x6f\x72\x19\x71\x09\x17\x0c\x4d\x61\x72\x79' b'\x54\x10\x53\x6d\x69\x74\x68\x02\x10\x52\x61\x6c\x70\x68\x54\x10' b'\x53\x6d\x69\x74\x68\x19\x57\x11\x11\x10\x53\x75\x73\x61\x6e\x42' b'\x10\x4a\x6f\x6e\x65\x73\x19\x59\x07\x17' ) self.assert_encode_decode(a2, 'PersonnelRecord', decoded, encoded) def test_x691_a3(self): a3 = asn1tools.compile_files('tests/files/x691_a3.asn', 'per') decoded = { 'name': { 'givenName': 'John', 'initial': 'P', 'familyName': 'Smith' }, 'title': 'Director', 'number': 51, 'dateOfHire': '19710917', 'nameOfSpouse': { 'givenName': 'Mary', 'initial': 'T', 'familyName': 'Smith' }, 'children': [ { 'name': { 'givenName': 'Ralph', 'initial': 'T', 'familyName': 'Smith' }, 'dateOfBirth': '19571111' }, { 'name': { 'givenName': 'Susan', 'initial': 'B', 'familyName': 'Jones' }, 'dateOfBirth': '19590717', 'sex': 'female' } ] } encoded = ( b'\x40\xc0\x4a\x6f\x68\x6e\x50\x08\x53\x6d\x69\x74\x68\x00\x00\x33' b'\x08\x44\x69\x72\x65\x63\x74\x6f\x72\x00\x19\x71\x09\x17\x03\x4d' b'\x61\x72\x79\x54\x08\x53\x6d\x69\x74\x68\x01\x00\x52\x61\x6c\x70' b'\x68\x54\x08\x53\x6d\x69\x74\x68\x00\x19\x57\x11\x11\x82\x00\x53' b'\x75\x73\x61\x6e\x42\x08\x4a\x6f\x6e\x65\x73\x00\x19\x59\x07\x17' b'\x01\x01\x40' ) self.assert_encode_decode(a3, 'PersonnelRecord', decoded, encoded) def test_x691_a4(self): a4 = asn1tools.compile_dict(deepcopy(X691_A4), 'per') decoded = { 'a': 253, 'b': True, 'c': ('e', True), 'g': '123', 'h': True } encoded = ( b'\x9e\x00\x01\x80\x01\x02\x91\xa4' ) self.assert_encode_decode(a4, 'Ax', decoded, encoded) def test_rrc_8_6_0(self): rrc = asn1tools.compile_dict(deepcopy(RRC_8_6_0), 'per') # Message 1. decoded = { 'message': ( 'c1', ( 'paging', { 'systemInfoModification': 'true', 'nonCriticalExtension': { } } ) ) } encoded = b'\x28' self.assert_encode_decode(rrc, 'PCCH-Message', decoded, encoded) # Message 2. decoded = { 'message': ( 'c1', ( 'paging', { } ) ) } encoded = b'\x00' self.assert_encode_decode(rrc, 'PCCH-Message', decoded, encoded) # Message 3. decoded = { 'message': { 'dl-Bandwidth': 'n6', 'phich-Config': { 'phich-Duration': 'normal', 'phich-Resource': 'half' }, 'systemFrameNumber': (b'\x12', 8), 'spare': (b'\x34\x40', 10) } } encoded = b'\x04\x48\xd1' self.assert_encode_decode(rrc, 'BCCH-BCH-Message', decoded, encoded) # Message #4. decoded = { 'message': ( 'c1', ( 'systemInformation', { 'criticalExtensions': ( 'systemInformation-r8', { 'sib-TypeAndInfo': [ ( 'sib2', { 'ac-BarringInfo': { 'ac-BarringForEmergency': True, 'ac-BarringForMO-Data': { 'ac-BarringFactor': 'p95', 'ac-BarringTime': 's128', 'ac-BarringForSpecialAC': (b'\xf0', 5) } }, 'radioResourceConfigCommon': { 'rach-ConfigCommon': { 'preambleInfo': { 'numberOfRA-Preambles': 'n24', 'preamblesGroupAConfig': { 'sizeOfRA-PreamblesGroupA': 'n28', 'messageSizeGroupA': 'b144', 'messagePowerOffsetGroupB': 'minusinfinity' } }, 'powerRampingParameters': { 'powerRampingStep': 'dB0', 'preambleInitialReceivedTargetPower': 'dBm-102' }, 'ra-SupervisionInfo': { 'preambleTransMax': 'n8', 'ra-ResponseWindowSize': 'sf6', 'mac-ContentionResolutionTimer': 'sf48' }, 'maxHARQ-Msg3Tx': 8 }, 'bcch-Config': { 'modificationPeriodCoeff': 'n2' }, 'pcch-Config': { 'defaultPagingCycle': 'rf256', 'nB': 'twoT' }, 'prach-Config': { 'rootSequenceIndex': 836, 'prach-ConfigInfo': { 'prach-ConfigIndex': 33, 'highSpeedFlag': False, 'zeroCorrelationZoneConfig': 10, 'prach-FreqOffset': 64 } }, 'pdsch-ConfigCommon': { 'referenceSignalPower': -60, 'p-b': 2 }, 'pusch-ConfigCommon': { 'pusch-ConfigBasic': { 'n-SB': 1, 'hoppingMode': 'interSubFrame', 'pusch-HoppingOffset': 10, 'enable64QAM': False }, 'ul-ReferenceSignalsPUSCH': { 'groupHoppingEnabled': True, 'groupAssignmentPUSCH': 22, 'sequenceHoppingEnabled': False, 'cyclicShift': 5 } }, 'pucch-ConfigCommon': { 'deltaPUCCH-Shift': 'ds1', 'nRB-CQI': 98, 'nCS-AN': 4, 'n1PUCCH-AN': 2047 }, 'soundingRS-UL-ConfigCommon': ( 'setup', { 'srs-BandwidthConfig': 'bw0', 'srs-SubframeConfig': 'sc4', 'ackNackSRS-SimultaneousTransmission': True }), 'uplinkPowerControlCommon': { 'p0-NominalPUSCH': -126, 'alpha': 'al0', 'p0-NominalPUCCH': -127, 'deltaFList-PUCCH': { 'deltaF-PUCCH-Format1': 'deltaF-2', 'deltaF-PUCCH-Format1b': 'deltaF1', 'deltaF-PUCCH-Format2': 'deltaF0', 'deltaF-PUCCH-Format2a': 'deltaF-2', 'deltaF-PUCCH-Format2b': 'deltaF0' }, 'deltaPreambleMsg3': -1 }, 'ul-CyclicPrefixLength': 'len1' }, 'ue-TimersAndConstants': { 't300': 'ms100', 't301': 'ms200', 't310': 'ms50', 'n310': 'n2', 't311': 'ms30000', 'n311': 'n2' }, 'freqInfo': { 'additionalSpectrumEmission': 3 }, 'timeAlignmentTimerCommon': 'sf500' } ), ( 'sib3', { 'cellReselectionInfoCommon': { 'q-Hyst': 'dB0', 'speedStateReselectionPars': { 'mobilityStateParameters': { 't-Evaluation': 's180', 't-HystNormal': 's180', 'n-CellChangeMedium': 1, 'n-CellChangeHigh': 16 }, 'q-HystSF': { 'sf-Medium': 'dB-6', 'sf-High': 'dB-4' } } }, 'cellReselectionServingFreqInfo': { 'threshServingLow': 7, 'cellReselectionPriority': 3 }, 'intraFreqCellReselectionInfo': { 'q-RxLevMin': -33, 's-IntraSearch': 0, 'presenceAntennaPort1': False, 'neighCellConfig': (b'\x80', 2), 't-ReselectionEUTRA': 4 } } ), ( 'sib4', { } ), ( 'sib5', { 'interFreqCarrierFreqList': [ { 'dl-CarrierFreq': 1, 'q-RxLevMin': -45, 't-ReselectionEUTRA': 0, 'threshX-High': 31, 'threshX-Low': 29, 'allowedMeasBandwidth': 'mbw6', 'presenceAntennaPort1': True, 'neighCellConfig': (b'\x00', 2), 'q-OffsetFreq': 'dB0' } ] } ), ( 'sib6', { 't-ReselectionUTRA': 3 } ), ( 'sib7', { 't-ReselectionGERAN': 3 } ), ( 'sib8', { 'parameters1XRTT': { 'longCodeState1XRTT': (b'\x01\x23\x45\x67\x89\x00', 42) } } ), ( 'sib9', { 'hnb-Name': b'4' } ), ( 'sib10', { 'messageIdentifier': (b'#4', 16), 'serialNumber': (b'\x124', 16), 'warningType': b'2\x12' } ), ( 'sib11', { 'messageIdentifier': (b'g\x88', 16), 'serialNumber': (b'T5', 16), 'warningMessageSegmentType': 'notLastSegment', 'warningMessageSegmentNumber': 19, 'warningMessageSegment': b'\x12' } ) ] } ) } ) ) } encoded = ( b'\x04\x81\x3f\xbe\x2a\x64\x12\xb2\xf3\x20\x03\x44\x85\x50\x00\x40' b'\x53\x65\x31\x40\x07\xff\x82\x40\x00\x01\x10\x02\x4e\x20\x80\x50' b'\x6c\x3c\x47\x69\x28\x14\x10\x0c\x00\x00\x00\x01\x64\x7f\xa2\x10' b'\x19\x43\x30\x50\x01\x23\x45\x67\x89\x0e\x80\x34\x40\x46\x68\x24' b'\x68\x64\x24\x91\x9e\x21\x50\xd4\x98\x01\x12' ) self.assert_encode_decode(rrc, 'BCCH-DL-SCH-Message', decoded, encoded) def test_all_types_automatic_tags(self): all_types = asn1tools.compile_files( 'tests/files/all_types_automatic_tags.asn', 'per') datas = [ ('Sequence3', {'a': 1, 'c': 2,'d': True}, b'\x00\x01\x01\x01\x02\x80') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(all_types, type_name, decoded, encoded) def test_bar(self): """A simple example. """ bar = asn1tools.compile_files('tests/files/bar.asn', 'per') # Message 1. decoded = { 'headerOnly': True, 'lock': False, 'acceptTypes': { 'standardTypes': [(b'\x40', 2), (b'\x80', 1)] }, 'url': b'/ses/magic/moxen.html' } encoded = ( b'\xd0\x02\x02\x40\x01\x80\x15\x2f\x73\x65\x73\x2f\x6d\x61\x67\x69' b'\x63\x2f\x6d\x6f\x78\x65\x6e\x2e\x68\x74\x6d\x6c' ) self.assert_encode_decode(bar, 'GetRequest', decoded, encoded) # Message 2. decoded = { 'headerOnly': False, 'lock': False, 'url': b'0' } encoded = b'\x00\x01\x30' self.assert_encode_decode(bar, 'GetRequest', decoded, encoded) def test_repr_all_types(self): all_types = asn1tools.compile_files('tests/files/all_types.asn', 'per') self.assertEqual(repr(all_types.types['Boolean']), 'Boolean(Boolean)') self.assertEqual(repr(all_types.types['Integer']), 'Integer(Integer)') self.assertEqual(repr(all_types.types['Bitstring']), 'BitString(Bitstring)') self.assertEqual(repr(all_types.types['Octetstring']), 'OctetString(Octetstring)') self.assertEqual(repr(all_types.types['Null']), 'Null(Null)') self.assertEqual(repr(all_types.types['Objectidentifier']), 'ObjectIdentifier(Objectidentifier)') self.assertEqual(repr(all_types.types['Enumerated']), 'Enumerated(Enumerated)') self.assertEqual(repr(all_types.types['Utf8string']), 'UTF8String(Utf8string)') self.assertEqual(repr(all_types.types['Sequence']), 'Sequence(Sequence, [])') self.assertEqual(repr(all_types.types['Set']), 'Set(Set, [])') self.assertEqual(repr(all_types.types['Sequence2']), 'Sequence(Sequence2, [Integer(a)])') self.assertEqual(repr(all_types.types['Set2']), 'Set(Set2, [Integer(a)])') self.assertEqual(repr(all_types.types['Numericstring']), 'NumericString(Numericstring)') self.assertEqual(repr(all_types.types['Printablestring']), 'PrintableString(Printablestring)') self.assertEqual(repr(all_types.types['Ia5string']), 'IA5String(Ia5string)') self.assertEqual(repr(all_types.types['Universalstring']), 'UniversalString(Universalstring)') self.assertEqual(repr(all_types.types['Visiblestring']), 'VisibleString(Visiblestring)') self.assertEqual(repr(all_types.types['Generalstring']), 'GeneralString(Generalstring)') self.assertEqual(repr(all_types.types['Bmpstring']), 'BMPString(Bmpstring)') self.assertEqual(repr(all_types.types['Teletexstring']), 'TeletexString(Teletexstring)') self.assertEqual(repr(all_types.types['Graphicstring']), 'GraphicString(Graphicstring)') self.assertEqual(repr(all_types.types['Utctime']), 'UTCTime(Utctime)') self.assertEqual(repr(all_types.types['SequenceOf']), 'SequenceOf(SequenceOf, Integer())') self.assertEqual(repr(all_types.types['SetOf']), 'SetOf(SetOf, Integer())') self.assertEqual(repr(all_types.types['Choice']), "Choice(Choice, ['a'])") self.assertEqual(repr(all_types.types['Any']), 'Any(Any)') self.assertEqual(repr(all_types.types['Sequence12']), 'Sequence(Sequence12, [SequenceOf(a, Recursive(Sequence12))])') def test_s1ap_14_4_0(self): # ToDo: Do not skip! return with self.assertRaises(asn1tools.CompileError): s1ap = asn1tools.compile_dict(deepcopy(S1AP_14_4_0), 'per') # Message 1. decoded_message = ( 'successfulOutcome', { 'procedureCode': 17, 'criticality': 'reject', 'value': { 'protocolIEs': [ { 'id': 105, 'criticality': 'reject', 'value': [ { 'servedPLMNs': [ b'\xab\xcd\xef', b'\x12\x34\x56' ], 'servedGroupIDs': [ b'\x22\x22' ], 'servedMMECs': [ b'\x11' ] } ] } ] } } ) encoded_message = ( b'\x20\x11\x00\x15\x00\x00\x01\x00\x69\x00\x0e\x00\x40\xab\xcd\xef' b'\x12\x34\x56\x00\x00\x22\x22\x00\x11' ) encoded = s1ap.encode('S1AP-PDU', decoded_message) self.assertEqual(encoded, encoded_message) def test_information_object(self): # ToDo: Fix when supported. return information_object = asn1tools.compile_files( 'tests/files/information_object.asn', 'per') # Message 1 - without constraints. decoded_message = { 'id': 0, 'value': b'\x05', 'comment': 'item 0', 'extra': 2 } encoded_message = ( b'\x01\x00\x01\x05\x06\x69\x74\x65\x6d\x20\x30\x01\x02' ) self.assert_encode_decode(information_object, 'ItemWithoutConstraints', decoded_message, encoded_message) # Message 1 - with constraints. decoded_message = { 'id': 0, 'value': True, 'comment': 'item 0', 'extra': 2 } encoded_message = ( b'\x01\x00\x01\x80\x06\x69\x74\x65\x6d\x20\x30\x01\x02' ) # ToDo: Constraints are not yet implemented. with self.assertRaises(TypeError) as cm: self.assert_encode_decode(information_object, 'ItemWithConstraints', decoded_message, encoded_message) self.assertEqual(str(cm.exception), "object of type 'bool' has no len()") # Message 2. decoded_message = { 'id': 1, 'value': { 'myValue': 7, 'myType': 0 }, 'comment': 'item 1', 'extra': 5 } encoded_message = ( b'\x01\x01\x05\x02\x01\x07\x01\x00\x06\x69\x74\x65\x6d\x20\x31\x01' b'\x05' ) # ToDo: Constraints are not yet implemented. with self.assertRaises(TypeError): self.assert_encode_decode(information_object, 'ItemWithConstraints', decoded_message, encoded_message) # Message 3 - error class. decoded_message = { 'errorCategory': 'A', 'errors': [ { 'errorCode': 1, 'errorInfo': 3 }, { 'errorCode': 2, 'errorInfo': True } ] } encoded_message = ( b'\x41\x02\x01\x01\x02\x01\x03\x01\x02\x01\x80' ) # ToDo: Constraints are not yet implemented. with self.assertRaises(TypeError): self.assert_encode_decode(information_object, 'ErrorReturn', decoded_message, encoded_message) # Message 4 - C. decoded_message = { 'a': 0 } encoded_message = ( b'\x00\x01\x00' ) encoded = information_object.encode('C', decoded_message) self.assertEqual(encoded, encoded_message) # Message 5 - C. decoded_message = { 'a': 0, 'b': { 'a': 0 } } encoded_message = ( b'\x80\x01\x00\x03\x00\x01\x00' ) with self.assertRaises(TypeError): encoded = information_object.encode('C', decoded_message) self.assertEqual(encoded, encoded_message) # Message 6 - C. decoded_message = { 'a': 0, 'b': { 'a': 0, 'b': { 'a': 0, 'b': { 'a': 0 } } } } encoded_message = ( b'\x80\x01\x00\x0b\x80\x01\x00\x07\x80\x01\x00\x03\x00\x01\x00' ) with self.assertRaises(TypeError): encoded = information_object.encode('C', decoded_message) self.assertEqual(encoded, encoded_message) def test_oma_ulp(self): ulp = asn1tools.compile_dict(deepcopy(OMA_ULP), 'per') decoded = { 'length': 162, 'version': {'maj': 2, 'min': 0, 'servind': 0}, 'sessionID': { 'setSessionID': { 'sessionId': 8838, 'setId': ('imsi', b'\x64\x00\x00\x00\x00\x00\x20\xf2') }, 'slpSessionID': { 'sessionID': b'\x00\x00\x40\x00', 'slpId': ('iPAddress', ('ipv4Address', b'\x7f\x00\x00\x01')) } }, 'message': ( 'msSUPLPOSINIT', { 'sETCapabilities': { 'posTechnology': { 'agpsSETassisted': True, 'agpsSETBased': True, 'autonomousGPS': False, 'aFLT': False, 'eCID': True, 'eOTD': False, 'oTDOA': True, 'ver2-PosTechnology-extension': { 'gANSSPositionMethods': [ { 'ganssId': 4, 'gANSSPositioningMethodTypes': { 'setAssisted': True, 'setBased': True, 'autonomous': True }, 'gANSSSignals': (b'\x80', 1) } ] } }, 'prefMethod': 'noPreference', 'posProtocol': { 'tia801': False, 'rrlp': False, 'rrc': False, 'ver2-PosProtocol-extension': { 'lpp': True, 'posProtocolVersionLPP': { 'majorVersionField': 12, 'technicalVersionField': 4, 'editorialVersionField': 0 } } } }, 'locationId': { 'cellInfo': ( 'ver2-CellInfo-extension', ( 'lteCell', { 'cellGlobalIdEUTRA': { 'plmn-Identity': { 'mcc': [3, 1, 0], 'mnc': [3, 1, 0] }, 'cellIdentity': (b'\x34\xa3\x20\x20', 28) }, 'physCellId': 304, 'trackingAreaCode': (b'\x13\x8e', 16), 'rsrpResult': 59, 'rsrqResult': 24, 'tA': 1, 'measResultListEUTRA': [ { 'physCellId': 275, 'measResult': { 'rsrpResult': 45, 'rsrqResult': 14 } }, { 'physCellId': 200, 'measResult': { 'rsrpResult': 39, 'rsrqResult': 8 } } ] } ) ), 'status': 'current' }, 'sUPLPOS': { 'posPayLoad': ( 'ver2-PosPayLoad-extension', { 'lPPPayload': [ b'\x92\x2b\x08\x31\xe2\x00\x5d\x00\x82\x17' b'\x40\x27\x04\x88\x22\x1b\x80\x00\x2d\xe4' b'\x00\x00\x41\x88\x3c\x09\x24\x30\x44\x18' b'\xb3\x18\x66\x8f\xc0\x03\x24\x01\x01', b'\x92\x2c\x10\x62\x62\x13\x10\x34\xa3\x20' b'\x26\xa4\x01\x40\x84\x00\x00\x00\x00\x01' b'\x41\x20\x02\x00\x00\x00\x00' ] } ) }, 'ver': (b'\x52\x88\xec\xab\xa9\x37\x5c\x4e', 64) } ) } encoded = ( b'\x00\xa2\x02\x00\x00\xc0\x22\x86\x30\x64\x00\x00\x00\x00\x00' b'\x20\xf2\x00\x00\x40\x00\x00\x7f\x00\x00\x01\x31\xb9\x40\x40' b'\x04\x40\x47\x00\x80\xa0\x04\x04\x0c\x0c\x04\x00\x40\x00\x1b' b'\x27\xa6\x21\x31\x00\x34\xa3\x20\x20\x01\x30\x13\x8e\x76\xc0' b'\x00\x01\x20\x01\x13\x6b\x4e\x00\x00\xc8\x69\xc8\x24\x00\x47' b'\x48\x00\x26\x92\x2b\x08\x31\xe2\x00\x5d\x00\x82\x17\x40\x27' b'\x04\x88\x22\x1b\x80\x00\x2d\xe4\x00\x00\x41\x88\x3c\x09\x24' b'\x30\x44\x18\xb3\x18\x66\x8f\xc0\x03\x24\x01\x01\x00\x1a\x92' b'\x2c\x10\x62\x62\x13\x10\x34\xa3\x20\x26\xa4\x01\x40\x84\x00' b'\x00\x00\x00\x01\x41\x20\x02\x00\x00\x00\x00\x52\x88\xec\xab' b'\xa9\x37\x5c\x4e' ) self.assert_encode_decode(ulp, 'ULP-PDU', decoded, encoded) def test_not_support_decode_with_length(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OCTET STRING " "END", 'oer') with self.assertRaises(NotImplementedError) as cm: foo.decode_with_length('A', b'\x01\x23\x45\x67\x89\xab\xcd\xef') self.assertEqual(str(cm.exception), "This codec does not support decode_with_length().") if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_two_modules.py000066400000000000000000000016171524544274600207500ustar00rootroot00000000000000import unittest from .utils import Asn1ToolsBaseTest import asn1tools class Asn1ToolsTwoModulesTest(Asn1ToolsBaseTest): maxDiff = None def test_uper(self): files = [ 'tests/files/module-1.asn', 'tests/files/module-2.asn' ] spec = asn1tools.compile_files(files, 'uper') # Message 1. decoded = { 'priority': 'high', 'src': 1, 'dst': 2, 'num': 0, 'length': 256 } encoded = b'\x14\x04\x00' self.assert_encode_decode(spec, 'ASequence', decoded, encoded) # Message 2. decoded = { 'isvalide': True, 'name': 'toto', 'identity': 5 } encoded = b'\x82\x74\xdf\xd3\x7d' self.assert_encode_decode(spec, 'SeqMod2', decoded, encoded) if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_type_checker.py000066400000000000000000000600021524544274600210450ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import unittest import datetime import asn1tools.codecs.type_checker from copy import deepcopy sys.path.append('tests/files') sys.path.append('tests/files/3gpp') from rrc_8_6_0 import EXPECTED as RRC_8_6_0 from information_object import EXPECTED as INFORMATION_OBJECT class Asn1ToolsEncodeTypeCheckerTest(unittest.TestCase): maxDiff = None def assert_good_bad(self, type_spec, expected_type_string, good_datas, bad_datas, bad_datas_strings=None): foo = asn1tools.parse_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= " + type_spec + " " "END") foo = asn1tools.codecs.type_checker.compile_dict(foo) for data in good_datas: foo['Foo']['A'].encode(data) if bad_datas_strings is None: bad_datas_strings = [str(data) for data in bad_datas] for data, bad_datas_string in zip(bad_datas, bad_datas_strings): with self.assertRaises(asn1tools.EncodeError) as cm: foo['Foo']['A'].encode(data) self.assertEqual(str(cm.exception), '{}, but got {}.'.format(expected_type_string, bad_datas_string)) def test_boolean(self): self.assert_good_bad('BOOLEAN', 'A: Expected data of type bool', good_datas=[True, False], bad_datas=[1, 'foo']) def test_integer(self): self.assert_good_bad('INTEGER', 'A: Expected data of type int or str', good_datas=[1, -1], bad_datas=[[], None]) def test_real(self): self.assert_good_bad('REAL', 'A: Expected data of type float or int', good_datas=[1, -1.0], bad_datas=['1.0', None]) def test_null(self): self.assert_good_bad('NULL', 'A: Expected None', good_datas=[None], bad_datas=['1.0', 1]) def test_bit_string(self): self.assert_good_bad('BIT STRING', 'A: Expected data of type tuple(bytes, int)', good_datas=[(b'', 0)], bad_datas=[1, '101', (1, 0, 1), None]) self.assert_good_bad('BIT STRING', 'A: Expected at least 1 bit(s) data', good_datas=[], bad_datas=[(b'', 1)], bad_datas_strings=['0']) def test_bytes(self): self.assert_good_bad('OCTET STRING', 'A: Expected data of type bytes or bytearray', good_datas=[b'7', bytearray()], bad_datas=[1, {}, None]) def test_object_identifier(self): self.assert_good_bad('OBJECT IDENTIFIER', 'A: Expected data of type str', good_datas=['5', u'6'], bad_datas=[1, {}, None]) def test_enumerated(self): self.assert_good_bad('ENUMERATED { a(0) }', 'A: Expected data of type str', good_datas=['5', u'6'], bad_datas=[1, {}, None]) def test_sequence(self): self.assert_good_bad('SEQUENCE { a NULL }', 'A: Expected data of type dict', good_datas=[{}], bad_datas=[(1, ), 1, b'101', None]) self.assert_good_bad('SEQUENCE { a A OPTIONAL }', 'A.a.A.a.A: Expected data of type dict', good_datas=[{'a': {'a': {}}}], bad_datas=[{'a': {'a': []}}], bad_datas_strings=['[]']) def test_sequence_of(self): self.assert_good_bad('SEQUENCE OF NULL', 'A: Expected data of type list', good_datas=[[None, None]], bad_datas=[{}, None]) def test_set(self): self.assert_good_bad('SET { a NULL }', 'A: Expected data of type dict', good_datas=[{}], bad_datas=[(1, ), 1, b'101', None]) def test_set_of(self): self.assert_good_bad('SET OF NULL', 'A: Expected data of type list', good_datas=[[None, None]], bad_datas=[{}, None]) def test_choice(self): self.assert_good_bad('CHOICE { a NULL }', 'A: Expected data of type tuple(str, object)', good_datas=[('a', None)], bad_datas=[(1, None), {'a': 1}, None]) self.assert_good_bad('CHOICE { a CHOICE { b CHOICE { c NULL } } }', 'A.a.b: Expected data of type tuple(str, object)', good_datas=[('a', ('b', ('c', None)))], bad_datas=[('a', ('b', {}))], bad_datas_strings=['{}']) def test_utf8_string(self): self.assert_good_bad('UTF8String', 'A: Expected data of type str', good_datas=['5', u'6'], bad_datas=[1, {}, None]) def test_numeric_string(self): self.assert_good_bad('NumericString', 'A: Expected data of type str', good_datas=['5', u'6'], bad_datas=[1, {}, None]) def test_printable_string(self): self.assert_good_bad('PrintableString', 'A: Expected data of type str', good_datas=['5', u'6'], bad_datas=[1, {}, None]) def test_ia5_string(self): self.assert_good_bad('IA5String', 'A: Expected data of type str', good_datas=['5', u'6'], bad_datas=[1, {}, None]) def test_visible_string(self): self.assert_good_bad('VisibleString', 'A: Expected data of type str', good_datas=['5', u'6'], bad_datas=[1, {}, None]) def test_general_string(self): self.assert_good_bad('GeneralString', 'A: Expected data of type str', good_datas=['5', u'6'], bad_datas=[1, {}, None]) def test_bmp_string(self): self.assert_good_bad('BMPString', 'A: Expected data of type str', good_datas=['5', u'6'], bad_datas=[1, {}, None]) def test_graphic_string(self): self.assert_good_bad('GraphicString', 'A: Expected data of type str', good_datas=['5', u'6'], bad_datas=[1, {}, None]) def test_teletex_string(self): self.assert_good_bad('TeletexString', 'A: Expected data of type str', good_datas=['5', u'6'], bad_datas=[1, {}, None]) def test_universal_string(self): self.assert_good_bad('UniversalString', 'A: Expected data of type str', good_datas=['5', u'6'], bad_datas=[1, {}, None]) def test_utc_time(self): self.assert_good_bad('UTCTime', 'A: Expected data of type datetime.datetime', good_datas=[datetime.datetime(1, 2, 3)], bad_datas=[1.4, None]) def test_generalized_time(self): self.assert_good_bad('GeneralizedTime', 'A: Expected data of type datetime.datetime', good_datas=[datetime.datetime(1, 2, 3)], bad_datas=[1.4, None]) def test_rrc_8_6_0(self): rrc = asn1tools.codecs.type_checker.compile_dict(deepcopy(RRC_8_6_0)) decoded = { 'message': ( 'c1', ( 'systemInformation', { 'criticalExtensions': ( 'systemInformation-r8', { 'sib-TypeAndInfo': [ ( 'sib2', { 'ac-BarringInfo': { 'ac-BarringForEmergency': True, 'ac-BarringForMO-Data': { 'ac-BarringFactor': 'p95', 'ac-BarringTime': 's128', 'ac-BarringForSpecialAC': (b'\xf0', 5) } }, 'radioResourceConfigCommon': { 'rach-ConfigCommon': { 'preambleInfo': { 'numberOfRA-Preambles': 'n24', 'preamblesGroupAConfig': { 'sizeOfRA-PreamblesGroupA': 'n28', 'messageSizeGroupA': 'b144', 'messagePowerOffsetGroupB': 'minusinfinity' } }, 'powerRampingParameters': { 'powerRampingStep': 'dB0', 'preambleInitialReceivedTargetPower': 'dBm-102' }, 'ra-SupervisionInfo': { 'preambleTransMax': 'n8', 'ra-ResponseWindowSize': 'sf6', 'mac-ContentionResolutionTimer': 'sf48' }, 'maxHARQ-Msg3Tx': 8 }, 'bcch-Config': { 'modificationPeriodCoeff': 'n2' }, 'pcch-Config': { 'defaultPagingCycle': 'rf256', 'nB': 'twoT' }, 'prach-Config': { 'rootSequenceIndex': 836, 'prach-ConfigInfo': { 'prach-ConfigIndex': 33, 'highSpeedFlag': False, 'zeroCorrelationZoneConfig': 10, 'prach-FreqOffset': 64 } }, 'pdsch-ConfigCommon': { 'referenceSignalPower': -60, 'p-b': 2 }, 'pusch-ConfigCommon': { 'pusch-ConfigBasic': { 'n-SB': 1, 'hoppingMode': 'interSubFrame', 'pusch-HoppingOffset': 10, 'enable64QAM': False }, 'ul-ReferenceSignalsPUSCH': { 'groupHoppingEnabled': True, 'groupAssignmentPUSCH': 22, 'sequenceHoppingEnabled': False, 'cyclicShift': 5 } }, 'pucch-ConfigCommon': { 'deltaPUCCH-Shift': 'ds1', 'nRB-CQI': 98, 'nCS-AN': 4, 'n1PUCCH-AN': 2047 }, 'soundingRS-UL-ConfigCommon': ( 'setup', { 'srs-BandwidthConfig': 'bw0', 'srs-SubframeConfig': 'sc4', 'ackNackSRS-SimultaneousTransmission': True }), 'uplinkPowerControlCommon': { 'p0-NominalPUSCH': -126, 'alpha': 'al0', 'p0-NominalPUCCH': -127, 'deltaFList-PUCCH': { 'deltaF-PUCCH-Format1': 'deltaF-2', 'deltaF-PUCCH-Format1b': 'deltaF1', 'deltaF-PUCCH-Format2': 'deltaF0', 'deltaF-PUCCH-Format2a': 'deltaF-2', 'deltaF-PUCCH-Format2b': 'deltaF0' }, 'deltaPreambleMsg3': -1 }, 'ul-CyclicPrefixLength': 'len1' }, 'ue-TimersAndConstants': { 't300': 'ms100', 't301': 'ms200', 't310': 'ms50', 'n310': 'n2', 't311': 'ms30000', 'n311': 'n2' }, 'freqInfo': { 'additionalSpectrumEmission': 3 }, 'timeAlignmentTimerCommon': 'sf500' } ), ( 'sib3', { 'cellReselectionInfoCommon': { 'q-Hyst': 'dB0', 'speedStateReselectionPars': { 'mobilityStateParameters': { 't-Evaluation': 's180', 't-HystNormal': 's180', 'n-CellChangeMedium': 1, 'n-CellChangeHigh': 16 }, 'q-HystSF': { 'sf-Medium': 'dB-6', 'sf-High': 'dB-4' } } }, 'cellReselectionServingFreqInfo': { 'threshServingLow': 7, 'cellReselectionPriority': 3 }, 'intraFreqCellReselectionInfo': { 'q-RxLevMin': -33, 's-IntraSearch': 0, 'presenceAntennaPort1': False, 'neighCellConfig': (b'\x80', 2), 't-ReselectionEUTRA': 4 } } ), ( 'sib4', { } ), ( 'sib5', { 'interFreqCarrierFreqList': [ { 'dl-CarrierFreq': 1, 'q-RxLevMin': -45, 't-ReselectionEUTRA': 0, 'threshX-High': 31, 'threshX-Low': 29, 'allowedMeasBandwidth': 'mbw6', 'presenceAntennaPort1': True, 'neighCellConfig': (b'\x00', 2), 'q-OffsetFreq': 'dB0' } ] } ), ( 'sib6', { 't-ReselectionUTRA': 3 } ), ('sib7', { 't-ReselectionGERAN': 3 } ), ('sib8', { 'parameters1XRTT': { 'longCodeState1XRTT': (b'\x01#Eg\x89\x00', 42) } } ), ( 'sib9', { 'hnb-Name': b'4' } ), ('sib10', { 'messageIdentifier': (b'#4', 16), 'serialNumber': (b'\x124', 16), 'warningType': b'2\x12' } ), ( 'sib11', { 'messageIdentifier': (b'g\x88', 16), 'serialNumber': (b'T5', 16), 'warningMessageSegmentType': 'notLastSegment', 'warningMessageSegmentNumber': 19, 'warningMessageSegment': b'\x12' } ) ] } ) } ) ) } rrc['EUTRA-RRC-Definitions']['BCCH-DL-SCH-Message'].encode(decoded) def test_information_object(self): # ToDo: Fix when supported. return information_object = asn1tools.codecs.type_checker.compile_dict( deepcopy(INFORMATION_OBJECT)) # Message 1 - without constraints. decoded = { 'id': 0, 'value': b'\x05', 'comment': 'item 0', 'extra': 2 } information_object['InformationObject']['ItemWithoutConstraints'].encode( decoded) # Message 1 - with constraints. decoded = { 'id': 0, 'value': True, 'comment': 'item 0', 'extra': 2 } information_object['InformationObject']['ItemWithConstraints'].encode( decoded) # Message 1 failure - with constraints. decoded = { 'id': 0, 'value': b'\x05', 'comment': 'item 0', 'extra': 2 } # No checks of open types performed yet. with self.assertRaises(AssertionError): with self.assertRaises(asn1tools.EncodeError) as cm: information_object['InformationObject']['ItemWithConstraints'].encode( decoded) self.assertEqual(str(cm.exception), "Expected data of type bool, but got b'\x05'.") # Message 2. decoded = { 'id': 1, 'value': { 'myValue': 7, 'myType': 0 }, 'comment': 'item 1', 'extra': 5 } information_object['InformationObject']['ItemWithConstraints'].encode( decoded) # Message 3 - error class. decoded = { 'errorCategory': 'A', 'errors': [ { 'errorCode': 1, 'errorInfo': 3 }, { 'errorCode': 2, 'errorInfo': True } ] } information_object['InformationObject']['ErrorReturn'].encode( decoded) if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_uper.c000066400000000000000000001074071524544274600171600ustar00rootroot00000000000000#include #include #include #include #include "nala.h" #include "uper.h" #include "boolean_uper.h" #include "octet_string_uper.h" #define membersof(a) (sizeof(a) / (sizeof((a)[0]))) TEST(uper_c_source_a) { uint8_t encoded[42]; struct uper_c_source_a_t decoded; /* Encode. */ decoded.a = -1; decoded.b = -2; decoded.c = -3; decoded.d = -4; decoded.e = 1; decoded.f = 2; decoded.g = 3; decoded.h = 4; decoded.i = true; memset(&decoded.j.buf[0], 5, sizeof(decoded.j.buf)); memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_a_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x7f\x7f\xfe\x7f\xff\xff\xfd\x7f\xff\xff\xff\xff\xff\xff\xfc" "\x01\x00\x02\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04" "\x82\x82\x82\x82\x82\x82\x82\x82\x82\x82\x82\x80", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_a_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a, -1); ASSERT_EQ(decoded.b, -2); ASSERT_EQ(decoded.c, -3); ASSERT_EQ(decoded.d, -4); ASSERT_EQ(decoded.e, 1); ASSERT_EQ(decoded.f, 2); ASSERT_EQ(decoded.g, 3); ASSERT_EQ(decoded.h, 4); ASSERT_TRUE(decoded.i); ASSERT_MEMORY_EQ(&decoded.j.buf[0], "\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05", sizeof(decoded.j.buf)); } TEST(uper_c_source_a_encode_error_no_mem) { uint8_t encoded[41]; struct uper_c_source_a_t decoded; decoded.a = -1; decoded.b = -2; decoded.c = -3; decoded.d = -4; decoded.e = 1; decoded.f = 2; decoded.g = 3; decoded.h = 4; decoded.i = true; memset(&decoded.j.buf[0], 5, sizeof(decoded.j.buf)); ASSERT_EQ(uper_c_source_a_encode(&encoded[0], sizeof(encoded), &decoded), -ENOMEM); } TEST(uper_c_source_a_decode_error_out_of_data) { uint8_t encoded[41] = "\x7f\x7f\xfe\x7f\xff\xff\xfd\x7f\xff\xff\xff\xff\xff\xff\xfc" "\x01\x00\x02\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04" "\x82\x82\x82\x82\x82\x82\x82\x82\x82\x82\x82"; struct uper_c_source_a_t decoded; ASSERT_EQ(uper_c_source_a_decode(&decoded, &encoded[0], sizeof(encoded)), -EOUTOFDATA); } TEST(uper_c_source_b_choice_a) { uint8_t encoded[2]; struct uper_c_source_b_t decoded; /* Encode. */ decoded.choice = uper_c_source_b_choice_a_e; decoded.value.a = -10; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_b_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x1d\x80", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_b_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.choice, uper_c_source_b_choice_a_e); ASSERT_EQ(decoded.value.a, -10); } TEST(uper_c_source_b_choice_b) { uint8_t encoded[42]; struct uper_c_source_b_t decoded; /* Encode. */ decoded.choice = uper_c_source_b_choice_b_e; decoded.value.b.a = -1; decoded.value.b.b = -2; decoded.value.b.c = -3; decoded.value.b.d = -4; decoded.value.b.e = 1; decoded.value.b.f = 2; decoded.value.b.g = 3; decoded.value.b.h = 4; decoded.value.b.i = true; memset(&decoded.value.b.j.buf[0], 5, sizeof(decoded.value.b.j.buf)); memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_b_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x5f\xdf\xff\x9f\xff\xff\xff\x5f\xff\xff\xff\xff\xff\xff\xff" "\x00\x40\x00\x80\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x01" "\x20\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_b_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.choice, uper_c_source_b_choice_b_e); ASSERT_EQ(decoded.value.b.a, -1); ASSERT_EQ(decoded.value.b.b, -2); ASSERT_EQ(decoded.value.b.c, -3); ASSERT_EQ(decoded.value.b.d, -4); ASSERT_EQ(decoded.value.b.e, 1); ASSERT_EQ(decoded.value.b.f, 2); ASSERT_EQ(decoded.value.b.g, 3); ASSERT_EQ(decoded.value.b.h, 4); ASSERT_TRUE(decoded.value.b.i); ASSERT_MEMORY_EQ(&decoded.value.b.j.buf[0], "\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05\x05", sizeof(decoded.value.b.j.buf)); } TEST(uper_c_source_b_decode_error_bad_choice) { uint8_t encoded[2] = "\xdd\x80"; struct uper_c_source_b_t decoded; ASSERT_EQ(uper_c_source_b_decode(&decoded, &encoded[0], sizeof(encoded)), -EBADCHOICE); } TEST(uper_c_source_c_empty) { uint8_t encoded[1]; struct uper_c_source_c_t decoded; /* Encode. */ decoded.length = 0; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_c_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x00", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_c_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.length, 0); } TEST(uper_c_source_c_2_elements) { uint8_t encoded[3]; struct uper_c_source_c_t decoded; /* Encode. */ decoded.length = 2; decoded.elements[0].choice = uper_c_source_b_choice_a_e; decoded.elements[0].value.a = -11; decoded.elements[1].choice = uper_c_source_b_choice_a_e; decoded.elements[1].value.a = 13; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_c_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x87\x52\x34", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_c_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.length, 2); ASSERT_EQ(decoded.elements[0].choice, uper_c_source_b_choice_a_e); ASSERT_EQ(decoded.elements[0].value.a, -11); ASSERT_EQ(decoded.elements[1].choice, uper_c_source_b_choice_a_e); ASSERT_EQ(decoded.elements[1].value.a, 13); } TEST(uper_c_source_c_decode_error_bad_length) { uint8_t encoded[4] = "\xc7\x52\x34\x00"; struct uper_c_source_c_t decoded; ASSERT_EQ(uper_c_source_c_decode(&decoded, &encoded[0], sizeof(encoded)), -EBADLENGTH); } TEST(uper_c_source_d_all_present) { uint8_t encoded[10]; struct uper_c_source_d_t decoded; /* Encode. */ decoded.length = 1; decoded.elements[0].a.b.choice = uper_c_source_d_a_b_choice_c_e; decoded.elements[0].a.b.value.c = 0; decoded.elements[0].a.e.length = 3; decoded.elements[0].g.h = uper_c_source_d_g_h_j_e; decoded.elements[0].g.l.length = 2; decoded.elements[0].g.l.buf[0] = 0x54; decoded.elements[0].g.l.buf[1] = 0x55; decoded.elements[0].m.is_n_present = true; decoded.elements[0].m.n = false; decoded.elements[0].m.o = 2; decoded.elements[0].m.is_p_present = true; memset(&decoded.elements[0].m.p.q.buf[0], 3, sizeof(decoded.elements[0].m.p.q.buf)); decoded.elements[0].m.p.is_r_present = true; decoded.elements[0].m.p.r = true; decoded.elements[0].m.s = true; ASSERT_EQ(uper_c_source_d_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x00\xaa\x2a\xfa\x40\xc0\xc0\xc0\xc0\xf0", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_d_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.length, 1); ASSERT_EQ(decoded.elements[0].a.b.choice, uper_c_source_d_a_b_choice_c_e); ASSERT_EQ(decoded.elements[0].a.b.value.c, 0); ASSERT_EQ(decoded.elements[0].a.e.length, 3); ASSERT_EQ(decoded.elements[0].g.h, uper_c_source_d_g_h_j_e); ASSERT_EQ(decoded.elements[0].g.l.length, 2); ASSERT_EQ(decoded.elements[0].g.l.buf[0], 0x54); ASSERT_EQ(decoded.elements[0].g.l.buf[1], 0x55); ASSERT_TRUE(decoded.elements[0].m.is_n_present); ASSERT_EQ(decoded.elements[0].m.n, false); ASSERT_EQ(decoded.elements[0].m.o, 2); ASSERT_TRUE(decoded.elements[0].m.is_p_present); ASSERT_MEMORY_EQ(&decoded.elements[0].m.p.q.buf[0], "\x03\x03\x03\x03\x03", sizeof(decoded.elements[0].m.p.q.buf)); ASSERT_TRUE(decoded.elements[0].m.p.is_r_present); ASSERT_EQ(decoded.elements[0].m.p.r, true); ASSERT_EQ(decoded.elements[0].m.s, true); } TEST(uper_c_source_d_some_missing) { uint8_t encoded[8]; struct uper_c_source_d_t decoded; /* Encode. */ decoded.length = 1; decoded.elements[0].a.b.choice = uper_c_source_d_a_b_choice_d_e; decoded.elements[0].a.b.value.d = false; decoded.elements[0].a.e.length = 3; decoded.elements[0].g.h = uper_c_source_d_g_h_k_e; decoded.elements[0].g.l.length = 1; decoded.elements[0].g.l.buf[0] = 0x54; decoded.elements[0].m.is_n_present = false; /* Default value 3. */ decoded.elements[0].m.o = 3; decoded.elements[0].m.is_p_present = true; memset(&decoded.elements[0].m.p.q.buf[0], 3, sizeof(decoded.elements[0].m.p.q.buf)); decoded.elements[0].m.p.is_r_present = false; decoded.elements[0].m.s = false; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_d_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x09\x8a\x84\x03\x03\x03\x03\x03", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_d_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.length, 1); ASSERT_EQ(decoded.elements[0].a.b.choice, uper_c_source_d_a_b_choice_d_e); ASSERT_EQ(decoded.elements[0].a.b.value.d, false); ASSERT_EQ(decoded.elements[0].a.e.length, 3); ASSERT_EQ(decoded.elements[0].g.h, uper_c_source_d_g_h_k_e); ASSERT_EQ(decoded.elements[0].g.l.length, 1); ASSERT_EQ(decoded.elements[0].g.l.buf[0], 0x54); ASSERT_FALSE(decoded.elements[0].m.is_n_present); ASSERT_EQ(decoded.elements[0].m.o, 3); ASSERT_TRUE(decoded.elements[0].m.is_p_present); ASSERT_MEMORY_EQ(&decoded.elements[0].m.p.q.buf[0], "\x03\x03\x03\x03\x03", sizeof(decoded.elements[0].m.p.q.buf)); ASSERT_FALSE(decoded.elements[0].m.p.is_r_present); ASSERT_EQ(decoded.elements[0].m.p.r, false); } TEST(uper_c_source_d_decode_error_bad_enum) { uint8_t encoded[10] = "\x01\xd5\x15\x7a\x40\xc0\xc0\xc0\xc0\xe0"; struct uper_c_source_d_t decoded; ASSERT_EQ(uper_c_source_d_decode(&decoded, &encoded[0], sizeof(encoded)), -EBADENUM); } TEST(uper_c_source_e) { uint8_t encoded[1]; struct uper_c_source_e_t decoded; /* Encode. */ decoded.a.choice = uper_c_source_e_a_choice_b_e; decoded.a.value.b.choice = uper_c_source_e_a_b_choice_c_e; decoded.a.value.b.value.c = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_e_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x80", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_e_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a.choice, uper_c_source_e_a_choice_b_e); ASSERT_EQ(decoded.a.value.b.choice, uper_c_source_e_a_b_choice_c_e); ASSERT_EQ(decoded.a.value.b.value.c, true); } TEST(uper_c_source_f) { uint8_t encoded[1]; struct uper_c_source_f_t decoded; /* Encode. */ decoded.length = 2; decoded.elements[0].elements[0] = false; decoded.elements[1].elements[0] = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_f_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\xa0", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_f_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.length, 2); ASSERT_EQ(decoded.elements[0].elements[0], false); ASSERT_EQ(decoded.elements[1].elements[0], true); } TEST(uper_c_source_g) { uint8_t encoded[2]; struct uper_c_source_g_t decoded; /* Encode. */ decoded.is_a_present = true; decoded.a = true; decoded.is_b_present = false; decoded.is_c_present = false; decoded.is_d_present = false; decoded.is_e_present = false; decoded.is_f_present = false; decoded.is_g_present = false; decoded.is_h_present = false; decoded.is_i_present = true; decoded.i = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_g_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x80\xe0", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_g_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_TRUE(decoded.is_a_present); ASSERT_EQ(decoded.a, true); ASSERT_FALSE(decoded.is_b_present); ASSERT_FALSE(decoded.is_c_present); ASSERT_FALSE(decoded.is_d_present); ASSERT_FALSE(decoded.is_e_present); ASSERT_FALSE(decoded.is_f_present); ASSERT_FALSE(decoded.is_g_present); ASSERT_FALSE(decoded.is_h_present); ASSERT_TRUE(decoded.is_i_present); ASSERT_EQ(decoded.i, true); } TEST(uper_c_source_h) { uint8_t encoded[1]; struct uper_c_source_h_t decoded = {0}; /* Encode. */ memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_h_encode(&encoded[0], sizeof(encoded), &decoded), 0); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_h_decode(&decoded, &encoded[0], sizeof(encoded)), 0); } TEST(uper_c_source_q_c256) { uint8_t encoded[2]; struct uper_c_source_q_t decoded; /* Encode. */ decoded.choice = uper_c_source_q_choice_c256_e; decoded.value.c256 = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_q_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x7f\xc0", 2); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_q_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.choice, uper_c_source_q_choice_c256_e); ASSERT_EQ(decoded.value.c256, true); } TEST(uper_c_source_q_c257) { uint8_t encoded[2]; struct uper_c_source_q_t decoded; /* Encode. */ decoded.choice = uper_c_source_q_choice_c257_e; decoded.value.c257 = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_q_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x80\x40", 2); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_q_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.choice, uper_c_source_q_choice_c257_e); ASSERT_EQ(decoded.value.c257, true); } TEST(uper_c_source_r) { struct data_t { int8_t decoded; uint8_t encoded[1]; } datas[] = { { .decoded = -1, .encoded = "\x00" }, { .decoded = 0, .encoded = "\x80" } }; uint8_t encoded[1]; struct uper_c_source_r_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_r_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_r_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(uper_c_source_s) { struct data_t { int8_t decoded; uint8_t encoded[1]; } datas[] = { { .decoded = -2, .encoded = "\x00" }, { .decoded = 1, .encoded = "\xc0" } }; uint8_t encoded[1]; struct uper_c_source_s_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_s_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_s_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(uper_c_source_t) { struct data_t { int8_t decoded; uint8_t encoded[1]; } datas[] = { { .decoded = -1, .encoded = "\x00" }, { .decoded = 2, .encoded = "\xc0" } }; uint8_t encoded[1]; struct uper_c_source_t_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_t_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_t_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(uper_c_source_u) { struct data_t { int8_t decoded; uint8_t encoded[1]; } datas[] = { { .decoded = -64, .encoded = "\x00" } }; uint8_t encoded[1]; struct uper_c_source_u_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_u_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_u_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(uper_c_source_v) { struct data_t { int8_t decoded; uint8_t encoded[1]; } datas[] = { { .decoded = -128, .encoded = "\x00" } }; uint8_t encoded[1]; struct uper_c_source_v_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_v_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_v_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(uper_c_source_w) { struct data_t { int16_t decoded; uint8_t encoded[2]; } datas[] = { { .decoded = -1, .encoded = "\x00\x00" }, { .decoded = 510, .encoded = "\xff\x80" } }; uint8_t encoded[2]; struct uper_c_source_w_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_w_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_w_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(uper_c_source_x) { struct data_t { int16_t decoded; uint8_t encoded[2]; } datas[] = { { .decoded = -2, .encoded = "\x00\x00" }, { .decoded = 510, .encoded = "\x80\x00" } }; uint8_t encoded[2]; struct uper_c_source_x_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_x_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_x_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(uper_c_source_y) { struct data_t { uint16_t decoded; uint8_t encoded[2]; } datas[] = { { .decoded = 10000, .encoded = "\x00\x00" }, { .decoded = 10512, .encoded = "\x80\x00" } }; uint8_t encoded[2]; struct uper_c_source_y_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_y_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_y_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(uper_c_source_z_decode_error_out_of_data) { uint8_t encoded[1] = {0}; struct uper_c_source_z_t decoded; ASSERT_EQ(uper_c_source_z_decode(&decoded, &encoded[0], 0), -EOUTOFDATA); } TEST(uper_c_source_ab) { uint8_t encoded[2]; struct uper_c_source_ab_t decoded; /* Encode. */ decoded.a = 0; decoded.b = 10300; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_ab_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\xa5\x80", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_ab_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a, 0); ASSERT_EQ(decoded.b, 10300); } TEST(uper_c_source_ae) { uint8_t encoded[1]; struct uper_c_source_ae_t decoded; /* Encode. */ decoded.is_a_present = true; decoded.a = false; decoded.b = true; decoded.c = false; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_ae_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x40", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_ae_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a, false); ASSERT_EQ(decoded.b, true); ASSERT_EQ(decoded.c, false); } TEST(uper_c_source_af) { uint8_t encoded[24]; uint8_t encoded2[24] = "\xc4\x7f\xc1\x30\x10\x11\x10\x00\x44\x80\x44\xc0" "\x45\x00\x45\x40\x45\x80\x45\xc0\x46\x00\x46\x40"; struct uper_c_source_af_t decoded; /* Encode. */ decoded.a = true; decoded.b.c = true; decoded.b.d = 17; decoded.b.is_d_addition_present = true; decoded.e = 18; decoded.is_e_addition_present = true; decoded.f = 19; decoded.is_f_addition_present = true; decoded.g = 20; decoded.is_g_addition_present = true; decoded.h = 21; decoded.is_h_addition_present = true; decoded.i = 22; decoded.is_i_addition_present = true; decoded.j = 23; decoded.is_j_addition_present = true; decoded.k = 24; decoded.is_k_addition_present = true; decoded.l = 25; decoded.is_l_addition_present = true; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_TRUE(uper_c_source_af_encode(&encoded[0], sizeof(encoded), &decoded) < 0); // Decode. memset(&decoded, 0, sizeof(decoded)); ASSERT_TRUE(uper_c_source_af_decode(&decoded, &encoded2[0], sizeof(encoded2)) < 0); } TEST(uper_c_source_al) { struct data_t { int16_t decoded; uint8_t encoded[2]; } datas[] = { { .decoded = -129, .encoded = "\x00\x00" }, { .decoded = 127, .encoded = "\x80\x00" } }; uint8_t encoded[2]; struct uper_c_source_al_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_al_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_al_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(uper_c_source_am) { struct data_t { int16_t decoded; uint8_t encoded[1]; } datas[] = { { .decoded = -2, .encoded = "\x00" }, { .decoded = 128, .encoded = "\x82" } }; uint8_t encoded[1]; struct uper_c_source_am_t decoded; unsigned int i; for (i = 0; i < membersof(datas); i++) { /* Encode. */ decoded.value = datas[i].decoded; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_am_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], &datas[i].encoded[0], sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_am_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, datas[i].decoded); } } TEST(uper_c_source_ao) { uint8_t encoded[17]; struct uper_c_source_ao_t decoded; /* Encode. */ decoded.a = UPER_C_SOURCE_AO_A_C; decoded.b = UPER_C_SOURCE_AO_B_A; decoded.c = 0x5; decoded.d = UPER_C_SOURCE_AO_D_B; decoded.e = UPER_C_SOURCE_AO_E_C; memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_ao_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x01\x80\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x10", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_ao_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a, UPER_C_SOURCE_AO_A_C); ASSERT_EQ(decoded.b, UPER_C_SOURCE_AO_B_A); ASSERT_EQ(decoded.c, 0x5); ASSERT_EQ(decoded.d, UPER_C_SOURCE_AO_D_B); ASSERT_EQ(decoded.e, UPER_C_SOURCE_AO_E_C); } TEST(uper_c_source_ap) { uint8_t encoded[2] = "\x88\x20"; struct uper_c_source_ap_t decoded; decoded.b.a = 16; decoded.c.value = uper_c_ref_referenced_enum_b_e; decoded.d = 1; /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_ap_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.b.a, 16); ASSERT_EQ(decoded.c.value, uper_c_ref_referenced_enum_b_e); } TEST(uper_c_source_aq) { uint8_t encoded[3] = "\x01\x86\xa1"; struct uper_c_source_aq_t decoded; decoded.value = 100001; /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_aq_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.value, 100001); } TEST(uper_c_source_ar) { uint8_t encoded[1]; uint8_t encoded_no_default[4]; struct uper_c_source_ar_t decoded; decoded.a.length = 2; decoded.a.buf[0] = 0xAB; decoded.a.buf[1] = 0xCD; /* Encode */ memset(&encoded[0], 0, sizeof(encoded)); ASSERT_EQ(uper_c_source_ar_encode(&encoded[0], sizeof(encoded), &decoded), sizeof(encoded)); ASSERT_MEMORY_EQ(&encoded[0], "\x00", sizeof(encoded)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_ar_decode(&decoded, &encoded[0], sizeof(encoded)), sizeof(encoded)); ASSERT_EQ(decoded.a.length, 2); ASSERT_EQ(decoded.a.buf[0], 0xAB); ASSERT_EQ(decoded.a.buf[1], 0xCD); decoded.a.length = 3; decoded.a.buf[2] = 0xEF; /* Encode */ memset(&encoded_no_default[0], 0, sizeof(encoded_no_default)); ASSERT_EQ(uper_c_source_ar_encode(&encoded_no_default[0], sizeof(encoded_no_default), &decoded), sizeof(encoded_no_default)); ASSERT_MEMORY_EQ(&encoded_no_default[0], "\x9D\x5E\x6F\x78", sizeof(encoded_no_default)); /* Decode. */ memset(&decoded, 0, sizeof(decoded)); ASSERT_EQ(uper_c_source_ar_decode(&decoded, &encoded_no_default[0], sizeof(encoded_no_default)), sizeof(encoded_no_default)); ASSERT_EQ(decoded.a.length, 3); ASSERT_EQ(decoded.a.buf[0], 0xAB); ASSERT_EQ(decoded.a.buf[1], 0xCD); ASSERT_EQ(decoded.a.buf[2], 0xEF); } asn1tools-0.169.0/tests/test_uper.py000066400000000000000000003224231524544274600173630ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import unittest from .utils import Asn1ToolsBaseTest import asn1tools import sys from copy import deepcopy import string from asn1tools.codecs import restricted_utc_time_to_datetime as ut2dt from asn1tools.codecs import restricted_generalized_time_to_datetime as gt2dt import datetime sys.path.append('tests/files') sys.path.append('tests/files/3gpp') sys.path.append('tests/files/oma') from rrc_8_6_0 import EXPECTED as RRC_8_6_0 from lpp_14_3_0 import EXPECTED as LPP_14_3_0 from x691_a4 import EXPECTED as X691_A4 from ulp import EXPECTED as OMA_ULP class Asn1ToolsUPerTest(Asn1ToolsBaseTest): maxDiff = None def test_boolean(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BOOLEAN " "END", 'uper') datas = [ ('A', True, b'\x80'), ('A', False, b'\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_integer(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= INTEGER " "B ::= INTEGER (5..99) " "C ::= INTEGER (-10..10) " "D ::= INTEGER (5..99, ...) " "E ::= INTEGER (1000..1000) " "F ::= SEQUENCE { " " a INTEGER (4..4), " " b INTEGER (40..40), " " c INTEGER (400..400) " "} " "G ::= B (6..7) " "H ::= SEQUENCE { " " a G (7..7) " "} " "I ::= INTEGER (5..99, ..., 101..105) " "J ::= SEQUENCE { " " a BOOLEAN, " " b INTEGER (-10000..704000000000000001), " " c BOOLEAN " "} " "END", 'uper') datas = [ ('A', 32768, b'\x03\x00\x80\x00'), ('A', 32767, b'\x02\x7f\xff'), ('A', 256, b'\x02\x01\x00'), ('A', 255, b'\x02\x00\xff'), ('A', 128, b'\x02\x00\x80'), ('A', 127, b'\x01\x7f'), ('A', 1, b'\x01\x01'), ('A', 0, b'\x01\x00'), ('A', -1, b'\x01\xff'), ('A', -128, b'\x01\x80'), ('A', -129, b'\x02\xff\x7f'), ('A', -256, b'\x02\xff\x00'), ('A', -32768, b'\x02\x80\x00'), ('A', -32769, b'\x03\xff\x7f\xff'), ('B', 5, b'\x00'), ('B', 6, b'\x02'), ('B', 99, b'\xbc'), ('C', -10, b'\x00'), ('C', -1, b'\x48'), ('C', 0, b'\x50'), ('C', 1, b'\x58'), ('C', 10, b'\xa0'), ('D', 99, b'\x5e'), ('E', 1000, b''), ('F', {'a': 4, 'b': 40, 'c': 400}, b''), ('G', 7, b'\x80'), ('H', {'a': 7}, b''), ('I', 103, b'\x80\xb3\x80'), ('J', {'a': True, 'b': 0, 'c': True}, b'\x80\x00\x00\x00\x00\x01\x38\x84') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_real(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= REAL " "B ::= SEQUENCE { " " a REAL, " " ... " "}" "END", 'uper') datas = [ ('A', 0.0, b'\x00'), ('A', -0.0, b'\x00'), ('A', float('inf'), b'\x01\x40'), ('A', float('-inf'), b'\x01\x41'), ('A', 1.0, b'\x03\x80\x00\x01'), ('A', 1.1, b'\x09\x80\xcd\x08\xcc\xcc\xcc\xcc\xcc\xcd'), ('A', 1234.5678, b'\x09\x80\xd6\x13\x4a\x45\x6d\x5c\xfa\xad'), ('A', 8, b'\x03\x80\x03\x01'), ('A', 0.625, b'\x03\x80\xfd\x05'), ('A', 10000000000000000146306952306748730309700429878646550592786107871697963642511482159104, b'\x0a\x81\x00\xe9\x02\x92\xe3\x2a\xc6\x85\x59'), ('A', 0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000001, b'\x0a\x81\xfe\xae\x13\xe4\x97\x06\x5c\xd6\x1f'), ('B', {'a': 1.0}, b'\x01\xc0\x00\x00\x80'), ('B', {'a': 1000000000}, b'\x02\xc0\x04\x8e\xe6\xb2\x80') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_bit_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BIT STRING " "B ::= BIT STRING (SIZE (9)) " "C ::= BIT STRING (SIZE (5..7)) " "D ::= SEQUENCE { " " a BOOLEAN, " " b BIT STRING " "} " "E ::= BIT STRING { " " a (0), " " b (1), " " c (2) " "} " "F ::= SEQUENCE { " " a BIT STRING, " " b BOOLEAN " "} " "G ::= BIT STRING { " " a (0), " " b (1), " " c (2) " "} (SIZE (2..3))" "H ::= BIT STRING { " " a (3) " "} " "I ::= BIT STRING { " " a (0), " " b (1), " " c (2) " "} (SIZE (8..9))" "J ::= SEQUENCE { " " a E DEFAULT { b } " "} " "K ::= SEQUENCE { " " a E DEFAULT {b, c}, " " b E DEFAULT '011'B, " " c E DEFAULT '60'H " "} " "L ::= SEQUENCE { " " a E DEFAULT { } " "} " "M ::= SEQUENCE { " " a BIT STRING { a(7) } DEFAULT { a } " "} " "N ::= SEQUENCE { " " a BIT STRING { a(8) } DEFAULT { a } " "} " "O ::= SEQUENCE { " " a SEQUENCE { " " a E DEFAULT { a } " " } " "} " "P ::= SEQUENCE { " " a A DEFAULT '00'B, " " b E DEFAULT '00'B " "} " "Q ::= SEQUENCE SIZE (0..2) OF BIT STRING (SIZE(1..255)) " "R ::= SEQUENCE SIZE (0..2) OF BIT STRING (SIZE(1..256)) " "S ::= SEQUENCE SIZE (0..2) OF BIT STRING (SIZE(2..256)) " "T ::= SEQUENCE SIZE (0..2) OF BIT STRING (SIZE(2..257)) " "U ::= BIT STRING (SIZE (1..160, ...)) " "V ::= SEQUENCE { " " a BOOLEAN, " " b BIT STRING (SIZE (1..160, ...)) " "} " "W ::= BIT STRING (SIZE(0..65535)) " "X ::= BIT STRING (SIZE(0..65536)) " "END", 'uper') datas = [ ('A', (b'', 0), b'\x00'), ('A', (b'\x00', 1), b'\x01\x00'), ('A', (b'\x40', 4), b'\x04\x40'), ('A', (b'\x00\x00', 9), b'\x09\x00\x00'), ('A', (299 * b'\x55' + b'\x54', 2399), b'\x89\x5f' + 299 * b'\x55' + b'\x54'), ('B', (b'\x12\x80', 9), b'\x12\x80'), ('C', (b'\x34', 6), b'\x4d'), ('D', {'a': True, 'b': (b'\x40', 4)}, b'\x82\x20'), ('E', (b'\x80', 1), b'\x01\x80'), ('E', (b'\xe0', 3), b'\x03\xe0'), ('E', (b'\x01', 8), b'\x08\x01'), ('F', {'a': (b'\x80', 2), 'b': True}, b'\x02\xa0'), ('F', {'a': (b'', 0), 'b': True}, b'\x00\x80'), ('G', (b'\x80', 2), b'\x40'), ('G', (b'\x40', 2), b'\x20'), ('G', (b'\x20', 3), b'\x90'), ('G', (b'\x00', 2), b'\x00'), ('J', {'a': (b'', 0)}, b'\x80\x00'), ('J', {'a': (b'\x20', 3)}, b'\x81\x90'), ('J', {'a': (b'\x40', 2)}, b'\x00'), ('K', {'a': (b'\x40', 2), 'b': (b'\x40', 2), 'c': (b'\x40', 2)}, b'\xe0\x48\x12\x04\x80'), ('K', {'a': (b'\x60', 3), 'b': (b'\x60', 3), 'c': (b'\x60', 3)}, b'\x00'), ('L', {'a': (b'', 0)}, b'\x00'), ('M', {'a': (b'\x01', 8)}, b'\x00'), ('N', {'a': (b'\x00\x80', 9)}, b'\x00'), ('O', {'a': {'a': (b'\x80', 1)}}, b'\x00'), ('O', {'a': {'a': (b'\x40', 2)}}, b'\x81\x20'), ('P', {'a': (b'\x00', 2), 'b': (b'\x00', 2)}, b'\x00'), ('Q', [(b'\x40', 2)], b'\x40\x50'), ('R', [(b'\x40', 2)], b'\x40\x50'), ('S', [(b'\x40', 2)], b'\x40\x10'), ('T', [(b'\x40', 2)], b'\x40\x10'), ('U', (b'\x80', 1), b'\x00\x40'), ('V', {'a': True, 'b': (b'\xe0', 3)}, b'\x80\xb8'), ('W', (b'', 0), b'\x00\x00'), ('X', (b'', 0), b'\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Trailing zero bits should be stripped when encoding named # bit list. Default value is not encoded, but part of # decoded. Also ignore dangling bits. datas = [ ('E', (b'\x80', 2), b'\x01\x80', (b'\x80', 1)), ('E', (b'\x40', 3), b'\x02\x40', (b'\x40', 2)), ('E', (b'\x00', 3), b'\x00', (b'', 0)), ('E', (b'\x00', 8), b'\x00', (b'', 0)), ('G', (b'\x40', 3), b'\x20', (b'\x40', 2)), ('H', (b'\x00', 1), b'\x00', (b'', 0)), ('I', (b'\x00\x00', 9), b'\x00\x00', (b'\x00', 8)), ('J', {}, b'\x00', {'a': (b'\x40', 2)}), ('J', {'a': (b'\x40', 3)}, b'\x00', {'a': (b'\x40', 2)}), ('J', {'a': (b'\x60', 2)}, b'\x00', {'a': (b'\x40', 2)}), ('K', {}, b'\x00', {'a': (b'\x60', 3), 'b': (b'\x60', 3), 'c': (b'\x60', 3)}), ('A', (b'\x7f\xff', 1), b'\x01\x00', (b'\x00', 1)), ('P', {'a': (b'\x00', 3), 'b': (b'\x00', 3)}, b'\x80\xc0', {'a': (b'\x00', 3), 'b': (b'\x00', 2)}) ] for type_name, decoded_1, encoded, decoded_2 in datas: self.assertEqual(foo.encode(type_name, decoded_1), encoded) self.assertEqual(foo.decode(type_name, encoded), decoded_2) def test_octet_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OCTET STRING " "B ::= OCTET STRING (SIZE (2)) " "C ::= OCTET STRING (SIZE (3)) " "D ::= OCTET STRING (SIZE (3..7)) " "E ::= SEQUENCE { " " a BOOLEAN, " " b OCTET STRING " "} " "F ::= OCTET STRING (SIZE (1..MAX)) " "G ::= OCTET STRING (SIZE (65535)) " "H ::= OCTET STRING (SIZE (65536)) " "I ::= OCTET STRING (SIZE (MIN..5)) " "J ::= OCTET STRING (SIZE (MIN..MAX)) " "K ::= OCTET STRING (SIZE (1..2, ...)) " "M ::= SEQUENCE SIZE (0..2) OF OCTET STRING (SIZE (1..256)) " "N ::= SEQUENCE SIZE (0..2) OF OCTET STRING (SIZE (1..257)) " "O ::= OCTET STRING (SIZE (0..65535)) " "P ::= OCTET STRING (SIZE (0..65536)) " "END", 'uper') datas = [ ('A', b'\x00', b'\x01\x00'), ('A', 500 * b'\x00', b'\x81\xf4' + 500 * b'\x00'), ('B', b'\xab\xcd', b'\xab\xcd'), ('C', b'\xab\xcd\xef', b'\xab\xcd\xef'), ('D', b'\x89\xab\xcd\xef', b'\x31\x35\x79\xbd\xe0'), ('E', {'a': True, 'b': b'\x00'}, b'\x80\x80\x00'), ('F', b'\x12', b'\x01\x12'), ('G', 32767 * b'\x01\x02' + b'\x01', 32767 * b'\x01\x02' + b'\x01'), ('H', 32768 * b'\x01\x02', b'\xc4' + 32768 * b'\x01\x02' + b'\x00'), ('I', b'', b'\x00'), ('J', b'', b'\x00'), ('K', b'\x12\x34', b'\x44\x8d\x00'), ('K', b'\x12\x34\x56', b'\x81\x89\x1a\x2b\x00'), ('M', [b'\x12\x34'], b'\x40\x44\x8d\x00'), ('M', [b'\x12\x34\x56\x78'], b'\x40\xc4\x8d\x15\x9e\x00'), ('N', [b'\x12\x34'], b'\x40\x22\x46\x80'), ('N', [b'\x12\x34\x56\x78'], b'\x40\x62\x46\x8a\xcf\x00'), ('O', b'', b'\x00\x00'), ('O', b'\x11\x22\x33\x44', b'\x00\x04\x11\x22\x33\x44'), ('P', b'', b'\x00'), ('P', b'\x11\x22\x33\x44', b'\x04\x11\x22\x33\x44') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_object_identifier(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OBJECT IDENTIFIER " "B ::= SEQUENCE { " " a BOOLEAN, " " b OBJECT IDENTIFIER " "} " "END", 'uper') datas = [ ('A', '1.2', b'\x01\x2a'), ('A', '1.2.3321', b'\x03\x2a\x99\x79'), ('B', {'a': True, 'b': '1.2'}, b'\x80\x95\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_external(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= EXTERNAL " "END", 'uper') datas = [ ('A', {'encoding': ('octet-aligned', b'\x12')}, b'\x08\x08\x90') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_enumerated(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= ENUMERATED { one(1) } " "B ::= ENUMERATED { zero(0), one(1), ... } " "C ::= ENUMERATED { one(1), four(4), two(2), ..., six(6), nine(9) } " "D ::= ENUMERATED { a, ..., " "aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap, " "aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, " "bg, bh, bi, bj, bk, bl, bm, bn, bo, bp, bq, br, bs, bt, bu, bv, " "bw, bx, by, bz, ca, cb, cc, cd, ce, cf, cg, ch, ci, cj, ck, cl, " "cm, cn, co, cp, cq, cr, cs, ct, cu, cv, cw, cx, cy, cz, da, db, " "dc, dd, de, df, dg, dh, di, dj, dk, dl, dm, dn, do, dp, dq, dr, " "ds, dt, du, dv, dw, dx, dy, dz, ea, eb, ec, ed, ee, ef, eg, eh, " "ei, ej, ek, el, em, en, eo, ep, eq, er, es, et, eu, ev, ew, ex, " "ey, ez, fa, fb, fc, fd, fe, ff, fg, fh, fi, fj, fk, fl, fm, fn, " "fo, fp, fq, fr, fs, ft, fu, fv, fw, fx, fy, fz, ga, gb, gc, gd, " "ge, gf, gg, gh, gi, gj, gk, gl, gm, gn, go, gp, gq, gr, gs, gt, " "gu, gv, gw, gx, gy, gz, ha, hb, hc, hd, he, hf, hg, hh, hi, hj, " "hk, hl, hm, hn, ho, hp, hq, hr, hs, ht, hu, hv, hw, hx, hy, hz, " "ia, ib, ic, id, ie, if, ig, ih, ii, ij, ik, il, im, in, io, ip, " "iq, ir, is, it, iu, iv, iw, ix, iy, iz, ja, jb, jc, jd, je, jf, " "jg, jh, ji, jj, jk, jl, jm, jn, jo, jp, jq, jr, js, jt, ju, jv, " "jw, jx, jy, jz } " "E ::= SEQUENCE {" " a ENUMERATED { zero(0), one(1) } DEFAULT one" "}" "END", 'uper') datas = [ ('A', 'one', b''), ('B', 'zero', b'\x00'), ('B', 'one', b'\x40'), ('C', 'one', b'\x00'), ('C', 'two', b'\x20'), ('C', 'four', b'\x40'), ('C', 'six', b'\x80'), ('C', 'nine', b'\x81'), ('D', 'aa', b'\x80'), ('D', 'cl', b'\xbf'), ('D', 'cm', b'\xc0\x50\x00'), ('D', 'jv', b'\xc0\x7f\xc0'), ('D', 'jw', b'\xc0\x80\x40\x00'), ('D', 'jz', b'\xc0\x80\x40\xc0'), ('E', {'a': 'zero'}, b'\x80'), ('E', {'a': 'one'}, b'\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Default value is not encoded, but part of decoded. datas = [ ('E', {}, b'\x00', {'a': 'one'}) ] for type_name, decoded_1, encoded_1, decoded_2 in datas: self.assertEqual(foo.encode(type_name, decoded_1), encoded_1) self.assertEqual(foo.decode(type_name, encoded_1), decoded_2) def test_sequence(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE {} " "B ::= SEQUENCE { " " a INTEGER DEFAULT 0 " "} " "C ::= SEQUENCE { " " a BOOLEAN, " " ... " "} " "D ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]] " "} " "E ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]], " " ... " "} " "F ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]], " " ..., " " c BOOLEAN " "} " "G ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]], " " [[ " " c BOOLEAN " " ]], " " ..., " " d BOOLEAN " "} " "H ::= SEQUENCE { " " a BOOLEAN, " " ..., " " ... " "} " "I ::= SEQUENCE { " " a BOOLEAN, " " ..., " " b BOOLEAN " "} " "J ::= SEQUENCE { " " a BOOLEAN, " " ..., " " b BOOLEAN OPTIONAL " "} " "K ::= SEQUENCE { " " a BOOLEAN, " " ..., " " b BOOLEAN, " " c BOOLEAN " "} " "L ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN, " " c BOOLEAN " " ]] " "} " "M ::= SEQUENCE { " " a BOOLEAN, " " ..., " " [[ " " b SEQUENCE { " " a INTEGER" " } OPTIONAL, " " c BOOLEAN " " ]] " "} " "N ::= SEQUENCE { " " a BOOLEAN DEFAULT TRUE " "} " "O ::= SEQUENCE { " " ..., " " a BOOLEAN DEFAULT TRUE " "} " "P ::= SEQUENCE { " " ..., " " [[ " " a BOOLEAN, " " b BOOLEAN DEFAULT TRUE " " ]] " "} " "Q ::= SEQUENCE { " " a C, " " b INTEGER " "} " "R ::= SEQUENCE { " " a D, " " b INTEGER " "} " "S ::= SEQUENCE { " " a BOOLEAN, " " ..., " " b SEQUENCE { " " a BOOLEAN, " " b BOOLEAN OPTIONAL, " " ... " " } " "} " "T ::= SEQUENCE { " " a SEQUENCE OF T OPTIONAL " "} " "U ::= SEQUENCE { " " ..., " " a SEQUENCE { " " a INTEGER " " } " "} " "V ::= SEQUENCE { " " ..., " " a BOOLEAN OPTIONAL, " " b BOOLEAN OPTIONAL, " " c BOOLEAN OPTIONAL " "} " "W ::= SEQUENCE { " " ..., " " a1 BOOLEAN, " " a2 BOOLEAN, " " a3 BOOLEAN, " " a4 BOOLEAN, " " a5 BOOLEAN, " " a6 BOOLEAN, " " a7 BOOLEAN, " " a8 BOOLEAN, " " a9 BOOLEAN, " " a10 BOOLEAN, " " a11 BOOLEAN, " " a12 BOOLEAN, " " a13 BOOLEAN, " " a14 BOOLEAN, " " a15 BOOLEAN, " " a16 BOOLEAN, " " a17 BOOLEAN, " " a18 BOOLEAN, " " a19 BOOLEAN, " " a20 BOOLEAN, " " a21 BOOLEAN, " " a22 BOOLEAN, " " a23 BOOLEAN, " " a24 BOOLEAN, " " a25 BOOLEAN, " " a26 BOOLEAN, " " a27 BOOLEAN, " " a28 BOOLEAN, " " a29 BOOLEAN, " " a30 BOOLEAN, " " a31 BOOLEAN, " " a32 BOOLEAN, " " a33 BOOLEAN, " " a34 BOOLEAN, " " a35 BOOLEAN, " " a36 BOOLEAN, " " a37 BOOLEAN, " " a38 BOOLEAN, " " a39 BOOLEAN, " " a40 BOOLEAN, " " a41 BOOLEAN, " " a42 BOOLEAN, " " a43 BOOLEAN, " " a44 BOOLEAN, " " a45 BOOLEAN, " " a46 BOOLEAN, " " a47 BOOLEAN, " " a48 BOOLEAN, " " a49 BOOLEAN, " " a50 BOOLEAN, " " a51 BOOLEAN, " " a52 BOOLEAN, " " a53 BOOLEAN, " " a54 BOOLEAN, " " a55 BOOLEAN, " " a56 BOOLEAN, " " a57 BOOLEAN, " " a58 BOOLEAN, " " a59 BOOLEAN, " " a60 BOOLEAN, " " a61 BOOLEAN, " " a62 BOOLEAN, " " a63 BOOLEAN, " " a64 BOOLEAN, " " a65 BOOLEAN " "} " "END", 'uper') datas = [ ('A', {}, b''), ('O', {}, b'\x00'), ('B', {'a': 0}, b'\x00'), ('B', {'a': 1}, b'\x80\x80\x80'), ('C', {'a': True}, b'\x40'), ('D', {'a': True}, b'\x40'), ('E', {'a': True}, b'\x40'), ('H', {'a': True}, b'\x40'), ('I', {'a': True}, b'\x40'), ('J', {'a': True}, b'\x40'), ('K', {'a': True}, b'\x40'), ('L', {'a': True}, b'\x40'), ('M', {'a': True}, b'\x40'), ('N', {'a': True}, b'\x00'), ('N', {'a': False}, b'\x80'), ('P', {}, b'\x00'), ('O', {'a': True}, b'\x80\x80\xc0\x00'), ('O', {'a': False}, b'\x80\x80\x80\x00'), ('P', {'a': True, 'b': True}, b'\x80\x80\xa0\x00'), ('P', {'a': True, 'b': False}, b'\x80\x80\xe0\x00'), ('D', {'a': True, 'b': True}, b'\xc0\x40\x60\x00'), ('E', {'a': True, 'b': True}, b'\xc0\x40\x60\x00'), ('F', {'a': True, 'c': True}, b'\x60'), ('G', {'a': True, 'd': True}, b'\x60'), ('I', {'a': True, 'b': True}, b'\xc0\x40\x60\x00'), ('J', {'a': True, 'b': True}, b'\xc0\x40\x60\x00'), ('K', {'a': True, 'b': True}, b'\xc0\xc0\x30\x00'), ('F', {'a': True, 'b': True, 'c': True}, b'\xe0\x20\x30\x00'), ('K', {'a': True, 'b': True, 'c': True}, b'\xc0\xe0\x30\x00\x30\x00'), ('L', {'a': True, 'b': True, 'c': True}, b'\xc0\x40\x70\x00'), ('G', {'a': True, 'b': True, 'd': True}, b'\xe0\x60\x18\x00'), ('G', {'a': True, 'b': True, 'c': True, 'd': True}, b'\xe0\x70\x18\x00\x18\x00'), ('M', {'a': True, 'b': {'a': 5}, 'c': True}, b'\xc0\x40\xe0\x20\xb0\x00'), ('Q', {'a': {'a': True}, 'b': 100}, b'\x40\x59\x00'), ('R', {'a': {'a': True, 'b': True}, 'b': 100}, b'\xc0\x40\x60\x00\x59\x00'), ('S', {'a': True, 'b': {'a': True, 'b': True}}, b'\xc0\x40\x5c\x00'), ('T', {'a': [{}]}, b'\x80\x80'), ('T', {'a': [{'a': []}]}, b'\x80\xc0\x00'), ('V', {'a': False}, b'\x82\x80\x20\x00'), ('V', {'b': False}, b'\x82\x40\x20\x00'), ('V', {'c': False}, b'\x82\x20\x20\x00'), ('W', {'a1': True}, b'\xd0\x60\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Non-symmetrical encoding and decoding because default values # are not encoded, but part of the decoded (given that the # root and addition is present). self.assertEqual(foo.encode('N', {}), b'\x00') self.assertEqual(foo.decode('N', b'\x00'), {'a': True}) self.assertEqual(foo.encode('P', {'a': True}), b'\x80\x80\xa0\x00') self.assertEqual(foo.decode('P', b'\x80\x80\xa0\x00'), {'a': True, 'b': True}) # Decode D as C. Extension addition "a.b" should be skipped. self.assertEqual(foo.decode('C', b'\xc0\x40\x60\x00'), {'a': True}) # Decode R as Q. Extension addition "a.b" should be skipped. self.assertEqual(foo.decode('Q', b'\xc0\x40\x60\x00\x59\x00'), {'a': {'a': True}, 'b': 100}) # Decode error of present addition member (out of data). with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('U', b'\x80\x81\x81\x02\xee') self.assertEqual(str(cm.exception), 'U.a.a: out of data (At bit offset: 25)') def test_sequence_of(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE OF INTEGER " "B ::= SEQUENCE SIZE (2) OF INTEGER " "C ::= SEQUENCE SIZE (1..5) OF INTEGER " "D ::= SEQUENCE SIZE (1..2, ...) OF INTEGER " "E ::= SEQUENCE SIZE (1..2, ..., 6..7) OF INTEGER " "F ::= SEQUENCE SIZE (1..10000) OF OCTET STRING " "END", 'uper') datas = [ ('A', [], b'\x00'), ('A', [1], b'\x01\x01\x01'), ('A', [1, 2], b'\x02\x01\x01\x01\x02'), ('A', 1000 * [1, 2], b'\x87\xd0' + 1000 * b'\x01\x01\x01\x02'), ('A', 16384 * [1], b'\xc1' + 16384 * b'\x01\x01' + b'\x00'), ('B', [1, 2], b'\x01\x01\x01\x02'), ('B', [4663, 222322233], b'\x02\x12\x37\x04\x0d\x40\x5e\x39'), ('C', [1], b'\x00\x20\x20'), ('C', [1, 2], b'\x20\x20\x20\x20\x40'), ('D', [2, 1], b'\x40\x40\x80\x40\x40'), ('E', 6 * [1], b'\x83\x00\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80'), ('F', 300 * [b'\x56'], b'\x04\xac' + 300 * b'\x05\x58') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_choice(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= CHOICE { " " a BOOLEAN " "} " "B ::= CHOICE { " " a BOOLEAN, " " ... " "} " "C ::= CHOICE { " " a BOOLEAN, " " b INTEGER, " " ..., " " [[ " " c BOOLEAN " " ]] " "} " "D ::= CHOICE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]], " " ... " "} " "E ::= CHOICE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN " " ]], " " [[ " " c BOOLEAN " " ]], " " ... " "} " "F ::= CHOICE { " " a BOOLEAN, " " ..., " " ... " "} " "G ::= CHOICE { " " a BOOLEAN, " " ..., " " b BOOLEAN " "} " "H ::= CHOICE { " " a BOOLEAN, " " ..., " " b BOOLEAN, " " c BOOLEAN " "} " "I ::= CHOICE { " " a BOOLEAN, " " ..., " " [[ " " b BOOLEAN, " " c BOOLEAN " " ]] " "} " "J ::= CHOICE { " " a BOOLEAN, " " ..., " " [[ " " b CHOICE { " " a INTEGER" " }, " " c BOOLEAN " " ]] " "} " "K ::= CHOICE { " " a BOOLEAN, " " b BOOLEAN, " " c BOOLEAN, " " ..., " " d BOOLEAN, " " e BOOLEAN, " " f BOOLEAN, " " g BOOLEAN, " " h BOOLEAN " "} " "L ::= CHOICE { " " a BOOLEAN, " " b BOOLEAN, " " c BOOLEAN, " " ..., " " d BOOLEAN, " " e BOOLEAN, " " f BOOLEAN, " " g BOOLEAN, " " h BOOLEAN, " " i BOOLEAN " "} " "END", 'uper') datas = [ ('A', ('a', True), b'\x80'), ('B', ('a', True), b'\x40'), ('C', ('a', True), b'\x20'), ('C', ('b', 1), b'\x40\x40\x40'), ('C', ('c', True), b'\x80\x01\x80'), ('D', ('a', True), b'\x40'), ('D', ('b', True), b'\x80\x01\x80'), ('E', ('a', True), b'\x40'), ('E', ('b', True), b'\x80\x01\x80'), ('E', ('c', True), b'\x81\x01\x80'), ('F', ('a', True), b'\x40'), ('G', ('a', True), b'\x40'), ('G', ('b', True), b'\x80\x01\x80'), ('H', ('a', True), b'\x40'), ('H', ('b', True), b'\x80\x01\x80'), ('H', ('c', True), b'\x81\x01\x80'), ('I', ('a', True), b'\x40'), ('I', ('b', True), b'\x80\x01\x80'), ('I', ('c', True), b'\x81\x01\x80'), ('J', ('a', True), b'\x40'), ('J', ('b', ('a', 1)), b'\x80\x02\x01\x01'), ('J', ('c', True), b'\x81\x01\x80'), ('L', ('i', True), b'\x85\x01\x80') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Bad additions index. decoded = foo.decode('K', b'\x85\x01\x80') self.assertEqual(decoded, (None, None)) # Bad addition value. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('K', ('i', True)) self.assertEqual( str(cm.exception), "K: Expected choice 'a', 'b', 'c', 'd', 'e', 'f', 'g' or 'h', but " "got 'i'.") def test_utf8_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE { " " a BOOLEAN, " " b UTF8String, " " c UTF8String OPTIONAL" "} " "B ::= UTF8String (SIZE (10)) " "C ::= UTF8String (SIZE (0..1)) " "D ::= UTF8String (SIZE (2..3) ^ (FROM (\"a\"..\"g\"))) " "E ::= UTF8String " "END", 'uper') datas = [ ('A', {'a': True, 'b': u''}, b'\x40\x00'), ('A', {'a': True, 'b': u'1', 'c': u'foo'}, b'\xc0\x4c\x40\xd9\x9b\xdb\xc0'), ('A', {'a': True, 'b': 300 * u'1'}, b'\x60\x4b\x0c' + 299 * b'\x4c' + b'\x40'), ('B', u'1234567890', b'\x0a\x31\x32\x33\x34\x35\x36\x37\x38\x39\x30'), ('C', u'', b'\x00'), ('C', u'P', b'\x01\x50'), ('D', u'agg', b'\x03\x61\x67\x67'), ('E', u'bar', b'\x03\x62\x61\x72'), ('E', u'a\u1010c', b'\x05\x61\xe1\x80\x90\x63'), ('E', 15000 * u'123', b'\xc2' + 10922 * b'123' + b'12\xaf\xc83' + 4077 * b'123') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'\x70\x00\x00\x00') self.assertEqual(str(cm.exception), 'A.b: Bad length determinant fragmentation value 0xc0.') def test_numeric_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= NumericString " "B ::= NumericString (SIZE (5)) " "C ::= NumericString (SIZE (19..133)) " "D ::= NumericString (FROM (\"0\"..\"5\")) " "E ::= NumericString (FROM (\"0\"..\"2\", ..., \"4\"..\"5\")) " "F ::= NumericString (SIZE (1..4, ..., 6..7)) " "G ::= NumericString (SIZE (0..MAX)) " "H ::= NumericString (SIZE (2..MAX)) " "END", 'uper') datas = [ ('A', ' 0123456789', b'\x0b\x01\x23\x45\x67\x89\xa0'), ('B', '1 9 5', b'\x20\xa0\x60'), ('C', '0123456789 9876543210', b'\x04\x24\x68\xac\xf1\x34\x15\x30\xec\xa8\x64\x20'), ('D', '5', b'\x01\xa0'), #('E', '2', b'\x01\x30'), #('E', '5', b'\x01\x60') ('F', '0', b'\x02'), ('G', '', b'\x00'), ('H', '345', b'\x03\x45\x60') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Bad character 'a' should raise an exception. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('A', 'a', check_constraints=False) self.assertEqual( str(cm.exception), "A: Expected a character in ' 0123456789', but got 'a' (0x61)'.") # Bad value 11 should raise an exception. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'\x01\xb0') self.assertEqual( str(cm.exception), "A: Expected a value in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], " "but got 11.") # Decode size extension is not yet supported. with self.assertRaises(NotImplementedError) as cm: foo.decode('F', b'\x83\x08\x88\x88\x80') self.assertEqual( str(cm.exception), "String size extension is not yet implemented.") def test_printable_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= PrintableString " "B ::= PrintableString (SIZE (16)) " "C ::= PrintableString (SIZE (0..31)) " "D ::= SEQUENCE { " " a BOOLEAN, " " b PrintableString (SIZE (36)), " " c BOOLEAN " "} " "E ::= SEQUENCE { " " a BOOLEAN, " " b PrintableString (SIZE (0..22)), " " c BOOLEAN " "} " "F ::= SEQUENCE { " " a BOOLEAN, " " b PrintableString, " " c BOOLEAN " "} " "END", 'uper') datas = [ ('A', (string.ascii_uppercase + string.ascii_lowercase + string.digits + " '()+,-./:=?"), b'\x4a\x83\x0a\x1c\x48\xb1\xa3\xc8\x93\x2a\x5c\xc9\xb3\xa7\xd0\xa3' b'\x4a\x9d\x4a\xb5\xab\xd8\xb3\x6b\x0e\x2c\x79\x32\xe6\xcf\xa3\x4e' b'\xad\x7b\x36\xee\xdf\xc3\x8f\x2e\x7d\x3a\xf6\xef\xe3\xcf\xa6\x0c' b'\x59\x33\x68\xd5\xb3\x77\x0e\x50\x27\x50\xa5\x5a\xc5\xab\x97\xba' b'\x7a\xfc'), ('B', '0123456789abcdef', b'\x60\xc5\x93\x36\x8d\x5b\x37\x70\xe7\x0e\x2c\x79\x32\xe6'), ('C', '', b'\x00'), ('C', '2', b'\x0b\x20'), ('D', {'a': True, 'b': 12 * '123', 'c': True}, b'\xb1\x64\xcd\x8b\x26\x6c\x59\x33\x62\xc9\x9b\x16\x4c\xd8\xb2\x66' b'\xc5\x93\x36\x2c\x99\xb1\x64\xcd\x8b\x26\x6c\x59\x33\x62\xc9\x9c'), ('E', {'a': True, 'b': '', 'c': True}, b'\x82'), ('F', {'a': True, 'b': '123', 'c': True}, b'\x81\xb1\x64\xce') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Bad character '[' should raise an exception. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('A', '[', check_constraints=False) self.assertEqual( str(cm.exception), "A: Expected a character in ' '()+,-./0123456789:=?ABCDEFGHIJKLMNO" "PQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', but got '[' (0x5b)'.") def test_ia5_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= IA5String " "B ::= IA5String (SIZE (1..256)) " "C ::= IA5String (SIZE (2)) " "D ::= IA5String (SIZE (19..133)) " "END", 'uper') datas = [ ('A', 'bar', b'\x03\xc5\x87\x90'), ('A', 17 * 'HejHoppHappHippAbcde', b'\x81\x54\x91\x97\x54\x8d\xfc\x38\x48\xc3\xc3\x84\x8d\x3c\x38' b'\x41\xc5\x8f\x26\x59\x19\x75\x48\xdf\xc3\x84\x8c\x3c\x38\x48' b'\xd3\xc3\x84\x1c\x58\xf2\x65\x91\x97\x54\x8d\xfc\x38\x48\xc3' b'\xc3\x84\x8d\x3c\x38\x41\xc5\x8f\x26\x59\x19\x75\x48\xdf\xc3' b'\x84\x8c\x3c\x38\x48\xd3\xc3\x84\x1c\x58\xf2\x65\x91\x97\x54' b'\x8d\xfc\x38\x48\xc3\xc3\x84\x8d\x3c\x38\x41\xc5\x8f\x26\x59' b'\x19\x75\x48\xdf\xc3\x84\x8c\x3c\x38\x48\xd3\xc3\x84\x1c\x58' b'\xf2\x65\x91\x97\x54\x8d\xfc\x38\x48\xc3\xc3\x84\x8d\x3c\x38' b'\x41\xc5\x8f\x26\x59\x19\x75\x48\xdf\xc3\x84\x8c\x3c\x38\x48' b'\xd3\xc3\x84\x1c\x58\xf2\x65\x91\x97\x54\x8d\xfc\x38\x48\xc3' b'\xc3\x84\x8d\x3c\x38\x41\xc5\x8f\x26\x59\x19\x75\x48\xdf\xc3' b'\x84\x8c\x3c\x38\x48\xd3\xc3\x84\x1c\x58\xf2\x65\x91\x97\x54' b'\x8d\xfc\x38\x48\xc3\xc3\x84\x8d\x3c\x38\x41\xc5\x8f\x26\x59' b'\x19\x75\x48\xdf\xc3\x84\x8c\x3c\x38\x48\xd3\xc3\x84\x1c\x58' b'\xf2\x65\x91\x97\x54\x8d\xfc\x38\x48\xc3\xc3\x84\x8d\x3c\x38' b'\x41\xc5\x8f\x26\x59\x19\x75\x48\xdf\xc3\x84\x8c\x3c\x38\x48' b'\xd3\xc3\x84\x1c\x58\xf2\x65\x91\x97\x54\x8d\xfc\x38\x48\xc3' b'\xc3\x84\x8d\x3c\x38\x41\xc5\x8f\x26\x59\x19\x75\x48\xdf\xc3' b'\x84\x8c\x3c\x38\x48\xd3\xc3\x84\x1c\x58\xf2\x65\x91\x97\x54' b'\x8d\xfc\x38\x48\xc3\xc3\x84\x8d\x3c\x38\x41\xc5\x8f\x26\x50'), ('B', 'Hej', b'\x02\x91\x97\x50'), ('C', 'He', b'\x91\x94'), ('D', 'HejHoppHappHippAbcde', b'\x03\x23\x2e\xa9\x1b\xf8\x70\x91\x87\x87\x09\x1a\x78\x70\x83\x8b' b'\x1e\x4c\xa0'), ('A', 1638 * '1234567890' + '123', b'\xbf\xff' + 409 * (b'\x62\xc9\x9b\x46\xad\x9b\xb8\x72\xc1\x8b' b'\x26\x6d\x1a\xb6\x6e\xe1\xcb\x06\x2c\x99' b'\xb4\x6a\xd9\xbb\x87\x2c\x18\xb2\x66\xd1' b'\xab\x66\xee\x1c\xb0') + b'\x62\xc9\x9b\x46\xad\x9b\xb8\x72\xc1\x8b\x26\x6d\x1a\xb6\x6e\xe1' + b'\xcb\x06\x2c\x99\x80'), ('A', 1638 * '1234567890' + '1234', b'\xc1' + 409 * (b'\x62\xc9\x9b\x46\xad\x9b\xb8\x72\xc1\x8b' b'\x26\x6d\x1a\xb6\x6e\xe1\xcb\x06\x2c\x99' b'\xb4\x6a\xd9\xbb\x87\x2c\x18\xb2\x66\xd1' b'\xab\x66\xee\x1c\xb0') + b'\x62\xc9\x9b\x46\xad\x9b\xb8\x72\xc1\x8b\x26\x6d\x1a\xb6\x6e\xe1' + b'\xcb\x06\x2c\x99\xb4' + b'\x00'), ('A', 1638 * '1234567890' + '12345', b'\xc1' + 409 * (b'\x62\xc9\x9b\x46\xad\x9b\xb8\x72\xc1\x8b' b'\x26\x6d\x1a\xb6\x6e\xe1\xcb\x06\x2c\x99' b'\xb4\x6a\xd9\xbb\x87\x2c\x18\xb2\x66\xd1' b'\xab\x66\xee\x1c\xb0') + b'\x62\xc9\x9b\x46\xad\x9b\xb8\x72\xc1\x8b\x26\x6d\x1a\xb6\x6e\xe1' + b'\xcb\x06\x2c\x99\xb4' + b'\x01' + b'\x6a') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_visible_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= VisibleString (SIZE (19..133)) " "B ::= VisibleString (SIZE (5)) " "C ::= VisibleString (SIZE (19..1000)) " "D ::= VisibleString (FROM (\"a\"..\"z\")) (SIZE (1..255)) " "END", 'uper') datas = [ ('A', 'HejHoppHappHippAbcde', b'\x03\x23\x2e\xa9\x1b\xf8\x70\x91\x87\x87\x09\x1a\x78\x70\x83\x8b' b'\x1e\x4c\xa0'), ('B', 'Hejaa', b'\x91\x97\x56\x1c\x20'), ('C', 17 * 'HejHoppHappHippAbcde', b'\x50\x64\x65\xd5\x23\x7f\x0e\x12\x30\xf0\xe1\x23\x4f\x0e\x10\x71' b'\x63\xc9\x96\x46\x5d\x52\x37\xf0\xe1\x23\x0f\x0e\x12\x34\xf0\xe1' b'\x07\x16\x3c\x99\x64\x65\xd5\x23\x7f\x0e\x12\x30\xf0\xe1\x23\x4f' b'\x0e\x10\x71\x63\xc9\x96\x46\x5d\x52\x37\xf0\xe1\x23\x0f\x0e\x12' b'\x34\xf0\xe1\x07\x16\x3c\x99\x64\x65\xd5\x23\x7f\x0e\x12\x30\xf0' b'\xe1\x23\x4f\x0e\x10\x71\x63\xc9\x96\x46\x5d\x52\x37\xf0\xe1\x23' b'\x0f\x0e\x12\x34\xf0\xe1\x07\x16\x3c\x99\x64\x65\xd5\x23\x7f\x0e' b'\x12\x30\xf0\xe1\x23\x4f\x0e\x10\x71\x63\xc9\x96\x46\x5d\x52\x37' b'\xf0\xe1\x23\x0f\x0e\x12\x34\xf0\xe1\x07\x16\x3c\x99\x64\x65\xd5' b'\x23\x7f\x0e\x12\x30\xf0\xe1\x23\x4f\x0e\x10\x71\x63\xc9\x96\x46' b'\x5d\x52\x37\xf0\xe1\x23\x0f\x0e\x12\x34\xf0\xe1\x07\x16\x3c\x99' b'\x64\x65\xd5\x23\x7f\x0e\x12\x30\xf0\xe1\x23\x4f\x0e\x10\x71\x63' b'\xc9\x96\x46\x5d\x52\x37\xf0\xe1\x23\x0f\x0e\x12\x34\xf0\xe1\x07' b'\x16\x3c\x99\x64\x65\xd5\x23\x7f\x0e\x12\x30\xf0\xe1\x23\x4f\x0e' b'\x10\x71\x63\xc9\x96\x46\x5d\x52\x37\xf0\xe1\x23\x0f\x0e\x12\x34' b'\xf0\xe1\x07\x16\x3c\x99\x64\x65\xd5\x23\x7f\x0e\x12\x30\xf0\xe1' b'\x23\x4f\x0e\x10\x71\x63\xc9\x96\x46\x5d\x52\x37\xf0\xe1\x23\x0f' b'\x0e\x12\x34\xf0\xe1\x07\x16\x3c\x99\x64\x65\xd5\x23\x7f\x0e\x12' b'\x30\xf0\xe1\x23\x4f\x0e\x10\x71\x63\xc9\x94'), ('D', 'hej', b'\x02\x39\x12') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Bad character 0x19 should raise an exception. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('A', '\x19', check_constraints=False) self.assertEqual( str(cm.exception), "A: Expected a character in ' !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEF" "GHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~', but got" " '.' (0x19)'.") def test_general_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GeneralString " "B ::= SEQUENCE { " " a BOOLEAN, " " b GeneralString " "} " "END", 'uper') datas = [ ('A', '', b'\x00'), ('A', '2', b'\x01\x32'), ('B', {'a': False, 'b': u'K'}, b'\x00\xa5\x80') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_bmp_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BMPString " "B ::= SEQUENCE { " " a BOOLEAN, " " b BMPString " "} " "C ::= SEQUENCE { " " a BMPString (SIZE(1..128)), " " b BMPString (SIZE(1..256)) " "} " "END", 'uper') datas = [ ('A', '', b'\x00'), ('A', '123', b'\x03\x00\x31\x00\x32\x00\x33'), ('B', {'a': False, 'b': u'K'}, b'\x00\x80\x25\x80'), ('C', {'a': '123', 'b': '123'}, b'\x04\x00\x62\x00\x64\x00\x66\x04\x00\x62\x00\x64\x00\x66'), ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_graphic_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GraphicString " "B ::= SEQUENCE { " " a BOOLEAN, " " b GraphicString " "} " "END", 'uper') datas = [ ('A', '', b'\x00'), ('A', '2', b'\x01\x32'), ('B', {'a': False, 'b': u'K'}, b'\x00\xa5\x80') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_teletex_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= TeletexString " "B ::= SEQUENCE { " " a BOOLEAN, " " b TeletexString " "} " "END", 'uper') datas = [ ('A', u'123', b'\x03\x31\x32\x33'), ('B', {'a': False, 'b': u'K'}, b'\x00\xa5\x80') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_universal_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UniversalString " "B ::= SEQUENCE { " " a BOOLEAN, " " b UniversalString " "} " "END", 'uper') datas = [ ('A', u'åäö', b'\x03\x00\x00\x00\xe5\x00\x00\x00\xe4\x00\x00\x00\xf6'), ('A', u'1𐈃Q', b'\x03\x00\x00\x00\x31\x00\x01\x02\x03\x00\x00\x00\x51'), ('B', {'a': False, 'b': u'K'}, b'\x00\x80\x00\x00\x25\x80') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_utc_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UTCTime " "END", 'uper') datas = [ ('A', ut2dt('010203040506Z'), b'\x0d\x60\xc5\x83\x26\x0c\xd8\x34\x60\xd5\x83\x6b\x40') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_generalized_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GeneralizedTime " "END", 'uper') datas = [ ('A', gt2dt('20001231235959.999Z'), b'\x13\x64\xc1\x83\x06\x2c\x99\xb1\x64\xcd\xab\x96\xae\x57\x39\x72' b'\xe6\xd0') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_date(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= DATE " "END", 'uper') datas = [ ('A', datetime.date(1748, 12, 31), b'\xc0\x81\xb5\x2f\xc0'), ('A', datetime.date(1749, 1, 1), b'\x80\x00\x00'), ('A', datetime.date(2004, 12, 31), b'\xbf\xef\xc0'), ('A', datetime.date(2005, 1, 1), b'\x00\x00'), ('A', datetime.date(2020, 12, 31), b'\x3e\xfc'), ('A', datetime.date(2021, 1, 1), b'\x40\x00\x00'), ('A', datetime.date(2276, 12, 31), b'\x7f\xef\xc0'), ('A', datetime.date(2277, 1, 1), b'\xc0\x82\x39\x40\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_time_of_day(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= TIME-OF-DAY " "END", 'uper') datas = [ ('A', datetime.time(0, 0, 0), b'\x00\x00\x00'), ('A', datetime.time(23, 59, 59), b'\xbf\x7d\x80') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_date_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= DATE-TIME " "END", 'uper') datas = [ ('A', datetime.datetime(1748, 12, 31, 23, 59, 59), b'\xc0\x81\xb5\x2f\xd7\xef\xb0'), ('A', datetime.datetime(1749, 1, 1, 0, 1, 2), b'\x80\x00\x00\x04\x20'), ('A', datetime.datetime(2004, 12, 31, 23, 59, 58), b'\xbf\xef\xd7\xef\xa0'), ('A', datetime.datetime(2005, 1, 1, 1, 2, 3), b'\x00\x00\x10\x83'), ('A', datetime.datetime(2020, 12, 31, 23, 59, 57), b'\x3e\xfd\x7e\xf9'), ('A', datetime.datetime(2021, 1, 1, 2, 3, 4), b'\x40\x00\x02\x0c\x40'), ('A', datetime.datetime(2276, 12, 31, 23, 59, 56), b'\x7f\xef\xd7\xef\x80'), ('A', datetime.datetime(2277, 1, 1, 4, 5, 6), b'\xc0\x82\x39\x40\x04\x14\x60') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_foo(self): foo = asn1tools.compile_files('tests/files/foo.asn', 'uper') self.assertEqual(len(foo.types), 2) self.assertTrue(foo.types['Question'] is not None) self.assertTrue(foo.types['Answer'] is not None) self.assertEqual(len(foo.modules), 1) self.assertTrue(foo.modules['Foo'] is not None) # Question. encoded = foo.encode('Question', {'id': 1, 'question': 'Is 1+1=3?'}) self.assertEqual(encoded, b'\x01\x01\x09\x93\xcd\x03\x15\x6c\x5e\xb3\x7e') decoded = foo.decode('Question', encoded) self.assertEqual(decoded, {'id': 1, 'question': 'Is 1+1=3?'}) # Answer. encoded = foo.encode('Answer', {'id': 1, 'answer': False}) self.assertEqual(encoded, b'\x01\x01\x00') decoded = foo.decode('Answer', encoded) self.assertEqual(decoded, {'id': 1, 'answer': False}) # Encode a question with missing field 'id'. with self.assertRaises(asn1tools.EncodeError) as cm: encoded = foo.encode('Question', {'question': 'Is 1+1=3?'}) self.assertEqual( str(cm.exception), "Question: Sequence member 'id' not found in {'question': 'Is 1+1=3?'}.") def test_decode_length(self): foo = asn1tools.compile_files('tests/files/foo.asn', 'uper') with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode_length(b'') self.assertEqual(str(cm.exception), "Decode length is not supported for this codec.") def test_versions(self): foo = asn1tools.compile_files('tests/files/versions.asn', 'uper') # Encode as V1, decode as V1, V2 and V3 decoded_v1 = { 'userName': 'myUserName', 'password': 'myPassword', 'accountNumber': 54224445 } encoded_v1 = foo.encode('V1', decoded_v1) self.assertEqual(foo.decode('V1', encoded_v1), decoded_v1) self.assertEqual(foo.decode('V2', encoded_v1), decoded_v1) self.assertEqual(foo.decode('V3', encoded_v1), decoded_v1) # Encode as V2, decode as V1, V2 and V3 decoded_v2 = { 'userName': 'myUserName', 'password': 'myPassword', 'accountNumber': 54224445, 'minutesLastLoggedIn': 5 } encoded_v2 = foo.encode('V2', decoded_v2) self.assertEqual(foo.decode('V1', encoded_v2), decoded_v1) self.assertEqual(foo.decode('V2', encoded_v2), decoded_v2) self.assertEqual(foo.decode('V3', encoded_v2), decoded_v2) # Encode as V3, decode as V1, V2 and V3 decoded_v3 = { 'userName': 'myUserName', 'password': 'myPassword', 'accountNumber': 54224445, 'minutesLastLoggedIn': 5, 'certificate': None, 'thumb': None } encoded_v3 = foo.encode('V3', decoded_v3) self.assertEqual(foo.decode('V1', encoded_v3), decoded_v1) self.assertEqual(foo.decode('V2', encoded_v3), decoded_v2) self.assertEqual(foo.decode('V3', encoded_v3), decoded_v3) def test_x691_a1(self): a1 = asn1tools.compile_files('tests/files/x691_a1.asn', 'uper') decoded = { 'name': { 'givenName': 'John', 'initial': 'P', 'familyName': 'Smith' }, 'title': 'Director', 'number': 51, 'dateOfHire': '19710917', 'nameOfSpouse': { 'givenName': 'Mary', 'initial': 'T', 'familyName': 'Smith' }, 'children': [ { 'name': { 'givenName': 'Ralph', 'initial': 'T', 'familyName': 'Smith' }, 'dateOfBirth': '19571111' }, { 'name': { 'givenName': 'Susan', 'initial': 'B', 'familyName': 'Jones' }, 'dateOfBirth': '19590717' } ] } encoded = ( b'\x82\x4a\xdf\xa3\x70\x0d\x00\x5a\x7b\x74\xf4\xd0\x02\x66\x11\x13' b'\x4f\x2c\xb8\xfa\x6f\xe4\x10\xc5\xcb\x76\x2c\x1c\xb1\x6e\x09\x37' b'\x0f\x2f\x20\x35\x01\x69\xed\xd3\xd3\x40\x10\x2d\x2c\x3b\x38\x68' b'\x01\xa8\x0b\x4f\x6e\x9e\x9a\x02\x18\xb9\x6a\xdd\x8b\x16\x2c\x41' b'\x69\xf5\xe7\x87\x70\x0c\x20\x59\x5b\xf7\x65\xe6\x10\xc5\xcb\x57' b'\x2c\x1b\xb1\x6e' ) self.assert_encode_decode(a1, 'PersonnelRecord', decoded, encoded) def test_x691_a2(self): a2 = asn1tools.compile_files('tests/files/x691_a2.asn', 'uper') decoded = { 'name': { 'givenName': 'John', 'initial': 'P', 'familyName': 'Smith' }, 'title': 'Director', 'number': 51, 'dateOfHire': '19710917', 'nameOfSpouse': { 'givenName': 'Mary', 'initial': 'T', 'familyName': 'Smith' }, 'children': [ { 'name': { 'givenName': 'Ralph', 'initial': 'T', 'familyName': 'Smith' }, 'dateOfBirth': '19571111' }, { 'name': { 'givenName': 'Susan', 'initial': 'B', 'familyName': 'Jones' }, 'dateOfBirth': '19590717' } ] } encoded = ( b'\x86\x5d\x51\xd2\x88\x8a\x51\x25\xf1\x80\x99\x84\x44\xd3\xcb\x2e' b'\x3e\x9b\xf9\x0c\xb8\x84\x8b\x86\x73\x96\xe8\xa8\x8a\x51\x25\xf1' b'\x81\x08\x9b\x93\xd7\x1a\xa2\x29\x44\x97\xc6\x32\xae\x22\x22\x22' b'\x98\x5c\xe5\x21\x88\x5d\x54\xc1\x70\xca\xc8\x38\xb8' ) self.assert_encode_decode(a2, 'PersonnelRecord', decoded, encoded) def test_x691_a3(self): a3 = asn1tools.compile_files('tests/files/x691_a3.asn', 'uper') decoded = { 'name': { 'givenName': 'John', 'initial': 'P', 'familyName': 'Smith' }, 'title': 'Director', 'number': 51, 'dateOfHire': '19710917', 'nameOfSpouse': { 'givenName': 'Mary', 'initial': 'T', 'familyName': 'Smith' }, 'children': [ { 'name': { 'givenName': 'Ralph', 'initial': 'T', 'familyName': 'Smith' }, 'dateOfBirth': '19571111' }, { 'name': { 'givenName': 'Susan', 'initial': 'B', 'familyName': 'Jones' }, 'dateOfBirth': '19590717', 'sex': 'female' } ] } encoded = ( b'\x40\xcb\xaa\x3a\x51\x08\xa5\x12\x5f\x18\x03\x30\x88\x9a\x79\x65' b'\xc7\xd3\x7f\x20\xcb\x88\x48\xb8\x19\xce\x5b\xa2\xa1\x14\xa2\x4b' b'\xe3\x01\x13\x72\x7a\xe3\x54\x22\x94\x49\x7c\x61\x95\x71\x11\x18' b'\x22\x98\x5c\xe5\x21\x84\x2e\xaa\x60\xb8\x32\xb2\x0e\x2e\x02\x02' b'\x80' ) self.assert_encode_decode(a3, 'PersonnelRecord', decoded, encoded) def test_x691_a4(self): a4 = asn1tools.compile_dict(deepcopy(X691_A4), 'uper') decoded = { 'a': 253, 'b': True, 'c': ('e', True), 'g': '123', 'h': True } encoded = ( b'\x9e\x00\x06\x00\x04\x0a\x46\x90' ) self.assert_encode_decode(a4, 'Ax', decoded, encoded) def test_rrc_8_6_0(self): rrc = asn1tools.compile_dict(deepcopy(RRC_8_6_0), 'uper') # Message 1. decoded = { 'message': ( 'c1', ( 'paging', { 'systemInfoModification': 'true', 'nonCriticalExtension': { } } ) ) } encoded = b'\x28' self.assert_encode_decode(rrc, 'PCCH-Message', decoded, encoded) # Message 2. decoded = { 'message': ( 'c1', ('paging', {}) ) } encoded = b'\x00' self.assert_encode_decode(rrc, 'PCCH-Message', decoded, encoded) # Message 3. decoded = { 'message': { 'dl-Bandwidth': 'n6', 'phich-Config': { 'phich-Duration': 'normal', 'phich-Resource': 'half' }, 'systemFrameNumber': (b'\x12', 8), 'spare': (b'\x34\x40', 10) } } encoded = b'\x04\x48\xd1' self.assert_encode_decode(rrc, 'BCCH-BCH-Message', decoded, encoded) # Message #4. decoded = { 'message': ( 'c1', ( 'systemInformation', { 'criticalExtensions': ( 'systemInformation-r8', { 'sib-TypeAndInfo': [ ( 'sib2', { 'ac-BarringInfo': { 'ac-BarringForEmergency': True, 'ac-BarringForMO-Data': { 'ac-BarringFactor': 'p95', 'ac-BarringTime': 's128', 'ac-BarringForSpecialAC': (b'\xf0', 5) } }, 'radioResourceConfigCommon': { 'rach-ConfigCommon': { 'preambleInfo': { 'numberOfRA-Preambles': 'n24', 'preamblesGroupAConfig': { 'sizeOfRA-PreamblesGroupA': 'n28', 'messageSizeGroupA': 'b144', 'messagePowerOffsetGroupB': 'minusinfinity' } }, 'powerRampingParameters': { 'powerRampingStep': 'dB0', 'preambleInitialReceivedTargetPower': 'dBm-102' }, 'ra-SupervisionInfo': { 'preambleTransMax': 'n8', 'ra-ResponseWindowSize': 'sf6', 'mac-ContentionResolutionTimer': 'sf48' }, 'maxHARQ-Msg3Tx': 8 }, 'bcch-Config': { 'modificationPeriodCoeff': 'n2' }, 'pcch-Config': { 'defaultPagingCycle': 'rf256', 'nB': 'twoT' }, 'prach-Config': { 'rootSequenceIndex': 836, 'prach-ConfigInfo': { 'prach-ConfigIndex': 33, 'highSpeedFlag': False, 'zeroCorrelationZoneConfig': 10, 'prach-FreqOffset': 64 } }, 'pdsch-ConfigCommon': { 'referenceSignalPower': -60, 'p-b': 2 }, 'pusch-ConfigCommon': { 'pusch-ConfigBasic': { 'n-SB': 1, 'hoppingMode': 'interSubFrame', 'pusch-HoppingOffset': 10, 'enable64QAM': False }, 'ul-ReferenceSignalsPUSCH': { 'groupHoppingEnabled': True, 'groupAssignmentPUSCH': 22, 'sequenceHoppingEnabled': False, 'cyclicShift': 5 } }, 'pucch-ConfigCommon': { 'deltaPUCCH-Shift': 'ds1', 'nRB-CQI': 98, 'nCS-AN': 4, 'n1PUCCH-AN': 2047 }, 'soundingRS-UL-ConfigCommon': ( 'setup', { 'srs-BandwidthConfig': 'bw0', 'srs-SubframeConfig': 'sc4', 'ackNackSRS-SimultaneousTransmission': True }), 'uplinkPowerControlCommon': { 'p0-NominalPUSCH': -126, 'alpha': 'al0', 'p0-NominalPUCCH': -127, 'deltaFList-PUCCH': { 'deltaF-PUCCH-Format1': 'deltaF-2', 'deltaF-PUCCH-Format1b': 'deltaF1', 'deltaF-PUCCH-Format2': 'deltaF0', 'deltaF-PUCCH-Format2a': 'deltaF-2', 'deltaF-PUCCH-Format2b': 'deltaF0' }, 'deltaPreambleMsg3': -1 }, 'ul-CyclicPrefixLength': 'len1' }, 'ue-TimersAndConstants': { 't300': 'ms100', 't301': 'ms200', 't310': 'ms50', 'n310': 'n2', 't311': 'ms30000', 'n311': 'n2' }, 'freqInfo': { 'additionalSpectrumEmission': 3 }, 'timeAlignmentTimerCommon': 'sf500' } ), ( 'sib3', { 'cellReselectionInfoCommon': { 'q-Hyst': 'dB0', 'speedStateReselectionPars': { 'mobilityStateParameters': { 't-Evaluation': 's180', 't-HystNormal': 's180', 'n-CellChangeMedium': 1, 'n-CellChangeHigh': 16 }, 'q-HystSF': { 'sf-Medium': 'dB-6', 'sf-High': 'dB-4' } } }, 'cellReselectionServingFreqInfo': { 'threshServingLow': 7, 'cellReselectionPriority': 3 }, 'intraFreqCellReselectionInfo': { 'q-RxLevMin': -33, 's-IntraSearch': 0, 'presenceAntennaPort1': False, 'neighCellConfig': (b'\x80', 2), 't-ReselectionEUTRA': 4 } } ), ( 'sib4', { } ), ( 'sib5', { 'interFreqCarrierFreqList': [ { 'dl-CarrierFreq': 1, 'q-RxLevMin': -45, 't-ReselectionEUTRA': 0, 'threshX-High': 31, 'threshX-Low': 29, 'allowedMeasBandwidth': 'mbw6', 'presenceAntennaPort1': True, 'neighCellConfig': (b'\x00', 2), 'q-OffsetFreq': 'dB0' } ] } ), ( 'sib6', { 't-ReselectionUTRA': 3 } ), ( 'sib7', { 't-ReselectionGERAN': 3 } ), ( 'sib8', { 'parameters1XRTT': { 'longCodeState1XRTT': (b'\x01#Eg\x89\x00', 42) } } ), ( 'sib9', { 'hnb-Name': b'4' } ), ( 'sib10', { 'messageIdentifier': (b'#4', 16), 'serialNumber': (b'\x124', 16), 'warningType': b'2\x12' } ), ( 'sib11', { 'messageIdentifier': (b'g\x88', 16), 'serialNumber': (b'T5', 16), 'warningMessageSegmentType': 'notLastSegment', 'warningMessageSegmentNumber': 19, 'warningMessageSegment': b'\x12' } ) ] } ) } ) ) } encoded = ( b'\x04\x81\x3f\xbe\x2a\x64\x12\xb2\xf3\x3a\x24\x2a\x80\x02\x02\x9b' b'\x29\x8a\x7f\xf8\x24\x00\x00\x11\x00\x24\xe2\x08\x05\x06\xc3\xc4' b'\x76\x92\x81\x41\x00\xc0\x00\x00\x0b\x23\xfd\x10\x80\xca\x19\x82' b'\x80\x48\xd1\x59\xe2\x43\xa0\x1a\x20\x23\x34\x12\x34\x32\x12\x48' b'\xcf\x10\xa8\x6a\x4c\x04\x48' ) self.assert_encode_decode(rrc, 'BCCH-DL-SCH-Message', decoded, encoded) # Message 5. decoded = { 'message': ( 'c1', ( 'counterCheck', { 'rrc-TransactionIdentifier': 0, 'criticalExtensions': ( 'criticalExtensionsFuture', { } ) } ) ) } encoded = b'\x41' self.assert_encode_decode(rrc, 'DL-DCCH-Message', decoded, encoded) # Message 6. decoded = { 'message': ( 'c1', ( 'counterCheck', { 'rrc-TransactionIdentifier': 0, 'criticalExtensions': ( 'c1', ( 'counterCheck-r8', { 'drb-CountMSB-InfoList': [ { 'drb-Identity': 32, 'countMSB-Uplink': 33554431, 'countMSB-Downlink': 33554431 } ], 'nonCriticalExtension': { } } ) ) } ) ) } encoded = b'\x40\x21\xff\xff\xff\xff\xff\xff\xfc' self.assert_encode_decode(rrc, 'DL-DCCH-Message', decoded, encoded) # Message 7. decoded = { 'message': ( 'c1', ( 'counterCheckResponse', { 'rrc-TransactionIdentifier': 0, 'criticalExtensions': ( 'counterCheckResponse-r8', { 'drb-CountInfoList': [ ], 'nonCriticalExtension': { } } ) } ) ) } encoded = b'\x50\x80' self.assert_encode_decode(rrc, 'UL-DCCH-Message', decoded, encoded) def test_lpp_14_3_0(self): lpp = asn1tools.compile_dict(deepcopy(LPP_14_3_0), 'uper') # Message 1. decoded = { 'transactionID': { 'initiator': 'targetDevice', 'transactionNumber': 254 }, 'endTransaction': True, 'lpp-MessageBody': ( 'c1', ( 'provideAssistanceData', { 'criticalExtensions': ( 'c1', ( 'spare1', None ) ) } ) ) } encoded = b'\x93\xfd\x1b' self.assert_encode_decode(lpp, 'LPP-Message', decoded, encoded) # Message 2. decoded = { 'transactionID': { 'initiator': 'targetDevice', 'transactionNumber': 254 }, 'endTransaction': True, 'lpp-MessageBody': ( 'c1', ( 'requestCapabilities', { 'criticalExtensions': ( 'c1', ( 'requestCapabilities-r9', { 'bt-RequestCapabilities-r13':{ } } ) ) } ) ) } encoded = b'\x93\xfd\x00\x80\x04\x04\x40' self.assert_encode_decode(lpp, 'LPP-Message', decoded, encoded) # Message 3. decoded = { 'transactionID': { 'initiator': 'targetDevice', 'transactionNumber': 255 }, 'endTransaction': False, 'lpp-MessageBody': ( 'c1', ( 'requestCapabilities', { 'criticalExtensions': ( 'c1', ( 'requestCapabilities-r9', { 'epdu-RequestCapabilities': [ { 'ePDU-Identifier': { 'ePDU-ID': 256 }, 'ePDU-Body': b'' } ], 'tbs-RequestCapabilities-r13': { }, 'bt-RequestCapabilities-r13':{ } } ) ) } ) ) } encoded = b'\x93\xfe\x00\x84\x0f\xf0\x00\x10\x15\x00' self.assert_encode_decode(lpp, 'LPP-Message', decoded, encoded) # Message 4. decoded = { 'transactionID': { 'initiator': 'targetDevice', 'transactionNumber': 0 }, 'endTransaction': False, 'lpp-MessageBody': ( 'c1', ( 'provideLocationInformation', { 'criticalExtensions': ( 'c1', ( 'provideLocationInformation-r9', { 'ecid-ProvideLocationInformation': { 'ecid-SignalMeasurementInformation': { 'measuredResultsList': [ { 'physCellId': 1, 'arfcnEUTRA': 40000, 'systemFrameNumber': ( b'\x55\x80', 10), 'arfcnEUTRA-v9a0': 70000, 'nrsrp-Result-r14': 9 } ] } } } ) ) } ) ) } encoded = ( b'\x92\x00\x28\x09\x00\xa0\x03\x38\x80\xab\x01\xc0\xe0\x8b\x80\x00' b'\xa0\x48\x00' ) self.assert_encode_decode(lpp, 'LPP-Message', decoded, encoded) def test_etsi_cam_pdu_descriptions_1_3_2(self): files = [ 'tests/files/etsi/cam_pdu_descriptions_1_3_2.asn', 'tests/files/etsi/its_container_1_2_1.asn' ] cam = asn1tools.compile_files(files, 'uper') # Message 1. decoded = { 'header': { 'protocolVersion': 1, 'messageID': 1, 'stationID': 4294967295 }, 'cam': { 'generationDeltaTime': 65535, 'camParameters': { 'basicContainer': { 'stationType': 2, 'referencePosition': { 'latitude': -900000000, 'longitude': 1800000001, 'positionConfidenceEllipse': { 'semiMajorConfidence': 333, 'semiMinorConfidence': 324, 'semiMajorOrientation': 3601 }, 'altitude': { 'altitudeValue': -100000, 'altitudeConfidence': 'alt-000-50' } } }, 'highFrequencyContainer': ( 'basicVehicleContainerHighFrequency', { 'heading': { 'headingValue': 22, 'headingConfidence': 36 }, 'speed': { 'speedValue': 16383, 'speedConfidence': 100 }, 'driveDirection': 'backward', 'vehicleLength': { 'vehicleLengthValue': 1000, 'vehicleLengthConfidenceIndication': 'unavailable' }, 'vehicleWidth': 1, 'longitudinalAcceleration': { 'longitudinalAccelerationValue': -140, 'longitudinalAccelerationConfidence': 1 }, 'curvature': { 'curvatureValue': 0, 'curvatureConfidence': 'outOfRange' }, 'curvatureCalculationMode': 'yawRateNotUsed', 'yawRate': { 'yawRateValue': 0, 'yawRateConfidence': 'degSec-100-00' } } ) } } } encoded = ( b'\x01\x01\xff\xff\xff\xff\xff\xff\x00\x20\x00\x00\x00\x1a\xd2\x74' b'\x80\x22\x9a\x28\x9c\x22\x00\x00\x0a\x00\x01\x64\x7f\xff\xe3\x7e' b'\x78\x00\x50\x0b\xa9\x86\x2f\xff\xcc' ) self.assert_encode_decode(cam, 'CAM', decoded, encoded) # Message 2. decoded = { 'header': { 'protocolVersion': 2, 'messageID': 3, 'stationID': 294967295 }, 'cam': { 'generationDeltaTime': 65534, 'camParameters': { 'basicContainer': { 'stationType': 2, 'referencePosition': { 'latitude': -900000000, 'longitude': 1800000001, 'positionConfidenceEllipse': { 'semiMajorConfidence': 333, 'semiMinorConfidence': 324, 'semiMajorOrientation': 3601 }, 'altitude': { 'altitudeValue': -100000, 'altitudeConfidence': 'alt-000-50' } } }, 'highFrequencyContainer': ( 'basicVehicleContainerHighFrequency', { 'heading': { 'headingValue': 22, 'headingConfidence': 36 }, 'speed': { 'speedValue': 16383, 'speedConfidence': 100 }, 'driveDirection': 'backward', 'vehicleLength': { 'vehicleLengthValue': 1000, 'vehicleLengthConfidenceIndication': 'unavailable' }, 'vehicleWidth': 1, 'longitudinalAcceleration': { 'longitudinalAccelerationValue': -140, 'longitudinalAccelerationConfidence': 1 }, 'curvature': { 'curvatureValue': 0, 'curvatureConfidence': 'outOfRange' }, 'curvatureCalculationMode': 'yawRateNotUsed', 'yawRate': { 'yawRateValue': 0, 'yawRateConfidence': 'degSec-100-00' }, 'cenDsrcTollingZone': { 'protectedZoneLatitude': 888, 'protectedZoneLongitude': 92323, 'cenDsrcTollingZoneID': 0 } } ) } } } encoded = ( b'\x02\x03\x11\x94\xd7\xff\xff\xfe\x00\x20\x00\x00\x00\x1a\xd2\x74' b'\x80\x22\x9a\x28\x9c\x22\x00\x00\x0a\x01\x01\x64\x7f\xff\xe3\x7e' b'\x78\x00\x50\x0b\xa9\x86\x2f\xff\xcd\x6b\x49\xd8\xf0\xd6\x96\x75' b'\x46\x00\x00\x00\x00' ) self.assert_encode_decode(cam, 'CAM', decoded, encoded) # Message 3. decoded = { 'header': { 'protocolVersion': 2, 'messageID': 4, 'stationID': 24967295 }, 'cam': { 'generationDeltaTime': 65534, 'camParameters': { 'basicContainer': { 'stationType': 2, 'referencePosition': { 'latitude': -900000000, 'longitude': 1800000001, 'positionConfidenceEllipse': { 'semiMajorConfidence': 333, 'semiMinorConfidence': 324, 'semiMajorOrientation': 3601 }, 'altitude': { 'altitudeValue': -100000, 'altitudeConfidence': 'alt-000-50' } } }, 'highFrequencyContainer': ( 'rsuContainerHighFrequency', { 'protectedCommunicationZonesRSU': [ { 'protectedZoneType': 'cenDsrcTolling', 'protectedZoneLatitude': 332, 'protectedZoneLongitude': 123, 'protectedZoneRadius': 255 } ] } ) } } } encoded = ( b'\x02\x04\x01\x7c\xf8\x7f\xff\xfe\x00\x20\x00\x00\x00\x1a\xd2\x74' b'\x80\x22\x9a\x28\x9c\x22\x00\x00\x0a\xa0\x8d\x69\x3a\x93\x1a\xd2' b'\x74\x9e\xdf\xc0' ) self.assert_encode_decode(cam, 'CAM', decoded, encoded) def test_etsi_its_container_1_2_1(self): its = asn1tools.compile_files('tests/files/etsi/its_container_1_2_1.asn', 'uper') # Message 1. decoded = [ [], [], [ { 'pathPosition': { 'deltaLatitude': 44, 'deltaLongitude': -1, 'deltaAltitude': 0 }, 'pathDeltaTime': 1 } ] ] encoded = ( b'\x40\x00\x0e\x00\x2b\x7f\xff\x98\xce\x00\x00\x00' ) self.assert_encode_decode(its, 'Traces', decoded, encoded) def test_etsi_mapem_2_1_1(self): files = [ 'tests/files/etsi/mapem_2_1_1.asn', 'tests/files/cen/dsrc.asn', 'tests/files/cen/' 'electronic_registration_identification_vehicle_data_module.asn', 'tests/files/etsi/its_container_1_2_1.asn' ] dsrc = asn1tools.compile_files(files, 'uper') decoded = { "header": { "protocolVersion": 9, "messageID": 5, "stationID": 666 }, "map": { "msgIssueRevision": 69 } } encoded = ( b'\t\x05\x00\x00\x02\x9a\x00E' ) self.assert_encode_decode(dsrc, 'MAPEM', decoded, encoded) def test_repr_all_types(self): all_types = asn1tools.compile_files('tests/files/all_types.asn', 'uper') self.assertEqual(repr(all_types.types['Boolean']), 'Boolean(Boolean)') self.assertEqual(repr(all_types.types['Integer']), 'Integer(Integer)') self.assertEqual(repr(all_types.types['Real']), 'Real(Real)') self.assertEqual(repr(all_types.types['Bitstring']), 'BitString(Bitstring)') self.assertEqual(repr(all_types.types['Octetstring']), 'OctetString(Octetstring)') self.assertEqual(repr(all_types.types['Null']), 'Null(Null)') self.assertEqual(repr(all_types.types['Objectidentifier']), 'ObjectIdentifier(Objectidentifier)') self.assertEqual(repr(all_types.types['Enumerated']), 'Enumerated(Enumerated)') self.assertEqual(repr(all_types.types['Utf8string']), 'UTF8String(Utf8string)') self.assertEqual(repr(all_types.types['Sequence']), 'Sequence(Sequence, [])') self.assertEqual(repr(all_types.types['Set']), 'Set(Set, [])') self.assertEqual(repr(all_types.types['Sequence2']), 'Sequence(Sequence2, [Integer(a)])') self.assertEqual(repr(all_types.types['Set2']), 'Set(Set2, [Integer(a)])') self.assertEqual(repr(all_types.types['Numericstring']), 'NumericString(Numericstring)') self.assertEqual(repr(all_types.types['Printablestring']), 'PrintableString(Printablestring)') self.assertEqual(repr(all_types.types['Ia5string']), 'IA5String(Ia5string)') self.assertEqual(repr(all_types.types['Universalstring']), 'UniversalString(Universalstring)') self.assertEqual(repr(all_types.types['Visiblestring']), 'VisibleString(Visiblestring)') self.assertEqual(repr(all_types.types['Generalstring']), 'GeneralString(Generalstring)') self.assertEqual(repr(all_types.types['Bmpstring']), 'BMPString(Bmpstring)') self.assertEqual(repr(all_types.types['Teletexstring']), 'TeletexString(Teletexstring)') self.assertEqual(repr(all_types.types['Graphicstring']), 'GraphicString(Graphicstring)') self.assertEqual(repr(all_types.types['Utctime']), 'UTCTime(Utctime)') self.assertEqual(repr(all_types.types['SequenceOf']), 'SequenceOf(SequenceOf, Integer())') self.assertEqual(repr(all_types.types['SetOf']), 'SetOf(SetOf, Integer())') self.assertEqual(repr(all_types.types['Any']), 'Any(Any)') self.assertEqual(repr(all_types.types['Sequence12']), 'Sequence(Sequence12, [SequenceOf(a, Recursive(Sequence12))])') def test_all_types_automatic_tags(self): all_types = asn1tools.compile_files( 'tests/files/all_types_automatic_tags.asn', 'uper') datas = [ ('Sequence3', {'a': 1, 'c': 2,'d': True}, b'\x00\x80\x80\x81\x40') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(all_types, type_name, decoded, encoded) def test_containing(self): """CONTAINING is currently not automatically encoded/decoded. Should it? Sometimes the contained data is pre-encoded, prior to this encoding. """ foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BOOLEAN " "B ::= SEQUENCE { " " a BOOLEAN, " " b OCTET STRING (CONTAINING A)" "} " "END", 'uper') datas = [ ('B', {'a': False, 'b': b'\x80'}, b'\x00\xc0\x00') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_error_out_of_data(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= INTEGER " "B ::= SEQUENCE { " " a SEQUENCE { " " b BOOLEAN, " " c INTEGER " " } " "} " "END", 'uper') datas = [ ('A', b'', 'A: out of data (At bit offset: 0)'), ('B', b'\x00', 'B.a.c: out of data (At bit offset: 1)'), ('B', b'\x80\x80', 'B.a.c: out of data (At bit offset: 9)') ] for type_name, encoded, message in datas: with self.assertRaises(asn1tools.codecs.per.OutOfDataError) as cm: foo.decode(type_name, encoded) self.assertEqual(str(cm.exception), message) def test_oma_ulp(self): ulp = asn1tools.compile_dict(deepcopy(OMA_ULP), 'uper') decoded = { 'length': 162, 'version': {'maj': 2, 'min': 0, 'servind': 0}, 'sessionID': { 'setSessionID': { 'sessionId': 8838, 'setId': ('imsi', b'\x64\x00\x00\x00\x00\x00\x20\xf2') }, 'slpSessionID': { 'sessionID': b'\x00\x00\x40\x00', 'slpId': ('iPAddress', ('ipv4Address', b'\x7f\x00\x00\x01')) } }, 'message': ( 'msSUPLPOSINIT', { 'sETCapabilities': { 'posTechnology': { 'agpsSETassisted': True, 'agpsSETBased': True, 'autonomousGPS': False, 'aFLT': False, 'eCID': True, 'eOTD': False, 'oTDOA': True, 'ver2-PosTechnology-extension': { 'gANSSPositionMethods': [ { 'ganssId': 4, 'gANSSPositioningMethodTypes': { 'setAssisted': True, 'setBased': True, 'autonomous': True }, 'gANSSSignals': (b'\x80', 1) } ] } }, 'prefMethod': 'noPreference', 'posProtocol': { 'tia801': False, 'rrlp': False, 'rrc': False, 'ver2-PosProtocol-extension': { 'lpp': True, 'posProtocolVersionLPP': { 'majorVersionField': 12, 'technicalVersionField': 4, 'editorialVersionField': 0 } } } }, 'locationId': { 'cellInfo': ( 'ver2-CellInfo-extension', ( 'lteCell', { 'cellGlobalIdEUTRA': { 'plmn-Identity': { 'mcc': [3, 1, 0], 'mnc': [3, 1, 0] }, 'cellIdentity': (b'\x34\xa3\x20\x20', 28) }, 'physCellId': 304, 'trackingAreaCode': (b'\x13\x8e', 16), 'rsrpResult': 59, 'rsrqResult': 24, 'tA': 1, 'measResultListEUTRA': [ { 'physCellId': 275, 'measResult': { 'rsrpResult': 45, 'rsrqResult': 14 } }, { 'physCellId': 200, 'measResult': { 'rsrpResult': 39, 'rsrqResult': 8 } } ] } ) ), 'status': 'current' }, 'sUPLPOS': { 'posPayLoad': ( 'ver2-PosPayLoad-extension', { 'lPPPayload': [ b'\x92\x2b\x08\x31\xe2\x00\x5d\x00\x82\x17' b'\x40\x27\x04\x88\x22\x1b\x80\x00\x2d\xe4' b'\x00\x00\x41\x88\x3c\x09\x24\x30\x44\x18' b'\xb3\x18\x66\x8f\xc0\x03\x24\x01\x01', b'\x92\x2c\x10\x62\x62\x13\x10\x34\xa3\x20' b'\x26\xa4\x01\x40\x84\x00\x00\x00\x00\x01' b'\x41\x20\x02\x00\x00\x00\x00' ] } ) }, 'ver': (b'\x52\x88\xec\xab\xa9\x37\x5c\x4e', 64) } ) } encoded = ( b'\x00\xa2\x02\x00\x00\xc8\xa1\x8d\x90\x00\x00\x00\x00\x00\x83' b'\xc8\x00\x01\x00\x00\x3f\x80\x00\x00\x98\xdc\xa0\x20\x68\x08' b'\xe2\x14\x00\x82\x06\x0c\x04\x00\x20\x05\x49\xe9\x88\x4c\x40' b'\xd2\x8c\x80\xa6\x02\x71\xce\xd8\x00\x25\x13\x6b\x4e\x32\x1a' b'\x72\x09\x00\x8e\x90\x02\x69\x22\xb0\x83\x1e\x20\x05\xd0\x08' b'\x21\x74\x02\x70\x48\x82\x21\xb8\x00\x02\xde\x40\x00\x04\x18' b'\x83\xc0\x92\x43\x04\x41\x8b\x31\x86\x68\xfc\x00\x32\x40\x10' b'\x10\x01\xa9\x22\xc1\x06\x26\x21\x31\x03\x4a\x32\x02\x6a\x40' b'\x14\x08\x40\x00\x00\x00\x00\x14\x12\x00\x20\x00\x00\x00\x00' b'\xa5\x11\xd9\x57\x52\x6e\xb8\x9c' ) self.assert_encode_decode(ulp, 'ULP-PDU', decoded, encoded) def test_not_support_decode_with_length(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OCTET STRING " "END", 'uper') with self.assertRaises(NotImplementedError) as cm: foo.decode_with_length('A', b'\x01\x23\x45\x67\x89\xab\xcd\xef') self.assertEqual(str(cm.exception), "This codec does not support decode_with_length().") if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/test_xer.py000066400000000000000000001264401524544274600172070ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- import unittest from .utils import Asn1ToolsBaseTest import asn1tools import sys from copy import deepcopy from asn1tools.codecs import utc_time_to_datetime as ut2dt from asn1tools.codecs import generalized_time_to_datetime as gt2dt sys.path.append('tests/files/3gpp') from rrc_8_6_0 import EXPECTED as RRC_8_6_0 class Asn1ToolsXerTest(Asn1ToolsBaseTest): maxDiff = None def test_real(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= REAL " "END", 'xer') datas = [ ('A', 1.0, b'1.0E0'), ('A', 10.0, b'1.0E1'), ('A', -1.0, b'-1.0E0'), ('A', -2, b'-2.0E0'), ('A', -9.99, b'-9.99E0'), ('A', -10.0, b'-1.0E1'), ('A', 0.31, b'0.31E0'), ('A', 2000.0, b'2.0E3') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_null(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= NULL " "B ::= SEQUENCE OF NULL " "C ::= SEQUENCE { a NULL } " "END", 'xer') datas = [ ('A', None, b''), ('B', [None, None], b''), ('C', {'a': None}, b'') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_bit_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= BIT STRING " "END", 'xer') datas = [ ('A', (b'', 0), b''), ('A', (b'\x00', 2), b'00'), ('A', (b'\x40', 4), b'0100'), ('A', (b'\x40\x80', 9), b'010000001'), ('A', (b'\x11\x22\x33\x44\x55\x66\x76', 55), b'0001000100100010001100110100010001010101011001100111011') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_octet_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OCTET STRING " "END", 'xer') datas = [ ('A', b'', b''), ('A', b'\x01\x23', b'0123'), ('A', b'\x40\x80', b'4080') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) self.assertEqual(b'\x01\x23', foo.decode('A', b'123')) def test_object_identifier(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OBJECT IDENTIFIER " "END", 'xer') datas = [ ('A', '1.2.3', b'1.2.3') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'') self.assertEqual(str(cm.exception), "A: Expected an OBJECT IDENTIFIER, but got ''.") def test_external(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= EXTERNAL " "END", 'xer') datas = [ ('A', {'encoding': ('octet-aligned', b'\x12')}, b'12') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_enumerated(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= ENUMERATED { r(5), t(10) } " "B ::= SEQUENCE OF ENUMERATED { a(0) } " "END", 'xer') datas = [ ('A', 'r', b''), ('A', 't', b'') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) # Encode error. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('A', 'foo') self.assertEqual( str(cm.exception), "A: Expected enumeration value 'r' or 't', but got 'foo'.") # Decode error. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'') self.assertEqual( str(cm.exception), "A: Expected enumeration value 'r' or 't', but got 'bar'.") # Encode of error. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('B', ['foo']) self.assertEqual( str(cm.exception), "B: Expected enumeration value 'a', but got 'foo'.") # Decode of error. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('B', b'') self.assertEqual( str(cm.exception), "B: Expected enumeration value 'a', but got 'bar'.") def test_sequence(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE { " " a SEQUENCE OF A OPTIONAL " "} " "B ::= SEQUENCE { " " a INTEGER DEFAULT 4 " "} " "END", 'xer') datas = [ ('A', {}, b''), ('A', {'a': [{}]}, b''), ('A', {'a': [{'a': []}]}, b'') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) # Non-symmetrical encoding and decoding. self.assertEqual(foo.encode('B', {}), b'') self.assertEqual(foo.decode('B', b''), {'a': 4}) def test_sequence_of(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE OF INTEGER " "B ::= SEQUENCE OF A " "C ::= SEQUENCE OF BOOLEAN " "D ::= SEQUENCE OF E " "E ::= BOOLEAN " "F ::= SEQUENCE OF CHOICE { a BOOLEAN, b INTEGER } " "G ::= SEQUENCE OF ENUMERATED { one } " "H ::= SEQUENCE OF SEQUENCE { a INTEGER } " "I ::= SEQUENCE OF BIT STRING " "J ::= SEQUENCE OF OCTET STRING " "K ::= SEQUENCE OF OBJECT IDENTIFIER " "L ::= SEQUENCE OF SEQUENCE OF NULL " "M ::= SEQUENCE OF SET OF NULL " "N ::= SEQUENCE OF a INTEGER " "O ::= SET OF a INTEGER " "END", 'xer') datas = [ ('A', [], b''), ('A', [1, 4], b'14'), ('B', [[5]], b'5'), ('C', [True, False], b''), ('D', [True], b''), ('F', [('a', True), ('b', 1)], b'1'), ('G', ['one'], b''), ('H', [{'a': 1}], b'1'), ('I', [(b'\x80', 1)], b'1'), ('J', [b'\x12'], b'12'), ('K', ['1.2.30'], b'1.2.30'), ('L', [[None], []], b''), ('M', [[None], []], b''), ('N', [], b''), ('N', [1, 4], b'14'), ('O', [], b''), ('O', [1, 4], b'14'), ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_choice(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= CHOICE { " " a BOOLEAN, " " b INTEGER, " " c CHOICE { " " a INTEGER " " } " "} " "B ::= SEQUENCE OF A " "END", 'xer') datas = [ ('A', ('a', True), b''), ('A', ('b', 1), b'1'), ('A', ('c', ('a', 534)), b'534') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) # Encode error. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('A', ('d', None)) self.assertEqual(str(cm.exception), "A: Expected choice 'a', 'b' or 'c', but got 'd'.") # Decode error. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('A', b'') self.assertEqual(str(cm.exception), "A: Expected choice 'a', 'b' or 'c', but got 'd'.") # Encode of error. with self.assertRaises(asn1tools.EncodeError) as cm: foo.encode('B', [('d', None)]) self.assertEqual(str(cm.exception), "B: Expected choice 'a', 'b' or 'c', but got 'd'.") # Decode of error. with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode('B', b'') self.assertEqual(str(cm.exception), "B: Expected choice 'a', 'b' or 'c', but got 'd'.") def test_utf8_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UTF8String " "END", 'xer') datas = [ ('A', u'', b''), ('A', u'bar', b'bar'), ('A', u'a\u1010c', b'aတc'), ('A', u'f → ∝', b'f → ∝') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_universal_string(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UniversalString " "END", 'xer') datas = [ ('A', u'bar', b'bar') ] for type_name, decoded, encoded in datas: self.assert_encode_decode(foo, type_name, decoded, encoded) def test_utc_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= UTCTime " "END", 'xer') datas = [ ('A', ut2dt('9205210000Z'), b'9205210000Z'), ('A', ut2dt('920622123421Z'), b'920622123421Z') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_generalized_time(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= GeneralizedTime " "END", 'xer') datas = [ ('A', gt2dt('199205210000Z'), b'199205210000Z'), ('A', gt2dt('19920622123421Z'), b'19920622123421Z'), ('A', gt2dt('199207221321.3Z'), b'199207221321.3Z') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_any(self): foo = asn1tools.compile_string( "Foo DEFINITIONS ::= " "BEGIN " "A ::= ANY " "END", 'xer') with self.assertRaises(NotImplementedError) as cm: foo.encode('A', b'') self.assertEqual(str(cm.exception), 'ANY is not yet implemented.') with self.assertRaises(NotImplementedError) as cm: foo.decode('A', b'') self.assertEqual(str(cm.exception), 'ANY is not yet implemented.') def test_foo(self): foo = asn1tools.compile_files(['tests/files/foo.asn'], 'xer') self.assertEqual(len(foo.types), 2) self.assertTrue(foo.types['Question'] is not None) self.assertTrue(foo.types['Answer'] is not None) self.assertEqual(len(foo.modules), 1) self.assertTrue(foo.modules['Foo'] is not None) # Question. decoded_message = {'id': 1, 'question': 'Is 1+1=3?'} encoded_message = ( b'1Is 1+1=3?' ) encoded = foo.encode('Question', decoded_message) self.assertEqual(encoded, encoded_message) decoded = foo.decode('Question', encoded) self.assertEqual(decoded, decoded_message) # Answer. decoded_message = {'id': 1, 'answer': False} encoded_message = ( b'1' ) encoded = foo.encode('Answer', decoded_message) self.assertEqual(encoded, encoded_message) decoded = foo.decode('Answer', encoded) self.assertEqual(decoded, decoded_message) # Encode a question with missing field 'id'. with self.assertRaises(asn1tools.EncodeError) as cm: encoded = foo.encode('Question', {'question': 'Is 1+1=3?'}) self.assertEqual( str(cm.exception), "Question: Sequence member 'id' not found in {'question': 'Is 1+1=3?'}.") def test_decode_length(self): foo = asn1tools.compile_files('tests/files/foo.asn', 'xer') with self.assertRaises(asn1tools.DecodeError) as cm: foo.decode_length(b'') self.assertEqual(str(cm.exception), 'Decode length is not supported for this codec.') def test_rrc_8_6_0(self): rrc = asn1tools.compile_dict(deepcopy(RRC_8_6_0), 'xer') # Message 1. decoded = { 'message': ( 'c1', ( 'paging', { 'systemInfoModification': 'true', 'nonCriticalExtension': { } } ) ) } encoded = ( b'<' b'true />' ) self.assert_encode_decode_string(rrc, 'PCCH-Message', decoded, encoded) # Message 2. decoded = { 'message': { 'dl-Bandwidth': 'n6', 'phich-Config': { 'phich-Duration': 'normal', 'phich-Resource': 'half' }, 'systemFrameNumber': (b'\x12', 8), 'spare': (b'\x34\x40', 10) } } encoded = ( b'<' b'phich-Resource>000100100011010001<' b'/spare>' ) self.assert_encode_decode_string(rrc, 'BCCH-BCH-Message', decoded, encoded) # Message 3. decoded = { 'message': ( 'c1', ( 'systemInformation', { 'criticalExtensions': ( 'systemInformation-r8', { 'sib-TypeAndInfo': [ ( 'sib2', { 'ac-BarringInfo': { 'ac-BarringForEmergency': True, 'ac-BarringForMO-Data': { 'ac-BarringFactor': 'p95', 'ac-BarringTime': 's128', 'ac-BarringForSpecialAC': (b'\xf0', 5) } }, 'radioResourceConfigCommon': { 'rach-ConfigCommon': { 'preambleInfo': { 'numberOfRA-Preambles': 'n24', 'preamblesGroupAConfig': { 'sizeOfRA-PreamblesGroupA': 'n28', 'messageSizeGroupA': 'b144', 'messagePowerOffsetGroupB': 'minusinfinity' } }, 'powerRampingParameters': { 'powerRampingStep': 'dB0', 'preambleInitialReceivedTargetPower': 'dBm-102' }, 'ra-SupervisionInfo': { 'preambleTransMax': 'n8', 'ra-ResponseWindowSize': 'sf6', 'mac-ContentionResolutionTimer': 'sf48' }, 'maxHARQ-Msg3Tx': 8 }, 'bcch-Config': { 'modificationPeriodCoeff': 'n2' }, 'pcch-Config': { 'defaultPagingCycle': 'rf256', 'nB': 'twoT' }, 'prach-Config': { 'rootSequenceIndex': 836, 'prach-ConfigInfo': { 'prach-ConfigIndex': 33, 'highSpeedFlag': False, 'zeroCorrelationZoneConfig': 10, 'prach-FreqOffset': 64 } }, 'pdsch-ConfigCommon': { 'referenceSignalPower': -60, 'p-b': 2 }, 'pusch-ConfigCommon': { 'pusch-ConfigBasic': { 'n-SB': 1, 'hoppingMode': 'interSubFrame', 'pusch-HoppingOffset': 10, 'enable64QAM': False }, 'ul-ReferenceSignalsPUSCH': { 'groupHoppingEnabled': True, 'groupAssignmentPUSCH': 22, 'sequenceHoppingEnabled': False, 'cyclicShift': 5 } }, 'pucch-ConfigCommon': { 'deltaPUCCH-Shift': 'ds1', 'nRB-CQI': 98, 'nCS-AN': 4, 'n1PUCCH-AN': 2047 }, 'soundingRS-UL-ConfigCommon': ( 'setup', { 'srs-BandwidthConfig': 'bw0', 'srs-SubframeConfig': 'sc4', 'ackNackSRS-SimultaneousTransmission': True }), 'uplinkPowerControlCommon': { 'p0-NominalPUSCH': -126, 'alpha': 'al0', 'p0-NominalPUCCH': -127, 'deltaFList-PUCCH': { 'deltaF-PUCCH-Format1': 'deltaF-2', 'deltaF-PUCCH-Format1b': 'deltaF1', 'deltaF-PUCCH-Format2': 'deltaF0', 'deltaF-PUCCH-Format2a': 'deltaF-2', 'deltaF-PUCCH-Format2b': 'deltaF0' }, 'deltaPreambleMsg3': -1 }, 'ul-CyclicPrefixLength': 'len1' }, 'ue-TimersAndConstants': { 't300': 'ms100', 't301': 'ms200', 't310': 'ms50', 'n310': 'n2', 't311': 'ms30000', 'n311': 'n2' }, 'freqInfo': { 'additionalSpectrumEmission': 3 }, 'timeAlignmentTimerCommon': 'sf500' } ), ( 'sib3', { 'cellReselectionInfoCommon': { 'q-Hyst': 'dB0', 'speedStateReselectionPars': { 'mobilityStateParameters': { 't-Evaluation': 's180', 't-HystNormal': 's180', 'n-CellChangeMedium': 1, 'n-CellChangeHigh': 16 }, 'q-HystSF': { 'sf-Medium': 'dB-6', 'sf-High': 'dB-4' } } }, 'cellReselectionServingFreqInfo': { 'threshServingLow': 7, 'cellReselectionPriority': 3 }, 'intraFreqCellReselectionInfo': { 'q-RxLevMin': -33, 's-IntraSearch': 0, 'presenceAntennaPort1': False, 'neighCellConfig': (b'\x80', 2), 't-ReselectionEUTRA': 4 } } ), ( 'sib4', { } ), ( 'sib5', { 'interFreqCarrierFreqList': [ { 'dl-CarrierFreq': 1, 'q-RxLevMin': -45, 't-ReselectionEUTRA': 0, 'threshX-High': 31, 'threshX-Low': 29, 'allowedMeasBandwidth': 'mbw6', 'presenceAntennaPort1': True, 'neighCellConfig': (b'\x00', 2), 'q-OffsetFreq': 'dB0' } ] } ), ( 'sib6', { 't-ReselectionUTRA': 3 } ), ( 'sib7', { 't-ReselectionGERAN': 3 } ), ( 'sib8', { 'parameters1XRTT': { 'longCodeState1XRTT': (b'\x01#Eg\x89\x00', 42) } } ), ( 'sib9', { 'hnb-Name': b'4' } ), ( 'sib10', { 'messageIdentifier': (b'#4', 16), 'serialNumber': (b'\x124', 16), 'warningType': b'2\x12' } ), ( 'sib11', { 'messageIdentifier': (b'g\x88', 16), 'serialNumber': (b'T5', 16), 'warningMessageSegmentType': 'notLastSegment', 'warningMessageSegmentNumber': 19, 'warningMessageSegment': b'\x12' } ) ] } ) } ) ) } encoded = ( b'11110<' b'rach-ConfigCommon>' b'883633' b'1064-6021' b'102259842047' b'-126-127' b'-1' b'<' b'n310>3<' b'cellReselectionInfoCommon>11673' b'-330104' b'1-45031' b'29<' b'true />00330000000100100011010001010110011110001001003' b'4001000110011010' b'00001001000110100321201100111100010000101010000110101<' b'notLastSegment />1912' ) self.assert_encode_decode_string(rrc, 'BCCH-DL-SCH-Message', decoded, encoded) def test_all_types(self): foo = asn1tools.compile_files('tests/files/all_types.asn', 'xer') datas = [ ('Boolean', True, b''), ('Integer', 127, b'127'), ('Integer', 0, b'0'), ('Integer', -128, b'-128'), ('Sequence', {}, b''), ('Set', {}, b''), ('Sequence2', {'a': 1}, b'1'), ('Set2', {'a': 2}, b'2'), ('Ia5string', 'bar', b'bar'), ('SetOf', [], b'') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_repr_all_types(self): foo = asn1tools.compile_files('tests/files/all_types.asn', 'xer') self.assertEqual(repr(foo.types['Boolean']), 'Boolean(Boolean)') self.assertEqual(repr(foo.types['Integer']), 'Integer(Integer)') self.assertEqual(repr(foo.types['Real']), 'Real(Real)') self.assertEqual(repr(foo.types['Bitstring']), 'BitString(Bitstring)') self.assertEqual(repr(foo.types['Octetstring']), 'OctetString(Octetstring)') self.assertEqual(repr(foo.types['Null']), 'Null(Null)') self.assertEqual(repr(foo.types['Objectidentifier']), 'ObjectIdentifier(Objectidentifier)') self.assertEqual(repr(foo.types['Enumerated']), 'Enumerated(Enumerated)') self.assertEqual(repr(foo.types['Utf8string']), 'UTF8String(Utf8string)') self.assertEqual(repr(foo.types['Sequence']), 'Sequence(Sequence, [])') self.assertEqual(repr(foo.types['Set']), 'Set(Set, [])') self.assertEqual(repr(foo.types['Sequence2']), 'Sequence(Sequence2, [Integer(a)])') self.assertEqual(repr(foo.types['Set2']), 'Set(Set2, [Integer(a)])') self.assertEqual(repr(foo.types['Numericstring']), 'NumericString(Numericstring)') self.assertEqual(repr(foo.types['Printablestring']), 'PrintableString(Printablestring)') self.assertEqual(repr(foo.types['Ia5string']), 'IA5String(Ia5string)') self.assertEqual(repr(foo.types['Universalstring']), 'UniversalString(Universalstring)') self.assertEqual(repr(foo.types['Visiblestring']), 'VisibleString(Visiblestring)') self.assertEqual(repr(foo.types['Generalstring']), 'GeneralString(Generalstring)') self.assertEqual(repr(foo.types['Bmpstring']), 'BMPString(Bmpstring)') self.assertEqual(repr(foo.types['Teletexstring']), 'TeletexString(Teletexstring)') self.assertEqual(repr(foo.types['Utctime']), 'UTCTime(Utctime)') self.assertEqual(repr(foo.types['SequenceOf']), 'SequenceOf(SequenceOf, Integer(INTEGER))') self.assertEqual(repr(foo.types['SetOf']), 'SetOf(SetOf, Integer(INTEGER))') self.assertEqual(repr(foo.types['GeneralizedTime1']), 'GeneralizedTime(GeneralizedTime1)') self.assertEqual(repr(foo.types['Choice']), 'Choice(Choice, [Integer(a)])') self.assertEqual(repr(foo.types['Any']), 'Any(Any)') self.assertEqual(repr(foo.types['Sequence12']), 'Sequence(Sequence12, [SequenceOf(a, Recursive(Sequence12))])') def test_all_types_automatic_tags(self): foo = asn1tools.compile_files( 'tests/files/all_types_automatic_tags.asn', 'xer') datas = [ ('Sequence3', {'a': 1, 'c': 2,'d': True}, b'12') ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded) def test_indent(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= SEQUENCE { " " a SEQUENCE { " " b BOOLEAN, " " c INTEGER " " } " "} " "END", 'xer') datas = [ ('A', {'a': {'b': True, 'c': 5}}, (b'\n' b' \n' b' \n' b' \n' b' \n' b' 5\n' b' \n' b'\n')) ] for type_name, decoded, encoded in datas: self.assert_encode_decode_string(foo, type_name, decoded, encoded, indent=4) def test_issue_34(self): """Test that a choice type with a recursive member can be compiled and used. """ foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= BEGIN " "A ::= SEQUENCE { " " a B " "} " "B ::= CHOICE { " " b A, " " c NULL " "} " "END ", 'xer') decoded = {'a': ('b', {'a': ('c', None)})} encoded = b'' self.assert_encode_decode_string(foo, 'A', decoded, encoded) def test_not_support_decode_with_length(self): foo = asn1tools.compile_string( "Foo DEFINITIONS AUTOMATIC TAGS ::= " "BEGIN " "A ::= OCTET STRING " "END", 'xer') with self.assertRaises(NotImplementedError) as cm: foo.decode_with_length('A', b'\x01\x23\x45\x67\x89\xab\xcd\xef') self.assertEqual(str(cm.exception), "This codec does not support decode_with_length().") if __name__ == '__main__': unittest.main() asn1tools-0.169.0/tests/utils.py000066400000000000000000000054551524544274600165140ustar00rootroot00000000000000import unittest from binascii import hexlify def format_encoded(encoded): hexstring = hexlify(encoded).decode('ascii') binstring = bin(int('80' + hexstring, 16))[10:] binstring = ' '.join([binstring[i:i + 8] for i in range(0, len(binstring), 8)]) return '{} ({})'.format(hexstring, binstring) class Asn1ToolsBaseTest(unittest.TestCase): def assert_encode_decode(self, specification, type_name, decoded_message, encoded_message): try: encoded = specification.encode(type_name, decoded_message) except: print('Failed to encode type with name {}.'.format(type_name)) raise try: self.assertEqual(encoded, encoded_message) except: print('Wrong encoding of type with name {}.'.format(type_name)) print('Actual:', format_encoded(encoded)) print('Expected:', format_encoded(encoded_message)) raise try: decoded = specification.decode(type_name, encoded_message) except: print('Failed to decode type with name {}.'.format(type_name)) raise try: self.assertEqual(decoded, decoded_message) except: print('Wrong decoding of type with name {}.'.format(type_name)) print('Actual:', decoded) print('Expected:', decoded_message) raise def assert_encode_decode_string(self, specification, type_name, decoded_message, encoded_message, indent=None): try: encoded = specification.encode(type_name, decoded_message, indent=indent) except: print('Failed to encode type with name {}.'.format(type_name)) raise try: self.assertEqual(encoded, encoded_message) except: print('Wrong encoding of type with name {}.'.format(type_name)) print('Actual:', encoded) print('Expected:', encoded_message) raise try: decoded = specification.decode(type_name, encoded_message) except: print('Failed to decode type with name {}.'.format(type_name)) raise try: self.assertEqual(decoded, decoded_message) except: print('Wrong decoding of type with name {}.'.format(type_name)) print('Actual:', decoded) print('Expected:', decoded_message) raise