From 33fcbff5fb74421fc660e705ad1bcc73f2e71aa7 Mon Sep 17 00:00:00 2001
From: erititan <elemer.lelik@ericsson.com>
Date: Sat, 1 Aug 2015 09:12:47 +0200
Subject: [PATCH] Initial contribution

---
 L2TP_CNL113603.tpd         |  52 +++
 README.md                  |   9 +
 doc/L2TP_CNL113603_FS.doc  | Bin 0 -> 69120 bytes
 doc/L2TP_CNL113603_PRI.doc | Bin 0 -> 61440 bytes
 doc/L2TP_CNL113603_UG.doc  | Bin 0 -> 76288 bytes
 src/L2TP_EncDec.cc         | 312 ++++++++++++++
 src/L2TP_Types.ttcn        | 812 +++++++++++++++++++++++++++++++++++++
 7 files changed, 1185 insertions(+)
 create mode 100644 L2TP_CNL113603.tpd
 create mode 100644 README.md
 create mode 100644 doc/L2TP_CNL113603_FS.doc
 create mode 100644 doc/L2TP_CNL113603_PRI.doc
 create mode 100644 doc/L2TP_CNL113603_UG.doc
 create mode 100644 src/L2TP_EncDec.cc
 create mode 100644 src/L2TP_Types.ttcn

diff --git a/L2TP_CNL113603.tpd b/L2TP_CNL113603.tpd
new file mode 100644
index 0000000..8df3611
--- /dev/null
+++ b/L2TP_CNL113603.tpd
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2015 Ericsson
+
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+
+   File:               L2TP_CNL113603.tpd
+   Description:        tpd project file
+   Rev:                R2A
+   Prodnr:             CNL 113 603
+
+ -->
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>L2TP_CNL113603</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/>
+  </ReferencedProjects>
+  <Folders>
+    <FolderResource projectRelativePath="src" relativeURI="src"/>
+  </Folders>
+  <Files>
+    <FileResource projectRelativePath="src/L2TP_EncDec.cc" relativeURI="src/L2TP_EncDec.cc"/>
+    <FileResource projectRelativePath="src/L2TP_Types.ttcn" relativeURI="src/L2TP_Types.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/L2TP_CNL113603</targetExecutable>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+        <NamingCoventions>
+          <enableProjectSpecificSettings>true</enableProjectSpecificSettings>
+          <function>.*</function>
+          <externalFunction>.*</externalFunction>
+          <moduleParameter>.*</moduleParameter>
+          <formalParameter>.*</formalParameter>
+        </NamingCoventions>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..1862125
--- /dev/null
+++ b/README.md
@@ -0,0 +1,9 @@
+# titan.ProtocolModules.L2TP
+
+Main project page:
+
+https://projects.eclipse.org/projects/tools.titan
+
+The source code of the TTCN-3 compiler and executor:
+
+https://github.com/eclipse/titan.core
diff --git a/doc/L2TP_CNL113603_FS.doc b/doc/L2TP_CNL113603_FS.doc
new file mode 100644
index 0000000000000000000000000000000000000000..8c2818428ed4c744a3112fb4f5e294ded4212706
GIT binary patch
literal 69120
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
Zu2Rvxv+&%xKJ&tN9Vsbau74#5{vQLg<;4I1

literal 0
HcmV?d00001

diff --git a/doc/L2TP_CNL113603_PRI.doc b/doc/L2TP_CNL113603_PRI.doc
new file mode 100644
index 0000000000000000000000000000000000000000..9830fd029cdc69a2a45feec154ff4792d081b431
GIT binary patch
literal 61440
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

literal 0
HcmV?d00001

diff --git a/doc/L2TP_CNL113603_UG.doc b/doc/L2TP_CNL113603_UG.doc
new file mode 100644
index 0000000000000000000000000000000000000000..686c254b8eadb7e0a0d3689c72ac2daea47b8025
GIT binary patch
literal 76288
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
ArvLx|

literal 0
HcmV?d00001

