Aller au contenu principal

Référence de Configuration OmniLCS

Toute la configuration est définie dans config/config.exs. Ce document couvre chaque section et paramètre de configuration.

Panneau de Contrôle (UI LiveView)

Le Panneau de Contrôle fournit l'interface de gestion basée sur le web servie sur HTTPS sur le port 443.

config :control_panel,
parent_application: :omnilcs,
parent_application_version: "1.0.0",
parent_application_readable_name: "OmniLCS",
home_page: ControlPanelWeb.ApplicationLive,
use_builtin_pages: [...],
use_additional_pages: [...],
page_order: ["/dashboard", "/location", "/cells", "/diameter",
"/cbc", "/cbc4g", "/application", "/configuration", "/log"],
licensee_name: "Omnitouch"
ParamètreTypeDescription
parent_applicationatomNom de l'application OTP
parent_application_versionstringVersion affichée dans l'UI
parent_application_readable_namestringNom du produit lisible par l'homme
home_pagemoduleModule de la page d'accueil par défaut
use_builtin_pageslistPages intégrées (Application, Configuration, Journal)
use_additional_pageslistPages OmniLCS personnalisées (Tableau de bord, Localisation, Cellules, Diamètre, CBC 2G, CBC 3G, CBC 4G, Alertes CAP)
page_orderlistOrdre des onglets dans la barre de navigation
licensee_namestringNom du licencié affiché dans le pied de page

Point de terminaison du Panneau de Contrôle

config :control_panel, ControlPanelWeb.Endpoint,
server: true,
https: [
port: 443,
keyfile: "priv/cert/omnitouch.pem",
certfile: "priv/cert/omnitouch.crt"
],
secret_key_base: "...",
check_origin: false,
pubsub_server: ControlPanel.PubSub,
live_view: [signing_salt: "LcsLvSlt"]
ParamètreTypePar défautDescription
serverbooleantrueActiver le serveur HTTP
https.portinteger443Port d'écoute HTTPS
https.keyfilestring"priv/cert/omnitouch.pem"Chemin vers la clé privée TLS
https.certfilestring"priv/cert/omnitouch.crt"Chemin vers le certificat TLS
secret_key_basestring--Clé de chiffrement de session Phoenix (générer avec mix phx.gen.secret)
check_originbooleanfalseVérifier les origines WebSocket
pubsub_serveratomControlPanel.PubSubServeur PubSub pour les mises à jour LiveView
live_view.signing_saltstring"LcsLvSlt"Sel de signature du token LiveView

API REST

L'API REST est servie sur HTTPS sur le port 8443 via le framework api_ex.

config :api_ex,
api: %{
port: 8443,
listen_ip: "0.0.0.0",
product_name: "OmniLCS",
title: "API - OmniLCS",
hostname: "localhost",
enable_tls: true,
tls_cert_path: "priv/cert/omnitouch.crt",
tls_key_path: "priv/cert/omnitouch.pem",
routes: [...]
}
ParamètreTypePar défautDescription
portinteger8443Port d'écoute de l'API
listen_ipstring"0.0.0.0"Adresse de liaison de l'API
product_namestring"OmniLCS"Nom du produit dans la spécification OpenAPI
titlestring"API - OmniLCS"Titre de l'API dans Swagger UI
hostnamestring"localhost"Nom d'hôte pour les URL de spécification OpenAPI
enable_tlsbooleantrueActiver HTTPS
tls_cert_pathstring"priv/cert/omnitouch.crt"Chemin vers le certificat TLS
tls_key_pathstring"priv/cert/omnitouch.pem"Chemin vers la clé privée TLS
routeslist--Liste des définitions de routes (chemin, module, actions)

Routes API enregistrées

CheminContrôleurActions
/statusOmniLcs.Api.StatusControllerindex
/locationOmniLcs.Api.LocationControllerindex, create, show
/cellsOmniLcs.Api.CellControllerindex, create, show, update, delete
/capOmniLcs.Api.CapControllerindex, create, show, update

Paramètres E-SMLC

Configuration générale de l'E-SMLC.

config :omnilcs,
esmlc_name: "OmniLCS",
cell_database_path: "priv/cells.json"
ParamètreTypePar défautDescription
esmlc_namestring"OmniLCS"Nom de l'instance E-SMLC (utilisé dans l'API de statut)
cell_database_pathstring"priv/cells.json"Chemin vers le fichier JSON de la base de données des cellules pour importation

CBSP (Diffusion de Cellule 2G)

