ifconfig源碼分析

來源:互聯網
上載者:User

int main(int argc, char **argv)
{
……
argc--;
argv++;
/*首先判斷以 - 開頭的各種參數,如-a,-s等等*/
while (argc && *argv[0] == '-') {
……
}

開啟核心支援的所有協議的通訊端,主要是一個迴圈調用socket的過程
if ((skfd = sockets_open(0)) < 0) {
perror("socket");
exit(1);
}

/*可能是顯示全部網卡的資訊,或者是顯示單一指定的網卡*/
if (argc == 0) {
int err = if_print((char *) NULL);
(void) close(skfd);
exit(err < 0);
}
/* No. Fetch the interface name. */
spp = argv;
safe_strncpy(ifr.ifr_name, *spp++, IFNAMSIZ);
if (*spp == (char *) NULL) {
int err = if_print(ifr.ifr_name);
(void) close(skfd);
exit(err < 0);
}

/*接著判斷下一個參數,有可能是協議簇名,或者是一個選項,如果是一個選項,則協議簇預設為ipv4*/
if ((ap = get_aftype(*spp)) != NULL)
spp++; /* it was a AF name */
else
ap = get_aftype(DFLT_AF);

if (ap) {
addr_family = ap->af;
skfd = ap->fd;
}

/*做一個迴圈,處理餘下的參數,有兩種情況
1、如果是切換參數,則調用set_flag或clr_flag函數處理
2、如果是功能參數,直接調用ioctl 處理之*/
while (*spp != (char *) NULL) {

}

/*餘下的主要是添加IP地址及餘下的下理,IP地址的添加先利用switch判斷協議簇,然後調用ioctl 處理之……*/
switch (ap->af) {
……
r = ioctl(fd, SIOCSIFADDR, &ifr);
……
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.