diff options
author | Harald Welte <laforge@gnumonks.org> | 2018-05-26 22:42:29 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-05-27 20:17:02 +0200 |
commit | 68e4be9c845e25f53aea511b1c57340a9da5825c (patch) | |
tree | cb5117542b57a50449854a37f3bec43b7dcafca4 /src/osmo-bsc/osmo_bsc_sigtran.c | |
parent | 1c9b8b19176854ecf4a3d57e9eef6b495361557f (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.c | 35 |
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? */ +} |