Вдруг пакеты перестают поступать в Ethernet PHY

У меня есть ситуация, когда пакеты не приходят в Ethernet PHY. Я использую кольцевой буфер DMA, данные копируются из физического провода в кольцевой буфер, затем я помещаю его в стек верхнего уровня. В кольцевом буфере DMA есть два счетчика: индекс потребителя и индекс производителя, а также два указателя: указатель чтения и указатель записи. Счетчик говорит, что сколько пакетов пришло с физического уровня, тогда как потребительский буфер используется для хранения индекса использованного буфера, который был передан на верхний уровень. Чтение и запись указателей используются для выбора данных.

В моей текущей ситуации мой индекс производителя и потребителя становится похожим, это означает, что в кольцевом буфере DMA нет пакетов, в то время как пакеты непрерывно перекачиваются на устройство, подключенное к ПК (журналы wireshark подтверждают, что пакет маршрутизируется).

Мы делаем нашу ОС загрузчика независимой, поэтому здесь наша реализация делает много вещей (управление потоком, анализ исходного пакета и отправка его на верхние уровни) в рамках одного выполнения (введение некоторых таймеров), как и в предыдущей реализации, которой является VxWorks., вещи происходят в разных потоках, и они использовали свой стек IP. После дальнейшей отладки проблемы я заметил, что пакеты отбрасываются из-за переполнения RX_BUFFER. Я обнаружил, что при настройке многоадресного MAC-адреса в фильтрах на аппаратном уровне есть некоторые проблемы, которые могут быть причиной того же. Мое наблюдение заключается в том, что в первый раз все работает нормально. Но после мягкого сброса я не могу снова поставить фильтр. У меня есть сомнения по поводу еще нескольких вопросов, и я исследую то же самое.

1> Инициализировать драйвер Ethernet.
2> инициализация LWIP (IP-стека).
3> Регистрация функций обратного вызова.
4> Запустите драйвер PHY Ethernet.
5> Форма DHCP-соединения.
Драйвер Ethernet 6> продолжает опрос, чтобы принять предложение DHCP.
7> Присоединяйтесь к IGMP
8> Опрос для многоадресного пакета
9> разобрать пакет и присоединиться к другой многоадресной группе
10> снова начать опрос для многоадресного пакета. Здесь после шага 4, случайно я получаю сообщение переполнения RX_BUFFER на любом шаге вперед. Максимальный установленный размер MTU составляет 1500 байт, а размер буфера равен 2 КБ.

Любое предложение, чтобы разобраться / сузить вопрос?

1 ответ

Решение

Мы связались с Broadcom по вышеуказанной проблеме, мы исправили проблему и протестировали ее. Я хотел бы обновить модификацию, которая была сделана.

  • После получения пакетов данных от уровня PHY мы очищаем буфер PHY RX. Этот раздел удален, потому что он уже управляется уровнем PHY.

  • Мы также внесли небольшие изменения в поток стека LWIP.

Другие вопросы по тегам