Added 5G NAS PCAP support

master
David Rupprecht 3 years ago committed by David Rupprecht
parent 78acf81cf0
commit 85d7a851fb

@ -330,7 +330,7 @@ int main(int argc, char** argv)
parse_args(&prog_args, argc, argv); parse_args(&prog_args, argc, argv);
#if HAVE_PCAP #if HAVE_PCAP
FILE* pcap_file = LTE_PCAP_Open(MAC_LTE_DLT, "/tmp/npdsch.pcap"); FILE* pcap_file = DLT_PCAP_Open(MAC_LTE_DLT, "/tmp/npdsch.pcap");
#endif #endif
sigset_t sigset; sigset_t sigset;
@ -856,7 +856,7 @@ int main(int argc, char** argv)
#if HAVE_PCAP #if HAVE_PCAP
printf("Saving PCAP file\n"); printf("Saving PCAP file\n");
LTE_PCAP_Close(pcap_file); DLT_PCAP_Close(pcap_file);
#endif #endif
#ifndef DISABLE_RF #ifndef DISABLE_RF

@ -223,7 +223,7 @@ int main(int argc, char** argv)
parse_args(&prog_args, argc, argv); parse_args(&prog_args, argc, argv);
FILE* pcap_file = LTE_PCAP_Open(MAC_LTE_DLT, PCAP_FILENAME); FILE* pcap_file = DLT_PCAP_Open(MAC_LTE_DLT, PCAP_FILENAME);
srsran_use_standard_symbol_size(prog_args.use_standard_lte_rates); srsran_use_standard_symbol_size(prog_args.use_standard_lte_rates);
@ -537,7 +537,7 @@ clean_exit:
if (pcap_file != NULL) { if (pcap_file != NULL) {
printf("Saving PCAP file to %s\n", PCAP_FILENAME); printf("Saving PCAP file to %s\n", PCAP_FILENAME);
LTE_PCAP_Close(pcap_file); DLT_PCAP_Close(pcap_file);
} }
#ifdef ENABLE_GUI #ifdef ENABLE_GUI

@ -13,6 +13,7 @@
#ifndef SRSRAN_NAS_PCAP_H #ifndef SRSRAN_NAS_PCAP_H
#define SRSRAN_NAS_PCAP_H #define SRSRAN_NAS_PCAP_H
#include "srsran/common/common.h"
#include "srsran/common/pcap.h" #include "srsran/common/pcap.h"
#include <string> #include <string>
@ -28,7 +29,7 @@ public:
pcap_file = NULL; pcap_file = NULL;
} }
void enable(); void enable();
uint32_t open(std::string filename_, uint32_t ue_id = 0); uint32_t open(std::string filename_, uint32_t ue_id = 0, srsran_rat_t rat_type = srsran_rat_t::lte);
void close(); void close();
void write_nas(uint8_t* pdu, uint32_t pdu_len_bytes); void write_nas(uint8_t* pdu, uint32_t pdu_len_bytes);

