Generator pakietów w systemie Linux

Przykładowo na maszynie czteroprocesorowej istnieją cztery procesy PKTGEN:

web:~# ps aux | grep pktgen

root 23324 0.0 0.0 0 0 ? S< 22:05 0:00 [kpktgend_0]

root 23326 0.0 0.0 0 0 ? S< 22:05 0:00 [kpktgend_1]

root 23327 0.0 0.0 0 0 ? S< 22:05 0:00 [kpktgend_2]

root 23328 0.0 0.0 0 0 ? S< 22:05 0:00 [kpktgend_3]

Aby określony proces PKTGEN obsługiwał określoną kartę sieciową, należy ustawić /proc/irq/X/smp_affinity, w celu powiązania karty sieciowej z procesorem. Numer przerwania irq przydzielony do określonych kart sieciowych NIC jest widoczny w /proc/interrupts. Przykładowo:

web:~# cat /proc/interrupts | grep eth

18: 162868851 0 0 0 IO-APIC-fasteoi eth0

29: 569 0 0 0 IO-APIC-fasteoi eth1

Przypisujemy eth0 do CPU0, natomiast eth1 CPU1:

echo 1 > /proc/irq/18/smp_affinity

echo 2 > /proc/irq/29/smp_affinity

Kontrola PKTGEN odbywa się za pomocą systemu plików proc. Pliki wynikowe są tworzone w katalogu: /proc/net/pktgen/*. Najlepszym sposobem na konfigurację pakietu PKTGEN jest wspomniana wcześniej metoda poprzez skrypty konfiguracyjne. Zakres parametrów możliwych do wykorzystania jest dość szeroki i pozwala zrealizować właściwie każdą konfigurację generowanego ruchu. Przykładowe skrypty są dostępne z wielu źródeł. Przykład skryptu wysyłającego ruch na adresy IP z zakresu 10.0.50.10-30 może wyglądać następująco:

#!/bin/bash

modprobe pktgen

function pgset() {

local result

echo $1 >$PGDEV

result=`cat $PGDEV | fgrep "Result: OK:"`

if [ "$result" = "" ]; then

cat $PGDEV | fgrep Result:

fi

}

function pg() {

echo inject > $PGDEV

cat $PGDEV

}

Generator pakietów w systemie Linux

Candela LANforge – sposoby zastosowania generatorów ruchu

# Konfiguracja urządzenia sieciowego

PGDEV=/proc/net/pktgen/kpktgend_0

pgset "rem_device_all"

pgset "add_device eth0"

pgset "max_before_softirq 10000"

# Konfiguracja parametrów generowanego ruchu

PGDEV=/proc/net/pktgen/eth0

pgset "clone_skb 0"

pgset "dst_min 10.0.50.10"

pgset "dst_max 10.0.50.30"

# Uruchamiany PKTGEN

PGDEV=/proc/net/pktgen/pgctrl

pgset "start"


TOP 200