blob: db3e7b7315ae3a20ff39488c43b7941ceb27d2bc [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2021 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: EPTF_COAP_LocalTransport_Definitions.ttcn
// Description:
// Rev: R1B
// Prodnr: CNL 113 858
// Updated: 2021-02-03
// Contact: http://ttcn.ericsson.se
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// Module: EPTF_COAP_LocalTransport_Definitions
//
// Purpose:
// This module contains the definitions for the COAP load generator component
//
// Module depends on:
// - <EPTF_COAP_Transport_Definitions>
// - <EPTF_CLL_Base_Definitions>
// - <EPTF_CLL_Logging_Definitions>
// - <EPTF_CLL_FBQ_Definitions>
// - <EPTF_CLL_TransportIPL4_Definitions>
// - <EPTF_CLL_RBTScheduler_Definitions>
// - <IPL4asp_Types>
//
// Module Parameters:
// tsp_EPTF_COAP_LocalTransport_debug - <tsp_EPTF_COAP_LGen_debug> - *boolean* - Enabled/disable debug logging
// tsp_EPTF_COAP_LocalTransport_debugVerbose - <tsp_EPTF_COAP_LGen_debugVerbose> - *boolean* - Enable/disable verbose debug logging
//
// Class Diagram:
// (see EPTF_COAP_LocalTransport_Definitions.classes.jpg)
//
///////////////////////////////////////////////////////////////
module EPTF_COAP_LocalTransport_Definitions
{
import from EPTF_COAP_Transport_Definitions all;
import from EPTF_CLL_Base_Definitions all;
import from EPTF_CLL_Logging_Definitions all;
import from EPTF_CLL_FBQ_Definitions all;
import from EPTF_CLL_TransportIPL4_Definitions all;
import from EPTF_CLL_RBTScheduler_Definitions all;
import from IPL4asp_Types all;
modulepar boolean tsp_EPTF_COAP_LocalTransport_debug := false;
modulepar boolean tsp_EPTF_COAP_LocalTransport_debugVerbose := false;
const charstring c_COAP_Transport_LGenType := "COAP_Transport";
const integer c_COAP_LocalTransport_Logging_WARNING := 0;
const integer c_COAP_LocalTransport_Logging_DEBUG := 1;
const integer c_COAP_LocalTransport_Logging_DEBUGV := 2;
const integer c_COAP_LocalTransport_Logging_ERROR := 3;
/*****************************************************************
@startuml EPTF_COAP_LocalTransport_Definitions.classes.jpg
class EPTF_COAP_LocalTransport_CT {
boolean v_EPTF_COAP_LocalTransport_initialized
integer v_EPTF_COAP_LocalTransport_loggingMaskId
SocketEntry v_COAP_LocalTransport_currentSocket
SocketDB v_COAP_LocalTransport_localSocketDB
EPTF_COAP_Transport_Statistics v_EPTF_COAP_Transport_stats
f_EPTF_COAP_LocalTransport_init()
f_EPTF_COAP_LocalTransport_initLogging()
f_EPTF_COAP_LocalTransport_cleanup()
f_EPTF_COAP_IPL4asp_getMsgLen(in octetstring stream, inout ro_integer args)
f_EPTF_COAP_IPL4asp_handleEvent(...)
f_EPTF_COAP_IPL4asp_handleMessage(...)
f_EPTF_COAP_LocalTransport_send(in EPTF_COAP_PDU pl_msg)
f_EPTF_COAP_LocalTransport_transportApiRequest(EPTF_COAP_Transport_Request pl_req)
f_EPTF_COAP_LocalTransport_startSocket(in Socket p_sock, in ProtoTuple p_proto, in integer p_eIdx, inout integer p_idx)
f_EPTF_COAP_LocalTransport_startDTLS(in EPTF_COAP_Transport_dtlsConnect p_params, in integer p_eIdx, inout integer p_idx)
f_EPTF_COAP_LocalTransport_IPL4_sendTo(...)
f_EPTF_COAP_LocalTransport_IPL4_send(in integer pl_connId,in ProtoTuple pl_proto,in octetstring pl_msg)
}
EPTF_COAP_LocalTransport_CT "1" --> "1\n.v_COAP_LocalTransport_localSocketDB" SocketDB
EPTF_COAP_LocalTransport_CT "1" --> "0..1\n.v_COAP_LocalTransport_currentSocket" SocketEntry
EPTF_COAP_LocalTransport_CT "1" --> "1\n.v_EPTF_COAP_Transport_stats" EPTF_COAP_Transport_Statistics
class SocketEntry {
Socket addr
DTLSConnection dtls
ProtoTuple proto
ConnectionId connId
SocketState state
integer eIdx
f_EPTF_COAP_SocketEntry_hash(in SocketEntry p_entry)
f_EPTF_COAP_Socket_hash(Socket p_sock)
}
SocketEntry "1" --> "0..1\n.dtls" DTLSConnection
class SocketDB {
EPTF_FreeBusyQueue queue
SocketEntry_List data
integer hashRef
integer connId2eIdx_hashRef
f_EPTF_COAP_LocalTransport_socketDB_init()
f_EPTF_COAP_LocalTransport_socketDB_cleanUp()
f_EPTF_COAP_LocalTransport_socketDB_add(in SocketEntry p_entry)
f_EPTF_COAP_LocalTransport_socketDB_lookUp_localAddr(in Socket p_localAddr)
f_EPTF_COAP_LocalTransport_socketDB_lookUp_dtlsConnection(in Socket p_local, in Socket p_remote)
f_EPTF_COAP_LocalTransport_socketDB_lookUp_connId(in integer p_connId)
f_EPTF_COAP_LocalTransport_socketDB_get(in integer p_idx, inout SocketEntry p_sock)
f_EPTF_COAP_LocalTransport_socketDB_remove(in integer p_idx)
}
SocketDB "1" --> "*\n.data" SocketEntry
class DTLSConnection {
Socket remoteAddr
charstring pskIndetity
charstring pskKey
f_EPTF_COAP_DTLSConnection_hash(in Socket p_local, in Socket p_remote)
}
class EPTF_COAP_Transport_Statistics {
integer nofOpenConnections
integer nofTransportWarnings
float nofReceivedMessages
float nofSentMessages
float nofReceivedBytes
float nofSentBytes
}
@enduml
******************************************************************/
/*****************************************************************
@startuml EPTF_COAP_LocalTransport_Definitions.EPTF_COAP_LocalTransport_CT.jpg
class EPTF_COAP_LocalTransport_CT {
boolean v_EPTF_COAP_LocalTransport_initialized
integer v_EPTF_COAP_LocalTransport_loggingMaskId
SocketEntry v_COAP_LocalTransport_currentSocket
SocketDB v_COAP_LocalTransport_localSocketDB
EPTF_COAP_Transport_Statistics v_EPTF_COAP_Transport_stats
f_EPTF_COAP_LocalTransport_init()
f_EPTF_COAP_LocalTransport_initLogging()
f_EPTF_COAP_LocalTransport_cleanup()
f_EPTF_COAP_IPL4asp_getMsgLen(in octetstring stream, inout ro_integer args)
f_EPTF_COAP_IPL4asp_handleEvent(...)
f_EPTF_COAP_IPL4asp_handleMessage(...)
f_EPTF_COAP_LocalTransport_send(in EPTF_COAP_PDU pl_msg)
f_EPTF_COAP_LocalTransport_transportApiRequest(EPTF_COAP_Transport_Request pl_req)
f_EPTF_COAP_LocalTransport_startSocket(in Socket p_sock, in ProtoTuple p_proto, in integer p_eIdx, inout integer p_idx)
f_EPTF_COAP_LocalTransport_startDTLS(in EPTF_COAP_Transport_dtlsConnect p_params, in integer p_eIdx, inout integer p_idx)
f_EPTF_COAP_LocalTransport_IPL4_sendTo(...)
f_EPTF_COAP_LocalTransport_IPL4_send(in integer pl_connId,in ProtoTuple pl_proto,in octetstring pl_msg)
}
@enduml
******************************************************************/
///////////////////////////////////////////////////////////
// Type: EPTF_COAP_LGen_CT
//
// Purpose:
// COAP local transport component
//
// Class:
// (see EPTF_COAP_LocalTransport_Definitions.EPTF_COAP_LocalTransport_CT.jpg)
//
// Extensions:
// - <EPTF_COAP_Transport_Provider_CT>
// - <EPTF_TransportIPL4_CT>
// - <EPTF_Base_CT>
// - <EPTF_Logging_CT>
// - <EPTF_Scheduler_CT>
//
// Ports:
// -
//
// Timers:
// -
//
// Variables:
// v_EPTF_COAP_LocalTransport_initialized - *boolean* - Flag to indicate if the init function was already called
// v_EPTF_COAP_LocalTransport_loggingMaskId - *integer* - logging mask id
// v_EPTF_COAP_Transport_stats - <EPTF_COAP_Transport_Statistics> - Counters for transport statistics
//
// Instance databases:
// v_COAP_LocalTransport_localSocketDB - <SocketDB> - Storing the managed transport endpoints
//
// Related Functions:
// - <f_EPTF_COAP_LocalTransport_init> ()
// - <f_EPTF_COAP_LocalTransport_initLogging> ()
// - <f_EPTF_COAP_LocalTransport_cleanup> ()
// - <f_EPTF_COAP_IPL4asp_getMsgLen> (in *octetstring* stream, inout <ro_integer> args)
// - <f_EPTF_COAP_IPL4asp_handleEvent> (...)
// - <f_EPTF_COAP_IPL4asp_handleMessage> (...)
// - <f_EPTF_COAP_LocalTransport_send> (in <EPTF_COAP_PDU> pl_msg)
// - <f_EPTF_COAP_LocalTransport_transportApiRequest> (<EPTF_COAP_Transport_Request> pl_req)
// - <f_EPTF_COAP_LocalTransport_startSocket> (in <Socket> p_sock, in <ProtoTuple> p_proto, in *integer* p_eIdx, inout *integer* p_idx)
// - <f_EPTF_COAP_LocalTransport_startDTLS> (in <EPTF_COAP_Transport_dtlsConnect> p_params, in *integer* p_eIdx, inout *integer* p_idx)
// - <f_EPTF_COAP_LocalTransport_IPL4_sendTo> (...)
// - <f_EPTF_COAP_LocalTransport_IPL4_send> (in *integer* pl_connId,in <ProtoTuple> pl_proto, in *octetstring* pl_msg)
///////////////////////////////////////////////////////////
type component EPTF_COAP_LocalTransport_CT
extends EPTF_COAP_Transport_Provider_CT, EPTF_Base_CT,
EPTF_Logging_CT, EPTF_TransportIPL4_CT, EPTF_Scheduler_CT
{
var boolean v_EPTF_COAP_LocalTransport_initialized := false;
var integer v_EPTF_COAP_LocalTransport_loggingMaskId;
var SocketEntry v_COAP_LocalTransport_currentSocket;
// database:
var SocketDB v_COAP_LocalTransport_localSocketDB;
// statistics:
var EPTF_COAP_Transport_Statistics v_EPTF_COAP_Transport_stats;
}
/*****************************************************************
@startuml EPTF_COAP_LocalTransport_Definitions.SocketEntry.jpg
class SocketEntry {
Socket addr
DTLSConnection dtls
ProtoTuple proto
ConnectionId connId
SocketState state
integer eId
f_EPTF_COAP_SocketEntry_hash(in SocketEntry p_entry)
f_EPTF_COAP_Socket_hash(Socket p_sock)
}
@enduml
******************************************************************/
///////////////////////////////////////////////////////////
// Type: SocketEntry
//
// Purpose:
// Storing the transport related data of a COAP transport endpoint
//
// Class:
// (see EPTF_COAP_LocalTransport_Definitions.SocketEntry.jpg)
//
// Elements:
// addr - <Socket> - local address and local port
// dtls - <DTLSConnection> - in case DTLS (PSK) is used, the remote address and port with keys are stored here
// proto - <ProtoTuple> - transport protocol description
// connId - <ConnectionId> - connection id from the IPL4 transport layer
// state - <SocketState> - state of the socket
// eIdx - <integer> - the index of the entity (COAP device) who owns this socket
//
// Related Functions:
// - <f_EPTF_COAP_SocketEntry_hash> (in <SocketEntry> p_entry)
// - <f_EPTF_COAP_Socket_hash> (<Socket> p_sock)
///////////////////////////////////////////////////////////
type record SocketEntry
{
Socket addr,
DTLSConnection dtls optional,
ProtoTuple proto,
ConnectionId connId,
SocketState state,
integer eIdx
}
///////////////////////////////////////////////////////////
// Enum: SocketState
//
// Purpose:
// States of a <SocketEntry>
//
// Elements:
// - UNUSED
// - CLOSED
// - OPENED
// - TEMPORARY_UNAVAILABLE
///////////////////////////////////////////////////////////
type enumerated SocketState
{
UNUSED,
CLOSED,
OPENED,
TEMPORARY_UNAVAILABLE
}
const SocketEntry c_SocketEntry_init :=
{
addr := {
hostName := "",
portNumber := -1
},
dtls := omit,
proto := { udp := {} },
connId := -1,
state := UNUSED,
eIdx := -1
}
///////////////////////////////////////////////////////////
// Type: SocketEntry_List
//
// Purpose:
// List of <SocketEntry>
///////////////////////////////////////////////////////////
type record of SocketEntry SocketEntry_List;
/*****************************************************************
@startuml EPTF_COAP_LocalTransport_Definitions.SocketDB.jpg
class SocketDB {
EPTF_FreeBusyQueue queue
SocketEntry_List data
integer hashRef
integer connId2eIdx_hashRef
f_EPTF_COAP_LocalTransport_socketDB_init()
f_EPTF_COAP_LocalTransport_socketDB_cleanUp()
f_EPTF_COAP_LocalTransport_socketDB_add(in SocketEntry p_entry)
f_EPTF_COAP_LocalTransport_socketDB_lookUp_localAddr(in Socket p_localAddr)
f_EPTF_COAP_LocalTransport_socketDB_lookUp_dtlsConnection(in Socket p_local, in Socket p_remote)
f_EPTF_COAP_LocalTransport_socketDB_lookUp_connId(in integer p_connId)
f_EPTF_COAP_LocalTransport_socketDB_get(in integer p_idx, inout SocketEntry p_sock)
f_EPTF_COAP_LocalTransport_socketDB_remove(in integer p_idx)
}
@enduml
******************************************************************/
///////////////////////////////////////////////////////////
// Type: SocketDB
//
// Purpose:
// Storing <SocketEntry> instances
//
// Class:
// (see EPTF_COAP_LocalTransport_Definitions.SocketDB.jpg)
//
// Elements:
// queue - <EPTF_FreeBusyQueue> - FBQ for the stored elements
// data - <COAP_Transaction_List> - elements
// hashRef - *integer* - hash id of the hash map
// connId2eIdx_hashRef - *integer* - hash id of the int2int hash map where key: connId -> value: eIdx
//
// Related Functions:
// - <f_EPTF_COAP_LocalTransport_socketDB_init> ()
// - <f_EPTF_COAP_LocalTransport_socketDB_cleanUp> ()
// - <f_EPTF_COAP_LocalTransport_socketDB_add> (in <SocketEntry> p_entry)
// - <f_EPTF_COAP_LocalTransport_socketDB_lookUp_localAddr> (in <Socket> p_localAddr)
// - <f_EPTF_COAP_LocalTransport_socketDB_lookUp_dtlsConnection> (in <Socket> p_local, in <Socket> p_remote)
// - <f_EPTF_COAP_LocalTransport_socketDB_lookUp_connId> (in *integer* p_connId)
// - <f_EPTF_COAP_LocalTransport_socketDB_get> (in *integer* p_idx, inout <SocketEntry> p_sock)
// - <f_EPTF_COAP_LocalTransport_socketDB_remove> (in *integer* p_idx)
///////////////////////////////////////////////////////////
type record SocketDB
{
EPTF_FreeBusyQueue queue,
SocketEntry_List data,
integer hashRef,
integer connId2eIdx_hashRef
}
const charstring c_EPTF_COAP_LocalTransport_SocketDB := "EPTF_COAP_LocalTransport_SocketDB";
const charstring c_EPTF_COAP_LocalTransport_SocketDB_connId2eIdx_hashRef := "EPTF_COAP_LocalTransport_SocketDB_connId2eIdx_hashRef";
/*****************************************************************
@startuml EPTF_COAP_LocalTransport_Definitions.DTLSConnection.jpg
class DTLSConnection {
Socket remoteAddr
charstring pskIndetity
charstring pskKey
f_EPTF_COAP_DTLSConnection_hash(in Socket p_local, in Socket p_remote)
}
@enduml
******************************************************************/
///////////////////////////////////////////////////////////
// Type: DTLSConnection
//
// Purpose:
// Storing the DTLS transport related data of a COAP transport endpoint
//
// Class:
// (see EPTF_COAP_LocalTransport_Definitions.DTLSConnection.jpg)
//
// Elements:
// remoteAddr - <Socket> - remote address and remote port of the DTLS connection
// pskIndetity - *charstring* - identity used for PSK authnetication
// pskKey - *charstring* - key used for PSK authnetication
//
// Related Functions:
// - <f_EPTF_COAP_DTLSConnection_hash> (in <Socket> p_local, in <Socket> p_remote)
///////////////////////////////////////////////////////////
type record DTLSConnection
{
Socket remoteAddr,
charstring pskIndetity optional,
charstring pskKey optional
}
const DTLSConnection c_DTLSConnection_init :=
{
remoteAddr := {hostName := "", portNumber := -1 },
pskIndetity := omit,
pskKey := omit
}
/*****************************************************************
@startuml EPTF_COAP_LocalTransport_Definitions.EPTF_COAP_Transport_Statistics.jpg
class EPTF_COAP_Transport_Statistics {
integer nofOpenConnections
integer nofTransportWarnings
float nofReceivedMessages
float nofSentMessages
float nofReceivedBytes
float nofSentBytes
}
@enduml
******************************************************************/
///////////////////////////////////////////////////////////
// Type: EPTF_COAP_Transport_Statistics
//
// Purpose:
// Storing counters for transport related statistics
//
// Class:
// (see EPTF_COAP_LocalTransport_Definitions.EPTF_COAP_Transport_Statistics.jpg)
//
// Elements:
// nofOpenConnections - *integer* - number of open connection
// nofTransportWarnings - *integer* - number of transport warnings issued so far during the execution
// nofReceivedMessages - *float* - number of received messages
// nofSentMessages - *float* - number of sent messages
// nofReceivedBytes - *float* - number of received bytes
// nofSentBytes - *float* - number of sent bytes
///////////////////////////////////////////////////////////
type record EPTF_COAP_Transport_Statistics
{
integer nofOpenSockets,
integer nofTransportWarnings,
float nofReceivedMessages,
float nofSentMessages,
float nofReceivedBytes,
float nofSentBytes
}
const EPTF_COAP_Transport_Statistics c_EPTF_COAP_Transport_Statistics_empty :=
{
nofOpenSockets := 0,
nofTransportWarnings := 0,
nofReceivedMessages := 0.0,
nofSentMessages := 0.0,
nofReceivedBytes := 0.0,
nofSentBytes := 0.0
}
}