blob: b31b5d0ad5ff587dc4fed5908e1f5250f3e132c6 [file] [log] [blame]
Maxd4bebbd2017-03-02 12:00:19 +01001/* OsmoHLR generic header */
2
3/* (C) 2017 sysmocom s.f.m.c. GmbH <info@sysmocom.de>
4 * All Rights Reserved
5 *
6 * Author: Max Suraev <msuraev@sysmocom.de>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU Affero General Public License as published by
10 * the Free Software Foundation; either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU Affero General Public License for more details.
17 *
18 * You should have received a copy of the GNU Affero General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 *
21 */
22
23#pragma once
24
25#include <stdbool.h>
Harald Welte4956ae12018-06-15 22:04:28 +020026#include <osmocom/core/linuxlist.h>
Neels Hofmeyrf13a8bc2019-11-20 02:36:45 +010027#include <osmocom/gsm/ipa.h>
28#include <osmocom/core/tdef.h>
Neels Hofmeyr3ad481a2019-11-20 03:35:37 +010029#include <osmocom/core/sockaddr_str.h>
Harald Welte4956ae12018-06-15 22:04:28 +020030
Neels Hofmeyr62d916f2019-11-20 03:35:37 +010031#include <osmocom/hlr/dgsm.h>
32
Neels Hofmeyr5857c592019-04-02 04:24:49 +020033#define HLR_DEFAULT_DB_FILE_PATH "hlr.db"
34
Harald Welte4956ae12018-06-15 22:04:28 +020035struct hlr_euse;
Neels Hofmeyrf13a8bc2019-11-20 02:36:45 +010036struct osmo_gsup_conn;
37enum osmo_gsup_message_type;
38
39extern struct osmo_tdef g_hlr_tdefs[];
Maxd4bebbd2017-03-02 12:00:19 +010040
41struct hlr {
42 /* GSUP server pointer */
43 struct osmo_gsup_server *gs;
44
45 /* DB context */
Neels Hofmeyr5857c592019-04-02 04:24:49 +020046 char *db_file_path;
Maxd4bebbd2017-03-02 12:00:19 +010047 struct db_context *dbc;
Max372868b2017-03-02 12:12:00 +010048
49 /* Control Interface */
50 struct ctrl_handle *ctrl;
51 const char *ctrl_bind_addr;
Pau Espin Pedrolce9bc402017-05-31 13:19:22 +020052
53 /* Local bind addr */
54 char *gsup_bind_addr;
Neels Hofmeyrf13a8bc2019-11-20 02:36:45 +010055 struct ipaccess_unit gsup_unit_name;
Harald Welte4956ae12018-06-15 22:04:28 +020056
57 struct llist_head euse_list;
58 struct hlr_euse *euse_default;
Harald Weltedab544e2018-07-29 16:14:48 +020059 struct llist_head iuse_list;
60
Vadim Yanitskiyd157a562018-12-01 00:03:39 +070061 /* NCSS (call independent) session guard timeout value */
62 int ncss_guard_timeout;
63
Harald Weltedab544e2018-07-29 16:14:48 +020064 struct llist_head ussd_routes;
Harald Weltebb779392018-06-16 20:21:10 +020065
66 struct llist_head ss_sessions;
Oliver Smith851814a2019-01-11 15:30:21 +010067
68 bool store_imei;
Oliver Smithc7f17872019-03-04 15:10:44 +010069
70 bool subscr_create_on_demand;
71 /* Bitmask of DB_SUBSCR_FLAG_* */
72 uint8_t subscr_create_on_demand_flags;
73 unsigned int subscr_create_on_demand_rand_msisdn_len;
Neels Hofmeyr6aa871d2019-11-20 03:35:37 +010074
75 struct {
Neels Hofmeyr3ad481a2019-11-20 03:35:37 +010076 bool allow_startup;
Neels Hofmeyr6aa871d2019-11-20 03:35:37 +010077 struct {
Neels Hofmeyr3ad481a2019-11-20 03:35:37 +010078 /* Whether the mslookup server should be active in general (all lookup methods) */
79 bool enable;
Neels Hofmeyr6aa871d2019-11-20 03:35:37 +010080 uint32_t local_attach_max_age;
81 struct llist_head local_site_services;
Neels Hofmeyr3ad481a2019-11-20 03:35:37 +010082 struct {
83 /* Whether the mDNS method of the mslookup server should be active. */
84 bool enable;
85 /* The mDNS bind address and domain suffix as set by the VTY, not necessarily in use. */
86 struct osmo_sockaddr_str bind_addr;
87 char *domain_suffix;
88 struct osmo_mslookup_server_mdns *running;
89 } mdns;
Neels Hofmeyr6aa871d2019-11-20 03:35:37 +010090 } server;
Neels Hofmeyr62d916f2019-11-20 03:35:37 +010091
92 /* The mslookup client in osmo-hlr is used to find out which remote HLRs service a locally unknown IMSI.
93 * (It may also be used to resolve recipients for SMS-over-GSUP in the future.) */
94 struct {
95 /* Whether to proxy/forward to remote HLRs */
96 bool enable;
97
98 /* If this is set, all GSUP for unknown IMSIs is forwarded directly to this GSUP address,
99 * unconditionally. */
100 struct osmo_sockaddr_str gsup_gateway_proxy;
101
102 /* mslookup client request handling */
103 unsigned int result_timeout_milliseconds;
104
105 struct osmo_mslookup_client *client;
106 struct {
107 /* Whether to use mDNS for IMSI MS Lookup */
108 bool enable;
109 struct osmo_sockaddr_str query_addr;
110 char *domain_suffix;
111 struct osmo_mslookup_client_method *running;
112 } mdns;
113 } client;
Neels Hofmeyr6aa871d2019-11-20 03:35:37 +0100114 } mslookup;
Neels Hofmeyrfd08e4d2019-12-16 17:15:40 +0100115
116 struct {
117 /* FIXME actually use branch fixeria/sms for SMSC routing. completely unimplemented */
118 struct osmo_gsup_peer_id smsc;
119
120 /* If no SMSC is present / responsible, try punching the SMS through directly when this is true. */
121 bool try_direct_delivery;
122 } sms_over_gsup;
Maxd4bebbd2017-03-02 12:00:19 +0100123};
Stefan Sperlingf1622522018-04-09 11:39:16 +0200124
Harald Welted5807b82018-07-29 12:27:41 +0200125extern struct hlr *g_hlr;
126
Stefan Sperlingf1622522018-04-09 11:39:16 +0200127struct hlr_subscriber;
128
129void osmo_hlr_subscriber_update_notify(struct hlr_subscriber *subscr);
Neels Hofmeyrf13a8bc2019-11-20 02:36:45 +0100130int hlr_subscr_nam(struct hlr *hlr, struct hlr_subscriber *subscr, bool nam_val, bool is_ps);