aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2011-01-20 16:51:34 +0100
committerHolger Hans Peter Freyther <zecke@selfish.org>2011-01-20 19:07:16 +0100
commitfa8cf2d9388001b052675a740ac07582b4849b9d (patch)
tree238e52becc04e5595bbf26af54b5b3be10f1d416
parent9b8a4a7f49b8d926de4bd4a1866d9506b92e1dfa (diff)
mtp: Create a method for a link failure to restart the link.
Make sure that a failed link will be restarted by calling the reset method which should take the link down.
-rw-r--r--include/mtp_data.h2
-rw-r--r--src/link_udp.c5
-rw-r--r--src/mtp_link.c8
3 files changed, 11 insertions, 4 deletions
diff --git a/include/mtp_data.h b/include/mtp_data.h
index 1ebd7f6..de9be11 100644
--- a/include/mtp_data.h
+++ b/include/mtp_data.h
@@ -128,6 +128,8 @@ void mtp_link_start_link_test(struct mtp_link *link);
void mtp_link_stop_link_test(struct mtp_link *link);
int mtp_link_slta(struct mtp_link *link, uint16_t l3_len, struct mtp_level_3_mng *mng);
+void mtp_link_failure(struct mtp_link *fail);
+
/* internal routines */
struct msgb *mtp_msg_alloc(struct mtp_link_set *link);
void mtp_link_set_trasmit(struct mtp_link *link, int sls, struct msgb *msg);
diff --git a/src/link_udp.c b/src/link_udp.c
index 9a7d645..7e0b94b 100644
--- a/src/link_udp.c
+++ b/src/link_udp.c
@@ -91,12 +91,11 @@ static int udp_read_cb(struct bsc_fd *fd)
if (hdr->data_type == UDP_DATA_RETR_COMPL || hdr->data_type == UDP_DATA_RETR_IMPOS) {
LOGP(DINP, LOGL_ERROR, "Link retrieval done. Restarting the link.\n");
- mtp_link_down(link);
- mtp_link_up(link);
+ mtp_link_failure(link);
goto exit;
} else if (hdr->data_type > UDP_DATA_MSU_PRIO_3) {
LOGP(DINP, LOGL_ERROR, "Link failure. retrieved message.\n");
- mtp_link_down(link);
+ mtp_link_failure(link);
goto exit;
}
diff --git a/src/mtp_link.c b/src/mtp_link.c
index 20f4785..5423b33 100644
--- a/src/mtp_link.c
+++ b/src/mtp_link.c
@@ -78,7 +78,7 @@ static void mtp_sltm_t1_timeout(void *_link)
} else {
LOGP(DINP, LOGL_ERROR, "Two missing SLTAs. Restart link: %p\n", link);
bsc_del_timer(&link->t2_timer);
- link->reset(link);
+ mtp_link_failure(link);
}
}
@@ -148,3 +148,9 @@ int mtp_link_slta(struct mtp_link *link, uint16_t l3_len,
return 0;
}
+
+void mtp_link_failure(struct mtp_link *link)
+{
+ LOGP(DINP, LOGL_ERROR, "Link has failed. Resetting it: 0x%p\n", link);
+ link->reset(link);
+}