LINUX.ORG.RU

мультиплексировать операции между двумя дескрипторами

 , , , ,


0

3

Экспериментирую с 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

Какие плюсы/минусы у данных опций, есть ли к-л другие варианты? Спасибо!


Значит дескриптор, например tap0_fd будет и читать и записывать, возможны race conditions?

Нет, рейскондишонов не будет.

a) два треда, один на uplink трафик, второй на downlink
b) select() на tap0_fd и tap1_fd
Какие плюсы/минусы у данных опций, есть ли к-л другие варианты? Спасибо!

Первый вариант используется в cpu-bound задачах, второй в io-bound. Если всё равно - делай так, как проще.

Laz ★★★★ ()