diff options
Diffstat (limited to 'library/ICMP_Templates.ttcn')
-rw-r--r-- | library/ICMP_Templates.ttcn | 96 |
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 |