From bda04326e53bd3826b507a1db5e1ce0301a64648 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 9 Jul 2017 20:27:32 +0100 Subject: [PATCH] add TCP option encoding/decoding --- testproject/TCP_Option.ttcn | 76 +++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 testproject/TCP_Option.ttcn diff --git a/testproject/TCP_Option.ttcn b/testproject/TCP_Option.ttcn new file mode 100644 index 0000000..8d71f93 --- /dev/null +++ b/testproject/TCP_Option.ttcn @@ -0,0 +1,76 @@ +/* TCP option parsing/encoding, as this is not handled by * titan.ProtocolModules.TCP itself :( + * (C) 2017 by Harald Welte + * Licensed under Eclipse Public License - v1.0 or GPLv2, at your choice*/ +module TCP_Option { + + type integer uint8_t (0..255) with { variant "FIELDLENGTH(8), BYTEORDER(last)" }; + type integer uint16_t (0..65535) with { variant "FIELDLENGTH(16), BYTEORDER(last)" }; + type integer uint24_t (0..16777215) with { variant "FIELDLENGTH(24), BYTEORDER(last)" }; + type integer uint32_t (0..4294967295) with { variant "FIELDLENGTH(32), BYTEORDER(last)" }; + + type enumerated TCP_Opt_type { end, nop, mss, wscale, sackperm, sack, /* 6..7*/ ts }; + + type record TCP_Opt_end { + uint8_t id + } + + type record TCP_Opt_nop { + uint8_t id + } + + type record TCP_Opt_mss { + uint8_t id, + uint8_t len, + uint16_t mss + } with { variant (len) "LENGTHTO(id, len, mss)" } + + type record TCP_Opt_wscale { + uint8_t id, + uint8_t len, + uint8_t wscale + } with { variant (len) "LENGTHTO(id, len, wscale)" } + + type record TCP_Opt_sackperm { + uint8_t id, + uint8_t len + } with { variant (len) "LENGTHTO(id, len)" } + + type record sack_range { + uint32_t begin, + uint32_t end + } + type record of sack_range sack_range_list; + + type record TCP_Opt_sack { + uint8_t id, + uint8_t len, + sack_range_list list + } with { variant (len) "LENGTHTO(id, len, list)" } + + type record TCP_Opt_ts { + uint8_t id, + uint8_t len, + uint32_t ts, + uint32_t echo_ts + } with { variant (len) "LENGTHTO(id, len, ts, echo_ts)" } + + type union TCP_Option { + TCP_Opt_end end, + TCP_Opt_nop nop, + TCP_Opt_mss mss, + TCP_Opt_wscale wscale, + TCP_Opt_sackperm sackperm, + TCP_Opt_sack sack, + TCP_Opt_ts ts + } with { variant "TAG(end, id = 0; + nop, id = 1; + mss, id = 2; + wscale, id = 3; + sackperm, id = 4; + sack, id = 5; + ts, id = 8)" } + + external function enc_TCP_option(in TCP_Option opt) return octetstring with { extension "prototype(convert) encode(RAW)" }; + external function dec_TCP_option(in octetstring stream) return TCP_Option with { extension "prototype(convert) decode(RAW)" }; + +} with { encode "RAW" }