diff --git a/SCTP_CNL113830.tpd b/SCTP_CNL113830.tpd
new file mode 100644
index 0000000..d5e3692
--- /dev/null
+++ b/SCTP_CNL113830.tpd
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>SCTP_CNL113830</ProjectName>
+  <Files>
+    <FileResource projectRelativePath="SCTP_EncDec.cc" relativeURI="src/SCTP_EncDec.cc"/>
+    <FileResource projectRelativePath="SCTP_Types.ttcn" relativeURI="src/SCTP_Types.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/SCTP_CNL113830</targetExecutable>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
\ No newline at end of file
diff --git a/src/SCTP_EncDec.cc b/src/SCTP_EncDec.cc
new file mode 100644
index 0000000..a79330f
--- /dev/null
+++ b/src/SCTP_EncDec.cc
@@ -0,0 +1,199 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               SCTP_EncDec.cc
+//  Description:        Encoder/decoder for SCTP messages
+//  Rev:                R1B
+//  Prodnr:             CNL 113 830
+//  Reference:          RFC4690
+
+#include "SCTP_Types.hh"
+#include <stdint.h>
+
+static const uint32_t crc_table[256] =
+   {
+   0x00000000L, 0xF26B8303L, 0xE13B70F7L, 0x1350F3F4L,
+   0xC79A971FL, 0x35F1141CL, 0x26A1E7E8L, 0xD4CA64EBL,
+   0x8AD958CFL, 0x78B2DBCCL, 0x6BE22838L, 0x9989AB3BL,
+   0x4D43CFD0L, 0xBF284CD3L, 0xAC78BF27L, 0x5E133C24L,
+   0x105EC76FL, 0xE235446CL, 0xF165B798L, 0x030E349BL,
+   0xD7C45070L, 0x25AFD373L, 0x36FF2087L, 0xC494A384L,
+   0x9A879FA0L, 0x68EC1CA3L, 0x7BBCEF57L, 0x89D76C54L,
+   0x5D1D08BFL, 0xAF768BBCL, 0xBC267848L, 0x4E4DFB4BL,
+   0x20BD8EDEL, 0xD2D60DDDL, 0xC186FE29L, 0x33ED7D2AL,
+   0xE72719C1L, 0x154C9AC2L, 0x061C6936L, 0xF477EA35L,
+   0xAA64D611L, 0x580F5512L, 0x4B5FA6E6L, 0xB93425E5L,
+   0x6DFE410EL, 0x9F95C20DL, 0x8CC531F9L, 0x7EAEB2FAL,
+   0x30E349B1L, 0xC288CAB2L, 0xD1D83946L, 0x23B3BA45L,
+   0xF779DEAEL, 0x05125DADL, 0x1642AE59L, 0xE4292D5AL,
+   0xBA3A117EL, 0x4851927DL, 0x5B016189L, 0xA96AE28AL,
+   0x7DA08661L, 0x8FCB0562L, 0x9C9BF696L, 0x6EF07595L,
+   0x417B1DBCL, 0xB3109EBFL, 0xA0406D4BL, 0x522BEE48L,
+   0x86E18AA3L, 0x748A09A0L, 0x67DAFA54L, 0x95B17957L,
+   0xCBA24573L, 0x39C9C670L, 0x2A993584L, 0xD8F2B687L,
+   0x0C38D26CL, 0xFE53516FL, 0xED03A29BL, 0x1F682198L,
+   0x5125DAD3L, 0xA34E59D0L, 0xB01EAA24L, 0x42752927L,
+   0x96BF4DCCL, 0x64D4CECFL, 0x77843D3BL, 0x85EFBE38L,
+   0xDBFC821CL, 0x2997011FL, 0x3AC7F2EBL, 0xC8AC71E8L,
+   0x1C661503L, 0xEE0D9600L, 0xFD5D65F4L, 0x0F36E6F7L,
+   0x61C69362L, 0x93AD1061L, 0x80FDE395L, 0x72966096L,
+   0xA65C047DL, 0x5437877EL, 0x4767748AL, 0xB50CF789L,
+   0xEB1FCBADL, 0x197448AEL, 0x0A24BB5AL, 0xF84F3859L,
+   0x2C855CB2L, 0xDEEEDFB1L, 0xCDBE2C45L, 0x3FD5AF46L,
+   0x7198540DL, 0x83F3D70EL, 0x90A324FAL, 0x62C8A7F9L,
+   0xB602C312L, 0x44694011L, 0x5739B3E5L, 0xA55230E6L,
+   0xFB410CC2L, 0x092A8FC1L, 0x1A7A7C35L, 0xE811FF36L,
+   0x3CDB9BDDL, 0xCEB018DEL, 0xDDE0EB2AL, 0x2F8B6829L,
+   0x82F63B78L, 0x709DB87BL, 0x63CD4B8FL, 0x91A6C88CL,
+   0x456CAC67L, 0xB7072F64L, 0xA457DC90L, 0x563C5F93L,
+   0x082F63B7L, 0xFA44E0B4L, 0xE9141340L, 0x1B7F9043L,
+   0xCFB5F4A8L, 0x3DDE77ABL, 0x2E8E845FL, 0xDCE5075CL,
+   0x92A8FC17L, 0x60C37F14L, 0x73938CE0L, 0x81F80FE3L,
+   0x55326B08L, 0xA759E80BL, 0xB4091BFFL, 0x466298FCL,
+   0x1871A4D8L, 0xEA1A27DBL, 0xF94AD42FL, 0x0B21572CL,
+   0xDFEB33C7L, 0x2D80B0C4L, 0x3ED04330L, 0xCCBBC033L,
+   0xA24BB5A6L, 0x502036A5L, 0x4370C551L, 0xB11B4652L,
+   0x65D122B9L, 0x97BAA1BAL, 0x84EA524EL, 0x7681D14DL,
+   0x2892ED69L, 0xDAF96E6AL, 0xC9A99D9EL, 0x3BC21E9DL,
+   0xEF087A76L, 0x1D63F975L, 0x0E330A81L, 0xFC588982L,
+   0xB21572C9L, 0x407EF1CAL, 0x532E023EL, 0xA145813DL,
+   0x758FE5D6L, 0x87E466D5L, 0x94B49521L, 0x66DF1622L,
+   0x38CC2A06L, 0xCAA7A905L, 0xD9F75AF1L, 0x2B9CD9F2L,
+   0xFF56BD19L, 0x0D3D3E1AL, 0x1E6DCDEEL, 0xEC064EEDL,
+   0xC38D26C4L, 0x31E6A5C7L, 0x22B65633L, 0xD0DDD530L,
+   0x0417B1DBL, 0xF67C32D8L, 0xE52CC12CL, 0x1747422FL,
+   0x49547E0BL, 0xBB3FFD08L, 0xA86F0EFCL, 0x5A048DFFL,
+   0x8ECEE914L, 0x7CA56A17L, 0x6FF599E3L, 0x9D9E1AE0L,
+   0xD3D3E1ABL, 0x21B862A8L, 0x32E8915CL, 0xC083125FL,
+   0x144976B4L, 0xE622F5B7L, 0xF5720643L, 0x07198540L,
+   0x590AB964L, 0xAB613A67L, 0xB831C993L, 0x4A5A4A90L,
+   0x9E902E7BL, 0x6CFBAD78L, 0x7FAB5E8CL, 0x8DC0DD8FL,
+   0xE330A81AL, 0x115B2B19L, 0x020BD8EDL, 0xF0605BEEL,
+   0x24AA3F05L, 0xD6C1BC06L, 0xC5914FF2L, 0x37FACCF1L,
+   0x69E9F0D5L, 0x9B8273D6L, 0x88D28022L, 0x7AB90321L,
+   0xAE7367CAL, 0x5C18E4C9L, 0x4F48173DL, 0xBD23943EL,
+   0xF36E6F75L, 0x0105EC76L, 0x12551F82L, 0xE03E9C81L,
+   0x34F4F86AL, 0xC69F7B69L, 0xD5CF889DL, 0x27A40B9EL,
+   0x79B737BAL, 0x8BDCB4B9L, 0x988C474DL, 0x6AE7C44EL,
+   0xBE2DA0A5L, 0x4C4623A6L, 0x5F16D052L, 0xAD7D5351L
+   };
+
+void sctp_gen_crc(const unsigned char *buff, size_t len, unsigned char* res){
+  uint32_t crc32 = ~0L;
+
+  for(size_t i = 0; i < len; i++){
+      crc32=(crc32>>8)^crc_table[(crc32^buff[i])&0xff];
+  }
+
+  crc32 = ~crc32;
+
+  res[3]=(crc32>> 24) & 0xff;
+  res[2]=(crc32>> 16) & 0xff;
+  res[1]=(crc32>> 8) & 0xff;
+  res[0]=crc32 & 0xff;
+  
+}
+
+namespace SCTP__Types {
+
+OCTETSTRING f__SCTP__enc(const SCTP__Packet& pl__pdu)
+{
+  if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC)) {
+    TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
+    TTCN_Logger::log_event_str("f_SCTP_enc(): Encoding @SCTP_Types.SCTP_Packet: ");
+    pl__pdu.log();
+    TTCN_Logger::end_event();
+  }
+  TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT);
+  TTCN_Buffer ttcn_buffer;
+  pl__pdu.encode(SCTP__Packet_descr_, ttcn_buffer, TTCN_EncDec::CT_RAW);
+
+  size_t len=ttcn_buffer.get_len();
+  size_t p_len=0;
+  unsigned char* ptr=NULL;
+  ttcn_buffer.get_end(ptr,p_len);
+  
+  ptr= ptr - len;
+  
+  ptr[8]=0;
+  ptr[9]=0;
+  ptr[10]=0;
+  ptr[11]=0;
+  
+  sctp_gen_crc(ptr,len,ptr+8);
+
+
+  OCTETSTRING ret_val;
+  ttcn_buffer.get_string(ret_val);
+  if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC)) {
+    TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
+    TTCN_Logger::log_event_str("f_SCTP_enc(): Stream after encoding: ");
+    ret_val.log();
+    TTCN_Logger::end_event();
+  }
+  return ret_val;
+}
+
+INTEGER f__SCTP__dec(const OCTETSTRING& pl__stream, SCTP__Packet& pl__pdu)
+{
+  if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC)) {
+    TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
+    TTCN_Logger::log_event_str("f_SCTP_dec(): Stream before decoding: ");
+    pl__stream.log();
+    TTCN_Logger::end_event();
+  }
+
+  TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_WARNING);
+  TTCN_EncDec::clear_error();
+  TTCN_Buffer ttcn_buffer(pl__stream);
+
+  size_t len=ttcn_buffer.get_len();
+  size_t p_len=0;
+  unsigned char* ptr=NULL;
+  ttcn_buffer.get_end(ptr,p_len);
+  
+  ptr= ptr - len;
+  unsigned char crc_orig[4];
+  crc_orig[0]=ptr[8];
+  crc_orig[1]=ptr[9];
+  crc_orig[2]=ptr[10];
+  crc_orig[3]=ptr[11];
+  
+  ptr[8]=0;
+  ptr[9]=0;
+  ptr[10]=0;
+  ptr[11]=0;
+  unsigned char crc[4];
+  sctp_gen_crc(ptr,len,crc);
+  
+  if((crc_orig[0]!= crc[0]) || (crc_orig[1]!= crc[1]) || (crc_orig[2]!= crc[2]) || (crc_orig[3]!= crc[3])){
+    return 1;
+  }
+  ptr[8]=crc[0];
+  ptr[9]=crc[1];
+  ptr[10]=crc[2];
+  ptr[11]=crc[3];
+  
+  pl__pdu.decode(SCTP__Packet_descr_, ttcn_buffer, TTCN_EncDec::CT_RAW);
+
+  if (TTCN_Logger::log_this_event(TTCN_Logger::DEBUG_ENCDEC)) {
+    TTCN_Logger::begin_event(TTCN_Logger::DEBUG_ENCDEC);
+    TTCN_Logger::log_event_str("f_SCTP_dec(): Decoded @SCTP_Types.SCTP_Packet: ");
+    pl__pdu.log();
+    TTCN_Logger::end_event();
+  }
+  if (TTCN_EncDec::get_last_error_type() == TTCN_EncDec::ET_NONE) {
+    return 0;
+  } else {
+    return 1;
+  }
+}
+
+}
diff --git a/src/SCTP_Types.ttcn b/src/SCTP_Types.ttcn
new file mode 100644
index 0000000..66476f1
--- /dev/null
+++ b/src/SCTP_Types.ttcn
@@ -0,0 +1,886 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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
+// which accompanies this distribution, and is available at
+// http://www.eclipse.org/legal/epl-v10.html
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               SCTP_Types.ttcn
+//  Description:        Type definition for SCTP
+//  Rev:                R1B
+//  Prodnr:             CNL 113 830
+//  Reference:          RFC4690
+//
+module SCTP_Types{
+
+  external function f_SCTP_enc(in SCTP_Packet pl_pdu) return octetstring
+  with {
+    extension "prototype(convert)"
+  }
+  external function f_SCTP_dec(in octetstring pl_stream, out SCTP_Packet pl_pdu) return integer
+  with {
+    extension "prototype(backtrack)"
+  }
+
+
+  type integer SCTP_INT1 with {variant "FIELDLENGTH(8), COMP(nosign)"}
+  type integer SCTP_INT2 with {variant "FIELDLENGTH(16), COMP(nosign), BYTEORDER(last)"}
+  type integer SCTP_INT4 with {variant "FIELDLENGTH(32), COMP(nosign), BYTEORDER(last)"}
+  type bitstring BIT_FLAG length(1)
+
+
+
+  type record SCTP_Packet{
+    SCTP_Common_header    common_header,
+    SCTP_Chunk_List       chunks
+  } with {
+    variant ""
+  }
+  
+  type record of SCTP_Chunk SCTP_Chunk_List;
+  
+  type union SCTP_Chunk{
+    SCTP_Data_chunk      data,
+    SCTP_Init_chunk      init,
+    SCTP_InitAck_chunk   init_ack,
+    SCTP_SAck_chunk      sack,
+    SCTP_Heartbeat_chunk heartbeat,
+    SCTP_Heartbeat_ack_chunk heartbeat_ack,
+    SCTP_abort_chunk     abort,
+    SCTP_Shutdown_chunk  shutdown,
+    SCTP_Shutdown_ack_chunk shutdown_ack,
+    SCTP_error_chunk     error_,
+    SCTP_CookieEcho_chunk cookie_echo,
+    SCTP_Cookie_ack_chunk cookie_ack,
+    SCTP_ShutdownComplete_chunk shutdown_complete,
+    SCTP_Auth_chunk      auth,
+    SCTP_IData_chunk     idata,
+    SCTP_ASCONF_ack_chunk asconf_ack,
+    SCTP_Re_Config_chunk re_config,
+    SCTP_Padding_chunk   padding,
+    SCTP_Forward_TSN_chunk forward_tsn,
+    SCTP_ASCONF_chunk    asconf,
+    SCTP_IForward_TSN_chunk iforward_tsn,
+    SCTP_Unknown_chunk   unknown_chunk
+  } with {
+    variant "PADDING(dword32)"
+    variant "TAG( data, chunk_type = 0;
+                  init, chunk_type = 1;
+                  init_ack, chunk_type = 2;
+                  sack, chunk_type = 3;
+                  heartbeat, chunk_type = 4;
+                  heartbeat_ack, chunk_type = 5;
+                  abort, chunk_type = 6;
+                  shutdown, chunk_type = 7;
+                  shutdown_ack, chunk_type = 8;
+                  error_, chunk_type = 9;
+                  cookie_echo, chunk_type = 10;
+                  cookie_ack, chunk_type = 11;
+                  shutdown_complete, chunk_type = 14;
+                  auth, chunk_type = 15;
+                  idata, chunk_type = 64;
+                  asconf_ack, chunk_type = 128;
+                  re_config, chunk_type = 130;
+                  padding, chunk_type = 132;
+                  forward_tsn, chunk_type = 192;
+                  asconf, chunk_type = 193;
+                  iforward_tsn, chunk_type = 194;
+                  unknown_chunk, OTHERWISE;
+                )"
+  }
+  
+  
+  type record SCTP_Data_chunk{
+    SCTP_INT1                 chunk_type (0),
+    BIT_FLAG             E_flag,
+    BIT_FLAG             B_flag,
+    BIT_FLAG             U_flag,
+    BIT_FLAG             I_flag,
+    bitstring            res_flags length(4),
+    SCTP_INT2                 chunk_length,
+    SCTP_INT4                 tsn,
+    SCTP_INT2                 stream_id,
+    SCTP_INT2                 ssn,
+    SCTP_INT4                 ppid,
+    octetstring          user_data
+    
+  } with {
+    variant "PRESENCE(chunk_type=0)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,E_flag,B_flag,U_flag,I_flag,res_flags,chunk_length,tsn,stream_id,ssn,ppid,user_data)"
+  }
+
+  
+  type record SCTP_Init_chunk{
+    SCTP_INT1                 chunk_type (1),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_INT4                 init_tag,
+    SCTP_INT4                 a_rwnd,
+    SCTP_INT2                 os,
+    SCTP_INT2                 mis,
+    SCTP_INT4                 init_tsn,
+    SCTP_Param_list      params optional
+  } with {
+    variant "PRESENCE(chunk_type=1)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,init_tag,a_rwnd,os,mis,init_tsn,params)"
+  }
+
+  type record SCTP_InitAck_chunk{
+    SCTP_INT1                 chunk_type (2),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_INT4                 init_tag,
+    SCTP_INT4                 a_rwnd,
+    SCTP_INT2                 os,
+    SCTP_INT2                 mis,
+    SCTP_INT4                 init_tsn,
+    SCTP_Param_list      params optional
+  } with {
+    variant "PRESENCE(chunk_type=2)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,init_tag,a_rwnd,os,mis,init_tsn,params)"
+  }
+
+  type record SCTP_SAck_chunk{
+    SCTP_INT1                 chunk_type (3),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_INT4                 cum_tsn_ack,
+    SCTP_INT4                 a_rwnd,
+    SCTP_INT2                 no_of_gap_blocks,
+    SCTP_INT2                 no_of_dup_tsn,
+    record of SCTP_Gap_block gap_blocks optional,
+    record of SCTP_INT4       dup_tsns optional
+  } with {
+    variant "PRESENCE(chunk_type=3)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,cum_tsn_ack,a_rwnd,no_of_gap_blocks,no_of_dup_tsn,gap_blocks,dup_tsns)"
+    variant (no_of_gap_blocks) "LENGTHTO(gap_blocks), UNIT(elements)"
+    variant (no_of_dup_tsn) "LENGTHTO(dup_tsns), UNIT(elements)"
+  }
+  
+  type record SCTP_Gap_block{
+    SCTP_INT2            start_tsn,
+    SCTP_INT2            end_tsn
+  }
+
+  type record SCTP_Heartbeat_chunk{
+    SCTP_INT1                 chunk_type (4),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_Param_list      params optional
+  } with {
+    variant "PRESENCE(chunk_type=4)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,params)"
+  }
+
+  type record SCTP_Heartbeat_ack_chunk{
+    SCTP_INT1                 chunk_type (5),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_Param_list      params optional
+  } with {
+    variant "PRESENCE(chunk_type=5)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,params)"
+  }
+
+
+  type record SCTP_abort_chunk{
+    SCTP_INT1                 chunk_type (6),
+    BIT_FLAG             T_flag,
+    bitstring            flags length(7),
+    SCTP_INT2                 chunk_length,
+    SCTP_Error_cause_list params optional
+  } with {
+    variant "PRESENCE(chunk_type=6)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,T_flag,flags,chunk_length,params)"
+  }
+
+  type record SCTP_Shutdown_chunk{
+    SCTP_INT1                 chunk_type (7),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_INT4                 cum_tsn_ack
+  } with {
+    variant "PRESENCE(chunk_type=7)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,cum_tsn_ack)"
+  }
+
+  type record SCTP_Shutdown_ack_chunk{
+    SCTP_INT1                 chunk_type (8),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length
+  } with {
+    variant "PRESENCE(chunk_type=8)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length)"
+  }
+
+
+  type record SCTP_error_chunk{
+    SCTP_INT1                 chunk_type (9),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_Error_cause_list params optional
+  } with {
+    variant "PRESENCE(chunk_type=9)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,params)"
+  }
+
+
+  type record SCTP_CookieEcho_chunk{
+    SCTP_INT1                 chunk_type (10),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    octetstring          cookie
+  } with {
+    variant "PRESENCE(chunk_type=10)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,cookie)"
+  }
+
+
+  type record SCTP_Cookie_ack_chunk{
+    SCTP_INT1                 chunk_type (11),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length
+  } with {
+    variant "PRESENCE(chunk_type=11)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length)"
+  }
+
+
+  type record SCTP_ShutdownComplete_chunk{
+    SCTP_INT1                 chunk_type (14),
+    BIT_FLAG             T_flag,
+    bitstring            flags length(7),
+    SCTP_INT2                 chunk_length
+  } with {
+    variant "PRESENCE(chunk_type=14)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,T_flag,flags,chunk_length)"
+  }
+
+  type record SCTP_Auth_chunk{
+    SCTP_INT1                 chunk_type (15),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_INT2                 key_id,
+    SCTP_INT2                 hmac_id,
+    octetstring          hmac
+  } with {
+    variant "PRESENCE(chunk_type=15)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,key_id,hmac_id,hmac)"
+  }
+
+  type record SCTP_IData_chunk{
+    SCTP_INT1                 chunk_type (64),
+    BIT_FLAG             E_flag,
+    BIT_FLAG             B_flag,
+    BIT_FLAG             U_flag,
+    BIT_FLAG             I_flag,
+    bitstring            res_flags length(4),
+    SCTP_INT2                 chunk_length,
+    SCTP_INT4                 tsn,
+    SCTP_INT2                 stream_id,
+    SCTP_INT2                 reserved,
+    SCTP_INT4                 mid,
+    SCTP_INT4                 ppid_fsn,
+    octetstring          user_data
+    
+  } with {
+    variant "PRESENCE(chunk_type=64)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,E_flag,B_flag,U_flag,I_flag,res_flags,chunk_length,tsn,stream_id,reserved,mid,ppid_fsn,user_data)"
+  }
+
+  type record SCTP_ASCONF_ack_chunk{
+    SCTP_INT1                 chunk_type (128),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_INT4                 seq_no,
+    SCTP_Param_list      params optional
+  } with {
+    variant "PRESENCE(chunk_type=128)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,seq_no,params)"
+  }
+ 
+
+  type record SCTP_Re_Config_chunk{
+    SCTP_INT1                 chunk_type (130),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_Param_list params optional
+  } with {
+    variant "PRESENCE(chunk_type=130)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,params)"
+  }
+
+  type record SCTP_Padding_chunk{
+    SCTP_INT1                 chunk_type (132),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    octetstring          padding
+  } with {
+    variant "PRESENCE(chunk_type=132)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,padding)"
+  }
+
+  type record SCTP_Forward_TSN_chunk{
+    SCTP_INT1                 chunk_type (192),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_INT4                 new_tsn,
+    record of  SCTP_Forward_TSN_streamdata  stream_ssn_list
+  } with {
+    variant "PRESENCE(chunk_type=192)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,new_tsn,stream_ssn_list)"
+  }
+
+  type record SCTP_Forward_TSN_streamdata{
+    SCTP_INT2    stream_id,
+    SCTP_INT2    ssn
+  }
+
+  type record SCTP_ASCONF_chunk{
+    SCTP_INT1                 chunk_type (193),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_INT4                 seq_no,
+    SCTP_Param_list      params optional
+  } with {
+    variant "PRESENCE(chunk_type=193)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,seq_no,params)"
+  }
+  
+  type record SCTP_IForward_TSN_chunk{
+    SCTP_INT1                 chunk_type (194),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    SCTP_INT4                 new_tsn,
+    record of  SCTP_IForward_TSN_streamdata  stream_ssn_list
+  } with {
+    variant "PRESENCE(chunk_type=194)"
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,new_tsn,stream_ssn_list)"
+  }
+
+  type record SCTP_IForward_TSN_streamdata{
+    SCTP_INT2    stream_id,
+    SCTP_INT2    reserved,
+    SCTP_INT4    mid
+  }
+  
+  type record SCTP_Unknown_chunk{
+    SCTP_INT1                 chunk_type (0..255),
+    bitstring            flags length(8),
+    SCTP_INT2                 chunk_length,
+    octetstring          chunk_value
+  } with {
+    variant (chunk_length)  "LENGTHTO(chunk_type,flags,chunk_length,chunk_value)"
+  }
+  
+
+  type record of SCTP_Error_cause SCTP_Error_cause_list;
+  
+  type union SCTP_Error_cause {
+    SCTP_Invalid_StreamId_cause     invalid_streamId,
+    SCTP_Missing_mand_param_cause   missing_params,
+    SCTP_Stale_cookie_cause         stale_cookie,
+    SCTP_Out_of_res_cause           out_of_resources,
+    SCTP_Unresolvable_addr_cause    unresolvable_addr,
+    SCTP_Unrecognized_chunk_cause   unrecognized_chunk,
+    SCTP_Invalid_mand_param_cause   invalid_mandatory_param,
+    SCTP_Unrecognized_params_cause  unrecognized_params,
+    SCTP_No_User_data_cause         no_user_data,
+    SCTP_Cookie_while_shutdown_cause cookie_while_shutdown,
+    SCTP_Restart_with_new_addr_cause restart_with_new_addr,
+    SCTP_User_abort_cause           user_abort,
+    SCTP_Protocol_violation_cause   protocol_violation,
+    SCTP_Req_del_last_ip_cause      req_del_last_ip,
+    SCTP_Refused_res_shortage_cause refused_res_shortage,
+    SCTP_Req_del_source_ip_cause    req_del_source_ip,
+    SCTP_Illegal_ASCONF_cause       illegal_asconf,
+    SCTP_No_atuhorization_cause     no_authorization,
+    SCTP_UnsupportedHMAC_cause      unsupported_hmac,
+    SCTP_Unknown_error_cause        unknown_cause
+  } with {
+    variant "PADDING(dword32)"
+  }
+
+  type record SCTP_Invalid_StreamId_cause{
+    SCTP_INT2              cause_code(1),
+    SCTP_INT2              cause_length,
+    SCTP_INT2              streamId,
+    SCTP_INT2              reserved
+  } with {
+    variant "PRESENCE(cause_code=1)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,streamId,reserved)"
+  }
+
+  type record SCTP_Missing_mand_param_cause{
+    SCTP_INT2              cause_code(2),
+    SCTP_INT2              cause_length,
+    SCTP_INT4              num_of_params,
+    record of SCTP_INT2    missing_type
+  } with {
+    variant "PRESENCE(cause_code=2)"
+    variant (num_of_params) "LENGTHTO(missing_type), UNIT(elements)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,num_of_params,missing_type)"
+  }
+
+  type record SCTP_Stale_cookie_cause{
+    SCTP_INT2              cause_code(3),
+    SCTP_INT2              cause_length,
+    SCTP_INT4              measure
+  } with {
+    variant "PRESENCE(cause_code=3)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,measure)"
+  }
+
+  type record SCTP_Out_of_res_cause{
+    SCTP_INT2              cause_code(4),
+    SCTP_INT2              cause_length
+  } with {
+    variant "PRESENCE(cause_code=4)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length)"
+  }
+
+  type record SCTP_Unresolvable_addr_cause{
+    SCTP_INT2              cause_code(5),
+    SCTP_INT2              cause_length,
+    octetstring       addr
+  } with {
+    variant "PRESENCE(cause_code=5)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,addr)"
+  }
+
+  type record SCTP_Unrecognized_chunk_cause{
+    SCTP_INT2              cause_code(6),
+    SCTP_INT2              cause_length,
+    octetstring       chunk
+  } with {
+    variant "PRESENCE(cause_code=6)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,chunk)"
+  }
+
+  type record SCTP_Invalid_mand_param_cause{
+    SCTP_INT2              cause_code(7),
+    SCTP_INT2              cause_length
+  } with {
+    variant "PRESENCE(cause_code=7)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length)"
+  }
+
+  type record SCTP_Unrecognized_params_cause{
+    SCTP_INT2              cause_code(8),
+    SCTP_INT2              cause_length,
+    octetstring       params
+  } with {
+    variant "PRESENCE(cause_code=8)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,params)"
+  }
+  
+  type record SCTP_No_User_data_cause{
+    SCTP_INT2              cause_code(9),
+    SCTP_INT2              cause_length,
+    SCTP_INT4              tsn
+  } with {
+    variant "PRESENCE(cause_code=9)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,tsn)"
+  }
+
+  type record SCTP_Cookie_while_shutdown_cause{
+    SCTP_INT2              cause_code(10),
+    SCTP_INT2              cause_length
+  } with {
+    variant "PRESENCE(cause_code=10)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length)"
+  }
+
+  type record SCTP_Restart_with_new_addr_cause{
+    SCTP_INT2              cause_code(11),
+    SCTP_INT2              cause_length,
+    octetstring       new_addr
+  } with {
+    variant "PRESENCE(cause_code=11)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,new_addr)"
+  }
+  
+  type record SCTP_User_abort_cause{
+    SCTP_INT2              cause_code(12),
+    SCTP_INT2              cause_length,
+    octetstring       reason
+  } with {
+    variant "PRESENCE(cause_code=12)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,reason)"
+  }
+  
+  type record SCTP_Protocol_violation_cause{
+    SCTP_INT2              cause_code(13),
+    SCTP_INT2              cause_length,
+    octetstring       reason
+  } with {
+    variant "PRESENCE(cause_code=13)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,reason)"
+  }
+  
+  type record SCTP_Req_del_last_ip_cause{
+    SCTP_INT2              cause_code(160),
+    SCTP_INT2              cause_length,
+    octetstring       tlv
+  } with {
+    variant "PRESENCE(cause_code=160)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,tlv)"
+  }
+  
+  type record SCTP_Refused_res_shortage_cause{
+    SCTP_INT2              cause_code(161),
+    SCTP_INT2              cause_length,
+    octetstring       tlv
+  } with {
+    variant "PRESENCE(cause_code=161)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,tlv)"
+  }
+  
+  type record SCTP_Req_del_source_ip_cause{
+    SCTP_INT2              cause_code(162),
+    SCTP_INT2              cause_length,
+    octetstring       tlv
+  } with {
+    variant "PRESENCE(cause_code=162)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,tlv)"
+  }
+  
+  type record SCTP_Illegal_ASCONF_cause{
+    SCTP_INT2              cause_code(163),
+    SCTP_INT2              cause_length
+  } with {
+    variant "PRESENCE(cause_code=163)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length)"
+  }
+  
+  type record SCTP_No_atuhorization_cause{
+    SCTP_INT2              cause_code(164),
+    SCTP_INT2              cause_length,
+    octetstring       tlv
+  } with {
+    variant "PRESENCE(cause_code=164)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,tlv)"
+  }
+  
+  type record SCTP_UnsupportedHMAC_cause{
+    SCTP_INT2              cause_code(261),
+    SCTP_INT2              cause_length,
+    SCTP_INT2              hmac
+  } with {
+    variant "PRESENCE(cause_code=261)"
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,hmac)"
+  }
+  
+  type record SCTP_Unknown_error_cause{
+    SCTP_INT2              cause_code,
+    SCTP_INT2              cause_length,
+    octetstring       cause_value
+  } with {
+    variant (cause_length)  "LENGTHTO(cause_code,cause_length,cause_value)"
+  }
+
+
+  type record of SCTP_parameters SCTP_Param_list;
+  
+  type union SCTP_parameters{
+    SCTP_Hearbeat_info_parameter        heartbeat_info,
+    SCTP_IPv4_parameter                 ipv4_addr,
+    SCTP_IPv6_parameter                 ipv6_addr,
+    SCTP_StateCookie_parameter          state_cookie,
+    SCTP_unrecognized_params_parameter  unrecognized_params,
+    SCTP_Cookie_pres_parameter          cookie_preservative,
+    SCTP_HostNameAddr_parameter         hostname,
+    SCTP_Supported_addr_types_parameter supported_addr_types,
+    SCTP_Out_SSN_Reset_req_parameter    out_ssn_reset_req,
+    SCTP_In_SSN_Reset_req_parameter     in_ssn_reset_req,
+    SCTP_SSN_TSN_Reset_req_parameter    ssn_tsn_reset_req,
+    SCTP_Reconf_resp_parameter          reconf_resp,
+    SCTP_Add_out_stream_req_parameter   add_out_stream,
+    SCTP_Add_in_stream_req_parameter    add_in_stream,
+    SCTP_Random_parameter               random,
+    SCTP_chunk_list_parameter           chunk_list,
+    SCTP_Req_HMAC_parameter             req_HMAC,
+    SCTP_Padding_parameter              padding,
+    SCTP_Supported_extensions_parameter supported_extensions,
+    SCTP_Forward_TSN_Supported_parameter forward_tsn_supported,
+    SCTP_Add_IP_addr_parameter          add_address,
+    SCTP_Del_IP_addr_parameter          del_address,
+    SCTP_Error_cause_parameter          error_cause,
+    SCTP_Set_Pri_IP_addr_parameter      set_primary_addr,
+    SCTP_Success_Ind_parameter          success_ind,
+    SCTP_Adaptation_layer_Ind_parameter adaptation_layer_ind,
+    SCTP_Unknown_parameter              unknown_param
+  } with {
+    variant "PADDING(dword32)"
+  }
+
+  type record SCTP_Hearbeat_info_parameter{
+    SCTP_INT2              param_type(1),
+    SCTP_INT2              param_length,
+    octetstring       info
+  } with {
+    variant "PRESENCE(param_type=1)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,info)"
+  }
+
+  type record SCTP_IPv4_parameter{
+    SCTP_INT2              param_type(5),
+    SCTP_INT2              param_length,
+    octetstring       ipv4_addr
+  } with {
+    variant "PRESENCE(param_type=5)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,ipv4_addr)"
+  }
+
+  type record SCTP_IPv6_parameter{
+    SCTP_INT2              param_type(6),
+    SCTP_INT2              param_length,
+    octetstring       ipv6_addr
+  } with {
+    variant "PRESENCE(param_type=6)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,ipv6_addr)"
+  }
+
+  type record SCTP_StateCookie_parameter{
+    SCTP_INT2              param_type(7),
+    SCTP_INT2              param_length,
+    octetstring       state_cookie
+  } with {
+    variant "PRESENCE(param_type=7)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,state_cookie)"
+  }
+
+  type record SCTP_unrecognized_params_parameter{
+    SCTP_INT2              param_type(8),
+    SCTP_INT2              param_length,
+    octetstring       unrecognized_params
+  } with {
+    variant "PRESENCE(param_type=8)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,unrecognized_params)"
+  }
+
+  type record SCTP_Cookie_pres_parameter{
+    SCTP_INT2              param_type(9),
+    SCTP_INT2              param_length,
+    SCTP_INT2              suggested_incr
+  } with {
+    variant "PRESENCE(param_type=9)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,suggested_incr)"
+  }
+
+  type record SCTP_HostNameAddr_parameter{
+    SCTP_INT2              param_type(11),
+    SCTP_INT2              param_length,
+    octetstring       host_name
+  } with {
+    variant "PRESENCE(param_type=11)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,host_name)"
+  }
+
+  type record SCTP_Supported_addr_types_parameter{
+    SCTP_INT2              param_type(12),
+    SCTP_INT2              param_length,
+    record of SCTP_INT2    supported_addr_types
+  } with {
+    variant "PRESENCE(param_type=12)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,supported_addr_types)"
+  }
+
+  type record SCTP_Out_SSN_Reset_req_parameter{
+    SCTP_INT2              param_type(13),
+    SCTP_INT2              param_length,
+    SCTP_INT4              reconf_req_seq,
+    SCTP_INT4              reconf_resp_seq,
+    SCTP_INT4              last_assigned_tsn,
+    record of SCTP_INT2    stream_numbers optional
+  } with {
+    variant "PRESENCE(param_type=13)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,reconf_req_seq,reconf_resp_seq,last_assigned_tsn,stream_numbers)"
+  }
+
+  type record SCTP_In_SSN_Reset_req_parameter{
+    SCTP_INT2              param_type(14),
+    SCTP_INT2              param_length,
+    SCTP_INT4              reconf_req_seq,
+    record of SCTP_INT2    stream_numbers optional
+  } with {
+    variant "PRESENCE(param_type=14)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,reconf_req_seq,stream_numbers)"
+  }
+
+  type record SCTP_SSN_TSN_Reset_req_parameter{
+    SCTP_INT2              param_type(15),
+    SCTP_INT2              param_length,
+    SCTP_INT4              reconf_req_seq
+  } with {
+    variant "PRESENCE(param_type=15)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,reconf_req_seq)"
+  }
+
+  type record SCTP_Reconf_resp_parameter{
+    SCTP_INT2              param_type(16),
+    SCTP_INT2              param_length,
+    SCTP_INT4              reconf_resp_seq,
+    SCTP_INT4              result,
+    SCTP_INT4              sender_next_tsn optional,
+    SCTP_INT4              receiver_next_tsn optional
+  } with {
+    variant "PRESENCE(param_type=16)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,reconf_resp_seq,result,sender_next_tsn,receiver_next_tsn)"
+  }
+
+  type record SCTP_Add_out_stream_req_parameter{
+    SCTP_INT2              param_type(17),
+    SCTP_INT2              param_length,
+    SCTP_INT4              reconf_req_seq,
+    SCTP_INT2              stream_num,
+    SCTP_INT2              reserved
+  } with {
+    variant "PRESENCE(param_type=17)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,reconf_req_seq,stream_num,reserved)"
+  }
+
+  type record SCTP_Add_in_stream_req_parameter{
+    SCTP_INT2              param_type(18),
+    SCTP_INT2              param_length,
+    SCTP_INT4              reconf_req_seq,
+    SCTP_INT2              stream_num,
+    SCTP_INT2              reserved
+  } with {
+    variant "PRESENCE(param_type=18)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,reconf_req_seq,stream_num,reserved)"
+  }
+
+  type record SCTP_Random_parameter{
+    SCTP_INT2              param_type(32770),
+    SCTP_INT2              param_length,
+    octetstring       random
+  } with {
+    variant "PRESENCE(param_type=32770)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,random)"
+  }
+
+  type record SCTP_chunk_list_parameter{
+    SCTP_INT2              param_type(32771),
+    SCTP_INT2              param_length,
+    record of SCTP_INT1    chunk_list
+  } with {
+    variant "PRESENCE(param_type=32771)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,chunk_list)"
+  }
+
+  type record SCTP_Req_HMAC_parameter{
+    SCTP_INT2              param_type(32772),
+    SCTP_INT2              param_length,
+    record of SCTP_INT2    HMAC_IDs
+  } with {
+    variant "PRESENCE(param_type=32772)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,HMAC_IDs)"
+  }
+
+  type record SCTP_Padding_parameter{
+    SCTP_INT2              param_type(32773),
+    SCTP_INT2              param_length,
+    octetstring       padding
+  } with {
+    variant "PRESENCE(param_type=32773)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,padding)"
+  }
+
+  type record SCTP_Supported_extensions_parameter{
+    SCTP_INT2              param_type(32776),
+    SCTP_INT2              param_length,
+    record of SCTP_INT1    supported_extensions
+  } with {
+    variant "PRESENCE(param_type=32776)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,supported_extensions)"
+  }
+  
+  type record SCTP_Forward_TSN_Supported_parameter{
+    SCTP_INT2              param_type(49152),
+    SCTP_INT2              param_length
+  } with {
+    variant "PRESENCE(param_type=49152)"
+    variant (param_length)  "LENGTHTO(param_type,param_length)"
+  }
+  
+  type record SCTP_Add_IP_addr_parameter{
+    SCTP_INT2              param_type(49153),
+    SCTP_INT2              param_length,
+    SCTP_INT4              asconf_req_id,
+    SCTP_parameters   addr
+  } with {
+    variant "PRESENCE(param_type=49153)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,asconf_req_id,addr)"
+  }
+  
+  type record SCTP_Del_IP_addr_parameter{
+    SCTP_INT2              param_type(49154),
+    SCTP_INT2              param_length,
+    SCTP_INT4              asconf_req_id,
+    SCTP_parameters   addr
+  } with {
+    variant "PRESENCE(param_type=49154)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,asconf_req_id,addr)"
+  }
+  
+  type record SCTP_Error_cause_parameter{
+    SCTP_INT2              param_type(49155),
+    SCTP_INT2              param_length,
+    SCTP_INT4              asconf_req_id,
+    SCTP_Error_cause_list   causes
+  } with {
+    variant "PRESENCE(param_type=49155)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,asconf_req_id,causes)"
+  }
+
+  type record SCTP_Set_Pri_IP_addr_parameter{
+    SCTP_INT2              param_type(49156),
+    SCTP_INT2              param_length,
+    SCTP_INT4              asconf_req_id,
+    SCTP_parameters   addr
+  } with {
+    variant "PRESENCE(param_type=49156)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,asconf_req_id,addr)"
+  }
+ 
+  type record SCTP_Success_Ind_parameter{
+    SCTP_INT2              param_type(49157),
+    SCTP_INT2              param_length,
+    SCTP_INT4              asconf_req_id
+  } with {
+    variant "PRESENCE(param_type=49157)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,asconf_req_id)"
+  }
+ 
+  type record SCTP_Adaptation_layer_Ind_parameter{
+    SCTP_INT2              param_type(49157),
+    SCTP_INT2              param_length,
+    SCTP_INT4              code_point
+  } with {
+    variant "PRESENCE(param_type=49157)"
+    variant (param_length)  "LENGTHTO(param_type,param_length,code_point)"
+  }
+ 
+  
+  type record SCTP_Unknown_parameter{
+    SCTP_INT2              param_type,
+    SCTP_INT2              param_length,
+    octetstring       param_value
+  } with {
+    variant (param_length)  "LENGTHTO(param_type,param_length,param_value)"
+  }
+
+  type record SCTP_Common_header{
+    SCTP_INT2                 source_port (0..65535),
+    SCTP_INT2                 destination_port (0..65535),
+    SCTP_INT4                 verification_tag,
+    octetstring          checksum length(4)
+  } with {
+    variant (verification_tag) "FIELDLENGTH(32)"
+  }
+
+} with { encode "RAW" }
