aboutsummaryrefslogtreecommitdiffstats
path: root/library/ICMP_Templates.ttcn
diff options
context:
space:
mode:
Diffstat (limited to 'library/ICMP_Templates.ttcn')
-rw-r--r--library/ICMP_Templates.ttcn96
1 files changed, 96 insertions, 0 deletions
diff --git a/library/ICMP_Templates.ttcn b/library/ICMP_Templates.ttcn
new file mode 100644
index 00000000..cf88e93d
--- /dev/null
+++ b/library/ICMP_Templates.ttcn
@@ -0,0 +1,96 @@
+/* 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;
+ }
+} \ No newline at end of file