LINUX.ORG.RU
ФорумAdmin

netperf — сгенерировать траффик на интерфейс

 ,


1

1

Приветствую,

Имеется машина с Fedora 20, где сетевые интерфейсы 'отвязаны' от своего драйвера и 'привязаны' к другому через /sys/bus/pci/drivers/DRV/{unbind|bind}. Если говорить проще, то речь идет о DPDK от интела.

Как результат, данные интерфейсы более не видны приложениям. Теперь возникла потребность потестить пропускную способность, но из того что я знаю, netperf и iperf, требуют запускать сервер с привязкой к интерфейсу и IP адресу на DUT (device under test), далее запускаем клиент на test-машине, соединяемся с сервером и пр.

В моем случае на DUT нет интерфейса со своим адресом, который можно было бы подсунуть netperf или iperf — можно ли как-то это обойти и убедить netperf на тест-машине «тупо» слать траффик на определенный интерфейс?

Вот картинка:

+---+                      +----+
|DUT+->eth0---------<-eth0-+Test|
|   |                      |    |
|   +->eth1---------<-eth1-+    |
+---+                      +----+

Интерфейсы eth0/1 на DUT захвачены драйвером DPDK и потому «не видны» приложениями, tcpdump, ifconfig или netperf соответственно на Test машине мне нужно объяснить netperf-у просто генерировать траффик на интерфейс eth0. Сходу этого не получилось сделать:

Test% netperf -N -H 10.0.0.2
...
netperf: send_omni: connect_data_socket failed: No route to host

Можно ли средствами iptables/ebtables/etc. выкрутиться? Спасибо.

★★

Трафик пойдёт в тот интерфейс, куда прописан маршрут. Но, в ethernet-сети, нужно, чтобы, ip-адрес преобразовался в MAC-адрес (arp-протокол).

Поэтому, сначала прописываете на test-машине маршрут через eth0 к любому адресу (скорее всего он уже там есть), если нет, то назначаете адрес/маска или маршрут ″ip route add 192.168.1.5/32 dev eth0 scope link″.

А потом прописываете запись в arp-таблицу:

ip neigh add 192.168.1.5 lladdr 00:1a:30:38:a8:00 dev eth0 nud perm

Mac-адрес это то, что на DUT машине, ip-адрес тот, на который прописали маршрут через eth0.

Отправлять просто так можно udp-пакеты, tcp требует установки соединения, поэтому как то так:

iperf -u -b 1M -c 192.168.1.5 -t 2 -p 6010

mky ★★★★★
()
Ответ на: комментарий от mky
ip route add 192.168.1.5/32 dev eth0 scope link

С этим понятно.

ip neigh add 192.168.1.5 lladdr 00:1a:30:38:a8:00 dev eth0 nud perm

А вот с этой командной не очень — в чем отличие от arp -s ... ?

Кроме того, если я правильно понял, вы предлагаете установить адрес 192.168.1.5 на интерфейсе eth1 на DUT машине и там же поднять iperf/netperf сервер?

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

Ничем, но команда ″arp″ устарела и считается deprecated.

На DUT я ничего уставливать не предлагал. Я предлагал с помощью udp и записи в arp-таблице создать поток пакетов, идущих на DUT/eth0, считая что на Test нормальные интерфейсы. Вроде, вы этого хотели?

mky ★★★★★
()
Ответ на: комментарий от cruz7

Не знаю где запускать iperf-сервер. Просто ваша фраза:

можно ли как-то это обойти и убедить netperf на тест-машине «тупо» слать траффик на определенный интерфейс?

Я думал, что у вас на DUP какой-то софт принимает трафик. А если это ваша тема http://stackoverflow.com/questions/27828689/run-netperf-without-ip-address-av... и DUP просто отправляет через eth1 на Test весь трафик, пришедший на eth0, то и iperf-сервер нужно запускать на Test. Но я пока в этом не уверен.

mky ★★★★★
()
Ответ на: комментарий от mky

Ну тогда мы пришли откуда начали :) iperf/netperf не сможет работать не соединившись предварительно с сервером. Запустить сервер на Test машине на интерфейс eth1 можно, но трафик не пойдет на eth0 согласно ip route правилу и arp записи как вы выше написали, я это уже проходил. А просто гнать трафик в интерфейс я могу и pktgen или через pf_ring например, но мне нужны возможности netperf/iperf по измерению скорости + возможность нескольких потоков одновременно.

PS. Да, на DUT софтовый свитч, весь входящий на eth0 трафик перенаправляет на eth1.

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

Не совсем откуда пришли. Это общая задача — сделать чтобы линукс хост обменивался траффиком сам с собой через внешний свич/патчкорд. Как отключить в Linux хождение пакетов через loopback интерфейс? последнее сообщение и там по ссылке из моего поста.

То есть два варианта. Либо мы прописываем маршруты на несуществующие ip-адреса, для этих ip-адресов делаем arp-записи, и подправляем пакеты с помощью DNAT/SNAT. Либо мы корректируем правила машрутизации (ip rule), делая не нулевой pref для таблицы ″local″, чтобы в начале просматривались другие таблицы, где без вариантов маршрут только через eth-интерфейс.

mky ★★★★★
()

можно namespace настроить в каждом свой интерфейс будет и свои сети. видел статью на хабре.

кому вообще этот DPDK нужен?

dimon555 ★★★★★
()
Ответ на: комментарий от mky

mky, спасибо за наводки, буду пробовать.

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