LINUX.ORG.RU

Flow control в kernel


0

1

Добрый день! Объясните пожалуйста как принудительно заставить сетевой контроллер слать кадры PAUSE 802.3? Делаю передачу всего трафика с одного эзернет интерфейса в узкий канал (шифрование и отправка в другой интерфейс по мере возможности). Для этого добавил rx_handler на целевой интерфейс, укладываю пакеты в FIFO, а другой процесс по мере возможности вытаскивает из FIFO пакеты и отправляет. Так вот, загвоздка в том, что когда у меня забивается FIFO я дропаю входящий пакет. Нельзя ли принудительно выключить прием на интерфейсе? Перерыл всю литературу, так внятного ответа не нашел. Написано, что Ethernet драйвер сам перейдет в паузу, когда у него закончатся буферы, если NAPI не будет успевать вытаскивать пакеты. Но так как спать в rx handlere нельзя, у меня связаны руки.

Ответ на: комментарий от anonymous

Я понимаю, что эти фичи можно через ethtool включать и просматривать. Но как принудительно из сетевого драйвера заставить EMAC генерить эти пакеты, если он поддерживает аппаратно flow control? Когда я дропаю пакеты из handler'а, EMAC не генерирует паузу. Неужели нету способа, кроме как вручную сгенерировать пакет паузы?

slavayo777
() автор топика
Ответ на: комментарий от slavayo777

Но как принудительно из сетевого драйвера заставить EMAC генерить эти пакеты, если он поддерживает аппаратно flow control?

это просто драйвероПисец :) смотри документацию на свой контроллер - там выставляется порог (threshold) FIFO на приеме (например заполнение буфера 50%) после которого EMAC автоматом передает pause frame - у тебя же дуплекс. Все остальные EMAC в сети Ethernet должны остановить передачу (если поддерживают flow control)

http://en.wikipedia.org/wiki/Ethernet_flow_control

Вообще это лажа мало используемая - чаще просто дропают пакеты.

anonymous
()

В общем все оказалось проще простого. В rx_handler'е не нужно отшаривать skb (skb_share_check(skb, GFP_ATOMIC)), тогда он не освобождается в буфере EMAC, ну и соответственно начинает работать механизм flow control. Пол дня убил на решение элементарной задачи. Всем спасибо.

slavayo777
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.