Manpages

NAME

netdevice - 底 層 訪 問 Linux 網 絡 設 備 .

總 覽 (SYNOPSIS)

#include <sys/ioctl.h>
#include <net/if.h>

描 述 (DESCRIPTION)

本 手 冊 描 述 用 於 配 置 網 絡 設 備 的 套 接 字 (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 設 置 爲 接 口 的 名 字 來 指 定 將 要 操 作 的 設 備 . 結 構 的 其 他 成 員 可 以 分 享 內 存 .

IOCTLS

如 果 某 個 ioctl 標 記 爲 特 權 操 作 , 那 麼 操 作 時 需 要 有 效 uid 爲 0, 或 者 擁 有 CAP_NET_ADMIN 能 力 . 否 則 將 返 回 EPERM .

SIOCGIFNAME 給 定 ifr_ifindex, 返 回 ifr_name 中 的 接 口 名 字 . 這 是 唯 一 返 回 ifr_name 內 容 的 ioctl.
SIOCGIFINDEX
把 接 口 的 索 引 存 入 ifr_ifindex.
SIOCGIFFLAGS
, SIOCSIFFLAGS 讀 取 或 設 置 設 備 的 活 動 標 誌 字 . ifr_flags 包 含 下 列 值 的 屏 蔽 位 :

設 置 活 動 標 誌 字 是 特 權 操 作 , 但 是 任 何 進 程 都 可 以 讀 取 標 誌 字 .

SIOCGIFMETRIC, SIOCSIFMETRIC 使 用 ifr_metric 讀 取 或 設 置 設 備 的 metric 值 . 該 功 能 目 前 還 沒 有 實 現 . 讀 取 操 作 使 ifr_metric 置 0, 而 設 置 操 作 則 返 回 EOPNOTSUPP.
SIOCGIFMTU
, SIOCSIFMTU 使 用 ifr_mtu 讀 取 或 設 置 設 備 的 MTU(最 大 傳 輸 單 元 ). 設 置 MTU 是 特 權 操 作 . 過 小 的 MTU 可 能 導 致 內 核 崩 潰 .
SIOCGIFHWADDR
, SIOCSIFHWADDR 使 用 ifr_hwaddr 讀 取 或 設 置 設 備 的 硬 件 地 址 . 設 置 硬 件 地 址 是 特 權 操 作 .
SIOCSIFHWBROADCAST
使 用 ifr_hwaddr 讀 取 或 設 置 設 備 的 硬 件 廣 播 地 址 . 這 是 個 特 權 操 作 .
SIOCGIFMAP
, SIOCSIFMAP 使 用 ifr_map 讀 取 或 設 置 接 口 的 硬 件 參 數 . 設 置 這 個 參 數 是 特 權 操 作 .

struct ifmap
{

unsigned long

mem_start;

unsigned long

mem_end;

unsigned short

base_addr;

unsigned char

irq;

unsigned char

dma;

unsigned char

port; }; 對

ifmap 結 構 的 解 釋 取 決 於 設 備 驅 動 程 序 和 體 系 結 構 .

SIOCADDMULTI, SIOCDELMULTI 使 用 ifr_hwaddr 在 設 備 的 鏈 路 層 組 播 過 濾 器 (multicase filter) 中 添 加 或 刪 除 地 址 . 這 些 是 特 權 操 作 . 參 看 packet(7).
SIOCGIFTXQLEN
, SIOCSIFTXQLEN 使 用 ifr_qlen 讀 取 或 設 置 設 備 的 傳 輸 隊 列 長 度 . 設 置 傳 輸 隊 列 長 度 是 特 權 操 作 .
SIOCSIFNAME
ifr_ifindex 中 指 定 的 接 口 名 字 改 成 ifr_newname. 這 是 個 特 權 操 作 .
SIOCGIFCONF
返 回 接 口 地 址 (傳 輸 層 ) 列 表 . 出 於 兼 容 性 , 目 前 只 代 表 AF_INET 地 址 . 用 戶 傳 送 一 個 ifconf 結 構 作 爲 ioctl 的 參 數 . 其 中 ifc_req 包 含 一 個 指 針 指 向 ifreq 結 構 數 組 , 他 的 長 度 以 字 節 爲 單 位 存 放 在 ifc_len 中 . 內 核 用 所 有 當 前 的 L3(第 三 層 ?) 接 口 地 址 填 充 ifreqs, 這 些 接 口 正 在 運 行 : ifr_name 存 放 接 口 名 字 (eth0:1等 ), ifr_addr 存 放 地 址 . 內 核 在 ifc_len 中 返 回 實 際 長 度 ; 如 果 他 等 於 初 始 長 度 , 表 示 溢 出 了 , 用 戶 應 該 換 一 個 大 些 的 緩 衝 區 重 試 一 下 . 沒 有 發 生 錯 誤 時 ioctl 返 回 0, 否 則 返 回 -1, 溢 出 不 算 錯 誤 . 大 多 數 協 議 使 用 自 己 的 ioctl 配 置 協 議 特 定 的 接 口 操 作 . 具 體 情 況 參 看 協 議 的 幫 助 手 冊 . 要 配 置 IP 地 址 可 以 參 看 ip(7). 另 外 , 某 些 設 備 有 專 用 的 ioctl, 這 裏 不 做 敘 述 .

注 意 (NOTE)

嚴 格 說 來 SIOCGIFCONF 是 專 門 針 對 IP 的 , 它 屬 於 ip(7).

注 意 (NOTE)

可 以 通 過 /proc/net/dev 看 到 沒 有 地 址 或 沒 有 IFF_RUNNING 標 誌 的 接 口 名 字 .

另 見 (SEE ALSO)

ip(7), proc(7)

[中 文 版 維 護 人 ]

徐 明 <xuming [AT] iname.com>

[中 文 版 最 新 更 新 ]

2000/10/15 第 一 版
2001/11/24
第 一 次 修 訂

《 中 國 linux論 壇 man手 冊 頁 翻 譯 計 劃 》 :

http://cmpp.linuxforum.net

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh