aboutsummaryrefslogtreecommitdiffstats
path: root/src/diag_io.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-01-01 19:49:47 +0100
committerHarald Welte <laforge@gnumonks.org>2017-01-01 19:51:50 +0100
commit3b144a27fa12e23a4049d1ede2403e7a6aba5d5b (patch)
tree1c0ef7e7c1fa7acfbe9a646dbec435683d1aff9a /src/diag_io.c
parentf727edcd7d35bd28aea5d3939ea1d4b0f833ab2a (diff)
DPL: add parsing of results from modem
we can now get a list of DPL interfaces and their links.
Diffstat (limited to 'src/diag_io.c')
-rw-r--r--src/diag_io.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/diag_io.c b/src/diag_io.c
index 59bedab..bcae793 100644
--- a/src/diag_io.c
+++ b/src/diag_io.c
@@ -166,6 +166,27 @@ struct msgb *diag_transceive_msg(struct diag_instance *di, struct msgb *tx)
return NULL;
}
+struct msgb *diag_subsys_transceive_msg(struct diag_instance *di, struct msgb *tx,
+ uint8_t subsys, uint16_t code)
+{
+ struct msgb *rx;
+ struct diagpkt_subsys_hdr *dsh;
+
+ diag_push_subsys_hdr(tx, subsys, code);
+ rx = diag_transceive_msg(di, tx);
+ if (!rx)
+ return NULL;
+ dsh = (struct diagpkt_subsys_hdr *) rx->l2h;
+ if (msgb_l2len(rx) < sizeof(*dsh) ||
+ dsh->subsys_id != subsys ||
+ osmo_load16le(&dsh->subsys_cmd_code) != code) {
+ msgb_free(rx);
+ return NULL;
+ }
+ rx->l3h = rx->l2h + sizeof(*dsh);
+ return rx;
+}
+
/* transmit a message, wait for response, then ignore response */
void diag_transceive_msg_ign(struct diag_instance *di, struct msgb *tx)
{