Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Контрольная сумма Ethernet стека  (Прочитано 2502 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Gektor87

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Контрольная сумма Ethernet стека
« : 05 Марта 2021, 10:04:21 »
Доброго времени суток, форумчане. Я тут недавно, так что сильно тапками не ругайте плз.

Суть следующая. Есть устройство, которое обменивается по UDP. Пытаюсь отправить на него пакет в соответствии с протоколом устройства - ответа от него нет. Загружаю программу для взаимодействия с устройством от производителя - устройство ему отвечает. Запуская WireShark вижу, что единственное отличие моих пакетов и пакетов от приложения производителя в том, что мои пакеты идут с неверной контрольной суммой (она заполняется нулями). Стал копать дальше - установил утилиту ethtool. Проверяю установки:
# ethtool --show-offload eth0
Features for eth0:
rx-checksumming: off [fixed]
tx-checksumming: off
        tx-checksum-ipv4: off [fixed]
        tx-checksum-ip-generic: off [fixed]
        tx-checksum-ipv6: off [fixed]
        tx-checksum-fcoe-crc: off [fixed]
        tx-checksum-sctp: off [fixed]
scatter-gather: off
        tx-scatter-gather: off [fixed]
        tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: off
        tx-tcp-segmentation: off [fixed]
        tx-tcp-ecn-segmentation: off [fixed]
        tx-tcp-mangleid-segmentation: off [fixed]
        tx-tcp6-segmentation: off [fixed]
udp-fragmentation-offload: off
generic-segmentation-offload: off [requested on]
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: on [fixed]
tx-vlan-offload: off [fixed]
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: off [fixed]
rx-vlan-filter: on [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-gre-csum-segmentation: off [fixed]
tx-ipxip4-segmentation: off [fixed]
tx-ipxip6-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-udp_tnl-csum-segmentation: off [fixed]
tx-gso-partial: off [fixed]
tx-sctp-segmentation: off [fixed]
tx-esp-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off [fixed]
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]
hsr-rx-offload: off [fixed]
prp-rx-offload: off [fixed]
hw-tc-offload: off [fixed]
esp-hw-offload: off [fixed]
esp-tx-csum-hw-offload: off [fixed]
rx-udp_tunnel-port-offload: off [fixed]
Как видно изменение  tx-checksum-ipv4 заблокировано, а сама опция выключена.

Пытаюсь получить флаги
ethtool --show-priv-flags eth0
No private flags defined

ethtool -i eth0
driver: cpsw
version: 1.0
firmware-version:
expansion-rom-version:
bus-info: 4a100000.ethernet
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no
Не могу понять, что мне нужно сделать, чтобы включить подсчет контрольной суммы у сетевого драйвера. Подскажите люди добрые, может кто сталкивался с подобной проблемой?

Хочу добавить, что посылки отправлял с использованием библиотеки QUdpSocket. Также пробовал отправлять с помощью стандартной библиотеки, включая опцию SO_NOFCS, что тоже не привело к положительному результату (пакет все также уходит с непраильной контрольной суммой 0x00000000
« Последнее редактирование: 05 Марта 2021, 21:47:32 от Aleksandru »

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3030
    • Просмотр профиля
Re: Контрольная сумма Ethernet стека
« Ответ #1 : 05 Марта 2021, 19:38:41 »
Так напишите небольшую программу на C и связывайтесь с стройством с помощью функций sendto() и recfrom() через структуры
sockaddr и sockaddr_in, тогда всё само собой будет вычисляться. Вот старый пример,
cam_udp.h в нём - это специализированный файл от видеокамеры, работающей по UDP.
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 09 Марта 2021, 13:32:54 от Peter_I »
Пётр.

Оффлайн Gektor87

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Контрольная сумма Ethernet стека
« Ответ #2 : 09 Марта 2021, 06:24:06 »
В том то и дело, что я так пробовал. И нет, не вычисляется само собой...

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3030
    • Просмотр профиля
Re: Контрольная сумма Ethernet стека
« Ответ #3 : 09 Марта 2021, 13:34:23 »
А при выполнении есть ли сообщения об ошибках?
Пётр.

Оффлайн Gektor87

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Контрольная сумма Ethernet стека
« Ответ #4 : 09 Марта 2021, 13:45:09 »
Нет, сообщений об ошибках нет. Результат выполнения функций setsockopt выводил в отладку, и он всегда нулевой (то бишь все ок).
Как сейчас выясняется, возможно проблема может быть связана с реализацией сетевого драйвера в ядре Linux. Мы используем проц AM4378, и вроде как производители пишут, что функции, связанные с checksum offload недоступны.

https://e2e.ti.com/support/processors/f/processors-forum/424403/am437x-ethernet-checksum-offload

Пока зашли в тупик...

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3030
    • Просмотр профиля
Re: Контрольная сумма Ethernet стека
« Ответ #5 : 09 Марта 2021, 21:37:56 »
Я, лонечно, думал об IBM PC. Но это очень странно, если драйвер сетевой карты что-то не доделывает.
Он же обязан правильно формировать пакет, так что с этим не сюда.
« Последнее редактирование: 10 Марта 2021, 08:39:48 от Peter_I »
Пётр.

Оффлайн Gektor87

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Контрольная сумма Ethernet стека
« Ответ #6 : 10 Марта 2021, 06:05:01 »
Задали вопрос от официального представителя Texas Instrument и получили следующий ответ:
Hi,

IP, TCP, UDP checksums offload is not an option on the AM437x. 

Best Regards,

Schuyler

 

Страница сгенерирована за 0.04 секунд. Запросов: 22.