You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ADN-DMR-Peer-Server/docs/es/server/user-guide/odtp.md

3.7 KiB

Pasarela ODTP (apps de móvil y terminales IP)

Qué es

ODTP (Open DMR Terminal Protocol, el protocolo Rewind de BrandMeister) permite que apps de móvil y terminales IP (Z3DMR, radios PoC…) usen un master ADN con el DMR ID y la contraseña de su usuario, sin hotspot.

La pasarela es un proceso aparte del mismo binario, adn-server.py --odtp. Cada terminal que inicia sesión es un peer HBP del MASTER, desde su propio socket UDP, igual que un hotspot:

Terminal Peer HBP
Entra con un DMR ID de 7 cifras ID de peer = DMR ID × 100 + PEER_SUFFIX (98; una segunda sesión del mismo ID usa 97)
Entra con un número de 9 cifras Ese número tal cual; habla como DMR ID = número ÷ 100 (el ID de un hotspot con su sufijo de 2 cifras)
Contraseña Se reenvía: el salt del MASTER es el reto del terminal y su respuesta es el RPTK. La pasarela no ve ni guarda contraseñas; decide el MASTER (autoservicio o passphrase)
TG a los que se suscribe OPTIONS TERMINAL=1;TS2=<tgs>; — los cambios en 0,1 s van en un solo RPTO
Voz DMRD en TS2; el origen es siempre el DMR ID de la sesión, nunca el que pone el terminal en la cabecera. Una llamada sin terminador acaba 1 s después de su última trama, en los dos sentidos
Mensajes de texto, posición Datos en paquetes DMR (ETSI estándar / MOTOROLA TMS / Hytera, NMEA a LOCATION_DST)

Una contraseña incorrecta no recibe respuesta, como en BrandMeister, y nunca tira una sesión ya conectada con ese ID.

TERMINAL=1

TERMINAL=1 en las OPTIONS de un peer indica un terminal: no tiene lista de grupos de RX, así que el MASTER no le añade sus TS1_STATIC / TS2_STATIC — el terminal oye solo aquello a lo que se suscribió. Todo lo demás (enrutado, ACL, autoservicio, monitor) lo trata como cualquier peer; el monitor los lista en Terminales ODTP.

Configuración

Copia adn-odtp.example.yaml → adn-odtp.yaml (no se versiona):

Clave (ODTP:) Por defecto Para qué
LISTEN_IP / LISTEN_PORT 0.0.0.0 / 54006 Puerto UDP al que se conectan las apps
MASTER_IP / MASTER_PORT 127.0.0.1 / 62031 MASTER donde entran los terminales (el puerto del proxy de hotspots si se quieren contraseñas de autoservicio)
PEER_SUFFIX 98 0–99, sufijo del ID de peer
SUBSCRIBERS_FILE — subscriber_ids.json de RadioID para el indicativo del RPTC (se busca, no se carga)
MAX_SESSIONS 500 Sesiones en total. El MAX_PEERS del MASTER también las limita, compartido con sus hotspots: si está lleno, la app no recibe respuesta y cada reintento gasta un login
MAX_SESSIONS_PER_IP 4 Sesiones desde una IP
MAX_LOGINS_PER_MINUTE 60 Sesiones nuevas (= logins al MASTER) por minuto
SMS_FORMAT standard Texto a una radio que no ha escrito antes: standard, tms o hytera (la respuesta va en el formato que usó la radio)
SMS_PREAMBLES 2 Preámbulos CSBK antes de un texto
LOCATION_DST 0 ID privado que recibe la posición GPS de la app como datos NMEA (p. ej. un plugin D-APRS); 0 = no se envía

Un terminal nuevo por encima de cualquier tope se ignora; los rechazos se registran una vez por minuto con sus contadores. Un datagrama que no es un keep-alive de Open DMR Terminal no abre sesión ni gasta login, ni tampoco un ID que no es un DMR ID de 24 bits. La sección se valida al arrancar. Los cambios requieren reiniciar (SIGHUP se ignora; SIGUSR2 reabre los logs).

Arranque

python adn-server.py --odtp -c adn-odtp.yaml

Producción: examples/systemd/adn-odtp.service. Abre LISTEN_PORT (UDP) en el cortafuegos. Al parar, cada terminal recibe un CLOSE y cada peer un RPTCL.

Powered by TurnKey Linux.