Starting to add s1ap_pcap class.

This commit is contained in:
Pedro Alvarez 2018-07-09 18:25:43 +01:00
parent 32a5c6a92f
commit ff49e56871
3 changed files with 70 additions and 11 deletions

View File

@ -35,7 +35,7 @@
#define MAC_LTE_DLT 147
#define NAS_LTE_DLT 148
#define RLC_LTE_DLT 149 // UDP needs to be selected as protocol
#define S1AP_LTE_DLT 150 // UDP needs to be selected as protocol
/* This structure gets written to the start of the file */
typedef struct pcap_hdr_s {
@ -165,6 +165,10 @@ typedef struct {
#define RLC_LTE_PAYLOAD_TAG 0x01
/* Context information for every S1AP PDU that will be logged */
typedef struct S1AP_Context_Info_s {
// No Context yet
} S1AP_Context_Info_t;
/**************************************************************************
* API functions for opening/closing LTE PCAP files *
@ -398,4 +402,37 @@ inline int LTE_PCAP_RLC_WritePDU(FILE *fd, RLC_Context_Info_t *context,
return 1;
}
/**************************************************************************
* API functions for writing S1AP PCAP files *
**************************************************************************/
/* Write an individual PDU (PCAP packet header + s1ap-context + s1ap-pdu) */
inline int LTE_PCAP_S1AP_WritePDU(FILE *fd, S1AP_Context_Info_t *context,
const unsigned char *PDU, unsigned int length)
{
pcaprec_hdr_t packet_header;
/* Can't write if file wasn't successfully opened */
if (fd == NULL) {
printf("Error: Can't write to empty file handle\n");
return 0;
}
/****************************************************************/
/* PCAP Header */
struct timeval t;
gettimeofday(&t, NULL);
packet_header.ts_sec = t.tv_sec;
packet_header.ts_usec = t.tv_usec;
packet_header.incl_len = length;
packet_header.orig_len = length;
/***************************************************************/
/* Now write everything to the file */
fwrite(&packet_header, sizeof(pcaprec_hdr_t), 1, fd);
fwrite(PDU, 1, length, fd);
return 1;
}
#endif // SRSLTE_PCAP_H

View File

@ -0,0 +1,23 @@
#ifndef SRSLTE_S1AP_PCAP_H
#define SRSLTE_S1AP_PCAP_H
#include "srslte/common/pcap.h"
namespace srslte {
class s1ap_pcap
{
public:
s1ap_pcap() {enable_write=false; pcap_file = NULL; }
void enable();
void open(const char *filename);
void close();
void write_s1ap(uint8_t *pdu, uint32_t pdu_len_bytes);
private:
bool enable_write;
FILE *pcap_file;
};
} //namespace srslte
#endif // SRSLTE_NAS_PCAP_H

View File

@ -1,33 +1,32 @@
#include <stdint.h>
#include "srslte/srslte.h"
#include "srslte/common/pcap.h"
#include "srslte/common/nas_pcap.h"
#include "srslte/common/s1ap_pcap.h"
namespace srslte {
void nas_pcap::enable()
void s1ap_pcap::enable()
{
enable_write = true;
}
void nas_pcap::open(const char* filename, uint32_t ue_id)
void s1ap_pcap::open(const char* filename)
{
pcap_file = LTE_PCAP_Open(NAS_LTE_DLT, filename);
ue_id = ue_id;
pcap_file = LTE_PCAP_Open(S1AP_LTE_DLT, filename);
enable_write = true;
}
void nas_pcap::close()
void s1ap_pcap::close()
{
fprintf(stdout, "Saving NAS PCAP file\n");
fprintf(stdout, "Saving S1AP PCAP file\n");
LTE_PCAP_Close(pcap_file);
}
void nas_pcap::write_nas(uint8_t *pdu, uint32_t pdu_len_bytes)
void s1ap_pcap::write_s1ap(uint8_t *pdu, uint32_t pdu_len_bytes)
{
if (enable_write) {
NAS_Context_Info_t context;
S1AP_Context_Info_t context;
if (pdu) {
LTE_PCAP_NAS_WritePDU(pcap_file, &context, pdu, pdu_len_bytes);
LTE_PCAP_S1AP_WritePDU(pcap_file, &context, pdu, pdu_len_bytes);
}
}
}