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)
[中 文 版 維 護 人 ]
徐 明 <xuming [AT] iname.com>
[中 文 版 最 新 更 新 ]
2000/10/15
第 一 版
2001/11/24 第 一 次 修
訂
《 中 國 linux論 壇 man手 冊 頁 翻 譯 計 劃 》 :
跋
本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh