IPA_Emulation: Allow client/server to specify CCM parameters
This commit is contained in:
parent
e7096c1571
commit
e21096dbaf
|
@ -57,14 +57,43 @@ type component IPA_Emulation_CT {
|
||||||
var boolean g_is_bsc_mgw;
|
var boolean g_is_bsc_mgw;
|
||||||
|
|
||||||
var IpaMode g_mode;
|
var IpaMode g_mode;
|
||||||
|
var IPA_CCM_Parameters g_ccm_pars := c_default_ccm_pars;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type record IPA_CCM_Parameters {
|
||||||
|
charstring ser_nr optional,
|
||||||
|
charstring name optional,
|
||||||
|
charstring location1 optional,
|
||||||
|
charstring location2 optional,
|
||||||
|
charstring equip_version optional,
|
||||||
|
charstring sw_version optional,
|
||||||
|
charstring ip_addr optional,
|
||||||
|
charstring mac_addr optional,
|
||||||
|
charstring unit_id optional,
|
||||||
|
charstring osmo_rand optional
|
||||||
|
}
|
||||||
|
|
||||||
|
private const IPA_CCM_Parameters c_default_ccm_pars := {
|
||||||
|
ser_nr := omit,
|
||||||
|
name := "mahlzeit",
|
||||||
|
location1 := omit,
|
||||||
|
location2 := omit,
|
||||||
|
equip_version := omit,
|
||||||
|
sw_version := omit,
|
||||||
|
ip_addr := omit,
|
||||||
|
mac_addr := omit,
|
||||||
|
unit_id := "0/1/2",
|
||||||
|
osmo_rand := omit
|
||||||
|
};
|
||||||
|
|
||||||
function f_connect(charstring remote_host, PortNumber remote_port,
|
function f_connect(charstring remote_host, PortNumber remote_port,
|
||||||
charstring local_host, PortNumber local_port) runs on IPA_Emulation_CT {
|
charstring local_host, PortNumber local_port,
|
||||||
|
IPA_CCM_Parameters ccm_pars := c_default_ccm_pars) runs on IPA_Emulation_CT {
|
||||||
var Result res;
|
var Result res;
|
||||||
res := IPA_CodecPort_CtrlFunct.f_IPL4_connect(IPA_PORT, remote_host, remote_port,
|
res := IPA_CodecPort_CtrlFunct.f_IPL4_connect(IPA_PORT, remote_host, remote_port,
|
||||||
local_host, local_port, 0, { tcp:={} });
|
local_host, local_port, 0, { tcp:={} });
|
||||||
g_ipa_conn_id := res.connId;
|
g_ipa_conn_id := res.connId;
|
||||||
|
g_ccm_pars := ccm_pars;
|
||||||
/* Set function for dissecting the binary */
|
/* Set function for dissecting the binary */
|
||||||
var f_IPL4_getMsgLen vl_f := refers(f_IPL4_fixedMsgLen);
|
var f_IPL4_getMsgLen vl_f := refers(f_IPL4_fixedMsgLen);
|
||||||
IPA_CodecPort_CtrlFunct.f_IPL4_setGetMsgLen(IPA_PORT, g_ipa_conn_id, vl_f, {0, 2, 3, 1, 0});
|
IPA_CodecPort_CtrlFunct.f_IPL4_setGetMsgLen(IPA_PORT, g_ipa_conn_id, vl_f, {0, 2, 3, 1, 0});
|
||||||
|
@ -72,11 +101,13 @@ function f_connect(charstring remote_host, PortNumber remote_port,
|
||||||
g_is_bsc_mgw := true;
|
g_is_bsc_mgw := true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function f_bind(charstring local_host, PortNumber local_port) runs on IPA_Emulation_CT {
|
function f_bind(charstring local_host, PortNumber local_port,
|
||||||
|
IPA_CCM_Parameters ccm_pars := c_default_ccm_pars) runs on IPA_Emulation_CT {
|
||||||
var Result res;
|
var Result res;
|
||||||
res := IPA_CodecPort_CtrlFunct.f_IPL4_listen(IPA_PORT,
|
res := IPA_CodecPort_CtrlFunct.f_IPL4_listen(IPA_PORT,
|
||||||
local_host, local_port, { tcp:={} });
|
local_host, local_port, { tcp:={} });
|
||||||
g_ipa_conn_id := res.connId;
|
g_ipa_conn_id := res.connId;
|
||||||
|
g_ccm_pars := ccm_pars;
|
||||||
g_is_bsc_mgw := false;
|
g_is_bsc_mgw := false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,7 +127,7 @@ private template IpaCcmRespPart t_IdRespPart(IpaCcmIdTag tag, charstring payload
|
||||||
}
|
}
|
||||||
|
|
||||||
/* build IPA CCM ID RESP response from IPA CCM GET */
|
/* build IPA CCM ID RESP response from IPA CCM GET */
|
||||||
private function f_ccm_make_id_resp(PDU_IPA_CCM get) return PDU_IPA_CCM {
|
private function f_ccm_make_id_resp(PDU_IPA_CCM get) runs on IPA_Emulation_CT return PDU_IPA_CCM {
|
||||||
var integer i;
|
var integer i;
|
||||||
var PDU_IPA_CCM resp := {
|
var PDU_IPA_CCM resp := {
|
||||||
msg_type := IPAC_MSGT_ID_RESP,
|
msg_type := IPAC_MSGT_ID_RESP,
|
||||||
|
@ -109,14 +140,38 @@ private function f_ccm_make_id_resp(PDU_IPA_CCM get) return PDU_IPA_CCM {
|
||||||
var IpaCcmIdTag tag := get.u.get[i].tag;
|
var IpaCcmIdTag tag := get.u.get[i].tag;
|
||||||
var charstring foo;
|
var charstring foo;
|
||||||
select (tag) {
|
select (tag) {
|
||||||
case (IPAC_IDTAG_UNIT) {
|
case (IPAC_IDTAG_SERNR) {
|
||||||
foo := "0/1/2";
|
foo := g_ccm_pars.ser_nr;
|
||||||
}
|
}
|
||||||
case (IPAC_IDTAG_UNITNAME) {
|
case (IPAC_IDTAG_UNITNAME) {
|
||||||
foo := "mahlzeit";
|
foo := g_ccm_pars.name;
|
||||||
|
}
|
||||||
|
case (IPAC_IDTAG_LOCATION1) {
|
||||||
|
foo := g_ccm_pars.location1;
|
||||||
|
}
|
||||||
|
case (IPAC_IDTAG_LOCATION2) {
|
||||||
|
foo := g_ccm_pars.location2;
|
||||||
|
}
|
||||||
|
case (IPAC_IDTAG_EQUIPVERS) {
|
||||||
|
foo := g_ccm_pars.equip_version;
|
||||||
|
}
|
||||||
|
case (IPAC_IDTAG_SWVERSION) {
|
||||||
|
foo := g_ccm_pars.sw_version;
|
||||||
|
}
|
||||||
|
case (IPAC_IDTAG_IPADDR) {
|
||||||
|
foo := g_ccm_pars.ip_addr;
|
||||||
|
}
|
||||||
|
case (IPAC_IDTAG_MACADDR) {
|
||||||
|
foo := g_ccm_pars.mac_addr;
|
||||||
|
}
|
||||||
|
case (IPAC_IDTAG_UNIT) {
|
||||||
|
foo := g_ccm_pars.unit_id;
|
||||||
|
}
|
||||||
|
case (IPAC_IDTAG_OSMO_RAND) {
|
||||||
|
foo := g_ccm_pars.osmo_rand;
|
||||||
}
|
}
|
||||||
case else {
|
case else {
|
||||||
foo := "foo";
|
foo := "unknown";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
resp.u.resp[sizeof(resp.u.resp)] := valueof(t_IdRespPart(tag, foo));
|
resp.u.resp[sizeof(resp.u.resp)] := valueof(t_IdRespPart(tag, foo));
|
||||||
|
|
Loading…
Reference in New Issue