pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38452?usp=email )
Change subject: sgsn: Improve validation of TLA encoded in RAB Ass Req
......................................................................
sgsn: Improve validation of TLA encoded in RAB Ass Req
Validate received TLA in RAB Ass Req according to confguration and test
expectancies.
Related: OS#6508
Related: SYS#7119
Change-Id: I725bf39c5564fb320954fc9e387ac569fc1a0136
---
M sgsn/BSSGP_ConnHdlr.ttcn
M sgsn/SGSN_Tests_Iu.ttcn
2 files changed, 65 insertions(+), 13 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/52/38452/1
diff --git a/sgsn/BSSGP_ConnHdlr.ttcn b/sgsn/BSSGP_ConnHdlr.ttcn
index e6503ac..a966a43 100644
--- a/sgsn/BSSGP_ConnHdlr.ttcn
+++ b/sgsn/BSSGP_ConnHdlr.ttcn
@@ -103,6 +103,8 @@
/* only in IuPS / RANAP case */
SCCP_PAR_Address sccp_addr_local optional,
SCCP_PAR_Address sccp_addr_peer optional,
+ /* Whether to expect an specific addr format in RAB Ass Req: true = X.213, false = raw
IPv4, omit = don't care */
+ boolean ranap_exp_itu_x213_addr_format optional,
/* Whether to encode HNBGW addr with ITU X.213 format when sending RAB Ass Resp: */
boolean ranap_use_itu_x213_addr_format,
octetstring ranap_itu_x213_addr_format_padding
@@ -129,6 +131,7 @@
t_guard := t_guard,
sccp_addr_local := omit,
sccp_addr_peer := omit,
+ ranap_exp_itu_x213_addr_format := omit,
ranap_use_itu_x213_addr_format := false,
ranap_itu_x213_addr_format_padding := ''O
}
@@ -698,22 +701,38 @@
}
}
+/* Validate received IP address + TEID from SGSN is the one we
+ * did set up from the GGSN, since the SGSN is expected to do
+ * Direct Tunnel: */
+private function f_ranap_rab_ass_req_validate_tli(RANAP_PDU rab_ass_req, PdpActPars
apars)
+runs on BSSGP_ConnHdlr {
+ var TransportLayerInformation tli := f_ranap_rab_ass_req_extract_tli(rab_ass_req);
+ var template (present) TransportLayerAddress exp_tla_x213 := decmatch
tr_NSAP_Address_IANA_BIN_IPv4(apars.ggsn_ip_u);
+ var template (present) TransportLayerAddress exp_tla_raw := oct2bit(apars.ggsn_ip_u);
+ var template (present) TransportLayerAddress exp_tla;
+ var template (present) TransportLayerInformation exp_tli;
+ if (ispresent(g_pars.ranap_exp_itu_x213_addr_format)) {
+ if (g_pars.ranap_exp_itu_x213_addr_format) {
+ exp_tla := exp_tla_x213;
+ } else {
+ exp_tla := exp_tla_raw;
+ }
+ } else { /* Accept any of the known formats: */
+ exp_tla := (exp_tla_x213, exp_tla_raw);
+ }
+ exp_tli := tr_TLI_ps(exp_tla, apars.ggsn_tei_u);
+ if (not match(tli, exp_tli)) {
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+ log2str("Rx RAB Ass Req with TLI ", tli, " vs exp ", exp_tli));
+ }
+}
+
altstep as_ranap_rab_ass_req(inout PdpActPars apars) runs on BSSGP_ConnHdlr {
var RANAP_PDU ranap;
[] BSSAP.receive(tr_RANAP_RabAssReq(?)) -> value ranap {
var RAB_ID rab_id := f_ranap_rab_ass_req_extract_rab_id(ranap);
- var TransportLayerInformation tli := f_ranap_rab_ass_req_extract_tli(ranap);
- /* Validate received IP address + TEID from SGSN is the one we
- * did set up from the GGSN, since the SGSN is expected to do
- * Direct Tunnel: */
- var template (present) TransportLayerInformation exp_tli :=
- tr_TLI_ps(oct2bit(enc_NSAP_Address(valueof(ts_NSAP_Address_IANA_BIN_IPv4Len20(apars.ggsn_ip_u)))),
- apars.ggsn_tei_u);
- if (not match(tli, exp_tli)) {
- Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
- log2str("Rx RAB Ass Req with TLI ", tli, " vs exp ", exp_tli));
- }
+ f_ranap_rab_ass_req_validate_tli(ranap, apars);
var template (value) RAB_SetupOrModifiedList l;
var bitstring tla_bits;
diff --git a/sgsn/SGSN_Tests_Iu.ttcn b/sgsn/SGSN_Tests_Iu.ttcn
index 61bd8a9..7a7ee7c 100644
--- a/sgsn/SGSN_Tests_Iu.ttcn
+++ b/sgsn/SGSN_Tests_Iu.ttcn
@@ -19,6 +19,7 @@
import from BSSGP_ConnHdlr all;
+
private function f_init() runs on test_CT {
g_iu_enable := true;
SGSN_Tests.f_init();
@@ -27,6 +28,14 @@
f_vty_config(SGSNVTY, "sgsn", "encryption uea 0");
}
+private function f_vty_iu_rab_assign_addr_enc(boolean use_itu_x213 := true) runs on
test_CT {
+ if (use_itu_x213) {
+ f_vty_config(SGSNVTY, "sgsn", "iu rab-assign-addr-enc x213");
+ } else {
+ f_vty_config(SGSNVTY, "sgsn", "iu rab-assign-addr-enc v4raw");
+ }
+}
+
private function f_TC_iu_attach(charstring id) runs on BSSGP_ConnHdlr {
var PdpActPars apars := valueof(t_PdpActPars(mp_ggsn_ip,
mp_ranap_cfg[0].sctp_addr.local_ip_addr));
@@ -147,14 +156,37 @@
vc_conn.done;
f_cleanup();
}
-/* Same as TC_attach_pdp_act_user, but encoding HNBGW addr using ITU X.213
-format (IPv4, with padding to reach 20 bytes) in RAB Ass Resp. See OS#6508. */
+
+/* Same as TC_attach_pdp_act_user, but:
+ * - Configure SGSN to send v4raw address in RAB Ass REQ
+ * - Transmit HNBGW addr using v4raw format in RAB Ass Resp.
+ */
+testcase TC_attach_pdp_act_user_addr_v4raw() runs on test_CT {
+ var BSSGP_ConnHdlr vc_conn;
+ var BSSGP_ConnHdlrPars pars;
+ f_init();
+ f_sleep(1.0);
+ f_vty_iu_rab_assign_addr_enc(false); /* Force v4raw */
+ pars := f_new_BSSGP_ConnHdlrPars(1058, f_cell_ids_from_gb(g_gb));
+ pars.ranap_exp_itu_x213_addr_format := false;
+ pars.ranap_use_itu_x213_addr_format := false;
+ vc_conn := f_start_handler_pars(refers(f_TC_attach_pdp_act_user), testcasename(), g_gb,
pars);
+ vc_conn.done;
+ f_cleanup();
+}
+/* Same as TC_attach_pdp_act_user, but:
+ * - Configure SGSN to send ITU X.213 address in RAB Ass REQ
+ * - Transmit HNBGW addr using ITU X.213 format (IPv4, with different padding)
+ * in RAB Ass Resp. See OS#6508.
+ */
function f_TC_attach_pdp_act_user_addr_itu_x213_ipv4len(integer imsi_suffix, octetstring
padding) runs on test_CT {
var BSSGP_ConnHdlr vc_conn;
var BSSGP_ConnHdlrPars pars;
f_init();
f_sleep(1.0);
+ f_vty_iu_rab_assign_addr_enc(true);
pars := f_new_BSSGP_ConnHdlrPars(imsi_suffix, f_cell_ids_from_gb(g_gb));
+ pars.ranap_exp_itu_x213_addr_format := true;
pars.ranap_use_itu_x213_addr_format := true;
pars.ranap_itu_x213_addr_format_padding := padding;
vc_conn := f_start_handler_pars(refers(f_TC_attach_pdp_act_user), testcasename(), g_gb,
pars);
@@ -390,6 +422,7 @@
execute( TC_iu_attach_geran_rau() );
execute( TC_geran_attach_iu_rau() );
execute( TC_attach_pdp_act_user() );
+ execute( TC_attach_pdp_act_user_addr_v4raw() );
execute( TC_attach_pdp_act_user_addr_itu_x213_ipv4len7() );
execute( TC_attach_pdp_act_user_addr_itu_x213_ipv4len20() );
execute( TC_attach_pdp_act_user_addr_itu_x213_ipv4lentoolarge() );
--
To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38452?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I725bf39c5564fb320954fc9e387ac569fc1a0136
Gerrit-Change-Number: 38452
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>