lists.osmocom.org
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

gerrit-log

Thread Start a new thread
Download
Threads by month
  • ----- 2026 -----
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2025 -----
  • December
  • November
  • October
  • September
  • 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
gerrit-log@lists.osmocom.org

March 2023

  • 1 participants
  • 3642 discussions
[S] Change in osmo-smlc[master]: tests: $(BUILT_SOURCES) is not defined, depend on osmo-smlc
by pespin 30 Mar '23

30 Mar '23
Attention is currently required from: fixeria. pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-smlc/+/32133 ) Change subject: tests: $(BUILT_SOURCES) is not defined, depend on osmo-smlc ...................................................................... Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/c/osmo-smlc/+/32133 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-smlc Gerrit-Branch: master Gerrit-Change-Id: I75a038b2730c7e0d4637db6dfb780839a49abc2e Gerrit-Change-Number: 32133 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Thu, 30 Mar 2023 09:42:12 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 0
0 0
[S] Change in osmo-bsc[master]: osmoappdesc.py: add more config files for testing
by pespin 30 Mar '23

30 Mar '23
Attention is currently required from: fixeria. pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-bsc/+/32132 ) Change subject: osmoappdesc.py: add more config files for testing ...................................................................... Patch Set 1: Code-Review+1 -- To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/32132 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-Change-Id: I9199f3e39c677dfd6e3936b9cf4897a070156b03 Gerrit-Change-Number: 32132 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Thu, 30 Mar 2023 09:42:01 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 0
0 0
[S] Change in osmo-sip-connector[master]: tests: $(BUILT_SOURCES) is not defined, depend on osmo-sip-connector
by pespin 30 Mar '23

30 Mar '23
Attention is currently required from: fixeria. pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-sip-connector/+/32131 ) Change subject: tests: $(BUILT_SOURCES) is not defined, depend on osmo-sip-connector ...................................................................... Patch Set 1: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/c/osmo-sip-connector/+/32131 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-sip-connector Gerrit-Branch: master Gerrit-Change-Id: I3aeaace814a209dade5323f30a5a91e4a9d73595 Gerrit-Change-Number: 32131 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Thu, 30 Mar 2023 09:41:14 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 0
0 0
[S] Change in osmo-pcu[master]: tests: $(BUILT_SOURCES) is not defined, depend on osmo-pcu
by pespin 30 Mar '23

30 Mar '23
Attention is currently required from: fixeria. pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-pcu/+/32129 ) Change subject: tests: $(BUILT_SOURCES) is not defined, depend on osmo-pcu ...................................................................... Patch Set 2: Code-Review+2 -- To view, visit https://gerrit.osmocom.org/c/osmo-pcu/+/32129 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-pcu Gerrit-Branch: master Gerrit-Change-Id: I6620a524b393a0db6201930a1e2795a439785824 Gerrit-Change-Number: 32129 Gerrit-PatchSet: 2 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Thu, 30 Mar 2023 09:41:01 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 0
0 0
[S] Change in osmo-sgsn[master]: tests: $(BUILT_SOURCES) is not defined, depend on osmo-sgsn
by pespin 30 Mar '23

30 Mar '23
Attention is currently required from: fixeria. pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-sgsn/+/32130 ) Change subject: tests: $(BUILT_SOURCES) is not defined, depend on osmo-sgsn ...................................................................... Patch Set 1: Code-Review+1 -- To view, visit https://gerrit.osmocom.org/c/osmo-sgsn/+/32130 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-sgsn Gerrit-Branch: master Gerrit-Change-Id: I4f9e99ed3673bb51fa5f7d374c35c3c92735eacb Gerrit-Change-Number: 32130 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Thu, 30 Mar 2023 09:24:49 +0000 Gerrit-HasComments: No Gerrit-Has-Labels: Yes Gerrit-MessageType: comment
1 0
0 0
[S] Change in osmo-pcap[master]: tests: $(BUILT_SOURCES) is not defined
by pespin 30 Mar '23

30 Mar '23
Attention is currently required from: fixeria. pespin has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-pcap/+/32121 ) Change subject: tests: $(BUILT_SOURCES) is not defined ...................................................................... Patch Set 1: (1 comment) File tests/Makefile.am: https://gerrit.osmocom.org/c/osmo-pcap/+/32121/comment/63e01eed_a54622ae PS1, Line 24: python-tests: > It's actually a good question what binary. […] Idk, it needs to be checked which of the programs is being tested here. -- To view, visit https://gerrit.osmocom.org/c/osmo-pcap/+/32121 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-pcap Gerrit-Branch: master Gerrit-Change-Id: I81dc30f6d6e3b25723f00d945c87b9c01c648cbf Gerrit-Change-Number: 32121 Gerrit-PatchSet: 1 Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-CC: pespin <pespin(a)sysmocom.de> Gerrit-Attention: fixeria <vyanitskiy(a)sysmocom.de> Gerrit-Comment-Date: Thu, 30 Mar 2023 09:24:12 +0000 Gerrit-HasComments: Yes Gerrit-Has-Labels: No Comment-In-Reply-To: fixeria <vyanitskiy(a)sysmocom.de> Comment-In-Reply-To: pespin <pespin(a)sysmocom.de> Gerrit-MessageType: comment
1 0
0 0
[L] Change in osmo-ttcn3-hacks[master]: MGCP_Test: support multiple codecs
by dexter 30 Mar '23

30 Mar '23
dexter has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/32153 ) Change subject: MGCP_Test: support multiple codecs ...................................................................... Patch Set 1: (1 comment) Patchset: PS1: (At least The BTS need to be upgraded) -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/32153 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: I8422313fccad1bfcee52c933f643068bebdaf2d5 Gerrit-Change-Number: 32153 Gerrit-PatchSet: 1 Gerrit-Owner: dexter <pmaier(a)sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Comment-Date: Thu, 30 Mar 2023 09:02:16 +0000 Gerrit-HasComments: Yes Gerrit-Has-Labels: No Gerrit-MessageType: comment
1 0
0 0
[L] Change in osmo-ttcn3-hacks[master]: MGCP_Test: support multiple codecs
by dexter 30 Mar '23

