Add a cache to data link layer for control frames with hash

This commit is contained in:
2026-03-02 01:46:24 -05:00
parent 1083d3e2c0
commit bb08a2f0ba
5 changed files with 271 additions and 24 deletions

View File

@@ -30,8 +30,11 @@
#define CONTROL_FRAME_OVERHEAD 9
#define GENERIC_FRAME_OVERHEAD 14
#define CONTROL_FRAME_HASH_SIZE 4 // 4-byte FNV-1a hash prepended to control frame payload on the wire
#define MAX_GENERIC_DATA_LEN (MAX_FRAME_SIZE - GENERIC_FRAME_OVERHEAD)
#define MAX_CONTROL_DATA_LEN (MAX_FRAME_SIZE - CONTROL_FRAME_OVERHEAD)
// Control data max accounts for the 4-byte hash prefix that is prepended on transmit and stripped on receive
#define MAX_CONTROL_DATA_LEN (MAX_FRAME_SIZE - CONTROL_FRAME_OVERHEAD - CONTROL_FRAME_HASH_SIZE)
//Generic Frame Fragment ACK
#define GENERIC_FRAG_ACK_DATA_SIZE 7
@@ -107,6 +110,17 @@ typedef struct _fragment_metadata {
uint16_t num_fragments_rx;
} FragmentMetadata;
/**
* @brief Entry in the receiver-side control-frame LFU lookup table
*/
typedef struct _control_frame_lut_entry {
uint32_t hash; // FNV-1a hash of the original payload (key)
std::vector<uint8_t> message; // Cached decoded payload (sans hash prefix)
FrameHeader header; // Cached frame header
uint32_t frequency; // Hit count used for LFU eviction
bool valid; // Is this slot populated?
} ControlFrameLutEntry;
typedef struct _receive_metadata{
std::unique_ptr<std::vector<uint8_t>> data;
uint16_t data_len;