BSSGP_Emulation: Allow a "CreateCb" to handle unknown inbound TLLI
The existing BSSGP Code assumed that the TLLIs were always known "a priori" by the test case. With the newly-introduced create_cb, the user can provide a function to handle any incoming messages for an unknown TLLL. The default handler behaves like before: fail + terminate. Change-Id: Ice0e145f5a6518ff79547dd851042b7965f38e00
This commit is contained in:
parent
e582f20aa3
commit
4d112c926c
|
@ -65,7 +65,8 @@ function f_gen_bvc(integer base, integer idx) return BssgpBvcConfig {
|
|||
},
|
||||
cell_id := base + 600 + idx
|
||||
},
|
||||
depth := BSSGP_DECODE_DEPTH_LLC
|
||||
depth := BSSGP_DECODE_DEPTH_LLC,
|
||||
create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)
|
||||
};
|
||||
return bvc;
|
||||
}
|
||||
|
|
|
@ -66,7 +66,8 @@ function f_gen_bvc(integer base, integer idx) return BssgpBvcConfig {
|
|||
},
|
||||
cell_id := base + 600 + idx
|
||||
},
|
||||
depth := BSSGP_DECODE_DEPTH_LLC
|
||||
depth := BSSGP_DECODE_DEPTH_LLC,
|
||||
create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)
|
||||
};
|
||||
return bvc;
|
||||
}
|
||||
|
|
|
@ -264,7 +264,8 @@ function f_init(BcdMccMnc mcc_mnc := '262F42'H) runs on test_CT {
|
|||
},
|
||||
cell_id := 20960
|
||||
},
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP,
|
||||
create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)
|
||||
} }
|
||||
};
|
||||
g_pcu[1].cfg := {
|
||||
|
@ -280,7 +281,8 @@ function f_init(BcdMccMnc mcc_mnc := '262F42'H) runs on test_CT {
|
|||
},
|
||||
cell_id := 20961
|
||||
},
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP,
|
||||
create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)
|
||||
} }
|
||||
};
|
||||
g_pcu[2].cfg := {
|
||||
|
@ -296,7 +298,8 @@ function f_init(BcdMccMnc mcc_mnc := '262F42'H) runs on test_CT {
|
|||
},
|
||||
cell_id := 20962
|
||||
},
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP,
|
||||
create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)
|
||||
} }
|
||||
};
|
||||
|
||||
|
@ -314,7 +317,8 @@ function f_init(BcdMccMnc mcc_mnc := '262F42'H) runs on test_CT {
|
|||
},
|
||||
cell_id := 20960
|
||||
},
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP,
|
||||
create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)
|
||||
},
|
||||
{
|
||||
bvci := 210,
|
||||
|
@ -326,7 +330,8 @@ function f_init(BcdMccMnc mcc_mnc := '262F42'H) runs on test_CT {
|
|||
},
|
||||
cell_id := 20961
|
||||
},
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP,
|
||||
create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)
|
||||
},
|
||||
{
|
||||
bvci := 220,
|
||||
|
@ -338,7 +343,8 @@ function f_init(BcdMccMnc mcc_mnc := '262F42'H) runs on test_CT {
|
|||
},
|
||||
cell_id := 20962
|
||||
},
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP,
|
||||
create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -681,7 +681,8 @@ type record BssgpConfig {
|
|||
type record BssgpBvcConfig {
|
||||
BssgpBvci bvci,
|
||||
BssgpCellId cell_id,
|
||||
BssgpDecodeDepth depth
|
||||
BssgpDecodeDepth depth,
|
||||
BssgpCreateCallback create_cb
|
||||
};
|
||||
type record of BssgpBvcConfig BssgpBvcConfigs;
|
||||
type enumerated BssgpDecodeDepth {
|
||||
|
@ -693,6 +694,14 @@ type enumerated BssgpDecodeDepth {
|
|||
BSSGP_DECODE_DEPTH_L3
|
||||
#endif
|
||||
};
|
||||
/* call-back function type: Called for inbound BSSGP for unknown TLLIs; could create BSSGP_ClienT_CT */
|
||||
type function BssgpCreateCallback(BssgpBvci bvci, BssgpCellId cell_id, OCT4 tlli, BssgpDecoded dec) runs on BSSGP_BVC_CT;
|
||||
|
||||
/* Default Create Callback function: Fail and terminate */
|
||||
function DefaultCreateCallback(BssgpBvci bvci, BssgpCellId cell_id, OCT4 tlli, BssgpDecoded dec) runs on BSSGP_BVC_CT {
|
||||
setverdict(fail, "Couldn't find Component for TLLI ", tlli);
|
||||
mtc.stop;
|
||||
}
|
||||
|
||||
/*
|
||||
private function f_tbl_init() runs on BSSGP_BVC_CT {
|
||||
|
@ -792,8 +801,7 @@ private function f_tbl_comp_by_tlli(OCT4 tlli) runs on BSSGP_BVC_CT return BSSGP
|
|||
return ClientTable[i].comp_ref;
|
||||
}
|
||||
}
|
||||
setverdict(fail, "Couldn't find Component for TLLI ", tlli);
|
||||
mtc.stop;
|
||||
return null;
|
||||
}
|
||||
|
||||
private function f_tbl_idx_by_comp(BSSGP_Client_CT comp_ref) runs on BSSGP_BVC_CT return integer {
|
||||
|
@ -987,7 +995,11 @@ private altstep as_ptp_unblocked() runs on BSSGP_BVC_CT {
|
|||
var template OCT4 tlli := f_bssgp_get_tlli(udi.bssgp);
|
||||
if (isvalue(tlli)) {
|
||||
vc_conn := f_tbl_comp_by_tlli(valueof(tlli));
|
||||
f_send_bssgp_dec(dec, vc_conn, BSSGP_SP);
|
||||
if (vc_conn == null) {
|
||||
g_cfg.create_cb.apply(g_cfg.bvci, g_cfg.cell_id, valueof(tlli), dec);
|
||||
} else {
|
||||
f_send_bssgp_dec(dec, vc_conn, BSSGP_SP);
|
||||
}
|
||||
} else {
|
||||
log("No TLLI: Broadcasting ", dec);
|
||||
/* broadcast this message to all components */
|
||||
|
@ -1006,7 +1018,11 @@ private altstep as_ptp_unblocked() runs on BSSGP_BVC_CT {
|
|||
var template OCT4 tlli := f_bssgp_get_tlli(udi.bssgp);
|
||||
if (isvalue(tlli)) {
|
||||
vc_conn := f_tbl_comp_by_tlli(valueof(tlli));
|
||||
f_send_bssgp_dec(dec, vc_conn, BSSGP_SP_SIG);
|
||||
if (vc_conn == null) {
|
||||
g_cfg.create_cb.apply(g_cfg.bvci, g_cfg.cell_id, valueof(tlli), dec);
|
||||
} else {
|
||||
f_send_bssgp_dec(dec, vc_conn, BSSGP_SP_SIG);
|
||||
}
|
||||
} else {
|
||||
log("No TLLI: Broadcasting ", dec);
|
||||
/* broadcast this message to all components */
|
||||
|
|
|
@ -33,7 +33,8 @@ modulepar {
|
|||
},
|
||||
cell_id := 20960
|
||||
},
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP
|
||||
depth := BSSGP_DECODE_DEPTH_BSSGP,
|
||||
create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -334,7 +334,8 @@ function f_init(BcdMccMnc mcc_mnc := '262F42'H) runs on test_CT {
|
|||
},
|
||||
cell_id := 20960
|
||||
},
|
||||
depth := BSSGP_DECODE_DEPTH_L3
|
||||
depth := BSSGP_DECODE_DEPTH_L3,
|
||||
create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -354,7 +355,8 @@ function f_init(BcdMccMnc mcc_mnc := '262F42'H) runs on test_CT {
|
|||
},
|
||||
cell_id := 20961
|
||||
},
|
||||
depth := BSSGP_DECODE_DEPTH_L3
|
||||
depth := BSSGP_DECODE_DEPTH_L3,
|
||||
create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -374,7 +376,8 @@ function f_init(BcdMccMnc mcc_mnc := '262F42'H) runs on test_CT {
|
|||
},
|
||||
cell_id := 20962
|
||||
},
|
||||
depth := BSSGP_DECODE_DEPTH_L3
|
||||
depth := BSSGP_DECODE_DEPTH_L3,
|
||||
create_cb := refers(BSSGP_Emulation.DefaultCreateCallback)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue