fixeria has uploaded this change for review.

View Change

WIP

Change-Id: I6dfed05adb332c29404997ea7dc93ec3dabfc43a
---
M start-testsuite.sh
M stp/STP_Tests.ttcn
M stp/STP_Tests_M3UA.ttcn
M ttcn3-tcpdump-start.sh
M ttcn3-tcpdump-stop.sh
5 files changed, 141 insertions(+), 33 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/99/36099/1
diff --git a/start-testsuite.sh b/start-testsuite.sh
index 4b88501..6ffacd2 100755
--- a/start-testsuite.sh
+++ b/start-testsuite.sh
@@ -50,8 +50,8 @@
ulimit -n 100000

# below is for the debian packages
-TTCN3_BIN_DIR="${TTCN3_BIN_DIR:-/usr/bin}"
-TITAN_LIBRARY_PATH="${TITAN_LIBRARY_PATH:-/usr/lib/titan:/usr/ttcn3/lib}"
+TTCN3_BIN_DIR="${TTCN3_DIR}/bin"
+TITAN_LIBRARY_PATH="${TTCN3_DIR}/lib"
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$SUITE_DIR:$TITAN_LIBRARY_PATH" "$TTCN3_BIN_DIR/ttcn3_start" $SUITE $CFG $TEST

expected="$SUITE_DIR/expected-results.xml"
diff --git a/stp/STP_Tests.ttcn b/stp/STP_Tests.ttcn
index e2e5336..8c6a065 100644
--- a/stp/STP_Tests.ttcn
+++ b/stp/STP_Tests.ttcn
@@ -60,6 +60,34 @@
}
}

+/* Test routing of SCCP between an M3UA-o-SCTP and an M3UA-o-TCP */
+testcase TC_m3ua_tcp() runs on IPA_M3UA_CT {
+ var OCT4 rctx_sender := int2oct(1023, 4);
+ var OCT4 pc_sender := int2oct(23, 4);
+ var OCT4 pc_receiver := int2oct(5, 4);
+
+ f_init_m3ua();
+ f_init_ipa();
+
+ f_connect_ipa(3);
+ f_M3UA_asp_up_act(0, omit, omit); // TODO: rctx
+
+ /* send a well-formed, encoded SCCP message via M3UA */
+ var octetstring data := f_rnd_octstring_rnd_len(100);
+ var SCCP_PAR_Address called := valueof(ts_SccpAddr_GT('1234'H));
+ var SCCP_PAR_Address calling := valueof(ts_SccpAddr_GT('5678'H));
+ var PDU_SCCP sccp := valueof(ts_SCCP_UDT(called, calling, data));
+ var octetstring sccp_enc := enc_PDU_SCCP(sccp);
+ var template (value) M3UA_Protocol_Data tx_pd;
+ tx_pd := ts_M3UA_protocol_data(pc_sender, pc_receiver, c_M3UA_SI_SCCP, '00'O, '00'O, '00'O, sccp_enc);
+ f_M3UA_send(0, ts_M3UA_DATA(rctx_sender, tx_pd), 1);
+
+ /* expect to receive it via IPA */
+ // f_IPA_exp(3, sccp_enc);
+
+ f_clear_m3ua();
+}
+
/* Test routing of SCCP between an M3UA and an IPA ASP */
testcase TC_m3ua_to_ipa() runs on IPA_M3UA_CT {
var OCT4 rctx_sender := int2oct(1023, 4);
diff --git a/stp/STP_Tests_M3UA.ttcn b/stp/STP_Tests_M3UA.ttcn
index 5af894a..8592d4a 100644
--- a/stp/STP_Tests_M3UA.ttcn
+++ b/stp/STP_Tests_M3UA.ttcn
@@ -45,41 +45,47 @@
M3uaConfigs mp_m3ua_configs := {
/* as-sender: One ASP within AS */
{
- remote_sctp_port := 2905,
- local_sctp_port := 9999,
+ use_tcp := false,
+ remote_port := 2905,
+ local_port := 9999,
point_code := 23,
routing_ctx := 1023
},
/* as-receiver: Two ASP within AS */
{
- remote_sctp_port := 2905,
- local_sctp_port := 10000,
+ use_tcp := false,
+ remote_port := 2905,
+ local_port := 10000,
point_code := 42,
routing_ctx := 1042
}, {
- remote_sctp_port := 2905,
- local_sctp_port := 10001,
+ use_tcp := false,
+ remote_port := 2905,
+ local_port := 10001,
point_code := 42,
routing_ctx := 1042
},
/* as-client: One ASP within AS */
{
- remote_sctp_port := 2906,
- local_sctp_port := 10002,
+ use_tcp := false,
+ remote_port := 2906,
+ local_port := 10002,
point_code := 55,
routing_ctx := 1055
},
/* as-client60-norctx */
{
- remote_sctp_port := 2907,
- local_sctp_port := 11060,
+ use_tcp := false,
+ remote_port := 2907,
+ local_port := 11060,
point_code := 60,
routing_ctx := -
},
/* as-client61-norctx */
{
- remote_sctp_port := 2907,
- local_sctp_port := 11061,
+ use_tcp := false,
+ remote_port := 2907,
+ local_port := 11061,
point_code := 61,
routing_ctx := -
}
@@ -89,10 +95,12 @@
}

type record M3uaConfig {
- /* STP-side SCTP port for M3UA */
- integer remote_sctp_port,
+ /* use TCP (true) or SCTP (false) */
+ boolean use_tcp,
+ /* STP-side SCTP (or TCP) port for M3UA */
+ integer remote_port,
/* local M3UA base port on TTCN3 side */
- integer local_sctp_port,
+ integer local_port,
/* point code routed via this M3U */
integer point_code,
/* associated routing context */
@@ -119,7 +127,7 @@
sctpPeerAddrChange := ?
}
}
-private template PortEvent tr_SctpConnOpened := {
+private template PortEvent tr_ConnOpened := {
connOpened := ?
}

@@ -137,9 +145,13 @@
}
}

