mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-hlr.git
synced 2025-11-02 13:13:29 +00:00
Add mslookup client to find remote home HLRs of unknown IMSIs, and proxy/forward GSUP for those to the right remote HLR instances. Add remote_hlr.c to manage one GSUP client per remote HLR GSUP address. Add proxy.c to keep state about remotely handled IMSIs (remote GSUP address, MSISDN, and probably more in future patches). The mslookup_server that determines whether a given MSISDN is attached locally now also needs to look in the proxy record: it is always the osmo-hlr immediately peering for the MSC that should respond to mslookup service address queries like SIP and SMPP. (Only gsup.hlr service is always answered by the home HLR.) Add dgsm.c to set up an mdns mslookup client, ask for IMSI homes, and to decide which GSUP is handled locally and which needs to go to a remote HLR. Add full VTY config and VTY tests. For a detailed overview of the D-GSM and mslookup related files, please see the elaborate comment at the top of mslookup.c (already added in an earlier patch). Change-Id: I2fe453553c90e6ee527ed13a13089900efd488aa
73 lines
3.1 KiB
C
73 lines
3.1 KiB
C
/* Copyright 2019 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
|
|
*
|
|
* 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 <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <osmocom/gsupclient/cni_peer_id.h>
|
|
#include <osmocom/mslookup/mslookup.h>
|
|
|
|
struct osmo_mslookup_query;
|
|
struct osmo_mslookup_result;
|
|
|
|
/*! mslookup service name used for roaming/proxying between osmo-hlr instances. */
|
|
#define OSMO_MSLOOKUP_SERVICE_HLR_GSUP "gsup.hlr"
|
|
|
|
/*! What addresses to return to mslookup queries when a subscriber is attached at the local site.
|
|
* Mapping of service name to IP address and port. This corresponds to the VTY config for
|
|
* 'mslookup' / 'server' [/ 'msc MSC-1-2-3'] / 'service sip.voice at 1.2.3.4 1234'.
|
|
*/
|
|
struct mslookup_service_host {
|
|
struct llist_head entry;
|
|
char service[OSMO_MSLOOKUP_SERVICE_MAXLEN+1];
|
|
struct osmo_sockaddr_str host_v4;
|
|
struct osmo_sockaddr_str host_v6;
|
|
};
|
|
|
|
/*! Sets of mslookup_service_host per connected MSC.
|
|
* When there are more than one MSC connected to this osmo-hlr, this allows keeping separate sets of service addresses
|
|
* for each MSC. The entry with mslookup_server_msc_wildcard as MSC name is used for all MSCs (if no match for that
|
|
* particular MSC is found). This corresponds to the VTY config for
|
|
* 'mslookup' / 'server' / 'msc MSC-1-2-3'.
|
|
*/
|
|
struct mslookup_server_msc_cfg {
|
|
struct llist_head entry;
|
|
struct osmo_ipa_name name;
|
|
struct llist_head service_hosts;
|
|
};
|
|
|
|
struct mslookup_service_host *mslookup_server_service_get(const struct osmo_ipa_name *msc_name, const char *service);
|
|
|
|
struct mslookup_service_host *mslookup_server_msc_service_get(struct mslookup_server_msc_cfg *msc, const char *service,
|
|
bool create);
|
|
int mslookup_server_msc_service_set(struct mslookup_server_msc_cfg *msc, const char *service,
|
|
const struct osmo_sockaddr_str *addr);
|
|
int mslookup_server_msc_service_del(struct mslookup_server_msc_cfg *msc, const char *service,
|
|
const struct osmo_sockaddr_str *addr);
|
|
|
|
extern const struct osmo_ipa_name mslookup_server_msc_wildcard;
|
|
struct mslookup_server_msc_cfg *mslookup_server_msc_get(const struct osmo_ipa_name *msc_name, bool create);
|
|
|
|
const struct mslookup_service_host *mslookup_server_get_local_gsup_addr();
|
|
void mslookup_server_rx(const struct osmo_mslookup_query *query,
|
|
struct osmo_mslookup_result *result);
|
|
|
|
bool subscriber_has_done_lu_here(const struct osmo_mslookup_query *query,
|
|
uint32_t *lu_age_p, struct osmo_ipa_name *local_msc_name,
|
|
char *ret_imsi, size_t ret_imsi_len);
|