14 Ocak 2018 Pazar

ethtool komutu

Giriş
ethtool ağ kartını kontrol etmek için kullanılıyor.

-k seçeneği
Tüm ayarların durumunu görmek için kullanılır.
ethtool -k eth0
-A pause parametrelerini değiştirir
Pause flowcontrol için kullanılır. Şöyle yaparız.
#pause on
ethtool -A eth0 tx on rx on

#auto-negotiation is on
ethtool -A eth0 autoneg on

#restart auto-negotiation
ethtool -r eth0
gso - generic segmentation offload ve generic receive offload
1500 byte'tan daha büyük paketlerin donanımda veya yazılımda bölünmesini kontrol eder. Bu seçenek genelde şöyledir.
generic-segmentation-offload: on
generic-receive-offload: on
Yazılımda bölme yapmak için şöyle yaparız.
ethtool -K eth0 gso off gro off
Şöyle yaparız.
ethtool -K <iface> gso off &&
ethtool -K <iface> tso off &&
ethtool -K <iface> gro off
Kod içinde GSO değerinin on/off olduğu şöyle kontrol edilir.
struct ethtool_value eval;

eval.cmd = ETHTOOL_GGSO;
ifr->ifr_data = (caddr_t)&eval;
err = ioctl(fd, SIOCETHTOOL, ifr);
if (err)
        perror("Cannot get device generic segmentation offload settings");
else {
        gso = eval.data;
        allfail = 0;
}
lro - large receive Offload
Örnek
Şöyle yaparız.
ethtool -K <interface_name> lro on
Örnek
Şöyle yaparız.
// Turn LRO off
ethtool -K eth2 lro off
echo -e “ethtool -K eth2 lro off” >> /etc/rc.local


// Check the result
cat /etc/rc.local
ethtool -k eth2 | grep large-receive-offload
tso - tcp segmentation offload

Örnek ver.

tx ve rx checksum
IP Checksum hesaplamasının donanımda veya yazılımda yapılmasını kontrol eder. Bu seçenek genelde şöyledir.
rx-checksumming: on
tx-checksumming: on
    tx-checksum-ipv4: off [fixed]
    tx-checksum-ip-generic: on
    tx-checksum-ipv6: off [fixed]
    tx-checksum-fcoe-crc: off [fixed]
    tx-checksum-sctp: off [fixed]
Yazılımda yapılması için şöyle yaparız.
$ ethtool --offload eth0 rx off tx off
-S seçeneği
statistics anlamına gelir. LRO sayacını görmek için şöyle yaparız.
ethtool -S <interface_name> | grep lro
-s seçeneği
change anlamına gelir. Şöyle yaparız.
# ethtool -s eth1 speed 1000 duplex full
Kodlama
Yukarıdak kod örneklerinin açıklaması şöyle. ethtool_value yapısı için şu satırı dahil ederiz.
include <linux/ethtool.h>
Bu yapının cmd ve data isimli iki alanı var. cmd alanına komutu yazarız. data alanı 1 = on 0=off değerini alır.

eval nesnesi ifreq nesnesinin ifr_data alanına atanır.
struct ifreq ifr;
struct ethtool_cmd edata;

strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name));
ifr.ifr_data = &edata;
Bazı kodlarda şu şekilde cast görülebilir.
ifr.ifr_data = (caddr_t)&edata;



Hiç yorum yok:

Yorum Gönder