[Linux] Доступ к Receive Status Register чипа RTL8139

viostar

Собственно требуется найти низкоуровневый (или другой) доступ к
регистру статуса принимаемого eth-пакета. Как сказано
в фирменном Realtek'овском листе, этот, так называемый
регистр, находится не в IO пространстве карты (как, скажем,
статус отправляемого пакета а в "Rx packet header".
То есть вроде как перед самим пакетом в FIFO карты RTL8139.
Дело в том, что именно регистр статуса содержит все флаги,
по которым можно судить о "качестве" принятого пакета.
Другие регистры полной информации не дают.
Буду очень признателен любым сведениям относительно
доступа к указанному регистру из-под стандартного линуксового C\C++.
PS Не для себя стараюсь, а усиления зенитно-ракетного щита страны ради.

Chupa

> Как сказано в фирменном Realtek'овском листе
покажи чтоль это чудо

Chupa


/* read size+status of next frame from DMA ring buffer */
rx_status = le32_to_cpu (*(u32 *) (rx_ring + ring_offset;

оно?
drivers/net/8139too.c:1971 (rtl8139_rx)

viostar

Про драйвер 8139too.c известно.
Вопрос, можно ли добраться до этого rx_status'а,
не переписывая сам драйвер, из свой программы.
Как, допустим, к остальным регистрам через обычные
функции доступа к IO-памяти.

viostar

Описания 8139 можно найти, например, здесь:
http://www.realtek.com.tw/downloads/downloads1-3.aspx?series=16&Spec=True

Chupa

> Про драйвер 8139too.c известно.
Я уточнял, что имеется ввиду.
> Вопрос, можно ли добраться до этого rx_status'а,
> не переписывая сам драйвер, из свой программы.
> Как, допустим, к остальным регистрам через обычные
> функции доступа к IO-памяти.
Что хочется получить в результате?
rx_status привязан к конкретному пакету, причём нетрудно заметить,
что статус обрабатывается и битый пакет дальше драйвера не уйдёт.
Так что если цель - более подробный сбор статистики,
чем реализовано в ядре, то нужно ковырять драйвер.
Если цель - знать значение для последнего полученного пакета,
тоже самое: положение регистра определяется локальными
переменными в драйвере.

viostar

Да, это попросту напрашивается: изменить драйвер с тем,
чтобы он выдавал каким-то образом не только содержимое
пакета, но и этот самый rx_status. Правда, не хотелось бы
сразу прибегать к столь радикальным действиям.
Но если "более высокоуровневых" методов добраться до
этого регистра нет, то выбирать, получается, не из чего.

sergey_m

Каким образом выдавал? Через сокет что ли? Не существует стандартного интерфейса для того, что ты хочешь.

viostar

Как? Ну хотя бы как-нибудь.
Через pcap-функции ведь нельзя получить
содержимое rx_status?

sergey_m

Нельзя. Зачем тебе это нужно, если драйвер всё равно отбрасывает битые пакеты?

viostar

Нужно точно знать причину их "битости".
Будь то неправильная CRC или еще что.
А в статусе все это прописано.

sergey_m

Можно вести всякую статистику в драйвере. Но вот отдавать это программе, которая работает с сетью - нереальный изврат.

hashion

легко дописывается драйвер, а нужная инфа выкидывается в /proc...

viostar

Всем высказавшимся большое спасибо.
Оставить комментарий
Имя или ник:
Комментарий: