diff options
Diffstat (limited to 'src/mtp_layer3.c')
-rw-r--r-- | src/mtp_layer3.c | 19 |
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; +} |