---
Author: János Kövesdi
Version: 1551-CNL 113 789, Rev. A
Date: 2016-11-17

---
= The Generic Routing Encapsulation (GRE) Protocol Module for TTCN-3 Toolset with TITAN, Description
:author: János Kövesdi
:revnumber: 1551-CNL 113 789, Rev. A
:revdate: 2016-11-17
:toc:

*Copyright*

Copyright (c) 2000-2016 Ericsson Telecom AB. +
All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 that accompanies this distribution, and is available at +
http://www.eclipse.org/legal/epl-v10.html.

== How to Read This Document

This is the Description for the The Generic Routing Encapsulation (GRE) protocol module. The GRE protocol module is developed for the TTCN-3 Toolset with TITAN.

== Presumed Knowledge

To use this protocol module the knowledge of the TTCN-3 language <<_3, [3]>> is essential.

= Functionality

The protocol module implements the message structure of the Generic Routing Encapsulation (GRE) using the standard specification language TTCNv3. This allows defining of test data in the TTCNv3 language <<_3, [3]>> and correctly encoding/decoding these messages when executing test suites using the TITAN TTCNv3 test environment.

== Protocol Version Implemented

This set of protocol modules implements protocol messages and constants of https://tools.ietf.org/html/rfc1701[RFC 1701].

For example of GRE used over IPv4 networks, please read https://tools.ietf.org/html/rfc1701[RFC 1702].

== Routing Functionality

The payload (a packet that needs to be encapsulated and routed) is first encapsulated in a GRE packet and the GRE packet can be encapsulated in some other protocol and then forwarded.

== Modified and Non-Implemented Protocol Elements

=== Relaxed conditions

There is no constraint between received and sent messages.

== Ericsson-Specific Changes

There is no Ericsson specific change in this product.

== Backward Incompatibilities

None.

== System Requirements

Protocol modules are a set of TTCN-3 source code files that can be used as part of TTCN-3 test suites only. Hence, protocol modules alone do not put specific requirements on the system used. However in order to compile and execute a TTCN-3 test suite using the set of protocol modules the following system requirements must be satisfied:

* TITAN TTCN-3 Test Executor version R7A (1.7.pl0) or higher installed. For installation guide see <<_4, [4]>>.

NOTE: This version of the protocol module is not compatible with TITAN releases earlier than R7A.

= Feature List

[[encoding-decoding-and-other-related-functions]]
== Encoding/Decoding and Other Related Functions

This product also contains encoding/decoding functions that assure correct encoding of messages when sent from TITAN and correct decoding of messages when received by TITAN. Implemented encoding/decoding functions:

[cols=3*,options=header]
|===

|Name |Type of formal parameters |Type of return value
|`enc_GRE_PDU` |(in PDU_GRE pdu) |octetstring
|`dec_GRE_PDU` |(in octetstring stream) |PDU_GRE
|===

= Protocol Modules

== Overview

Protocol modules implement the message structure of the related protocol in a formalized way, using the standard specification language TTCN-3. This allows defining of test data (templates) in the TTCN-3 language <<_3, [3]>> and correctly encoding/decoding messages when executing test suites using the Titan TTCN-3 test environment.

== Installation

The set of protocol modules can be used for developing TTCN-3 test suites using any text editor. However to make the work more efficient a TTCN-3- enabled text editor is recommended (e.g. `nedit`, `xemacs`). Since the GRE protocol is used as a part of a TTCN-3 test suite, this requires Titan TTCN-3 Test Executor be installed before the module can be compiled and executed together with other parts of the test suite. For more details on the installation of TTCN-3 Test Executor see the relevant section of <<_4, [4]>>.

== Configuration

== Module parameters

No module parameters are used in the ICAP protocol module.

= Terminology

No specific terminology used.

= Abbreviations

ETSI:: European Telecommunications Standards Institute

IETF:: Internet Engineering Task Force

GRE:: Generic Routing Encapsulation

TTCNv3:: Testing and Test Control Notation version 3

= References

[[_1]]
[1] https://tools.ietf.org/html/rfc1701[RFC 1701] +
Generic Routing Encapsulation (GRE)

[[_2]]
[2] https://tools.ietf.org/html/rfc1702[RFC 1702] +
Generic Routing Encapsulation over IPv4 networks

[[_3]]
[3] ETSI ES 201 873-1 v.3.2.1 (02/2007) +
The Testing and Test Control Notation version 3. Part 1: Core Language

[[_4]]
[4] User Guide for the TITAN TTCN-3 Test Executor