-friend function f_M3UA_send(integer idx, template (present) PDU_M3UA msg, template integer stream := 0)
+friend function f_M3UA_send(integer idx, template (present) PDU_M3UA msg, integer stream := 0)
runs on RAW_M3UA_CT {
- M3UA[idx].send(t_M3UA_Send(g_m3ua_conn_id[idx], msg, stream));
+ if (mp_m3ua_configs[idx].use_tcp) {
+ M3UA[idx].send(t_M3UA_Send(g_m3ua_conn_id[idx], msg, omit));
+ } else {
+ M3UA[idx].send(t_M3UA_Send(g_m3ua_conn_id[idx], msg, stream));
+ }
}

friend function f_M3UA_exp(integer idx, template (present) PDU_M3UA msg) runs on RAW_M3UA_CT {
@@ -192,7 +204,7 @@
assocId := omit
};

-friend function f_M3UA_connect(integer i) runs on RAW_M3UA_CT {
+friend function f_M3UA_connect_sctp(integer i) runs on RAW_M3UA_CT {
var Result res;
var Option opt_add_local_addrs;
var OptionList opt_list := {};
@@ -213,15 +225,15 @@

if (lengthof(mp_stp_m3ua_ip) > 1) {
for (var integer j := 1; j < lengthof(mp_stp_m3ua_ip); j := j + 1) {
- var Socket sk := valueof(ts_Socket(mp_stp_m3ua_ip[j], m3cfg.remote_sctp_port));
+ var Socket sk := valueof(ts_Socket(mp_stp_m3ua_ip[j], m3cfg.remote_port));
opt_add_remote_addrs[j - 1] := sk;
}
} else {
opt_add_remote_addrs := omit;
}

- res := M3UA_CodecPort_CtrlFunct.f_IPL4_connect(M3UA[i], mp_stp_m3ua_ip[0], m3cfg.remote_sctp_port,
- mp_local_m3ua_ip[0], m3cfg.local_sctp_port, 0,
+ res := M3UA_CodecPort_CtrlFunct.f_IPL4_connect(M3UA[i], mp_stp_m3ua_ip[0], m3cfg.remote_port,
+ mp_local_m3ua_ip[0], m3cfg.local_port, 0,
{sctp:=valueof(ts_SCTP(3, 0, opt_add_remote_addrs))},
opt_list);
if (not ispresent(res.connId)) {
@@ -231,9 +243,34 @@
g_m3ua_conn_id[i] := res.connId;
}

+friend function f_M3UA_connect_tcp(integer i) runs on RAW_M3UA_CT {
+ var M3uaConfig m3cfg := mp_m3ua_configs[i];
+ var Result res;
+
+ if (lengthof(mp_local_m3ua_ip) == 0 or lengthof(mp_stp_m3ua_ip) == 0) {
+ setverdict(fail, "Empty local or remote address trying to connect TCP socket: ",
+ mp_local_m3ua_ip, " / ", mp_stp_m3ua_ip);
+ mtc.stop;
+ }
+
+ res := M3UA_CodecPort_CtrlFunct.f_IPL4_connect(M3UA[i], mp_stp_m3ua_ip[0], m3cfg.remote_port,
+ mp_local_m3ua_ip[0], m3cfg.local_port, 0,
+ {tcp:={}});
+ if (not ispresent(res.connId)) {
+ setverdict(fail, "Could not connect M3UA socket, check your configuration");
+ mtc.stop;
+ }
+ g_m3ua_conn_id[i] := res.connId;
+ M3UA_CodecPort.f_set_tcp_segmentation(M3UA[i], res.connId);
+}
+
friend function f_M3UA_close(integer i) runs on RAW_M3UA_CT {
var Result res;
- res := M3UA_CodecPort_CtrlFunct.f_IPL4_close(M3UA[i], g_m3ua_conn_id[i], {sctp:=valueof(ts_SCTP)});
+ if (mp_m3ua_configs[i].use_tcp) {
+ res := M3UA_CodecPort_CtrlFunct.f_IPL4_close(M3UA[i], g_m3ua_conn_id[i], {tcp:={}});
+ } else {
+ res := M3UA_CodecPort_CtrlFunct.f_IPL4_close(M3UA[i], g_m3ua_conn_id[i], {sctp:=valueof(ts_SCTP)});
+ }
g_m3ua_conn_id[i] := 0;
}

@@ -255,12 +292,20 @@
opt_list := {opt_add_local_addrs};
}

- res := M3UA_CodecPort_CtrlFunct.f_IPL4_listen(M3UA[i], mp_local_m3ua_ip[0], m3cfg.local_sctp_port,
- {sctp:=valueof(ts_SCTP)}, opt_list);
+ if (mp_m3ua_configs[i].use_tcp) {
+ res := M3UA_CodecPort_CtrlFunct.f_IPL4_listen(M3UA[i], mp_local_m3ua_ip[0], m3cfg.local_port,
+ {tcp:={}});
+ } else {
+ res := M3UA_CodecPort_CtrlFunct.f_IPL4_listen(M3UA[i], mp_local_m3ua_ip[0], m3cfg.local_port,
+ {sctp:=valueof(ts_SCTP)}, opt_list);
+ }
if (not ispresent(res.connId)) {
setverdict(fail, "Could not bind M3UA socket, check your configuration");
mtc.stop;
}
+ if (mp_m3ua_configs[i].use_tcp) {
+ M3UA_CodecPort.f_set_tcp_segmentation(M3UA[i], res.connId);
+ }
}

friend function f_init_m3ua(boolean ignore_ssnm := true) runs on RAW_M3UA_CT {
@@ -275,7 +320,11 @@

for (i := 0; i < NR_M3UA; i:=i+1) {
map(self:M3UA[i], system:M3UA_CODEC_PT);
- f_M3UA_connect(i);
+ if (mp_m3ua_configs[i].use_tcp) {
+ f_M3UA_connect_tcp(i);
+ } else {
+ f_M3UA_connect_sctp(i);
+ }
}
}

@@ -294,15 +343,15 @@

friend function f_init_m3ua_srv() runs on RAW_M3UA_CT {
var integer i;
- var PortEvent sctp_evt;
+ var PortEvent port_evt;

for (i := NR_M3UA; i < NR_M3UA+NR_M3UA_SRV; i:=i+1) {
map(self:M3UA[i], system:M3UA_CODEC_PT);
/* bind+ listen */
f_M3UA_listen(i);
/* wait for accept() */
- M3UA[i].receive(tr_SctpConnOpened) -> value sctp_evt {
- g_m3ua_conn_id[i] := sctp_evt.connOpened.connId;
+ M3UA[i].receive(tr_ConnOpened) -> value port_evt {
+ g_m3ua_conn_id[i] := port_evt.connOpened.connId;
}
}
}
@@ -982,12 +1031,30 @@
f_M3UA_exp(0, tr_M3UA_SCON({adv_pc}, rctx0));
}

+private function f_asp_cfg_str(charstring asp_name, in M3uaConfig cfg)
+return charstring {
+ var charstring str;
+
+ str := "asp " & asp_name;
+ str := str & " " & int2str(cfg.local_port);
+ str := str & " " & int2str(cfg.remote_port);
+ str := str & " m3ua";
+
+ if (cfg.use_tcp) {
+ str := str & " tcp";
+ }
+
+ return str;
+}
+
private function f_quirk(charstring quirk) runs on RAW_M3UA_CT {
- f_vty_config2(VTY, {"cs7 instance 0", "asp asp-client0 10002 2906 m3ua"}, "quirk " & quirk);
+ var charstring asp_cfg_str := f_asp_cfg_str("asp-client0", mp_m3ua_configs[3]);
+ f_vty_config2(VTY, {"cs7 instance 0", asp_cfg_str}, "quirk " & quirk);
}

private function f_no_quirk(charstring quirk) runs on RAW_M3UA_CT {
- f_vty_config2(VTY, {"cs7 instance 0", "asp asp-client0 10002 2906 m3ua"}, "no quirk " & quirk);
+ var charstring asp_cfg_str := f_asp_cfg_str("asp-client0", mp_m3ua_configs[3]);
+ f_vty_config2(VTY, {"cs7 instance 0", asp_cfg_str}, "no quirk " & quirk);
}

/* quirk 'no_notify': Expect inbound connection from ASP/SCTP-client, followed by ASP-UP + ASP-ACT */
diff --git a/ttcn3-tcpdump-start.sh b/ttcn3-tcpdump-start.sh
index c4905d9..003d439 100755
--- a/ttcn3-tcpdump-start.sh
+++ b/ttcn3-tcpdump-start.sh
@@ -36,6 +36,8 @@
TTCN3_PCAP_PATH=/tmp
fi

+exit
+
kill_rm_pidfile $PIDFILE_NETCAT
kill_rm_pidfile $PIDFILE_PCAP

diff --git a/ttcn3-tcpdump-stop.sh b/ttcn3-tcpdump-stop.sh
index 82d3a4f..0a13841 100755
--- a/ttcn3-tcpdump-stop.sh
+++ b/ttcn3-tcpdump-stop.sh
@@ -54,6 +54,8 @@
fi
fi

+exit
+
# Wait for up to 2 seconds if we keep receiving traffinc from packet dumper,
# otherwise we might lose last packets from test.
i=0

To view, visit change 36099. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I6dfed05adb332c29404997ea7dc93ec3dabfc43a
Gerrit-Change-Number: 36099
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de>
Gerrit-MessageType: newchange