30 Mar '23
dexter has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/32153 ) Change subject: MGCP_Test: support multiple codecs ...................................................................... MGCP_Test: support multiple codecs At the moment The RTP emulation and MGCP_Test only allow to specify one codec and one set of RX/TX fixed payload octet strings to verify against. This is quite limiting since it might be necessary to test against different types and formats of payloads simultaneously in order to see if osmo-mgw converts or forwards them correctly. Let's extend this to support multiple codecs on MGCP/SDP level plus support for multiple RTP payloads on RTP emulation level. Related: OS#5461 Change-Id: I8422313fccad1bfcee52c933f643068bebdaf2d5 --- M library/RTP_Emulation.ttcn M mgw/MGCP_Test.ttcn 2 files changed, 188 insertions(+), 95 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/53/32153/1 diff --git a/library/RTP_Emulation.ttcn b/library/RTP_Emulation.ttcn index eaff017..97982fa 100644 --- a/library/RTP_Emulation.ttcn +++ b/library/RTP_Emulation.ttcn @@ -153,24 +153,27 @@ num_pkts_rx_err_payload := 0 } +type record RtpemConfigPayload { + INT7b payload_type, + octetstring fixed_payload optional +}; + type record RtpemConfig { - INT7b tx_payload_type, integer tx_samplerate_hz, integer tx_duration_ms, BIT32_BO_LAST tx_ssrc, - octetstring tx_fixed_payload optional, - octetstring rx_fixed_payload optional, + record of RtpemConfigPayload tx_payloads, + record of RtpemConfigPayload rx_payloads, boolean iuup_mode, IuUP_Config iuup_cfg }; const RtpemConfig c_RtpemDefaultCfg := { - tx_payload_type := 0, tx_samplerate_hz := 8000, tx_duration_ms := 20, tx_ssrc := '11011110101011011011111011101111'B, - tx_fixed_payload := '01020304'O, - rx_fixed_payload := '01020304'O, + tx_payloads := {{0, '01020304'O}}, + rx_payloads := {{0, '01020304'O}}, iuup_mode := false, iuup_cfg := c_IuUP_Config_def } @@ -342,7 +345,7 @@ data := payload } -private function f_tx_rtp(octetstring payload, BIT1 marker := '0'B) runs on RTP_Emulation_CT { +private function f_tx_rtp(octetstring payload, INT7b rtp_payload_type, BIT1 marker := '0'B) runs on RTP_Emulation_CT { if (g_cfg.iuup_mode) { payload := f_IuUP_Em_tx_encap(g_iuup_ent, payload); if (lengthof(payload) == 0) { @@ -350,7 +353,7 @@ return; } } - var PDU_RTP rtp := valueof(ts_RTP(g_cfg.tx_ssrc, g_cfg.tx_payload_type, g_tx_next_seq, + var PDU_RTP rtp := valueof(ts_RTP(g_cfg.tx_ssrc, rtp_payload_type, g_tx_next_seq, g_tx_next_ts, payload, marker)); RTP.send(t_RTP_Send(g_rtp_conn_id, RTP_messages_union:{rtp:=rtp})); /* increment sequence + timestamp for next transmit */ @@ -358,6 +361,39 @@ g_tx_next_ts := g_tx_next_ts + (g_cfg.tx_samplerate_hz / (1000 / g_cfg.tx_duration_ms)); } +private function f_check_fixed_rx_payloads(octetstring rtp_data, INT7b rtp_payload_type) runs on RTP_Emulation_CT { + var boolean payload_present := false; + var boolean payload_error := true; + var boolean payload_type_match := false; + + /* Evaluate rtp_data and rtp_payload_type */ + for (var integer i := 0; i < lengthof(g_cfg.rx_payloads); i := i + 1) { + if (ispresent(g_cfg.rx_payloads[i].fixed_payload)) { + /* Set marker to mark that payload octetstrings are present */ + payload_present := true; + + /* Verify that the payload octetstring and the payload type number is correct */ + if (rtp_data == g_cfg.rx_payloads[i].fixed_payload and rtp_payload_type == g_cfg.rx_payloads[i].payload_type) { + payload_error := false; + } + + /* Verify that at least the payload type is correct */ + if (rtp_payload_type == g_cfg.rx_payloads[i].payload_type) { + payload_type_match := true; + } + } + } + + /* Increment error counters */ + if (payload_present and payload_error) { + /* In case payload octet strings are defined, we expect at least one to match */ + g_stats_rtp.num_pkts_rx_err_payload := g_stats_rtp.num_pkts_rx_err_payload + 1; + } else if (payload_type_match == false) { + /* In case no payload octet string was defined, we expect at least one payload type number to match */ + g_stats_rtp.num_pkts_rx_err_pt := g_stats_rtp.num_pkts_rx_err_pt + 1; + } +} + function f_main() runs on RTP_Emulation_CT { var Result res; @@ -450,7 +486,7 @@ g_tx_connected := true; /* Send any pending IuUP CTRL message whichwas delayed due to not being connected: */ if (isvalue(g_iuup_ent.pending_tx_pdu)) { - f_tx_rtp(''O); + f_tx_rtp(''O, g_cfg.tx_payloads[0].payload_type); } CTRL.reply(RTPEM_connect:{g_remote_host, g_remote_port}); } @@ -517,7 +553,7 @@ g_stats_rtp.num_pkts_rx_err_disabled := g_stats_rtp.num_pkts_rx_err_disabled+1; } else if (g_tx_connected and isvalue(g_iuup_ent.pending_tx_pdu)) { /* IuUP Control packet was received and requires sending back something: */ - f_tx_rtp(''O); + f_tx_rtp(''O, g_cfg.tx_payloads[0].payload_type); } } else { g_stats_rtp.num_pkts_rx_err_disabled := g_stats_rtp.num_pkts_rx_err_disabled+1; @@ -530,9 +566,6 @@ /* process received RTCP/RTP if receiver enabled */ [g_rx_enabled] RTP.receive(tr_rtp) -> value rx_rtp { /* increment counters */ - if (rx_rtp.msg.rtp.payload_type != g_cfg.tx_payload_type) { - g_stats_rtp.num_pkts_rx_err_pt := g_stats_rtp.num_pkts_rx_err_pt+1; - } g_stats_rtp.num_pkts_rx := g_stats_rtp.num_pkts_rx+1; g_stats_rtp.bytes_payload_rx := g_stats_rtp.bytes_payload_rx + lengthof(rx_rtp.msg.rtp.data); @@ -541,14 +574,15 @@ /* IuUP Control packet was received which may require sending back something: */ if (lengthof(rx_rtp.msg.rtp.data) == 0) { if (g_tx_connected and isvalue(g_iuup_ent.pending_tx_pdu)) { - f_tx_rtp(''O); + f_tx_rtp(''O, g_cfg.tx_payloads[0].payload_type); } repeat; } } - if (ispresent(g_cfg.rx_fixed_payload) and rx_rtp.msg.rtp.data != g_cfg.rx_fixed_payload) { - g_stats_rtp.num_pkts_rx_err_payload := g_stats_rtp.num_pkts_rx_err_payload + 1; - } + + /* Match the received payload against any of the predefined fixed rx payloads */ + f_check_fixed_rx_payloads(rx_rtp.msg.rtp.data, rx_rtp.msg.rtp.payload_type); + if (DATA.checkstate("Connected")) { DATA.send(rx_rtp.msg.rtp); } @@ -563,13 +597,14 @@ /* transmit if timer has expired */ [g_tx_connected] T_transmit.timeout { + var octetstring payload := g_cfg.tx_payloads[g_tx_next_seq mod lengthof(g_cfg.tx_payloads)].fixed_payload; + var INT7b rtp_payload_type := g_cfg.tx_payloads[g_tx_next_seq mod lengthof(g_cfg.tx_payloads)].payload_type; /* send one RTP frame, re-start timer */ - f_tx_rtp(g_cfg.tx_fixed_payload); + f_tx_rtp(payload, rtp_payload_type); T_transmit.start; /* update counters */ g_stats_rtp.num_pkts_tx := g_stats_rtp.num_pkts_tx+1; - g_stats_rtp.bytes_payload_tx := g_stats_rtp.bytes_payload_tx + - lengthof(g_cfg.tx_fixed_payload); + g_stats_rtp.bytes_payload_tx := g_stats_rtp.bytes_payload_tx + lengthof(payload); } /* connection refused */ diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn index dfbe263..512278c 100644 --- a/mgw/MGCP_Test.ttcn +++ b/mgw/MGCP_Test.ttcn @@ -341,15 +341,71 @@ MgcpOsmuxCID remote_cid optional, OsmuxemConfig cfg optional } + type record RtpCodecDescr { + uint7_t pt, + charstring codec, + charstring fmtp optional + } type record RtpFlowData { HostPort em, /* emulation side */ HostPort mgw, /* mgw side */ - uint7_t pt, - charstring codec, MgcpConnectionId mgcp_conn_id optional, + record of RtpCodecDescr codec_descr, RtpemConfig rtp_cfg optional, - RtpOsmuxFlowData osmux, - charstring fmtp optional + RtpOsmuxFlowData osmux + } + + /* To be used with f_flow_create/modify... functions */ + function f_gen_sdp(RtpFlowData flow) runs on dummy_CT return SDP_Message { + var template SDP_Message sdp; + var SDP_fmt_list fmt_list := {}; + var SDP_attribute_list attributes := {}; + + /* Add SDP RTMAP attributes (codec type, referenced by PT) */ + for (var integer i := 0; i < lengthof(flow.codec_descr); i := i + 1) { + attributes := attributes & { valueof(ts_SDP_rtpmap(flow.codec_descr[i].pt, + flow.codec_descr[i].codec)) }; + } + + /* Add SDP PTIME attribute, regardless of which codec, the packet intervall remains the same */ + attributes := attributes & { valueof(ts_SDP_ptime(20)) }; + + /* Add SDP FMTP attributes (codec parameters for each codec, referenced by PT) */ + for (var integer i := 0; i < lengthof(flow.codec_descr); i := i + 1) { + if (isvalue(flow.codec_descr[i].fmtp) and flow.codec_descr[i].fmtp != "") { + attributes := attributes & { valueof(ts_SDP_fmtp(flow.codec_descr[i].pt, + flow.codec_descr[i].fmtp)) }; + } + } + + /* Final step: Generate SDP */ + for (var integer i := 0; i < lengthof(flow.codec_descr); i := i + 1) { + fmt_list := fmt_list & {int2str(flow.codec_descr[i].pt)}; + } + sdp := ts_SDP(flow.em.hostname, flow.em.hostname, "23", "42", flow.em.portnr, fmt_list, attributes); + + return valueof(sdp); + } + + /* Generate a valid RTP emulation config from the payload type numbers configured in the flow description and + * the the default configuration of the RTP emulation module. */ + function f_gen_rtpem_config_from_flow(RtpFlowData flow) return RtpemConfig { + var RtpemConfig rtp_cfg := c_RtpemDefaultCfg; + + for (var integer i := 0; i < lengthof(flow.codec_descr); i := i + 1) { + var RtpemConfigPayload tx_cfg_payload; + var RtpemConfigPayload rx_cfg_payload; + + tx_cfg_payload.payload_type := flow.codec_descr[i].pt; + tx_cfg_payload.fixed_payload := c_RtpemDefaultCfg.tx_payloads[0].fixed_payload; + rx_cfg_payload.payload_type := flow.codec_descr[i].pt; + rx_cfg_payload.fixed_payload := c_RtpemDefaultCfg.rx_payloads[0].fixed_payload; + + rtp_cfg.tx_payloads := rtp_cfg.tx_payloads & {tx_cfg_payload}; + rtp_cfg.rx_payloads := rtp_cfg.rx_payloads & {rx_cfg_payload}; + } + + return rtp_cfg; } /* Create an RTP flow (bidirectional, or receive-only) */ @@ -358,12 +414,6 @@ runs on dummy_CT { var template MgcpCommand cmd; var MgcpResponse resp; - var SDP_attribute_list attributes; - - attributes := { valueof(ts_SDP_rtpmap(flow.pt, flow.codec)), valueof(ts_SDP_ptime(20)) }; - if (isvalue(flow.fmtp) and flow.fmtp != "") { - attributes := attributes & { valueof(ts_SDP_fmtp(flow.pt, flow.fmtp)) }; - } /* bind local RTP emulation socket */ f_rtpem_bind(pt, flow.em.hostname, flow.em.portnr); @@ -372,9 +422,7 @@ if (ispresent(flow.rtp_cfg)) { f_rtpem_configure(pt, flow.rtp_cfg); } else { - var RtpemConfig rtp_cfg := c_RtpemDefaultCfg; - rtp_cfg.tx_payload_type := flow.pt - f_rtpem_configure(pt, rtp_cfg); + f_rtpem_configure(pt, f_gen_rtpem_config_from_flow(flow)); } if (one_phase) { @@ -384,8 +432,7 @@ * one go. */ cmd := ts_CRCX(get_next_trans_id(), ep, mode, call_id); - cmd.sdp := ts_SDP(flow.em.hostname, flow.em.hostname, "23", "42", - flow.em.portnr, { int2str(flow.pt) }, attributes); + cmd.sdp := f_gen_sdp(flow); resp := mgcp_transceive_mgw(cmd, tr_CRCX_ACK); flow.mgcp_conn_id := extract_conn_id(resp); @@ -416,17 +463,11 @@ runs on dummy_CT { var template MgcpCommand cmd; var MgcpResponse resp; - var SDP_attribute_list attributes; var OsmuxTxHandle tx_hdl; var OsmuxRxHandle rx_hdl; var charstring cid_response; var OsmuxCID cid_resp_parsed - attributes := { valueof(ts_SDP_rtpmap(flow.pt, flow.codec)), valueof(ts_SDP_ptime(20)) }; - if (isvalue(flow.fmtp)) { - attributes := attributes & { valueof(ts_SDP_fmtp(flow.pt, flow.fmtp)) }; - } - /* bind local Osmux emulation socket */ f_osmuxem_bind(pt, flow.em.hostname, flow.em.portnr); @@ -452,8 +493,7 @@ flow.osmux.local_cid_sent := true; } cmd := ts_CRCX_osmux(get_next_trans_id(), ep, mode, call_id, flow.osmux.local_cid); - cmd.sdp := ts_SDP(flow.em.hostname, flow.em.hostname, "23", "42", - flow.em.portnr, { int2str(flow.pt) }, attributes); + cmd.sdp := f_gen_sdp(flow); resp := mgcp_transceive_mgw(cmd, tr_CRCX_ACK_osmux); flow.mgcp_conn_id := extract_conn_id(resp); /* extract port number from response */ @@ -503,12 +543,6 @@ runs on dummy_CT { var template MgcpCommand cmd; var MgcpResponse resp; - var SDP_attribute_list attributes; - - attributes := { valueof(ts_SDP_rtpmap(flow.pt, flow.codec)), valueof(ts_SDP_ptime(20)) }; - if (isvalue(flow.fmtp)) { - attributes := attributes & { valueof(ts_SDP_fmtp(flow.pt, flow.fmtp)) }; - } /* rebind local RTP emulation socket to the new address */ f_rtpem_bind(pt, flow.em.hostname, flow.em.portnr); @@ -517,15 +551,12 @@ if (ispresent(flow.rtp_cfg)) { f_rtpem_configure(pt, flow.rtp_cfg); } else { - var RtpemConfig rtp_cfg := c_RtpemDefaultCfg; - rtp_cfg.tx_payload_type := flow.pt - f_rtpem_configure(pt, rtp_cfg); + f_rtpem_configure(pt, f_gen_rtpem_config_from_flow(flow)); } /* connect MGW side RTP socket to the emulation-side RTP socket using SDP */ cmd := ts_MDCX(get_next_trans_id(), ep, mode, call_id, flow.mgcp_conn_id); - cmd.sdp := ts_SDP(flow.em.hostname, flow.em.hostname, "23", "42", - flow.em.portnr, { int2str(flow.pt) }, attributes); + cmd.sdp := f_gen_sdp(flow); resp := mgcp_transceive_mgw(cmd, tr_MDCX_ACK); /* extract MGW-side port number from response. (usually this @@ -542,16 +573,10 @@ runs on dummy_CT { var template MgcpCommand cmd; var MgcpResponse resp; - var SDP_attribute_list attributes; var OsmuxRxHandle rx_hdl; var charstring cid_response; var OsmuxCID cid_resp_parsed - attributes := { valueof(ts_SDP_rtpmap(flow.pt, flow.codec)), valueof(ts_SDP_ptime(20)) }; - if (isvalue(flow.fmtp)) { - attributes := attributes & { valueof(ts_SDP_fmtp(flow.pt, flow.fmtp)) }; - } - /* rebind local Osmux emulation socket to the new address */ f_osmuxem_bind(pt, flow.em.hostname, flow.em.portnr); @@ -573,8 +598,7 @@ /* connect MGW side Osmux socket to the emulation-side Osmux socket using SDP */ cmd := ts_MDCX_osmux(get_next_trans_id(), ep, mode, call_id, flow.mgcp_conn_id, flow.osmux.local_cid); - cmd.sdp := ts_SDP(flow.em.hostname, flow.em.hostname, "23", "42", - flow.em.portnr, { int2str(flow.pt) }, attributes); + cmd.sdp := f_gen_sdp(flow); resp := mgcp_transceive_mgw(cmd, tr_MDCX_ACK); /* extract MGW-side port number from response. (usually this @@ -1375,10 +1399,11 @@ /* from us to MGW */ flow[0] := valueof(t_RtpFlow(local_ip_rtp, remote_ip_rtp, 112, "AMR/8000")); flow[0].rtp_cfg := c_RtpemDefaultCfg - flow[0].rtp_cfg.tx_payload_type := flow[0].pt; - flow[0].rtp_cfg.rx_fixed_payload := amr_payload; - flow[0].rtp_cfg.tx_fixed_payload := amr_payload; - flow[0].fmtp := fmtp; + flow[0].rtp_cfg.rx_payloads[0].payload_type := flow[0].codec_descr[0].pt; + flow[0].rtp_cfg.rx_payloads[0].fixed_payload := amr_payload; + flow[0].rtp_cfg.tx_payloads[0].payload_type := flow[0].codec_descr[0].pt; + flow[0].rtp_cfg.tx_payloads[0].fixed_payload := amr_payload; + flow[0].codec_descr[0].fmtp := fmtp; /* bind local RTP emulation sockets */ flow[0].em.portnr := 10000; f_flow_create(RTPEM[0], ep, call_id, "sendrecv", flow[0]); @@ -1483,10 +1508,11 @@ /* Create the first connection in receive only mode */ flow[0] := valueof(t_RtpFlow(local_ip_rtp, remote_ip_rtp, 112, "AMR/8000")); flow[0].rtp_cfg := c_RtpemDefaultCfg - flow[0].rtp_cfg.tx_payload_type := flow[0].pt; + flow[0].rtp_cfg.rx_payloads[0].payload_type := flow[0].codec_descr[0].pt; + flow[0].rtp_cfg.tx_payloads[0].payload_type := flow[0].codec_descr[0].pt; /* 0014 is the ToC (CMR=AMR4.75) in front of AMR Payload in RTP Payload */ - flow[0].rtp_cfg.rx_fixed_payload := '0014'O & f_osmux_gen_expected_rx_rtp_payload(2 /* AMR_FT_2, 5.90 */, c_OsmuxemDefaultCfg.tx_fixed_payload); - flow[0].rtp_cfg.tx_fixed_payload := flow[0].rtp_cfg.rx_fixed_payload; + flow[0].rtp_cfg.rx_payloads[0].fixed_payload := '0014'O & f_osmux_gen_expected_rx_rtp_payload(2 /* AMR_FT_2, 5.90 */, c_OsmuxemDefaultCfg.tx_fixed_payload); + flow[0].rtp_cfg.tx_payloads[0].fixed_payload := flow[0].rtp_cfg.rx_payloads[0].fixed_payload; /* bind local RTP emulation sockets */ flow[0].em.portnr := 10000; f_flow_create(RTPEM[0], ep, call_id, "recvonly", flow[0], true); @@ -1780,8 +1806,10 @@ hostname := host_b, portnr := omit }, - pt := pt, - codec := codec, + codec_descr := {{ + pt := pt, + codec := codec + }}, osmux:= { local_cid_sent := false, local_cid := omit, @@ -2259,20 +2287,22 @@ /* bind local RTP emulation sockets */ flow[0].em.portnr := 10000; flow[0].rtp_cfg := c_RtpemDefaultCfg; - flow[0].rtp_cfg.tx_payload_type := flow[0].pt; - flow[0].rtp_cfg.rx_fixed_payload := pl0 - flow[0].rtp_cfg.tx_fixed_payload := pl0 - flow[0].fmtp := fmtp0; + flow[0].rtp_cfg.rx_payloads[0].payload_type := flow[0].codec_descr[0].pt; + flow[0].rtp_cfg.tx_payloads[0].payload_type := flow[0].codec_descr[0].pt; + flow[0].rtp_cfg.rx_payloads[0].fixed_payload := pl0; + flow[0].rtp_cfg.tx_payloads[0].fixed_payload := pl0; + flow[0].codec_descr[0].fmtp := fmtp0; f_flow_create(RTPEM[0], ep, call_id, "sendrecv", flow[0]); /* Connection #1 (Bidirectional) */ flow[1] := valueof(t_RtpFlow(mp_local_ipv4, mp_remote_ipv4, 111, "GSM-HR-08/8000")); flow[1].em.portnr := 20000; flow[1].rtp_cfg := c_RtpemDefaultCfg; - flow[1].rtp_cfg.tx_payload_type := flow[1].pt; - flow[1].rtp_cfg.rx_fixed_payload := pl1 - flow[1].rtp_cfg.tx_fixed_payload := pl1 - flow[1].fmtp := fmtp1; + flow[1].rtp_cfg.rx_payloads[0].payload_type := flow[1].codec_descr[0].pt; + flow[1].rtp_cfg.tx_payloads[0].payload_type := flow[1].codec_descr[0].pt; + flow[1].rtp_cfg.rx_payloads[0].fixed_payload := pl1; + flow[1].rtp_cfg.tx_payloads[0].fixed_payload := pl1; + flow[1].codec_descr[0].fmtp := fmtp1; f_flow_create(RTPEM[1], ep, call_id, "sendrecv", flow[1]); /* Send RTP packets to connection #0, receive on connection #1 */ @@ -2337,20 +2367,22 @@ /* bind local RTP emulation sockets */ flow[0].em.portnr := 10000; flow[0].rtp_cfg := c_RtpemDefaultCfg; - flow[0].rtp_cfg.tx_payload_type := flow[0].pt; - flow[0].rtp_cfg.rx_fixed_payload := pl0; - flow[0].rtp_cfg.tx_fixed_payload := pl0; - flow[0].fmtp := fmtp0; + flow[0].rtp_cfg.rx_payloads[0].payload_type := flow[0].codec_descr[0].pt; + flow[0].rtp_cfg.tx_payloads[0].payload_type := flow[0].codec_descr[0].pt; + flow[0].rtp_cfg.rx_payloads[0].fixed_payload := pl0; + flow[0].rtp_cfg.tx_payloads[0].fixed_payload := pl0; + flow[0].codec_descr[0].fmtp := fmtp0; f_flow_create(RTPEM[0], ep, call_id, "sendrecv", flow[0]); /* Connection #1 (Bidirectional) */ flow[1] := valueof(t_RtpFlow(mp_local_ipv4, mp_remote_ipv4, 112, "AMR/8000")); flow[1].em.portnr := 20000; flow[1].rtp_cfg := c_RtpemDefaultCfg; - flow[1].rtp_cfg.tx_payload_type := flow[1].pt; - flow[1].rtp_cfg.rx_fixed_payload := pl1; - flow[1].rtp_cfg.tx_fixed_payload := pl1; - flow[1].fmtp := fmtp1; + flow[1].rtp_cfg.rx_payloads[0].payload_type := flow[1].codec_descr[0].pt; + flow[1].rtp_cfg.tx_payloads[0].payload_type := flow[1].codec_descr[0].pt; + flow[1].rtp_cfg.rx_payloads[0].fixed_payload := pl1; + flow[1].rtp_cfg.tx_payloads[0].fixed_payload := pl1; + flow[1].codec_descr[0].fmtp := fmtp1; f_flow_create(RTPEM[1], ep, call_id, "sendrecv", flow[1]); /* Send RTP packets to connection #0, receive on connection #1 */ @@ -2682,7 +2714,8 @@ flow[0] := valueof(t_RtpFlow(local_ip_a, remote_ip_a, 96, "VND.3GPP.IUFP/16000")); flow[0].em.portnr := 10000; flow[0].rtp_cfg := c_RtpemDefaultCfg; - flow[0].rtp_cfg.tx_payload_type := flow[0].pt; + flow[0].rtp_cfg.rx_payloads[0].payload_type := flow[0].codec_descr[0].pt; + flow[0].rtp_cfg.tx_payloads[0].payload_type := flow[0].codec_descr[0].pt; flow[0].rtp_cfg.iuup_mode := true; flow[0].rtp_cfg.iuup_cfg.active_init := true; flow[0].rtp_cfg.iuup_cfg.rab_flow_combs := rfcl_a; @@ -2694,7 +2727,8 @@ flow[1] := valueof(t_RtpFlow(local_ip_b, remote_ip_b, 96, "VND.3GPP.IUFP/16000")); flow[1].em.portnr := 20000; flow[1].rtp_cfg := c_RtpemDefaultCfg; - flow[1].rtp_cfg.tx_payload_type := flow[1].pt; + flow[1].rtp_cfg.rx_payloads[0].payload_type := flow[1].codec_descr[0].pt; + flow[1].rtp_cfg.tx_payloads[0].payload_type := flow[1].codec_descr[0].pt; flow[1].rtp_cfg.iuup_mode := true; flow[1].rtp_cfg.iuup_cfg.active_init := false; f_flow_create(RTPEM[1], ep, call_id, "recvonly", flow[1], true); @@ -2816,9 +2850,11 @@ flow[0] := valueof(t_RtpFlow(local_ip_a, remote_ip_a, 96, "VND.3GPP.IUFP/16000")); flow[0].em.portnr := 10000; flow[0].rtp_cfg := c_RtpemDefaultCfg; - flow[0].rtp_cfg.tx_payload_type := flow[0].pt; - flow[0].rtp_cfg.tx_fixed_payload := '4f28959ffeb80181f5c4e83d176c897b4a4e333298333419a493ca63ded6e0'O; - flow[0].rtp_cfg.rx_fixed_payload := '08556d944c71a1a081e7ead204244480000ecd82b81118000097c4794e7740'O; /* flow[1].rtp_cfg.tx_fixed_payload converted AMR-BE-RTP->AMR-IUUP*/ + flow[0].rtp_cfg.tx_payloads[0].payload_type := flow[0].codec_descr[0].pt; + flow[0].rtp_cfg.rx_payloads[0].payload_type := flow[0].codec_descr[0].pt; + flow[0].rtp_cfg.tx_payloads[0].fixed_payload := '4f28959ffeb80181f5c4e83d176c897b4a4e333298333419a493ca63ded6e0'O; + /* flow[1].rtp_cfg.rx_payloads[0].fixed_payload converted AMR-BE-RTP->AMR-IUUP*/ + flow[0].rtp_cfg.rx_payloads[0].fixed_payload := '08556d944c71a1a081e7ead204244480000ecd82b81118000097c4794e7740'O; flow[0].rtp_cfg.iuup_mode := true; flow[0].rtp_cfg.iuup_cfg.active_init := true; flow[0].rtp_cfg.iuup_cfg.rab_flow_combs := rfcl_a; @@ -2830,9 +2866,11 @@ flow[1] := valueof(t_RtpFlow(local_ip_b, remote_ip_b, 112, "AMR/8000")); flow[1].em.portnr := 20000; flow[1].rtp_cfg := c_RtpemDefaultCfg; - flow[1].rtp_cfg.tx_payload_type := flow[1].pt; - flow[1].rtp_cfg.tx_fixed_payload := '0382155b65131c68682079fab4810911200003b360ae0446000025f11e539dd0'O; - flow[1].rtp_cfg.rx_fixed_payload := 'f3d3ca2567ffae00607d713a0f45db225ed2938ccca60ccd066924f298f7b5b8'O; /* flow[0].rtp_cfg.tx_fixed_payload converted AMR-IuUP->AMR-BE-RTP*/ + flow[1].rtp_cfg.tx_payloads[0].payload_type := flow[1].codec_descr[0].pt; + flow[1].rtp_cfg.rx_payloads[0].payload_type := flow[1].codec_descr[0].pt; + flow[1].rtp_cfg.tx_payloads[0].fixed_payload := '0382155b65131c68682079fab4810911200003b360ae0446000025f11e539dd0'O; + /* flow[0].rtp_cfg.rx_payloads[0].fixed_payload converted AMR-IuUP->AMR-BE-RTP*/ + flow[1].rtp_cfg.rx_payloads[0].fixed_payload := 'f3d3ca2567ffae00607d713a0f45db225ed2938ccca60ccd066924f298f7b5b8'O; flow[1].rtp_cfg.iuup_mode := false; f_flow_create(RTPEM[1], ep, call_id, "recvonly", flow[1], true); f_rtpem_mode(RTPEM[1], RTPEM_MODE_RXONLY); -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/32153 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: I8422313fccad1bfcee52c933f643068bebdaf2d5 Gerrit-Change-Number: 32153 Gerrit-PatchSet: 1 Gerrit-Owner: dexter <pmaier(a)sysmocom.de> Gerrit-MessageType: newchange
1 0
0 0
[S] Change in osmo-bsc[master]: log: N-PCSTATE: use new value_strings
by neels 30 Mar '23

