aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sctp_m2ua.h1
-rw-r--r--src/sctp_m2ua.c10
2 files changed, 8 insertions, 3 deletions
diff --git a/include/sctp_m2ua.h b/include/sctp_m2ua.h
index 99af46e..34c8666 100644
--- a/include/sctp_m2ua.h
+++ b/include/sctp_m2ua.h
@@ -49,6 +49,7 @@ struct mtp_m2ua_link {
* what will happen to it. For load-sharing we
* will need to turn this into a list.
*/
+ int active;
int asp_active;
int established;
struct sctp_m2ua_conn *conn;
diff --git a/src/sctp_m2ua.c b/src/sctp_m2ua.c
index 113100f..9e17161 100644
--- a/src/sctp_m2ua.c
+++ b/src/sctp_m2ua.c
@@ -66,6 +66,7 @@ static void m2ua_conn_destroy(struct sctp_m2ua_conn *conn)
link_down(link->base);
link->established = 0;
link->asp_active = 0;
+ link->active = 0;
link->conn = NULL;
}
@@ -311,6 +312,10 @@ static int m2ua_handle_state_req(struct mtp_m2ua_link *link,
return -1;
}
m2ua_msg_free(conf);
+
+ LOGP(DINP, LOGL_NOTICE, "M2UA link-index %d is running.\n", link->link_index);
+ link->active = 1;
+ mtp_link_up(link->base);
break;
default:
LOGP(DINP, LOGL_ERROR, "Unknown STATE Request: %d\n", req);
@@ -341,8 +346,6 @@ static int m2ua_handle_est_req(struct mtp_m2ua_link *link,
}
link->established = 1;
- LOGP(DINP, LOGL_NOTICE, "M2UA/Link is established.\n");
- mtp_link_up(link->base);
m2ua_msg_free(conf);
return 0;
}
@@ -367,6 +370,7 @@ static int m2ua_handle_rel_req(struct mtp_m2ua_link *link,
}
link->established = 0;
+ link->active = 0;
LOGP(DINP, LOGL_NOTICE, "M2UA/Link is released.\n");
link_down(link->base);
m2ua_msg_free(conf);
@@ -564,7 +568,7 @@ static int sctp_m2ua_write(struct mtp_link *link, struct msgb *msg)
goto clean;
}
- if (!mlink->asp_active || !mlink->established) {
+ if (!mlink->asp_active || !mlink->established || !mlink->active) {
LOGP(DINP, LOGL_ERROR, "ASP not ready for %d/%s of %d/%s.\n",
link->nr, link->name, link->set->nr, link->set->name);
goto clean;