From c597a4eba134eec47dd21085f86e749a78261726 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Tue, 3 Aug 2010 02:57:02 +0800 Subject: mgcp: Allow to change the receive (the loopback part) via the VTY --- openbsc/include/openbsc/mgcp_internal.h | 1 + openbsc/src/mgcp/mgcp_protocol.c | 5 +++++ openbsc/src/mgcp/mgcp_vty.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/openbsc/include/openbsc/mgcp_internal.h b/openbsc/include/openbsc/mgcp_internal.h index a17dc9e45..62161fdc9 100644 --- a/openbsc/include/openbsc/mgcp_internal.h +++ b/openbsc/include/openbsc/mgcp_internal.h @@ -42,6 +42,7 @@ struct mgcp_endpoint { char *callid; char *local_options; int conn_mode; + int orig_mode; int bts_payload_type; int net_payload_type; diff --git a/openbsc/src/mgcp/mgcp_protocol.c b/openbsc/src/mgcp/mgcp_protocol.c index d12d18280..5883c155c 100644 --- a/openbsc/src/mgcp/mgcp_protocol.c +++ b/openbsc/src/mgcp/mgcp_protocol.c @@ -409,6 +409,8 @@ static struct msgb *handle_create_con(struct mgcp_config *cfg, struct msgb *msg) error_code = 517; goto error2; } + + endp->orig_mode = endp->conn_mode; break; default: LOGP(DMGCP, LOGL_NOTICE, "Unhandled option: '%c'/%d on 0x%x\n", @@ -513,6 +515,7 @@ static struct msgb *handle_modify_con(struct mgcp_config *cfg, struct msgb *msg) error_code = 517; goto error3; } + endp->orig_mode = endp->conn_mode; break; case 'Z': silent = strcmp("noanswer", (const char *)&msg->l3h[line_start + 3]) == 0; @@ -762,4 +765,6 @@ void mgcp_free_endp(struct mgcp_endpoint *endp) endp->net_seq_no = endp->bts_seq_no = 0; endp->net_lost_no = endp->bts_lost_no = 0; + + endp->conn_mode = endp->orig_mode = MGCP_CONN_NONE; } diff --git a/openbsc/src/mgcp/mgcp_vty.c b/openbsc/src/mgcp/mgcp_vty.c index 49974c112..323b31139 100644 --- a/openbsc/src/mgcp/mgcp_vty.c +++ b/openbsc/src/mgcp/mgcp_vty.c @@ -254,12 +254,41 @@ DEFUN(cfg_mgcp_agent_addr, return CMD_SUCCESS; } +DEFUN(loop_endp, + loop_endp_cmd, + "loop-endpoint NAME (0|1)", + "Loop a given endpoint\n" + "The name in hex of the endpoint\n" "Enable/Disable the loop\n") +{ + struct mgcp_endpoint *endp; + + int endp_no = strtoul(argv[0], NULL, 16); + if (endp_no < 1 || endp_no >= g_cfg->number_endpoints) { + vty_out(vty, "Loopback number %s/%d is invalid.%s", + argv[0], endp_no, VTY_NEWLINE); + return CMD_WARNING; + } + + + endp = &g_cfg->endpoints[endp_no]; + int loop = atoi(argv[1]); + + if (loop) + endp->conn_mode = MGCP_CONN_LOOPBACK; + else + endp->conn_mode = endp->orig_mode; + + return CMD_SUCCESS; +} + int mgcp_vty_init(void) { install_element_ve(&show_mgcp_cmd); + install_element(ENABLE_NODE, &loop_endp_cmd); install_element(CONFIG_NODE, &cfg_mgcp_cmd); install_node(&mgcp_node, config_write_mgcp); + install_default(MGCP_NODE); install_element(MGCP_NODE, &ournode_exit_cmd); install_element(MGCP_NODE, &ournode_end_cmd); -- cgit v1.2.3