aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/bsc_data.h8
-rw-r--r--src/link_udp.c24
-rw-r--r--src/links.c4
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;