aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/mgcp/mgcp_vty.c
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2010-08-06 01:12:21 +0800
committerHolger Hans Peter Freyther <zecke@selfish.org>2010-08-06 01:12:21 +0800
commit260d6ed02c12ccde6d8eec5a34118b71207757b6 (patch)
treec4741888236f20e1b3752a07e72de4efcae9b6ed /openbsc/src/mgcp/mgcp_vty.c
parent6357a8e3110a6cdecb5ee8fdbe59d806f257c1ba (diff)
mgcp: Add a call tap feature to forward audio to another forward port
For debugging it is useful to forward (tee) UDP packets to another system and use gstreamer to inspect the rtp stream. This is untested code and might contain bugs.... and of course only tap your own calls.
Diffstat (limited to 'openbsc/src/mgcp/mgcp_vty.c')
-rw-r--r--openbsc/src/mgcp/mgcp_vty.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/openbsc/src/mgcp/mgcp_vty.c b/openbsc/src/mgcp/mgcp_vty.c
index 040e8ff2a..0faa674d4 100644
--- a/openbsc/src/mgcp/mgcp_vty.c
+++ b/openbsc/src/mgcp/mgcp_vty.c
@@ -310,10 +310,55 @@ DEFUN(loop_endp,
return CMD_SUCCESS;
}
+DEFUN(tap_call,
+ tap_call_cmd,
+ "tap-call ENDPOINT (bts-in|bts-out|net-in|net-out) A.B.C.D <0-65534>",
+ "Forward data on endpoint to a different system\n"
+ "The endpoint in hex\n"
+ "Forward the data coming from the bts\n"
+ "Forward the data coming from the bts leaving to the network\n"
+ "Forward the data coming from the net\n"
+ "Forward the data coming from the net leaving to the bts\n"
+ "destination IP of the data\n" "destination port\n")
+{
+ struct mgcp_rtp_tap *tap;
+ struct mgcp_endpoint *endp;
+ int port = 0;
+
+ int endp_no = strtoul(argv[0], NULL, 16);
+ if (endp_no < 1 || endp_no >= g_cfg->number_endpoints) {
+ vty_out(vty, "Endpoint number %s/%d is invalid.%s",
+ argv[0], endp_no, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ endp = &g_cfg->endpoints[endp_no];
+
+ if (strcmp(argv[1], "bts-in") == 0) {
+ port = MGCP_TAP_BTS_IN;
+ } else if (strcmp(argv[1], "bts-out") == 0) {
+ port = MGCP_TAP_BTS_OUT;
+ } else if (strcmp(argv[1], "net-in") == 0) {
+ port = MGCP_TAP_NET_IN;
+ } else if (strcmp(argv[1], "net-out") == 0) {
+ port = MGCP_TAP_NET_OUT;
+ } else {
+ vty_out(vty, "Unknown mode... tricked vty?%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ tap = &endp->taps[port];
+ memset(&tap->forward, 0, sizeof(tap->forward));
+ inet_aton(argv[2], &tap->forward.sin_addr);
+ tap->forward.sin_port = htons(atoi(argv[3]));
+ return CMD_SUCCESS;
+}
+
int mgcp_vty_init(void)
{
install_element_ve(&show_mgcp_cmd);
install_element(ENABLE_NODE, &loop_endp_cmd);
+ install_element(ENABLE_NODE, &tap_call_cmd);
install_element(CONFIG_NODE, &cfg_mgcp_cmd);
install_node(&mgcp_node, config_write_mgcp);