DIAMETER: parametrize CEA template

So far, we hard-coded the Capabilities-Exchange-Answer for
HSS emulation.  As we want to emulate other DIAMETER network
elements, let's parametrize the template as well as the respective
parameters for the emulation component.

Change-Id: Ie30ff1bac40ab3dc6058587f0586b643ff2b0cb6
This commit is contained in:
Harald Welte 2020-04-26 21:41:12 +02:00
parent f9fb63ec98
commit 61f73d553b
3 changed files with 18 additions and 8 deletions

View File

@ -33,6 +33,7 @@ import from DIAMETER_Types all;
import from DIAMETER_Templates all;
import from Osmocom_Types all;
import from IPL4asp_Types all;
import from Native_Functions all;
type hexstring IMSI;
@ -94,7 +95,10 @@ type record DIAMETER_conn_parameters {
HostName remote_ip,
PortNumber remote_sctp_port,
HostName local_ip,
PortNumber local_sctp_port
PortNumber local_sctp_port,
charstring origin_host,
charstring origin_realm,
uint32_t vendor_app_id
}
function tr_DIAMETER_RecvFrom_R(template PDU_DIAMETER msg)
@ -312,7 +316,8 @@ function main(DIAMETEROps ops, DIAMETER_conn_parameters p, charstring id) runs o
/* handle CER/CEA handshake */
[] DIAMETER.receive(tr_DIAMETER_RecvFrom_R(tr_DIAMETER_R(cmd_code := Capabilities_Exchange))) -> value mrf {
var template (value) PDU_DIAMETER resp;
resp := ts_DIA_CEA(mrf.msg.hop_by_hop_id, mrf.msg.end_to_end_id);
resp := ts_DIA_CEA(mrf.msg.hop_by_hop_id, mrf.msg.end_to_end_id, p.origin_host,
p.origin_realm, f_inet_addr(p.local_ip), p.vendor_app_id);
DIAMETER.send(t_DIAMETER_Send(g_diameter_conn_id, resp));
}

View File

@ -783,13 +783,15 @@ template (value) GenericAVP ts_AVP_3GPP_PdnType(template (value) AAA_3GPP_PDN_Ty
/* 5.3.2 Capabilities Exchange Answer */
template (value) PDU_DIAMETER
ts_DIA_CEA(template (value) UINT32 hbh_id, template (value) UINT32 ete_id)
ts_DIA_CEA(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
template (value) charstring origin_host, template (value) charstring origin_realm,
template (value) octetstring host_ip, uint32_t vendor_app_id)
:= ts_DIAMETER(flags:='00000000'B, cmd_code:=Capabilities_Exchange, hbh_id:=hbh_id, ete_id:=ete_id,
avps := {
ts_AVP_ResultCode(DIAMETER_SUCCESS),
ts_AVP_OriginHost("hss.localdomain"),
ts_AVP_OriginRealm("localdomain"),
ts_AVP_HostIpAddr('7E000004'O),
ts_AVP_OriginHost(origin_host),
ts_AVP_OriginRealm(origin_realm),
ts_AVP_HostIpAddr(host_ip),
ts_AVP_VendorId(vendor_id_3GPP),
ts_AVP_ProductName("TTCN-3 Testsuite"),
ts_AVP_OriginStateId('00000001'O),
@ -798,7 +800,7 @@ ts_DIA_CEA(template (value) UINT32 hbh_id, template (value) UINT32 ete_id)
ts_AVP_SuppVendorIdRaw(13019), /* ETSI */
ts_AVP_AuthAppId('FFFFFFFF'O),
ts_AVP_InbSecId('00000000'O),
ts_AVP_VendorSpecAppId(vendor_id_3GPP, c_DIAMETER_3GPP_S6_AID)
ts_AVP_VendorSpecAppId(vendor_id_3GPP, vendor_app_id)
});

View File

@ -219,7 +219,10 @@ friend function f_init_diameter(charstring id) runs on MTC_CT {
remote_ip := mp_mme_ip,
remote_sctp_port := -1,
local_ip := mp_s6_local_ip,
local_sctp_port := mp_s6_local_port
local_sctp_port := mp_s6_local_port,
origin_host := "hss.localdomain",
origin_realm := "localdomain",
vendor_app_id := c_DIAMETER_3GPP_S6_AID
};
vc_DIAMETER := DIAMETER_Emulation_CT.create(id);
map(vc_DIAMETER:DIAMETER, system:DIAMETER_CODEC_PT);