aboutsummaryrefslogtreecommitdiffstats
path: root/src/osmo-bsc/osmo_bsc_sigtran.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-05-26 22:42:29 +0200
committerHarald Welte <laforge@gnumonks.org>2018-05-27 20:17:02 +0200
commit68e4be9c845e25f53aea511b1c57340a9da5825c (patch)
treecb5117542b57a50449854a37f3bec43b7dcafca4 /src/osmo-bsc/osmo_bsc_sigtran.c
parent1c9b8b19176854ecf4a3d57e9eef6b495361557f (diff)
Remove 'struct bsc_msc_connection' + fix IPA-encapsulated CTRL
The bsc_msc_connection dates back to the old pre-libosmo-sigtran days, and 90% of the field members weren't used at all (even the new sigtran specific ones!). Let's merge what remains into struct bsc_msc_data. As a side effect, the already dysfunctional "dest A.B.C.D" VTY command has been removed from the MSC node. There's quite a bit of fall-out in the CTRL interface, which was the code with strongest ties to bsc_msc_connection. This was resolved by properly porting CTRL handling over to libosmo-sigtran, meaning that an IPA/SCCPlite connected MSC can now again send CTRL GET/SET commands, and can also receive those selective few TRAPs that old osmo-bsc-sccplite also sent to its MSC[s]. Change-Id: I6b7354f3b23a26bb4eab12213ca3d3b614c8154f Related: OS#2012
Diffstat (limited to 'src/osmo-bsc/osmo_bsc_sigtran.c')
-rw-r--r--src/osmo-bsc/osmo_bsc_sigtran.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/osmo-bsc/osmo_bsc_sigtran.c b/src/osmo-bsc/osmo_bsc_sigtran.c
index 2c3507d9e..c33124f70 100644
--- a/src/osmo-bsc/osmo_bsc_sigtran.c
+++ b/src/osmo-bsc/osmo_bsc_sigtran.c
@@ -24,6 +24,7 @@
#include <osmocom/sigtran/sccp_sap.h>
#include <osmocom/core/linuxlist.h>
#include <osmocom/gsm/gsm0808.h>
+#include <osmocom/gsm/protocol/ipaccess.h>
#include <osmocom/core/msgb.h>
#include <osmocom/bsc/bsc_msc_data.h>
#include <osmocom/bsc/debug.h>
@@ -512,3 +513,37 @@ fail_auto_cofiguration:
"A-interface: More than one invalid/inclomplete configuration detected, unable to revover - check config file!\n");
return -EINVAL;
}
+
+/* this function receives all messages received on an ASP for a PPID / StreamID that
+ * libosmo-sigtran doesn't know about, such as piggy-backed CTRL and/or MGCP */
+int osmo_ss7_asp_rx_unknown(struct osmo_ss7_asp *asp, int ppid_mux, struct msgb *msg)
+{
+ struct ipaccess_head *iph;
+ struct ipaccess_head_ext *iph_ext;
+
+ if (asp->cfg.proto != OSMO_SS7_ASP_PROT_IPA) {
+ msgb_free(msg);
+ return 0;
+ }
+
+ switch (ppid_mux) {
+ case IPAC_PROTO_OSMO:
+ if (msg->len < sizeof(*iph) + sizeof(*iph_ext)) {
+ LOGP(DMSC, LOGL_ERROR, "The message is too short.\n");
+ msgb_free(msg);
+ return -EINVAL;
+ }
+ iph = (struct ipaccess_head *) msg->data;
+ iph_ext = (struct ipaccess_head_ext *) iph->data;
+ msg->l2h = iph_ext->data;
+ switch (iph_ext->proto) {
+ case IPAC_PROTO_EXT_CTRL:
+ return bsc_sccplite_rx_ctrl(asp, msg);
+ }
+ break;
+ default:
+ break;
+ }
+ msgb_free(msg);
+ return 0; /* OSMO_SS7_UNKNOWN? */
+}