Перейти к содержанию
    

OVM unpack packets

Добрый день.

 

Прошу совета у тех кто знает ОВМ

 

Задача распаковать из байтсрима входящий пакет данных.

Но приходящие пакеты могут иметь различную структуру , обычное дело для трафика.

 

Допустим если 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а как вы себе представляете обработку такой транзакции, когда не знаешь кто оно на самом деле ? Ну вот прилетел вам указатель на транзакцию, вы сделали unpack. И вам нужно, ну положим поля обработать, за какие поля вы возьметесь ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а как вы себе представляете обработку такой транзакции, когда не знаешь кто оно на самом деле ? Ну вот прилетел вам указатель на транзакцию, вы сделали unpack. И вам нужно, ну положим поля обработать, за какие поля вы возьметесь ?

 

Я немного продвинулся в разрешении проблемы и пока что вижу такой вариант ....

 

делаем класс который включает в себя указатель на обьект packet_body

методе унпак детектим тип пакета анализируя поля которые меняться не могут (такие как тип пакета)

назначаем свойство типа пакета.

 

При анализе стурктуры сначала читаем значение типа обьекта packet_body

и в соотв с этим типом обращаемся к полям.

 

не реализовал ещё затею - может будут подводные камни ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

 

В свое время нарыл на github библиотеку на SV для генерации/визуализации Ethernet пакетов

Очень серьезно сделано товарищем Sachin Gandhi . github.com/sach/System-Verilog-Packet-Library

 

Можно посмотреть там как он решает такие вопросы.

 

Удачи! Rob.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

делаем класс который включает в себя указатель на обьект packet_body

методе унпак детектим тип пакета анализируя поля которые меняться не могут (такие как тип пакета)

назначаем свойство типа пакета.

вот и ответ на ваш вопрос :) делаем свой собственный unpack %)))

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

 

В свое время нарыл на github библиотеку на SV для генерации/визуализации Ethernet пакетов

Очень серьезно сделано товарищем Sachin Gandhi . github.com/sach/System-Verilog-Packet-Library

 

Можно посмотреть там как он решает такие вопросы.

 

Удачи! Rob.

 

Спасибо за наводку, интересная библиотечка - буду изучать

 

вот и ответ на ваш вопрос :) делаем свой собственный unpack %)))

 

:) на словах всё просто

но пока не получилось сделать так чтоб и мне самому понравилось

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...