Что происходит в драйвере linux wifi после отправки пакета (жизнь пакета)?

Я работаю над приложением с низкой задержкой, отправляя пакеты udp от мастера к подчиненному. Мастер действует как точка доступа, отправляя данные непосредственно на ведомый. В основном он работает хорошо, но иногда данные приходят в ведомое устройство с опозданием. Чтобы сузить возможные источники задержки, я хочу ставить временные метки для пакетов, когда они отправляются на ведущем устройстве.

Для этого мне нужен хук, с помощью которого я могу получить отметку времени сразу после отправки пакета.

Согласно http://www.xml.com/ldd/chapter/book/ch14.html#t7 после отправки пакета должно быть прерывание, но я не могу найти, где обслуживается прерывание tx.

Это драйвер: drivers/net/wireless/bcmdhd/dhd_linux.c

Я вызываю dhd_start_xmit(..) от другого водителя, чтобы отправить свой пакет. dhd_start_xmit(..) вызывает dhd_sendpkt(..), а затем вызывается dhd_bus_txdata(..) (в bcmdhd/dhdpcie.c), где данные поставлены в очередь. Это в основном то, где я теряю представление о том, что происходит после того, как очередь запланирована в dhd_bus_schedule_queue(..).

Вопрос

Кто-нибудь знает, что происходит сразу после того, как пакет физически отправлен в этом конкретном драйвере, и, возможно, может указать мне на фрагмент кода.

Конечно, любые другие советы, как решить проблему, также приветствуются.

Спасибо


person Frode Akselsen    schedule 01.10.2016    source источник


Ответы (2)


В случае любого сетевого оборудования и сетевого драйвера выполняются следующие шаги:

1. Драйвер имеет дескриптор передачи, формат которого понятен аппаратному обеспечению.

2. Драйвер заполняет дескриптор текущим передаваемым пакетом и отправляет его в аппаратную очередь для передачи.

  1. после успешной передачи аппаратно генерируется прерывание.

  2. это прерывание вызывает функцию завершения передачи в драйвере, которая освобождает память предыдущего пакета и сбрасывает многие вещи, включая дескриптор и т. д.

здесь в строке нет. 1829, вы можете видеть, что пакет освобождается.

PKTFREE(dhd->osh, pkt, TRUE);

Спасибо

person SHASHI BHUSAN    schedule 13.11.2016

Пакет освобождается в функции

static void BCMFASTPATH
dhd_prot_txstatus_process(dhd_pub_t *dhd, void * buf, uint16 msglen)

в файле dhd_msgbuf.c

с

PKTFREE(dhd->osh, pkt, TRUE);
person Frode Akselsen    schedule 06.11.2016