diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-05-11 19:17:07 +0800 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-05-11 20:00:22 +0800 |
commit | 7407aec9218f0f8555889663524289e5ba4c1961 (patch) | |
tree | fcba97fd5eeed496c8b7df9b05c2474f188adb08 /openbsc | |
parent | e575ce69ce3f973e0dd0157acc8853e5ccbe9330 (diff) |
bsc_msc_ip: Move the MSC connection into the structure
Diffstat (limited to 'openbsc')
-rw-r--r-- | openbsc/include/openbsc/gsm_data.h | 3 | ||||
-rw-r--r-- | openbsc/src/bsc_msc_ip.c | 33 |
2 files changed, 19 insertions, 17 deletions
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h index 20ea235e9..65b5a3c3e 100644 --- a/openbsc/include/openbsc/gsm_data.h +++ b/openbsc/include/openbsc/gsm_data.h @@ -3,6 +3,8 @@ #include <sys/types.h> +struct bsc_msc_connection; + enum gsm_phys_chan_config { GSM_PCHAN_NONE, GSM_PCHAN_CCCH, @@ -673,6 +675,7 @@ struct gsm_network { char *bsc_token; char *msc_ip; int msc_port; + struct bsc_msc_connection *msc_con; int ping_timeout; int pong_timeout; }; diff --git a/openbsc/src/bsc_msc_ip.c b/openbsc/src/bsc_msc_ip.c index 8dfbab7de..ece817f1d 100644 --- a/openbsc/src/bsc_msc_ip.c +++ b/openbsc/src/bsc_msc_ip.c @@ -69,7 +69,6 @@ static int testmode = 0; extern int ipacc_rtp_direct; /* msc handling */ -static struct bsc_msc_connection *msc_con; static struct timer_list msc_ping_timeout; static struct timer_list msc_pong_timeout; @@ -271,7 +270,7 @@ static int open_sccp_connection(struct msgb *layer3) struct msgb *data; /* When not connected to a MSC. We will simply close things down. */ - if (!msc_con->is_authenticated) { + if (!bsc_gsmnet->msc_con->is_authenticated) { LOGP(DMSC, LOGL_ERROR, "Not connected to a MSC. Not forwarding data.\n"); use_subscr_con(&layer3->lchan->conn); put_subscr_con(&layer3->lchan->conn, 0); @@ -637,7 +636,7 @@ static void print_usage() static int msc_queue_write(struct msgb *msg, int proto) { ipaccess_prepend_header(msg, proto); - if (write_queue_enqueue(&msc_con->write_queue, msg) != 0) { + if (write_queue_enqueue(&bsc_gsmnet->msc_con->write_queue, msg) != 0) { LOGP(DMSC, LOGL_FATAL, "Failed to queue IPA/%d\n", proto); msgb_free(msg); return -1; @@ -653,7 +652,7 @@ static int msc_sccp_do_write(struct bsc_fd *fd, struct msgb *msg) LOGP(DMSC, LOGL_DEBUG, "Sending SCCP to MSC: %u\n", msgb_l2len(msg)); LOGP(DMI, LOGL_DEBUG, "MSC TX %s\n", hexdump(msg->l2h, msgb_l2len(msg))); - ret = write(msc_con->write_queue.bfd.fd, msg->data, msg->len); + ret = write(bsc_gsmnet->msc_con->write_queue.bfd.fd, msg->data, msg->len); if (ret < msg->len) perror("MSC: Failed to send SCCP"); @@ -825,7 +824,7 @@ static void initialize_if_needed(void) struct msgb *msg; - if (!msc_con->is_authenticated) { + if (!bsc_gsmnet->msc_con->is_authenticated) { /* send a gsm 08.08 reset message from here */ msg = bssmap_create_reset(); if (!msg) { @@ -835,7 +834,7 @@ static void initialize_if_needed(void) sccp_write(msg, &sccp_ssn_bssap, &sccp_ssn_bssap, 0); msgb_free(msg); - msc_con->is_authenticated = 1; + bsc_gsmnet->msc_con->is_authenticated = 1; } } @@ -910,7 +909,7 @@ static void msc_connection_was_lost(struct bsc_msc_connection *msc) static void msc_pong_timeout_cb(void *data) { LOGP(DMSC, LOGL_ERROR, "MSC didn't answer PING. Closing connection.\n"); - bsc_msc_lost(msc_con); + bsc_msc_lost(bsc_gsmnet->msc_con); } static void send_ping(void) @@ -966,7 +965,7 @@ static int ipaccess_a_fd_cb(struct bsc_fd *bfd) if (!msg) { if (error == 0) { LOGP(DMSC, LOGL_ERROR, "The connection to the MSC was lost.\n"); - bsc_msc_lost(msc_con); + bsc_msc_lost(bsc_gsmnet->msc_con); return -1; } @@ -1099,9 +1098,9 @@ static void signal_handler(int signal) talloc_report_full(tall_bsc_ctx, stderr); break; case SIGUSR2: - if (!msc_con || !msc_con->is_connected) + if (!bsc_gsmnet->msc_con || !bsc_gsmnet->msc_con->is_connected) return; - bsc_msc_lost(msc_con); + bsc_msc_lost(bsc_gsmnet->msc_con); break; default: break; @@ -1216,8 +1215,8 @@ int main(int argc, char **argv) if (msc_address) msc = msc_address; - msc_con = bsc_msc_create(msc, bsc_gsmnet->msc_port); - if (!msc_con) { + bsc_gsmnet->msc_con = bsc_msc_create(msc, bsc_gsmnet->msc_port); + if (!bsc_gsmnet->msc_con) { fprintf(stderr, "Creating a bsc_msc_connection failed.\n"); exit(1); } @@ -1225,11 +1224,11 @@ int main(int argc, char **argv) msc_ping_timeout.cb = msc_ping_timeout_cb; msc_pong_timeout.cb = msc_pong_timeout_cb; - msc_con->connection_loss = msc_connection_was_lost; - msc_con->connected = msc_connection_connected; - msc_con->write_queue.read_cb = ipaccess_a_fd_cb; - msc_con->write_queue.write_cb = msc_sccp_do_write; - bsc_msc_connect(msc_con); + bsc_gsmnet->msc_con->connection_loss = msc_connection_was_lost; + bsc_gsmnet->msc_con->connected = msc_connection_connected; + bsc_gsmnet->msc_con->write_queue.read_cb = ipaccess_a_fd_cb; + bsc_gsmnet->msc_con->write_queue.write_cb = msc_sccp_do_write; + bsc_msc_connect(bsc_gsmnet->msc_con); |