Экспериментирую с iproute2/tc. Возвел на машине два tuntap интерфейса - на tap0 перенаправляю трафик с eth0 (`tc .. action mirred egress redirect dev tap0`), читаю пакеты своей небольшой программой, и записываю в tap1, оттуда (`tc .. action pass`) пакеты попадают в tcp/ip стек и покидают машину.
Однако, теперь нужно обрабатывать пакеты подобным образом входящие с eth1, то есть нужно полностью bi-directional. Значит дескриптор, например tap0_fd будет и читать и записывать, возможны race conditions? Обдумываю два варианта:
a) два треда, один на uplink трафик, второй на downlink
b) select() на tap0_fd и tap1_fd
Какие плюсы/минусы у данных опций, есть ли к-л другие варианты? Спасибо!