1 (07.06.2012 15:33:56 отредактировано jeti)

Есть сокет

fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))

.
Предполагается сделать setsockopt с параметрами PACKET_TX_RING/PACKET_RX_RING, затем сделать mmap

rings = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0)

и писать в память напрямую, без использования write/recvfrom.

Как это реализуется? Точнее, как это работает? - Что выделяет в памяти setsockopt(..,..,PACKET_TX_RING,..,..)? Что делает mmap, если у сокета установлены оба PACKET_TX_RING и PACKET_RX_RING?
Например, читать таким образом пакеты (PACKET_RX_RING) я научился, а и читать и писать - нет. Можно ли это сделать на одном сокете, или надо два? Сколько вызовов mmap нужно сделать - один или два, или по одному на оба сокета?.. Как работать с одним кольцом, если в нем и tx пакеты, и rx пакеты? Возможно ли писать в память+recvfrom или write+читать из памяти?
Внятной документации о том, как это работает, не нашел (плохо искал?)

Заранее прошу прощения за сбивчивое объяснение задачи..