diff --git a/lib/include/srslte/upper/gtpu.h b/lib/include/srslte/upper/gtpu.h index 41e9dc2e9..df388ba02 100644 --- a/lib/include/srslte/upper/gtpu.h +++ b/lib/include/srslte/upper/gtpu.h @@ -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; diff --git a/lib/src/upper/gtpu.cc b/lib/src/upper/gtpu.cc index 283270f0b..537b1043c 100644 --- a/lib/src/upper/gtpu.cc +++ b/lib/src/upper/gtpu.cc @@ -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; } diff --git a/srsenb/hdr/upper/gtpu.h b/srsenb/hdr/upper/gtpu.h index 519b831d9..3771ec402 100644 --- a/srsenb/hdr/upper/gtpu.h +++ b/srsenb/hdr/upper/gtpu.h @@ -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 diff --git a/srsenb/src/upper/gtpu.cc b/srsenb/src/upper/gtpu.cc index acce49eb6..d6cc3fc89 100644 --- a/srsenb/src/upper/gtpu.cc +++ b/srsenb/src/upper/gtpu.cc @@ -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"); }