İproute2'nin 'ip link show', link durumunu nasıl belirler?


3

Böyle ip link showrapor eden bir ağ arayüzüm var :

3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default 
    link/ether 02:42:43:e6:b1:e7 brd ff:ff:ff:ff:ff:ff

Ancak şunu /sys/class/net/docker0/flagssöylüyor:

$ cat /sys/class/net/docker0/flags 
    0x1003

Ayarlanır üç parçalarıdır IFF_MULTICAST, IFF_BROADCASTve IFF_UP. Bu UP olan bir arayüz gibi görünüyor. Neden ip linkrapor veriyor state DOWN?

Sistem Linux 4.15 / Ubuntu 18.04'tür.

Yanıtlar:


2

Ayarlanan üç bit, IFF_MULTICAST, IFF_BROADCAST ve IFF_UP. Bu UP olan bir arayüz gibi görünüyor

Ve bu gerçek bayrak çıktısına çok iyi uyuyor :

3: liman işçisi0: <TAŞIYICI, YAYIN, ÇOKLU, YUKARI >
                           ↑ ↑ ↑

İp link raporu neden AŞAĞI durumunu gösteriyor?

Bu farklı bir devlet.

  • IFF_UP bayrağı (yukarıda "<UP>" olarak gösterilmiştir) , üzerinden ayarlayabileceğiniz manuel düğme olan idari durumu açıklar ip link set eth0 up.

  • Öte yandan, "devlet [...]" Metin açıklanır operasyonel arayüz olup olmadığını belirtir devlet, yetenekli çalışma.

Operasyonel durum kabaca 'taşıyıcı' mevcudiyetiyle aynıdır - örneğin, tamamen kurulmuş Ethernet bağlantısı veya ile ilişkili Wi-Fi erişim noktası. Üye limanlarından en az birinin yukarı kalması durumunda bir köprünün yukarı kaldırıldığı (taşıyıcıya sahip) olduğu bildirilmektedir . Bu nedenle dummy0köprü üyesi olarak bir arayüz eklemek isteyebilirsiniz .

Operasyonel durum kabaca bayraklara karşılık gelir IFF_LOWER_UP(bayrak alanında "<LOWER_UP>" olarak gösterilir) ve IFF_RUNNING(onun örneğinde sözde bayrak "<NO-CARRIER>" olarak gösterilmez). ( kaynak kodu )

Bununla birlikte, iproute araçları arabirim bilgisini Netlink aracılığıyla elde eder ve state …bölüm IFLA_OPERSTATE netlink niteliğine göre yazdırılır . ( kaynak kodu )

Bu özelliğe sysfs aracılığıyla da erişilebilir …/operstate. Linux belgelerinin bu bayrakların ve özniteliklerin operstates.txt dosyasında daha ayrıntılı bir açıklaması vardır .


Açıklama için teşekkürler. Ayrıca ip linkbayraklara sahip olduğunu bildiren BROADCAST,MULTICAST,UP,LOWER_UPancak sysfs'in 0x1003 bayraklarına sahip olduğunu gösteren (yukarıdaki docker0 arayüzüyle aynı) bir ethernet arayüzüne de sahibim. Sanırım tutarsızlık iproute araçlarının sysfs kullanmamasından kaynaklanıyor. Operasyonel bağlantı durumunu sysfs'den çıkarmayı denemek mantıklı mıdır yoksa başka bir arayüz kullanmak gerekli midir? Bunu python ile yapıyorum ve kaçınmaya çalışıyorum subprocess.call('ip link show | grep eth0'.split()).split().
Tom

Bah, boşver, /sys/class/net/eth0/operstateşimdi kendi başıma buldum ...
Tom

1
@ Tom: operstatesysfs niteliğini kullanın . Bir rtnetlink python modülü kullanın. (IFF_LOWER_UP yalnızca sysfs aracılığıyla değil, netlink aracılığıyla bildirildiğine dair ufak bir kuşku duyuyorum.) Gerekirse kullanın ip -json link show | jq ".[]|.operstate"...
Grawity
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.