aboutsummaryrefslogtreecommitdiffstats
path: root/tests/acc
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2020-07-23 19:13:56 +0200
committerpespin <pespin@sysmocom.de>2020-07-31 09:56:46 +0000
commit1e5e7004dc7987b23f5791366efdf374675e346b (patch)
tree106ae49cf9b677d82f07984607b838d41d232d94 /tests/acc
parentb764f449a23f130ce1b2157f8231317b12df0413 (diff)
Introduce support for ACC ramping during whole BTS life cycle
Prior to this patch, ACC ramping was only used to go 0->N in the number of allowed ACCs during BTS startup. It could optionally dynamically stretch or extend the ramping time based on channel load. With this patch, ACC ramping is kept alive during the entire time the BTS is active, and subset of allowed ACCs can now be incresed or decreased based on channel load. A new VTY command "access-control-class-ramping-chan-load" is added to configure a lower and an upper threshold. Channel load under the low threshold will potentially trigger an increment of the subset size of allowed ACCs, while a channel load over the upper threshold will potentially trigger the opposite (a decrease in size). The time between checks is kept fixed per VTY command (reusing old "access-control-class-ramping-step-size"), but the "dynamic" option is deprecated and ignored from now on since it provides nothing valuable in the new implementation, because the size always dynamically changes based on channel load (configured thresholds). Related: SYS#4912 Change-Id: Id17f947c92cdfc0eb9541a9bf066338169caaeb5
Diffstat (limited to 'tests/acc')
-rw-r--r--tests/acc/acc_test.c122
-rw-r--r--tests/acc/acc_test.ok727
2 files changed, 755 insertions, 94 deletions
diff --git a/tests/acc/acc_test.c b/tests/acc/acc_test.c
index 54f3de1fa..72d3212f1 100644
--- a/tests/acc/acc_test.c
+++ b/tests/acc/acc_test.c
@@ -63,6 +63,8 @@ static inline void _bts_del(struct gsm_bts *bts, const char *msg)
rate_ctr_group_free(bts->bts_ctrs);
if (osmo_timer_pending(&bts->acc_mgr.rotate_timer))
osmo_timer_del(&bts->acc_mgr.rotate_timer);
+ if (osmo_timer_pending(&bts->acc_ramp.step_timer))
+ osmo_timer_del(&bts->acc_ramp.step_timer);
/* no need to llist_del(&bts->list), we never registered the bts there. */
talloc_free(bts);
fprintf(stderr, "BTS deallocated OK in %s()\n", msg);
@@ -230,7 +232,7 @@ static void test_acc_mgr_rotate(struct gsm_network *net)
bts_del(bts);
}
-static void test_acc_ramp_fixed(struct gsm_network *net)
+static void test_acc_ramp(struct gsm_network *net)
{
fprintf(stderr, "===%s===\n", __func__);
int i;
@@ -242,14 +244,13 @@ static void test_acc_ramp_fixed(struct gsm_network *net)
OSMO_ASSERT(acc_ramp_is_enabled(acc_ramp) == false);
OSMO_ASSERT(acc_ramp_get_step_size(acc_ramp) == ACC_RAMP_STEP_SIZE_DEFAULT);
OSMO_ASSERT(acc_ramp_get_step_interval(acc_ramp) == ACC_RAMP_STEP_INTERVAL_MIN);
- OSMO_ASSERT(acc_ramp_step_interval_is_dynamic(acc_ramp) == true);
/* Set super high rotation time so it doesn't interfer here: */
acc_mgr_set_rotation_time(acc_mgr, 5000);
- //acc_ramp_set_step_interval_dynamic(acc_ramp);
OSMO_ASSERT(acc_ramp_set_step_interval(acc_ramp, 1) == -ERANGE);
OSMO_ASSERT(acc_ramp_set_step_interval(acc_ramp, 50) == 0);
+ OSMO_ASSERT(acc_ramp_set_chan_load_thresholds(acc_ramp, 100, 100) == 0);
acc_ramp_set_step_size(acc_ramp, 1);
acc_ramp_set_enabled(acc_ramp, true);
@@ -265,7 +266,7 @@ static void test_acc_ramp_fixed(struct gsm_network *net)
bts_del(bts);
}
-static void test_acc_ramp_fixed2(struct gsm_network *net)
+static void test_acc_ramp2(struct gsm_network *net)
{
fprintf(stderr, "===%s===\n", __func__);
int i;
@@ -277,7 +278,6 @@ static void test_acc_ramp_fixed2(struct gsm_network *net)
OSMO_ASSERT(acc_ramp_is_enabled(acc_ramp) == false);
OSMO_ASSERT(acc_ramp_get_step_size(acc_ramp) == ACC_RAMP_STEP_SIZE_DEFAULT);
OSMO_ASSERT(acc_ramp_get_step_interval(acc_ramp) == ACC_RAMP_STEP_INTERVAL_MIN);
- OSMO_ASSERT(acc_ramp_step_interval_is_dynamic(acc_ramp) == true);
/* Set super high rotation time so it doesn't interfer here: */
acc_mgr_set_rotation_time(acc_mgr, 5000);
@@ -299,7 +299,7 @@ static void test_acc_ramp_fixed2(struct gsm_network *net)
bts_del(bts);
}
-static void test_acc_ramp_fixed3(struct gsm_network *net)
+static void test_acc_ramp3(struct gsm_network *net)
{
fprintf(stderr, "===%s===\n", __func__);
int i;
@@ -311,7 +311,6 @@ static void test_acc_ramp_fixed3(struct gsm_network *net)
OSMO_ASSERT(acc_ramp_is_enabled(acc_ramp) == false);
OSMO_ASSERT(acc_ramp_get_step_size(acc_ramp) == ACC_RAMP_STEP_SIZE_DEFAULT);
OSMO_ASSERT(acc_ramp_get_step_interval(acc_ramp) == ACC_RAMP_STEP_INTERVAL_MIN);
- OSMO_ASSERT(acc_ramp_step_interval_is_dynamic(acc_ramp) == true);
/* Set super high rotation time so it doesn't interfer here: */
acc_mgr_set_rotation_time(acc_mgr, 5000);
@@ -336,58 +335,77 @@ static void test_acc_ramp_fixed3(struct gsm_network *net)
bts_del(bts);
}
-static void test_acc_ramp_dynamic(struct gsm_network *net)
+static void test_acc_ramp_up_rotate(struct gsm_network *net, unsigned int chan_load, unsigned int low_threshold, unsigned int up_threshold)
{
- fprintf(stderr, "===%s===\n", __func__);
- char buf[128];
- unsigned int step_sec;
+ fprintf(stderr, "===%s(%u, %u, %u)===\n",
+ __func__, chan_load, low_threshold, up_threshold);
struct gsm_bts *bts = bts_init(net);
struct acc_mgr *acc_mgr = &bts->acc_mgr;
struct acc_ramp *acc_ramp = &bts->acc_ramp;
+ int n;
/* Validate are all allowed by default after allocation: */
OSMO_ASSERT(acc_ramp_is_enabled(acc_ramp) == false);
OSMO_ASSERT(acc_ramp_get_step_size(acc_ramp) == ACC_RAMP_STEP_SIZE_DEFAULT);
OSMO_ASSERT(acc_ramp_get_step_interval(acc_ramp) == ACC_RAMP_STEP_INTERVAL_MIN);
- OSMO_ASSERT(acc_ramp_step_interval_is_dynamic(acc_ramp) == true);
- /* Set super high rotation time so it doesn't interfer here: */
- acc_mgr_set_rotation_time(acc_mgr, 5000);
+ OSMO_ASSERT(acc_ramp_set_step_interval(acc_ramp, 250) == 0);
+ acc_mgr_set_rotation_time(acc_mgr, 100);
+ /* Test that ramping + rotation won't go over permanently barred ACC*/
+ fprintf(stderr, "*** Barring one ACC ***\n");
+ bts->si_common.rach_control.t2 |= 0x02;
+ acc_mgr_perm_subset_changed(acc_mgr, &bts->si_common.rach_control);
- acc_ramp_set_step_interval_dynamic(acc_ramp);
- acc_ramp_set_step_size(acc_ramp, 1);
+ OSMO_ASSERT(acc_ramp_set_step_size(acc_ramp, 1) == 0);
+ OSMO_ASSERT(acc_ramp_set_chan_load_thresholds(acc_ramp, low_threshold, up_threshold) == 0);
acc_ramp_set_enabled(acc_ramp, true);
- bts->chan_load_avg = 0; /*set 70% channel load */
+ bts->chan_load_avg = chan_load; /*set % channel load */
osmo_gettimeofday_override_time = (struct timeval) {0, 0};
acc_ramp_trigger(acc_ramp);
- while (osmo_timer_pending(&acc_ramp->step_timer)) {
- bts->chan_load_avg += 10;
- step_sec = ((bts->chan_load_avg * ACC_RAMP_STEP_INTERVAL_MAX) / 100);
- osmo_gettimeofday_override_time.tv_sec += step_sec;
- snprintf(buf, sizeof(buf), "select(): load=%" PRIu8 " -> step_sec=%u",
- bts->chan_load_avg, step_sec);
- clock_debug(buf);
+ n = 5;
+ while (true) {
+ OSMO_ASSERT(osmo_timer_pending(&acc_ramp->step_timer));
+ if (osmo_timer_pending(&acc_mgr->rotate_timer)) {
+ if ((osmo_gettimeofday_override_time.tv_sec + 50) % 250 == 0)
+ osmo_gettimeofday_override_time.tv_sec += 50;
+ else
+ osmo_gettimeofday_override_time.tv_sec += 100;
+ } else {
+ /* Once ramping is done, adm level is big enough and hence
+ * rotation is not needed and will be disabled. Run
+ * ramping a bit more and we are then done */
+ osmo_gettimeofday_override_time.tv_sec -= osmo_gettimeofday_override_time.tv_sec % 250;
+ osmo_gettimeofday_override_time.tv_sec += 250;
+ if (n-- == 0)
+ break;
+ }
+ clock_debug("select()");
osmo_select_main(0);
}
bts_del(bts);
}
-static void test_acc_ramp_fixed_rotate(struct gsm_network *net)
+static void test_acc_ramp_updown_rotate(struct gsm_network *net, unsigned int low_threshold, unsigned int up_threshold,
+ unsigned int min_load, unsigned int max_load, unsigned load_step)
{
- fprintf(stderr, "===%s===\n", __func__);
+ fprintf(stderr, "===%s(%u, %u, %u, %u, %u)===\n",
+ __func__, low_threshold, up_threshold,
+ min_load, max_load, load_step);
struct gsm_bts *bts = bts_init(net);
struct acc_mgr *acc_mgr = &bts->acc_mgr;
struct acc_ramp *acc_ramp = &bts->acc_ramp;
+ int i;
+ char buf[256];
+ bool up = true;
/* Validate are all allowed by default after allocation: */
OSMO_ASSERT(acc_ramp_is_enabled(acc_ramp) == false);
OSMO_ASSERT(acc_ramp_get_step_size(acc_ramp) == ACC_RAMP_STEP_SIZE_DEFAULT);
OSMO_ASSERT(acc_ramp_get_step_interval(acc_ramp) == ACC_RAMP_STEP_INTERVAL_MIN);
- OSMO_ASSERT(acc_ramp_step_interval_is_dynamic(acc_ramp) == true);
OSMO_ASSERT(acc_ramp_set_step_interval(acc_ramp, 250) == 0);
acc_mgr_set_rotation_time(acc_mgr, 100);
@@ -396,29 +414,46 @@ static void test_acc_ramp_fixed_rotate(struct gsm_network *net)
bts->si_common.rach_control.t2 |= 0x02;
acc_mgr_perm_subset_changed(acc_mgr, &bts->si_common.rach_control);
- acc_ramp_set_step_size(acc_ramp, 1);
+ OSMO_ASSERT(acc_ramp_set_step_size(acc_ramp, 1) == 0);
+ OSMO_ASSERT(acc_ramp_set_chan_load_thresholds(acc_ramp, low_threshold, up_threshold) == 0);
acc_ramp_set_enabled(acc_ramp, true);
+ bts->chan_load_avg = min_load; /* set % channel load */
+
osmo_gettimeofday_override_time = (struct timeval) {0, 0};
acc_ramp_trigger(acc_ramp);
- while (true) {
+ /* 50 ev loop iterations */
+ for (i = 0; i < 50; i++) {
+ OSMO_ASSERT(osmo_timer_pending(&acc_ramp->step_timer));
if (osmo_timer_pending(&acc_mgr->rotate_timer)) {
if ((osmo_gettimeofday_override_time.tv_sec + 50) % 250 == 0)
osmo_gettimeofday_override_time.tv_sec += 50;
else
osmo_gettimeofday_override_time.tv_sec += 100;
- } else if (osmo_timer_pending(&acc_ramp->step_timer)) {
- osmo_gettimeofday_override_time.tv_sec -= osmo_gettimeofday_override_time.tv_sec % 250;
- osmo_gettimeofday_override_time.tv_sec += 250;
} else {
/* Once ramping is done, adm level is big enough and hence
- * rotation is not needed and will be disabled. We are then done
- */
- break;
+ * rotation is not needed and will be disabled. */
+ osmo_gettimeofday_override_time.tv_sec -= osmo_gettimeofday_override_time.tv_sec % 250;
+ osmo_gettimeofday_override_time.tv_sec += 250;
}
- clock_debug("select()");
+ snprintf(buf, sizeof(buf), "select(%d): chan_load_avg=%" PRIu8, i, bts->chan_load_avg);
+ clock_debug(buf);
osmo_select_main(0);
+
+ if (up) {
+ bts->chan_load_avg += load_step;
+ if (bts->chan_load_avg >= max_load)
+ up = false;
+ if (bts->chan_load_avg > max_load)
+ bts->chan_load_avg = max_load;
+ } else {
+ bts->chan_load_avg = (uint8_t)OSMO_MAX((int)(bts->chan_load_avg - load_step), 0);
+ if (bts->chan_load_avg <= min_load)
+ up = true;
+ if (bts->chan_load_avg < min_load)
+ bts->chan_load_avg = max_load;
+ }
}
bts_del(bts);
@@ -460,11 +495,16 @@ int main(int argc, char **argv)
test_acc_mgr_no_ramp(net);
test_acc_mgr_manual_ramp(net);
test_acc_mgr_rotate(net);
- test_acc_ramp_fixed(net);
- test_acc_ramp_fixed2(net);
- test_acc_ramp_fixed3(net);
- test_acc_ramp_dynamic(net);
- test_acc_ramp_fixed_rotate(net);
+ test_acc_ramp(net);
+ test_acc_ramp2(net);
+ test_acc_ramp3(net);
+ test_acc_ramp_up_rotate(net, 0, 100, 100);
+ test_acc_ramp_up_rotate(net, 0, 20, 50);
+ test_acc_ramp_up_rotate(net, 70, 80, 90);
+ test_acc_ramp_updown_rotate(net, 80, 90, 0, 100, 15);
+ test_acc_ramp_updown_rotate(net, 30, 50, 10, 100, 15);
+ test_acc_ramp_updown_rotate(net, 50, 49, 0, 100, 10);
+ test_acc_ramp_updown_rotate(net, 30, 80, 30, 80, 5);
return EXIT_SUCCESS;
}
diff --git a/tests/acc/acc_test.ok b/tests/acc/acc_test.ok
index f377651ef..bb6fe10af 100644
--- a/tests/acc/acc_test.ok
+++ b/tests/acc/acc_test.ok
@@ -413,9 +413,9 @@ sys={40.000000}: select()
(bts=0) ACC: rotate ACC allowed active subset 0x1c1 -> 0x0c3 (active_len=4, ramp_len=10, adm_len=4, perm_len=9, rotation=on)
pcu_info_update(): t2=0x03 t3=0x3c
BTS deallocated OK in test_acc_mgr_rotate()
-===test_acc_ramp_fixed===
+===test_acc_ramp===
(bts=0) ACC: New ACC allowed subset 0x3ff (active_len=10, ramp_len=10, adm_len=10, perm_len=10, rotation=off)
-BTS allocation OK in test_acc_ramp_fixed()
+BTS allocation OK in test_acc_ramp()
(bts=0) ACC: update ACC allowed active subset 0x3ff -> 0x000 (active_len=0, ramp_len=0, adm_len=10, perm_len=10, rotation=off)
pcu_info_update(): t2=0x03 t3=0xff
(bts=0) ACC: New ACC allowed subset 0x001 (active_len=1, ramp_len=1, adm_len=10, perm_len=10, rotation=on)
@@ -447,27 +447,27 @@ pcu_info_update(): t2=0x02 t3=0x00
sys={450.000000}: select()
(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x3ff (active_len=10, ramp_len=10, adm_len=10, perm_len=10, rotation=off)
pcu_info_update(): t2=0x00 t3=0x00
-BTS deallocated OK in test_acc_ramp_fixed()
-===test_acc_ramp_fixed2===
+BTS deallocated OK in test_acc_ramp()
+===test_acc_ramp2===
(bts=0) ACC: New ACC allowed subset 0x3ff (active_len=10, ramp_len=10, adm_len=10, perm_len=10, rotation=off)
-BTS allocation OK in test_acc_ramp_fixed2()
+BTS allocation OK in test_acc_ramp2()
(bts=0) ACC: update ACC allowed active subset 0x3ff -> 0x3f8 (active_len=7, ramp_len=10, adm_len=7, perm_len=10, rotation=on)
pcu_info_update(): t2=0x00 t3=0x07
(bts=0) ACC: update ACC allowed active subset 0x3f8 -> 0x000 (active_len=0, ramp_len=0, adm_len=7, perm_len=10, rotation=off)
pcu_info_update(): t2=0x03 t3=0xff
(bts=0) ACC: New ACC allowed subset 0x007 (active_len=3, ramp_len=3, adm_len=7, perm_len=10, rotation=on)
pcu_info_update(): t2=0x03 t3=0xf8
-sys={30.000000}: select()
+sys={5.000000}: select()
(bts=0) ACC: update ACC allowed active subset 0x007 -> 0x03f (active_len=6, ramp_len=6, adm_len=7, perm_len=10, rotation=on)
pcu_info_update(): t2=0x03 t3=0xc0
-sys={60.000000}: select()
-(bts=0) ACC: update ACC allowed active subset 0x03f -> 0x07f (active_len=7, ramp_len=9, adm_len=7, perm_len=10, rotation=on)
+sys={10.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x03f -> 0x07f (active_len=7, ramp_len=7, adm_len=7, perm_len=10, rotation=on)
pcu_info_update(): t2=0x03 t3=0x80
-sys={90.000000}: select()
-BTS deallocated OK in test_acc_ramp_fixed2()
-===test_acc_ramp_fixed3===
+sys={15.000000}: select()
+BTS deallocated OK in test_acc_ramp2()
+===test_acc_ramp3===
(bts=0) ACC: New ACC allowed subset 0x3ff (active_len=10, ramp_len=10, adm_len=10, perm_len=10, rotation=off)
-BTS allocation OK in test_acc_ramp_fixed3()
+BTS allocation OK in test_acc_ramp3()
*** Barring some ACCs ***
(bts=0) ACC: New ACC allowed subset 0x15a (active_len=5, ramp_len=10, adm_len=10, perm_len=5, rotation=off)
pcu_info_update(): t2=0x02 t3=0xa5
@@ -475,67 +475,121 @@ pcu_info_update(): t2=0x02 t3=0xa5
pcu_info_update(): t2=0x03 t3=0xff
(bts=0) ACC: New ACC allowed subset 0x002 (active_len=1, ramp_len=1, adm_len=10, perm_len=5, rotation=on)
pcu_info_update(): t2=0x03 t3=0xfd
-sys={30.000000}: select()
+sys={5.000000}: select()
(bts=0) ACC: update ACC allowed active subset 0x002 -> 0x00a (active_len=2, ramp_len=2, adm_len=10, perm_len=5, rotation=on)
pcu_info_update(): t2=0x03 t3=0xf5
-sys={60.000000}: select()
+sys={10.000000}: select()
(bts=0) ACC: update ACC allowed active subset 0x00a -> 0x01a (active_len=3, ramp_len=3, adm_len=10, perm_len=5, rotation=on)
pcu_info_update(): t2=0x03 t3=0xe5
-sys={90.000000}: select()
+sys={15.000000}: select()
(bts=0) ACC: update ACC allowed active subset 0x01a -> 0x05a (active_len=4, ramp_len=4, adm_len=10, perm_len=5, rotation=on)
pcu_info_update(): t2=0x03 t3=0xa5
-sys={120.000000}: select()
+sys={20.000000}: select()
(bts=0) ACC: update ACC allowed active subset 0x05a -> 0x15a (active_len=5, ramp_len=5, adm_len=10, perm_len=5, rotation=off)
pcu_info_update(): t2=0x02 t3=0xa5
-sys={150.000000}: select()
+sys={25.000000}: select()
(bts=0) ACC: update ACC allowed active subset 0x15a -> 0x15a (active_len=5, ramp_len=6, adm_len=10, perm_len=5, rotation=off)
-sys={180.000000}: select()
+sys={30.000000}: select()
(bts=0) ACC: update ACC allowed active subset 0x15a -> 0x15a (active_len=5, ramp_len=7, adm_len=10, perm_len=5, rotation=off)
-sys={210.000000}: select()
+sys={35.000000}: select()
(bts=0) ACC: update ACC allowed active subset 0x15a -> 0x15a (active_len=5, ramp_len=8, adm_len=10, perm_len=5, rotation=off)
-sys={240.000000}: select()
+sys={40.000000}: select()
(bts=0) ACC: update ACC allowed active subset 0x15a -> 0x15a (active_len=5, ramp_len=9, adm_len=10, perm_len=5, rotation=off)
-sys={270.000000}: select()
+sys={45.000000}: select()
(bts=0) ACC: update ACC allowed active subset 0x15a -> 0x15a (active_len=5, ramp_len=10, adm_len=10, perm_len=5, rotation=off)
-BTS deallocated OK in test_acc_ramp_fixed3()
-===test_acc_ramp_dynamic===
+BTS deallocated OK in test_acc_ramp3()
+===test_acc_ramp_up_rotate(0, 100, 100)===
(bts=0) ACC: New ACC allowed subset 0x3ff (active_len=10, ramp_len=10, adm_len=10, perm_len=10, rotation=off)
-BTS allocation OK in test_acc_ramp_dynamic()
-(bts=0) ACC: update ACC allowed active subset 0x3ff -> 0x000 (active_len=0, ramp_len=0, adm_len=10, perm_len=10, rotation=off)
+BTS allocation OK in test_acc_ramp_up_rotate()
+*** Barring one ACC ***
+(bts=0) ACC: New ACC allowed subset 0x1ff (active_len=9, ramp_len=10, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x02 t3=0x00
+(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x000 (active_len=0, ramp_len=0, adm_len=10, perm_len=9, rotation=off)
pcu_info_update(): t2=0x03 t3=0xff
-(bts=0) ACC: New ACC allowed subset 0x001 (active_len=1, ramp_len=1, adm_len=10, perm_len=10, rotation=on)
+(bts=0) ACC: New ACC allowed subset 0x001 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
pcu_info_update(): t2=0x03 t3=0xfe
-sys={60.000000}: select(): load=10 -> step_sec=60
-(bts=0) ACC: update ACC allowed active subset 0x001 -> 0x003 (active_len=2, ramp_len=2, adm_len=10, perm_len=10, rotation=on)
-pcu_info_update(): t2=0x03 t3=0xfc
-sys={180.000000}: select(): load=20 -> step_sec=120
-(bts=0) ACC: update ACC allowed active subset 0x003 -> 0x007 (active_len=3, ramp_len=3, adm_len=10, perm_len=10, rotation=on)
-pcu_info_update(): t2=0x03 t3=0xf8
-sys={360.000000}: select(): load=30 -> step_sec=180
-(bts=0) ACC: update ACC allowed active subset 0x007 -> 0x00f (active_len=4, ramp_len=4, adm_len=10, perm_len=10, rotation=on)
-pcu_info_update(): t2=0x03 t3=0xf0
-sys={600.000000}: select(): load=40 -> step_sec=240
-(bts=0) ACC: update ACC allowed active subset 0x00f -> 0x01f (active_len=5, ramp_len=5, adm_len=10, perm_len=10, rotation=on)
+sys={100.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x001 -> 0x002 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfd
+sys={200.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x002 -> 0x004 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfb
+sys={250.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x004 -> 0x00c (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf3
+sys={350.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x00c -> 0x018 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xe7
+sys={450.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x018 -> 0x030 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xcf
+sys={500.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x030 -> 0x070 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x8f
+sys={600.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x070 -> 0x0e0 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x1f
+sys={700.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x0e0 -> 0x1c0 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x3f
+sys={750.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x1c0 -> 0x1c1 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x3e
+sys={850.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x1c1 -> 0x0c3 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x3c
+sys={950.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x0c3 -> 0x047 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xb8
+sys={1000.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x047 -> 0x0c7 (active_len=5, ramp_len=5, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x38
+sys={1100.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x0c7 -> 0x04f (active_len=5, ramp_len=5, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xb0
+sys={1200.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x04f -> 0x01f (active_len=5, ramp_len=5, adm_len=10, perm_len=9, rotation=on)
pcu_info_update(): t2=0x03 t3=0xe0
-sys={900.000000}: select(): load=50 -> step_sec=300
-(bts=0) ACC: update ACC allowed active subset 0x01f -> 0x03f (active_len=6, ramp_len=6, adm_len=10, perm_len=10, rotation=on)
+sys={1250.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x01f -> 0x03f (active_len=6, ramp_len=6, adm_len=10, perm_len=9, rotation=on)
pcu_info_update(): t2=0x03 t3=0xc0
-sys={1260.000000}: select(): load=60 -> step_sec=360
-(bts=0) ACC: update ACC allowed active subset 0x03f -> 0x07f (active_len=7, ramp_len=7, adm_len=10, perm_len=10, rotation=on)
-pcu_info_update(): t2=0x03 t3=0x80
-sys={1680.000000}: select(): load=70 -> step_sec=420
-(bts=0) ACC: update ACC allowed active subset 0x07f -> 0x0ff (active_len=8, ramp_len=8, adm_len=10, perm_len=10, rotation=on)
+sys={1350.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x03f -> 0x07e (active_len=6, ramp_len=6, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x81
+sys={1450.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x07e -> 0x0fc (active_len=6, ramp_len=6, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x03
+sys={1500.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x0fc -> 0x1fc (active_len=7, ramp_len=7, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x03
+sys={1600.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x1fc -> 0x1f9 (active_len=7, ramp_len=7, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x06
+sys={1700.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x1f9 -> 0x0fb (active_len=7, ramp_len=7, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x04
+sys={1750.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x0fb -> 0x1fb (active_len=8, ramp_len=8, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x04
+sys={1850.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x1fb -> 0x0ff (active_len=8, ramp_len=8, adm_len=10, perm_len=9, rotation=on)
pcu_info_update(): t2=0x03 t3=0x00
-sys={2160.000000}: select(): load=80 -> step_sec=480
-(bts=0) ACC: update ACC allowed active subset 0x0ff -> 0x1ff (active_len=9, ramp_len=9, adm_len=10, perm_len=10, rotation=on)
+sys={1950.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x0ff -> 0x1fe (active_len=8, ramp_len=8, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x01
+sys={2000.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x1fe -> 0x1ff (active_len=9, ramp_len=9, adm_len=10, perm_len=9, rotation=off)
pcu_info_update(): t2=0x02 t3=0x00
-sys={2700.000000}: select(): load=90 -> step_sec=540
-(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x3ff (active_len=10, ramp_len=10, adm_len=10, perm_len=10, rotation=off)
-pcu_info_update(): t2=0x00 t3=0x00
-BTS deallocated OK in test_acc_ramp_dynamic()
-===test_acc_ramp_fixed_rotate===
+sys={2250.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x1ff (active_len=9, ramp_len=10, adm_len=10, perm_len=9, rotation=off)
+sys={2500.000000}: select()
+sys={2750.000000}: select()
+sys={3000.000000}: select()
+sys={3250.000000}: select()
+BTS deallocated OK in test_acc_ramp_up_rotate()
+===test_acc_ramp_up_rotate(0, 20, 50)===
(bts=0) ACC: New ACC allowed subset 0x3ff (active_len=10, ramp_len=10, adm_len=10, perm_len=10, rotation=off)
-BTS allocation OK in test_acc_ramp_fixed_rotate()
+BTS allocation OK in test_acc_ramp_up_rotate()
*** Barring one ACC ***
(bts=0) ACC: New ACC allowed subset 0x1ff (active_len=9, ramp_len=10, adm_len=10, perm_len=9, rotation=off)
pcu_info_update(): t2=0x02 t3=0x00
@@ -617,4 +671,571 @@ sys={2000.000000}: select()
pcu_info_update(): t2=0x02 t3=0x00
sys={2250.000000}: select()
(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x1ff (active_len=9, ramp_len=10, adm_len=10, perm_len=9, rotation=off)
-BTS deallocated OK in test_acc_ramp_fixed_rotate()
+sys={2500.000000}: select()
+sys={2750.000000}: select()
+sys={3000.000000}: select()
+sys={3250.000000}: select()
+BTS deallocated OK in test_acc_ramp_up_rotate()
+===test_acc_ramp_up_rotate(70, 80, 90)===
+(bts=0) ACC: New ACC allowed subset 0x3ff (active_len=10, ramp_len=10, adm_len=10, perm_len=10, rotation=off)
+BTS allocation OK in test_acc_ramp_up_rotate()
+*** Barring one ACC ***
+(bts=0) ACC: New ACC allowed subset 0x1ff (active_len=9, ramp_len=10, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x02 t3=0x00
+(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x000 (active_len=0, ramp_len=0, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x03 t3=0xff
+(bts=0) ACC: New ACC allowed subset 0x001 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfe
+sys={100.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x001 -> 0x002 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfd
+sys={200.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x002 -> 0x004 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfb
+sys={250.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x004 -> 0x00c (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf3
+sys={350.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x00c -> 0x018 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xe7
+sys={450.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x018 -> 0x030 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xcf
+sys={500.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x030 -> 0x070 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x8f
+sys={600.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x070 -> 0x0e0 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x1f
+sys={700.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x0e0 -> 0x1c0 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x3f
+sys={750.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x1c0 -> 0x1c1 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x3e
+sys={850.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x1c1 -> 0x0c3 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x3c
+sys={950.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x0c3 -> 0x047 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xb8
+sys={1000.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x047 -> 0x0c7 (active_len=5, ramp_len=5, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x38
+sys={1100.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x0c7 -> 0x04f (active_len=5, ramp_len=5, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xb0
+sys={1200.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x04f -> 0x01f (active_len=5, ramp_len=5, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xe0
+sys={1250.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x01f -> 0x03f (active_len=6, ramp_len=6, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xc0
+sys={1350.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x03f -> 0x07e (active_len=6, ramp_len=6, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x81
+sys={1450.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x07e -> 0x0fc (active_len=6, ramp_len=6, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x03
+sys={1500.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x0fc -> 0x1fc (active_len=7, ramp_len=7, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x03
+sys={1600.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x1fc -> 0x1f9 (active_len=7, ramp_len=7, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x06
+sys={1700.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x1f9 -> 0x0fb (active_len=7, ramp_len=7, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x04
+sys={1750.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x0fb -> 0x1fb (active_len=8, ramp_len=8, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x04
+sys={1850.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x1fb -> 0x0ff (active_len=8, ramp_len=8, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x00
+sys={1950.000000}: select()
+(bts=0) ACC: rotate ACC allowed active subset 0x0ff -> 0x1fe (active_len=8, ramp_len=8, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x01
+sys={2000.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x1fe -> 0x1ff (active_len=9, ramp_len=9, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x02 t3=0x00
+sys={2250.000000}: select()
+(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x1ff (active_len=9, ramp_len=10, adm_len=10, perm_len=9, rotation=off)
+sys={2500.000000}: select()
+sys={2750.000000}: select()
+sys={3000.000000}: select()
+sys={3250.000000}: select()
+BTS deallocated OK in test_acc_ramp_up_rotate()
+===test_acc_ramp_updown_rotate(80, 90, 0, 100, 15)===
+(bts=0) ACC: New ACC allowed subset 0x3ff (active_len=10, ramp_len=10, adm_len=10, perm_len=10, rotation=off)
+BTS allocation OK in test_acc_ramp_updown_rotate()
+*** Barring one ACC ***
+(bts=0) ACC: New ACC allowed subset 0x1ff (active_len=9, ramp_len=10, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x02 t3=0x00
+(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x000 (active_len=0, ramp_len=0, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x03 t3=0xff
+(bts=0) ACC: New ACC allowed subset 0x001 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfe
+sys={100.000000}: select(0): chan_load_avg=0
+(bts=0) ACC: rotate ACC allowed active subset 0x001 -> 0x002 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfd
+sys={200.000000}: select(1): chan_load_avg=15
+(bts=0) ACC: rotate ACC allowed active subset 0x002 -> 0x004 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfb
+sys={250.000000}: select(2): chan_load_avg=30
+(bts=0) ACC: update ACC allowed active subset 0x004 -> 0x00c (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf3
+sys={350.000000}: select(3): chan_load_avg=45
+(bts=0) ACC: rotate ACC allowed active subset 0x00c -> 0x018 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xe7
+sys={450.000000}: select(4): chan_load_avg=60
+(bts=0) ACC: rotate ACC allowed active subset 0x018 -> 0x030 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xcf
+sys={500.000000}: select(5): chan_load_avg=75
+(bts=0) ACC: update ACC allowed active subset 0x030 -> 0x070 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x8f
+sys={600.000000}: select(6): chan_load_avg=90
+(bts=0) ACC: rotate ACC allowed active subset 0x070 -> 0x0e0 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x1f
+sys={700.000000}: select(7): chan_load_avg=100
+(bts=0) ACC: rotate ACC allowed active subset 0x0e0 -> 0x1c0 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x3f
+sys={750.000000}: select(8): chan_load_avg=85
+sys={850.000000}: select(9): chan_load_avg=70
+(bts=0) ACC: rotate ACC allowed active subset 0x1c0 -> 0x181 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x7e
+sys={950.000000}: select(10): chan_load_avg=55
+(bts=0) ACC: rotate ACC allowed active subset 0x181 -> 0x083 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x7c
+sys={1000.000000}: select(11): chan_load_avg=40
+(bts=0) ACC: update ACC allowed active subset 0x083 -> 0x183 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x7c
+sys={1100.000000}: select(12): chan_load_avg=25
+(bts=0) ACC: rotate ACC allowed active subset 0x183 -> 0x087 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x78
+sys={1200.000000}: select(13): chan_load_avg=10
+(bts=0) ACC: rotate ACC allowed active subset 0x087 -> 0x00f (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf0
+sys={1250.000000}: select(14): chan_load_avg=0
+(bts=0) ACC: update ACC allowed active subset 0x00f -> 0x01f (active_len=5, ramp_len=5, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xe0
+sys={1350.000000}: select(15): chan_load_avg=15
+(bts=0) ACC: rotate ACC allowed active subset 0x01f -> 0x03e (active_len=5, ramp_len=5, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xc1
+sys={1450.000000}: select(16): chan_load_avg=30
+(bts=0) ACC: rotate ACC allowed active subset 0x03e -> 0x07c (active_len=5, ramp_len=5, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x83
+sys={1500.000000}: select(17): chan_load_avg=45
+(bts=0) ACC: update ACC allowed active subset 0x07c -> 0x0fc (active_len=6, ramp_len=6, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x03
+sys={1600.000000}: select(18): chan_load_avg=60
+(bts=0) ACC: rotate ACC allowed active subset 0x0fc -> 0x1f8 (active_len=6, ramp_len=6, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x07
+sys={1700.000000}: select(19): chan_load_avg=75
+(bts=0) ACC: rotate ACC allowed active subset 0x1f8 -> 0x1f1 (active_len=6, ramp_len=6, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x0e
+sys={1750.000000}: select(20): chan_load_avg=90
+sys={1850.000000}: select(21): chan_load_avg=100
+(bts=0) ACC: rotate ACC allowed active subset 0x1f1 -> 0x0f3 (active_len=6, ramp_len=6, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x0c
+sys={1950.000000}: select(22): chan_load_avg=85
+(bts=0) ACC: rotate ACC allowed active subset 0x0f3 -> 0x077 (active_len=6, ramp_len=6, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x88
+sys={2000.000000}: select(23): chan_load_avg=70
+(bts=0) ACC: update ACC allowed active subset 0x077 -> 0x0f7 (active_len=7, ramp_len=7, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x08
+sys={2100.000000}: select(24): chan_load_avg=55
+(bts=0) ACC: rotate ACC allowed active subset 0x0f7 -> 0x07f (active_len=7, ramp_len=7, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x80
+sys={2200.000000}: select(25): chan_load_avg=40
+(bts=0) ACC: rotate ACC allowed active subset 0x07f -> 0x0fe (active_len=7, ramp_len=7, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x01
+sys={2250.000000}: select(26): chan_load_avg=25
+(bts=0) ACC: update ACC allowed active subset 0x0fe -> 0x1fe (active_len=8, ramp_len=8, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x01
+sys={2350.000000}: select(27): chan_load_avg=10
+(bts=0) ACC: rotate ACC allowed active subset 0x1fe -> 0x1fd (active_len=8, ramp_len=8, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x02
+sys={2450.000000}: select(28): chan_load_avg=0
+(bts=0) ACC: rotate ACC allowed active subset 0x1fd -> 0x0ff (active_len=8, ramp_len=8, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x00
+sys={2500.000000}: select(29): chan_load_avg=15
+(bts=0) ACC: update ACC allowed active subset 0x0ff -> 0x1ff (active_len=9, ramp_len=9, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x02 t3=0x00
+sys={2750.000000}: select(30): chan_load_avg=30
+(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x1ff (active_len=9, ramp_len=10, adm_len=10, perm_len=9, rotation=off)
+sys={3000.000000}: select(31): chan_load_avg=45
+sys={3250.000000}: select(32): chan_load_avg=60
+sys={3500.000000}: select(33): chan_load_avg=75
+sys={3750.000000}: select(34): chan_load_avg=90
+sys={4000.000000}: select(35): chan_load_avg=100
+sys={4250.000000}: select(36): chan_load_avg=85
+sys={4500.000000}: select(37): chan_load_avg=70
+(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x1ff (active_len=9, ramp_len=10, adm_len=10, perm_len=9, rotation=off)
+sys={4750.000000}: select(38): chan_load_avg=55
+sys={5000.000000}: select(39): chan_load_avg=40
+sys={5250.000000}: select(40): chan_load_avg=25
+sys={5500.000000}: select(41): chan_load_avg=10
+sys={5750.000000}: select(42): chan_load_avg=0
+sys={6000.000000}: select(43): chan_load_avg=15
+sys={6250.000000}: select(44): chan_load_avg=30
+sys={6500.000000}: select(45): chan_load_avg=45
+sys={6750.000000}: select(46): chan_load_avg=60
+sys={7000.000000}: select(47): chan_load_avg=75
+sys={7250.000000}: select(48): chan_load_avg=90
+sys={7500.000000}: select(49): chan_load_avg=100
+BTS deallocated OK in test_acc_ramp_updown_rotate()
+===test_acc_ramp_updown_rotate(30, 50, 10, 100, 15)===
+(bts=0) ACC: New ACC allowed subset 0x3ff (active_len=10, ramp_len=10, adm_len=10, perm_len=10, rotation=off)
+BTS allocation OK in test_acc_ramp_updown_rotate()
+*** Barring one ACC ***
+(bts=0) ACC: New ACC allowed subset 0x1ff (active_len=9, ramp_len=10, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x02 t3=0x00
+(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x000 (active_len=0, ramp_len=0, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x03 t3=0xff
+(bts=0) ACC: New ACC allowed subset 0x001 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfe
+sys={100.000000}: select(0): chan_load_avg=10
+(bts=0) ACC: rotate ACC allowed active subset 0x001 -> 0x002 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfd
+sys={200.000000}: select(1): chan_load_avg=25
+(bts=0) ACC: rotate ACC allowed active subset 0x002 -> 0x004 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfb
+sys={250.000000}: select(2): chan_load_avg=40
+sys={350.000000}: select(3): chan_load_avg=55
+(bts=0) ACC: rotate ACC allowed active subset 0x004 -> 0x008 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf7
+sys={450.000000}: select(4): chan_load_avg=70
+(bts=0) ACC: rotate ACC allowed active subset 0x008 -> 0x010 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xef
+sys={500.000000}: select(5): chan_load_avg=85
+sys={600.000000}: select(6): chan_load_avg=100
+(bts=0) ACC: rotate ACC allowed active subset 0x010 -> 0x020 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xdf
+sys={700.000000}: select(7): chan_load_avg=85
+(bts=0) ACC: rotate ACC allowed active subset 0x020 -> 0x040 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xbf
+sys={750.000000}: select(8): chan_load_avg=70
+sys={850.000000}: select(9): chan_load_avg=55
+(bts=0) ACC: rotate ACC allowed active subset 0x040 -> 0x080 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x7f
+sys={950.000000}: select(10): chan_load_avg=40
+(bts=0) ACC: rotate ACC allowed active subset 0x080 -> 0x100 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0xff
+sys={1000.000000}: select(11): chan_load_avg=25
+(bts=0) ACC: update ACC allowed active subset 0x100 -> 0x101 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0xfe
+sys={1100.000000}: select(12): chan_load_avg=10
+(bts=0) ACC: rotate ACC allowed active subset 0x101 -> 0x003 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfc
+sys={1200.000000}: select(13): chan_load_avg=25
+(bts=0) ACC: rotate ACC allowed active subset 0x003 -> 0x006 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf9
+sys={1250.000000}: select(14): chan_load_avg=40
+sys={1350.000000}: select(15): chan_load_avg=55
+(bts=0) ACC: rotate ACC allowed active subset 0x006 -> 0x00c (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf3
+sys={1450.000000}: select(16): chan_load_avg=70
+(bts=0) ACC: rotate ACC allowed active subset 0x00c -> 0x018 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xe7
+sys={1500.000000}: select(17): chan_load_avg=85
+(bts=0) ACC: update ACC allowed active subset 0x018 -> 0x010 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xef
+sys={1600.000000}: select(18): chan_load_avg=100
+(bts=0) ACC: rotate ACC allowed active subset 0x010 -> 0x020 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xdf
+sys={1700.000000}: select(19): chan_load_avg=85
+(bts=0) ACC: rotate ACC allowed active subset 0x020 -> 0x040 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xbf
+sys={1750.000000}: select(20): chan_load_avg=70
+sys={1850.000000}: select(21): chan_load_avg=55
+(bts=0) ACC: rotate ACC allowed active subset 0x040 -> 0x080 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x7f
+sys={1950.000000}: select(22): chan_load_avg=40
+(bts=0) ACC: rotate ACC allowed active subset 0x080 -> 0x100 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0xff
+sys={2000.000000}: select(23): chan_load_avg=25
+(bts=0) ACC: update ACC allowed active subset 0x100 -> 0x101 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0xfe
+sys={2100.000000}: select(24): chan_load_avg=10
+(bts=0) ACC: rotate ACC allowed active subset 0x101 -> 0x003 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfc
+sys={2200.000000}: select(25): chan_load_avg=25
+(bts=0) ACC: rotate ACC allowed active subset 0x003 -> 0x006 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf9
+sys={2250.000000}: select(26): chan_load_avg=40
+sys={2350.000000}: select(27): chan_load_avg=55
+(bts=0) ACC: rotate ACC allowed active subset 0x006 -> 0x00c (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf3
+sys={2450.000000}: select(28): chan_load_avg=70
+(bts=0) ACC: rotate ACC allowed active subset 0x00c -> 0x018 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xe7
+sys={2500.000000}: select(29): chan_load_avg=85
+(bts=0) ACC: update ACC allowed active subset 0x018 -> 0x010 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xef
+sys={2600.000000}: select(30): chan_load_avg=100
+(bts=0) ACC: rotate ACC allowed active subset 0x010 -> 0x020 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xdf
+sys={2700.000000}: select(31): chan_load_avg=85
+(bts=0) ACC: rotate ACC allowed active subset 0x020 -> 0x040 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xbf
+sys={2750.000000}: select(32): chan_load_avg=70
+sys={2850.000000}: select(33): chan_load_avg=55
+(bts=0) ACC: rotate ACC allowed active subset 0x040 -> 0x080 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x7f
+sys={2950.000000}: select(34): chan_load_avg=40
+(bts=0) ACC: rotate ACC allowed active subset 0x080 -> 0x100 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0xff
+sys={3000.000000}: select(35): chan_load_avg=25
+(bts=0) ACC: update ACC allowed active subset 0x100 -> 0x101 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0xfe
+sys={3100.000000}: select(36): chan_load_avg=10
+(bts=0) ACC: rotate ACC allowed active subset 0x101 -> 0x003 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfc
+sys={3200.000000}: select(37): chan_load_avg=25
+(bts=0) ACC: rotate ACC allowed active subset 0x003 -> 0x006 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf9
+sys={3250.000000}: select(38): chan_load_avg=40
+sys={3350.000000}: select(39): chan_load_avg=55
+(bts=0) ACC: rotate ACC allowed active subset 0x006 -> 0x00c (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf3
+sys={3450.000000}: select(40): chan_load_avg=70
+(bts=0) ACC: rotate ACC allowed active subset 0x00c -> 0x018 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xe7
+sys={3500.000000}: select(41): chan_load_avg=85
+(bts=0) ACC: update ACC allowed active subset 0x018 -> 0x010 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xef
+sys={3600.000000}: select(42): chan_load_avg=100
+(bts=0) ACC: rotate ACC allowed active subset 0x010 -> 0x020 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xdf
+sys={3700.000000}: select(43): chan_load_avg=85
+(bts=0) ACC: rotate ACC allowed active subset 0x020 -> 0x040 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xbf
+sys={3750.000000}: select(44): chan_load_avg=70
+sys={3850.000000}: select(45): chan_load_avg=55
+(bts=0) ACC: rotate ACC allowed active subset 0x040 -> 0x080 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x7f
+sys={3950.000000}: select(46): chan_load_avg=40
+(bts=0) ACC: rotate ACC allowed active subset 0x080 -> 0x100 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0xff
+sys={4000.000000}: select(47): chan_load_avg=25
+(bts=0) ACC: update ACC allowed active subset 0x100 -> 0x101 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0xfe
+sys={4100.000000}: select(48): chan_load_avg=10
+(bts=0) ACC: rotate ACC allowed active subset 0x101 -> 0x003 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfc
+sys={4200.000000}: select(49): chan_load_avg=25
+(bts=0) ACC: rotate ACC allowed active subset 0x003 -> 0x006 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf9
+BTS deallocated OK in test_acc_ramp_updown_rotate()
+===test_acc_ramp_updown_rotate(50, 49, 0, 100, 10)===
+(bts=0) ACC: New ACC allowed subset 0x3ff (active_len=10, ramp_len=10, adm_len=10, perm_len=10, rotation=off)
+BTS allocation OK in test_acc_ramp_updown_rotate()
+*** Barring one ACC ***
+(bts=0) ACC: New ACC allowed subset 0x1ff (active_len=9, ramp_len=10, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x02 t3=0x00
+(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x000 (active_len=0, ramp_len=0, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x03 t3=0xff
+(bts=0) ACC: New ACC allowed subset 0x001 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfe
+sys={100.000000}: select(0): chan_load_avg=0
+(bts=0) ACC: rotate ACC allowed active subset 0x001 -> 0x002 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfd
+sys={200.000000}: select(1): chan_load_avg=10
+(bts=0) ACC: rotate ACC allowed active subset 0x002 -> 0x004 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfb
+sys={250.000000}: select(2): chan_load_avg=20
+(bts=0) ACC: update ACC allowed active subset 0x004 -> 0x00c (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf3
+sys={350.000000}: select(3): chan_load_avg=30
+(bts=0) ACC: rotate ACC allowed active subset 0x00c -> 0x018 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xe7
+sys={450.000000}: select(4): chan_load_avg=40
+(bts=0) ACC: rotate ACC allowed active subset 0x018 -> 0x030 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xcf
+sys={500.000000}: select(5): chan_load_avg=50
+(bts=0) ACC: update ACC allowed active subset 0x030 -> 0x020 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xdf
+sys={600.000000}: select(6): chan_load_avg=60
+(bts=0) ACC: rotate ACC allowed active subset 0x020 -> 0x040 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xbf
+sys={700.000000}: select(7): chan_load_avg=70
+(bts=0) ACC: rotate ACC allowed active subset 0x040 -> 0x080 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x7f
+sys={750.000000}: select(8): chan_load_avg=80
+sys={850.000000}: select(9): chan_load_avg=90
+(bts=0) ACC: rotate ACC allowed active subset 0x080 -> 0x100 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0xff
+sys={950.000000}: select(10): chan_load_avg=100
+(bts=0) ACC: rotate ACC allowed active subset 0x100 -> 0x001 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfe
+sys={1000.000000}: select(11): chan_load_avg=90
+sys={1100.000000}: select(12): chan_load_avg=80
+(bts=0) ACC: rotate ACC allowed active subset 0x001 -> 0x002 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfd
+sys={1200.000000}: select(13): chan_load_avg=70
+(bts=0) ACC: rotate ACC allowed active subset 0x002 -> 0x004 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfb
+sys={1250.000000}: select(14): chan_load_avg=60
+sys={1350.000000}: select(15): chan_load_avg=50
+(bts=0) ACC: rotate ACC allowed active subset 0x004 -> 0x008 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf7
+sys={1450.000000}: select(16): chan_load_avg=40
+(bts=0) ACC: rotate ACC allowed active subset 0x008 -> 0x010 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xef
+sys={1500.000000}: select(17): chan_load_avg=30
+(bts=0) ACC: update ACC allowed active subset 0x010 -> 0x030 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xcf
+sys={1600.000000}: select(18): chan_load_avg=20
+(bts=0) ACC: rotate ACC allowed active subset 0x030 -> 0x060 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x9f
+sys={1700.000000}: select(19): chan_load_avg=10
+(bts=0) ACC: rotate ACC allowed active subset 0x060 -> 0x0c0 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x3f
+sys={1750.000000}: select(20): chan_load_avg=0
+(bts=0) ACC: update ACC allowed active subset 0x0c0 -> 0x1c0 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x3f
+sys={1850.000000}: select(21): chan_load_avg=10
+(bts=0) ACC: rotate ACC allowed active subset 0x1c0 -> 0x181 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x7e
+sys={1950.000000}: select(22): chan_load_avg=20
+(bts=0) ACC: rotate ACC allowed active subset 0x181 -> 0x083 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x7c
+sys={2000.000000}: select(23): chan_load_avg=30
+(bts=0) ACC: update ACC allowed active subset 0x083 -> 0x183 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x7c
+sys={2100.000000}: select(24): chan_load_avg=40
+(bts=0) ACC: rotate ACC allowed active subset 0x183 -> 0x087 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x78
+sys={2200.000000}: select(25): chan_load_avg=50
+(bts=0) ACC: rotate ACC allowed active subset 0x087 -> 0x00f (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf0
+sys={2250.000000}: select(26): chan_load_avg=60
+(bts=0) ACC: update ACC allowed active subset 0x00f -> 0x00e (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf1
+sys={2350.000000}: select(27): chan_load_avg=70
+(bts=0) ACC: rotate ACC allowed active subset 0x00e -> 0x01c (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xe3
+sys={2450.000000}: select(28): chan_load_avg=80
+(bts=0) ACC: rotate ACC allowed active subset 0x01c -> 0x038 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xc7
+sys={2500.000000}: select(29): chan_load_avg=90
+(bts=0) ACC: update ACC allowed active subset 0x038 -> 0x030 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xcf
+sys={2600.000000}: select(30): chan_load_avg=100
+(bts=0) ACC: rotate ACC allowed active subset 0x030 -> 0x060 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x9f
+sys={2700.000000}: select(31): chan_load_avg=90
+(bts=0) ACC: rotate ACC allowed active subset 0x060 -> 0x0c0 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x3f
+sys={2750.000000}: select(32): chan_load_avg=80
+(bts=0) ACC: update ACC allowed active subset 0x0c0 -> 0x080 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x7f
+sys={2850.000000}: select(33): chan_load_avg=70
+(bts=0) ACC: rotate ACC allowed active subset 0x080 -> 0x100 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0xff
+sys={2950.000000}: select(34): chan_load_avg=60
+(bts=0) ACC: rotate ACC allowed active subset 0x100 -> 0x001 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfe
+sys={3000.000000}: select(35): chan_load_avg=50
+sys={3100.000000}: select(36): chan_load_avg=40
+(bts=0) ACC: rotate ACC allowed active subset 0x001 -> 0x002 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfd
+sys={3200.000000}: select(37): chan_load_avg=30
+(bts=0) ACC: rotate ACC allowed active subset 0x002 -> 0x004 (active_len=1, ramp_len=1, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xfb
+sys={3250.000000}: select(38): chan_load_avg=20
+(bts=0) ACC: update ACC allowed active subset 0x004 -> 0x00c (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf3
+sys={3350.000000}: select(39): chan_load_avg=10
+(bts=0) ACC: rotate ACC allowed active subset 0x00c -> 0x018 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xe7
+sys={3450.000000}: select(40): chan_load_avg=0
+(bts=0) ACC: rotate ACC allowed active subset 0x018 -> 0x030 (active_len=2, ramp_len=2, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xcf
+sys={3500.000000}: select(41): chan_load_avg=10
+(bts=0) ACC: update ACC allowed active subset 0x030 -> 0x070 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x8f
+sys={3600.000000}: select(42): chan_load_avg=20
+(bts=0) ACC: rotate ACC allowed active subset 0x070 -> 0x0e0 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x1f
+sys={3700.000000}: select(43): chan_load_avg=30
+(bts=0) ACC: rotate ACC allowed active subset 0x0e0 -> 0x1c0 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x3f
+sys={3750.000000}: select(44): chan_load_avg=40
+(bts=0) ACC: update ACC allowed active subset 0x1c0 -> 0x1c1 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x02 t3=0x3e
+sys={3850.000000}: select(45): chan_load_avg=50
+(bts=0) ACC: rotate ACC allowed active subset 0x1c1 -> 0x0c3 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0x3c
+sys={3950.000000}: select(46): chan_load_avg=60
+(bts=0) ACC: rotate ACC allowed active subset 0x0c3 -> 0x047 (active_len=4, ramp_len=4, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xb8
+sys={4000.000000}: select(47): chan_load_avg=70
+(bts=0) ACC: update ACC allowed active subset 0x047 -> 0x046 (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xb9
+sys={4100.000000}: select(48): chan_load_avg=80
+(bts=0) ACC: rotate ACC allowed active subset 0x046 -> 0x00e (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xf1
+sys={4200.000000}: select(49): chan_load_avg=90
+(bts=0) ACC: rotate ACC allowed active subset 0x00e -> 0x01c (active_len=3, ramp_len=3, adm_len=10, perm_len=9, rotation=on)
+pcu_info_update(): t2=0x03 t3=0xe3
+BTS deallocated OK in test_acc_ramp_updown_rotate()
+===test_acc_ramp_updown_rotate(30, 80, 30, 80, 5)===
+(bts=0) ACC: New ACC allowed subset 0x3ff (active_len=10, ramp_len=10, adm_len=10, perm_len=10, rotation=off)
+BTS allocation OK in test_acc_ramp_updown_rotate()
+*** Barring one ACC ***
+(bts=0) ACC: New ACC allowed subset 0x1ff (active_len=9, ramp_len=10, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x02 t3=0x00
+(bts=0) ACC: update ACC allowed active subset 0x1ff -> 0x000 (active_len=0, ramp_len=0, adm_len=10, perm_len=9, rotation=off)
+pcu_info_update(): t2=0x03 t3=0xff
+sys={250.000000}: select(0): chan_load_avg=30
+sys={500.000000}: select(1): chan_load_avg=35
+sys={750.000000}: select(2): chan_load_avg=40
+sys={1000.000000}: select(3): chan_load_avg=45
+sys={1250.000000}: select(4): chan_load_avg=50
+sys={1500.000000}: select(5): chan_load_avg=55
+sys={1750.000000}: select(6): chan_load_avg=60
+sys={2000.000000}: select(7): chan_load_avg=65
+sys={2250.000000}: select(8): chan_load_avg=70
+sys={2500.000000}: select(9): chan_load_avg=75
+sys={2750.000000}: select(10): chan_load_avg=80
+sys={3000.000000}: select(11): chan_load_avg=75
+sys={3250.000000}: select(12): chan_load_avg=70
+sys={3500.000000}: select(13): chan_load_avg=65
+sys={3750.000000}: select(14): chan_load_avg=60
+sys={4000.000000}: select(15): chan_load_avg=55
+sys={4250.000000}: select(16): chan_load_avg=50
+sys={4500.000000}: select(17): chan_load_avg=45
+sys={4750.000000}: select(18): chan_load_avg=40
+sys={5000.000000}: select(19): chan_load_avg=35
+sys={5250.000000}: select(20): chan_load_avg=30
+sys={5500.000000}: select(21): chan_load_avg=35
+sys={5750.000000}: select(22): chan_load_avg=40
+sys={6000.000000}: select(23): chan_load_avg=45
+sys={6250.000000}: select(24): chan_load_avg=50
+sys={6500.000000}: select(25): chan_load_avg=55
+sys={6750.000000}: select(26): chan_load_avg=60
+sys={7000.000000}: select(27): chan_load_avg=65
+sys={7250.000000}: select(28): chan_load_avg=70
+sys={7500.000000}: select(29): chan_load_avg=75
+sys={7750.000000}: select(30): chan_load_avg=80
+sys={8000.000000}: select(31): chan_load_avg=75
+sys={8250.000000}: select(32): chan_load_avg=70
+sys={8500.000000}: select(33): chan_load_avg=65
+sys={8750.000000}: select(34): chan_load_avg=60
+sys={9000.000000}: select(35): chan_load_avg=55
+sys={9250.000000}: select(36): chan_load_avg=50
+sys={9500.000000}: select(37): chan_load_avg=45
+sys={9750.000000}: select(38): chan_load_avg=40
+sys={10000.000000}: select(39): chan_load_avg=35
+sys={10250.000000}: select(40): chan_load_avg=30
+sys={10500.000000}: select(41): chan_load_avg=35
+sys={10750.000000}: select(42): chan_load_avg=40
+sys={11000.000000}: select(43): chan_load_avg=45
+sys={11250.000000}: select(44): chan_load_avg=50
+sys={11500.000000}: select(45): chan_load_avg=55
+sys={11750.000000}: select(46): chan_load_avg=60
+sys={12000.000000}: select(47): chan_load_avg=65
+sys={12250.000000}: select(48): chan_load_avg=70
+sys={12500.000000}: select(49): chan_load_avg=75
+BTS deallocated OK in test_acc_ramp_updown_rotate()