From 599faa1d1882cc35114c88727714e51a6a1bad95 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 17 Jul 2017 21:49:24 +0200 Subject: [PATCH] Add LAPDm test case about SABM contention --- lapd/L1CTL_Test.ttcn | 48 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/lapd/L1CTL_Test.ttcn b/lapd/L1CTL_Test.ttcn index acd19cc00..e780de825 100644 --- a/lapd/L1CTL_Test.ttcn +++ b/lapd/L1CTL_Test.ttcn @@ -44,7 +44,7 @@ module L1CTL_Test { lapdm := frame } /* template for a valid SABM frame */ - template LapdmFrame LAPDm_B_SABM(template GsmSapi sapi, template octetstring payload) := { + template LapdmFrame LAPDm_B_SABM(template GsmSapi sapi, octetstring payload) := { b := { addr := tr_LapdmAddr(sapi, false), ctrl := t_LapdmCtrlSABM(true), @@ -56,7 +56,19 @@ module L1CTL_Test { } /* template for a valid UA frame */ - template LapdmFrame LAPDm_B_UA(template GsmSapi sapi, template octetstring payload) := { + template LapdmFrame tr_LAPDm_B_UA(template GsmSapi sapi, template octetstring payload) := { + b := { + addr := tr_LapdmAddr(sapi, false), + ctrl := t_LapdmCtrlUA(true), + len := ?, + m := false, + el := 1, + payload := payload + } + } + + /* template for a valid UA frame */ + template LapdmFrame LAPDm_B_UA(template GsmSapi sapi, octetstring payload) := { b := { addr := tr_LapdmAddr(sapi, false), ctrl := t_LapdmCtrlUA(true), @@ -68,7 +80,7 @@ module L1CTL_Test { } /* template for a valid UI frame */ - template LapdmFrame LAPDm_B_UI(template GsmSapi sapi, template octetstring payload) := { + template LapdmFrame LAPDm_B_UI(template GsmSapi sapi, octetstring payload) := { b := { addr := tr_LapdmAddr(sapi, true), ctrl := t_LapdmCtrlUI(false), @@ -130,6 +142,33 @@ module L1CTL_Test { setverdict(pass); } + testcase TC_sabm_contention() runs on dummy_CT { + var LAPDm_ph_data phd; + const octetstring payload := '0102030405'O; + const GsmSapi sapi := 0; + const boolean use_sacch := false; + timer T := 5.0; + + f_init(); + + f_establish_dcch(); + /* first frame is our real SABM */ + LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_SABM(sapi, payload))); + /* second frame is a SABM with different payload, which BTS has to ignore according to 8.4.1.4 */ + LAPDM.send(t_PH_DATA(sapi, use_sacch, LAPDm_B_SABM(sapi, 'ABCDEF'O))); + log("====> expecting ", t_PH_DATA(sapi, use_sacch, LAPDm_B_UA(sapi, payload))); + T.start + alt { + [] LAPDM.receive(t_PH_DATA(?, use_sacch, LAPDm_B_UA(sapi, payload))) { setverdict(pass); repeat; } + [] LAPDM.receive(t_PH_DATA(?, use_sacch, tr_LAPDm_B_UA(sapi, ?))) { + setverdict(fail, "Second SABM was responded to during contention resolution"); + } + [] LAPDM.receive { repeat }; + [] T.timeout { } + } + f_release_dcch(); + } + testcase TC_foo() runs on dummy_CT { /* @@ -155,10 +194,9 @@ module L1CTL_Test { control { execute(TC_foo()); execute(TC_sabm_ua_dcch_sapi0()); -/* execute(TC_sabm_ua_dcch_sapi0_nopayload()); execute(TC_sabm_ua_dcch_sapi3()); execute(TC_sabm_ua_dcch_sapi4()); -*/ + execute(TC_sabm_contention()); } }