aboutsummaryrefslogtreecommitdiffstats
path: root/src/mtp_layer3.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mtp_layer3.c')
-rw-r--r--src/mtp_layer3.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/mtp_layer3.c b/src/mtp_layer3.c
index 0c835cd..e6eb2c3 100644
--- a/src/mtp_layer3.c
+++ b/src/mtp_layer3.c
@@ -202,7 +202,7 @@ static void mtp_send_sltm(struct mtp_link_set *link)
return;
}
- mtp_link_set_submit(link, msg);
+ mtp_link_set_submit(link->slc[0], msg);
}
static void mtp_sltm_t1_timeout(void *_link)
@@ -313,13 +313,13 @@ static int mtp_link_sign_msg(struct mtp_link_set *link, struct mtp_level_3_hdr *
msg = mtp_tfp_alloc(link, 0);
if (!msg)
return -1;
- mtp_link_set_submit(link, msg);
+ mtp_link_set_submit(link->slc[0], msg);
msg = mtp_tra_alloc(link);
if (!msg)
return -1;
- mtp_link_set_submit(link, msg);
+ mtp_link_set_submit(link->slc[0], msg);
link->sccp_up = 1;
link->was_up = 1;
LOGP(DINP, LOGL_INFO, "SCCP traffic allowed. %p\n", link);
@@ -371,7 +371,7 @@ static int mtp_link_regular_msg(struct mtp_link_set *link, struct mtp_level_3_hd
out = mtp_create_slta(link, mng, l3_len);
if (!out)
return -1;
- mtp_link_set_submit(link, out);
+ mtp_link_set_submit(link->slc[0], out);
return 0;
break;
case MTP_TST_MSG_SLTA:
@@ -455,7 +455,7 @@ static int mtp_link_sccp_data(struct mtp_link_set *link, struct mtp_level_3_hdr
if (!out)
return -1;
- mtp_link_set_submit(link, out);
+ mtp_link_set_submit(link->slc[MTP_LINK_SLS(hdr->addr)], out);
return 0;
}
@@ -544,6 +544,13 @@ static int mtp_int_submit(struct mtp_link_set *link, int pc, int sls, int type,
put_ptr = msgb_put(msg, length);
memcpy(put_ptr, data, length);
- mtp_link_set_submit(link, msg);
+ mtp_link_set_submit(link->slc[sls % 16], msg);
return 0;
}
+
+void mtp_link_set_init_slc(struct mtp_link_set *set)
+{
+ int i;
+ for (i = 0; i < ARRAY_SIZE(set->slc); ++i)
+ set->slc[i] = set->link;
+}