diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2011-01-04 13:01:23 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2011-01-17 11:21:12 +0100 |
commit | 069e635413efd1a1e4e5309c07a03d2df73bf88a (patch) | |
tree | 52755027bca5aa839b69c2b7ee869c9ca0488cf0 /src | |
parent | 644aafbc94a2c2bfb49b2352fe31452a1cddab27 (diff) |
mtp: Keep an array for the SLS -> SLC mapping for active links.
Diffstat (limited to 'src')
-rw-r--r-- | src/links.c | 6 | ||||
-rw-r--r-- | src/mtp_layer3.c | 19 |
2 files changed, 17 insertions, 8 deletions
diff --git a/src/links.c b/src/links.c index 1102ee6..b9458e5 100644 --- a/src/links.c +++ b/src/links.c @@ -33,20 +33,22 @@ void mtp_link_down(struct link_data *link) { mtp_linkset_down(link->the_link); link->clear_queue(link); + mtp_link_set_init_slc(link->the_link); } void mtp_link_up(struct link_data *link) { mtp_linkset_up(link->the_link); + mtp_link_set_init_slc(link->the_link); } void mtp_link_set_sccp_down(struct mtp_link_set *link) { } -void mtp_link_set_submit(struct mtp_link_set *set, struct msgb *msg) +void mtp_link_set_submit(struct link_data *link, struct msgb *msg) { - set->link->write(set->link, msg); + link->write(link, msg); } void mtp_link_set_restart(struct mtp_link_set *set) 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; +} |