diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2011-01-03 23:51:07 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2011-01-17 11:21:11 +0100 |
commit | 644aafbc94a2c2bfb49b2352fe31452a1cddab27 (patch) | |
tree | 3e140e6454358d853eec32af370c87d6715f74b4 /src | |
parent | c8405692b381e4079eeaf52f38610a6a24f64773 (diff) |
mtp: Make the link_data be a child of the link_set
Change the order of the link and linkset. The link will be
below the linkset. This change should make it more easy to
introduce multiple linksets.
Diffstat (limited to 'src')
-rw-r--r-- | src/links.c | 49 | ||||
-rw-r--r-- | src/main.c | 30 | ||||
-rw-r--r-- | src/main_udt.c | 16 | ||||
-rw-r--r-- | src/msc_conn.c | 2 | ||||
-rw-r--r-- | src/vty_interface.c | 4 |
5 files changed, 54 insertions, 47 deletions
diff --git a/src/links.c b/src/links.c index 233f323..1102ee6 100644 --- a/src/links.c +++ b/src/links.c @@ -25,6 +25,8 @@ #include <mtp_data.h> #include <snmp_mtp.h> +#include <osmocore/talloc.h> + extern struct bsc_data bsc; void mtp_link_down(struct link_data *link) @@ -42,15 +44,15 @@ void mtp_link_set_sccp_down(struct mtp_link_set *link) { } -void mtp_link_set_submit(struct mtp_link_set *link, struct msgb *msg) +void mtp_link_set_submit(struct mtp_link_set *set, struct msgb *msg) { - bsc.link.write(&bsc.link, msg); + set->link->write(set->link, msg); } -void mtp_link_set_restart(struct mtp_link_set *link) +void mtp_link_set_restart(struct mtp_link_set *set) { LOGP(DINP, LOGL_ERROR, "Need to restart the SS7 link.\n"); - bsc.link.reset(&bsc.link); + set->link->reset(set->link); } static void start_rest(void *start) @@ -62,21 +64,26 @@ static void start_rest(void *start) exit(3); } - bsc.link.start(&bsc.link); + bsc.link_set->link->start(bsc.link_set->link); } int link_init(struct bsc_data *bsc) { - bsc->link.the_link = mtp_link_set_alloc(); - bsc->link.the_link->dpc = bsc->dpc; - bsc->link.the_link->opc = bsc->opc; - bsc->link.the_link->sccp_opc = bsc->sccp_opc > -1 ? bsc->sccp_opc : bsc->opc; - bsc->link.the_link->sltm_once = bsc->once; - bsc->link.the_link->ni = bsc->ni_ni; - bsc->link.the_link->spare = bsc->ni_spare; - bsc->link.the_link->bsc = bsc; - bsc->link.bsc = bsc; - bsc->link.udp.link_index = 1; + bsc->link_set = mtp_link_set_alloc(); + bsc->link_set->dpc = bsc->dpc; + bsc->link_set->opc = bsc->opc; + bsc->link_set->sccp_opc = bsc->sccp_opc > -1 ? bsc->sccp_opc : bsc->opc; + bsc->link_set->sltm_once = bsc->once; + bsc->link_set->ni = bsc->ni_ni; + bsc->link_set->spare = bsc->ni_spare; + bsc->link_set->bsc = bsc; + + bsc->link_set->link = talloc_zero(bsc->link_set, struct link_data); + bsc->link_set->link->bsc = bsc; + bsc->link_set->link->udp.link_index = 1; + bsc->link_set->link->pcap_fd = bsc->pcap_fd; + bsc->link_set->link->udp.reset_timeout = bsc->udp_reset_timeout; + bsc->link_set->link->the_link = bsc->link_set; if (!bsc->src_port) { LOGP(DINP, LOGL_ERROR, "You need to set a UDP address.\n"); @@ -86,12 +93,12 @@ int link_init(struct bsc_data *bsc) LOGP(DINP, LOGL_NOTICE, "Using UDP MTP mode.\n"); /* setup SNMP first, it is blocking */ - bsc->link.udp.session = snmp_mtp_session_create(bsc->udp_ip); - if (!bsc->link.udp.session) + bsc->link_set->link->udp.session = snmp_mtp_session_create(bsc->udp_ip); + if (!bsc->link_set->link->udp.session) return -1; /* now connect to the transport */ - if (link_udp_init(&bsc->link, bsc->src_port, bsc->udp_ip, bsc->udp_port) != 0) + if (link_udp_init(bsc->link_set->link, bsc->src_port, bsc->udp_ip, bsc->udp_port) != 0) return -1; /* @@ -100,11 +107,11 @@ int link_init(struct bsc_data *bsc) * SLTM and it begins a reset. Then we will take it up * again and do the usual business. */ - snmp_mtp_deactivate(bsc->link.udp.session, - bsc->link.udp.link_index); + snmp_mtp_deactivate(bsc->link_set->link->udp.session, + bsc->link_set->link->udp.link_index); bsc->start_timer.cb = start_rest; bsc->start_timer.data = &bsc; - bsc_schedule_timer(&bsc->start_timer, bsc->link.udp.reset_timeout, 0); + bsc_schedule_timer(&bsc->start_timer, bsc->link_set->link->udp.reset_timeout, 0); LOGP(DMSC, LOGL_NOTICE, "Making sure SLTM will timeout.\n"); return 0; @@ -194,7 +194,7 @@ static void clear_connections(struct bsc_data *bsc) free_con(con); } - bsc->link.clear_queue(&bsc->link); + bsc->link_set->link->clear_queue(bsc->link_set->link); } void bsc_resources_released(struct bsc_data *bsc) @@ -210,9 +210,9 @@ static void bsc_reset_timeout(void *_data) /* no reset */ if (bsc->reset_count > 0) { LOGP(DINP, LOGL_ERROR, "The BSC did not answer the GSM08.08 reset. Restart MTP\n"); - mtp_link_set_stop(bsc->link.the_link); + mtp_link_set_stop(bsc->link_set); clear_connections(bsc); - bsc->link.reset(&bsc->link); + bsc->link_set->link->reset(bsc->link_set->link); bsc_resources_released(bsc); return; } @@ -224,7 +224,7 @@ static void bsc_reset_timeout(void *_data) } ++bsc->reset_count; - mtp_link_set_submit_sccp_data(bsc->link.the_link, -1, msg->l2h, msgb_l2len(msg)); + mtp_link_set_submit_sccp_data(bsc->link_set, -1, msg->l2h, msgb_l2len(msg)); msgb_free(msg); bsc_schedule_timer(&bsc->reset_timeout, 20, 0); } @@ -269,7 +269,7 @@ void release_bsc_resources(struct bsc_data *bsc) continue; /* wait for the clear commands */ - mtp_link_set_submit_sccp_data(bsc->link.the_link, con->sls, msg->l2h, msgb_l2len(msg)); + mtp_link_set_submit_sccp_data(bsc->link_set, con->sls, msg->l2h, msgb_l2len(msg)); msgb_free(msg); } @@ -319,7 +319,7 @@ static void send_rlc_to_bsc(unsigned int sls, struct sccp_source_reference *src, if (!msg) return; - mtp_link_set_submit_sccp_data(bsc.link.the_link, sls, msg->l2h, msgb_l2len(msg)); + mtp_link_set_submit_sccp_data(bsc.link_set, sls, msg->l2h, msgb_l2len(msg)); msgb_free(msg); } @@ -500,7 +500,7 @@ static void send_local_rlsd_for_con(void *data) ++con->rls_tries; LOGP(DINP, LOGL_DEBUG, "Sending RLSD for 0x%x the %d time.\n", sccp_src_ref_to_int(&con->src_ref), con->rls_tries); - mtp_link_set_submit_sccp_data(bsc.link.the_link, con->sls, rlsd->l2h, msgb_l2len(rlsd)); + mtp_link_set_submit_sccp_data(bsc.link_set, con->sls, rlsd->l2h, msgb_l2len(rlsd)); msgb_free(rlsd); } @@ -547,7 +547,7 @@ static void sigint() printf("Terminating.\n"); handled = 1; if (bsc.setup) - bsc.link.shutdown(&bsc.link); + bsc.link_set->link->shutdown(bsc.link_set->link); exit(0); out: @@ -593,14 +593,14 @@ static void handle_options(int argc, char **argv) print_help(); exit(0); case 'p': - if (bsc.link.pcap_fd >= 0) - close(bsc.link.pcap_fd); - bsc.link.pcap_fd = open(optarg, O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP| S_IROTH); - if (bsc.link.pcap_fd < 0) { + if (bsc.pcap_fd >= 0) + close(bsc.pcap_fd); + bsc.pcap_fd = open(optarg, O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP| S_IROTH); + if (bsc.pcap_fd < 0) { fprintf(stderr, "Failed to open PCAP file.\n"); exit(0); } - mtp_pcap_write_header(bsc.link.pcap_fd); + mtp_pcap_write_header(bsc.pcap_fd); break; case 'c': config = optarg; @@ -650,8 +650,8 @@ int main(int argc, char **argv) bsc.setup = 0; bsc.msc_address = "127.0.0.1"; - bsc.link.pcap_fd = -1; - bsc.link.udp.reset_timeout = 180; + bsc.pcap_fd = -1; + bsc.udp_reset_timeout = 180; bsc.ping_time = 20; bsc.pong_time = 5; bsc.msc_time = 20; diff --git a/src/main_udt.c b/src/main_udt.c index 40fe616..b8d754e 100644 --- a/src/main_udt.c +++ b/src/main_udt.c @@ -104,7 +104,7 @@ static void sigint() printf("Terminating.\n"); handled = 1; if (bsc.setup) - bsc.link.shutdown(&bsc.link); + bsc.link_set->link->shutdown(bsc.link_set->link); exit(0); out: @@ -150,14 +150,14 @@ static void handle_options(int argc, char **argv) print_help(); exit(0); case 'p': - if (bsc.link.pcap_fd >= 0) - close(bsc.link.pcap_fd); - bsc.link.pcap_fd = open(optarg, O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP| S_IROTH); - if (bsc.link.pcap_fd < 0) { + if (bsc.pcap_fd >= 0) + close(bsc.pcap_fd); + bsc.pcap_fd = open(optarg, O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP| S_IROTH); + if (bsc.pcap_fd < 0) { fprintf(stderr, "Failed to open PCAP file.\n"); exit(0); } - mtp_pcap_write_header(bsc.link.pcap_fd); + mtp_pcap_write_header(bsc.pcap_fd); break; case 'c': config = optarg; @@ -207,8 +207,8 @@ int main(int argc, char **argv) bsc.setup = 0; bsc.msc_address = "127.0.0.1"; - bsc.link.pcap_fd = -1; - bsc.link.udp.reset_timeout = 180; + bsc.pcap_fd = -1; + bsc.udp_reset_timeout = 180; bsc.ping_time = 20; bsc.pong_time = 5; bsc.msc_time = 20; diff --git a/src/msc_conn.c b/src/msc_conn.c index 89b39c7..bc05744 100644 --- a/src/msc_conn.c +++ b/src/msc_conn.c @@ -146,7 +146,7 @@ static int ipaccess_a_fd_cb(struct bsc_fd *bfd) hh = (struct ipaccess_head *) msg->data; ipaccess_rcvmsg_base(msg, bfd); - link = bsc->link.the_link; + link = bsc->link_set; /* initialize the networking. This includes sending a GSM08.08 message */ if (hh->proto == IPAC_PROTO_IPACCESS) { diff --git a/src/vty_interface.c b/src/vty_interface.c index 6ddf549..0cf5929 100644 --- a/src/vty_interface.c +++ b/src/vty_interface.c @@ -72,7 +72,7 @@ static int config_write_cell(struct vty *vty) vty_out(vty, " udp dest ip %s%s", bsc.udp_ip, VTY_NEWLINE); vty_out(vty, " udp dest port %d%s", bsc.udp_port, VTY_NEWLINE); vty_out(vty, " udp src port %d%s", bsc.src_port, VTY_NEWLINE); - vty_out(vty, " udp reset %d%s", bsc.link.udp.reset_timeout, VTY_NEWLINE); + vty_out(vty, " udp reset %d%s", bsc.udp_reset_timeout, VTY_NEWLINE); vty_out(vty, " msc ip %s%s", bsc.msc_address, VTY_NEWLINE); vty_out(vty, " msc ip-dscp %d%s", bsc.msc_ip_dscp, VTY_NEWLINE); vty_out(vty, " msc token %s%s", bsc.token, VTY_NEWLINE); @@ -166,7 +166,7 @@ DEFUN(cfg_udp_reset, cfg_udp_reset_cmd, "udp reset TIMEOUT", "Set the timeout to take the link down") { - bsc.link.udp.reset_timeout = atoi(argv[0]); + bsc.udp_reset_timeout = atoi(argv[0]); return CMD_SUCCESS; } |