arexol 0 18 сентября, 2012 Опубликовано 18 сентября, 2012 · Жалоба Добрый день. Прошу совета у тех кто знает ОВМ Задача распаковать из байтсрима входящий пакет данных. Но приходящие пакеты могут иметь различную структуру , обычное дело для трафика. Допустим если type_len = 0x8100 то это VLAN и настоящее поле type_len идёт после VLAN. возможно ли как-то описать класс пакета так чтобы структура подбиралась в соответствии с полученными данными с автоматическим распознаванием типа пакета. При этом хотелось бы чтобы была хорошая расширяемость по типам различных пакетов. Пока что написал маленький пример (в приглядку с других приммеров ) для экспериментов, который можно дополнять. Хотелось бы получить хотя бы 2 различных структуры извлеченные из байтсрима используя значение type_len после адреса (которе может быть VLAN и в этом случае должен быть VLAN в структуре а потом настоящий тип) Приммер можно запускать с помощью перл скрипта как под моделсим так и под ncsim (по умолчанию запускается ncsim без параметров т.е perl run.pl, с параметром m будет использован моделсим т.е. perl run.pl m ) pack_bit_len = 10 ---------------------------------------------------------------------- Name Type Size Value ---------------------------------------------------------------------- ovm_sequence_item st_packet_t - @1032 dest_address integral 48 'h111213141516 src_address integral 48 'h2223242526aa type_len integral 16 'h8100 payload da(integral) 10 - [0] integral 8 'h67 [1] integral 8 'h20 [2] integral 8 'h89 [3] integral 8 'h0 [4] integral 8 'haa [5] integral 8 'hbb [6] integral 8 'hee [7] integral 8 'hcc [8] integral 8 'hdd [9] integral 8 'hff ---------------------------------------------------------------------- Буду благодарен за любые подсказки ovm_packets.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 18 сентября, 2012 Опубликовано 18 сентября, 2012 · Жалоба а как вы себе представляете обработку такой транзакции, когда не знаешь кто оно на самом деле ? Ну вот прилетел вам указатель на транзакцию, вы сделали unpack. И вам нужно, ну положим поля обработать, за какие поля вы возьметесь ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arexol 0 19 сентября, 2012 Опубликовано 19 сентября, 2012 · Жалоба а как вы себе представляете обработку такой транзакции, когда не знаешь кто оно на самом деле ? Ну вот прилетел вам указатель на транзакцию, вы сделали unpack. И вам нужно, ну положим поля обработать, за какие поля вы возьметесь ? Я немного продвинулся в разрешении проблемы и пока что вижу такой вариант .... делаем класс который включает в себя указатель на обьект packet_body методе унпак детектим тип пакета анализируя поля которые меняться не могут (такие как тип пакета) назначаем свойство типа пакета. При анализе стурктуры сначала читаем значение типа обьекта packet_body и в соотв с этим типом обращаемся к полям. не реализовал ещё затею - может будут подводные камни ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 19 сентября, 2012 Опубликовано 19 сентября, 2012 · Жалоба Приветствую! В свое время нарыл на github библиотеку на SV для генерации/визуализации Ethernet пакетов Очень серьезно сделано товарищем Sachin Gandhi . github.com/sach/System-Verilog-Packet-Library Можно посмотреть там как он решает такие вопросы. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 сентября, 2012 Опубликовано 19 сентября, 2012 · Жалоба делаем класс который включает в себя указатель на обьект packet_body методе унпак детектим тип пакета анализируя поля которые меняться не могут (такие как тип пакета) назначаем свойство типа пакета. вот и ответ на ваш вопрос :) делаем свой собственный unpack %))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arexol 0 19 сентября, 2012 Опубликовано 19 сентября, 2012 · Жалоба Приветствую! В свое время нарыл на github библиотеку на SV для генерации/визуализации Ethernet пакетов Очень серьезно сделано товарищем Sachin Gandhi . github.com/sach/System-Verilog-Packet-Library Можно посмотреть там как он решает такие вопросы. Удачи! Rob. Спасибо за наводку, интересная библиотечка - буду изучать вот и ответ на ваш вопрос :) делаем свой собственный unpack %))) :) на словах всё просто но пока не получилось сделать так чтоб и мне самому понравилось Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться