diff options
-rw-r--r-- | include/bsc_data.h | 8 | ||||
-rw-r--r-- | src/link_udp.c | 24 | ||||
-rw-r--r-- | src/links.c | 4 |
3 files changed, 18 insertions, 18 deletions
diff --git a/include/bsc_data.h b/include/bsc_data.h index 8b72785..698a33f 100644 --- a/include/bsc_data.h +++ b/include/bsc_data.h @@ -42,7 +42,6 @@ struct snmp_mtp_session; struct mtp_udp_data { struct write_queue write_queue; - struct snmp_mtp_session *session; struct timer_list snmp_poll; struct llist_head links; @@ -61,6 +60,9 @@ struct mtp_udp_link { struct mtp_udp_data *data; struct llist_head entry; + + /* snmp for controlling the link */ + struct snmp_mtp_session *session; }; enum { @@ -150,8 +152,8 @@ void update_con_state(struct mtp_link_set *link, int rc, struct sccp_parse_resul unsigned int sls_for_src_ref(struct sccp_source_reference *ref); /* udp init */ -int link_global_init(struct mtp_udp_data *data, char *dest_ip, int src_port); -int link_udp_init(struct mtp_udp_link *data, const char *dest_ip, int port); +int link_global_init(struct mtp_udp_data *data, int src_port); +int link_udp_init(struct mtp_udp_link *data, char *dest_ip, int port); int link_init(struct bsc_data *bsc); int link_shutdown_all(struct mtp_link_set *); int link_reset_all(struct mtp_link_set *); diff --git a/src/link_udp.c b/src/link_udp.c index 2dfc34b..c0df050 100644 --- a/src/link_udp.c +++ b/src/link_udp.c @@ -159,7 +159,7 @@ static void do_start(void *_data) { struct mtp_udp_link *link = (struct mtp_udp_link *) _data; - snmp_mtp_activate(link->data->session, link->link_index); + snmp_mtp_activate(link->session, link->link_index); } static int udp_link_reset(struct mtp_link *link) @@ -168,7 +168,7 @@ static int udp_link_reset(struct mtp_link *link) ulnk = (struct mtp_udp_link *) link; - snmp_mtp_deactivate(ulnk->data->session, ulnk->link_index); + snmp_mtp_deactivate(ulnk->session, ulnk->link_index); return 0; } @@ -209,8 +209,14 @@ static int udp_link_start(struct mtp_link *link) return 0; } -int link_udp_init(struct mtp_udp_link *link, const char *remote, int port) +int link_udp_init(struct mtp_udp_link *link, char *remote, int port) { + /* setup SNMP first, it is blocking */ + link->session = snmp_mtp_session_create(remote); + if (!link->session) + return -1; + link->session->data = link; + /* function table */ link->base.shutdown = udp_link_shutdown; link->base.clear_queue = udp_link_dummy; @@ -237,18 +243,12 @@ static void snmp_poll(void *_data) bsc_schedule_timer(&data->snmp_poll, 0, 5000); } -int link_global_init(struct mtp_udp_data *data, char *udp_ip, int src_port) +int link_global_init(struct mtp_udp_data *data, int src_port) { struct sockaddr_in addr; int fd; int on; - /* setup SNMP first, it is blocking */ - data->session = snmp_mtp_session_create(udp_ip); - if (!data->session) - return -1; - data->session->data = data; - INIT_LLIST_HEAD(&data->links); write_queue_init(&data->write_queue, 100); @@ -295,12 +295,10 @@ int link_global_init(struct mtp_udp_data *data, char *udp_ip, int src_port) void snmp_mtp_callback(struct snmp_mtp_session *session, int area, int res, int link_id) { - struct mtp_udp_data *data; struct mtp_udp_link *ulink; struct mtp_link *link; - data = session->data; - ulink = find_link(data, link_id); + ulink = session->data; if (!ulink) return LOGP(DINP, LOGL_ERROR, "Failed to find link %d\n", link_id); diff --git a/src/links.c b/src/links.c index 086b95c..3977daf 100644 --- a/src/links.c +++ b/src/links.c @@ -116,7 +116,7 @@ int link_init(struct bsc_data *bsc) LOGP(DINP, LOGL_NOTICE, "Using UDP MTP mode.\n"); - if (link_global_init(&bsc->udp_data, bsc->udp_ip, bsc->src_port) != 0) + if (link_global_init(&bsc->udp_data, bsc->src_port) != 0) return -1; @@ -140,7 +140,7 @@ 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(lnk->data->session, + snmp_mtp_deactivate(lnk->session, lnk->link_index); bsc->start_timer.cb = start_rest; bsc->start_timer.data = &bsc; |