Dirección de Roaming (SoR)
La Dirección de Roaming (SoR) permite que el HPLMN influya en qué VPLMN se conecta un suscriptor en roaming. Cuando un suscriptor intenta registrarse a través de un VPLMN no preferido, el DRA intercepta la S6a Update-Location-Request (ULR) y la rechaza con DIAMETER_ERROR_ROAMING_NOT_ALLOWED (5004). Esto provoca que el UE se desconecte y se vuelva a conectar, idealmente seleccionando un VPLMN preferido.
Si la cobertura preferida no está disponible y el suscriptor regresa al mismo VPLMN no preferido, el módulo permite la solicitud en el siguiente intento.
SoR está definido en 3GPP TS 29.272 Sección 5.2.1.1 y 3GPP TS 23.122.
Cómo Funciona
El módulo opera dentro de la tubería de procesamiento de solicitudes del DRA, ejecutándose antes del Enrutamiento Avanzado. Solo se evalúan las S6a Update-Location-Requests (Application-Id 16777251, Command-Code 316). Todos los demás mensajes de Diameter pasan sin modificaciones.
Secuencia: Primer Intento (Rechazado)
Secuencia: Segundo Intento (Permitido)
Posición en la Tubería
La Dirección de Roaming se ejecuta antes del Enrutamiento Avanzado en la tubería de procesamiento de solicitudes. Si SoR rechaza una solicitud, el Enrutamiento Avanzado nunca se alcanza para ese mensaje.
Seguimiento de Suscriptores
El módulo rastrea cada suscriptor rechazado por IMSI. Cada registro incluye un conteo de rechazos y una marca de tiempo. Los registros se limpian automáticamente después de que expira el TTL configurado.
Cuando un IMSI rastreado ha alcanzado el umbral de max_rejections y envía otra ULR, la solicitud se permite y el registro de seguimiento se elimina.
Si no llega más ULR dentro de la ventana TTL, el registro expira y se elimina durante el siguiente ciclo de limpieza. Una ULR subsiguiente del mismo IMSI se tratará como un primer intento y se rechazará nuevamente.
Configuración
El módulo se configura bajo module_roaming_steering en config/runtime.exs.
module_roaming_steering: %{
# Habilitar o deshabilitar el módulo
enabled: false,
# Número de rechazos antes de permitir el paso
max_rejections: 1,
# Tiempo en segundos antes de que un registro de IMSI rastreado expire
rejection_ttl_seconds: 300,
# Código de Resultado de Diameter devuelto en la respuesta de rechazo
rejection_result_code: 5004,
# Lista de valores de Origin-Realm considerados VPLMNs preferidos
# Las ULR de estos reinos siempre se permiten
preferred_vplmns: [
"epc.mnc001.mcc001.3gppnetwork.org",
"epc.mnc002.mcc001.3gppnetwork.org"
]
}
Parámetros
| Parámetro | Tipo | Requerido | Predeterminado | Descripción |
|---|---|---|---|---|
enabled | Booleano | Sí | false | Habilitar o deshabilitar el módulo de Dirección de Roaming. Cuando false, todas las solicitudes pasan sin modificaciones. |
children | Lista | No | [] | Procesos iniciados bajo el supervisor del DRA cuando está habilitado. Establecer en [DRA.Router.Modules.RoamingSteering] para que el proceso de seguimiento de IMSI se ejecute. |
max_rejections | Entero | No | 1 | Número de veces que se rechaza a un suscriptor antes de permitir el paso. Con el valor predeterminado de 1, la primera ULR se rechaza y la segunda se permite. |
rejection_ttl_seconds | Entero | No | 300 | Tiempo en segundos antes de que un registro de IMSI rastreado expire y se limpie. Si el suscriptor no reintenta dentro de esta ventana, su próximo intento se trata como un primer intento. También controla el intervalo de limpieza. |
rejection_result_code | Entero | No | 5004 | Código de Resultado de Diameter incluido en la respuesta de rechazo. 5004 corresponde a DIAMETER_ERROR_ROAMING_NOT_ALLOWED según 3GPP TS 29.272 Sección 7.4.4. |
preferred_vplmns | Lista | No | [] | Lista de cadenas de Origin-Realm que identifican VPLMNs preferidos. Las ULR que provienen de pares con un Origin-Realm coincidente siempre se permiten sin evaluación. |
Ejemplos de Configuración
Rechazar Una Vez, Luego Permitir
El comportamiento predeterminado. Los suscriptores que llegan a un VPLMN no preferido son rechazados una vez. Si regresan, la ULR se reenvía al HSS.
module_roaming_steering: %{
enabled: true,
max_rejections: 1,
rejection_ttl_seconds: 300,
rejection_result_code: 5004,
preferred_vplmns: [
"epc.mnc001.mcc310.3gppnetwork.org",
"epc.mnc002.mcc310.3gppnetwork.org"
]
}
Cómo funciona: Una ULR que llega de un MME en epc.mnc003.mcc310.3gppnetwork.org (no en la lista preferida) es rechazada con el Código de Resultado 5004. El UE se desconecta e intenta encontrar una red preferida. Si regresa al mismo VPLMN no preferido dentro de 300 segundos, la ULR se reenvía normalmente.
Caso de uso: Dirección de roaming estándar donde el operador tiene acuerdos de roaming preferido con redes asociadas específicas.
Múltiples Rechazos Antes de Permitir
Para escenarios donde el operador quiere que el UE realice múltiples intentos antes de regresar a un VPLMN no preferido.
module_roaming_steering: %{
enabled: true,
max_rejections: 3,
rejection_ttl_seconds: 600,
rejection_result_code: 5004,
preferred_vplmns: [
"epc.mnc001.mcc310.3gppnetwork.org"
]
}
Cómo funciona: El suscriptor es rechazado tres veces antes de ser permitido en el cuarto intento. El TTL se extiende a 600 segundos para acomodar los ciclos de reintento adicionales.
Caso de uso: Áreas urbanas densas donde existe cobertura preferida pero puede requerir múltiples intentos de conexión para adquirirla.
Métricas
Rechazos
Métrica: diameter.roaming_steering.reject.count
Tipo: Contador
Descripción: Incrementado cada vez que una ULR es rechazada por el módulo SoR.
Etiquetas:
origin_realm- Origin-Realm del VPLMN no preferidoresult_code- Código de Resultado de Diameter devuelto en el rechazoimsi- IMSI del suscriptor rechazado
Permitido (VPLMN Preferido)
Métrica: diameter.roaming_steering.allow.count
Tipo: Contador
Descripción: Incrementado cuando una ULR es permitida.
Etiquetas:
origin_realm- Origin-Realm del VPLMN de origenreason- Por qué se permitió la solicitud:preferred_vplmnomax_rejections_reachedimsi- IMSI del suscriptor (presente solo cuando la razón esmax_rejections_reached)
Respuestas de Error
Métrica: diameter.roaming_steering.error.count
Tipo: Contador
Descripción: Incrementado cuando el procesador devuelve un mensaje de respuesta de error debido a un rechazo de SoR.
Etiquetas:
result_code- Código de Resultado de Diameterapplication_id- ID de Aplicación de Diameter (numérico)cmd_code- Código de Comando de Diameter (numérico)application_name- Nombre de aplicación legible por humanoscmd_name- Nombre de comando legible por humanos
Solución de Problemas
Suscriptores Siempre Rechazados (Nunca Permitidos)
Síntomas: Suscriptores en VPLMNs no preferidos son rechazados repetidamente y nunca se conectan con éxito.
Causas posibles:
rejection_ttl_secondses demasiado corto, lo que provoca que el registro de seguimiento expire antes de que el suscriptor reintentemax_rejectionsestá configurado más alto que el número de reintentos que realiza el UE antes de rendirse
Resolución:
- Aumentar
rejection_ttl_secondspara acomodar el tiempo de reintento del UE - Verificar que
max_rejectionsesté configurado a un valor que el UE pueda alcanzar realísticamente dentro de su ciclo de reintento
Suscriptores en VPLMNs Preferidos Siendo Rechazados
Síntomas: ULRs de redes asociadas preferidas están siendo rechazadas con 5004.
Causas posibles:
- El Origin-Realm del VPLMN preferido no está listado en
preferred_vplmns - La cadena de Origin-Realm no coincide exactamente (sensible a mayúsculas y minúsculas)
Resolución:
- Verificar el Origin-Realm del par en los registros del DRA en el momento de la conexión
- Asegurarse de que la cadena exacta de Origin-Realm esté incluida en la lista de
preferred_vplmns
Módulo No Efectivo
Síntomas: ULRs de VPLMNs no preferidos se están reenviando sin rechazo.
Causas posibles:
enabledestá configurado enfalse- El proceso del módulo no está en ejecución (verificar supervisor)
Resolución:
- Verificar
enabled: trueen la configuración - Confirmar que el DRA se reinició después del cambio de configuración
Referencia
Códigos de Diameter
| Código | Nombre | Descripción | Referencia |
|---|---|---|---|
| 5004 | DIAMETER_ERROR_ROAMING_NOT_ALLOWED | Suscriptor no permitido para hacer roaming en este VPLMN | 3GPP TS 29.272 Sección 7.4.4 |
Comandos S6a
| Command-Code | Nombre | Descripción | Referencia |
|---|---|---|---|
| 316 | Update-Location-Request/Answer (ULR/ULA) | Enviado por el MME al HSS durante la conexión para actualizar el nodo de servicio del suscriptor | 3GPP TS 29.272 Sección 7.2.3 |
IDs de Aplicación
| ID | Interfaz | Descripción | Referencia |
|---|---|---|---|
| 16777251 | S6a/S6d | Autenticación y gestión de suscripción de MME/SGSN a HSS | 3GPP TS 29.272 |