【Busybox】ifconfig 摘錄


摘錄busybox裡面ifconfig(networking/interface.c)的source code。看起來也是去讀/proc/net/dev這個檔之後再去抓它裡面的一些資料。另外目前我是抓最新的版本,已經把user_net_device_stats的rx_packetse宣告成
unsigned long long,看來應該不會有超過4G會歸零的問題了。

關於如何利用ifconfig讀取網路device的資料,可以特別注意下列function的使用

  • if_readlist_proc:用來parse /proc/net/dev
  • add_interface:加dev到link list
  • get_dev_fields: 將/proc/net/dev作正規畫處理
#define _PATH_PROCNET_DEV               "/proc/net/dev"

static int if_readlist_proc(char *target)
{
    ....
        fh = fopen_or_warn(_PATH_PROCNET_DEV, "r");
        if (!fh) {
                return if_readconf();
        }
        fgets(buf, sizeof buf, fh);     /* eat line */
        fgets(buf, sizeof buf, fh);

        procnetdev_vsn = procnetdev_version(buf);

        err = 0;
        while (fgets(buf, sizeof buf, fh)) {
                char *s, name[128];

                s = get_name(name, buf);
                ife = add_interface(name);
                get_dev_fields(s, ife, procnetdev_vsn);
                ife->statistics_valid = 1;
                if (target && !strcmp(target, name))
                        break;
        }
    ....
}
 

Ed32. Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com