aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mtp_layer3.c10
-rw-r--r--src/ss7_application.c25
2 files changed, 30 insertions, 5 deletions
diff --git a/src/mtp_layer3.c b/src/mtp_layer3.c
index 45bbfa3..928a05c 100644
--- a/src/mtp_layer3.c
+++ b/src/mtp_layer3.c
@@ -23,6 +23,7 @@
#include <bsc_data.h>
#include <cellmgr_debug.h>
#include <isup_types.h>
+#include <ss7_application.h>
#include <counter.h>
#include <osmocore/talloc.h>
@@ -37,6 +38,15 @@ static int mtp_int_submit(struct mtp_link_set *set, int pc, int sls, int type, c
void mtp_link_submit(struct mtp_link *link, struct msgb *msg)
{
+ if (link->set->app && link->set->app->type == APP_STP) {
+ if (!link->set->app->route_src.up || !link->set->app->route_dst.up) {
+ LOGP(DINP, LOGL_NOTICE, "Not sending data as application is down %d/%s.\n",
+ link->set->app->nr, link->set->app->name);
+ msgb_free(msg);
+ return;
+ }
+ }
+
rate_ctr_inc(&link->ctrg->ctr[MTP_LNK_OUT]);
rate_ctr_inc(&link->set->ctrg->ctr[MTP_LSET_TOTA_OUT_MSG]);
link->write(link, msg);
diff --git a/src/ss7_application.c b/src/ss7_application.c
index 485aa2e..847a96e 100644
--- a/src/ss7_application.c
+++ b/src/ss7_application.c
@@ -91,7 +91,15 @@ void mtp_linkset_down(struct mtp_link_set *set)
set->available = 0;
mtp_link_set_stop(set);
- if (set->app && set->app->type != APP_STP) {
+ if (!set->app)
+ return;
+
+ if (set->app->type == APP_STP) {
+ if (set->app->route_src.set == set)
+ set->app->route_src.up = 0;
+ else
+ set->app->route_dst.up = 0;
+ } else {
app_clear_connections(set->app);
/* If we have an A link send a reset to the MSC */
@@ -105,10 +113,17 @@ void mtp_linkset_up(struct mtp_link_set *set)
set->available = 1;
/* we have not gone through link down */
- if (set->app && set->app->type != APP_STP &&
- set->app->route_dst.msc->msc_link_down) {
- app_clear_connections(set->app);
- app_resources_released(set->app);
+ if (set->app) {
+ if (set->app->type == APP_STP) {
+ if (set->app->route_src.set == set)
+ set->app->route_src.up = 1;
+ else
+ set->app->route_dst.up = 1;
+ } else if (set->app->type != APP_STP &&
+ set->app->route_dst.msc->msc_link_down) {
+ app_clear_connections(set->app);
+ app_resources_released(set->app);
+ }
}
mtp_link_set_reset(set);