handover_test: implement as VTY shell
Drop the string arrays, and move the 32 handover tests to separate script files. Instead of the peculiar implementation and instead of cryptic commands, implement the handover test scripts as a VTY. handover_test.c now sets up a VTY with handover testing VTY commands. It also features the complete and unabridged VTY configuration nodes of osmo-bsc itself. That allows dropping various ho script commands. Before: static char *test_case_14[] = { "Handover to congested cell, if RX level is below minimum\n\n" "The better neighbor cell is congested, so no handover is performed.\n" "If the RX level of the current cell drops below minimum acceptable\n" "level, the handover is performed.\n", "create-n-bts", "2", "create-ms", "0", "TCH/F", "AMR", "expect-ts-use", "0", "0", "*", "TCH/F", "-", "-", "-", "-", "-", "-", "set-min-free", "1", "TCH/F", "4", "set-min-free", "1", "TCH/H", "4", "meas-rep", "0","0","1","0", "10","0", "1","0","30", "expect-no-chan", "meas-rep", "0","0","1","0", "9","0", "1","0","30", "expect-chan", "1", "1", "ack-chan", "expect-ho", "0", "1", "ho-complete", "expect-ts-use", "0", "0", "*", "-", "-", "-", "-", "-", "-", "-", "expect-ts-use", "1", "0", "*", "TCH/F", "-", "-", "-", "-", "-", "-", } After: # Handover to congested cell, if RX level is below minimum # The better neighbor cell is congested, so no handover is performed. # If the RX level of the current cell drops below minimum acceptable # level, the handover is performed. create-n-bts 2 set-ts-use trx 0 0 states * TCH/F - - - - - - network bts 1 handover2 min-free-slots tch/f 4 handover2 min-free-slots tch/h 4 meas-rep lchan 0 0 1 0 rxlev 10 rxqual 0 ta 0 neighbors 30 expect-no-chan meas-rep lchan 0 0 1 0 rxlev 9 rxqual 0 ta 0 neighbors 30 expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0 expect-ts-use trx 0 0 states * - - - - - - - expect-ts-use trx 1 0 states * TCH/F - - - - - - Note how osmo-bsc's stock vty config nodes seamlessly integrate in the test steps: just enter a configuration node, modify some values, and indenting trivially takes care of exiting nodes correctly. Running a test manually: ./handover_test test_0123.ho_vty Instead of calling each test separately in testsuite.at, have a handover_tests.sh script that picks up new tests just by presence of files named test*.ho_vty. Rationale: It was considered to move handover tests to the TTCN suite, but there is an advantage in having these C tests: they run super fast and catch bugs even in the gerrit verification job, potentially saving a lot of time. It is a reality that I need more of these tests, for dynamic timeslots and TCH/F <-> TCH/H switches. The way the handover tests are written, as arrays of strings containing cryptic fixed-argument script commands, has been a pain to work with from the start, and now I am no longer willing to endure that pain. Change-Id: Ie238ebe41039d3fa44c9699937589e000883e052
This commit is contained in:
parent
53866d3bf7
commit
1a3eaeff2e
|
@ -21,7 +21,9 @@ AM_LDFLAGS = \
|
|||
$(NULL)
|
||||
|
||||
EXTRA_DIST = \
|
||||
handover_test.ok \
|
||||
handover_tests.sh \
|
||||
handover_tests.ok \
|
||||
$(srcdir)/test*.ho_vty \
|
||||
neighbor_ident_test.ok \
|
||||
neighbor_ident_test.err \
|
||||
$(NULL)
|
||||
|
@ -130,3 +132,4 @@ neighbor_ident_test_LDADD = \
|
|||
.PHONY: update_exp
|
||||
update_exp:
|
||||
$(builddir)/neighbor_ident_test >$(srcdir)/neighbor_ident_test.ok 2>$(srcdir)/neighbor_ident_test.err
|
||||
$(srcdir)/handover_tests.sh $(srcdir) $(builddir) -u
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1 +0,0 @@
|
|||
Test OK
|
|
@ -0,0 +1,33 @@
|
|||
pass test0000.ho_vty
|
||||
pass test0001.ho_vty
|
||||
pass test0002.ho_vty
|
||||
pass test0003.ho_vty
|
||||
pass test0004.ho_vty
|
||||
pass test0005.ho_vty
|
||||
pass test0006.ho_vty
|
||||
pass test0007.ho_vty
|
||||
pass test0008.ho_vty
|
||||
pass test0009.ho_vty
|
||||
pass test0010.ho_vty
|
||||
pass test0011.ho_vty
|
||||
pass test0012.ho_vty
|
||||
pass test0013.ho_vty
|
||||
pass test0014.ho_vty
|
||||
pass test0015.ho_vty
|
||||
pass test0016.ho_vty
|
||||
pass test0017.ho_vty
|
||||
pass test0018.ho_vty
|
||||
pass test0019.ho_vty
|
||||
pass test0020.ho_vty
|
||||
pass test0021.ho_vty
|
||||
pass test0022.ho_vty
|
||||
pass test0023.ho_vty
|
||||
pass test0024.ho_vty
|
||||
pass test0025.ho_vty
|
||||
pass test0026.ho_vty
|
||||
pass test0027.ho_vty
|
||||
pass test0028.ho_vty
|
||||
pass test0029.ho_vty
|
||||
pass test0030.ho_vty
|
||||
pass test0031.ho_vty
|
||||
pass test0032.ho_vty
|
|
@ -0,0 +1,68 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
tests_dir="${1:-.}"
|
||||
build_dir="${2:-.}"
|
||||
update="$3"
|
||||
test -d "$tests_dir"
|
||||
test -d "$build_dir"
|
||||
|
||||
if [ -n "$update" -a "x$update" != "x-u" ]; then
|
||||
echo "unknown argument: $update"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
one_test() {
|
||||
test_path="$1"
|
||||
test_name="$(basename "$test_path")"
|
||||
got_out="$(mktemp "tmp.$test_name.stdout.XXXXX")"
|
||||
got_err="$(mktemp "tmp.$test_name.stderr.XXXXX")"
|
||||
set +e
|
||||
"$build_dir"/handover_test "$test_path" > "$got_out" 2> "$got_err"
|
||||
rc=$?
|
||||
if [ "x$rc" = "x0" ]; then
|
||||
expect_out="$test_path.ok"
|
||||
expect_err="$test_path.err"
|
||||
if [ "x$update" = "x-u" ]; then
|
||||
cp "$got_out" "$expect_out"
|
||||
cp "$got_err" "$expect_err"
|
||||
else
|
||||
if [ -f "$expect_out" ]; then
|
||||
diff -u "$expect_out" "$got_out"
|
||||
rc=$?
|
||||
fi
|
||||
if [ -f "$expect_err" ]; then
|
||||
diff -u "$expect_err" "$got_err"
|
||||
rc2=$?
|
||||
fi
|
||||
if [ "x$rc" = "x0" ]; then
|
||||
rc=$rc2
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
rm "$got_out"
|
||||
rm "$got_err"
|
||||
set -e
|
||||
return $rc
|
||||
}
|
||||
|
||||
results="$(mktemp "tmp.handover_test_results.XXXXX")"
|
||||
for test_path in "$tests_dir"/test*.ho_vty ; do
|
||||
test_name="$(basename "$test_path")"
|
||||
if one_test "$test_path"; then
|
||||
echo "pass $test_name" >> "$results"
|
||||
else
|
||||
echo "FAIL $test_name" >> "$results"
|
||||
fi
|
||||
done
|
||||
set +e
|
||||
cat "$results"
|
||||
failed="$(grep FAIL "$results")"
|
||||
if [ -z "$failed" -a "x$update" = "x-u" ]; then
|
||||
cp "$results" "$tests_dir"/handover_tests.ok
|
||||
fi
|
||||
rm "$results"
|
||||
if [ -n "$failed" ]; then
|
||||
echo "tests failed"
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
|
@ -0,0 +1,6 @@
|
|||
# Stay in better cell
|
||||
# There are many neighbor cells, but only the current cell is the best cell, so no handover is performed
|
||||
create-n-bts 7
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 0 ta 0 neighbors 20 21 18 20 23 19
|
||||
expect-no-chan
|
|
@ -0,0 +1,8 @@
|
|||
# Handover to best better cell
|
||||
# The best neighbor cell is selected
|
||||
create-n-bts 7
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 10 rxqual 0 ta 0 neighbors 20 21 18 20 23 19
|
||||
expect-ho from lchan 0 0 1 0 to lchan 5 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 5 0 states * TCH/F - - - - - -
|
|
@ -0,0 +1,36 @@
|
|||
# Handover and Assignment must be enabled
|
||||
# This test will start with disabled assignment and handover. A
|
||||
# better neighbor cell (assignment enabled) will not be selected and
|
||||
# also no assignment from TCH/H to TCH/F to improve quality. There
|
||||
# will be no handover nor assignment. After enabling assignment on the
|
||||
# current cell, the MS will assign to TCH/F. After enabling handover
|
||||
# in the current cell, but disabling in the neighbor cell, handover
|
||||
# will not be performed, until it is enabled in the neighbor cell too.
|
||||
network
|
||||
handover 0
|
||||
handover2 afs-bias rxlev 5
|
||||
handover2 assignment 0
|
||||
|
||||
create-n-bts 2
|
||||
set-ts-use trx 0 0 states * - - - - TCH/H- - -
|
||||
meas-rep lchan 0 0 5 0 rxlev 0 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
network
|
||||
bts 0
|
||||
handover2 assignment 1
|
||||
meas-rep lchan 0 0 5 0 rxlev 0 rxqual 0 ta 0 neighbors 30
|
||||
expect-ho from lchan 0 0 5 0 to lchan 0 0 1 0
|
||||
expect-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
network
|
||||
bts 0
|
||||
handover 1
|
||||
meas-rep lchan 0 0 1 0 rxlev 0 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
network
|
||||
bts 1
|
||||
handover 1
|
||||
meas-rep lchan 0 0 1 0 rxlev 0 rxqual 0 ta 0 neighbors 30
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# Penalty timer must not run
|
||||
# The MS will try to handover to a better cell, but this will fail.
|
||||
# Even though the cell is still better, handover will not be performed
|
||||
# due to penalty timer after handover failure
|
||||
|
||||
create-n-bts 2
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-chan lchan 1 0 1 0
|
||||
ack-chan
|
||||
expect-ho-req lchan 0 0 1 0
|
||||
ho-failed
|
||||
expect-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
expect-ts-use trx 1 0 states * - - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
|
@ -0,0 +1,20 @@
|
|||
# TCH/H keeping with HR codec
|
||||
# The MS is using half rate V1 codec, but the better cell is congested
|
||||
# at TCH/H slots. As the congestion is removed, the handover takes
|
||||
# place.
|
||||
|
||||
create-n-bts 2
|
||||
network
|
||||
bts 1
|
||||
handover2 min-free-slots tch/h 4
|
||||
codec tch/h HR
|
||||
set-ts-use trx 0 0 states * - - - - TCH/H- - -
|
||||
meas-rep lchan 0 0 5 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
network
|
||||
bts 1
|
||||
handover2 min-free-slots tch/h 3
|
||||
meas-rep lchan 0 0 5 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-ho from lchan 0 0 5 0 to lchan 1 0 5 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * - - - - TCH/H- - -
|
|
@ -0,0 +1,21 @@
|
|||
# TCH/F keeping with FR codec
|
||||
# The MS is using full rate V1 codec, but the better cell is congested
|
||||
# at TCH/F slots. As the congestion is removed, the handover takes
|
||||
# place.
|
||||
|
||||
create-n-bts 2
|
||||
network
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 4
|
||||
codec tch/f FR
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
network
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 3
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# TCH/F keeping with EFR codec
|
||||
# The MS is using full rate V2 codec, but the better cell is congested
|
||||
# at TCH/F slots. As the congestion is removed, the handover takes
|
||||
# place.
|
||||
|
||||
create-n-bts 2
|
||||
network
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 4
|
||||
codec tch/f EFR
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
network
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 3
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
# TCH/F to TCH/H changing with AMR codec
|
||||
# The MS is using AMR V3 codec, the better cell is congested at TCH/F
|
||||
# slots. The handover is performed to non-congested TCH/H slots.
|
||||
|
||||
create-n-bts 2
|
||||
network
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 4
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 5 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * - - - - TCH/H- - -
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
# No handover to a cell with no slots available
|
||||
# If no slot is available, no handover is performed
|
||||
|
||||
create-n-bts 2
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
set-ts-use trx 1 0 states * TCH/F TCH/F TCH/F TCH/F TCH/HH TCH/HH -
|
||||
meas-rep lchan 0 0 1 0 rxlev 0 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# No more parallel handovers, if max_unsync_ho is defined
|
||||
# There are three mobiles that want to handover, but only two can do
|
||||
# it at a time, because the maximum number is limited to two.
|
||||
|
||||
create-n-bts 2
|
||||
network
|
||||
bts 1
|
||||
handover2 max-handovers 2
|
||||
set-ts-use trx 0 0 states * TCH/F TCH/F TCH/F - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 0 rxqual 0 ta 0 neighbors 30
|
||||
expect-chan lchan 1 0 1 0
|
||||
meas-rep lchan 0 0 2 0 rxlev 0 rxqual 0 ta 0 neighbors 30
|
||||
expect-chan lchan 1 0 2 0
|
||||
meas-rep lchan 0 0 3 0 rxlev 0 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
# Hysteresis
|
||||
# If neighbor cell is better, handover is only performed if the
|
||||
# amount of improvement is greater or equal hyteresis
|
||||
|
||||
create-n-bts 2
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 27 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 26 rxqual 0 ta 0 neighbors 30
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# No Hysteresis and minimum RX level
|
||||
# If current cell's RX level is below mimium level, handover must be
|
||||
# performed, no matter of the hysteresis. First do not perform
|
||||
# handover to better neighbor cell, because the hysteresis is not
|
||||
# met. Second do not perform handover because better neighbor cell is
|
||||
# below minimum RX level. Third perform handover because current cell
|
||||
# is below minimum RX level, even if the better neighbor cell (minimum
|
||||
# RX level reached) does not meet the hysteresis.
|
||||
|
||||
create-n-bts 2
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 10 rxqual 0 ta 0 neighbors 11
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 8 rxqual 0 ta 0 neighbors 9
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 9 rxqual 0 ta 0 neighbors 10
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# No handover to congested cell
|
||||
# The better neighbor cell is congested, so no handover is performed.
|
||||
# After the congestion is over, handover will be performed.
|
||||
|
||||
create-n-bts 2
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
network
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 4
|
||||
handover2 min-free-slots tch/h 4
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
network
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 3
|
||||
handover2 min-free-slots tch/h 3
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
# Handover to balance congestion
|
||||
# The current and the better cell are congested, so no handover is
|
||||
# performed. This is because handover would congest the neighbor cell
|
||||
# more. After congestion rises in the current cell, the handover is
|
||||
# performed to balance congestion
|
||||
|
||||
create-n-bts 2
|
||||
create-ms bts 0 TCH/F AMR
|
||||
expect-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/f 4
|
||||
handover2 min-free-slots tch/h 4
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 4
|
||||
handover2 min-free-slots tch/h 4
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
set-ts-use trx 0 0 states * TCH/F TCH/F - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 30
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - TCH/F - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
# Handover to congested cell, if RX level is below minimum
|
||||
# The better neighbor cell is congested, so no handover is performed.
|
||||
# If the RX level of the current cell drops below minimum acceptable
|
||||
# level, the handover is performed.
|
||||
|
||||
create-n-bts 2
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
network
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 4
|
||||
handover2 min-free-slots tch/h 4
|
||||
meas-rep lchan 0 0 1 0 rxlev 10 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 9 rxqual 0 ta 0 neighbors 30
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
# Handover to cell with worse RXLEV, if RXQUAL is below minimum
|
||||
# The neighbor cell has worse RXLEV, so no handover is performed.
|
||||
# If the RXQUAL of the current cell drops below minimum acceptable
|
||||
# level, the handover is performed. It is also required that 10
|
||||
# reports are received, before RXQUAL is checked.
|
||||
#
|
||||
# (See also test 28, which tests for RXQUAL triggering HO to congested cell.)
|
||||
#
|
||||
# TODO: bad RXQUAL may want to prefer assignment within the same cell to avoid interference.
|
||||
# See Performance Enhancements in a Frequency Hopping GSM Network (Nielsen Wigard 2002), Chapter
|
||||
# 2.1.1, "Interference" in the list of triggers on p.157.
|
||||
|
||||
create-n-bts 2
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 6 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 6 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 6 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 6 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 6 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 6 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 6 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 6 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 6 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 6 ta 0 neighbors 30
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# Handover due to maximum TA exceeded
|
||||
# The MS in the current (best) cell has reached maximum allowed timing
|
||||
# advance. No handover is performed until the timing advance exceeds
|
||||
# it. The originating cell is still the best, but no handover is
|
||||
# performed back to that cell, because the penalty timer (due to
|
||||
# maximum allowed timing advance) is running.
|
||||
|
||||
create-n-bts 2
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
network
|
||||
bts 0
|
||||
handover2 maximum distance 5
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 0 ta 5 neighbors 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 0 ta 6 neighbors 20
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 1 0 1 0 rxlev 20 rxqual 0 ta 6 neighbors 30
|
||||
expect-no-chan
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
# Congestion check: No congestion
|
||||
# Three cells have different number of used slots, but there is no
|
||||
# congestion in any of these cells. No handover is performed.
|
||||
|
||||
create-n-bts 3
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/f 2
|
||||
handover2 min-free-slots tch/h 2
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 2
|
||||
handover2 min-free-slots tch/h 2
|
||||
bts 2
|
||||
handover2 min-free-slots tch/f 2
|
||||
handover2 min-free-slots tch/h 2
|
||||
set-ts-use trx 0 0 states * TCH/F TCH/F - - TCH/HH - -
|
||||
set-ts-use trx 1 0 states * TCH/F - - - TCH/H- - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 0 ta 0 neighbors 20 1 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 2 0 rxlev 30 rxqual 0 ta 0 neighbors 20 1 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 5 0 rxlev 30 rxqual 0 ta 0 neighbors 20 1 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 5 1 rxlev 30 rxqual 0 ta 0 neighbors 20 1 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 1 0 1 0 rxlev 30 rxqual 0 ta 0 neighbors 20 1 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 1 0 5 0 rxlev 30 rxqual 0 ta 0 neighbors 20 1 20
|
||||
expect-no-chan
|
||||
congestion-check
|
||||
expect-no-chan
|
||||
expect-ts-use trx 0 0 states * TCH/F TCH/F - - TCH/HH - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - TCH/H- - -
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
# Congestion check: One out of three cells is congested
|
||||
# Three cells have different number of used slots, but there is
|
||||
# congestion at TCH/F in the first cell. Handover is performed with
|
||||
# the best candidate.
|
||||
|
||||
create-n-bts 3
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/f 2
|
||||
handover2 min-free-slots tch/h 2
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 2
|
||||
handover2 min-free-slots tch/h 2
|
||||
bts 2
|
||||
handover2 min-free-slots tch/f 2
|
||||
handover2 min-free-slots tch/h 2
|
||||
set-ts-use trx 0 0 states * TCH/F TCH/F TCH/F - TCH/HH - -
|
||||
set-ts-use trx 1 0 states * TCH/F - - - TCH/H- - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 0 ta 0 neighbors 20 1 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 2 0 rxlev 30 rxqual 0 ta 0 neighbors 20 1 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 3 0 rxlev 30 rxqual 0 ta 0 neighbors 21 1 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 5 0 rxlev 30 rxqual 0 ta 0 neighbors 20 1 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 5 1 rxlev 30 rxqual 0 ta 0 neighbors 20 1 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 1 0 1 0 rxlev 30 rxqual 0 ta 0 neighbors 20 1 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 1 0 5 0 rxlev 30 rxqual 0 ta 0 neighbors 20 1 20
|
||||
expect-no-chan
|
||||
expect-ts-use trx 0 0 states * TCH/F TCH/F TCH/F - TCH/HH - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - TCH/H- - -
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 3 0 to lchan 1 0 2 0
|
||||
expect-ts-use trx 0 0 states * TCH/F TCH/F - - TCH/HH - -
|
||||
expect-ts-use trx 1 0 states * TCH/F TCH/F - - TCH/H- - -
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
# Congestion check: Balancing over congested cells
|
||||
# Two cells are congested, but the second cell is less congested.
|
||||
# Handover is performed to solve the congestion.
|
||||
|
||||
create-n-bts 2
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/f 4
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 4
|
||||
codec tch/f FR
|
||||
set-ts-use trx 0 0 states * TCH/F TCH/F TCH/F - - - -
|
||||
set-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 0 ta 0 neighbors 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 2 0 rxlev 30 rxqual 0 ta 0 neighbors 21
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 3 0 rxlev 30 rxqual 0 ta 0 neighbors 20
|
||||
expect-no-chan
|
||||
meas-rep lchan 1 0 1 0 rxlev 30 rxqual 0 ta 0 neighbors 20
|
||||
expect-no-chan
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 2 0 to lchan 1 0 2 0
|
||||
expect-ts-use trx 0 0 states * TCH/F - TCH/F - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F TCH/F - - - - -
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Congestion check: Solving congestion by handover TCH/F -> TCH/H
|
||||
# Two BTS, one MS in the first congested BTS must handover to
|
||||
# non-congested TCH/H of second BTS, in order to solve congestion
|
||||
|
||||
create-n-bts 2
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/f 4
|
||||
handover2 min-free-slots tch/h 4
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 4
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 5 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * - - - - TCH/H- - -
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# Congestion check: Balancing congestion by handover TCH/F -> TCH/H
|
||||
# Two BTS, one MS in the first congested BTS must handover to
|
||||
# less-congested TCH/H of second BTS, in order to balance congestion
|
||||
|
||||
create-n-bts 2
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/f 4
|
||||
handover2 min-free-slots tch/h 4
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 4
|
||||
handover2 min-free-slots tch/h 4
|
||||
set-ts-use trx 0 0 states * TCH/F TCH/F - - TCH/H- - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - TCH/F - - TCH/H- - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# Congestion check: Upgrading worst candidate from TCH/H -> TCH/F
|
||||
# There is only one BTS. The TCH/H slots are congested. Since
|
||||
# assignment is performed to less-congested TCH/F, the candidate with
|
||||
# the worst RX level is chosen.
|
||||
|
||||
create-n-bts 1
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/f 4
|
||||
handover2 min-free-slots tch/h 4
|
||||
set-ts-use trx 0 0 states * - - - - TCH/HH TCH/H- -
|
||||
meas-rep lchan 0 0 5 0 rxlev 30 rxqual 0 ta 0
|
||||
meas-rep lchan 0 0 5 1 rxlev 34 rxqual 0 ta 0
|
||||
meas-rep lchan 0 0 6 0 rxlev 20 rxqual 0 ta 0
|
||||
expect-no-chan
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 6 0 to lchan 0 0 1 0
|
||||
expect-ts-use trx 0 0 states * TCH/F - - - TCH/HH - -
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
# Story: 'A neighbor is your friend'
|
||||
|
||||
create-n-bts 3
|
||||
|
||||
# Andreas is driving along the coast, on a sunny june afternoon.
|
||||
# Suddenly he is getting a call from his friend and neighbor Axel.
|
||||
#
|
||||
# What happens: Two MS are created, #0 for Axel, #1 for Andreas.
|
||||
# Axel:
|
||||
create-ms bts 2 TCH/F AMR
|
||||
# andreas:
|
||||
create-ms bts 0 TCH/F AMR
|
||||
expect-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
expect-ts-use trx 1 0 states * - - - - - - -
|
||||
expect-ts-use trx 2 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
|
||||
# Axel asks Andreas if he would like to join them for a barbecue.
|
||||
# Axel's house is right in the neighborhood and the weather is fine.
|
||||
# Andreas agrees, so he drives to a close store to buy some barbecue
|
||||
# skewers.
|
||||
#
|
||||
# What happens: While driving, a different cell (mounted atop the
|
||||
# store) becomes better.
|
||||
# drive to bts 1:
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 35
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
expect-ts-use trx 2 0 states * TCH/F - - - - - -
|
||||
|
||||
# While Andreas is walking into the store, Axel asks, if he could also
|
||||
# bring some beer. Andreas has problems understanding him: "I have a
|
||||
# bad reception here. The cell tower is right atop the store, but poor
|
||||
# coverage inside. Can you repeat please?"
|
||||
#
|
||||
# What happens: Inside the store the close cell is so bad, that
|
||||
# handover back to the previous cell is required.
|
||||
# bts 1 becomes bad, so bts 0 helps out:
|
||||
meas-rep lchan 1 0 1 0 rxlev 5 rxqual 0 ta 0 neighbors 20
|
||||
expect-ho from lchan 1 0 1 0 to lchan 0 0 1 0
|
||||
expect-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
expect-ts-use trx 1 0 states * - - - - - - -
|
||||
expect-ts-use trx 2 0 states * TCH/F - - - - - -
|
||||
|
||||
# After Andreas bought skewers and beer, he leaves the store.
|
||||
#
|
||||
# What happens: Outside the store the close cell is better again, so
|
||||
# handover back to the that cell is performed.
|
||||
# bts 1 becomes better again:
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 35
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
expect-ts-use trx 2 0 states * TCH/F - - - - - -
|
||||
|
||||
# bts 2 becomes better:
|
||||
# Andreas drives down to the lake where Axel's house is.
|
||||
#
|
||||
# What happens: There is a small cell at Axel's house, which becomes
|
||||
# better, because the current cell has no good comverage at the lake.
|
||||
meas-rep lchan 1 0 1 0 rxlev 14 rxqual 0 ta 0 neighbors 2 63
|
||||
expect-ho from lchan 1 0 1 0 to lchan 2 0 2 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * - - - - - - -
|
||||
expect-ts-use trx 2 0 states * TCH/F TCH/F - - - - -
|
||||
|
||||
# Andreas wonders why he still has good radio coverage: "Last time it
|
||||
# was so bad". Axel says: "I installed a pico cell in my house,
|
||||
# now we can use our mobile phones down here at the lake."
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
# No (or not enough) measurements for handover
|
||||
# Do not solve congestion in cell, because there is no measurement.
|
||||
# As soon as enough measurements available (1 in our case), perform
|
||||
# handover. Afterwards the old cell becomes congested and the new
|
||||
# cell is not. Do not perform handover until new measurements are
|
||||
# received.
|
||||
#
|
||||
# two cells, first in congested, but no handover:
|
||||
|
||||
create-n-bts 2
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/f 4
|
||||
handover2 min-free-slots tch/h 4
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
congestion-check
|
||||
expect-no-chan
|
||||
expect-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
|
||||
# send measurement and trigger congestion check:
|
||||
meas-rep lchan 0 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 20
|
||||
expect-no-chan
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
|
||||
# congest the first cell and remove congestion from second cell:
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/f 0
|
||||
handover2 min-free-slots tch/h 0
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 4
|
||||
handover2 min-free-slots tch/h 4
|
||||
|
||||
# no handover until measurements applied:
|
||||
congestion-check
|
||||
expect-no-chan
|
||||
meas-rep lchan 1 0 1 0 rxlev 20 rxqual 0 ta 0 neighbors 20
|
||||
expect-no-chan
|
||||
congestion-check
|
||||
expect-ho from lchan 1 0 1 0 to lchan 0 0 1 0
|
||||
expect-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
expect-ts-use trx 1 0 states * - - - - - - -
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
# Stay in better cell
|
||||
# There are many neighbor cells, but only the current cell is the best
|
||||
# cell, so no handover is performed
|
||||
|
||||
create-n-bts 7
|
||||
create-ms bts 0 TCH/F AMR
|
||||
expect-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 0 ta 0 neighbors 20 21 18 20 23 19
|
||||
expect-no-chan
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
# Handover to best better cell
|
||||
# The best neighbor cell is selected
|
||||
|
||||
create-n-bts 7
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 10 rxqual 0 ta 0 neighbors 20 21 18 20 23 19
|
||||
expect-ho from lchan 0 0 1 0 to lchan 5 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 5 0 states * TCH/F - - - - - -
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
# Congestion check: Upgrading worst candidate from TCH/H -> TCH/F
|
||||
# There is only one BTS. The TCH/H slots are congested. Since
|
||||
# assignment is performed to less-congested TCH/F, the candidate with
|
||||
# the worst RX level is chosen. (So far like test 22.)
|
||||
# After that, trigger more congestion checks to ensure stability.
|
||||
|
||||
create-n-bts 1
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/f 2
|
||||
handover2 min-free-slots tch/h 4
|
||||
set-ts-use trx 0 0 states * - - - - TCH/HH TCH/H- -
|
||||
meas-rep lchan 0 0 5 0 rxlev 30 rxqual 0 ta 0
|
||||
meas-rep lchan 0 0 5 1 rxlev 34 rxqual 0 ta 0
|
||||
meas-rep lchan 0 0 6 0 rxlev 20 rxqual 0 ta 0
|
||||
expect-no-chan
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 6 0 to lchan 0 0 1 0
|
||||
expect-ts-use trx 0 0 states * TCH/F - - - TCH/HH - -
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 5 0 to lchan 0 0 2 0
|
||||
expect-ts-use trx 0 0 states * TCH/F TCH/F - - TCH/-H - -
|
||||
congestion-check
|
||||
expect-no-chan
|
||||
congestion-check
|
||||
expect-no-chan
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
# Handover to congested cell, if RX quality is below minimum
|
||||
# The better neighbor cell is congested, so no handover is performed.
|
||||
# If the RX quality of the current cell drops below minimum acceptable
|
||||
# level, the handover is performed. It is also required that 10
|
||||
# resports are received, before RX quality is checked.
|
||||
|
||||
create-n-bts 2
|
||||
set-ts-use trx 0 0 states * TCH/F - - - - - -
|
||||
network
|
||||
bts 1
|
||||
handover2 min-free-slots tch/f 4
|
||||
handover2 min-free-slots tch/h 4
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 6 ta 0 neighbors 40
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 6 ta 0 neighbors 40
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 6 ta 0 neighbors 40
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 6 ta 0 neighbors 40
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 6 ta 0 neighbors 40
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 6 ta 0 neighbors 40
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 6 ta 0 neighbors 40
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 6 ta 0 neighbors 40
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 6 ta 0 neighbors 40
|
||||
expect-no-chan
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 6 ta 0 neighbors 40
|
||||
expect-ho from lchan 0 0 1 0 to lchan 1 0 1 0
|
||||
expect-ts-use trx 0 0 states * - - - - - - -
|
||||
expect-ts-use trx 1 0 states * TCH/F - - - - - -
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
# Congestion check: Balancing congestion by handover TCH/F -> TCH/H
|
||||
# One BTS, and TCH/F are considered congested, TCH/H are not.
|
||||
|
||||
create-n-bts 1
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/f 3
|
||||
handover2 min-free-slots tch/h 0
|
||||
set-ts-use trx 0 0 states * TCH/F TCH/F - - TCH/H- - -
|
||||
meas-rep lchan 0 0 1 0 rxlev 30 rxqual 0 ta 0 neighbors 30
|
||||
expect-no-chan
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 1 0 to lchan 0 0 5 1
|
||||
expect-ts-use trx 0 0 states * - TCH/F - - TCH/HH - -
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
# Congestion check: Balancing congestion by handover TCH/F -> TCH/H
|
||||
# With dynamic timeslots.
|
||||
# As soon as only one TCH/F is left, there should be HO to a dyn TS.
|
||||
|
||||
create-bts trx-count 1 timeslots c+s4 TCH/F TCH/F TCH/F dyn dyn dyn PDCH
|
||||
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/f 2
|
||||
handover2 min-free-slots tch/h 0
|
||||
handover2 assignment 1
|
||||
set-ts-use trx 0 0 states * TCH/F TCH/F TCH/F TCH/F pdch pdch pdch
|
||||
|
||||
# (there must be at leas one measurement report on each lchan for congestion check to work)
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 0 ta 0 neighbors 30
|
||||
meas-rep lchan 0 0 2 0 rxlev 40 rxqual 0 ta 0 neighbors 30
|
||||
meas-rep lchan 0 0 3 0 rxlev 40 rxqual 0 ta 0 neighbors 30
|
||||
meas-rep lchan 0 0 4 0 rxlev 40 rxqual 0 ta 0 neighbors 30
|
||||
|
||||
congestion-check
|
||||
expect-no-chan
|
||||
|
||||
create-ms bts 0 TCH/F AMR
|
||||
meas-rep lchan 0 0 5 0 rxlev 40 rxqual 0 ta 0 neighbors 30
|
||||
expect-ts-use trx 0 0 states * TCH/F TCH/F TCH/F TCH/F TCH/F pdch pdch
|
||||
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 5 0 to lchan 0 0 6 0
|
||||
expect-ts-use trx 0 0 states * TCH/F TCH/F TCH/F TCH/F pdch TCH/H- pdch
|
||||
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 4 0 to lchan 0 0 6 1
|
||||
expect-ts-use trx 0 0 states * TCH/F TCH/F TCH/F pdch pdch TCH/HH pdch
|
||||
|
||||
congestion-check
|
||||
expect-no-chan
|
||||
|
||||
create-ms bts 0 TCH/F AMR
|
||||
meas-rep lchan 0 0 4 0 rxlev 40 rxqual 0 ta 0 neighbors 30
|
||||
expect-ts-use trx 0 0 states * TCH/F TCH/F TCH/F TCH/F pdch TCH/HH pdch
|
||||
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 4 0 to lchan 0 0 5 0
|
||||
expect-ts-use trx 0 0 states * TCH/F TCH/F TCH/F pdch TCH/H- TCH/HH pdch
|
||||
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 1 0 to lchan 0 0 5 1
|
||||
expect-ts-use trx 0 0 states * - TCH/F TCH/F pdch TCH/HH TCH/HH pdch
|
||||
|
||||
congestion-check
|
||||
expect-no-chan
|
||||
|
||||
create-ms bts 0 TCH/F AMR
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 0 ta 0 neighbors 30
|
||||
expect-ts-use trx 0 0 states * TCH/F TCH/F TCH/F pdch TCH/HH TCH/HH pdch
|
||||
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 1 0 to lchan 0 0 4 0
|
||||
expect-ts-use trx 0 0 states * - TCH/F TCH/F TCH/H- TCH/HH TCH/HH pdch
|
||||
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 2 0 to lchan 0 0 4 1
|
||||
expect-ts-use trx 0 0 states * - - TCH/F TCH/HH TCH/HH TCH/HH pdch
|
||||
|
||||
congestion-check
|
||||
expect-no-chan
|
||||
|
||||
create-ms bts 0 TCH/F AMR
|
||||
meas-rep lchan 0 0 1 0 rxlev 40 rxqual 0 ta 0 neighbors 30
|
||||
expect-ts-use trx 0 0 states * TCH/F - TCH/F TCH/HH TCH/HH TCH/HH pdch
|
||||
|
||||
congestion-check
|
||||
expect-no-chan
|
||||
|
||||
create-ms bts 0 TCH/F AMR
|
||||
meas-rep lchan 0 0 2 0 rxlev 40 rxqual 0 ta 0 neighbors 30
|
||||
expect-ts-use trx 0 0 states * TCH/F TCH/F TCH/F TCH/HH TCH/HH TCH/HH pdch
|
||||
|
||||
congestion-check
|
||||
expect-no-chan
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
# assign new MS: re-use half used TCH/H to avoid switching more dyn TS to TCH/H
|
||||
|
||||
create-bts trx-count 1 timeslots c+s4 TCH/F TCH/F TCH/F dyn dyn dyn PDCH
|
||||
set-ts-use trx 0 0 states * - - - pdch TCH/H- pdch pdch
|
||||
create-ms bts 0 TCH/H AMR
|
||||
expect-ts-use trx 0 0 states * - - - pdch TCH/HH pdch pdch
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
# Congestion check: favor moving a TCH/H that frees a half-used dyn TS completely
|
||||
|
||||
create-bts trx-count 1 timeslots c+s4 dyn dyn dyn dyn dyn - -
|
||||
set-ts-use trx 0 0 states * pdch TCH/HH TCH/H- TCH/HH pdch - -
|
||||
meas-rep lchan 0 0 2 1 rxlev 30 rxqual 0 ta 0
|
||||
meas-rep lchan 0 0 3 0 rxlev 30 rxqual 0 ta 0
|
||||
meas-rep lchan 0 0 4 0 rxlev 30 rxqual 0 ta 0
|
||||
meas-rep lchan 0 0 4 1 rxlev 30 rxqual 0 ta 0
|
||||
# pick one to move:
|
||||
network
|
||||
bts 0
|
||||
handover2 min-free-slots tch/h 6
|
||||
congestion-check
|
||||
expect-ho from lchan 0 0 3 0 to lchan 0 0 1 0
|
||||
expect-ts-use trx 0 0 states * TCH/F TCH/HH pdch TCH/HH pdch - -
|
|
@ -51,200 +51,8 @@ cat $abs_srcdir/handover/neighbor_ident_test.err > experr
|
|||
AT_CHECK([$abs_top_builddir/tests/handover/neighbor_ident_test], [], [expout], [experr])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 0])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 0], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 1])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 1], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 2])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 2], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 3])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 3], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 4])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 4], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 5])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 5], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 6])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 6], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 7])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 7], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 8])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 8], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 9])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 9], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 10])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 10], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 11])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 11], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 12])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 12], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 13])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 13], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 14])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 14], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 15])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 15], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 16])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 16], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 17])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 17], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 18])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 18], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 19])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 19], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 20])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 20], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 21])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 21], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 22])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 22], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 23])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 23], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 24])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 24], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 25])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 25], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 26])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 26], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 27])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 27], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 28])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 28], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 29])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 29], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 30])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 30], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 31])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 31], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
||||
AT_SETUP([handover test 32])
|
||||
AT_KEYWORDS([handover])
|
||||
cat $abs_srcdir/handover/handover_test.ok > expout
|
||||
AT_CHECK([$abs_top_builddir/tests/handover/handover_test 32], [], [expout], [ignore])
|
||||
AT_SETUP([handover_tests])
|
||||
AT_KEYWORDS([handover_tests])
|
||||
cat $abs_srcdir/handover/handover_tests.ok > expout
|
||||
AT_CHECK([$abs_srcdir/handover/handover_tests.sh $abs_srcdir/handover $abs_builddir/handover], [], [expout], [ignore])
|
||||
AT_CLEANUP
|
||||
|
|
Loading…
Reference in New Issue