        |
Apuntes sobre el stack del protocolo Dimetra (TETRA)
Overview
El protocolo lo que hace es encapsular los mensajes que se van a mandar por radio en un Servidor de Mensajes TETRA (SDR: Short Data Router) de manera que puedan viajar por una red TCP/IP sobre ethernet.
Motorola es el responsable del protocolo Dimetra SDTS (Short Data Transport Service).
Arquitectura de comunicación
+---------------------------------+
| Tren: |
| Aplicacion de Tectronic o Amper |
+---------------------------------+
^
|
| Protocolo SDS-TL
|
V
+---------------------------------+
| SDR: |
| Servidor de Motorola |
+---------------------------------+
^
|
| Protocolo SDTS-CM
| SDTS-TL
V
+---------------------------------+
| datos1_moviles: |
| Aplicacion de SICO |
+---------------------------------+
Capas sobre TCP/IP
Son las que usamos para comunicarnos entre SICO y el SDR, ya que usamos una red ethernet.
- SDTS-CM: Adaptador a TCP/IP Lo que hace es poner la longitud total del mensaje en bytes, identificador de protocolo (el famoso 0xC0), el ISSI origen y destino, algunos bits poco importantes y por último el número de bits que le siguen: las que corresponden a las capas que "quedan".
- SDTS-TL: Identifica el mensaje, pone las confirmaciones, se encarga de la fiabilidad de extremo a extremo (como el TCP) tipo de PDU (es decir, el tipo de mensaje: de datos, report, ack, etc), flags de confirmación, periodo de validez, un forward address que no usamos, y la parte de DATOS-USUARIO
Capas sobre serie o radio
Son las que usa Tectronic en los trenes, que se comunican directamente por radio.
- SDS-TL Capa única con tan sólo tres tipos de mensaje: SDS-TL-TRANSFER/SDS-TL-REPORT/SDS-TL-ACK.
El contenido del SDTS-TL-TRANSFER es la siguiente
- byte de identificador de protocolo
- tipo de mensaje(si es un transfer, ack, etc) junto con los bits de flags (acuse de recibo, selección de servicio, almacenamiento permitido).
- número de referencia del mensaje
- DATOS-USUARIO
Equivalencias entre SDS-TL y SDTS-CM/TL
- El tipo de protocolo que está en SDS-TL, queda para SDTS en el SDTS-CM
- los bytes 4 y siguientes del SDS-TL son el byte 0 y siguientes de DATOS-USUARIO de SDTS-TL (es decir, lo que va detrás del forward address).
Implementación TETRA de SICO
Las capas están de la siguiente manera:
SDTS-CM: sdts-cm.h
typedef struct sdts_cm_data_ {
unsigned char src[3];
unsigned char dest[3];
unsigned char app_id;
unsigned char sds_type;
unsigned char ref;
unsigned char area;
unsigned short len;
char data;
} sdts_cm_data_t;
typedef struct sdts_cm_register_ sdts_cm_register_t;
typedef struct sdts_cm_report_ sdts_cm_report_t;
typedef struct sdts_cm_message_ {
unsigned char type;
union {
sdts_cm_data_t cm_data;
sdts_cm_register_t cm_register;
sdts_cm_report_t cm_report;
} cm __attribute__ ((packed));
} sdts_cm_message_t;
/* Estructuras para casos especiales O:-) */
typedef struct sdts_cm_register_ {
in_addr_t ip;
unsigned char issi[3];
unsigned char reg_type;
unsigned char status;
} sdts_cm_register_t;
typedef struct sdts_cm_report_ {
unsigned char src[3];
unsigned char dest[3];
unsigned char app_id;
unsigned char ref;
unsigned char status;
} sdts_cm_report_t;
SDTS-TL: sdts-tl.h
typedef struct sdts_tl_data_ {
unsigned char flags;
unsigned char validity;
unsigned char fwd_addr[3];
char data;
} sdts_tl_data_t;
typedef struct sdts_tl_report_message {
unsigned char status;
} sdts_tl_report_t;
typedef struct sdts_tl_message_ {
unsigned char type;
union {
sdts_tl_data_t tl_data;
sdts_tl_report_t tl_report;
} tl __attribute__ ((packed));
} sdts_tl_message_t;
DATOS-USUARIO: app.h
typedef struct app_message_ {
unsigned char unused[2];
unsigned char type;
unsigned char data[133];
} app_message_t;
|