'\" t .\" Don't change the first line, it tells man that tbl is needed. .\" This man page is Copyright (C) 1999 Andi Kleen . .\" Permission is granted to distribute possibly modified copies .\" of this page provided the header is included verbatim, .\" and in case of nontrivial modification author and date .\" of the modification is added to the header. .TH NETDEVICE 7 "2 May 1999" "Linux Man Page" "Linux Programmer's Manual" .SH NAME netdevice \- 底層訪問 Linux 網絡設備. .SH "總覽 (SYNOPSIS)" .B "#include " .br .B "#include " .SH "描述 (DESCRIPTION)" 本手冊 描述 用於 配置 網絡設備 的 套接字(socket) 接口. Linux 支持 一些 配置 網絡設備 的 標準 ioctl. 他們 用於 任意的 套接字 描述符, 而 無須 瞭解 其 類型 或 系列. 他們 傳遞 一個 .B ifreq 結構: .nf .ta 4 20 42 struct ifreq { char ifr_name[IFNAMSIZ]; /* Interface name */ union { struct sockaddr ifr_addr; struct sockaddr ifr_dstaddr; struct sockaddr ifr_broadaddr; struct sockaddr ifr_netmask; struct sockaddr ifr_hwaddr; short ifr_flags; int ifr_ifindex; int ifr_metric; int ifr_mtu; struct ifmap ifr_map; char ifr_slave[IFNAMSIZ]; char ifr_newname[IFNAMSIZ]; char * ifr_data; }; } struct ifconf { int ifc_len; /* size of buffer */ union { char * ifc_buf; /* buffer address */ struct ifreq *ifc_req; /* array of structures */ }; }; .ta .fi 一般說來, ioctl 通過 把 .B ifr_name 設置爲 接口 的 名字 來 指定 將要 操作 的 設備. 結構的 其他成員 可以 分享 內存. .SH IOCTLS 如果 某個 ioctl 標記爲 特權操作, 那麼 操作時 需要 有效uid 爲 0, 或者 擁有 .B CAP_NET_ADMIN 能力. 否則 將 返回 .B EPERM . .TP .B SIOCGIFNAME 給定 .BR ifr_ifindex, 返回 .BR ifr_name 中 的 接口名字. 這是 唯一 返回 .BR ifr_name 內容 的 ioctl. .TP .B SIOCGIFINDEX 把 接口 的 索引 存入 .BR ifr_ifindex . .TP .BR SIOCGIFFLAGS ", " SIOCSIFFLAGS 讀取 或 設置 設備的 活動標誌字. .B ifr_flags 包含 下列值 的 屏蔽位: .TS tab(:); c s l l. 設備標誌 IFF_UP: 接口正在運行. IFF_BROADCAST: 有效的廣播地址集. IFF_DEBUG: 內部調試標誌. IFF_LOOPBACK: 這是自環接口. IFF_POINTOPOINT: 這是點到點的鏈路接口. IFF_RUNNING: 資源已分配. IFF_NOARP: 無arp協議, 沒有設置第二層目的地址. IFF_PROMISC: 接口爲雜湊(promiscuous)模式. IFF_NOTRAILERS: 避免使用trailer . IFF_ALLMULTI: 接收所有組播(multicast)報文. IFF_MASTER: 主負載平衡羣(bundle). IFF_SLAVE: 從負載平衡羣(bundle). IFF_MULTICAST: 支持組播(multicast). IFF_PORTSEL: 可以通過ifmap選擇介質(media)類型. IFF_AUTOMEDIA: 自動選擇介質. IFF_DYNAMIC: 接口關閉時丟棄地址. .TE 設置 活動標誌字 是 特權操作, 但是 任何進程 都可以 讀取 標誌字. .TP .BR SIOCGIFMETRIC ", " SIOCSIFMETRIC 使用 .BR ifr_metric 讀取 或 設置 設備的 metric 值. 該功能 目前 還沒有 實現. 讀取操作 使 .B ifr_metric 置 0, 而 設置操作 則 返回 .B EOPNOTSUPP. .TP .BR SIOCGIFMTU ", " SIOCSIFMTU 使用 .BR ifr_mtu 讀取 或 設置 設備的 MTU(最大傳輸單元). 設置 MTU 是 特權操作. 過小的 MTU 可能 導致 內核 崩潰. .TP .BR SIOCGIFHWADDR ", " SIOCSIFHWADDR 使用 .BR ifr_hwaddr 讀取 或 設置 設備的 硬件地址. 設置 硬件地址 是 特權操作. .TP .B SIOCSIFHWBROADCAST 使用 .BR ifr_hwaddr 讀取 或 設置 設備的 硬件廣播地址. 這是個 特權操作. .TP .BR SIOCGIFMAP ", " SIOCSIFMAP 使用 .BR ifr_map 讀取 或 設置 接口的 硬件參數. 設置 這個參數 是 特權操作. .nf .ta 4 20 42 struct ifmap { unsigned long mem_start; unsigned long mem_end; unsigned short base_addr; unsigned char irq; unsigned char dma; unsigned char port; }; .ta .fi 對 ifmap 結構 的 解釋 取決於 設備驅動程序 和 體系結構. .TP .BR SIOCADDMULTI ", " SIOCDELMULTI 使用 .BR ifr_hwaddr 在 設備的 鏈路層 組播過濾器 (multicase filter) 中 添加 或 刪除 地址. 這些是 特權操作. 參看 .BR packet (7) . .TP .BR SIOCGIFTXQLEN ", " SIOCSIFTXQLEN 使用 .BR ifr_qlen 讀取 或 設置 設備的 傳輸隊列長度. 設置 傳輸隊列長度 是 特權操作. .TP .B SIOCSIFNAME 把 .BR ifr_ifindex 中 指定的 接口名字 改成 .BR ifr_newname . 這是個 特權操作. .TP .B SIOCGIFCONF 返回 接口地址(傳輸層) 列表. 出於 兼容性, 目前 只代表 AF_INET 地址. 用戶 傳送 一個 .B ifconf 結構 作爲 ioctl 的 參數. 其中 .B ifc_req 包含 一個 指針 指向 .I ifreq 結構數組, 他的 長度 以字節 爲單位 存放在 .B ifc_len 中. 內核 用 所有 當前的 L3(第三層?) 接口地址 填充 ifreqs, 這些 接口 正在 運行: .I ifr_name 存放 接口名字 (eth0:1等), .I ifr_addr 存放 地址. 內核 在 .I ifc_len 中 返回 實際長度; 如果 他 等於 初始長度, 表示 溢出了, 用戶 應該 換一個 大些的 緩衝區 重試 一下. 沒有 發生 錯誤時 ioctl 返回 0, 否則 返回 -1, 溢出 不算 錯誤. \" XXX Slaving isn't supported in 2.2 .\" .TP .\" .BR SIOCGIFSLAVE ", " SIOCSIFSLAVE .\" Get or set the slave device using .\" .BR ifr_slave . .\" Setting the slave device is a privileged operation. .PP .\" XXX add amateur radio stuff. .PP 大多數 協議 使用 自己的 ioctl 配置 協議 特定的 接口 操作. 具體 情況 參看 協議的 幫助手冊. 要配置 IP 地址 可以 參看 .BR ip (7). .PP 另外, 某些 設備 有 專用的 ioctl, 這裏 不做 敘述. .SH "注意 (NOTE)" 嚴格說來 .B SIOCGIFCONF 是 專門 針對 IP 的, 它 屬於 .BR ip (7). .SH "注意 (NOTE)" 可以 通過 .I /proc/net/dev 看到 沒有 地址 或 沒有 .B IFF_RUNNING 標誌 的 接口名字. .SH "另見 (SEE ALSO)" .BR ip "(7), " proc "(7)" .SH "[中文版維護人]" .B 徐明 .SH "[中文版最新更新]" .B 2000/10/15 第一版 .br .BR 2001/11/24 第一次修訂 .SH "《中國linux論壇man手冊頁翻譯計劃》:" .BI http://cmpp.linuxforum.net .SH "跋" .br 本頁面中文版由中文 man 手冊頁計劃提供。 .br 中文 man 手冊頁計劃:\fBhttps://github.com/man-pages-zh/manpages-zh\fR