aboutsummaryrefslogtreecommitdiffstats
path: root/include/openbsc/sgsn.h
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2017-07-04 23:08:44 +0200
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2017-07-12 23:17:10 +0000
commit29b9206e804e8e5d5f6ea6f9d8c1f8af35332480 (patch)
tree77eed5bde035b276b63f92c0f23e944049e59897 /include/openbsc/sgsn.h
parent9e3c66b1814246f6c06a6f78975f54dfe9e2cf8c (diff)
move openbsc/* to repos root
This is the first step in creating this repository from the legacy openbsc.git. Like all other Osmocom repositories, keep the autoconf and automake files in the repository root. openbsc.git has been the sole exception, which ends now. Change-Id: I9c6f2a448d9cb1cc088cf1cf6918b69d7e69b4e7
Diffstat (limited to 'include/openbsc/sgsn.h')
-rw-r--r--include/openbsc/sgsn.h186
1 files changed, 186 insertions, 0 deletions
diff --git a/include/openbsc/sgsn.h b/include/openbsc/sgsn.h
new file mode 100644
index 000000000..1ede2c930
--- /dev/null
+++ b/include/openbsc/sgsn.h
@@ -0,0 +1,186 @@
+#ifndef _SGSN_H
+#define _SGSN_H
+
+
+#include <osmocom/core/msgb.h>
+#include <osmocom/crypt/gprs_cipher.h>
+#include <osmocom/gprs/gprs_ns.h>
+#include <openbsc/gprs_sgsn.h>
+#include <openbsc/oap_client.h>
+
+#include <ares.h>
+
+struct gprs_gsup_client;
+struct hostent;
+
+enum sgsn_auth_policy {
+ SGSN_AUTH_POLICY_OPEN,
+ SGSN_AUTH_POLICY_CLOSED,
+ SGSN_AUTH_POLICY_ACL_ONLY,
+ SGSN_AUTH_POLICY_REMOTE
+};
+
+
+enum sgsn_rate_ctr_keys {
+ CTR_LLC_DL_BYTES,
+ CTR_LLC_UL_BYTES,
+ CTR_LLC_DL_PACKETS,
+ CTR_LLC_UL_PACKETS,
+ CTR_GPRS_ATTACH_REQUEST,
+ CTR_GPRS_ATTACH_ACKED,
+ CTR_GPRS_ATTACH_REJECTED,
+ CTR_GPRS_DETACH_REQUEST,
+ CTR_GPRS_DETACH_ACKED,
+ CTR_GPRS_ROUTING_AREA_REQUEST,
+ CTR_GPRS_ROUTING_AREA_ACKED,
+ CTR_GPRS_ROUTING_AREA_REJECT,
+ /* PDP single packet counter / GSM 04.08 9.5.1 - 9.5.9 */
+ CTR_PDP_ACTIVATE_REQUEST,
+ CTR_PDP_ACTIVATE_REJECT,
+ CTR_PDP_ACTIVATE_ACCEPT,
+ CTR_PDP_REQUEST_ACTIVATE, /* unused */
+ CTR_PDP_REQUEST_ACTIVATE_REJ, /* unused */
+ CTR_PDP_MODIFY_REQUEST, /* unsued */
+ CTR_PDP_MODIFY_ACCEPT, /* unused */
+ CTR_PDP_DL_DEACTIVATE_REQUEST,
+ CTR_PDP_DL_DEACTIVATE_ACCEPT,
+ CTR_PDP_UL_DEACTIVATE_REQUEST,
+ CTR_PDP_UL_DEACTIVATE_ACCEPT,
+};
+
+struct sgsn_cdr {
+ char *filename;
+ int interval;
+};
+
+struct sgsn_config {
+ /* parsed from config file */
+
+ char *gtp_statedir;
+ struct sockaddr_in gtp_listenaddr;
+
+ /* misc */
+ struct gprs_ns_inst *nsi;
+
+ enum sgsn_auth_policy auth_policy;
+ enum gprs_ciph_algo cipher;
+ struct llist_head imsi_acl;
+
+ struct sockaddr_in gsup_server_addr;
+ int gsup_server_port;
+
+ int require_authentication;
+ int require_update_location;
+
+ /* CDR configuration */
+ struct sgsn_cdr cdr;
+
+ struct {
+ int T3312;
+ int T3322;
+ int T3350;
+ int T3360;
+ int T3370;
+ int T3313;
+ int T3314;
+ int T3316;
+ int T3385;
+ int T3386;
+ int T3395;
+ int T3397;
+ } timers;
+
+ int dynamic_lookup;
+
+ struct oap_client_config oap;
+
+ /* RFC1144 TCP/IP header compression */
+ struct {
+ int active;
+ int passive;
+ int s01;
+ } pcomp_rfc1144;
+
+ /* V.42vis data compression */
+ struct {
+ int active;
+ int passive;
+ int p0;
+ int p1;
+ int p2;
+ } dcomp_v42bis;
+};
+
+struct sgsn_instance {
+ char *config_file;
+ struct sgsn_config cfg;
+ /* File descriptor wrappers for LibGTP */
+ struct osmo_fd gtp_fd0;
+ struct osmo_fd gtp_fd1c;
+ struct osmo_fd gtp_fd1u;
+ /* Timer for libGTP */
+ struct osmo_timer_list gtp_timer;
+ /* GSN instance for libgtp */
+ struct gsn_t *gsn;
+ /* Subscriber */
+ struct gsup_client *gsup_client;
+ /* LLME inactivity timer */
+ struct osmo_timer_list llme_timer;
+
+ /* c-ares event loop integration */
+ struct osmo_timer_list ares_timer;
+ struct llist_head ares_fds;
+ ares_channel ares_channel;
+ struct ares_addr_node *ares_servers;
+
+ struct rate_ctr_group *rate_ctrs;
+};
+
+extern struct sgsn_instance *sgsn;
+
+/* sgsn_vty.c */
+
+int sgsn_vty_init(void);
+int sgsn_parse_config(const char *config_file, struct sgsn_config *cfg);
+
+/* sgsn.c */
+
+/* Main input function for Gb proxy */
+int sgsn_rcvmsg(struct msgb *msg, struct gprs_nsvc *nsvc, uint16_t ns_bvci);
+
+
+struct sgsn_pdp_ctx *sgsn_create_pdp_ctx(struct sgsn_ggsn_ctx *ggsn,
+ struct sgsn_mm_ctx *mmctx,
+ uint16_t nsapi,
+ struct tlv_parsed *tp);
+int sgsn_delete_pdp_ctx(struct sgsn_pdp_ctx *pctx);
+void sgsn_pdp_upd_gtp_u(struct sgsn_pdp_ctx *pdp, void *addr, size_t alen);
+
+/* gprs_sndcp.c */
+
+/* Entry point for the SNSM-ACTIVATE.indication */
+int sndcp_sm_activate_ind(struct gprs_llc_lle *lle, uint8_t nsapi);
+/* Entry point for the SNSM-DEACTIVATE.indication */
+int sndcp_sm_deactivate_ind(struct gprs_llc_lle *lle, uint8_t nsapi);
+/* Called by SNDCP when it has received/re-assembled a N-PDU */
+int sgsn_rx_sndcp_ud_ind(struct gprs_ra_id *ra_id, int32_t tlli, uint8_t nsapi,
+ struct msgb *msg, uint32_t npdu_len, uint8_t *npdu);
+int sndcp_unitdata_req(struct msgb *msg, struct gprs_llc_lle *lle, uint8_t nsapi,
+ void *mmcontext);
+int sndcp_llunitdata_ind(struct msgb *msg, struct gprs_llc_lle *lle,
+ uint8_t *hdr, uint16_t len);
+
+
+/*
+ * CDR related functionality
+ */
+int sgsn_cdr_init(struct sgsn_instance *sgsn);
+
+
+/*
+ * C-ARES related functionality
+ */
+int sgsn_ares_init(struct sgsn_instance *sgsn);
+int sgsn_ares_query(struct sgsn_instance *sgsm, const char *name, ares_host_callback cb, void *data);
+
+#endif