///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2019 Ericsson Telecom AB
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v2.0
// which accompanies this distribution, and is available at
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.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" }