@ -23,6 +23,7 @@
#define NAS_LTE_DLT 148 #define NAS_LTE_DLT 148
#define UDP_DLT 149 // UDP needs to be selected as protocol #define UDP_DLT 149 // UDP needs to be selected as protocol
#define S1AP_LTE_DLT 150 #define S1AP_LTE_DLT 150
#define NAS_5G_DLT 151
/* This structure gets written to the start of the file */ /* This structure gets written to the start of the file */
typedef struct pcap_hdr_s { typedef struct pcap_hdr_s {
@ -184,10 +185,10 @@ extern "C" {
#endif #endif
/* Open the file and write file header */ /* Open the file and write file header */
FILE* LTE_PCAP_Open(uint32_t DLT, const char* fileName); FILE* DLT_PCAP_Open(uint32_t DLT, const char* fileName);
/* Close the PCAP file */ /* Close the PCAP file */
void LTE_PCAP_Close(FILE* fd); void DLT_PCAP_Close(FILE* fd);
/* Write an individual MAC PDU (PCAP packet header + mac-context + mac-pdu) */ /* Write an individual MAC PDU (PCAP packet header + mac-context + mac-pdu) */
int LTE_PCAP_MAC_WritePDU(FILE* fd, MAC_Context_Info_t* context, const unsigned char* PDU, unsigned int length); int LTE_PCAP_MAC_WritePDU(FILE* fd, MAC_Context_Info_t* context, const unsigned char* PDU, unsigned int length);

@ -32,7 +32,7 @@ uint32_t mac_pcap::open(std::string filename_, uint32_t ue_id_)
// set DLT for selected RAT // set DLT for selected RAT
dlt = UDP_DLT; dlt = UDP_DLT;
pcap_file = LTE_PCAP_Open(dlt, filename_.c_str()); pcap_file = DLT_PCAP_Open(dlt, filename_.c_str());
if (pcap_file == nullptr) { if (pcap_file == nullptr) {
logger.error("Couldn't open %s to write PCAP", filename_.c_str()); logger.error("Couldn't open %s to write PCAP", filename_.c_str());
return SRSRAN_ERROR; return SRSRAN_ERROR;
@ -68,7 +68,7 @@ uint32_t mac_pcap::close()
{ {
std::lock_guard<std::mutex> lock(mutex); std::lock_guard<std::mutex> lock(mutex);
srsran::console("Saving MAC PCAP (DLT=%d) to %s\n", dlt, filename.c_str()); srsran::console("Saving MAC PCAP (DLT=%d) to %s\n", dlt, filename.c_str());
LTE_PCAP_Close(pcap_file); DLT_PCAP_Close(pcap_file);
pcap_file = nullptr; pcap_file = nullptr;
} }

@ -22,10 +22,14 @@ void nas_pcap::enable()
enable_write = true; enable_write = true;
} }
uint32_t nas_pcap::open(std::string filename_, uint32_t ue_id_) uint32_t nas_pcap::open(std::string filename_, uint32_t ue_id_, srsran_rat_t rat_type)
{ {
filename = filename_; filename = filename_;
pcap_file = LTE_PCAP_Open(NAS_LTE_DLT, filename.c_str()); if (rat_type == srsran_rat_t::nr) {
pcap_file = DLT_PCAP_Open(NAS_5G_DLT, filename.c_str());
} else {
pcap_file = DLT_PCAP_Open(NAS_LTE_DLT, filename.c_str());
}
if (pcap_file == nullptr) { if (pcap_file == nullptr) {
return SRSRAN_ERROR; return SRSRAN_ERROR;
} }
@ -37,7 +41,7 @@ uint32_t nas_pcap::open(std::string filename_, uint32_t ue_id_)
void nas_pcap::close() void nas_pcap::close()
{ {
fprintf(stdout, "Saving NAS PCAP file (DLT=%d) to %s \n", NAS_LTE_DLT, filename.c_str()); fprintf(stdout, "Saving NAS PCAP file (DLT=%d) to %s \n", NAS_LTE_DLT, filename.c_str());
LTE_PCAP_Close(pcap_file); DLT_PCAP_Close(pcap_file);
} }
void nas_pcap::write_nas(uint8_t* pdu, uint32_t pdu_len_bytes) void nas_pcap::write_nas(uint8_t* pdu, uint32_t pdu_len_bytes)

@ -18,7 +18,7 @@
#include <sys/time.h> #include <sys/time.h>
/* Open the file and write file header */ /* Open the file and write file header */
FILE* LTE_PCAP_Open(uint32_t DLT, const char* fileName) FILE* DLT_PCAP_Open(uint32_t DLT, const char* fileName)
{ {
pcap_hdr_t file_header = { pcap_hdr_t file_header = {
0xa1b2c3d4, /* magic number */ 0xa1b2c3d4, /* magic number */
@ -43,7 +43,7 @@ FILE* LTE_PCAP_Open(uint32_t DLT, const char* fileName)
} }
/* Close the PCAP file */ /* Close the PCAP file */
void LTE_PCAP_Close(FILE* fd) void DLT_PCAP_Close(FILE* fd)
{ {
if (fd) { if (fd) {
fclose(fd); fclose(fd);

@ -25,7 +25,7 @@ void rlc_pcap::enable(bool en)
void rlc_pcap::open(const char* filename, rlc_config_t config) void rlc_pcap::open(const char* filename, rlc_config_t config)
{ {
fprintf(stdout, "Opening RLC PCAP with DLT=%d\n", UDP_DLT); fprintf(stdout, "Opening RLC PCAP with DLT=%d\n", UDP_DLT);
pcap_file = LTE_PCAP_Open(UDP_DLT, filename); pcap_file = DLT_PCAP_Open(UDP_DLT, filename);
enable_write = true; enable_write = true;
if (config.rlc_mode == rlc_mode_t::am) { if (config.rlc_mode == rlc_mode_t::am) {
@ -45,7 +45,7 @@ void rlc_pcap::open(const char* filename, rlc_config_t config)
void rlc_pcap::close() void rlc_pcap::close()
{ {
fprintf(stdout, "Saving RLC PCAP file\n"); fprintf(stdout, "Saving RLC PCAP file\n");
LTE_PCAP_Close(pcap_file); DLT_PCAP_Close(pcap_file);
} }
void rlc_pcap::set_ue_id(uint16_t ue_id_) void rlc_pcap::set_ue_id(uint16_t ue_id_)

@ -23,13 +23,13 @@ void s1ap_pcap::enable()
} }
void s1ap_pcap::open(const char* filename) void s1ap_pcap::open(const char* filename)
{ {
pcap_file = LTE_PCAP_Open(S1AP_LTE_DLT, filename); pcap_file = DLT_PCAP_Open(S1AP_LTE_DLT, filename);
enable_write = true; enable_write = true;
} }
void s1ap_pcap::close() void s1ap_pcap::close()
{ {
fprintf(stdout, "Saving S1AP PCAP file\n"); fprintf(stdout, "Saving S1AP PCAP file\n");
LTE_PCAP_Close(pcap_file); DLT_PCAP_Close(pcap_file);
} }
void s1ap_pcap::write_s1ap(uint8_t* pdu, uint32_t pdu_len_bytes) void s1ap_pcap::write_s1ap(uint8_t* pdu, uint32_t pdu_len_bytes)

Loading…
Cancel
Save