30 Mar '23
neels has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/32152 ) Change subject: log: N-PCSTATE: use new value_strings ...................................................................... log: N-PCSTATE: use new value_strings Related: SYS#6319 Change-Id: I7a13fcf2bfee232c6cebc3c1180b956a73abc24e --- M src/osmo-bsc/osmo_bsc_sigtran.c 1 file changed, 21 insertions(+), 6 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/52/32152/1 diff --git a/src/osmo-bsc/osmo_bsc_sigtran.c b/src/osmo-bsc/osmo_bsc_sigtran.c index 70dcdc5..553d1b7 100644 --- a/src/osmo-bsc/osmo_bsc_sigtran.c +++ b/src/osmo-bsc/osmo_bsc_sigtran.c @@ -208,8 +208,9 @@ bool connected; bool disconnected; - LOGP(DMSC, LOGL_DEBUG, "N-PCSTATE ind: affected_pc=%u sp_status=%d remote_sccp_status=%d\n", - pcst->affected_pc, pcst->sp_status, pcst->remote_sccp_status); + LOGP(DMSC, LOGL_DEBUG, "N-PCSTATE ind: affected_pc=%u sp_status=%s remote_sccp_status=%s\n", + pcst->affected_pc, osmo_sccp_sp_status_name(pcst->sp_status), + osmo_sccp_rem_sccp_status_name(pcst->remote_sccp_status)); /* If we don't care about that point-code, ignore PCSTATE. */ msc = get_msc_by_pc(pcst->affected_pc); @@ -254,14 +255,18 @@ if (disconnected && a_reset_conn_ready(msc)) { LOGP(DMSC, LOGL_NOTICE, - "(msc%d) now unreachable: N-PCSTATE ind: pc=%u sp_status=%d remote_sccp_status=%d\n", - msc->nr, pcst->affected_pc, pcst->sp_status, pcst->remote_sccp_status); + "(msc%d) now unreachable: N-PCSTATE ind: pc=%u sp_status=%s remote_sccp_status=%s\n", + msc->nr, pcst->affected_pc, + osmo_sccp_sp_status_name(pcst->sp_status), + osmo_sccp_rem_sccp_status_name(pcst->remote_sccp_status)); /* A previously usable MSC has disconnected. Kick the BSSMAP back to DISC state. */ bssmap_reset_set_disconnected(msc->a.bssmap_reset); } else if (connected && !a_reset_conn_ready(msc)) { LOGP(DMSC, LOGL_NOTICE, - "(msc%d) now available: N-PCSTATE ind: pc=%u sp_status=%d remote_sccp_status=%d\n", - msc->nr, pcst->affected_pc, pcst->sp_status, pcst->remote_sccp_status); + "(msc%d) now available: N-PCSTATE ind: pc=%u sp_status=%s remote_sccp_status=%s\n", + msc->nr, pcst->affected_pc, + osmo_sccp_sp_status_name(pcst->sp_status), + osmo_sccp_rem_sccp_status_name(pcst->remote_sccp_status)); /* A previously unusable MSC has become reachable. Trigger immediate BSSMAP RESET -- we would resend a * RESET either way, but we might as well do it now to speed up connecting. */ bssmap_reset_resend_reset(msc->a.bssmap_reset); -- To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/32152 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-Change-Id: I7a13fcf2bfee232c6cebc3c1180b956a73abc24e Gerrit-Change-Number: 32152 Gerrit-PatchSet: 1 Gerrit-Owner: neels <nhofmeyr(a)sysmocom.de> Gerrit-MessageType: newchange
1 0
0 0
[M] Change in osmo-bsc[master]: SCCP N-PCSTATE: trigger MSC status on PC availability
by neels 30 Mar '23

