FR/FRNET: Dynamically create number of BVC at runtime

We don't want the number of NSE and the number of BVC to be a
compile-time choice, but rather something dynamic at rutime.  This
allows configuration files to define those details.

Change-Id: I55b44481b5322deaf78619c1689462d716ddfcec
This commit is contained in:
Harald Welte 2020-11-11 19:01:46 +01:00 committed by laforge
parent c450552c59
commit de6f3ee592
2 changed files with 70 additions and 49 deletions

View File

@ -8,6 +8,7 @@ import from NS_Emulation all;
import from BSSGP_Emulation all;
modulepar {
integer mp_num_bvc := 10;
NSConfigurations mp_nsconfig := {
{
nsei := 123,
@ -34,11 +35,9 @@ type record GbInstance {
BssgpConfig cfg
};
const integer NUM_GB := 1;
type record length(NUM_GB) of GbInstance GbInstances;
type record length(NUM_GB) of NSConfiguration NSConfigurations;
type record length(NUM_GB) of BssgpCellId BssgpCellIds;
type record of GbInstance GbInstances;
type record of NSConfiguration NSConfigurations;
type record of BssgpCellId BssgpCellIds;
type component test_CT {
var GbInstances g_gb;
@ -53,28 +52,39 @@ private function f_init_gb(inout GbInstance gb, charstring id, integer offset) r
gb.vc_BSSGP.start(BssgpStart(gb.cfg, testcasename()));
}
testcase TC_foo() runs on test_CT {
g_gb[0].cfg := {
nsei := 123,
sgsn_role := true,
bvc := {
{
bvci := 1123,
cell_id := {
ra_id := {
lai := {
mcc_mnc := '262F42'H,
lac := 11123
},
rac := 1
},
cell_id := 31123
function f_gen_bvc(integer base, integer idx) return BssgpBvcConfig {
var BssgpBvcConfig bvc := {
bvci := base + 100 + idx,
cell_id := {
ra_id := {
lai := {
mcc_mnc := '262F42'H,
lac := base + 300 + idx
},
depth := BSSGP_DECODE_DEPTH_LLC
}
}
rac := 1
},
cell_id := base + 600 + idx
},
depth := BSSGP_DECODE_DEPTH_LLC
};
f_init_gb(g_gb[0], "gb", 0);
return bvc;
}
testcase TC_foo() runs on test_CT {
for (var integer i := 0; i < lengthof(mp_nsconfig); i := i+1) {
g_gb[i].cfg := {
nsei := mp_nsconfig[i].nsei,
sgsn_role := true,
bvc := { }
};
/* create 'mp_num_bvc' number of BVCs */
for (var integer j := 0; j < mp_num_bvc; j := j+1) {
g_gb[i].cfg.bvc := g_gb[i].cfg.bvc & { f_gen_bvc(i * 1000, j) };
}
f_init_gb(g_gb[i], "gb", i);
}
while (true) {
f_sleep(100.0);
}

View File

@ -8,6 +8,7 @@ import from NS_Emulation all;
import from BSSGP_Emulation all;
modulepar {
integer mp_num_bvc := 10;
NSConfigurations mp_nsconfig := {
{
nsei := 123,
@ -34,10 +35,9 @@ type record GbInstance {
BssgpConfig cfg
};
const integer NUM_GB := 1;
type record length(NUM_GB) of GbInstance GbInstances;
type record length(NUM_GB) of NSConfiguration NSConfigurations;
type record length(NUM_GB) of BssgpCellId BssgpCellIds;
type record of GbInstance GbInstances;
type record of NSConfiguration NSConfigurations;
type record of BssgpCellId BssgpCellIds;
type component test_CT {
@ -53,28 +53,39 @@ private function f_init_gb(inout GbInstance gb, charstring id, integer offset) r
gb.vc_BSSGP.start(BssgpStart(gb.cfg, testcasename()));
}
testcase TC_foo() runs on test_CT {
g_gb[0].cfg := {
nsei := 123,
sgsn_role := false,
bvc := {
{
bvci := 1123,
cell_id := {
ra_id := {
lai := {
mcc_mnc := '262F42'H,
lac := 11123
},
rac := 1
},
cell_id := 31123
function f_gen_bvc(integer base, integer idx) return BssgpBvcConfig {
var BssgpBvcConfig bvc := {
bvci := base + 100 + idx,
cell_id := {
ra_id := {
lai := {
mcc_mnc := '262F42'H,
lac := base + 300 + idx
},
depth := BSSGP_DECODE_DEPTH_LLC
}
}
rac := 1
},
cell_id := base + 600 + idx
},
depth := BSSGP_DECODE_DEPTH_LLC
};
f_init_gb(g_gb[0], "gb", 0);
return bvc;
}
testcase TC_foo() runs on test_CT {
for (var integer i := 0; i < lengthof(mp_nsconfig); i := i+1) {
g_gb[i].cfg := {
nsei := mp_nsconfig[i].nsei,
sgsn_role := false,
bvc := { }
};
/* create 'mp_num_bvc' number of BVCs */
for (var integer j := 0; j < mp_num_bvc; j := j+1) {
g_gb[i].cfg.bvc := g_gb[i].cfg.bvc & { f_gen_bvc(i * 1000, j) };
}
f_init_gb(g_gb[i], "gb", i);
}
while (true) {
f_sleep(100.0);
}