Added some more debug infor to error prints. Making sure that packet is not sent from the eNB if there is an error in the GTP-U header packing. Fixed error in checking msg_type.

This commit is contained in:
Pedro Alvarez 2018-10-01 17:34:02 +01:00
parent efffd3dec9
commit e925ef0a42
4 changed files with 16 additions and 27 deletions

View File

@ -89,19 +89,19 @@ inline bool gtpu_supported_flags_check(gtpu_header_t *header, srslte::log *gtpu_
{
//flags
if( (header->flags & GTPU_FLAGS_VERSION_MASK) != GTPU_FLAGS_VERSION_V1 ) {
gtpu_log->error("gtpu_write_header - Unhandled GTP-U Version.\n");
gtpu_log->error("gtpu_header - Unhandled GTP-U Version. Flags: 0x%x\n", header->flags);
return false;
}
if( !(header->flags & GTPU_FLAGS_GTP_PROTOCOL) ) {
gtpu_log->error("gtpu_write_header - Unhandled Protocol Type.\n");
gtpu_log->error("gtpu_header - Unhandled Protocol Type. Flags: 0x%x\n\n", header->flags);
return false;
}
if( !(header->flags & GTPU_FLAGS_EXTENDED_HDR) ) {
gtpu_log->error("gtpu_write_header - Unhandled Header Extensions.\n");
if( header->flags & GTPU_FLAGS_EXTENDED_HDR ) {
gtpu_log->error("gtpu_header - Unhandled Header Extensions. Flags: 0x%x\n\n", header->flags);
return false;
}
if( !(header->flags & GTPU_FLAGS_PACKET_NUM) ) {
gtpu_log->error("gtpu_write_header - Unhandled Packet Number.\n");
if( header->flags & GTPU_FLAGS_PACKET_NUM ) {
gtpu_log->error("gtpu_header - Unhandled Packet Number. Flags: 0x%x\n\n", header->flags);
return false;
}
return true;
@ -110,8 +110,8 @@ inline bool gtpu_supported_flags_check(gtpu_header_t *header, srslte::log *gtpu_
inline bool gtpu_supported_msg_type_check(gtpu_header_t *header, srslte::log *gtpu_log)
{
//msg_tpye
if(header->message_type != GTPU_MSG_DATA_PDU || header->message_type != GTPU_MSG_ECHO_REQUEST) {
gtpu_log->error("gtpu_write_header - Unhandled message type: 0x%x\n", header->message_type);
if( header->message_type != GTPU_MSG_DATA_PDU && header->message_type != GTPU_MSG_ECHO_REQUEST ) {
gtpu_log->error("gtpu_header - Unhandled message type: 0x%x\n", header->message_type);
return false;
}
return true;

View File

@ -39,11 +39,13 @@ bool gtpu_write_header(gtpu_header_t *header, srslte::byte_buffer_t *pdu, srslte
{
//flags
if(!gtpu_supported_flags_check(header,gtpu_log)){
gtpu_log->error("gtpu_write_header - Unhandled GTP-U Flags. Flags: 0x%x\n", header->flags);
return false;
}
//msg type
if(!gtpu_supported_msg_type_check(header,gtpu_log)){
gtpu_log->error("gtpu_write_header - Unhandled GTP-U Message Type. Message Type: 0x%x\n", header->message_type);
return false;
}
@ -114,11 +116,13 @@ bool gtpu_read_header(srslte::byte_buffer_t *pdu, gtpu_header_t *header, srslte:
//flags
if(!gtpu_supported_flags_check(header,gtpu_log)){
gtpu_log->error("gtpu_read_header - Unhandled GTP-U Flags. Flags: 0x%x\n", header->flags);
return false;
}
//message_type
if(!gtpu_supported_msg_type_check(header,gtpu_log)){
gtpu_log->error("gtpu_read_header - Unhandled GTP-U Message Type. Flags: 0x%x\n", header->message_type);
return false;
}

View File

@ -40,24 +40,6 @@
namespace srsenb {
/****************************************************************************
* GTPU Header
* Ref: 3GPP TS 29.281 v10.1.0 Section 5
*
* | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
*
* 1 | Version |PT | * | E | S |PN |
* 2 | Message Type |
* 3 | Length (1st Octet) |
* 4 | Length (2nd Octet) |
* 5 | TEID (1st Octet) |
* 6 | TEID (2nd Octet) |
* 7 | TEID (3rd Octet) |
* 8 | TEID (4th Octet) |
***************************************************************************/
#define GTPU_HEADER_LEN 8
class gtpu
:public gtpu_interface_rrc
,public gtpu_interface_pdcp

View File

@ -132,7 +132,10 @@ void gtpu::write_pdu(uint16_t rnti, uint32_t lcid, srslte::byte_buffer_t* pdu)
servaddr.sin_addr.s_addr = htonl(rnti_bearers[rnti].spgw_addrs[lcid]);
servaddr.sin_port = htons(GTPU_PORT);
gtpu_write_header(&header, pdu, gtpu_log);
if(!gtpu_write_header(&header, pdu, gtpu_log)){
gtpu_log->error("Error writing GTP-U Header. Flags 0x%x, Message Type 0x%x\n", header.flags, header.message_type);
return;
}
if (sendto(fd, pdu->msg, pdu->N_bytes, MSG_EOR, (struct sockaddr*)&servaddr, sizeof(struct sockaddr_in))<0) {
perror("sendto");
}