Add LAPDm test case about SABM contention

This commit is contained in:
Harald Welte 2017-07-17 21:49:24 +02:00
parent dca7e45ce8
commit 599faa1d18
1 changed files with 43 additions and 5 deletions

View File

@ -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());
}
}