summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2012-01-27 13:07:13 +0100
committerHarald Welte <laforge@gnumonks.org>2012-01-27 18:11:52 +0100
commit122b6331927dd65d716d71cdf8fcb728cc2475f9 (patch)
tree30243f59ff4a3898f1cc7e4adb68caf62da85295
parent379761cec4cb9d69c2523b547b3c00716cae13c0 (diff)
bsc_mgcp: Send RSIP for all endpoints when SIGHUP is received
this will be used as quick work-around so osmo-bsc kan trigger RSIP after a re-connect to a MSC requiring RSIP from the MGW. In the ideal world, the MSC (call agent) would comply with the MGCP spec and send AUEP, but well...
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_bssap.c6
-rw-r--r--openbsc/src/osmo-bsc_mgcp/mgcp_main.c11
2 files changed, 17 insertions, 0 deletions
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_bssap.c b/openbsc/src/osmo-bsc/osmo_bsc_bssap.c
index a59e2f674..0742b0b26 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_bssap.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_bssap.c
@@ -29,6 +29,7 @@
#include <osmocom/gsm/protocol/gsm_08_08.h>
#include <osmocom/gsm/gsm0808.h>
+#include <sys/signal.h>
#include <arpa/inet.h>
static uint16_t read_data16(const uint8_t *data)
@@ -102,6 +103,11 @@ static int bssmap_handle_reset_ack(struct gsm_network *net,
struct msgb *msg, unsigned int length)
{
LOGP(DMSC, LOGL_NOTICE, "Reset ACK from MSC\n");
+
+ /* notify bsc_mgcp to reset all end-points */
+ if (net->msc_data->bsc_mgcp.pid)
+ kill(net->msc_data->bsc_mgcp.pid, SIGHUP);
+
return 0;
}
diff --git a/openbsc/src/osmo-bsc_mgcp/mgcp_main.c b/openbsc/src/osmo-bsc_mgcp/mgcp_main.c
index f73e73d11..94d2d7f3b 100644
--- a/openbsc/src/osmo-bsc_mgcp/mgcp_main.c
+++ b/openbsc/src/osmo-bsc_mgcp/mgcp_main.c
@@ -30,6 +30,7 @@
#include <unistd.h>
#include <sys/socket.h>
+#include <sys/signal.h>
#include <openbsc/debug.h>
#include <openbsc/gsm_data.h>
@@ -196,6 +197,15 @@ static struct vty_app_info vty_info = {
.is_config_node = bsc_vty_is_config_node,
};
+static void sig_handler(int sig)
+{
+ if (sig != SIGHUP)
+ return;
+
+ LOGP(DMGCP, LOGL_NOTICE, "SIGHUP received, resetting all endpoints\n");
+ mgcp_send_reset_all(cfg);
+}
+
int main(int argc, char **argv)
{
struct gsm_network dummy_network;
@@ -205,6 +215,7 @@ int main(int argc, char **argv)
tall_bsc_ctx = talloc_named_const(NULL, 1, "mgcp-callagent");
osmo_init_ignore_signals();
+ signal(SIGHUP, &sig_handler);
osmo_init_logging(&log_info);
cfg = mgcp_config_alloc();