Я пишу диссектор Wireshark для собственного протокола. Протокол выглядит следующим образом: первые 3 бита пакета определяют, как создается остальная часть пакета. Например, если эти 3 бита равны 00, остаток пакета представляет собой 6-битное поле, за которым следуют 2-байтовые поля. Если начальный 3-бит равен 01, остаток пакета представляет собой 14-битное поле, за которым следует поле байтов. Я успешно проанализировал ведущее 2-битное поле (которое я назвал hf_format). В функции диссектора Мой код делает это в данный момент:
proto_tree_add_item( ..hf_format...);
if(hf_format==0)
{
proto_tree_add_item( ..6-bit field...);
proto_tree_add_item( ..first byte field...);
proto_tree_add_item( ..second byte field...);
}
else if (hf_format==1)
{
proto_tree_add_item( ..14-bit field...);
proto_tree_add_item( ..byte field...);
}
else etc.
Wireshark правильно показывает hf_format в рассеченном пакете, но другие поля не рассекаются. Можете ли вы сказать мне, в чем моя ошибка? Я много обыскивал в Интернете и читал каждый документ, который смог найти, включая официальную документацию, но не нашел ничего поучительного в этом вопросе.