pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/41135?usp=email )


Change subject: WIP: IPA: Introduce new OSMO extension TCAP_ROUTING
......................................................................

WIP: IPA: Introduce new OSMO extension TCAP_ROUTING

As currently being developed in libosmo-sigtran.git branch "daniel/wip".

Related: SYS#5423
Change-Id: Ibfcf633f7bd8773f557901fdff7580f5879391a1
---
A library/IPA_EXT_TCAP_ROUTING.ttcn
M library/IPA_Emulation.ttcnpp
M library/IPA_Types.ttcn
3 files changed, 133 insertions(+), 1 deletion(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks 
refs/changes/35/41135/1

diff --git a/library/IPA_EXT_TCAP_ROUTING.ttcn 
b/library/IPA_EXT_TCAP_ROUTING.ttcn
new file mode 100644
index 0000000..82e1cdf
--- /dev/null
+++ b/library/IPA_EXT_TCAP_ROUTING.ttcn
@@ -0,0 +1,89 @@
+/* IPA Osmo Extension: TCAP_ROUTING, used to set up TCAP routes in osmo-stp.
+ * (C) 2025 by sysmocom - s.f.m.c. GmbH <i...@sysmocom.de>
+ * All rights reserved.
+ *
+ * Released under the terms of GNU General Public License, Version 2 or
+ * (at your option) any later version.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+module IPA_EXT_TCAP_ROUTING {
+
+import from General_Types all;
+import from Osmocom_Types all;
+import from Native_Functions all;
+
+type enumerated IPA_EXT_TCAP_ROUTING_MsgType {
+       IPA_EXT_TCAP_ROUTING_MSG_TID_ADD_RANGE  ('01'O),
+       IPA_EXT_TCAP_ROUTING_MSG_TID_ACK        ('02'O),
+       IPA_EXT_TCAP_ROUTING_MSG_TID_NACK       ('03'O)
+} with { variant "FIELDLENGTH(8)" };
+
+type record IPA_EXT_TCAP_ROUTING_Hdr {
+       IPA_EXT_TCAP_ROUTING_MsgType msg_type,
+       uint32_t                seq_nr
+} with { variant "" };
+
+type record IPA_EXT_TCAP_ROUTING_ADD_RANGE {
+       uint32_t tid_start,
+       uint32_t tid_end,
+       uint32_t pc,
+       uint8_t ssn
+} with { variant "" };
+
+type record IPA_EXT_TCAP_ROUTING_ACK {
+} with { variant "" };
+
+type record IPA_EXT_TCAP_ROUTING_NACK {
+       uint8_t cause
+} with { variant "" };
+
+type union IPA_EXT_TCAP_ROUTING_MsgUnion {
+       IPA_EXT_TCAP_ROUTING_ADD_RANGE          add_range,
+       IPA_EXT_TCAP_ROUTING_ACK                ack,
+       IPA_EXT_TCAP_ROUTING_NACK               nack
+} with { variant "" };
+
+type record IPA_EXT_TCAP_ROUTING_Message {
+       IPA_EXT_TCAP_ROUTING_MsgType msg_type,
+       uint32_t seq_nr,
+       IPA_EXT_TCAP_ROUTING_MsgUnion   u
+} with { variant (u) "CROSSTAG(add_range,      msg_type = 
IPA_EXT_TCAP_ROUTING_MSG_TID_ADD_RANGE;
+                              ack,             msg_type = 
IPA_EXT_TCAP_ROUTING_MSG_TID_ACK;
+                              nack,            msg_type = 
IPA_EXT_TCAP_ROUTING_MSG_TID_NACK)"
+};
+
+external function enc_IPA_EXT_TCAP_ROUTING_Message(in 
IPA_EXT_TCAP_ROUTING_Message pdu) return octetstring
+       with { extension "prototype(convert) encode(RAW)" };
+external function dec_IPA_EXT_TCAP_ROUTING_Message(in octetstring stream) 
return IPA_EXT_TCAP_ROUTING_Message
+       with { extension "prototype(convert) decode(RAW)" };
+
+/* Generic template for matching messages by type and/or the BTS number */
+template (present) IPA_EXT_TCAP_ROUTING_Message
+tr_IPA_EXT_TCAP_ROUTING_Message(template IPA_EXT_TCAP_ROUTING_MsgType msg_type 
:= ?) := {
+       msg_type := msg_type,
+       seq_nr := ?,
+       u := ?
+}
+
+template (value) IPA_EXT_TCAP_ROUTING_Message
+ts_IPA_EXT_TCAP_ROUTING_ADD_RANGE(template (value) uint32_t seq_nr,
+                                 template (value) uint32_t tid_start,
+                                 template (value) uint32_t tid_end,
+                                 template (value) uint32_t pc,
+                                 template (value) uint8_t ssn) := {
+       msg_type := IPA_EXT_TCAP_ROUTING_MSG_TID_ADD_RANGE,
+       seq_nr := seq_nr,
+       u := {
+               add_range := {
+                       tid_start := tid_start,
+                       tid_end := tid_end,
+                       pc := pc,
+                       ssn := ssn
+               }
+       }
+}
+
+
+} with { encode "RAW" };
diff --git a/library/IPA_Emulation.ttcnpp b/library/IPA_Emulation.ttcnpp
index 2df598a..9105f41 100644
--- a/library/IPA_Emulation.ttcnpp
+++ b/library/IPA_Emulation.ttcnpp
@@ -60,6 +60,10 @@
 import from PCUIF_Types all;
 #endif

