Я создаю программу на C, которая анализирует пакеты в указанном интерфейсе, используя libpcap, и подсчитывает повторные передачи TCP в секунду.
Для хранения информации о пакете и последующего подсчета вхождений повторных передач мне понадобится словарная структура, похожая на следующую, где я сохраню источник, место назначения и порядковый номер пакета (или его хеш)в качестве ключа и номер вхождения порядкового номера в качестве значения:
Источник : 192.168.1.2
Пункт назначения : 192.168.2.2
порядковый номер : 123456789
вхождения : 2
ключ может быть кортежем:
{ (src_ip, dst_ip, seq_number) : #ocurrences }
{ (192.168.1.2, 192.168.2.2, 123456789) : 2 }
или хэш (например, md5) для уникальной идентификации пакета:
{ hash_of_src_dst_seqnum : #ocurrences }
{ 31078EB0CC34525058847E0BC632B23A : 2 }
Для этой части словаря я знаю, что могу создать структуру key_value, например:
struct key_value
{
int key;
char* value;
};
Проблема здесь в том, что я должен хранить информацию только на 10.000 пакетов. Когда структура заполнена, самая старая вставленная информация должна быть удалена (например, FIFO)
Мой вопрос: учитывая, что это программа на C, какая структура будет наиболее подходящей (также с точки зрения производительности) дляхранение нескольких (но ограниченных) словарей? Связанный список, FIFO, кольцевой буфер? И каков будет код для той же структуры, чтобы он принимал словарь в качестве своих элементов?
ПРИМЕЧАНИЕ: структура должна выглядеть примерно так:
[ { 31078EB0CC34525058847E0BC632B23A : 2 }, { 31078EB0CC34525058847E0222232B23A : 1 }, ....]