Есть сокет
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+читать из памяти?
Внятной документации о том, как это работает, не нашел (плохо искал?)
Заранее прошу прощения за сбивчивое объяснение задачи..
