lists.osmocom.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
July
June
May
April
March
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
List overview
Download
gerrit-log
February 2025
----- 2025 -----
July 2025
June 2025
May 2025
April 2025
March 2025
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
gerrit-log@lists.osmocom.org
1 participants
1182 discussions
Start a n
N
ew thread
[XS] Change in ...osmo-s1gw[master]: rebar.config: cosmetic: use spaces, not tabs
by fixeria
fixeria has uploaded this change for review. (
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/39491?usp=email
) Change subject: rebar.config: cosmetic: use spaces, not tabs ...................................................................... rebar.config: cosmetic: use spaces, not tabs Change-Id: Ia6a026b51a0219353b1e898d9fc643381e985dc7 --- M rebar.config 1 file changed, 4 insertions(+), 4 deletions(-) git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-s1gw refs/changes/91/39491/1 diff --git a/rebar.config b/rebar.config index 86315ce..ea4cc68 100644 --- a/rebar.config +++ b/rebar.config @@ -41,9 +41,9 @@ {escript_name, "osmo-s1gw"}. {relx, [{release, {"osmo-s1gw", "0.2.0"}, [osmo_s1gw]}, - {sys_config, "./config/sys.config"}, - {dev_mode, true}, - {include_erts, false}, - {extended_start_script, true}]}. + {sys_config, "./config/sys.config"}, + {dev_mode, true}, + {include_erts, false}, + {extended_start_script, true}]}. %% vim:set ts=4 sw=4 et: -- To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/39491?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange Gerrit-Project: erlang/osmo-s1gw Gerrit-Branch: master Gerrit-Change-Id: Ia6a026b51a0219353b1e898d9fc643381e985dc7 Gerrit-Change-Number: 39491 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
4 months, 3 weeks
1
0
0
0
[XS] Change in ...osmo-s1gw[master]: rebar.config: relx: fix release name (must be an atom)
by fixeria
fixeria has uploaded this change for review. (
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/39492?usp=email
) Change subject: rebar.config: relx: fix release name (must be an atom) ...................................................................... rebar.config: relx: fix release name (must be an atom)
https://rebar3.org/docs/deployment/releases/
states it must be an atom. Change-Id: Ic788ebb1c78c890939bd8dfd9bc34b06fe5c26fd --- M rebar.config 1 file changed, 1 insertion(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-s1gw refs/changes/92/39492/1 diff --git a/rebar.config b/rebar.config index ea4cc68..4d29b64 100644 --- a/rebar.config +++ b/rebar.config @@ -40,7 +40,7 @@ {escript_main_app, osmo_s1gw}. {escript_name, "osmo-s1gw"}. -{relx, [{release, {"osmo-s1gw", "0.2.0"}, [osmo_s1gw]}, +{relx, [{release, {'osmo-s1gw', "0.2.0"}, [osmo_s1gw]}, {sys_config, "./config/sys.config"}, {dev_mode, true}, {include_erts, false}, -- To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/39492?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange Gerrit-Project: erlang/osmo-s1gw Gerrit-Branch: master Gerrit-Change-Id: Ic788ebb1c78c890939bd8dfd9bc34b06fe5c26fd Gerrit-Change-Number: 39492 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
4 months, 3 weeks
1
0
0
0
[XS] Change in ...osmo-s1gw[master]: rebar.config: relx: generate the version automatically
by fixeria
fixeria has uploaded this change for review. (
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/39493?usp=email
) Change subject: rebar.config: relx: generate the version automatically ...................................................................... rebar.config: relx: generate the version automatically Change-Id: I7a4ed74416d4eef3c3befc0605d1857e147324e7 --- M rebar.config 1 file changed, 1 insertion(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/erlang/osmo-s1gw refs/changes/93/39493/1 diff --git a/rebar.config b/rebar.config index 4d29b64..ea8f09c 100644 --- a/rebar.config +++ b/rebar.config @@ -40,7 +40,7 @@ {escript_main_app, osmo_s1gw}. {escript_name, "osmo-s1gw"}. -{relx, [{release, {'osmo-s1gw', "0.2.0"}, [osmo_s1gw]}, +{relx, [{release, {'osmo-s1gw', semver}, [osmo_s1gw]}, {sys_config, "./config/sys.config"}, {dev_mode, true}, {include_erts, false}, -- To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-s1gw/+/39493?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange Gerrit-Project: erlang/osmo-s1gw Gerrit-Branch: master Gerrit-Change-Id: I7a4ed74416d4eef3c3befc0605d1857e147324e7 Gerrit-Change-Number: 39493 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
4 months, 3 weeks
1
0
0
0
[M] Change in osmo-ttcn3-hacks[master]: s1gw: add TCs for UE CONTEXT RELEASE procedures
by fixeria
fixeria has submitted this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39462?usp=email
) Change subject: s1gw: add TCs for UE CONTEXT RELEASE procedures ...................................................................... s1gw: add TCs for UE CONTEXT RELEASE procedures Change-Id: I065692f311e9d03630ab3ca2f6a03465418f0e71 Related: osmo-s1gw.git Ic94489e3d3052221b49431da3a95e5c1eb0e0ba0 Related: SYS#7310 --- M s1gw/S1GW_ConnHdlr.ttcn M s1gw/S1GW_Tests.ttcn M s1gw/expected-results.xml 3 files changed, 94 insertions(+), 1 deletion(-) Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved pespin: Looks good to me, but someone else must approve diff --git a/s1gw/S1GW_ConnHdlr.ttcn b/s1gw/S1GW_ConnHdlr.ttcn index b2b207d..e84c3ab 100644 --- a/s1gw/S1GW_ConnHdlr.ttcn +++ b/s1gw/S1GW_ConnHdlr.ttcn @@ -859,4 +859,47 @@ f_ConnHdlr_rx_initial_ctx_setup_rsp(erabs); } +function f_ConnHdlr_ue_ctx_release_req(S1AP_IEs.Cause cause := c_REL_CMD_CAUSE) +runs on ConnHdlr { + var MME_UE_S1AP_ID mme_ue_id := g_pars.mme_ue_id; + var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx; + var S1AP_PDU pdu; + + log("[eNB -> S1GW] -> MME: UE CONTEXT RELEASE REQUEST"); + f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_UeContextReleaseReq(mme_ue_id, enb_ue_id, cause)); + f_ConnHdlr_session_delete(g_pars.erabs); + log("eNB -> [S1GW -> MME]: UE CONTEXT RELEASE REQUEST"); + f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_UeContextReleaseReq(mme_ue_id, enb_ue_id, cause)); +} + +function f_ConnHdlr_ue_ctx_release_cmd(S1AP_IEs.Cause cause := c_REL_CMD_CAUSE) +runs on ConnHdlr { + var template (value) UE_S1AP_IDs ue_ids := { + uE_S1AP_ID_pair := { + mME_UE_S1AP_ID := g_pars.mme_ue_id, + eNB_UE_S1AP_ID := g_pars.idx, + iE_Extensions := omit + } + }; + var S1AP_PDU pdu; + + log("eNB <- [S1GW <- MME]: UE CONTEXT RELEASE COMMAND"); + f_ConnHdlr_tx_s1ap_from_mme(ts_S1AP_UeContextReleaseCmd(ue_ids, cause)); + f_ConnHdlr_session_delete(g_pars.erabs); + log("[eNB <- S1GW] <- MME: UE CONTEXT RELEASE COMMAND"); + f_ConnHdlr_rx_s1ap_from_mme(pdu, tr_S1AP_UeContextReleaseCmd(ue_ids, cause)); +} + +function f_ConnHdlr_ue_ctx_release_compl() +runs on ConnHdlr { + var MME_UE_S1AP_ID mme_ue_id := g_pars.mme_ue_id; + var ENB_UE_S1AP_ID enb_ue_id := g_pars.idx; + var S1AP_PDU pdu; + + log("[eNB -> S1GW] -> MME: UE CONTEXT RELEASE COMPLETE"); + f_ConnHdlr_tx_s1ap_from_enb(ts_S1AP_UeContextReleaseCompl(mme_ue_id, enb_ue_id)); + log("eNB -> [S1GW -> MME]: UE CONTEXT RELEASE COMPLETE"); + f_ConnHdlr_rx_s1ap_from_enb(pdu, tr_S1AP_UeContextReleaseCompl(mme_ue_id, enb_ue_id)); +} + } diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn index 089bd0d..8bb2f09 100644 --- a/s1gw/S1GW_Tests.ttcn +++ b/s1gw/S1GW_Tests.ttcn @@ -468,6 +468,48 @@ f_TC_exec(refers(f_TC_initial_ctx_setup_failure)); } +/* Test UE CONTEXT RELEASE REQUEST procedure (eNB initiated) */ +function f_TC_ue_ctx_release_req(charstring id) runs on ConnHdlr { + f_ConnHdlr_s1ap_register(g_pars.genb_id); + f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip); + f_ConnHdlr_s1ap_setup(g_pars.genb_id); + + f_ConnHdlr_initial_ctx_setup_req(g_pars.erabs); + f_ConnHdlr_initial_ctx_setup_rsp(g_pars.erabs); + f_ConnHdlr_ue_ctx_release_req(); + + f_ConnHdlr_s1ap_disconnect(); + f_ConnHdlr_s1ap_unregister(g_pars.genb_id); +} +testcase TC_ue_ctx_release_req() runs on test_CT { + f_TC_exec(refers(f_TC_ue_ctx_release_req), num_erabs := 1); +} +testcase TC_ue_ctx_release_req3() runs on test_CT { + f_TC_exec(refers(f_TC_ue_ctx_release_req), num_erabs := 3); +} + +/* Test UE CONTEXT RELEASE COMMAND/COMPLETE procedure (MME initiated) */ +function f_TC_ue_ctx_release_cmd_compl(charstring id) runs on ConnHdlr { + f_ConnHdlr_s1ap_register(g_pars.genb_id); + f_ConnHdlr_s1ap_connect(mp_enb_bind_ip, mp_s1gw_enb_ip); + f_ConnHdlr_s1ap_setup(g_pars.genb_id); + + f_ConnHdlr_initial_ctx_setup_req(g_pars.erabs); + f_ConnHdlr_initial_ctx_setup_rsp(g_pars.erabs); + + f_ConnHdlr_ue_ctx_release_cmd(); + f_ConnHdlr_ue_ctx_release_compl(); + + f_ConnHdlr_s1ap_disconnect(); + f_ConnHdlr_s1ap_unregister(g_pars.genb_id); +} +testcase TC_ue_ctx_release_cmd_compl() runs on test_CT { + f_TC_exec(refers(f_TC_ue_ctx_release_cmd_compl), num_erabs := 1); +} +testcase TC_ue_ctx_release_cmd_compl3() runs on test_CT { + f_TC_exec(refers(f_TC_ue_ctx_release_cmd_compl), num_erabs := 3); +} + function f_TC_pfcp_heartbeat(charstring id) runs on ConnHdlr { var integer rts := f_PFCPEM_get_recovery_timestamp(); var PDU_PFCP pfcp_pdu; @@ -501,6 +543,10 @@ execute( TC_initial_ctx_setup_multi() ); execute( TC_initial_ctx_setup3_multi() ); execute( TC_initial_ctx_setup_failure() ); + execute( TC_ue_ctx_release_req() ); + execute( TC_ue_ctx_release_req3() ); + execute( TC_ue_ctx_release_cmd_compl() ); + execute( TC_ue_ctx_release_cmd_compl3() ); execute( TC_pfcp_heartbeat() ); } diff --git a/s1gw/expected-results.xml b/s1gw/expected-results.xml index c6995c9..c5cb28f 100644 --- a/s1gw/expected-results.xml +++ b/s1gw/expected-results.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<testsuite name='S1GW_Tests' tests='16' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'> +<testsuite name='S1GW_Tests' tests='20' failures='0' errors='0' skipped='0' inconc='0' time='MASKED'> <testcase classname='S1GW_Tests' name='TC_setup' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_setup_multi' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_conn_term_by_mme' time='MASKED'/> @@ -15,5 +15,9 @@ <testcase classname='S1GW_Tests' name='TC_initial_ctx_setup_multi' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_initial_ctx_setup3_multi' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_initial_ctx_setup_failure' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_ue_ctx_release_req' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_ue_ctx_release_req3' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_ue_ctx_release_cmd_compl' time='MASKED'/> + <testcase classname='S1GW_Tests' name='TC_ue_ctx_release_cmd_compl3' time='MASKED'/> <testcase classname='S1GW_Tests' name='TC_pfcp_heartbeat' time='MASKED'/> </testsuite> -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39462?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I065692f311e9d03630ab3ca2f6a03465418f0e71 Gerrit-Change-Number: 39462 Gerrit-PatchSet: 2 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
4 months, 3 weeks
1
0
0
0
[M] Change in osmo-ttcn3-hacks[master]: s1gw: add f_TC_exec()
by fixeria
fixeria has submitted this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39461?usp=email
) Change subject: s1gw: add f_TC_exec() ...................................................................... s1gw: add f_TC_exec() The idea is to reduce the amount of boilerplate code. Change-Id: I0df4ad15bc2dca2afb2c598c1b053f45b69c181b --- M s1gw/S1GW_Tests.ttcn 1 file changed, 30 insertions(+), 79 deletions(-) Approvals: pespin: Looks good to me, but someone else must approve laforge: Looks good to me, approved Jenkins Builder: Verified diff --git a/s1gw/S1GW_Tests.ttcn b/s1gw/S1GW_Tests.ttcn index 729bc77..089bd0d 100644 --- a/s1gw/S1GW_Tests.ttcn +++ b/s1gw/S1GW_Tests.ttcn @@ -197,6 +197,22 @@ } } +function f_TC_exec(void_fn fn, + integer num_enbs := 1, + integer num_erabs := 1) +runs on test_CT { + var ConnHdlrList vc_conns; + + f_init(); + + for (var integer i := 0; i < num_enbs; i := i + 1) { + var ConnHdlrPars pars := valueof(t_ConnHdlrPars(i, num_erabs)); + vc_conns[i] := f_ConnHdlr_spawn(fn, pars); + } + + f_ConnHdlrList_all_done(vc_conns); +} + function f_TC_setup(charstring id) runs on ConnHdlr { f_ConnHdlr_s1ap_register(g_pars.genb_id); @@ -222,13 +238,7 @@ f_ConnHdlr_s1ap_unregister(g_pars.genb_id); } testcase TC_setup() runs on test_CT { - var ConnHdlrPars pars := valueof(t_ConnHdlrPars); - var ConnHdlr vc_conn; - - f_init(); - - vc_conn := f_ConnHdlr_spawn(refers(f_TC_setup), pars); - vc_conn.done; + f_TC_exec(refers(f_TC_setup)); } function f_TC_setup_multi(charstring id) runs on ConnHdlr { @@ -243,16 +253,7 @@ f_ConnHdlr_s1ap_unregister(g_pars.genb_id); } testcase TC_setup_multi() runs on test_CT { - var ConnHdlrList vc_conns; - - f_init(); - - for (var integer i := 0; i < mp_multi_enb_num; i := i + 1) { - var ConnHdlrPars pars := valueof(t_ConnHdlrPars(i)); - vc_conns[i] := f_ConnHdlr_spawn(refers(f_TC_setup_multi), pars); - } - - f_ConnHdlrList_all_done(vc_conns); + f_TC_exec(refers(f_TC_setup_multi), mp_multi_enb_num); } @@ -314,34 +315,21 @@ f_ConnHdlr_s1ap_disconnect(); f_ConnHdlr_s1ap_unregister(g_pars.genb_id); } -private function f_TC_e_rab_setup_exec(integer num_enbs, integer num_erabs) -runs on test_CT { - var ConnHdlrList vc_conns; - - f_init(); - - for (var integer i := 0; i < num_enbs; i := i + 1) { - var ConnHdlrPars pars := valueof(t_ConnHdlrPars(i, num_erabs)); - vc_conns[i] := f_ConnHdlr_spawn(refers(f_TC_e_rab_setup), pars); - } - - f_ConnHdlrList_all_done(vc_conns); -} /* 1 E-RAB at a time, single eNB */ testcase TC_e_rab_setup() runs on test_CT { - f_TC_e_rab_setup_exec(num_enbs := 1, num_erabs := 1); + f_TC_exec(refers(f_TC_e_rab_setup)); } /* 1 E-RAB at a time, multiple eNB connections */ testcase TC_e_rab_setup_multi() runs on test_CT { - f_TC_e_rab_setup_exec(num_enbs := mp_multi_enb_num, num_erabs := 1); + f_TC_exec(refers(f_TC_e_rab_setup), mp_multi_enb_num); } /* 3 E-RABs at a time, single eNB */ testcase TC_e_rab_setup3() runs on test_CT { - f_TC_e_rab_setup_exec(num_enbs := 1, num_erabs := 3); + f_TC_exec(refers(f_TC_e_rab_setup), 1, 3); } /* 3 E-RABs at a time, multiple eNB connections */ testcase TC_e_rab_setup3_multi() runs on test_CT { - f_TC_e_rab_setup_exec(num_enbs := mp_multi_enb_num, num_erabs := 3); + f_TC_exec(refers(f_TC_e_rab_setup), mp_multi_enb_num, 3); } /* Test E-RAB SETUP and RELEASE.ind procedures */ @@ -358,13 +346,7 @@ f_ConnHdlr_s1ap_unregister(g_pars.genb_id); } testcase TC_e_rab_release_ind() runs on test_CT { - var ConnHdlrPars pars := valueof(t_ConnHdlrPars); - var ConnHdlr vc_conn; - - f_init(); - - vc_conn := f_ConnHdlr_spawn(refers(f_TC_e_rab_release_ind), pars); - vc_conn.done; + f_TC_exec(refers(f_TC_e_rab_release_ind)); } /* Test E-RAB SETUP procedure being aborted by the S1GW due to @@ -418,13 +400,7 @@ f_ConnHdlr_s1ap_unregister(g_pars.genb_id); } testcase TC_e_rab_setup_failure() runs on test_CT { - var ConnHdlrPars pars := valueof(t_ConnHdlrPars); - var ConnHdlr vc_conn; - - f_init(); - - vc_conn := f_ConnHdlr_spawn(refers(f_TC_e_rab_setup_failure), pars); - vc_conn.done; + f_TC_exec(refers(f_TC_e_rab_setup_failure)); } /* Test INITIAL CONTEXT SETUP procedure (successful case) */ @@ -439,34 +415,21 @@ f_ConnHdlr_s1ap_disconnect(); f_ConnHdlr_s1ap_unregister(g_pars.genb_id); } -private function f_TC_initial_ctx_setup_exec(integer num_enbs, integer num_erabs) -runs on test_CT { - var ConnHdlrList vc_conns; - - f_init(); - - for (var integer i := 0; i < num_enbs; i := i + 1) { - var ConnHdlrPars pars := valueof(t_ConnHdlrPars(i, num_erabs)); - vc_conns[i] := f_ConnHdlr_spawn(refers(f_TC_initial_ctx_setup), pars); - } - - f_ConnHdlrList_all_done(vc_conns); -} /* 1 E-RAB at a time, single eNB */ testcase TC_initial_ctx_setup() runs on test_CT { - f_TC_initial_ctx_setup_exec(num_enbs := 1, num_erabs := 1); + f_TC_exec(refers(f_TC_initial_ctx_setup)); } /* 1 E-RAB at a time, multiple eNB connections */ testcase TC_initial_ctx_setup_multi() runs on test_CT { - f_TC_initial_ctx_setup_exec(num_enbs := mp_multi_enb_num, num_erabs := 1); + f_TC_exec(refers(f_TC_initial_ctx_setup), mp_multi_enb_num); } /* 3 E-RABs at a time, single eNB */ testcase TC_initial_ctx_setup3() runs on test_CT { - f_TC_initial_ctx_setup_exec(num_enbs := 1, num_erabs := 3); + f_TC_exec(refers(f_TC_initial_ctx_setup), 1, 3); } /* 3 E-RABs at a time, multiple eNB connections */ testcase TC_initial_ctx_setup3_multi() runs on test_CT { - f_TC_initial_ctx_setup_exec(num_enbs := mp_multi_enb_num, num_erabs := 3); + f_TC_exec(refers(f_TC_initial_ctx_setup), mp_multi_enb_num, 3); } /* Test INITIAL CONTEXT SETUP procedure (failure) */ @@ -502,13 +465,7 @@ f_ConnHdlr_s1ap_unregister(g_pars.genb_id); } testcase TC_initial_ctx_setup_failure() runs on test_CT { - var ConnHdlrPars pars := valueof(t_ConnHdlrPars); - var ConnHdlr vc_conn; - - f_init(); - - vc_conn := f_ConnHdlr_spawn(refers(f_TC_initial_ctx_setup_failure), pars); - vc_conn.done; + f_TC_exec(refers(f_TC_initial_ctx_setup_failure)); } function f_TC_pfcp_heartbeat(charstring id) runs on ConnHdlr { @@ -525,13 +482,7 @@ setverdict(pass); } testcase TC_pfcp_heartbeat() runs on test_CT { - var ConnHdlrPars pars := valueof(t_ConnHdlrPars); - var ConnHdlr vc_conn; - - f_init(); - - vc_conn := f_ConnHdlr_spawn(refers(f_TC_pfcp_heartbeat), pars); - vc_conn.done; + f_TC_exec(refers(f_TC_pfcp_heartbeat)); } control { -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39461?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I0df4ad15bc2dca2afb2c598c1b053f45b69c181b Gerrit-Change-Number: 39461 Gerrit-PatchSet: 2 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
4 months, 3 weeks
1
0
0
0
[S] Change in osmo-ttcn3-hacks[master]: library/s1ap: fix criticality in UE CONTEXT RELEASE PDUs
by fixeria
fixeria has submitted this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39460?usp=email
) Change subject: library/s1ap: fix criticality in UE CONTEXT RELEASE PDUs ...................................................................... library/s1ap: fix criticality in UE CONTEXT RELEASE PDUs Change-Id: I6c63b3ecb428b54705aea0c14610c00223651d8f Related: SYS#7310 --- M library/s1ap/S1AP_Templates.ttcn 1 file changed, 8 insertions(+), 8 deletions(-) Approvals: pespin: Looks good to me, but someone else must approve Jenkins Builder: Verified laforge: Looks good to me, approved diff --git a/library/s1ap/S1AP_Templates.ttcn b/library/s1ap/S1AP_Templates.ttcn index cb74cb4..32ebfae 100644 --- a/library/s1ap/S1AP_Templates.ttcn +++ b/library/s1ap/S1AP_Templates.ttcn @@ -843,17 +843,17 @@ template (value) Cause cause) := { initiatingMessage := { procedureCode := id_UEContextReleaseRequest, - criticality := reject, + criticality := ignore, value_ := { UEContextReleaseRequest := { protocolIEs := { { id := S1AP_Constants.id_MME_UE_S1AP_ID, - criticality := ignore, + criticality := reject, value_ := {MME_UE_S1AP_ID := mme_id} }, { id := S1AP_Constants.id_eNB_UE_S1AP_ID, - criticality := ignore, + criticality := reject, value_ := {ENB_UE_S1AP_ID := enb_id} }, { id := S1AP_Constants.id_Cause, @@ -871,17 +871,17 @@ template (present) Cause cause := ?) := { initiatingMessage := { procedureCode := id_UEContextReleaseRequest, - criticality := reject, + criticality := ignore, value_ := { UEContextReleaseRequest := { protocolIEs := { { id := S1AP_Constants.id_MME_UE_S1AP_ID, - criticality := ignore, + criticality := reject, value_ := {MME_UE_S1AP_ID := mme_id} }, { id := S1AP_Constants.id_eNB_UE_S1AP_ID, - criticality := ignore, + criticality := reject, value_ := {ENB_UE_S1AP_ID := enb_id} }, { id := S1AP_Constants.id_Cause, @@ -906,7 +906,7 @@ protocolIEs := { { id := S1AP_Constants.id_UE_S1AP_IDs, - criticality := ignore, + criticality := reject, value_ := {UE_S1AP_IDs := mme_ids} }, { id := S1AP_Constants.id_Cause, @@ -954,7 +954,7 @@ protocolIEs := { { id := S1AP_Constants.id_MME_UE_S1AP_ID, - criticality := reject, + criticality := ignore, value_ := {MME_UE_S1AP_ID := mme_id} }, { id := S1AP_Constants.id_eNB_UE_S1AP_ID, -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39460?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I6c63b3ecb428b54705aea0c14610c00223651d8f Gerrit-Change-Number: 39460 Gerrit-PatchSet: 2 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
4 months, 3 weeks
1
0
0
0
[S] Change in osmo-sgsn[master]: gprs_gmm_util: use a RAU specific TLV dictionary
by laforge
laforge has submitted this change. (
https://gerrit.osmocom.org/c/osmo-sgsn/+/39247?usp=email
) ( 2 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one. )Change subject: gprs_gmm_util: use a RAU specific TLV dictionary ...................................................................... gprs_gmm_util: use a RAU specific TLV dictionary Limit the known and allowed TLVs according to the spec. Change-Id: I460971deeebc9977a984937c542b263d941e78df --- M src/sgsn/gprs_gmm_util.c 1 file changed, 34 insertions(+), 2 deletions(-) Approvals: laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved Jenkins Builder: Verified diff --git a/src/sgsn/gprs_gmm_util.c b/src/sgsn/gprs_gmm_util.c index 01c94a7..b474a45 100644 --- a/src/sgsn/gprs_gmm_util.c +++ b/src/sgsn/gprs_gmm_util.c @@ -90,6 +90,38 @@ }; + +const struct tlv_definition gsm48_gmm_rau_ie_tlvdef = { + .def = { + [GSM48_IE_GMM_PTMSI_SIG] = { TLV_TYPE_FIXED, 3 }, + [GSM48_IE_GMM_TIMER_READY] = { TLV_TYPE_TV, 1 }, + [GSM48_IE_GMM_DRX_PARAM] = { TLV_TYPE_FIXED, 2 }, + [GSM48_IE_GMM_TMSI_STATUS] = { TLV_TYPE_SINGLE_TV, 1 }, + [GSM48_IE_GMM_ALLOC_PTMSI] = { TLV_TYPE_TLV, 5 }, + [GSM48_IE_GMM_MS_NET_CAPA] = { TLV_TYPE_TLV, 2 }, + [GSM48_IE_GMM_PDP_CTX_STATUS] = { TLV_TYPE_TLV, 2 }, + [GSM48_IE_GMM_PS_LCS_CAPA] = { TLV_TYPE_TLV, 1 }, + [GSM48_IE_GMM_GMM_MBMS_CTX_ST] = { TLV_TYPE_TLV, 0 }, + [GSM48_IE_GMM_UE_NET_CAP] = { TLV_TYPE_TLV, 2 }, + [GSM48_IE_GMM_ADD_IDENTITY] = { TLV_TYPE_TLV, 0 }, + [GSM48_IE_GMM_RAI2] = { TLV_TYPE_TLV, 0 }, + [GSM48_IE_GMM_MS_CLASSMARK2] = { TLV_TYPE_TLV, 3 }, + [GSM48_IE_GMM_MS_CLASSMARK3] = { TLV_TYPE_TLV, 0 }, + [GSM48_IE_GMM_SUPP_CODEC_LIST] = { TLV_TYPE_TLV, 3 }, + [GSM48_IE_GMM_VD_PREF_UE_USAGE] = { TLV_TYPE_TLV, 1 }, + [GSM48_IE_GMM_PTMSI_TYPE] = { TLV_TYPE_SINGLE_TV, 1 }, + [GSM48_IE_GMM_DEVICE_PROP] = { TLV_TYPE_SINGLE_TV, 1 }, + [GSM48_IE_GMM_MS_NET_FEAT_SUP] = { TLV_TYPE_SINGLE_TV, 1 }, + [GSM48_IE_GMM_OLD_LAI] = { TLV_TYPE_TLV, 5 }, + [GSM48_IE_GMM_ADD_UPDATE_TYPE] = { TLV_TYPE_SINGLE_TV, 1 }, + [GSM48_IE_GMM_TMSI_BASED_NRI_C] = { TLV_TYPE_TLV, 4 }, + [GMM48_IE_GMM_TIMER_T3324] = { TLV_TYPE_TLV, 3 }, + [GSM48_IE_GMM_TIMER_T3312_EXT] = { TLV_TYPE_TLV, 3 }, + [GSM48_IE_GMM_EXT_DRX_PARAMS] = { TLV_TYPE_TLV, 3 }, + } +}; + + /*! Parse 24.008 9.4.1 Attach Request * \param[in] msg l3 pointers must point to gmm. * \param[out] rau_req parsed RA update request @@ -231,8 +263,8 @@ if (msgb_l3len(msg) == mandatory_fields_len) return 0; - ret = tlv_parse(&rau_req->tlv, &gsm48_gmm_ie_tlvdef, - cur, msgb_l3len(msg) - mandatory_fields_len, 0, 0); + ret = tlv_parse(&rau_req->tlv, &gsm48_gmm_rau_ie_tlvdef, + cur, msgb_l3len(msg) - mandatory_fields_len, 0, 0); if (ret < 0) return GMM_CAUSE_COND_IE_ERR; -- To view, visit
https://gerrit.osmocom.org/c/osmo-sgsn/+/39247?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged Gerrit-Project: osmo-sgsn Gerrit-Branch: master Gerrit-Change-Id: I460971deeebc9977a984937c542b263d941e78df Gerrit-Change-Number: 39247 Gerrit-PatchSet: 4 Gerrit-Owner: lynxis lazus <lynxis(a)fe80.eu> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
4 months, 3 weeks
1
0
0
0
[M] Change in osmo-sgsn[master]: gprs_gmm_util: add parsing of GMM Attach Requests
by laforge
laforge has submitted this change. (
https://gerrit.osmocom.org/c/osmo-sgsn/+/39246?usp=email
) Change subject: gprs_gmm_util: add parsing of GMM Attach Requests ...................................................................... gprs_gmm_util: add parsing of GMM Attach Requests This will be used in the following commit. Change-Id: I4a82e0c4070da982efd6c2f15fd145393423772b --- M include/osmocom/sgsn/gprs_gmm_util.h M src/sgsn/gprs_gmm_util.c 2 files changed, 137 insertions(+), 2 deletions(-) Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved pespin: Looks good to me, but someone else must approve diff --git a/include/osmocom/sgsn/gprs_gmm_util.h b/include/osmocom/sgsn/gprs_gmm_util.h index c136cce..1ffede6 100644 --- a/include/osmocom/sgsn/gprs_gmm_util.h +++ b/include/osmocom/sgsn/gprs_gmm_util.h @@ -4,6 +4,7 @@ #include <stdint.h> #include <osmocom/gsm/gsm23003.h> +#include <osmocom/gsm/gsm48.h> #include <osmocom/gsm/tlv.h> struct msgb; @@ -22,4 +23,20 @@ struct tlv_parsed tlv; }; -int gprs_gmm_parse_ra_upd_req(struct msgb *msg, struct gprs_gmm_ra_upd_req *rau_req); +struct gprs_gmm_att_req { + uint8_t skip_ind; /* 10.3.1 */ + uint8_t attach_type; /* 10.5.5.2 */ + bool follow_up_req; /* 10.5.5.2 */ + uint8_t cksq; /* 10.5.1.2 */ + uint16_t drx_parms; /* 10.5.5.6 */ + struct osmo_mobile_identity mi; /* 10.5.1.4 */ + struct osmo_routing_area_id old_rai; /* 10.5.5.15 */ + uint8_t *ms_network_cap; /* 10.5.5.12 */ + uint8_t ms_network_cap_len; + uint8_t *ms_radio_cap; /* 10.5.5.12a */ + uint8_t ms_radio_cap_len; + struct tlv_parsed tlv; +}; + +int gprs_gmm_parse_ra_upd_req(const struct msgb *msg, struct gprs_gmm_ra_upd_req *rau_req); +int gprs_gmm_parse_att_req(const struct msgb *msg, struct gprs_gmm_att_req *att_req); diff --git a/src/sgsn/gprs_gmm_util.c b/src/sgsn/gprs_gmm_util.c index 4f61669..01c94a7 100644 --- a/src/sgsn/gprs_gmm_util.c +++ b/src/sgsn/gprs_gmm_util.c @@ -29,6 +29,7 @@ #include <osmocom/gsm/protocol/gsm_04_08_gprs.h> #include <osmocom/gsm/tlv.h> +#include <osmocom/sgsn/debug.h> #include <osmocom/sgsn/gprs_gmm_util.h> const struct tlv_definition gsm48_gmm_ie_tlvdef = { @@ -62,12 +63,129 @@ }, }; +/* Minimum length of a GMM Attach Request (only L3/GMM) */ +#define GSM48_GMM_ATT_REQ_MIN_LEN 25 +const struct tlv_definition gsm48_gmm_att_ie_tlvdef = { + .def = { + [GSM48_IE_GMM_PTMSI_SIG] = { TLV_TYPE_FIXED, 3 }, + [GSM48_IE_GMM_TIMER_READY] = { TLV_TYPE_TV, 1 }, + [GSM48_IE_GMM_TMSI_STATUS] = { TLV_TYPE_SINGLE_TV, 1 }, + [GSM48_IE_GMM_PS_LCS_CAPA] = { TLV_TYPE_TLV, 0 }, + [GSM48_IE_GMM_MS_CLASSMARK2] = { TLV_TYPE_TLV, 3 }, + [GSM48_IE_GMM_MS_CLASSMARK3] = { TLV_TYPE_TLV, 0 }, + [GSM48_IE_GMM_SUPP_CODEC_LIST] = { TLV_TYPE_TLV, 3 }, + [GSM48_IE_GMM_UE_NET_CAP] = { TLV_TYPE_TLV, 2 }, + [GSM48_IE_GMM_ADD_IDENTITY] = { TLV_TYPE_TLV, 0 }, + [GSM48_IE_GMM_RAI2] = { TLV_TYPE_TLV, 0 }, + [GSM48_IE_GMM_VD_PREF_UE_USAGE] = { TLV_TYPE_TLV, 1 }, + [GSM48_IE_GMM_DEVICE_PROP] = { TLV_TYPE_SINGLE_TV, 1 }, + [GSM48_IE_GMM_PTMSI_TYPE] = { TLV_TYPE_SINGLE_TV, 1 }, + [GSM48_IE_GMM_MS_NET_FEAT_SUP] = { TLV_TYPE_SINGLE_TV, 1 }, + [GSM48_IE_GMM_ADD_UPDATE_TYPE] = { TLV_TYPE_SINGLE_TV, 1 }, + [GSM48_IE_GMM_TMSI_BASED_NRI_C] = { TLV_TYPE_TLV, 4 }, + [GMM48_IE_GMM_TIMER_T3324] = { TLV_TYPE_TLV, 3 }, + [GSM48_IE_GMM_TIMER_T3312_EXT] = { TLV_TYPE_TLV, 3 }, + [GSM48_IE_GMM_EXT_DRX_PARAMS] = { TLV_TYPE_TLV, 3 }, + } +}; + + +/*! Parse 24.008 9.4.1 Attach Request + * \param[in] msg l3 pointers must point to gmm. + * \param[out] rau_req parsed RA update request + * \returns 0 on success or GMM cause + */ +int gprs_gmm_parse_att_req(const struct msgb *msg, struct gprs_gmm_att_req *att_req) +{ + uint8_t *cur, len; + size_t mandatory_fields_len; + struct gsm48_hdr *gh; + int ret; + + OSMO_ASSERT(msg); + OSMO_ASSERT(att_req); + + memset(att_req, 0, sizeof(struct gprs_gmm_att_req)); + /* all mandatory fields */ + if (msgb_l3len(msg) < GSM48_GMM_ATT_REQ_MIN_LEN) + return GMM_CAUSE_PROTO_ERR_UNSPEC; + + gh = (struct gsm48_hdr *) msgb_gmmh(msg); + cur = gh->data; + + att_req->skip_ind = gh->proto_discr >> 4; + + /* LV: MS network cap 10.5.5.12 */ + len = *cur++; + if (msgb_l3len(msg) < (len + 21 + (cur - msgb_gmmh(msg)))) + return GMM_CAUSE_PROTO_ERR_UNSPEC; + /* MS network cap can't be empty */ + if (len == 0) + return GMM_CAUSE_INV_MAND_INFO; + + att_req->ms_network_cap = cur; + att_req->ms_network_cap_len = len; + cur += len; + + /* V: Update Type 10.5.5.18 */ + att_req->attach_type = *cur & 0x07; + att_req->follow_up_req = !!(*cur & 0x08); + + /* V: GPRS Ciphering Key Sequence 10.5.1.2 */ + att_req->cksq = *cur >> 4; + cur++; + + /* V: DRX parameter 10.5.5.6 */ + att_req->drx_parms = osmo_load16le(cur); + cur += 2; + + /* LV: Mobile identity 10.5.1.4 */ + len = *cur++; + if (msgb_l3len(msg) < (len + 12 + (cur - msgb_gmmh(msg)))) + return GMM_CAUSE_PROTO_ERR_UNSPEC; + ret = osmo_mobile_identity_decode(&att_req->mi, cur, len, false); + if (ret) + return GMM_CAUSE_PROTO_ERR_UNSPEC; + cur += len; + + /* V: Old routing area identification 10.5.5.15 */ + osmo_routing_area_id_decode(&att_req->old_rai, cur, 6); + cur += 6; + + /* LV: MS radio cap 10.5.5.12a */ + len = *cur++; + if (msgb_l3len(msg) < (len + (cur - msgb_gmmh(msg)))) + return GMM_CAUSE_PROTO_ERR_UNSPEC; + /* 24.008 Rel 17 specifies min 5, but SGSN will still work with 4 */ + if (len < 4) + return GMM_CAUSE_INV_MAND_INFO; + + att_req->ms_radio_cap = cur; + att_req->ms_radio_cap_len = len; + cur += len; + + mandatory_fields_len = (cur - msgb_gmmh(msg)); + if (msgb_l3len(msg) == mandatory_fields_len) + return 0; + + ret = tlv_parse(&att_req->tlv, &gsm48_gmm_att_ie_tlvdef, + cur, msgb_l3len(msg) - mandatory_fields_len, 0, 0); + + /* gracefully handle unknown IEs (partial parsing) */ + if (ret < 0 && ret != OSMO_TLVP_ERR_UNKNOWN_TLV_TYPE) { + LOGP(DMM, LOGL_NOTICE, "%s(): tlv_parse() failed (%d)\n", __func__, ret); + return GMM_CAUSE_COND_IE_ERR; + } + + return 0; +} + /*! Parse 24.008 9.4.14 RAU Request * \param[in] msg l3 pointers must point to gmm. * \param[out] rau_req parsed RA update request * \returns 0 on success or GMM cause */ -int gprs_gmm_parse_ra_upd_req(struct msgb *msg, struct gprs_gmm_ra_upd_req *rau_req) +int gprs_gmm_parse_ra_upd_req(const struct msgb *msg, struct gprs_gmm_ra_upd_req *rau_req) { uint8_t *cur, len; size_t mandatory_fields_len; -- To view, visit
https://gerrit.osmocom.org/c/osmo-sgsn/+/39246?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged Gerrit-Project: osmo-sgsn Gerrit-Branch: master Gerrit-Change-Id: I4a82e0c4070da982efd6c2f15fd145393423772b Gerrit-Change-Number: 39246 Gerrit-PatchSet: 4 Gerrit-Owner: lynxis lazus <lynxis(a)fe80.eu> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-CC: fixeria <vyanitskiy(a)sysmocom.de>
4 months, 3 weeks
1
0
0
0
[M] Change in osmo-ttcn3-hacks[master]: s1gw: add TCs for UE CONTEXT RELEASE procedures
by laforge
Attention is currently required from: fixeria. laforge has posted comments on this change by fixeria. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39462?usp=email
) Change subject: s1gw: add TCs for UE CONTEXT RELEASE procedures ...................................................................... Patch Set 2: Code-Review+2 -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39462?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I065692f311e9d03630ab3ca2f6a03465418f0e71 Gerrit-Change-Number: 39462 Gerrit-PatchSet: 2 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Fri, 07 Feb 2025 09:53:09 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes
4 months, 3 weeks
1
0
0
0
[M] Change in osmo-ttcn3-hacks[master]: s1gw: add f_TC_exec()
by laforge
Attention is currently required from: fixeria. laforge has posted comments on this change by fixeria. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39461?usp=email
) Change subject: s1gw: add f_TC_exec() ...................................................................... Patch Set 2: Code-Review+2 -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/39461?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: comment Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I0df4ad15bc2dca2afb2c598c1b053f45b69c181b Gerrit-Change-Number: 39461 Gerrit-PatchSet: 2 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Fri, 07 Feb 2025 09:52:09 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes
4 months, 3 weeks
1
0
0
0
← Newer
1
...
98
99
100
101
102
103
104
...
119
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
Results per page:
10
25
50
100
200