blob: 0ecf42c6c32cd1d8fe547b198e9c183cc0f8bcaf [file] [log] [blame]
Harald Weltee72cf552016-04-28 07:18:49 +02001#pragma once
2
3#include <osmocom/core/linuxlist.h>
4#include <osmocom/core/msgb.h>
5#include <osmocom/abis/ipa.h>
6#include <osmocom/abis/ipaccess.h>
Stefan Sperling93c5b102018-04-10 19:26:14 +02007#include <osmocom/gsm/gsup.h>
Neels Hofmeyr0d28d852019-12-04 01:04:32 +01008#include <osmocom/gsupclient/gsup_peer_id.h>
Neels Hofmeyrb2553eb2019-11-20 02:36:45 +01009#include <osmocom/gsupclient/gsup_req.h>
Harald Weltee72cf552016-04-28 07:18:49 +020010
Stefan Sperlingf83432c2018-05-03 14:26:59 +020011#ifndef OSMO_GSUP_MAX_CALLED_PARTY_BCD_LEN
12#define OSMO_GSUP_MAX_CALLED_PARTY_BCD_LEN 43 /* TS 24.008 10.5.4.7 */
13#endif
14
Harald Weltee72cf552016-04-28 07:18:49 +020015struct osmo_gsup_conn;
16
17/* Expects message in msg->l2h */
18typedef int (*osmo_gsup_read_cb_t)(struct osmo_gsup_conn *conn, struct msgb *msg);
19
20struct osmo_gsup_server {
Harald Welte32acace2018-06-16 17:07:28 +020021 /* private data of the application/user */
22 void *priv;
23
Harald Weltee72cf552016-04-28 07:18:49 +020024 /* list of osmo_gsup_conn */
25 struct llist_head clients;
26
27 struct ipa_server_link *link;
28 osmo_gsup_read_cb_t read_cb;
Harald Weltee687be52016-05-03 18:49:27 +020029 struct llist_head routes;
Harald Weltee72cf552016-04-28 07:18:49 +020030};
31
32
33/* a single connection to a given client (SGSN, MSC) */
34struct osmo_gsup_conn {
35 struct llist_head list;
36
37 struct osmo_gsup_server *server;
38 struct ipa_server_conn *conn;
39 //struct oap_state oap_state;
Harald Weltee687be52016-05-03 18:49:27 +020040 struct tlv_parsed ccm;
Neels Hofmeyrcab2fcd2017-03-15 00:07:43 +010041
42 unsigned int auc_3g_ind; /*!< IND index used for UMTS AKA SQN */
Stefan Sperling93c5b102018-04-10 19:26:14 +020043
44 /* Set when Location Update is received: */
45 bool supports_cs; /* client supports OSMO_GSUP_CN_DOMAIN_CS */
46 bool supports_ps; /* client supports OSMO_GSUP_CN_DOMAIN_PS */
Neels Hofmeyrb2553eb2019-11-20 02:36:45 +010047
48 /* The IPA unit name received on this link. Routes with more unit names serviced by this link may exist in
49 * osmo_gsup_server->routes, but this is the name the immediate peer identified as in the IPA handshake. */
50 struct osmo_ipa_name peer_name;
Harald Weltee72cf552016-04-28 07:18:49 +020051};
52
Neels Hofmeyra7d0f872019-10-30 02:08:28 +010053struct msgb *osmo_gsup_msgb_alloc(const char *label);
Harald Weltee72cf552016-04-28 07:18:49 +020054
Neels Hofmeyrb2553eb2019-11-20 02:36:45 +010055struct osmo_gsup_req *osmo_gsup_conn_rx(struct osmo_gsup_conn *conn, struct msgb *msg);
Harald Weltee72cf552016-04-28 07:18:49 +020056int osmo_gsup_conn_send(struct osmo_gsup_conn *conn, struct msgb *msg);
Neels Hofmeyr6eed3222016-12-11 01:21:49 +010057int osmo_gsup_conn_ccm_get(const struct osmo_gsup_conn *clnt, uint8_t **addr,
58 uint8_t tag);
Harald Weltee72cf552016-04-28 07:18:49 +020059
60struct osmo_gsup_server *osmo_gsup_server_create(void *ctx,
Max9cacb6f2017-02-20 17:22:56 +010061 const char *ip_addr,
62 uint16_t tcp_port,
63 osmo_gsup_read_cb_t read_cb,
Harald Welte32acace2018-06-16 17:07:28 +020064 void *priv);
Harald Weltee72cf552016-04-28 07:18:49 +020065
66void osmo_gsup_server_destroy(struct osmo_gsup_server *gsups);
67
Neels Hofmeyr1b8a1dc2018-05-04 16:46:47 +020068int osmo_gsup_configure_wildcard_apn(struct osmo_gsup_message *gsup,
69 uint8_t *apn_buf, size_t apn_buf_size);
Stefan Sperlingf83432c2018-05-03 14:26:59 +020070int osmo_gsup_create_insert_subscriber_data_msg(struct osmo_gsup_message *gsup, const char *imsi, const char *msisdn,
71 uint8_t *msisdn_enc, size_t msisdn_enc_size,
72 uint8_t *apn_buf, size_t apn_buf_size,
73 enum osmo_gsup_cn_domain cn_domain);