+#ifdef IPA_EMULATION_TCAP_ROUTING
+import from IPA_EXT_TCAP_ROUTING all;
+#endif
+
 modulepar {
        /* Use Osmocom extended IPA mux header */
        boolean mp_ipa_mgcp_uses_osmo_ext := true;
@@ -202,6 +206,12 @@
 } with { extension "internal" }
 #endif

+#ifdef IPA_EMULATION_TCAP_ROUTING
+/* Client port for Osmocom PCU extension inside IPA */
+type port IPA_TCAP_ROUTING_PT message {
+       inout IPA_EXT_TCAP_ROUTING_Message, ASP_IPA_Event;
+} with { extension "internal" }
+#endif


 type component IPA_Emulation_CT {
@@ -242,6 +252,10 @@
        /* up-facing port for RSPRO */
        port IPA_OSMO_PCU_PT IPA_OSMO_PCU_PORT;
 #endif
+#ifdef IPA_EMULATION_TCAP_ROUTING
+       /* up-facing port for RSPRO */
+       port IPA_TCAP_ROUTING_PT IPA_TCAP_ROUTING_PORT;
+#endif

        /* up-facing port for other streams */
        port IPA_SP_PT IPA_SP_PORT;
@@ -410,6 +424,11 @@
                IPA_OSMO_PCU_PORT.send(evt);
        }
 #endif
+#ifdef IPA_EMULATION_TCAP_ROUTING
+       if (IPA_TCAP_ROUTING_PORT.checkstate("Connected")) {
+               IPA_TCAP_ROUTING_PORT.send(evt);
+       }
+#endif
        /* FIXME: to other ports */
 }

@@ -657,6 +676,13 @@
 }
 #endif

+#ifdef IPA_EMULATION_TCAP_ROUTING
+private function f_tcap_routing_to_user(octetstring msg) runs on 
IPA_Emulation_CT {
+       var IPA_EXT_TCAP_ROUTING_Message pcuif_msg := 
dec_IPA_EXT_TCAP_ROUTING_Message(msg);
+       IPA_TCAP_ROUTING_PORT.send(pcuif_msg);
+}
+#endif
+
 #ifdef IPA_EMULATION_MGCP
 private function f_mgcp_to_user(octetstring msg) runs on IPA_Emulation_CT {
        var charstring msg_ch := oct2char(msg);
@@ -734,6 +760,9 @@
 #ifdef IPA_EMULATION_OSMO_PCU
        var PCUIF_Message pcu;
 #endif
+#ifdef IPA_EMULATION_TCAP_ROUTING
+       var IPA_EXT_TCAP_ROUTING_Message tcap_routing;
+#endif

        /* Set function for dissecting the binary */
        var f_IPL4_getMsgLen vl_f := refers(f_IPL4_fixedMsgLen);
@@ -815,6 +844,11 @@
                                                f_osmo_pcu_to_user(ipa_rx.msg);
                                        }
 #endif
+#ifdef IPA_EMULATION_TCAP_ROUTING
+                                       case (IPAC_PROTO_EXT_TCAP_ROUTING) {
+                                               
f_tcap_routing_to_user(ipa_rx.msg);
+                                       }
+#endif
                                        case else {
                                                
IPA_SP_PORT.send(f_to_asp(ipa_rx));
                                        }
@@ -916,6 +950,14 @@
                }
 #endif

+#ifdef IPA_EMULATION_TCAP_ROUTING
+               [] 
IPA_TCAP_ROUTING_PORT.receive(IPA_EXT_TCAP_ROUTING_Message:?) -> value 
tcap_routing {
+                       payload := 
enc_IPA_EXT_TCAP_ROUTING_Message(tcap_routing);
+                       ipa_ud := valueof(t_ASP_IPA_UD(IPAC_PROTO_OSMO, 
payload, IPAC_PROTO_EXT_TCAP_ROUTING));
+                       IPA_PORT.send(f_from_asp(f_ipa_conn_id(), ipa_ud));
+               }
+#endif
+
 #ifdef IPA_EMULATION_RSL
                /* Received RSL -> down into IPA */
                [] IPA_RSL_PORT.receive(ASP_RSL_Unitdata:?) -> value rsl {
diff --git a/library/IPA_Types.ttcn b/library/IPA_Types.ttcn
index fc729fb..4329f00 100644
--- a/library/IPA_Types.ttcn
+++ b/library/IPA_Types.ttcn
@@ -36,7 +36,8 @@
        IPAC_PROTO_EXT_GSUP     ('05'H),
        IPAC_PROTO_EXT_OAP      ('06'H),
        IPAC_PROTO_EXT_RSPRO    ('07'H),
-       IPAC_PROTO_EXT_OSMO_PCU ('08'H)
+       IPAC_PROTO_EXT_OSMO_PCU ('08'H),
+       IPAC_PROTO_EXT_TCAP_ROUTING ('09'H)
 } with { variant "FIELDLENGTH(8)" }

 external function enc_PDU_IPA(in PDU_IPA pdu) return octetstring

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/41135?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ibfcf633f7bd8773f557901fdff7580f5879391a1
Gerrit-Change-Number: 41135
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pes...@sysmocom.de>

Reply via email to