Configuration pour l'écouteur TCP CBSP. Les BSCs se connectent à la CBC sur ce port.

config :omnilcs, :cbsp,
listen_ip: "0.0.0.0",
listen_port: 48049
ParamètreTypePar défautDescription
listen_ipstring"0.0.0.0"Adresse IP pour l'écouteur TCP CBSP
listen_portinteger48049Port TCP pour les connexions CBSP (port enregistré IANA pour CBSP)

SABP (Diffusion de Cellule 3G)

Configuration pour l'écouteur TCP SABP. Les RNCs se connectent à la CBC sur ce port via l'interface Iu-BC selon 3GPP TS 25.419.

config :omnilcs, :sabp,
listen_ip: "0.0.0.0",
listen_port: 25419
ParamètreTypePar défautDescription
listen_ipstring"0.0.0.0"Adresse IP pour l'écouteur TCP SABP
listen_portinteger25419Port TCP pour les connexions SABP des RNCs

SBC-AP (Diffusion de Cellule 4G)

Configuration pour les connexions SCTP SBC-AP. Selon 3GPP TS 29.168, la CBC initie des associations SCTP à chaque pair MME.

config :omnilcs, :sbcap,
local_ip: "10.5.198.200",
mme_peers: [
%{host: "mme01", ip: "10.179.2.100", port: 29168},
%{host: "mme02", ip: "10.179.2.101", port: 29168}
]
ParamètreTypePar défautDescription
local_ipstring"0.0.0.0"Adresse IP locale pour lier le socket SCTP
mme_peerslist[]Liste des configurations des pairs MME

Configuration des Pairs MME

Chaque entrée dans mme_peers est une carte avec les champs suivants :

