lib/DIAMETER: Allow sending CEA with AuthAppId
The new message is to be used by Gy interface emulation, which according to RFC4006 uses AppId 4 "Credit Control Application". The application is apparently not 3GPP vendor specific. Change-Id: I0e33673d65140aad34d2efcae3c7f49154ceb99f
This commit is contained in:
parent
1ab332ff86
commit
33b4749fcf
|
@ -210,6 +210,7 @@ module GGSN_Tests {
|
||||||
local_sctp_port := PCRF_PORT,
|
local_sctp_port := PCRF_PORT,
|
||||||
origin_host := "pcrf.localdomain",
|
origin_host := "pcrf.localdomain",
|
||||||
origin_realm := "localdomain",
|
origin_realm := "localdomain",
|
||||||
|
auth_app_id := omit,
|
||||||
vendor_app_id := c_DIAMETER_3GPP_Gx_AID
|
vendor_app_id := c_DIAMETER_3GPP_Gx_AID
|
||||||
};
|
};
|
||||||
vc_Gx := DIAMETER_Emulation_CT.create(id);
|
vc_Gx := DIAMETER_Emulation_CT.create(id);
|
||||||
|
|
|
@ -111,7 +111,8 @@ type record DIAMETER_conn_parameters {
|
||||||
PortNumber local_sctp_port,
|
PortNumber local_sctp_port,
|
||||||
charstring origin_host,
|
charstring origin_host,
|
||||||
charstring origin_realm,
|
charstring origin_realm,
|
||||||
uint32_t vendor_app_id
|
uint32_t auth_app_id optional,
|
||||||
|
uint32_t vendor_app_id optional
|
||||||
}
|
}
|
||||||
|
|
||||||
function tr_DIAMETER_RecvFrom_R(template PDU_DIAMETER msg)
|
function tr_DIAMETER_RecvFrom_R(template PDU_DIAMETER msg)
|
||||||
|
@ -329,8 +330,8 @@ function main(DIAMETEROps ops, DIAMETER_conn_parameters p, charstring id) runs o
|
||||||
/* handle CER/CEA handshake */
|
/* handle CER/CEA handshake */
|
||||||
[] DIAMETER.receive(tr_DIAMETER_RecvFrom_R(tr_DIAMETER_R(cmd_code := Capabilities_Exchange))) -> value mrf {
|
[] DIAMETER.receive(tr_DIAMETER_RecvFrom_R(tr_DIAMETER_R(cmd_code := Capabilities_Exchange))) -> value mrf {
|
||||||
var template (value) PDU_DIAMETER resp;
|
var template (value) PDU_DIAMETER resp;
|
||||||
resp := ts_DIA_CEA(mrf.msg.hop_by_hop_id, mrf.msg.end_to_end_id, p.origin_host,
|
resp := f_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);
|
p.origin_realm, f_inet_addr(p.local_ip), p.auth_app_id, p.vendor_app_id);
|
||||||
DIAMETER.send(t_DIAMETER_Send(g_diameter_conn_id, resp));
|
DIAMETER.send(t_DIAMETER_Send(g_diameter_conn_id, resp));
|
||||||
/* notify our user that the CER->CEA exchange has happened */
|
/* notify our user that the CER->CEA exchange has happened */
|
||||||
DIAMETER_UNIT.send(DiameterCapabilityExchgInd:{rx:=mrf.msg, tx:=valueof(resp)});
|
DIAMETER_UNIT.send(DiameterCapabilityExchgInd:{rx:=mrf.msg, tx:=valueof(resp)});
|
||||||
|
|
|
@ -864,9 +864,31 @@ template (value) GenericAVP ts_AVP_3GPP_PdnType(template (value) AAA_3GPP_PDN_Ty
|
||||||
|
|
||||||
/* 5.3.2 Capabilities Exchange Answer */
|
/* 5.3.2 Capabilities Exchange Answer */
|
||||||
template (value) PDU_DIAMETER
|
template (value) PDU_DIAMETER
|
||||||
ts_DIA_CEA(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
|
ts_DIA_CEA_AUTH_APP_ID(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
|
||||||
template (value) charstring origin_host, template (value) charstring origin_realm,
|
template (value) charstring origin_host,
|
||||||
template (value) octetstring host_ip, uint32_t vendor_app_id)
|
template (value) charstring origin_realm,
|
||||||
|
template (value) octetstring host_ip, uint32_t auth_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(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),
|
||||||
|
ts_AVP_SuppVendorIdRaw(5535), /* 3GPP2 */
|
||||||
|
ts_AVP_SuppVendorId(vendor_id_3GPP),
|
||||||
|
ts_AVP_SuppVendorIdRaw(13019), /* ETSI */
|
||||||
|
ts_AVP_AuthAppId('FFFFFFFF'O),
|
||||||
|
ts_AVP_AuthAppId(int2oct(auth_app_id, 4)),
|
||||||
|
ts_AVP_InbSecId('00000000'O)
|
||||||
|
});
|
||||||
|
template (value) PDU_DIAMETER
|
||||||
|
ts_DIA_CEA_VENDOR_APP_ID(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,
|
:= ts_DIAMETER(flags:='00000000'B, cmd_code:=Capabilities_Exchange, hbh_id:=hbh_id, ete_id:=ete_id,
|
||||||
avps := {
|
avps := {
|
||||||
ts_AVP_ResultCode(DIAMETER_SUCCESS),
|
ts_AVP_ResultCode(DIAMETER_SUCCESS),
|
||||||
|
@ -883,6 +905,21 @@ ts_DIA_CEA(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
|
||||||
ts_AVP_InbSecId('00000000'O),
|
ts_AVP_InbSecId('00000000'O),
|
||||||
ts_AVP_VendorSpecAppId(vendor_id_3GPP, vendor_app_id)
|
ts_AVP_VendorSpecAppId(vendor_id_3GPP, vendor_app_id)
|
||||||
});
|
});
|
||||||
|
function f_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, template (omit) uint32_t auth_app_id,
|
||||||
|
template (omit) uint32_t vendor_app_id)
|
||||||
|
return template (value) PDU_DIAMETER
|
||||||
|
{
|
||||||
|
var template (value) PDU_DIAMETER diam_pdu;
|
||||||
|
if (istemplatekind(vendor_app_id, "omit")) {
|
||||||
|
diam_pdu := ts_DIA_CEA_AUTH_APP_ID(hbh_id, ete_id, origin_host, origin_realm, host_ip, valueof(auth_app_id));
|
||||||
|
} else {
|
||||||
|
diam_pdu := ts_DIA_CEA_VENDOR_APP_ID(hbh_id, ete_id, origin_host, origin_realm, host_ip, valueof(vendor_app_id));
|
||||||
|
}
|
||||||
|
return diam_pdu;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template (value) PDU_DIAMETER
|
template (value) PDU_DIAMETER
|
||||||
|
|
|
@ -223,6 +223,7 @@ friend function f_init_diameter(charstring id) runs on MTC_CT {
|
||||||
local_sctp_port := mp_s6_local_port,
|
local_sctp_port := mp_s6_local_port,
|
||||||
origin_host := "hss.localdomain",
|
origin_host := "hss.localdomain",
|
||||||
origin_realm := "localdomain",
|
origin_realm := "localdomain",
|
||||||
|
auth_app_id := omit,
|
||||||
vendor_app_id := c_DIAMETER_3GPP_S6_AID
|
vendor_app_id := c_DIAMETER_3GPP_S6_AID
|
||||||
};
|
};
|
||||||
vc_DIAMETER := DIAMETER_Emulation_CT.create(id);
|
vc_DIAMETER := DIAMETER_Emulation_CT.create(id);
|
||||||
|
|
|
@ -126,6 +126,7 @@ friend function f_init_diameter(charstring id) runs on PGW_Test_CT {
|
||||||
local_sctp_port := mp_pcrf_local_port,
|
local_sctp_port := mp_pcrf_local_port,
|
||||||
origin_host := "pcrf.localdomain",
|
origin_host := "pcrf.localdomain",
|
||||||
origin_realm := "localdomain",
|
origin_realm := "localdomain",
|
||||||
|
auth_app_id := omit,
|
||||||
vendor_app_id := c_DIAMETER_3GPP_Gx_AID
|
vendor_app_id := c_DIAMETER_3GPP_Gx_AID
|
||||||
};
|
};
|
||||||
vc_DIAMETER := DIAMETER_Emulation_CT.create(id);
|
vc_DIAMETER := DIAMETER_Emulation_CT.create(id);
|
||||||
|
|
Loading…
Reference in New Issue