Saltar al contenido principal

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ámetroTipoRequeridoPredeterminadoDescripción
enabledBooleanofalseHabilitar o deshabilitar el módulo de Dirección de Roaming. Cuando false, todas las solicitudes pasan sin modificaciones.
childrenListaNo[]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_rejectionsEnteroNo1Nú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_secondsEnteroNo300Tiempo 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_codeEnteroNo5004Có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_vplmnsListaNo[]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 preferido
  • result_code - Código de Resultado de Diameter devuelto en el rechazo
  • imsi - 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 origen
  • reason - Por qué se permitió la solicitud: preferred_vplmn o max_rejections_reached
  • imsi - IMSI del suscriptor (presente solo cuando la razón es max_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 Diameter
  • application_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 humanos
  • cmd_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_seconds es demasiado corto, lo que provoca que el registro de seguimiento expire antes de que el suscriptor reintente
  • max_rejections está configurado más alto que el número de reintentos que realiza el UE antes de rendirse

Resolución:

  1. Aumentar rejection_ttl_seconds para acomodar el tiempo de reintento del UE
  2. Verificar que max_rejections esté 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:

  1. Verificar el Origin-Realm del par en los registros del DRA en el momento de la conexión
  2. 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:

  • enabled está configurado en false
  • El proceso del módulo no está en ejecución (verificar supervisor)

Resolución:

  1. Verificar enabled: true en la configuración
  2. Confirmar que el DRA se reinició después del cambio de configuración

Referencia

Códigos de Diameter

CódigoNombreDescripciónReferencia
5004DIAMETER_ERROR_ROAMING_NOT_ALLOWEDSuscriptor no permitido para hacer roaming en este VPLMN3GPP TS 29.272 Sección 7.4.4

Comandos S6a

Command-CodeNombreDescripciónReferencia
316Update-Location-Request/Answer (ULR/ULA)Enviado por el MME al HSS durante la conexión para actualizar el nodo de servicio del suscriptor3GPP TS 29.272 Sección 7.2.3

IDs de Aplicación

IDInterfazDescripciónReferencia
16777251S6a/S6dAutenticación y gestión de suscripción de MME/SGSN a HSS3GPP TS 29.272