diff --git a/src/L2TP_EncDec.cc b/src/L2TP_EncDec.cc
new file mode 100644
index 0000000..3f2c90b
--- /dev/null
+++ b/src/L2TP_EncDec.cc
@@ -0,0 +1,312 @@
+/******************************************************************************
+* Copyright (c) 2008, 2015  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+* Endre Kulcsar
+* Gabor Szalai
+******************************************************************************/
+//
+//  File:     L2TP_EncDec.cc
+//  Rev:      R2A
+//  Prodnr:   CNL 113 603
+//  Reference: RFC 2661
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include "L2TP_Types.hh"
+
+#include <openssl/md5.h>
+#include <time.h>
+ 
+namespace L2TP__Types {
+
+#define CTRL_MSG_HDR_LENGTH 20
+// Length of L2TP control message header (Length,Nr and Ns fields are mandatory) + Length of Message Type AVP
+
+
+// calculates 16 bit MD5 message digest
+unsigned char * calc_MD5(OCTETSTRING& pl_input, int pl_size, unsigned char * output)
+   {     
+      MD5(pl_input,(size_t) pl_size,output);
+      return output;   
+   }
+
+OCTETSTRING enc__PDU__L2TP(const PDU__L2TP& pdu)
+{
+    if (TTCN_Logger::log_this_event(TTCN_DEBUG)) {
+	TTCN_Logger::begin_event(TTCN_DEBUG);
+	TTCN_Logger::log_event("Encoding PDU_L2TP: ");
+	pdu.log();
+	TTCN_Logger::end_event();
+    }
+
+    TTCN_Buffer buf;
+    pdu.encode(PDU__L2TP_descr_, buf, TTCN_EncDec::CT_RAW);
+    
+    // ret_val is the RAW encoded PDU without any AVP Hiding
+    // if there are no H_BITs equal to 1 this will be returned from enc__PDU__L2TP             
+    OCTETSTRING ret_val(buf.get_len(), buf.get_data());
+                 
+    // only control msgs use hiding (tBit = 1)
+    const unsigned char *T_BIT = pdu.header().tBit();
+    if (*T_BIT  && (ret_val.lengthof() >= CTRL_MSG_HDR_LENGTH))  // if ctrl message and not ZLB    
+      {          
+        OCTETSTRING ret_val_ctrl_msg = substr(ret_val,0,CTRL_MSG_HDR_LENGTH); // copy original msg header
+           
+        const unsigned char * avp_length;
+        unsigned int avp_length_int;
+        const unsigned char * avp_type;
+        //unsigned int avp_type_int;
+        unsigned int index = CTRL_MSG_HDR_LENGTH; 
+        //unsigned int index_rv = CTRL_MSG_HDR_LENGTH; 
+        bool H_BIT;       
+        OCTETSTRING AVP_TYPE;
+        OCTETSTRING AVP_HEADER;
+        OCTETSTRING AVP_VALUE; 
+        OCTETSTRING AVP_LENGTH;                               
+        const unsigned char header_mask[2] = {0xfc, 0x00};
+        unsigned char avp_hidden_length[2];       
+        srand((unsigned)time(0)); 
+
+        while (index < buf.get_len() )
+          { 
+            avp_length = ((const unsigned char *)ret_val) + index;                                             
+            H_BIT = ((avp_length[0] & 0x40) >> 6); // H_BIT = 1 -> hiding is needed for this AVP                              
+            avp_length_int = ((avp_length[0] & 0x03) << 8) + avp_length[1]; // length of AVP
+            AVP_LENGTH = int2oct(avp_length_int-6,2);                       
+            AVP_HEADER = substr(ret_val,index,6);                 
+            avp_type = ((const unsigned char *)ret_val)+ index+4;
+            AVP_TYPE = OCTETSTRING(2,avp_type);
+            AVP_VALUE = substr(ret_val,index+6,avp_length_int-6);  
+            OCTETSTRING AVP_VALUE_HIDDEN(0,NULL);                                 
+            //avp_type_int = (avp_type[0] << 8) + avp_type[1];
+            unsigned int index_rv = CTRL_MSG_HDR_LENGTH;
+                                      
+            if (H_BIT == TRUE)   // hidden AVP is needed
+              {                             
+                bool bound_flag = FALSE;                                                    
+                OCTETSTRING random_vector;
+                
+                // find random vector "most closely preceding"
+                while (index_rv < index )
+                 { 
+                   const unsigned char *avp_length_find_rv = ((const unsigned char *)ret_val)+index_rv;
+                   unsigned int avp_length_int_find_rv = ((avp_length_find_rv[0] & 0x03) << 8) + avp_length_find_rv[1]; // length of AVP 
+                           
+                   const unsigned char *avp_type_find_rv = ((const unsigned char *)ret_val) + index_rv+4;
+                   unsigned int avp_type_int_find_rv = (avp_type_find_rv[0] << 8) + avp_type_find_rv[1];
+                                                       
+                   if (avp_type_int_find_rv == 36)  // if AVP's Attr type is rand vect   
+                     {
+                       random_vector = substr(ret_val,index_rv+6,avp_length_int_find_rv-6);
+                       bound_flag = TRUE;                
+                     } 
+                       
+                   index_rv = index_rv + avp_length_int_find_rv; // points to start of next AVP in original stream
+                 } 
+                                          
+                if (bound_flag == FALSE)    // random_vector.is_bound() == NULL 
+                   {TTCN_error("%s","No Random Vector AVP present");}  // Error: No Random Vector AVP before Hidden AVP!                      
+                                           
+                // Calculate RANDOM_PADDING needed for HIDDEN_AVP_SUBFORMAT
+                int random = rand();  
+                OCTETSTRING HIDDEN_AVP_SUBFORMAT;               
+                if ( (random % (tsp__Max__Random__Padding__Length+1)) == 0 )
+                  {   
+                    HIDDEN_AVP_SUBFORMAT = AVP_LENGTH + AVP_VALUE;  
+                  }
+                else   
+                  {            
+                    OCTETSTRING RANDOM_PADDING(int2oct(0,random % (tsp__Max__Random__Padding__Length+1)));                            
+                    HIDDEN_AVP_SUBFORMAT = AVP_LENGTH + AVP_VALUE + RANDOM_PADDING;
+                  }  
+                            
+                // AVP padded to exact multiple of 16   
+                int avp_padding_length = 16 -(HIDDEN_AVP_SUBFORMAT.lengthof() % 16 );
+                unsigned char padding[avp_padding_length];
+                for(int i = 0; i < avp_padding_length; i++) 
+                  {padding[i] = 0x00;}                         
+                OCTETSTRING AVP_PADDING = OCTETSTRING(avp_padding_length,padding);                                                               
+                OCTETSTRING AVP_VALUE_PADDED = HIDDEN_AVP_SUBFORMAT + AVP_PADDING;  
+                                                  
+                // CONCATENATION is input into HIDE procedure                                                                
+                OCTETSTRING CONCATENATION =  AVP_TYPE + tsp__L2TP__SharedSecret + random_vector;
+                     
+                // HIDE PROCEDURE
+                 OCTETSTRING b;
+                 OCTETSTRING c;  
+                 unsigned char MD5_value[16];                            
+                 for (int j = 0; j < (AVP_VALUE_PADDED.lengthof()) ; j=j+16) 
+                   {      
+                     b = OCTETSTRING(16,(const unsigned char *)calc_MD5(CONCATENATION,CONCATENATION.lengthof(),MD5_value));                              
+                     c = ((substr(AVP_VALUE_PADDED,j ,16 )) ^ b);                                                          
+                     CONCATENATION = tsp__L2TP__SharedSecret + c;                              
+                     AVP_VALUE_HIDDEN = AVP_VALUE_HIDDEN + c;      
+                   } 
+                                                        
+                 // modify length field in AVP_HEADER to actual length of hidden AVP               
+                 unsigned int avp_hidden_length_int = 6 + AVP_VALUE_HIDDEN.lengthof();           
+                 avp_hidden_length[0] = (avp_hidden_length_int & 0x0300)>> 8; 
+                 avp_hidden_length[1] = (avp_hidden_length_int & 0xff);  
+                 unsigned char* avp_header2 = (unsigned char*)(const unsigned char*)AVP_HEADER; 
+                 avp_header2[0] &= header_mask[0];
+                 avp_header2[1] &= header_mask[1];              
+                 avp_header2[0] |= avp_hidden_length[0];
+                 avp_header2[1] |= avp_hidden_length[1]; 
+                           
+                 ret_val_ctrl_msg = ret_val_ctrl_msg  + AVP_HEADER + AVP_VALUE_HIDDEN;  // Add new hidden AVP                                                                                    
+               }
+             else  // original (not hidden) AVP is used because for this AVP H_BIT == FALSE
+               {
+                 ret_val_ctrl_msg = ret_val_ctrl_msg + substr(ret_val,index,avp_length_int);                 
+               }              
+                index = index + avp_length_int; // points to start of next AVP in original stream
+           } // end of while (index < buf.get_len() )
+                       
+          ret_val = ret_val_ctrl_msg;     
+        }  // end of  if (*T_BIT)
+          
+   //fill in true length of complete PDU if lengthValue field is present
+   if (pdu.header().lengthValue().ispresent())
+    {           
+      unsigned int PDU_SIZE_INT = ret_val.lengthof();
+      unsigned char PDU_SIZE_CHAR[2]; 
+      PDU_SIZE_CHAR[0] = (PDU_SIZE_INT & 0xff00) >> 8;
+      PDU_SIZE_CHAR[1] = (PDU_SIZE_INT & 0xff );
+     
+      OCTETSTRING PDU_SIZE_OCTETSTRING(2, PDU_SIZE_CHAR);
+      
+      ret_val = substr(ret_val,0,2) + PDU_SIZE_OCTETSTRING + substr(ret_val,4,PDU_SIZE_INT-4);   
+    } 
+        
+    if (TTCN_Logger::log_this_event(TTCN_DEBUG)) {
+	TTCN_Logger::begin_event(TTCN_DEBUG);
+	TTCN_Logger::log_event("Encoded PDU_L2TP: ");
+	ret_val.log();
+	TTCN_Logger::end_event();
+    }    
+    return ret_val;
+}
+
+PDU__L2TP dec__PDU__L2TP(const OCTETSTRING& stream)
+{
+    if (TTCN_Logger::log_this_event(TTCN_DEBUG)) {
+	TTCN_Logger::begin_event(TTCN_DEBUG);
+	TTCN_Logger::log_event("Decoding PDU_L2TP: ");
+	stream.log();
+	TTCN_Logger::end_event();
+    }
+      TTCN_Buffer buf;   
+
+    // if control message check AVPs whether hiding was used
+    if  ((((((const unsigned char *)stream)[0]) & 0x80) == 0x80)  && (stream.lengthof() >= CTRL_MSG_HDR_LENGTH))   // if control message and not ZLB
+      {      
+       OCTETSTRING stream_ctrl_msg = substr(stream,0,CTRL_MSG_HDR_LENGTH); // copy original msg header              
+       unsigned int index = CTRL_MSG_HDR_LENGTH; 
+       //unsigned int index_rv = CTRL_MSG_HDR_LENGTH; 
+       const unsigned char * avp_length;       
+       unsigned avp_length_int;
+       //unsigned avp_length_int_orig;      
+       bool H_BIT;    
+       while (index < (unsigned int)stream.lengthof() )
+         {  
+           avp_length = ((const unsigned char *)stream) + index;  
+           H_BIT = ((avp_length[0] & 0x40) >> 6); //if H_BIT = 1 -> hiding was used for this AVP          
+           avp_length_int = ((avp_length[0] & 0x03) << 8) + avp_length[1]; // length of AVP 
+           //avp_length_int_orig = avp_length_int;
+           OCTETSTRING AVP_HEADER = substr(stream,index,6); 
+           const unsigned char header_mask[2] = {0xfc, 0x00};
+           unsigned char* avp_hidden_length;    //[2];
+           unsigned int index_rv = CTRL_MSG_HDR_LENGTH;           
+                                           
+           if (H_BIT == TRUE)  //  hiding was used for this AVP
+             {                                
+              bool bound_flag = FALSE;                                                    
+              OCTETSTRING random_vector;
+                
+              // find random vector "most closely preceding"  
+              OCTETSTRING HIDDEN_AVP_SUBFORMAT(0,NULL); 
+              while (index_rv < index )
+                { 
+                  const unsigned char *avp_length_find_rv = ((const unsigned char *)stream)+index_rv;
+                  unsigned int avp_length_int_find_rv = ((avp_length_find_rv[0] & 0x03) << 8) + avp_length_find_rv[1]; // length of AVP   
+                                  
+                  const unsigned char *avp_type_find_rv = ((const unsigned char *)stream) + index_rv+4;
+                  unsigned int avp_type_int_find_rv = (avp_type_find_rv[0] << 8) + avp_type_find_rv[1];
+                                                                                                
+                  if (avp_type_int_find_rv == 36)  // if AVP's Attr type is rand vect   
+                    {
+                      random_vector = substr(stream,index_rv+6,avp_length_int_find_rv-6);   
+                      bound_flag = TRUE;                
+                    }                                                                              
+                   index_rv = index_rv + avp_length_int_find_rv; // points to start of next AVP in original stream                  
+                 }                  
+               if (bound_flag == FALSE)    
+                  {TTCN_error("%s","No Random Vector AVP present");}  // Error: No Random Vector AVP before Hidden AVP! 
+ 
+               // CONCATENATION is input into HIDE procedure                                                                
+               OCTETSTRING CONCATENATION;                                 
+               const unsigned char *avp_type = ((const unsigned char *)stream) + index+4; //type of AVP                
+               OCTETSTRING AVP_TYPE = OCTETSTRING(2,avp_type);
+               unsigned char MD5_value[16];                 
+               OCTETSTRING b;
+               OCTETSTRING p;                                                                            
+               unsigned int j = index + avp_length_int-32;
+                                            
+               while(j >= (index + 6))  
+                {                                                                                                                  
+                  CONCATENATION = tsp__L2TP__SharedSecret + substr(stream,j,16);                                                                                                                               
+                  b = OCTETSTRING(16,(const unsigned char *)calc_MD5(CONCATENATION,CONCATENATION.lengthof(),MD5_value));                                                                                     
+                  p = b ^ substr(stream,j + 16,16);                                                   
+                  HIDDEN_AVP_SUBFORMAT = p + HIDDEN_AVP_SUBFORMAT;                              
+                  j = j-16;         
+                }                     
+                   CONCATENATION = AVP_TYPE + tsp__L2TP__SharedSecret + random_vector;                   
+                   b = OCTETSTRING(16,(const unsigned char *)calc_MD5(CONCATENATION,CONCATENATION.lengthof(),MD5_value));                          
+                   p = b ^ substr(stream,index + 6,16); 
+                   HIDDEN_AVP_SUBFORMAT = p + HIDDEN_AVP_SUBFORMAT;  
+                                                                                                                      
+                 // modify length field in AVP_HEADER to actual length of hidden AVP                              
+                 avp_hidden_length = (unsigned char*)(const unsigned char*)HIDDEN_AVP_SUBFORMAT;
+                 unsigned int avp_length_int_unhidden = 6 + (((avp_hidden_length[0] & 0x03) << 8) + avp_hidden_length[1]); // complete length of AVP  
+                 unsigned int avp_length_int_unhidden_copy = avp_length_int_unhidden;                                
+                 unsigned char* avp_header2 = (unsigned char*)(const unsigned char*)AVP_HEADER;                                     
+                 avp_header2[0] &= header_mask[0];
+                 avp_header2[1] &= header_mask[1];                  
+                 avp_header2[0] |= ((avp_length_int_unhidden & 0x0300)>> 8); 
+                 avp_header2[1] |= (avp_length_int_unhidden & 0xff);  
+                                                                            
+                 stream_ctrl_msg = stream_ctrl_msg + AVP_HEADER + substr(HIDDEN_AVP_SUBFORMAT,2,avp_length_int_unhidden_copy-6);  
+                                                     
+             } // end of if (H_BIT == TRUE)
+           else  // original (not hidden) AVP is used because for this AVP H_BIT == FALSE
+             {
+               stream_ctrl_msg = stream_ctrl_msg + substr(stream,index,avp_length_int);                               
+             }                                                                          
+            index = index + avp_length_int;        
+         } // end of while                    
+          buf.put_os(stream_ctrl_msg); 
+      } // end of  if control message
+      
+    else  // user data message
+      {
+          buf.put_os(stream);      
+      }
+              
+    PDU__L2TP ret_val;
+    ret_val.decode(PDU__L2TP_descr_, buf, TTCN_EncDec::CT_RAW);
+
+    if (TTCN_Logger::log_this_event(TTCN_DEBUG)) {
+	TTCN_Logger::begin_event(TTCN_DEBUG);
+	TTCN_Logger::log_event("Decoded PDU_L2TP: ");
+	ret_val.log();
+	TTCN_Logger::end_event();
+    }    
+    return ret_val;
+  }  // end of function dec__PDU__L2TP
+
+}  // end of module
diff --git a/src/L2TP_Types.ttcn b/src/L2TP_Types.ttcn
new file mode 100644
index 0000000..c777326
--- /dev/null
+++ b/src/L2TP_Types.ttcn
@@ -0,0 +1,812 @@
+/******************************************************************************
+* Copyright (c) 2008, 2015  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+* Endre Kulcsar
+* Gabor Szalai
+******************************************************************************/
+//
+//  File:     L2TP_Types.ttcn
+//  Rev:      R2A
+//  Prodnr:   CNL 113 603
+//  Reference: RFC 2661
+//
+///////////////////////////////////////////////////////////////////////////////
+
+module L2TP_Types
+{
+   import from General_Types all;
+   
+   external function enc_PDU_L2TP(in PDU_L2TP pdu) return octetstring
+
+   external function dec_PDU_L2TP(in octetstring stream) return PDU_L2TP
+    
+   modulepar
+   {
+     octetstring tsp_L2TP_SharedSecret := '00000000'O; 
+     //This value is needed for hiding of AVPs
+     
+     Random_Padding_Length tsp_Max_Random_Padding_Length := 10;    
+     // Determines the max number of Random additional octets used to obscure length 
+     // of the Attribute Value that is being hidden. See RFC 2661 section 4.3.
+     // Its value is an integer larger than or equal to 0, (Padding value is all zeros)
+   } 
+   
+   type integer Random_Padding_Length (0..infinity);   
+     
+   type integer INT2_BO_LAST (0..65535) with { variant "FIELDLENGTH(16), COMP(nosign), BYTEORDER(last)" };
+   
+   type record AVP_Header
+   { BIT1            mBit,
+     BIT1            hBit,
+     BIT4            reserved,
+     integer         lengthValue, 
+     INT2_BO_LAST    vendorId,   // 0
+     INT2_BO_LAST    attributeType     
+   } with { 
+            variant (mBit,hBit,reserved,lengthValue) "FIELDORDER(msb)";
+            variant (lengthValue)   "BYTEORDER(last)";
+            variant (lengthValue)   "FIELDLENGTH(10)";     
+          } 
+       
+   // AVPs ==============================================================
+   
+   type record MessageTypeAVP
+   {
+     AVP_Header      aVP_Header,  // type 0
+     INT2_BO_LAST    messageTypeValue     
+   } with {
+            variant "PRESENCE(aVP_Header.attributeType = 0)"; 
+            variant (aVP_Header) "LENGTHTO(aVP_Header,messageTypeValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";
+          }
+
+   type record RandomVectorAVP
+   {
+     AVP_Header     aVP_Header, // type 36
+     octetstring    randomOctetString
+   } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 36)";   
+            variant (aVP_Header) "LENGTHTO(aVP_Header,randomOctetString)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";
+         }
+      
+  type record ResultCodeAVP
+  {
+    AVP_Header      aVP_Header,   // type 1
+    INT2_BO_LAST    resultCode, 
+    INT2_BO_LAST    errorCode     optional,
+    charstring      errorMessage  optional
+  } with {
+           variant "PRESENCE(aVP_Header.attributeType = 1)";    
+           variant (aVP_Header) "LENGTHTO(aVP_Header,resultCode,errorCode,errorMessage)"; 
+           variant (aVP_Header) "LENGTHINDEX(lengthValue)";  
+         } 
+           
+  type record  ProtocolVersionAVP
+  {
+    AVP_Header      aVP_Header,   // type 2
+    INT1            ver,     //1
+    INT1            rev      //0 
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 2)"; 
+            variant (aVP_Header) "LENGTHTO(aVP_Header,ver,rev)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";
+         } 
+         
+  type record  FramingCapabilitiesAVP
+  {
+    AVP_Header      aVP_Header,   // type 3  
+    bitstring       reserved length (30),
+    BIT1            aBit,
+    BIT1            sBit
+  } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 3)";
+            variant (aVP_Header) "LENGTHTO(aVP_Header,reserved,aBit,sBit)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";    
+            variant (reserved) "FIELDLENGTH(30)";      
+            variant (reserved,aBit,sBit) "FIELDORDER(msb)";
+         }
+ 
+  type record BearerCapabilitiesAVP 
+  { 
+    AVP_Header      aVP_Header,   // type 4
+    bitstring       reserved length (30),
+    BIT1            aBit,
+    BIT1            dBit     
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 4)";
+            variant (aVP_Header) "LENGTHTO(aVP_Header,reserved,aBit,dBit)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";     
+            variant (reserved) "FIELDLENGTH(30)";        
+            variant (reserved,aBit,dBit) "FIELDORDER(msb)";  
+         }  
+         
+  type record TieBreakerAVP
+  {
+    AVP_Header      aVP_Header,   // type 5  
+    OCT8            tIEBreakValue             
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 5)";   
+            variant (aVP_Header) "LENGTHTO(aVP_Header,tIEBreakValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         } 
+         
+  type record FirmwareRevisionAVP
+  {
+    AVP_Header      aVP_Header, // type 6   
+    INT2_BO_LAST    firmwareRevisionValue
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 6)";      
+            variant (aVP_Header) "LENGTHTO(aVP_Header,firmwareRevisionValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         }  
+         
+  type record HostNameAVP
+  {
+    AVP_Header      aVP_Header, // type 7     
+    charstring      hostNameValue length (1..infinity)  
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 7)"; 
+            variant (aVP_Header) "LENGTHTO(aVP_Header,hostNameValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         }          
+         
+  type record VendorNameAVP
+  {
+    AVP_Header      aVP_Header, // type 8       
+    charstring      vendorNameValue //length (0..infinity)   
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 8)";      
+            variant (aVP_Header) "LENGTHTO(aVP_Header,vendorNameValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         }          
+         
+  type record AssignedTunnelIdAVP
+  {
+    AVP_Header      aVP_Header, // type 9   
+    INT2_BO_LAST    assignedTunnelIdValue     
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 9)";   
+            variant (aVP_Header) "LENGTHTO(aVP_Header,assignedTunnelIdValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         }          
+         
+  type record ReceiveWindowSizeAVP
+  {
+    AVP_Header      aVP_Header, // type 10     
+    INT2_BO_LAST    windowSizeValue    
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 10)";   
+            variant (aVP_Header) "LENGTHTO(aVP_Header,windowSizeValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         }            
+ 
+  type record ChallengeAVP
+  {
+    AVP_Header      aVP_Header, // type 11      
+    octetstring     challengeValue length (1..infinity)  
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 11)";    
+            variant (aVP_Header) "LENGTHTO(aVP_Header,challengeValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         }            
+ 
+  type record ChallengeResponseAVP
+  {
+    AVP_Header      aVP_Header, // type 13  
+    OCT16           challengeResponseValue
+  } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 13)";      
+            variant (aVP_Header) "LENGTHTO(aVP_Header,challengeResponseValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         } 
+         
+  type record Q931CauseCodeAVP    
+  {
+    AVP_Header      aVP_Header, // type 12    
+    OCT2            causeCode,
+    OCT1            causeMsg,
+    charstring      advisoryMsg optional    
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 12)";         
+            variant (aVP_Header) "LENGTHTO(aVP_Header,causeCode,causeMsg,advisoryMsg)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         }      
+           
+  type record AssignedSessionIdAVP 
+  { 
+    AVP_Header      aVP_Header, // type 14     
+    INT2_BO_LAST    assignedSessionIdValue     
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 14)"; 
+            variant (aVP_Header) "LENGTHTO(aVP_Header,assignedSessionIdValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         }   
+         
+  type record CallSerialNumberAVP
+  {
+    AVP_Header      aVP_Header, // type 15      
+    OCT4            callSerialNumberValue
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 15)"; 
+            variant (aVP_Header) "LENGTHTO(aVP_Header,callSerialNumberValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         }                 
+                           
+  type record MinimumBPSAVP
+  {
+    AVP_Header      aVP_Header, // type 16        
+    OCT4            mimimumBPSValue
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 16)"; 
+            variant (aVP_Header) "LENGTHTO(aVP_Header,mimimumBPSValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         }                  
+ 
+  type record MaximumBPSAVP
+  {
+    AVP_Header      aVP_Header, // type 17        
+    OCT4            maximumBPSValue
+  } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 17)";   
+            variant (aVP_Header) "LENGTHTO(aVP_Header,maximumBPSValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)";       
+         }                  
+  
+  type record BearerTypeAVP
+  {
+    AVP_Header      aVP_Header, // type 18       
+    bitstring       reserved length (30),
+    BIT1            aBit,
+    BIT1            dBit       
+  } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 18)";        
+            variant (aVP_Header) "LENGTHTO(aVP_Header,reserved,aBit,dBit)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+            variant (reserved) "FIELDLENGTH(30)";             
+            variant (reserved,aBit,dBit) "FIELDORDER(msb)";       
+         }  
+ 
+  type record FramingTypeAVP
+  {
+    AVP_Header      aVP_Header, // type 19  
+    bitstring       reserved length (30),  
+    BIT1            aBit,
+    BIT1            sBit               
+  } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 19)";
+            variant (aVP_Header) "LENGTHTO(aVP_Header,reserved,aBit,sBit)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+            variant (reserved) "FIELDLENGTH(30)";             
+            variant (reserved,aBit,sBit) "FIELDORDER(msb)";       
+         }  
+  
+  type record CalledNumberAVP 
+  {
+    AVP_Header      aVP_Header, // type 21 
+    charstring      calledNumberValue    
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 21)";           
+            variant (aVP_Header) "LENGTHTO(aVP_Header,calledNumberValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }   
+ 
+  type record CallingNumberAVP 
+  {
+    AVP_Header      aVP_Header, // type 22 
+    charstring      callingNumberValue    
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 22)";          
+            variant (aVP_Header) "LENGTHTO(aVP_Header,callingNumberValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }   
+  
+  type record SUB_AddressAVP
+  {
+    AVP_Header      aVP_Header, // type 23   
+    charstring      sUB_AddressValue       
+  } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 23)";        
+            variant (aVP_Header) "LENGTHTO(aVP_Header,sUB_AddressValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }  
+ 
+  type record TxConnectSpeedAVP
+  {
+    AVP_Header      aVP_Header, // type 24  
+    OCT4            bPS  
+  } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 24)";  
+            variant (aVP_Header) "LENGTHTO(aVP_Header,bPS)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }   
+ 
+  type record  RxConnectSpeedAVP
+  {
+    AVP_Header      aVP_Header, // type 38    
+    OCT4            bPS    
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 38)";        
+            variant (aVP_Header) "LENGTHTO(aVP_Header,bPS)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }   
+
+  type record PhysicalChannelIdAVP
+  {
+    AVP_Header      aVP_Header, // type 25  
+    OCT4            physicalChannelIdValue  
+  } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 25)";          
+            variant (aVP_Header) "LENGTHTO(aVP_Header,physicalChannelIdValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }    
+
+  type record PrivateGroupIdAVP
+  { 
+    AVP_Header      aVP_Header, // type 37
+    octetstring     privateGroupIdValue
+  } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 37)";           
+            variant (aVP_Header) "LENGTHTO(aVP_Header,privateGroupIdValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         } 
+         
+  type record SequencingRequiredAVP         
+  { 
+    AVP_Header      aVP_Header // type 39        
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 39)";     
+            variant (aVP_Header) "LENGTHTO(aVP_Header)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }         
+         
+  type record InitialReceivedLCP_CONFREQ_AVP
+  {
+    AVP_Header      aVP_Header, // type 26 
+    octetstring     lCP_CONFREQ // structure ?
+  } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 26)";
+            variant (aVP_Header) "LENGTHTO(aVP_Header,lCP_CONFREQ)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }                 
+         
+  type record LastSentLCP_CONFREQ_AVP
+  {
+    AVP_Header      aVP_Header, // type 27   
+    octetstring     lCP_CONFREQ // structure ?  
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 27)";    
+            variant (aVP_Header) "LENGTHTO(aVP_Header,lCP_CONFREQ)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         } 
+         
+  type record LastReceivedLCP_CONFREQ_AVP
+  {
+    AVP_Header      aVP_Header, // type 28   
+    octetstring     lCP_CONFREQ // structure ?      
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 28)";       
+            variant (aVP_Header) "LENGTHTO(aVP_Header,lCP_CONFREQ)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }          
+         
+  type record ProxyAuthenTypeAVP
+  {
+    AVP_Header      aVP_Header, // type 29     
+    INT2_BO_LAST    authenTypeValue
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 29)";        
+            variant (aVP_Header) "LENGTHTO(aVP_Header,authenTypeValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }          
+         
+  type record ProxyAuthenNameAVP        
+  {       
+    AVP_Header      aVP_Header, // type 30                                 
+    charstring      authenNameValue    
+  } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 30)";          
+            variant (aVP_Header) "LENGTHTO(aVP_Header,authenNameValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         } 
+         
+  type record ProxyAuthenChallengeAVP
+  {
+    AVP_Header      aVP_Header, // type 31  
+    octetstring     challengeValue length (1..infinity)
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 31)";       
+            variant (aVP_Header) "LENGTHTO(aVP_Header,challengeValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }          
+         
+  type record ProxyAuthenIdAVP
+  {
+    AVP_Header      aVP_Header, // type 32 
+    INT2_BO_LAST    idValue  
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 32)";          
+            variant (aVP_Header) "LENGTHTO(aVP_Header,idValue)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }          
+                 
+  type record ProxyAuthenResponseAVP
+  {
+    AVP_Header      aVP_Header, // type 33  
+    octetstring     response 
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 33)";             
+            variant (aVP_Header) "LENGTHTO(aVP_Header,response)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }               
+                          
+  type record CallErrorsAVP
+  {  
+    AVP_Header      aVP_Header, // type 34  
+    OCT2            reserved, // 0
+    OCT4            cRCErrors,
+    OCT4            framingErrors,
+    OCT4            hardwareOverruns,
+    OCT4            bufferOverruns,
+    OCT4            timeoutErrors,
+    OCT4            alignmentErrors   
+  } with { 
+            variant "PRESENCE(aVP_Header.attributeType = 34)";      
+            variant (aVP_Header) "LENGTHTO(aVP_Header,reserved,cRCErrors,framingErrors,
+                                  hardwareOverruns,bufferOverruns,timeoutErrors,alignmentErrors)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }   
+          
+  type record ACCM_AVP 
+  {
+    AVP_Header      aVP_Header, // type 35
+    OCT2            reserved,  
+    OCT4            sendACCM,
+    OCT4            receiveACCM 
+  } with {
+            variant "PRESENCE(aVP_Header.attributeType = 35)";       
+            variant (aVP_Header) "LENGTHTO(aVP_Header,reserved,sendACCM,receiveACCM)"; 
+            variant (aVP_Header) "LENGTHINDEX(lengthValue)"; 
+         }  
+         
+
+ // ============================
+  type set of SCCRQ_AVP SCCRQ_AVPs;
+    
+  type union SCCRQ_AVP
+  {
+   ProtocolVersionAVP          protocolVersion,
+   HostNameAVP                 hostName,
+   FramingCapabilitiesAVP      framingCapabilities,
+   AssignedTunnelIdAVP         assignedTunnelId,   
+   BearerCapabilitiesAVP       bearerCapabilities,  //optional,
+   ReceiveWindowSizeAVP        receiveWindowSize,   //optional,
+   ChallengeAVP                challenge,           //optional,
+   TieBreakerAVP               tieBreaker,          //optional,
+   FirmwareRevisionAVP         firmwareRevision,    //optional,
+   VendorNameAVP               vendorName,          //optional 
+   RandomVectorAVP             randomVectorAVP      //optional 
+  }   
+
+  type set of SCCRP_AVP SCCRP_AVPs;
+
+  type union SCCRP_AVP
+  {
+   ProtocolVersionAVP          protocolVersion,
+   FramingCapabilitiesAVP      framingCapabilities,
+   HostNameAVP                 hostName,   
+   AssignedTunnelIdAVP         assignedTunnelId,      
+   BearerCapabilitiesAVP       bearerCapabilities,   //optional,
+   FirmwareRevisionAVP         firmwareRevision,     //optional,   
+   VendorNameAVP               vendorName,           //optional,     
+   ReceiveWindowSizeAVP        receiveWindowSize,    //optional,   
+   ChallengeAVP                challenge,            //optional,   
+   ChallengeResponseAVP        challengeResponse,    //optional 
+   RandomVectorAVP             randomVectorAVP       //optional
+  }
+
+  type set of SCCCN_AVP SCCCN_AVPs;
+
+  type union SCCCN_AVP
+  {
+   ChallengeResponseAVP        challengeResponse,    //optional  
+   RandomVectorAVP             randomVectorAVP       //optional
+  }
+   
+  type set of StopCCN_AVP StopCCN_AVPs; 
+
+  type union StopCCN_AVP
+  {
+   AssignedTunnelIdAVP         assignedTunnelId,   
+   ResultCodeAVP               resultCode,
+   RandomVectorAVP             randomVectorAVP     //optional
+  }
+
+ // type set HELLO_AVPs
+ // {
+ // }
+
+  type set of OCRQ_AVP OCRQ_AVPs;
+
+  type union OCRQ_AVP
+  {
+   AssignedSessionIdAVP        assignedSessionId,   
+   CallSerialNumberAVP         callSerialNumber,
+   MinimumBPSAVP               minimumBPS,
+   MaximumBPSAVP               maximumBPS,  
+   BearerTypeAVP               bearerType,
+   FramingTypeAVP              framingType, 
+   CalledNumberAVP             calledNumber, 
+   SUB_AddressAVP              sUB_Address,     //optional  
+   RandomVectorAVP             randomVector     //optional
+  }
+  
+  type set of OCRP_AVP OCRP_AVPs;   
+
+  type union OCRP_AVP
+  {
+   AssignedSessionIdAVP        assignedSessionId,  
+   PhysicalChannelIdAVP        physicalChannelId, //optional
+   RandomVectorAVP             randomVector       //optional
+  }
+
+  type set of OCCN_AVP OCCN_AVPs; 
+  
+  type union OCCN_AVP
+  {
+   TxConnectSpeedAVP                 txConnectSpeed,
+   FramingTypeAVP                    framingType, 
+   RxConnectSpeedAVP                 rxConnectSpeed, //optional,   
+   SequencingRequiredAVP             sequencingRequired, //optional   
+   RandomVectorAVP                   randomVector      //optional  
+  }
+
+
+  type set of ICRQ_AVP ICRQ_AVPs;
+
+  type union ICRQ_AVP
+  {
+   AssignedSessionIdAVP        assignedSessionId,      
+   CallSerialNumberAVP         callSerialNumber,
+   BearerTypeAVP               bearerType,    //optional,
+   PhysicalChannelIdAVP        physicalChannelId, //optional,
+   CallingNumberAVP            callingNumber, //optional,
+   CalledNumberAVP             calledNumber,  //optional,
+   SUB_AddressAVP              sUB_Address,    //optional 
+   RandomVectorAVP             randomVector    //optional
+  }
+
+
+  type set of ICRP_AVP ICRP_AVPs;
+
+  type union ICRP_AVP
+  {
+   AssignedSessionIdAVP         assignedSessionId,  
+   RandomVectorAVP              randomVector      
+  }
+
+  type set of ICCN_AVP ICCN_AVPs;
+
+  type union ICCN_AVP
+  {
+    TxConnectSpeedAVP                 txConnectSpeed,
+    FramingTypeAVP                    framingType,            
+    InitialReceivedLCP_CONFREQ_AVP    initialReceivedLCP_CONFREQ_AVP,
+    LastSentLCP_CONFREQ_AVP           lastSentLCP_CONFREQ_AVP, //optional,
+    LastReceivedLCP_CONFREQ_AVP       lastReceivedLCP_CONFREQ_AVP, //optional,
+    ProxyAuthenTypeAVP                proxyAuthenType, //optional,
+    ProxyAuthenNameAVP                proxyAuthenName, //optional,
+    ProxyAuthenChallengeAVP           proxyAuthenChallenge, //optional,
+    ProxyAuthenIdAVP                  proxyAuthenId, //optional,
+    ProxyAuthenResponseAVP            proxyAuthenResponse, //optional,
+    PrivateGroupIdAVP                 privateGroupId, //optional,
+    RxConnectSpeedAVP                 rxConnectSpeed, //optional,
+    SequencingRequiredAVP             sequencingRequired, //optional 
+    RandomVectorAVP                   randomVector       //optional  
+  }
+  
+  type set of CDN_AVP CDN_AVPs;
+
+  type union CDN_AVP
+  {
+    ResultCodeAVP               resultCode,   
+    AssignedSessionIdAVP        assignedSessionId, 
+    Q931CauseCodeAVP            q931CauseCode,   //optional 
+    RandomVectorAVP             randomVector  //optional
+  }
+
+  type set of WEN_AVP WEN_AVPs;
+
+  type union WEN_AVP
+  {
+    CallErrorsAVP        callErrors, 
+    RandomVectorAVP      randomVector   //optional
+  }
+  
+  type set of SLI_AVP SLI_AVPs;
+
+  type union SLI_AVP
+  {
+    ACCM_AVP              aCCM,
+    RandomVectorAVP       randomVector   //optional
+  }
+
+
+ // Control Messages ============================
+ 
+ 
+  type record SCCRQ 
+  {  
+    MessageTypeAVP  messageType,   
+    SCCRQ_AVPs      aVPs
+  } with { variant "PRESENCE (messageType.messageTypeValue = 1)"; }; 
+      
+  type record SCCRP 
+  {  
+   MessageTypeAVP  messageType,     
+   SCCRP_AVPs      aVPs
+  } with { variant "PRESENCE (messageType.messageTypeValue = 2)"; };    
+  
+         
+  type record SCCCN 
+  {  
+   MessageTypeAVP  messageType,     
+   SCCCN_AVPs      aVPs
+  } with { variant "PRESENCE (messageType.messageTypeValue = 3)"; };       
+  
+   
+  type record StopCCN 
+  {  
+   MessageTypeAVP  messageType,     
+   StopCCN_AVPs    aVPs 
+  } with { variant "PRESENCE (messageType.messageTypeValue = 4)"; };          
+  
+  
+  type record HELLO  
+  {  
+   MessageTypeAVP  messageType     
+  // HELLO_AVPs    aVPs
+  } with { variant "PRESENCE (messageType.messageTypeValue = 6)"; };       
+  
+   
+  type record OCRQ 
+  {  
+   MessageTypeAVP  messageType,     
+   OCRQ_AVPs       aVPs
+  } with { variant "PRESENCE (messageType.messageTypeValue = 7)"; };          
+  
+   
+  type record OCRP 
+  {  
+   MessageTypeAVP  messageType,     
+   OCRP_AVPs       aVPs 
+  } with { variant "PRESENCE (messageType.messageTypeValue = 8)"; };          
+   
+   
+  type record OCCN  
+  {  
+   MessageTypeAVP  messageType,     
+   OCCN_AVPs       aVPs
+  } with { variant "PRESENCE (messageType.messageTypeValue = 9)"; };         
+  
+   
+  type record ICRQ 
+  {  
+   MessageTypeAVP  messageType,     
+   ICRQ_AVPs       aVPs
+  } with { variant "PRESENCE (messageType.messageTypeValue = 10)"; };     
+  
+    
+  type record ICRP  
+  {  
+   MessageTypeAVP  messageType,     
+   ICRP_AVPs       aVPs
+  } with { variant "PRESENCE (messageType.messageTypeValue = 11)"; };          
+  
+    
+  type record ICCN 
+  {  
+   MessageTypeAVP  messageType,     
+   ICCN_AVPs       aVPs
+  } with { variant "PRESENCE (messageType.messageTypeValue = 12)"; };          
+  
+    
+  type record CDN  
+  {  
+   MessageTypeAVP  messageType,     
+   CDN_AVPs        aVPs
+  } with { variant "PRESENCE (messageType.messageTypeValue = 14)"; };         
+  
+    
+  type record WEN  
+  {  
+   MessageTypeAVP  messageType,     
+   WEN_AVPs        aVPs
+  } with { variant "PRESENCE (messageType.messageTypeValue = 15)"; };         
+  
+  
+  type record SLI 
+  {  
+   MessageTypeAVP  messageType,     
+   SLI_AVPs        aVPs
+  } with { variant "PRESENCE (messageType.messageTypeValue = 16)"; };       
+
+  type record ZLB
+  {
+  }
+  
+ // L2TP Header ============================
+         
+  type record L2TP_Offset   
+  {     
+    INT2_BO_LAST    offsetSize,    
+    octetstring     offsetPad     optional     
+  } with {  variant (offsetSize) "LENGTHTO(offsetPad)";}        
+  
+  
+  type record L2TP_Header
+  {
+    BIT1           pBit, //pBit (priority), 0 in ctrl messages
+    BIT1           oBit, //if oBit is 1 offset field is present, 0 in ctrl messages
+    BIT1           reserved, //'0'B
+    BIT1           sBit, //if sBit is 1 ns and nr fields are present, 1 in ctrl messages
+    BIT2           reserved2, //'0'B
+    BIT1           lBit, //if lBit is 1 lengthValuefield is present, 1 in ctrl messages
+    BIT1           tBit, // type of message (0=dataMessage, 1=controlMessage)  
+    BIT4           ver, //'0010'B
+    BIT4           reserved3, //'0'B
+    INT2_BO_LAST   lengthValue   optional, 
+    INT2_BO_LAST   tunnelId,
+    INT2_BO_LAST   sessionId,
+    INT2_BO_LAST   ns            optional,
+    INT2_BO_LAST   nr            optional,
+    L2TP_Offset    offset        optional    
+  } with {  
+           variant (lengthValue) "PRESENCE(lBit = '1'B)";         
+           variant (ns) "PRESENCE(sBit = '1'B)";
+           variant (nr) "PRESENCE(sBit = '1'B)";
+           variant (offset) "PRESENCE(oBit = '1'B)";       
+         }  
+                 
+ // L2TP PDU ============================  
+ 
+  type union ControlMessage
+  {   
+    SCCRQ             sCCRQ,
+    SCCRP             sCCRP,
+    SCCCN             sCCCN,
+    StopCCN           stopCCN,
+    HELLO             hELLO,
+    OCRQ              oCRQ,
+    OCRP              oCRP,
+    OCCN              oCCN,
+    ICRQ              iCRQ,
+    ICRP              iCRP,
+    ICCN              iCCN,
+    CDN               cDN,
+    WEN               wEN,
+    SLI               sLI,
+    ZLB               zLB       
+  } 
+  
+  type union L2TP_Body
+  {  
+    octetstring      dataMessage,
+    ControlMessage   controlMessage
+  }     
+  
+  type record PDU_L2TP 
+  {
+    L2TP_Header        header,
+    L2TP_Body          body
+  } with {  
+            variant (body)"CROSSTAG(dataMessage,    header.tBit = '0'B;
+                                    controlMessage, header.tBit = '1'B)"
+         } 
+                                  
+} with { encode "RAW"} // end of module
-- 
GitLab