This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
daniel gerrit-no-reply at lists.osmocom.orgdaniel has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-gbproxy/+/25079 ) Change subject: WIP STATUS handling ...................................................................... WIP STATUS handling Related: OS#4892 Change-Id: I29adb77a94ab759f5d557dada60b4b7df9616f17 --- M src/gb_proxy.c 1 file changed, 35 insertions(+), 17 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-gbproxy refs/changes/79/25079/1 diff --git a/src/gb_proxy.c b/src/gb_proxy.c index 0815041..3826b0c 100644 --- a/src/gb_proxy.c +++ b/src/gb_proxy.c @@ -996,6 +996,7 @@ struct bssgp_normal_hdr *bgph = (struct bssgp_normal_hdr *)pdu_data; struct tlv_parsed tp_inner[2]; + /* TODO: Parse partial messages as well */ rc = osmo_tlv_prot_parse(&osmo_pdef_bssgp, tp, ARRAY_SIZE(tp_inner), bgph->pdu_type, bgph->data, pdu_len - sizeof(*bgph), 0, 0, DGPRS, "FOO"); if (rc < 0) @@ -1108,16 +1109,19 @@ { /* Check if the status needs to be terminated locally */ uint8_t cause = *TLVP_VAL(&tp[0], BSSGP_IE_CAUSE); + if (cause == BSSGP_CAUSE_UNKNOWN_BVCI || cause == BSSGP_CAUSE_BVCI_BLOCKED) { /* Log and handle locally */ ptp_bvci = ntohs(tlvp_val16_unal(&tp[0], BSSGP_IE_BVCI)); - LOGP(DGPRS, LOGL_ERROR, "%s Rx STATUS with cause %s for PtP-BVC %05u\n", log_pfx, - bssgp_cause_str (cause), ptp_bvci); + LOGPNSE(nse, LOGL_ERROR, "Rx STATUS cause=0x%02x(%s) for PtP-BVC %05u\n", cause, + bssgp_cause_str(cause), ptp_bvci); /* FIXME: Remove/block our BVC if present? */ break; } - LOGP(DGPRS, LOGL_INFO, "Forwarding STATUS with cause %s\n", bssgp_cause_str(cause)); + LOGPNSE(nse, LOGL_NOTICE, "Rx STATUS cause=0x%02x(%s) ", cause, + bssgp_cause_str(cause)); + struct gbproxy_sgsn *sgsn; if (gbproxy_tlli_from_status_pdu(msg, tp, &tlli) == 0) { sgsn = gbproxy_select_sgsn(nse->cfg, &tlli); @@ -1131,8 +1135,6 @@ } rc = gbprox_relay2nse(msg, sgsn->nse, 0); - /* FIXME: inspect the erroneous PDU IE (if any) and check - * if we can extract a TLLI/RNI to route it to the correct SGSN */ break; } case BSSGP_PDUT_RAN_INFO: @@ -1468,20 +1470,36 @@ rc = gbprox_rx_paging(nse, msg, pdut_name, &tp[0], ns_bvci, paging_bc); break; case BSSGP_PDUT_STATUS: - /* Some exception has occurred */ - cause = *TLVP_VAL(&tp[0], BSSGP_IE_CAUSE); - LOGPNSE(nse, LOGL_NOTICE, "Rx STATUS cause=0x%02x(%s) ", cause, + { + struct gbproxy_nse *nse_peer; + uint32_t tlli; + + /* Check if the status needs to be terminated locally */ + uint8_t cause = *TLVP_VAL(&tp[0], BSSGP_IE_CAUSE); + + if (cause == BSSGP_CAUSE_UNKNOWN_BVCI || cause == BSSGP_CAUSE_BVCI_BLOCKED) { + /* Log and handle locally */ + uint16_t ptp_bvci = ntohs(tlvp_val16_unal(&tp[0], BSSGP_IE_BVCI)); + LOGPNSE(nse, LOGL_ERROR, "Rx STATUS cause=0x%02x(%s) for PtP-BVC %05u\n", cause, + bssgp_cause_str(cause), ptp_bvci); + /* FIXME: Remove/block our BVC if present? */ + break; + } + + LOGPNSE(nse, LOGL_NOTICE, "Rx STATUS cause=0x%02x(%s)\n", cause, bssgp_cause_str(cause)); - if (TLVP_PRES_LEN(&tp[0], BSSGP_IE_BVCI, 2)) { - bvci = ntohs(tlvp_val16_unal(&tp[0], BSSGP_IE_BVCI)); - LOGPC(DGPRS, LOGL_NOTICE, "BVCI=%05u\n", bvci); - sgsn_bvc = gbproxy_bvc_by_bvci(nse, bvci); - /* don't send STATUS in response to STATUS if !bvc */ - if (sgsn_bvc && sgsn_bvc->cell && sgsn_bvc->cell->bss_bvc) - rc = gbprox_relay2peer(msg, sgsn_bvc->cell->bss_bvc, ns_bvci); - } else - LOGPC(DGPRS, LOGL_NOTICE, "\n"); + + if (gbproxy_tlli_from_status_pdu(msg, tp, &tlli) == 0) { + nse_peer = gbproxy_nse_by_tlli(cfg, tlli); + if (nse_peer) + return gbprox_relay2nse(msg, nse_peer, 0); + } + + LOGPNSE(nse, LOGL_ERROR, "Unable to handle STATUS cause=0x%02x(%s)\n", cause, + bssgp_cause_str(cause)); + break; + } /* those only exist in the SGSN -> BSS direction */ case BSSGP_PDUT_SUSPEND_ACK: case BSSGP_PDUT_SUSPEND_NACK: -- To view, visit https://gerrit.osmocom.org/c/osmo-gbproxy/+/25079 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-gbproxy Gerrit-Branch: master Gerrit-Change-Id: I29adb77a94ab759f5d557dada60b4b7df9616f17 Gerrit-Change-Number: 25079 Gerrit-PatchSet: 1 Gerrit-Owner: daniel <dwillmann at sysmocom.de> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210728/4de83b13/attachment.htm>