96 lines
2.4 KiB
Plaintext
96 lines
2.4 KiB
Plaintext
/* ICMP Templates in TTCN-3
|
|
* (C) 2024 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
|
|
* All rights reserved.
|
|
*
|
|
* Released under the terms of GNU General Public License, Version 2 or
|
|
* (at your option) any later version.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
module ICMP_Templates {
|
|
|
|
import from General_Types all;
|
|
import from IP_Types all;
|
|
import from ICMP_Types all;
|
|
|
|
/* template for sending an ICMPv4 echo request */
|
|
template (value) PDU_ICMP ts_ICMPv4_ERQ(octetstring data := ''O) := {
|
|
echo := {
|
|
type_field := 8,
|
|
code := 0,
|
|
checksum := '0000'O,
|
|
identifier := '0345'O,
|
|
sequence_number := '0001'O,
|
|
data := data
|
|
}
|
|
}
|
|
|
|
/* template for receiving/matching an ICMPv4 echo request */
|
|
template (present) PDU_ICMP tr_ICMPv4_ERQ := {
|
|
echo := {
|
|
type_field := 8,
|
|
code := 0,
|
|
checksum := ?,
|
|
identifier := ?,
|
|
sequence_number := ?,
|
|
data := ?
|
|
}
|
|
}
|
|
|
|
/* template for receiving/matching an ICMPv4 echo reply */
|
|
template (present) PDU_ICMP tr_ICMPv4_ERP(template octetstring data := *) := {
|
|
echo_reply := {
|
|
type_field := 0,
|
|
code := 0,
|
|
checksum := ?,
|
|
identifier := ?,
|
|
sequence_number := ?,
|
|
data := data
|
|
}
|
|
}
|
|
|
|
/* template for receiving/matching an ICMPv6 Destination Unreachable */
|
|
template (present) PDU_ICMP tr_ICMPv4_DU := {
|
|
destination_unreachable := {
|
|
type_field := 1,
|
|
code := ?,
|
|
checksum := ?,
|
|
unused := ?,
|
|
original_ip_msg := ?
|
|
}
|
|
}
|
|
|
|
/* template to construct IPv4_packet from input arguments, ready for use in f_IPv4_enc() */
|
|
template (value) IPv4_packet ts_IP4(OCT4 srcaddr, OCT4 dstaddr, LIN1 proto, LIN2_BO_LAST tlen, octetstring payload) := {
|
|
header := {
|
|
ver := 4,
|
|
hlen := 5,
|
|
tos := 0,
|
|
tlen := tlen,
|
|
id := 35902,
|
|
res := '0'B,
|
|
dfrag := '1'B,
|
|
mfrag := '0'B,
|
|
foffset := 0,
|
|
ttl := 64,
|
|
proto := proto,
|
|
cksum := 0,
|
|
srcaddr := srcaddr,
|
|
dstaddr := dstaddr
|
|
},
|
|
ext_headers := omit,
|
|
payload := payload
|
|
}
|
|
|
|
/* Send an ICMPv4 echo msg through GTP given pdp ctx, and ip src and dst addr */
|
|
function f_gen_icmpv4_echo(OCT4 saddr, OCT4 daddr, octetstring pl := ''O) return octetstring {
|
|
var octetstring tmp := f_enc_PDU_ICMP(valueof(ts_ICMPv4_ERQ(pl)));
|
|
var IPv4_packet ip4 := valueof(ts_IP4(saddr, daddr, 1, 50, tmp));
|
|
var octetstring data := f_IPv4_enc(ip4);
|
|
var OCT2 cksum := f_IPv4_checksum(data);
|
|
data[10] := cksum[0];
|
|
data[11] := cksum[1];
|
|
return data;
|
|
}
|
|
} |