/* Everything related to the BSC connection */ /* * (C) 2010-2011 by Holger Hans Peter Freyther * (C) 2010-2011 by On-Waves * All Rights Reserved * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ #ifndef BSC_DATA_H #define BSC_DATA_H #include "mtp_data.h" #include #include #include #include #include #include struct bsc_data; struct snmp_mtp_session; struct msc_connection; struct mtp_m2ua_transport; struct mtp_udp_data { struct write_queue write_queue; struct timer_list snmp_poll; struct llist_head links; }; struct mtp_udp_link { /* subclass */ struct mtp_link *base; /* UDP specific stuff */ struct bsc_data *bsc; int link_index; int reset_timeout; struct sockaddr_in remote; struct mtp_udp_data *data; struct llist_head entry; /* snmp for controlling the link */ struct snmp_mtp_session *session; }; struct bsc_data { int pcap_fd; int udp_reset_timeout; /* udp code */ struct mtp_udp_data udp_data; int dpc; int opc; int sccp_opc; int isup_opc; int src_port; int udp_port; char *udp_ip; int udp_nr_links; int once; /* the network header to use */ int ni_ni; int ni_spare; /* isup handling */ int isup_pass; /* MTP Links */ struct llist_head linksets; int num_linksets; /* inject */ int allow_inject; struct bsc_fd inject_fd; /* m2ua code */ struct sctp_m2ua_transport *m2ua_trans; /* MSCs */ struct llist_head mscs; int num_mscs; /* application */ struct llist_head apps; int num_apps; }; /* bsc related functions */ void release_bsc_resources(struct msc_connection *fw); void mtp_linkset_down(struct mtp_link_set *); void mtp_linkset_up(struct mtp_link_set *); /* connection tracking and action */ /* udp init */ 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); struct mtp_link_set *link_init(struct bsc_data *bsc); int link_shutdown_all(struct mtp_link_set *); int link_reset_all(struct mtp_link_set *); int link_clear_all(struct mtp_link_set *); /* pcap */ enum { NET_IN, NET_OUT, }; int mtp_handle_pcap(struct mtp_link *, int dir, const uint8_t *data, int length); struct bsc_data *bsc_data_create(); #endif