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 dummy0
kö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 .
ip link
bayraklara sahip olduğunu bildirenBROADCAST,MULTICAST,UP,LOWER_UP
ancak 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ışıyorumsubprocess.call('ip link show | grep eth0'.split()).split()
.