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
August
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
March 2024
----- 2025 -----
August 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
2054 discussions
Start a n
N
ew thread
[S] Change in osmo-e1-hardware[master]: icE1usb fw: Use proper length for struct usb_cdc_notif_serial_state
by tnt
tnt has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-e1-hardware/+/36185?usp=email
) Change subject: icE1usb fw: Use proper length for struct usb_cdc_notif_serial_state ...................................................................... icE1usb fw: Use proper length for struct usb_cdc_notif_serial_state Signed-off-by: Sylvain Munaut <tnt(a)246tNt.com> Change-Id: I30d451e76ebd192f037653179b6485b2b43b6dbc --- M firmware/ice40-riscv/icE1usb/usb_gps.c 1 file changed, 15 insertions(+), 4 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-e1-hardware refs/changes/85/36185/1 diff --git a/firmware/ice40-riscv/icE1usb/usb_gps.c b/firmware/ice40-riscv/icE1usb/usb_gps.c index db188b1..ad893a5 100644 --- a/firmware/ice40-riscv/icE1usb/usb_gps.c +++ b/firmware/ice40-riscv/icE1usb/usb_gps.c @@ -148,6 +148,7 @@ }, .bits = 0x00 }; + const int notif_len = sizeof(struct usb_cdc_notif_serial_state); /* Check if PPS occurred */ uint32_t pps_now = time_pps_read(); @@ -159,8 +160,8 @@ /* Queue CD Set */ notif.bits = 1; - usb_data_write(ep_regs->bd[0].ptr, ¬if, 12); - ep_regs->bd[0].csr = USB_BD_STATE_RDY_DATA | USB_BD_LEN(10); + usb_data_write(ep_regs->bd[0].ptr, ¬if, notif_len); + ep_regs->bd[0].csr = USB_BD_STATE_RDY_DATA | USB_BD_LEN(notif_len); /* Need to clear in the future */ g_usb_gps.pps.set = true; @@ -169,8 +170,8 @@ { /* Queue CD Clear */ notif.bits = 0; - usb_data_write(ep_regs->bd[0].ptr, ¬if, 12); - ep_regs->bd[0].csr = USB_BD_STATE_RDY_DATA | USB_BD_LEN(10); + usb_data_write(ep_regs->bd[0].ptr, ¬if, notif_len); + ep_regs->bd[0].csr = USB_BD_STATE_RDY_DATA | USB_BD_LEN(notif_len); /* Cleared */ g_usb_gps.pps.set = false; -- To view, visit
https://gerrit.osmocom.org/c/osmo-e1-hardware/+/36185?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-e1-hardware Gerrit-Branch: master Gerrit-Change-Id: I30d451e76ebd192f037653179b6485b2b43b6dbc Gerrit-Change-Number: 36185 Gerrit-PatchSet: 1 Gerrit-Owner: tnt <tnt(a)246tNt.com> Gerrit-MessageType: newchange
1 year, 5 months
1
0
0
0
[S] Change in osmo-e1-hardware[master]: icE1usb fw: Remove local usb_cdc_notif_serial_state struct
by tnt
tnt has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-e1-hardware/+/36184?usp=email
) Change subject: icE1usb fw: Remove local usb_cdc_notif_serial_state struct ...................................................................... icE1usb fw: Remove local usb_cdc_notif_serial_state struct It's included in no2usb cdc proto header now Signed-off-by: Sylvain Munaut <tnt(a)246tNt.com> Change-Id: I1788a95eea7db5391f52e36ba4c39c6cddf194ba --- M firmware/ice40-riscv/icE1usb/usb_gps.c 1 file changed, 12 insertions(+), 6 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-e1-hardware refs/changes/84/36184/1 diff --git a/firmware/ice40-riscv/icE1usb/usb_gps.c b/firmware/ice40-riscv/icE1usb/usb_gps.c index e219cf8..db188b1 100644 --- a/firmware/ice40-riscv/icE1usb/usb_gps.c +++ b/firmware/ice40-riscv/icE1usb/usb_gps.c @@ -46,12 +46,6 @@ } g_usb_gps; -struct usb_cdc_notif_serial_state { - struct usb_ctrl_req hdr; - uint16_t bits; -} __attribute__((packed,aligned(4))); - - static void _usb_gps_set_active(bool active) { -- To view, visit
https://gerrit.osmocom.org/c/osmo-e1-hardware/+/36184?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-e1-hardware Gerrit-Branch: master Gerrit-Change-Id: I1788a95eea7db5391f52e36ba4c39c6cddf194ba Gerrit-Change-Number: 36184 Gerrit-PatchSet: 1 Gerrit-Owner: tnt <tnt(a)246tNt.com> Gerrit-MessageType: newchange
1 year, 5 months
1
0
0
0
[S] Change in osmo-ttcn3-hacks[master]: epdg: Introduce test TC_authinfo_twice
by pespin
pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/36178?usp=email
) Change subject: epdg: Introduce test TC_authinfo_twice ...................................................................... epdg: Introduce test TC_authinfo_twice Related: OS#6391 Change-Id: I86ef2bf9a0676735343d5a5c0f4ff12f552216d2 --- M epdg/EPDG_Tests.ttcn 1 file changed, 25 insertions(+), 0 deletions(-) Approvals: Jenkins Builder: Verified dexter: Looks good to me, but someone else must approve pespin: Looks good to me, approved diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn index 45d7a1d..164f14b 100644 --- a/epdg/EPDG_Tests.ttcn +++ b/epdg/EPDG_Tests.ttcn @@ -928,6 +928,20 @@ setverdict(pass); } +/* Emulate UE doing MAR+MAA, then repeating and continuing. */ +private function f_TC_authinfo_twice(charstring id) runs on EPDG_ConnHdlr { + f_GSUP_AI_success(); + f_initial_attach(); +} +testcase TC_authinfo_twice() runs on MTC_CT { + var EPDG_ConnHdlrPars pars := f_init_pars(); + var EPDG_ConnHdlr vc_conn; + f_init(); + vc_conn := f_start_handler(refers(f_TC_authinfo_twice), pars); + vc_conn.done; + setverdict(pass); +} + private function f_TC_ho_lte_to_wifi(charstring id) runs on EPDG_ConnHdlr { f_initial_attach(); /* Whenever UE comes from 3GPP, PGW may activate a dedicated S2b bearer @@ -1064,6 +1078,7 @@ control { execute ( TC_authinfo_normal() ); execute ( TC_authinfo_MAA_unknown_user() ); + execute ( TC_authinfo_twice() ); execute ( TC_ho_lte_to_wifi() ); execute ( TC_ho_wifi_to_lte() ); execute ( TC_s2b_CreateSession_rejected() ); -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/36178?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I86ef2bf9a0676735343d5a5c0f4ff12f552216d2 Gerrit-Change-Number: 36178 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-MessageType: merged
1 year, 5 months
1
0
0
0
[M] Change in osmo-ttcn3-hacks[master]: epdg: Introduce test TC_authinfo_MAA_unknown_user
by pespin
pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/36172?usp=email
) Change subject: epdg: Introduce test TC_authinfo_MAA_unknown_user ...................................................................... epdg: Introduce test TC_authinfo_MAA_unknown_user Related: OS#6391 Change-Id: Ie4d9d019ed56401e7e19197b4a777a1e6a55e7ee --- M epdg/EPDG_Tests.ttcn M library/DIAMETER_Templates.ttcn M library/DIAMETER_ts29_273_Templates.ttcn M library/GSUP_Templates.ttcn 4 files changed, 153 insertions(+), 32 deletions(-) Approvals: fixeria: Looks good to me, but someone else must approve pespin: Looks good to me, approved Jenkins Builder: Verified diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn index 15d4341..45d7a1d 100644 --- a/epdg/EPDG_Tests.ttcn +++ b/epdg/EPDG_Tests.ttcn @@ -19,6 +19,7 @@ import from DIAMETER_Types all; import from DIAMETER_Templates all; import from DIAMETER_rfc4004_Templates all; +import from DIAMETER_ts29_272_Templates all; import from DIAMETER_ts29_273_Templates all; import from DIAMETER_Emulation all; @@ -381,26 +382,50 @@ return hex2str(g_pars.imsi) & "@" & mp_s6b_nai_realm; } -/* Diameter SWx MAR + MAA. */ -private altstep as_DIA_SWx_MA_success() runs on EPDG_ConnHdlr { - var PDU_DIAMETER rx_dia; +private function f_DIA_SWx_tx_MAA_success(PDU_DIAMETER rx_mar) runs on EPDG_ConnHdlr { var template (omit) AVP avp; var octetstring sess_id; var template (value) GenericAVP sip_auth_data_item; + + avp := f_DIAMETER_get_avp(rx_mar, c_AVP_Code_BASE_NONE_Session_Id); + sess_id := valueof(avp.avp_data.avp_BASE_NONE_Session_Id); + sip_auth_data_item := ts_AVP_3GPP_SIPAuthDataItem(0, + g_pars.vec.rand, + g_pars.vec.ik, + g_pars.vec.ck, + g_pars.vec.autn, + g_pars.vec.auts); + /* Send MAA to translator; expect it to show up on GSUP side */ + SWx.send(ts_DIA_SWx_MAA(g_pars.imsi, sip_auth_data_item, + sess_id := sess_id, + hbh_id := rx_mar.hop_by_hop_id, + ete_id := rx_mar.end_to_end_id)); +} + +private function f_DIA_SWx_tx_MAA_error(PDU_DIAMETER rx_mar, template (value) GenericAVP result) runs on EPDG_ConnHdlr { + var template (omit) AVP avp; + var octetstring sess_id; + var template (value) GenericAVP sip_auth_data_item; + + avp := f_DIAMETER_get_avp(rx_mar, c_AVP_Code_BASE_NONE_Session_Id); + sess_id := valueof(avp.avp_data.avp_BASE_NONE_Session_Id); + sip_auth_data_item := ts_AVP_3GPP_SIPAuthDataItem(0, + g_pars.vec.rand, + g_pars.vec.ik, + g_pars.vec.ck, + g_pars.vec.autn, + g_pars.vec.auts); + SWx.send(ts_DIA_SWx_MAA_result(g_pars.imsi, result, + sess_id := sess_id, + hbh_id := rx_mar.hop_by_hop_id, + ete_id := rx_mar.end_to_end_id)); +} + +/* Diameter SWx MAR + MAA. */ +private altstep as_DIA_SWx_MA_success() runs on EPDG_ConnHdlr { + var PDU_DIAMETER rx_dia; [] SWx.receive(tr_DIA_SWx_MAR(g_pars.imsi)) -> value rx_dia { - avp := f_DIAMETER_get_avp(rx_dia, c_AVP_Code_BASE_NONE_Session_Id); - sess_id := valueof(avp.avp_data.avp_BASE_NONE_Session_Id); - sip_auth_data_item := ts_AVP_3GPP_SIPAuthDataItem(0, - g_pars.vec.rand, - g_pars.vec.ik, - g_pars.vec.ck, - g_pars.vec.autn, - g_pars.vec.auts); - /* Send MAA to translator; expect it to show up on GSUP side */ - SWx.send(ts_DIA_SWx_MAA(g_pars.imsi, sip_auth_data_item, - sess_id := sess_id, - hbh_id := rx_dia.hop_by_hop_id, - ete_id := rx_dia.end_to_end_id)); + f_DIA_SWx_tx_MAA_success(rx_dia); setverdict(pass); } [] SWx.receive(PDU_DIAMETER:?) -> value rx_dia { @@ -729,28 +754,47 @@ } } -/* GSUP AuthInfo Req + Resp, triggers SWx MAR + MAA. */ -private function f_GSUP_AI_success() runs on EPDG_ConnHdlr { +private function f_GSUP_tx_SAI_REQ() runs on EPDG_ConnHdlr { var GSUP_PDU rx_gsup; - var template (present) GSUP_IE auth_tuple_ie; var template (value) GSUP_IEs pdp_info; - auth_tuple_ie := tr_GSUP_IE_AuthTuple3G(g_pars.vec.rand, - g_pars.vec.ik, - g_pars.vec.ck, - g_pars.vec.autn, - g_pars.vec.rand & g_pars.vec.auts); pdp_info := { ts_GSUP_IE_PDP_CONTEXT_ID('00'O), ts_GSUP_IE_PDP_ADDRESS(ts_EuaIPv4Dyn), ts_GSUP_IE_APN(f_enc_dns_hostname(g_pars.apn)) }; GSUP.send(ts_GSUP_SAI_REQ_PDP_INFO(g_pars.imsi, pdp_info)); - as_DIA_SWx_MA_success(); - /* Expect a positive response back to the translator; expect AIA */ - alt { - [] GSUP.receive(tr_GSUP_SAI_RES(g_pars.imsi, auth_tuple_ie)); +} + + +private altstep as_GSUP_rx_SAI_RES() runs on EPDG_ConnHdlr { + var GSUP_PDU rx_gsup; + var template (present) GSUP_IE auth_tuple_ie := tr_GSUP_IE_AuthTuple3G( + g_pars.vec.rand, + g_pars.vec.ik, + g_pars.vec.ck, + g_pars.vec.autn, + g_pars.vec.rand & g_pars.vec.auts); + + [] GSUP.receive(tr_GSUP_SAI_RES(g_pars.imsi, auth_tuple_ie)) -> value rx_gsup { + } [] GSUP.receive(GSUP_PDU:?) -> value rx_gsup { Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected GSUP msg rx: ", rx_gsup)); - } } +} + +private altstep as_GSUP_rx_SAI_ERR(template (present) integer cause := ?) runs on EPDG_ConnHdlr { + var GSUP_PDU rx_gsup; + + [] GSUP.receive(tr_GSUP_SAI_ERR(g_pars.imsi, cause)) -> value rx_gsup { + } + [] GSUP.receive(GSUP_PDU:?) -> value rx_gsup { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected GSUP msg rx: ", rx_gsup)); + } +} + +/* GSUP AuthInfo Req + Resp, triggers SWx MAR + MAA. */ +private function f_GSUP_AI_success() runs on EPDG_ConnHdlr { + f_GSUP_tx_SAI_REQ(); + as_DIA_SWx_MA_success(); + as_GSUP_rx_SAI_RES(); setverdict(pass); } @@ -863,6 +907,27 @@ setverdict(pass); } +private function f_TC_authinfo_MAA_unknown_user(charstring id) runs on EPDG_ConnHdlr { + var PDU_DIAMETER rx_dia; + var DIAMETER_ExperimentalResultcode exp_result_code := DIAMETER_ERROR_USER_UNKNOWN; + f_GSUP_tx_SAI_REQ(); + + SWx.receive(tr_DIA_SWx_MAR(g_pars.imsi)) -> value rx_dia; + f_DIA_SWx_tx_MAA_error(rx_dia, + ts_AVP_ExperimentalResult(vendor_id_3GPP, + int2oct(enum2int(exp_result_code), 4))); + /* cause 2 = IMSI_UNKNOWN */ + as_GSUP_rx_SAI_ERR(2); +} +testcase TC_authinfo_MAA_unknown_user() runs on MTC_CT { + var EPDG_ConnHdlrPars pars := f_init_pars(); + var EPDG_ConnHdlr vc_conn; + f_init(); + vc_conn := f_start_handler(refers(f_TC_authinfo_MAA_unknown_user), pars); + vc_conn.done; + setverdict(pass); +} + private function f_TC_ho_lte_to_wifi(charstring id) runs on EPDG_ConnHdlr { f_initial_attach(); /* Whenever UE comes from 3GPP, PGW may activate a dedicated S2b bearer @@ -998,6 +1063,7 @@ control { execute ( TC_authinfo_normal() ); + execute ( TC_authinfo_MAA_unknown_user() ); execute ( TC_ho_lte_to_wifi() ); execute ( TC_ho_wifi_to_lte() ); execute ( TC_s2b_CreateSession_rejected() ); diff --git a/library/DIAMETER_Templates.ttcn b/library/DIAMETER_Templates.ttcn index 5390d6e..338899f 100644 --- a/library/DIAMETER_Templates.ttcn +++ b/library/DIAMETER_Templates.ttcn @@ -337,11 +337,11 @@ } } -template (value) GenericAVP ts_AVP_VendorId(Vendor_Id vendor_id) := { +template (value) GenericAVP ts_AVP_VendorId(template (value) Vendor_Id vendor_id) := { avp := { avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Vendor_Id, '00000000'B), avp_data := { - avp_BASE_NONE_Vendor_Id := int2oct(enum2int(vendor_id), 4) + avp_BASE_NONE_Vendor_Id := int2oct(enum2int(valueof(vendor_id)), 4) } } } @@ -522,6 +522,14 @@ } } } +template (value) GenericAVP ts_AVP_ExperimentalResultCode(template (value) AVP_Unsigned32 n) := { + avp := { + avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Experimental_Result_Code), + avp_data := { + avp_BASE_NONE_Experimental_Result_Code := n + } + } +} template (present) GenericAVP tr_AVP_ExperimentalResult(template (present) Vendor_Id vendor_id := ?, template (present) AVP_Unsigned32 err_code := ? @@ -536,6 +544,19 @@ } } } +template (value) GenericAVP ts_AVP_ExperimentalResult(template (value) Vendor_Id vendor_id := vendor_id_3GPP, + template (value) AVP_Unsigned32 err_code + ) := { + avp := { + avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Experimental_Result), + avp_data := { + avp_BASE_NONE_Experimental_Result := { + ts_AVP_VendorId(vendor_id), + ts_AVP_ExperimentalResultCode(err_code) + } + } + } +} template (value) GenericAVP ts_AVP_SuppVendorIdRaw(uint32_t vendor_id) := { avp := { diff --git a/library/DIAMETER_ts29_273_Templates.ttcn b/library/DIAMETER_ts29_273_Templates.ttcn index 899dfb4..f0ac442 100644 --- a/library/DIAMETER_ts29_273_Templates.ttcn +++ b/library/DIAMETER_ts29_273_Templates.ttcn @@ -180,6 +180,30 @@ ts_AVP_3GPP_SIPNumAuthDataItems(1) }); +template (value) PDU_DIAMETER +ts_DIA_SWx_MAA_result(template (value) hexstring imsi, + template (value) GenericAVP result, + template (value) uint32_t vendor_app_id := c_DIAMETER_3GPP_SWx_AID, + template (value) octetstring sess_id := c_def_sess_id, + template (value) charstring orig_host := "hss.localdomain", + template (value) charstring orig_realm := "localdomain", + template (value) UINT32 hbh_id := '00000000'O, + template (value) UINT32 ete_id := '00000000'O) := + ts_DIAMETER(flags := '01000000'B, + cmd_code := Multimedia_Auth, + app_id := int2oct(c_DIAMETER_3GPP_SWx_AID, 4), + hbh_id := hbh_id, + ete_id := ete_id, + avps := { + ts_AVP_SessionId(sess_id), + ts_AVP_VendorSpecAppId(vendor_id_3GPP, valueof(vendor_app_id)), + result, + ts_AVP_AuthSessionState(NO_STATE_MAINTAINED), + ts_AVP_OriginHost(orig_host), + ts_AVP_OriginRealm(orig_realm), + ts_AVP_UserNameImsi(valueof(imsi)) + }); + /* Server-Assignment-Request, * 3GPP TS 29.273 8.1.2.2.2 UE/PDN Registration/DeRegistration Notification * 3GPP TS 29.273 8.2.2.3 Non-3GPP IP Access Registration Procedure */ diff --git a/library/GSUP_Templates.ttcn b/library/GSUP_Templates.ttcn index 9daf9c0..6d14b02 100644 --- a/library/GSUP_Templates.ttcn +++ b/library/GSUP_Templates.ttcn @@ -374,7 +374,7 @@ ts_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_RESULT, { valueof(ts_GSUP_IE_IMSI(imsi)), auth_tuple }); -template GSUP_PDU tr_GSUP_SAI_ERR(template hexstring imsi, template integer cause) := +template GSUP_PDU tr_GSUP_SAI_ERR(template hexstring imsi, template (present) integer cause := ?) := tr_GSUP(OSMO_GSUP_MSGT_SEND_AUTH_INFO_ERROR, { tr_GSUP_IE_IMSI(imsi), tr_GSUP_IE_Cause(cause) }); -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/36172?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: Ie4d9d019ed56401e7e19197b4a777a1e6a55e7ee Gerrit-Change-Number: 36172 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-MessageType: merged
1 year, 5 months
1
0
0
0
[S] Change in osmo-ttcn3-hacks[master]: epdg: Introduce test TC_authinfo_twice
by pespin
pespin has posted comments on this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/36178?usp=email
) Change subject: epdg: Introduce test TC_authinfo_twice ...................................................................... Patch Set 1: Code-Review+2 -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/36178?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I86ef2bf9a0676735343d5a5c0f4ff12f552216d2 Gerrit-Change-Number: 36178 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Comment-Date: Wed, 06 Mar 2024 18:26:06 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 year, 5 months
1
0
0
0
[M] Change in osmo-ttcn3-hacks[master]: epdg: Introduce test TC_authinfo_MAA_unknown_user
by pespin
pespin has posted comments on this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/36172?usp=email
) Change subject: epdg: Introduce test TC_authinfo_MAA_unknown_user ...................................................................... Patch Set 1: Code-Review+2 -- To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/36172?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: Ie4d9d019ed56401e7e19197b4a777a1e6a55e7ee Gerrit-Change-Number: 36172 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Comment-Date: Wed, 06 Mar 2024 18:26:04 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 year, 5 months
1
0
0
0
[S] Change in ...osmo-epdg[master]: epdg_ue_fsm: Allow UE restarting authentication
by pespin
pespin has submitted this change. (
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36177?usp=email
) Change subject: epdg_ue_fsm: Allow UE restarting authentication ...................................................................... epdg_ue_fsm: Allow UE restarting authentication Related: OS#6391 Change-Id: I33387deafaaa14fa21921fc5523f88db93283609 --- M src/epdg_ue_fsm.erl 1 file changed, 22 insertions(+), 5 deletions(-) Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved diff --git a/src/epdg_ue_fsm.erl b/src/epdg_ue_fsm.erl index 940ee61..703e242 100644 --- a/src/epdg_ue_fsm.erl +++ b/src/epdg_ue_fsm.erl @@ -176,6 +176,12 @@ %% Internal helpers %% ------------------------------------------------------------------ +ev_handle({call, From}, {auth_request, PdpTypeNr, Apn}, Data) -> + case epdg_diameter_swm:auth_request(Data#ue_fsm_data.imsi, PdpTypeNr, Apn) of + ok -> {next_state, state_wait_auth_resp, Data, [{reply,From,ok}]}; + {error, Err} -> {stop_and_reply, Err, Data, [{reply,From,{error,Err}}]} + end. + %% ------------------------------------------------------------------ %% gen_statem Function Definitions %% ------------------------------------------------------------------ @@ -199,12 +205,9 @@ state_new(enter, _OldState, Data) -> {keep_state, Data}; -state_new({call, From}, {auth_request, PdpTypeNr, Apn}, Data) -> +state_new({call, _From} = EvType, {auth_request, PdpTypeNr, Apn} = EvContent, Data) -> lager:info("ue_fsm state_new event=auth_request {~p, ~p}, ~p~n", [PdpTypeNr, Apn, Data]), - case epdg_diameter_swm:auth_request(Data#ue_fsm_data.imsi, PdpTypeNr, Apn) of - ok -> {next_state, state_wait_auth_resp, Data, [{reply,From,ok}]}; - {error, Err} -> {stop_and_reply, Err, Data, [{reply,From,{error,Err}}]} - end; + ev_handle(EvType, EvContent, Data); state_new({call, From}, purge_ms_request, Data) -> lager:info("ue_fsm state_new event=purge_ms_request, ~p~n", [Data]), @@ -228,6 +231,10 @@ state_authenticating(enter, _OldState, Data) -> {keep_state, Data}; +state_authenticating({call, _From} = EvType, {auth_request, PdpTypeNr, Apn} = EvContent, Data) -> + lager:info("ue_fsm state_authenticating event=auth_request {~p, ~p}, ~p~n", [PdpTypeNr, Apn, Data]), + ev_handle(EvType, EvContent, Data); + state_authenticating({call, From}, lu_request, Data) -> lager:info("ue_fsm state_authenticating event=lu_request, ~p~n", [Data]), % Rx "GSUP CEAI LU Req" is our way of saying Rx "Swm Diameter-EAP REQ (DER) with EAP AVP containing successuful auth": -- To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36177?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: erlang/osmo-epdg Gerrit-Branch: master Gerrit-Change-Id: I33387deafaaa14fa21921fc5523f88db93283609 Gerrit-Change-Number: 36177 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-MessageType: merged
1 year, 5 months
1
0
0
0
[M] Change in ...osmo-epdg[master]: gsups_server: Monitor epdg_ue_fsm instead of linking it
by pespin
pespin has submitted this change. (
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36176?usp=email
) Change subject: gsups_server: Monitor epdg_ue_fsm instead of linking it ...................................................................... gsups_server: Monitor epdg_ue_fsm instead of linking it We want to be notified about the FSM going down, instead of having the supervisor restart it (and potentially restarting the whole set of children with it...). Change-Id: I96284aa8752d317cfb5f5c4565d7dea09e56171f --- M src/epdg_ue_fsm.erl M src/gsup_server.erl 2 files changed, 56 insertions(+), 10 deletions(-) Approvals: Jenkins Builder: Verified pespin: Looks good to me, approved diff --git a/src/epdg_ue_fsm.erl b/src/epdg_ue_fsm.erl index b729cc8..940ee61 100644 --- a/src/epdg_ue_fsm.erl +++ b/src/epdg_ue_fsm.erl @@ -39,7 +39,7 @@ -include_lib("gtp_utils.hrl"). -include("conv.hrl"). --export([start_link/1, stop/1]). +-export([start_monitor/1, stop/1]). -export([init/1,callback_mode/0,terminate/3]). -export([get_server_name_by_imsi/1, get_pid_by_imsi/1]). -export([auth_request/2, lu_request/1, tunnel_request/2, purge_ms_request/1]). @@ -68,13 +68,18 @@ ServerName = get_server_name_by_imsi(Imsi), whereis(ServerName). -start_link(Imsi) -> +start_monitor(Imsi) -> ServerName = get_server_name_by_imsi(Imsi), - lager:info("ue_fsm start_link(~p)~n", [ServerName]), - gen_statem:start_link({local, ServerName}, ?MODULE, Imsi, [{debug, [trace]}]). + lager:info("ue_fsm start_monitor(~p)~n", [ServerName]), + gen_statem:start_monitor({local, ServerName}, ?MODULE, Imsi, [{debug, [trace]}]). stop(SrvRef) -> - gen_statem:stop(SrvRef). + try + gen_statem:stop(SrvRef) + catch + exit:Err -> + {error, Err} + end. auth_request(Pid, {PdpTypeNr, Apn}) -> lager:info("ue_fsm auth_request~n", []), diff --git a/src/gsup_server.erl b/src/gsup_server.erl index e340cc6..d71836b 100644 --- a/src/gsup_server.erl +++ b/src/gsup_server.erl @@ -55,7 +55,8 @@ -record(gsups_ue, { imsi :: binary(), - pid :: pid() + pid :: pid(), + mref :: reference() }). -export([start_link/3]). @@ -246,8 +247,8 @@ cause => ?GSUP_CAUSE_NET_FAIL }, tx_gsup(Socket, Resp), - epdg_ue_fsm:stop(UE#gsups_ue.pid), - State2 = delete_gsups_ue(UE, State1) + State2 = delete_gsups_ue(UE, State1), + epdg_ue_fsm:stop(UE#gsups_ue.pid) end, {noreply, State2}; @@ -340,6 +341,11 @@ end, {noreply, State1}; +handle_info({'DOWN', MRef, process, Pid, Reason}, State0) -> + lager:notice("GSUP: epdg_ue_fsm ~p exited, reason: ~p~n", [Pid, Reason]), + State1 = delete_gsups_ue_by_mref(MRef, State0), + {noreply, State1}; + handle_info(Info, S) -> error_logger:error_report(["unknown handle_info", {module, ?MODULE}, {info, Info}, {state, S}]), {noreply, S}. @@ -381,8 +387,14 @@ new_gsups_ue(Imsi, State) -> - {ok, Pid} = epdg_ue_fsm:start_link(Imsi), - UE = #gsups_ue{imsi = Imsi, pid = Pid}, + case epdg_ue_fsm:start_monitor(Imsi) of + {ok, {Pid, MRef}} -> ok; + {error,{already_started,PrevPid}} -> + lager:notice("epdg_ue_fsm for Imsi ~p already existed, reusing!: ~p~n", [Imsi, PrevPid]), + Pid = PrevPid, + MRef = erlang:monitor(process, Pid) + end, + UE = #gsups_ue{imsi = Imsi, pid = Pid, mref = MRef}, NewSt = State#gsups_state{ues = sets:add_element(UE, State#gsups_state.ues)}, {UE, NewSt}. @@ -396,6 +408,15 @@ State#gsups_state.ues), Res. +find_gsups_ue_by_mref(MRef, State) -> + {MRef, Res} = sets:fold( + fun(SessIt = #gsups_ue{imsi = LookupMRef}, {LookupMRef, _AccIn}) -> {LookupMRef, SessIt}; + (_, AccIn) -> AccIn + end, + {MRef, undefined}, + State#gsups_state.ues), + Res. + find_or_new_gsups_ue(Imsi, State) -> UE = find_gsups_ue_by_imsi(Imsi, State), case UE of @@ -406,6 +427,7 @@ end. delete_gsups_ue(UE, State) -> + erlang:demonitor(UE#gsups_ue.mref, [flush]), SetRemoved = sets:del_element(UE, State#gsups_state.ues), lager:debug("Removed UE ~p from ~p~n", [UE, SetRemoved]), State#gsups_state{ues = SetRemoved}. @@ -414,4 +436,10 @@ case find_gsups_ue_by_imsi(Imsi, State) of undefined -> State; UE-> delete_gsups_ue(UE, State) + end. + +delete_gsups_ue_by_mref(MRef, State) -> + case find_gsups_ue_by_mref(MRef, State) of + undefined -> State; + UE-> delete_gsups_ue(UE, State) end. \ No newline at end of file -- To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36176?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: erlang/osmo-epdg Gerrit-Branch: master Gerrit-Change-Id: I96284aa8752d317cfb5f5c4565d7dea09e56171f Gerrit-Change-Number: 36176 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-MessageType: merged
1 year, 5 months
1
0
0
0
[M] Change in ...osmo-epdg[master]: Avoid propagating full diameter Swx MAA message to epdg gsup module
by pespin
pespin has submitted this change. (
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36173?usp=email
) Change subject: Avoid propagating full diameter Swx MAA message to epdg gsup module ...................................................................... Avoid propagating full diameter Swx MAA message to epdg gsup module Keep diameter specific stuff in the diameter module. Change-Id: I4a787649cf970fc08e32cfb27e846598515482ef --- M include/conv.hrl M src/aaa_diameter_swx_cb.erl M src/aaa_ue_fsm.erl M src/epdg_diameter_swm.erl M src/epdg_ue_fsm.erl M src/gsup_server.erl 6 files changed, 59 insertions(+), 31 deletions(-) Approvals: laforge: Looks good to me, but someone else must approve Jenkins Builder: Verified pespin: Looks good to me, approved diff --git a/include/conv.hrl b/include/conv.hrl index a3e147d..80b7e5b 100644 --- a/include/conv.hrl +++ b/include/conv.hrl @@ -42,4 +42,12 @@ remote_teid :: non_neg_integer(), eua :: epdg_eua, peer_addr :: binary() +}). + +-record(epdg_auth_tuple, { + rand :: binary(), + autn :: binary(), + res :: binary(), + ik :: binary(), + ck :: binary() }). \ No newline at end of file diff --git a/src/aaa_diameter_swx_cb.erl b/src/aaa_diameter_swx_cb.erl index 5dd00ef..0457259 100644 --- a/src/aaa_diameter_swx_cb.erl +++ b/src/aaa_diameter_swx_cb.erl @@ -5,6 +5,7 @@ -include_lib("diameter/include/diameter.hrl"). -include_lib("diameter_3gpp_ts29_273_swx.hrl"). +-include("conv.hrl"). %% diameter callbacks -export([peer_up/3, peer_down/3, pick_peer/4, pick_peer/5, prepare_request/3, prepare_request/4, @@ -69,7 +70,10 @@ %% handle_answer/4 handle_answer(#diameter_packet{msg = Msg, errors = Errors}, _Request, _SvcName, Peer, ReqPid) when is_record(Msg, 'MAA') -> lager:info("SWx Rx MAA ~p: ~p/ Errors ~p ~n", [Peer, Msg, Errors]), - aaa_ue_fsm:ev_rx_swx_maa(ReqPid, Msg), + #'MAA'{'SIP-Auth-Data-Item' = SipAuthTuples} = Msg, + AuthTuples = lists:map(fun dia_sip2epdg_auth_tuple/1, SipAuthTuples), + % TODO: handle error case.... + aaa_ue_fsm:ev_rx_swx_maa(ReqPid, {ok, AuthTuples}), {ok, Msg}; handle_answer(#diameter_packet{msg = Msg, errors = Errors}, Request, _SvcName, Peer, ReqPid) when is_record(Msg, 'SAA') -> lager:info("SWx Rx SAA ~p: ~p/ Errors ~p ~n", [Peer, Msg, Errors]), @@ -121,6 +125,20 @@ result_code_success(2002) -> ok; result_code_success(_) -> invalid_result_code. +dia_sip2epdg_auth_tuple(#'SIP-Auth-Data-Item'{'SIP-Authenticate' = [Authenticate], + 'SIP-Authorization' = [Authorization], + 'Confidentiality-Key' = [CKey], + 'Integrity-Key' = [IKey]}) -> + lager:info("dia_sip2gsup: auth ~p authz ~p ~n", [Authenticate, Authorization]), + lager:info(" rand ~p autn ~p ~n", [lists:sublist(Authenticate, 1, 16), lists:sublist(Authenticate, 17, 16)]), + #epdg_auth_tuple{ + rand = list_to_binary(lists:sublist(Authenticate, 1, 16)), + autn = list_to_binary(lists:sublist(Authenticate, 17, 16)), + res = list_to_binary(Authorization), + ik = list_to_binary(IKey), + ck =list_to_binary(CKey) + }. + parse_pgw_addr_from_MIP6_Agent_Info([]) -> undefined; parse_pgw_addr_from_MIP6_Agent_Info([AgentInfo]) -> diff --git a/src/aaa_ue_fsm.erl b/src/aaa_ue_fsm.erl index 9fa868e..9e41756 100644 --- a/src/aaa_ue_fsm.erl +++ b/src/aaa_ue_fsm.erl @@ -93,10 +93,10 @@ {error, Err} end. -ev_rx_swx_maa(Pid, MAA) -> +ev_rx_swx_maa(Pid, Result) -> lager:info("ue_fsm ev_rx_swx_maa~n", []), try - gen_statem:call(Pid, {rx_swx_maa, MAA}) + gen_statem:call(Pid, {rx_swx_maa, Result}) catch exit:Err -> {error, Err} @@ -172,9 +172,9 @@ state_wait_swx_maa(enter, _OldState, Data) -> {keep_state, Data}; -state_wait_swx_maa({call, From}, {rx_swx_maa, MAA}, Data) -> +state_wait_swx_maa({call, From}, {rx_swx_maa, Result}, Data) -> lager:info("ue_fsm state_wait_swx_maa event=rx_swx_maa, ~p~n", [Data]), - aaa_diameter_swm:auth_response(Data#ue_fsm_data.imsi, {ok, MAA}), + aaa_diameter_swm:auth_response(Data#ue_fsm_data.imsi, Result), % TODO: don't transit if SAS returned error code. {next_state, state_new, Data, [{reply,From,ok}]}. diff --git a/src/epdg_diameter_swm.erl b/src/epdg_diameter_swm.erl index 9b010d9..54626cf 100644 --- a/src/epdg_diameter_swm.erl +++ b/src/epdg_diameter_swm.erl @@ -41,7 +41,7 @@ % Apn: SWm Diameter AVP "Service-Selection" Result = gen_server:call(?SERVER, {epdg_auth_req, ImsiStr, PdpTypeNr, Apn}), case Result of - {ok, _Mar} -> + {ok, _AuthTuples} -> epdg_ue_fsm:received_swm_auth_response(self(), Result), ok; _ -> Result diff --git a/src/epdg_ue_fsm.erl b/src/epdg_ue_fsm.erl index c6358fd..b729cc8 100644 --- a/src/epdg_ue_fsm.erl +++ b/src/epdg_ue_fsm.erl @@ -208,10 +208,10 @@ state_wait_auth_resp(enter, _OldState, Data) -> {keep_state, Data}; -state_wait_auth_resp({call, From}, {received_swm_auth_response, Auth}, Data) -> - lager:info("ue_fsm state_wait_auth_resp event=received_swm_auth_response, ~p~n", [Data]), - gsup_server:auth_response(Data#ue_fsm_data.imsi, Auth), - case Auth of +state_wait_auth_resp({call, From}, {received_swm_auth_response, Result}, Data) -> + lager:info("ue_fsm state_wait_auth_resp event=received_swm_auth_response Result=~p, ~p~n", [Result, Data]), + gsup_server:auth_response(Data#ue_fsm_data.imsi, Result), + case Result of {ok, _} -> {next_state, state_authenticating, Data, [{reply,From,ok}]}; {error, Err} -> diff --git a/src/gsup_server.erl b/src/gsup_server.erl index 3b69849..e340cc6 100644 --- a/src/gsup_server.erl +++ b/src/gsup_server.erl @@ -36,7 +36,6 @@ -behaviour(gen_server). --include_lib("diameter_3gpp_ts29_273_swx.hrl"). -include_lib("osmo_ss7/include/ipa.hrl"). -include_lib("osmo_gsup/include/gsup_protocol.hrl"). -include("gtp_utils.hrl"). @@ -65,16 +64,9 @@ -export([code_change/3, terminate/2]). -export([auth_response/2, lu_response/2, tunnel_response/2, purge_ms_response/2, cancel_location_request/1]). -% TODO: -spec dia_sip2gsup('SIP-Auth-Data-Item'()) -> #'GSUPAuthTuple'{}. -dia_sip2gsup(#'SIP-Auth-Data-Item'{'SIP-Authenticate' = [Authenticate], 'SIP-Authorization' = [Authorization], - 'Confidentiality-Key' = [CKey], 'Integrity-Key' = [IKey]}) -> - lager:info("dia_sip2gsup: auth ~p authz ~p ~n", [Authenticate, Authorization]), - lager:info(" rand ~p autn ~p ~n", [lists:sublist(Authenticate, 1, 16), lists:sublist(Authenticate, 17, 16)]), - #{rand => list_to_binary(lists:sublist(Authenticate, 1, 16)), - autn=> list_to_binary(lists:sublist(Authenticate, 17, 16)), - res=> list_to_binary(Authorization), - ik=> list_to_binary(IKey), - ck=> list_to_binary(CKey)}. +% TODO: -spec dia_sip2gsup(#epdg_auth_tuple{}) -> map(). +epdg_auth_tuple2gsup(#epdg_auth_tuple{rand = Rand, autn = Autn, res = Res, ck = Ck, ik = Ik}) -> + #{rand => Rand, autn => Autn, res => Res, ik => Ik, ck => Ck}. %% ------------------------------------------------------------------ %% our exported API @@ -119,16 +111,15 @@ error_logger:error_report(["unknown handle_call", {module, ?MODULE}, {info, Info}, {state, State}]), {reply, error, not_implemented}. -handle_cast({auth_response, {Imsi, Auth}}, State) -> - lager:info("auth_response for ~p: ~p~n", [Imsi, Auth]), +handle_cast({auth_response, {Imsi, Result}}, State) -> + lager:info("auth_response for ~p: ~p~n", [Imsi, Result]), Socket = State#gsups_state.socket, - case Auth of - {ok, Mar} -> SipAuthTuples = Mar#'MAA'.'SIP-Auth-Data-Item', - % AuthTuples = dia_sip2gsup(SipAuthTuples), + case Result of + {ok, AuthTuples} -> Resp = #{message_type => send_auth_info_res, message_class => 5, - imsi => list_to_binary(Mar#'MAA'.'User-Name'), - auth_tuples => lists:map(fun dia_sip2gsup/1, SipAuthTuples) + imsi => Imsi, + auth_tuples => lists:map(fun epdg_auth_tuple2gsup/1, AuthTuples) }; {error, _} -> Resp = #{message_type => send_auth_info_err, imsi => Imsi, message_class => 5, cause => ?GSUP_CAUSE_NET_FAIL} end, @@ -359,9 +350,9 @@ code_change(_OldVsn, State, _Extra) -> {ok, State}. -auth_response(Imsi, Auth) -> - lager:info("auth_response(~p): ~p~n", [Imsi, Auth]), - gen_server:cast(?SERVER, {auth_response, {Imsi, Auth}}). +auth_response(Imsi, Result) -> + lager:info("auth_response(~p): ~p~n", [Imsi, Result]), + gen_server:cast(?SERVER, {auth_response, {Imsi, Result}}). lu_response(Imsi, Result) -> lager:info("lu_response(~p): ~p~n", [Imsi, Result]), -- To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36173?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: erlang/osmo-epdg Gerrit-Branch: master Gerrit-Change-Id: I4a787649cf970fc08e32cfb27e846598515482ef Gerrit-Change-Number: 36173 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge(a)osmocom.org> Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-MessageType: merged
1 year, 5 months
1
0
0
0
[S] Change in ...osmo-epdg[master]: epdg_ue_fsm: Allow UE restarting authentication
by pespin
pespin has posted comments on this change. (
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36177?usp=email
) Change subject: epdg_ue_fsm: Allow UE restarting authentication ...................................................................... Patch Set 1: Code-Review+2 -- To view, visit
https://gerrit.osmocom.org/c/erlang/osmo-epdg/+/36177?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: erlang/osmo-epdg Gerrit-Branch: master Gerrit-Change-Id: I33387deafaaa14fa21921fc5523f88db93283609 Gerrit-Change-Number: 36177 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pespin(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Comment-Date: Wed, 06 Mar 2024 18:25:14 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 year, 5 months
1
0
0
0
← Newer
1
...
165
166
167
168
169
170
171
...
206
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
Results per page:
10
25
50
100
200