/proc/net/devファイルはどのように入力されますか?

/proc/net/devファイルはどのように入力されますか?

そこで、ローカルネットワークインタフェースに関する統計が必要なカーネルモジュールを書いていますが、次のようなコードを思いつきました。ワイヤレスデバイスの統計情報を読み取ろうとする部分を除いて、すべてがうまく機能します。構造が満たされていません。設定されていないwireless_handlerからですか…私の問題ですか?ワイヤレス統計はCONFIG_WIRELESS_EXTどこで入手できますか?ifconfig

struct net_device *dev;
struct net_device_stats *stats;             
struct iw_statistics *wi_stats;
dev = first_net_device(&init_net);
while (dev)
{
    if (strncmp(dev->name , "wlan",4)==0 && (dev->flags & IFF_UP) == 1)
            {

        #ifndef CONFIG_WIRELESS_EXT
        wi_stats = dev -> wireless_handlers -> get_wireless_stats(dev);
        #endif      
        }
        else if (strncmp(dev->name , "eth",3)==0 || strncmp(dev->name , "lo",2)==0) 
            {
        stats = dev->netdev_ops->ndo_get_stats(dev);
        printk(KERN_INFO "recive packets: [%li]\ntransmitted packets: [%li]\nrecive errors: [%li]\ntransmission errors: [%li]\nnumber of collisions: [%li]", 
                stats->rx_packets , stats->tx_packets ,stats->rx_errors , stats->tx_errors, stats->collisions);
            }

    dev = next_net_device(dev);
}//end while

ベストアンサー1

を使用すると、次のことを行うことができますstraceiwconfig

socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
ioctl(3, SIOCGIWNAME, 0xbfb02c7c)       = 0
ioctl(3, SIOCGIWNWID, 0xbfb02c7c)       = -1 EOPNOTSUPP (Operation not supported)
ioctl(3, SIOCGIWFREQ, 0xbfb02c7c)       = -1 EINVAL (Invalid argument)
ioctl(3, SIOCGIWENCODE, 0xbfb02c7c)     = 0

その後に12人程度がioctl続いた。ioctlカーネルでこれらの項目を追跡すると、データがどこにあるかを確認できます。

おすすめ記事