NETDEVICE(7) | Linux Programmer's Manual | NETDEVICE(7) |
netdevice - 底層訪問 Linux 網路裝置.
#include <sys/ioctl.h>
#include <net/if.h>
本手冊 描述 用於 配置 網路裝置 的 套接字(socket) 介面.
Linux 支援 一些 配置 網路裝置 的 標準 ioctl. 他們 用於 任意的 套接字 描述符, 而 無須 瞭解 其 型別 或 系列. 他們 傳遞 一個 ifreq 結構:
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 */ }; };
一般說來, ioctl 透過 把 ifr_name 設定為 介面 的 名字 來 指定 將要 操作 的 裝置. 結構的 其他成員 可以 分享 記憶體.
如果 某個 ioctl 標記為 特權操作, 那麼 操作時 需要 有效uid 為 0, 或者 擁有 CAP_NET_ADMIN 能力. 否則 將 返回 EPERM .
裝置標誌 | |
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 | 介面關閉時丟棄地址. |
設定 活動標誌字 是 特權操作, 但是 任何程序 都可以 讀取 標誌字.
struct ifmap { unsigned long mem_start; unsigned long mem_end; unsigned short base_addr; unsigned char irq; unsigned char dma; unsigned char port; };
對 ifmap 結構 的 解釋 取決於 裝置驅動程式 和 體系結構.
大多數 協議 使用 自己的 ioctl 配置 協議 特定的 介面 操作. 具體 情況 參看 協議的 幫助手冊. 要配置 IP 地址 可以 參看 ip(7).
另外, 某些 裝置 有 專用的 ioctl, 這裡 不做 敘述.
嚴格說來 SIOCGIFCONF 是 專門 針對 IP 的, 它 屬於 ip(7).
可以 透過 /proc/net/dev 看到 沒有 地址 或 沒有 IFF_RUNNING 標誌 的 介面名字.
ip(7), proc(7)
徐明 <xuming@iname.com>
2000/10/15 第一版
2001/11/24 第一次修訂
http://cmpp.linuxforum.net
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
2 May 1999 | Linux Man Page |