30 Mar '23
neels has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/32151 ) Change subject: SCCP N-PCSTATE: trigger MSC status on PC availability ...................................................................... SCCP N-PCSTATE: trigger MSC status on PC availability Related: SYS#6319 Change-Id: I3a0869598b8395601a16d78dbc46eec400c0ea84 --- M include/osmocom/bsc/bssmap_reset.h M src/osmo-bsc/bssmap_reset.c M src/osmo-bsc/osmo_bsc_sigtran.c 3 files changed, 102 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/51/32151/1 diff --git a/include/osmocom/bsc/bssmap_reset.h b/include/osmocom/bsc/bssmap_reset.h index fcd850b..c0de13c 100644 --- a/include/osmocom/bsc/bssmap_reset.h +++ b/include/osmocom/bsc/bssmap_reset.h @@ -28,4 +28,5 @@ struct bssmap_reset *bssmap_reset_alloc(void *ctx, const char *label, const struct bssmap_reset_cfg *cfg); bool bssmap_reset_is_conn_ready(const struct bssmap_reset *bssmap_reset); void bssmap_reset_resend_reset(struct bssmap_reset *bssmap_reset); +void bssmap_reset_set_disconnected(struct bssmap_reset *bssmap_reset); void bssmap_reset_term_and_free(struct bssmap_reset *bssmap_reset); diff --git a/src/osmo-bsc/bssmap_reset.c b/src/osmo-bsc/bssmap_reset.c index fa6684d..ac304a5 100644 --- a/src/osmo-bsc/bssmap_reset.c +++ b/src/osmo-bsc/bssmap_reset.c @@ -251,6 +251,12 @@ osmo_fsm_inst_state_chg_ms(bssmap_reset->fi, BSSMAP_RESET_ST_DISC, 1, 0); } +void bssmap_reset_set_disconnected(struct bssmap_reset *bssmap_reset) +{ + /* Go to disconnected state, with the normal RESET timeout to re-send RESET. */ + bssmap_reset_fsm_state_chg(bssmap_reset->fi, BSSMAP_RESET_ST_DISC); +} + static __attribute__((constructor)) void bssmap_reset_fsm_init(void) { OSMO_ASSERT(osmo_fsm_register(&bssmap_reset_fsm) == 0); diff --git a/src/osmo-bsc/osmo_bsc_sigtran.c b/src/osmo-bsc/osmo_bsc_sigtran.c index 8837330..70dcdc5 100644 --- a/src/osmo-bsc/osmo_bsc_sigtran.c +++ b/src/osmo-bsc/osmo_bsc_sigtran.c @@ -36,6 +36,7 @@ #include <osmocom/bsc/gsm_data.h> #include <osmocom/bsc/bts.h> #include <osmocom/bsc/paging.h> +#include <osmocom/bsc/bssmap_reset.h> #include <osmocom/mgcp_client/mgcp_common.h> /* A pointer to a list with all involved MSCs @@ -92,7 +93,7 @@ &msc->a.msc_addr, msg); } -/* Find an MSC by its sigtran point code */ +/* Find an MSC by its remote SCCP address */ static struct bsc_msc_data *get_msc_by_addr(const struct osmo_sccp_addr *msc_addr) { struct osmo_ss7_instance *ss7; @@ -107,6 +108,19 @@ return NULL; } +/* Find an MSC by its sigtran point code */ +static struct bsc_msc_data *get_msc_by_pc(uint32_t pc) +{ + struct bsc_msc_data *msc; + llist_for_each_entry(msc, msc_list, entry) { + if ((msc->a.msc_addr.presence & OSMO_SCCP_ADDR_T_PC) == 0) + continue; + if (msc->a.msc_addr.pc == pc) + return msc; + } + return NULL; +} + /* Received data from MSC, use the connection id which MSC it is */ static int handle_data_from_msc(struct gsm_subscriber_connection *conn, struct msgb *msg) { @@ -188,6 +202,72 @@ return rc; } +static void handle_pcstate_ind(const struct osmo_scu_pcstate_param *pcst) +{ + struct bsc_msc_data *msc; + bool connected; + bool disconnected; + + LOGP(DMSC, LOGL_DEBUG, "N-PCSTATE ind: affected_pc=%u sp_status=%d remote_sccp_status=%d\n", + pcst->affected_pc, pcst->sp_status, pcst->remote_sccp_status); + + /* If we don't care about that point-code, ignore PCSTATE. */ + msc = get_msc_by_pc(pcst->affected_pc); + if (!msc) + return; + + /* See if this marks the point code to have become available, or to have been lost. There are two parts, the + * Service Point Status, and the Remote SCCP Status; also this PCSTATE may indicate things not related to + * connecting or disconnecting. Figure it out with separate flags for connect and disconnect: */ + connected = false; + disconnected = false; + + switch (pcst->sp_status) { + case OSMO_SCCP_SP_S_ACCESSIBLE: + connected = true; + break; + case OSMO_SCCP_SP_S_INACCESSIBLE: + disconnected = true; + break; + default: + case OSMO_SCCP_SP_S_CONGESTED: + /* Neither connecting nor disconnecting */ + break; + } + + switch (pcst->remote_sccp_status) { + case OSMO_SCCP_REM_SCCP_S_AVAILABLE: + if (!disconnected) + connected = true; + break; + case OSMO_SCCP_REM_SCCP_S_UNAVAILABLE_UNKNOWN: + case OSMO_SCCP_REM_SCCP_S_UNEQUIPPED: + case OSMO_SCCP_REM_SCCP_S_INACCESSIBLE: + disconnected = true; + connected = false; + break; + default: + case OSMO_SCCP_REM_SCCP_S_CONGESTED: + /* Neither connecting nor disconnecting */ + break; + } + + if (disconnected && a_reset_conn_ready(msc)) { + LOGP(DMSC, LOGL_NOTICE, + "(msc%d) now unreachable: N-PCSTATE ind: pc=%u sp_status=%d remote_sccp_status=%d\n", + msc->nr, pcst->affected_pc, pcst->sp_status, pcst->remote_sccp_status); + /* A previously usable MSC has disconnected. Kick the BSSMAP back to DISC state. */ + bssmap_reset_set_disconnected(msc->a.bssmap_reset); + } else if (connected && !a_reset_conn_ready(msc)) { + LOGP(DMSC, LOGL_NOTICE, + "(msc%d) now available: N-PCSTATE ind: pc=%u sp_status=%d remote_sccp_status=%d\n", + msc->nr, pcst->affected_pc, pcst->sp_status, pcst->remote_sccp_status); + /* A previously unusable MSC has become reachable. Trigger immediate BSSMAP RESET -- we would resend a + * RESET either way, but we might as well do it now to speed up connecting. */ + bssmap_reset_resend_reset(msc->a.bssmap_reset); + } +} + /* Callback function, called by the SCCP stack when data arrives */ static int sccp_sap_up(struct osmo_prim_hdr *oph, void *_scu) { @@ -255,6 +335,10 @@ } break; + case OSMO_PRIM(OSMO_SCU_PRIM_N_PCSTATE, PRIM_OP_INDICATION): + handle_pcstate_ind(&scu_prim->u.pcstate); + break; + default: LOGP(DMSC, LOGL_ERROR, "Unhandled SIGTRAN operation %s on primitive %u\n", get_value_string(osmo_prim_op_names, oph->operation), oph->primitive); -- To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/32151 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-Change-Id: I3a0869598b8395601a16d78dbc46eec400c0ea84 Gerrit-Change-Number: 32151 Gerrit-PatchSet: 1 Gerrit-Owner: neels <nhofmeyr(a)sysmocom.de> Gerrit-MessageType: newchange
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • ...
  • 365
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.