diff options
-rw-r--r-- | src/diag_io.c | 15 | ||||
-rw-r--r-- | src/diag_io.h | 1 | ||||
-rw-r--r-- | src/osmo-qcdiag-log.c | 1 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/diag_io.c b/src/diag_io.c index 9309774..46af445 100644 --- a/src/diag_io.c +++ b/src/diag_io.c @@ -23,6 +23,9 @@ #include <string.h> #include <unistd.h> +#include <osmocom/core/gsmtap.h> +#include <osmocom/core/gsmtap_util.h> + #include "protocol/protocol.h" #include "diag_io.h" #include "diag_cmd.h" @@ -45,6 +48,11 @@ int diag_transmit_msgb(struct diag_instance *di, struct msgb *msg) struct diag_send_desc_type send; struct diag_hdlc_dest_type enc = { NULL, NULL, 0 }; + if (di->flags & DIAG_INST_F_GSMTAP_DIAG && di->gsmtap) { + gsmtap_send_ex(di->gsmtap, GSMTAP_TYPE_QC_DIAG, 0, 0, 0, + 0, 0, 0, 0, msgb_l2(msg), msgb_l2len(msg)); + } + if (di->flags & DIAG_INST_F_HEXDUMP) printf("Tx: %s\n", msgb_hexdump(msg)); @@ -146,6 +154,13 @@ struct msgb *diag_read_msg(struct diag_instance *di) if (di->flags & DIAG_INST_F_HEXDUMP) printf("Rx: %s\n", msgb_hexdump(msg)); + if (di->flags & DIAG_INST_F_GSMTAP_DIAG && di->gsmtap) { + gsmtap_send_ex(di->gsmtap, GSMTAP_TYPE_QC_DIAG, + GSMTAP_ARFCN_F_UPLINK, 0, 0, 0, + 0, 0, 0, msgb_l2(msg), + msgb_l2len(msg)); + } + return msg; } diff --git a/src/diag_io.h b/src/diag_io.h index 1e6d662..d3fd64e 100644 --- a/src/diag_io.h +++ b/src/diag_io.h @@ -5,6 +5,7 @@ #include <osmocom/core/gsmtap_util.h> #define DIAG_INST_F_HEXDUMP 0x00000001 +#define DIAG_INST_F_GSMTAP_DIAG 0x00000002 struct diag_instance { int fd; diff --git a/src/osmo-qcdiag-log.c b/src/osmo-qcdiag-log.c index 8905576..33b26ba 100644 --- a/src/osmo-qcdiag-log.c +++ b/src/osmo-qcdiag-log.c @@ -160,6 +160,7 @@ int main(int argc, char **argv) return EXIT_FAILURE; di.gsmtap = gsmtap_source_init("localhost", GSMTAP_UDP_PORT, 0); + di.flags = DIAG_INST_F_GSMTAP_DIAG; gsmtap_source_add_sink(di.gsmtap); printf("\n===> CONFIGURING\n"); |