ChampTypeRequisPar défautDescription
hoststringNonvaleur de ipNom d'hôte MME lisible par l'homme (pour les journaux et l'UI)
ipstringOui--Adresse IP MME
portintegerNon29168Port SCTP SBC-AP MME (enregistré IANA)

Le transport SBC-AP utilise l'identifiant de protocole de charge utile SCTP (PPID) 24. En cas d'échec de connexion, il réessaie avec un retour exponentiel commençant à 5 secondes jusqu'à un maximum de 60 secondes.

InfluxDB

Les données de position des cellules sont synchronisées périodiquement à partir d'une instance InfluxDB.

config :omnilcs, OmniLcs.InfluxDb,
database: "nokia-monitor",
host: "172.19.3.68",
port: 8086,
auth: [method: :basic, username: "monitor", password: "..."],
http_opts: [recv_timeout: 30_000],
pool: [max_overflow: 10, size: 5]
ParamètreTypePar défautDescription
databasestring--Nom de la base de données InfluxDB
hoststring--Nom d'hôte ou IP du serveur InfluxDB
portinteger8086Port HTTP de l'API InfluxDB
auth.methodatom:basicMéthode d'authentification
auth.usernamestring--Nom d'utilisateur InfluxDB
auth.passwordstring--Mot de passe InfluxDB
http_opts.recv_timeoutinteger30000Délai d'attente de réception HTTP en millisecondes
pool.sizeinteger5Taille du pool de connexions
pool.max_overflowinteger10Nombre maximum de connexions de débordement du pool

La synchronisation des cellules s'exécute automatiquement toutes les 5 minutes avec un délai initial de 10 secondes après le démarrage. Elle peut également être déclenchée manuellement via l'API REST ou le Panneau de Contrôle.

Interface SLs (LCS-AP sur SCTP)

L'interface SLs connecte l'E-SMLC au MME en utilisant LCS-AP sur SCTP selon 3GPP TS 29.171. OmniLCS initie des associations SCTP à chaque pair MME configuré sur le port 9082 avec PPID 29.

config :omnilcs, :sls,
local_ip: "10.5.198.200",
mme_peers: [
%{host: "mme01", ip: "10.179.1.15", port: 9082}
]
ParamètreTypePar défautDescription
local_ipstring"0.0.0.0"Adresse IP locale pour lier le socket SCTP
mme_peerslist[]Liste des configurations des pairs MME

Configuration des Pairs MME (SLs)

Chaque entrée dans mme_peers est une carte avec les champs suivants :

ChampTypeRequisPar défautDescription
hoststringNonvaleur de ipNom d'hôte MME lisible par l'homme (pour les journaux et l'UI)
ipstringOui--Adresse IP MME
portintegerNon9082Port SCTP LCS-AP MME (enregistré IANA pour LCS-AP)

Le transport SLs utilise l'identifiant de protocole de charge utile SCTP (PPID) 29. En cas d'échec de connexion, il réessaie avec un retour exponentiel commençant à 5 secondes jusqu'à un maximum de 60 secondes.

Paramètres de réglage SCTP :

ParamètreValeurDescription
Intervalle de heartbeat10 secondesHeartbeat de l'adresse du pair
Max retransmissions de chemin7Avant de déclarer un échec de chemin
RTO max30 secondesDélai d'attente de retransmission maximum
RTO min1 secondeDélai d'attente de retransmission minimum
Délai SACK200 msDélai d'accusé de réception sélectif

Diameter (Interfaces SLg et Autres)

La configuration Diameter contrôle l'interface SLg entre OmniLCS (agissant en tant que GMLC) et le MME, routée via un DRA. Ceci est séparé de l'interface SLs qui utilise LCS-AP natif sur SCTP.

config :diameter_ex,
diameter: %{
service_name: :omnitouch_esmlc,
listen_ip: "10.5.198.200",
listen_port: 3868,
host: "amanaki",
realm: "epc.mnc380.mcc313.3gppnetwork.org",
product_name: "OmniLCS",
request_timeout: 5000,
peer_selection_algorithm: :random,
allow_undefined_peers_to_connect: true,
log_unauthorized_peer_connection_attempts: true,
control_module: OmniLcs.Control.Diameter,
vendor_id: 10415,
supported_vendor_ids: [5535, 10415],
applications: [...],
peers: [...]
}

Paramètres de Service

ParamètreTypePar défautDescription
service_nameatom:omnitouch_esmlcIdentifiant de service Diameter
listen_ipstring--Adresse IP locale pour le transport Diameter
listen_portinteger3868Port d'écoute Diameter (enregistré IANA)
hoststring--Origin-Host Diameter (sans suffixe de domaine)
realmstring--Origin-Realm Diameter
product_namestring"OmniLCS"Valeur AVP Product-Name Diameter
request_timeoutinteger5000Délai d'attente de la demande en millisecondes
peer_selection_algorithmatom:randomComment sélectionner parmi plusieurs pairs
allow_undefined_peers_to_connectbooleantrueAccepter les connexions des pairs non configurés
log_unauthorized_peer_connection_attemptsbooleantrueJournaliser les tentatives de connexion non autorisées
control_modulemoduleOmniLcs.Control.DiameterModule gérant le routage des demandes Diameter
processor_modulemoduleDiameterEx.ProcessorModule traitant les messages Diameter
vendor_idinteger10415Identifiant du fournisseur 3GPP
supported_vendor_idslist[5535, 10415]Valeurs d'identifiant de fournisseur prises en charge

Applications Diameter

applications: [
%{
application_name: :slg,
application_dictionary: :diameter_gen_3gpp_slg,
vendor_specific_application_ids: [
%{vendor_id: 10415, auth_application_id: 16_777_264, acct_application_id: nil}
]
}
]
ChampTypeDescription
application_nameatomIdentifiant de l'application (:slg pour l'interface GMLC-à-MME)
application_dictionaryatomModule de dictionnaire Diameter Erlang
vendor_specific_application_idslistValeurs AVP Vendor-Specific-Application-Id

L'application SLg utilise l'ID d'application 16777264 avec l'identifiant de fournisseur 3GPP 10415. Notez que l'interface E-SMLC-à-MME (SLs) utilise LCS-AP natif sur SCTP, pas Diameter.

Pairs Diameter

peers: [
%{
host: "omni-nick2-dra01.epc.mnc380.mcc313.3gppnetwork.org",
realm: "epc.mnc380.mcc313.3gppnetwork.org",
ip: "10.179.2.233",
port: 3868,
tls: false,
transport: :diameter_sctp,
initiate_connection: true
}
]
ChampTypePar défautDescription
hoststring--Identité d'hôte Diameter du pair (FQDN)
realmstring--Domaine Diameter du pair
ipstring--Adresse IP du pair
portinteger3868Port Diameter du pair
tlsbooleanfalseActiver TLS pour la connexion au pair
transportatom:diameter_sctpProtocole de transport (:diameter_sctp ou :diameter_tcp)
initiate_connectionbooleantrueIndique si OmniLCS initie la connexion à ce pair

GMLC / Interface Le

Configuration pour le Centre de Localisation Mobile Gateway et l'interface Le vers des clients LCS externes. Voir le Guide des Opérations GMLC & Interface Le pour tous les détails sur les flux de demandes, les sessions différées et la journalisation InfluxDB.

config :omnilcs, :gmlc,
enabled: true,
allow_unknown_clients: false,
authorized_clients: [
%{
name: "psap-01",
type: :emergency_services,
allowed_methods: [:cell, :ecid, :gnss, :otdoa],
rate_limit: 100,
description: "PSAP principal"
}
],
allow_deferred: true,
max_periodic_sessions: 100,
max_triggered_sessions: 50,
default_periodic_poll_interval_ms: 60_000,
default_triggered_poll_interval_ms: 30_000,
influx_logging: true
ParamètreTypePar défautDescription
enabledbooleanfalseActiver le gestionnaire d'interface Le GMLC
allow_unknown_clientsbooleanfalseAccepter les demandes des clients non listés
authorized_clientslist[]Définitions des clients LCS autorisés (voir guide GMLC)
allow_deferredbooleantrueAccepter les demandes de localisation périodiques et déclenchées
max_periodic_sessionsinteger100Nombre maximum de sessions périodiques simultanées
max_triggered_sessionsinteger50Nombre maximum de sessions déclenchées simultanées
default_periodic_poll_interval_msinteger60000Intervalle de correction périodique par défaut (ms)
default_triggered_poll_interval_msinteger30000Intervalle de sondage de géorepérage par défaut (ms)
influx_loggingbooleantrueÉcrire toutes les corrections de localisation GMLC dans InfluxDB

Alertes CAP

Configuration pour l'ingestion et la diffusion des alertes CAP (Common Alerting Protocol). Voir le Guide des Opérations d'Alerte CAP pour tous les détails sur le cycle de vie des alertes, la résolution des polygones et le flux de validation des opérateurs.

config :omnilcs, :cap,
require_approval: true,
plmn: %{mcc: "001", mnc: "01"},
coverage_aware: false,
feeds: []
ParamètreTypePar défautDescription
require_approvalbooleantrueLorsque true, les alertes sont mises en file d'attente pour approbation par l'opérateur. Lorsque false, les alertes sont diffusées automatiquement.
plmnmap%{mcc: "001", mnc: "01"}Identité PLMN (MCC/MNC) pour les messages de diffusion
coverage_awarebooleanfalseUtiliser le rayon de couverture des cellules pour l'intersection des polygones (vs uniquement le point central)
feedslist[]URL des flux CAP Atom à interroger

Configuration des Flux

feeds: [
%{url: "https://alerts.weather.gov/cap/us.php?x=1", poll_interval_seconds: 60}
]
ChampTypeRequisPar défautDescription
urlstringOui--URL du flux CAP Atom
poll_interval_secondsintegerNon60Secondes entre les sondages

Logger

config :logger,
backends: [:console, ControlPanel.Logger]
ParamètreTypeDescription
backendslistBackends du logger. :console écrit sur stdout ; ControlPanel.Logger alimente la page de journal dans l'UI web.

Exemple de Configuration Complète

import Config

config :control_panel,
parent_application: :omnilcs,
parent_application_version: "1.0.0",
parent_application_readable_name: "OmniLCS",
home_page: ControlPanelWeb.ApplicationLive,
use_builtin_pages: [
{ControlPanelWeb.ApplicationLive, "/application", "Ressources"},
{ControlPanelWeb.ConfigurationLive, "/configuration", "Configuration"},
{ControlPanelWeb.LogLive, "/log", "Journal"}
],
use_additional_pages: [
{OmniLcs.Web.DashboardLive, "/dashboard", "Tableau de bord"},
{OmniLcs.Web.LocationLive, "/location", "Localisation"},
{OmniLcs.Web.CellDatabaseLive, "/cells", "Cellules"},
{OmniLcs.Web.DiameterLive, "/diameter", "Diamètre"},
{OmniLcs.Web.CbcLive, "/cbc", "CBC 2G"},
{OmniLcs.Web.Cbc3gLive, "/cbc3g", "CBC 3G"},
{OmniLcs.Web.Cbc4gLive, "/cbc4g", "CBC 4G"},
{OmniLcs.Web.CapAlertsLive, "/cap", "Alertes CAP"}
],
page_order: [
"/dashboard", "/location", "/cells", "/diameter",
"/cbc", "/cbc3g", "/cbc4g", "/cap", "/application", "/configuration", "/log"
],
licensee_name: "Omnitouch"

# API REST
config :api_ex,
api: %{
port: 8443,
listen_ip: "0.0.0.0",
product_name: "OmniLCS",
title: "API - OmniLCS",
hostname: "localhost",
enable_tls: true,
tls_cert_path: "priv/cert/omnitouch.crt",
tls_key_path: "priv/cert/omnitouch.pem",
routes: [
%{path: "/status", module: OmniLcs.Api.StatusController, actions: [:index]},
%{path: "/location", module: OmniLcs.Api.LocationController, actions: [:index, :create, :show]},
%{path: "/cells", module: OmniLcs.Api.CellController, actions: [:index, :create, :show, :update, :delete]},
%{path: "/cap", module: OmniLcs.Api.CapController, actions: [:index, :create, :show, :update]}
]
}

# Point de terminaison HTTPS du Panneau de Contrôle
config :control_panel, ControlPanelWeb.Endpoint,
server: true,
url: [host: "0.0.0.0", path: "/"],
https: [port: 443, keyfile: "priv/cert/omnitouch.pem", certfile: "priv/cert/omnitouch.crt"],
adapter: Bandit.PhoenixAdapter,
secret_key_base: "REPLACE_WITH_64_BYTE_RANDOM_SECRET",
check_origin: false,
pubsub_server: ControlPanel.PubSub,
live_view: [signing_salt: "LcsLvSlt"]

# Logger
config :logger,
backends: [:console, ControlPanel.Logger]

# Paramètres généraux E-SMLC
config :omnilcs,
esmlc_name: "OmniLCS",
cell_database_path: "priv/cells.json"

# CBSP (Diffusion de Cellule 2G) - Les BSCs se connectent à ce port
config :omnilcs, :cbsp,
listen_ip: "0.0.0.0",
listen_port: 48049

# SABP (Diffusion de Cellule 3G) - Les RNCs se connectent à ce port
config :omnilcs, :sabp,
listen_ip: "0.0.0.0",
listen_port: 25419

# SLs (LCS-AP sur SCTP) - L'E-SMLC se connecte à ces MMEs pour le positionnement
config :omnilcs, :sls,
local_ip: "10.5.198.200",
mme_peers: [
%{host: "mme01", ip: "10.179.1.15", port: 9082}
]

# SBC-AP (Diffusion de Cellule 4G) - OmniLCS se connecte à ces MMEs
config :omnilcs, :sbcap,
local_ip: "10.5.198.200",
mme_peers: [
%{host: "mme01", ip: "10.179.2.100", port: 29168},
%{host: "mme02", ip: "10.179.2.101", port: 29168}
]

# Ingération et diffusion des alertes CAP
config :omnilcs, :cap,
require_approval: true,
plmn: %{mcc: "001", mnc: "01"},
coverage_aware: false,
feeds: []

# InfluxDB pour la synchronisation de position des cellules
config :omnilcs, OmniLcs.InfluxDb,
database: "nokia-monitor",
host: "172.19.3.68",
port: 8086,
auth: [method: :basic, username: "monitor", password: "REPLACE_WITH_PASSWORD"],
http_opts: [recv_timeout: 30_000],
pool: [max_overflow: 10, size: 5]

# Diameter (interface SLg vers DRA/MME - rôle GMLC, pas E-SMLC SLs)
config :diameter_ex,
diameter: %{
service_name: :omnitouch_esmlc,
listen_ip: "10.5.198.200",
listen_port: 3868,
host: "amanaki",
realm: "epc.mnc380.mcc313.3gppnetwork.org",
product_name: "OmniLCS",
request_timeout: 5000,
peer_selection_algorithm: :random,
allow_undefined_peers_to_connect: true,
log_unauthorized_peer_connection_attempts: true,
control_module: OmniLcs.Control.Diameter,
processor_module: DiameterEx.Processor,
auth_application_ids: [],
acct_application_ids: [],
vendor_id: 10415,
supported_vendor_ids: [5535, 10415],
applications: [
%{
application_name: :slg,
application_dictionary: :diameter_gen_3gpp_slg,
vendor_specific_application_ids: [
%{vendor_id: 10415, auth_application_id: 16_777_264, acct_application_id: nil}
]
}
],
peers: [
%{
host: "dra01.epc.mnc380.mcc313.3gppnetwork.org",
realm: "epc.mnc380.mcc313.3gppnetwork.org",
ip: "10.179.2.233",
port: 3868,
tls: false,
transport: :diameter_sctp,
initiate_connection: true
}
]
}