From 12e727be0085ee7ea97e2b5be155b477db6ccbca Mon Sep 17 00:00:00 2001 From: Thomas Kolb Date: Sat, 20 Jul 2024 22:29:04 +0200 Subject: [PATCH] packet_structs: add function to dump a packet header to the log --- impl/src/layer2/packet_structs.c | 49 ++++++++++++++++++++++++++++++++ impl/src/layer2/packet_structs.h | 6 ++++ 2 files changed, 55 insertions(+) diff --git a/impl/src/layer2/packet_structs.c b/impl/src/layer2/packet_structs.c index 608afcd..164f201 100644 --- a/impl/src/layer2/packet_structs.c +++ b/impl/src/layer2/packet_structs.c @@ -1,6 +1,9 @@ #include #include +#define LOGGER_MODULE_NAME "l2ps" +#include "logger.h" + #include "packet_structs.h" @@ -67,3 +70,49 @@ bool layer2_decode_packet_header(const uint8_t *encoded, size_t encoded_len, lay return true; } + + +static const char* msg_type_to_string(layer2_message_type_t type) +{ + switch(type) { + case L2_MSG_TYPE_CONNECTIONLESS: return "Connectionless"; + case L2_MSG_TYPE_DATA: return "Data"; + case L2_MSG_TYPE_CONN_MGMT: return "Connection Management"; + } +} + + +void layer2_dump_packet_header(int level, const layer2_packet_header_t *header) +{ + LOG(level, "Packet header dump:"); + LOG(level, " Packet type: %s", msg_type_to_string(header->msg_type)); + LOG(level, " TX Request: %s", header->tx_request ? "true" : "false"); + LOG(level, " RX Seq. Nr: %2u", header->rx_seq_nr); + LOG(level, " TX Seq. Nr: %2u", header->tx_seq_nr); + + ham64_addr_type_t addr_type; + char addr_buf[HAM64_FMT_MAX_LEN]; + + addr_type = ham64_get_addr_type(&header->src_addr); + ham64_format(&header->src_addr, addr_buf); + + if(addr_type == HAM64_ADDR_TYPE_CALLSIGN) { + char callsign[13]; + ham64_decode_callsign(&header->src_addr, callsign); + LOG(level, " Source Address: %s [%s] -> %s", addr_buf, ham64_addr_type_to_string(addr_type), callsign); + } else { + LOG(level, " Source Address: %s [%s]", addr_buf, ham64_addr_type_to_string(addr_type)); + } + + addr_type = ham64_get_addr_type(&header->dst_addr); + ham64_format(&header->dst_addr, addr_buf); + + if(addr_type == HAM64_ADDR_TYPE_CALLSIGN) { + char callsign[13]; + ham64_decode_callsign(&header->dst_addr, callsign); + LOG(level, " Dest. Address: %s [%s] -> %s", addr_buf, ham64_addr_type_to_string(addr_type), callsign); + } else { + LOG(level, " Dest. Address: %s [%s]", addr_buf, ham64_addr_type_to_string(addr_type)); + } + +} diff --git a/impl/src/layer2/packet_structs.h b/impl/src/layer2/packet_structs.h index 4147b07..8a83f2f 100644 --- a/impl/src/layer2/packet_structs.h +++ b/impl/src/layer2/packet_structs.h @@ -61,6 +61,12 @@ size_t layer2_get_encoded_header_size(const layer2_packet_header_t *header); */ bool layer2_decode_packet_header(const uint8_t *encoded, size_t encoded_len, layer2_packet_header_t *header); +/*!\brief Dump a layer 2 packet header structure. + * \param level Log level (e.g. LVL_INFO; see the logger module). + * \param header The header structure to dump. + */ +void layer2_dump_packet_header(int level, const layer2_packet_header_t *header); + /* Data Packet Structs */ typedef enum {