名 前
ddp − Linux で の AppleTalk プ ロ ト コ ル の 実 装
書 式
#include
<sys/socket.h>
#include <netatalk/at.h>
ddp_socket
= socket(AF_APPLETALK, SOCK_DGRAM, 0);
raw_socket = socket(AF_APPLETALK, SOCK_RAW,
protocol);
説 明
Linux は Inside AppleTalk に 記 述 さ れ て い る AppleTalk プ ロ ト コ ル を 実 装 し て い る 。 カ ー ネ ル に あ る の は DDP 層 と AARP だ け で あ る 。 こ れ ら は netatalk プ ロ ト コ ル ラ イ ブ ラ リ を 通 し て 利 用 さ れ る よ う に 設 計 さ れ て い る 。 こ の ペ ー ジ は DDP 層 を 直 接 利 用 し た い ユ ー ザ ー の た め に 、 イ ン タ ー フ ェ ー ス を 記 述 し た も の で あ る 。
AppleTalk と ユ ー ザ ー プ ロ グ ラ ム と の 通 信 に は 、 BSD 互 換 の ソ ケ ッ ト イ ン タ ー フ ェ ー ス を 利 用 す る 。 ソ ケ ッ ト に 関 す る よ り 詳 し い 情 報 は socket(7) を 見 よ 。
AppleTalk ソ ケ ッ ト は 、 ソ ケ ッ ト フ ァ ミ リ ー の 引 数 に AF_APPLETALK を 指 定 し て socket(2) 関 数 を 呼 び 出 す こ と に よ っ て 生 成 さ れ る 。 指 定 で き る ソ ケ ッ ト タ イ プ は 、 ddp ソ ケ ッ ト を オ ー プ ン す る 場 合 に は SOCK_DGRAM、 raw ソ ケ ッ ト を オ ー プ ン す る 場 合 に は SOCK_RAW で あ る 。 protocol は 送 受 信 さ れ る AppleTalk プ ロ ト コ ル で あ る 。 ソ ケ ッ ト タ イ プ に SOCK_RAW を 指 定 し た 場 合 は 、 プ ロ ト コ ル に ATPROTO_DDP を 指 定 し な け れ ば な ら な い 。
raw ソ
ケ ッ ト は 実 効
ユ ー ザ ー ID が 0 の
プ ロ セ ス か 、
CAT_NEW_RAW 権 限 を 持
っ た プ ロ セ ス
で な い と オ ー
プ ン で き な い
。 ア ド レ ス の
フ ォ ー マ ッ ト
AppleTalk ソ ケ ッ ト ア
ド レ ス は ネ ッ
ト ワ ー ク 番 号
、 ノ ー ド 番 号
、 ポ ー ト 番 号
の 組 み 合 わ せ
で 定 義 さ れ る
。
struct at_addr
{
unsigned short s_net;
unsigned char s_node; };
struct
sockaddr_atalk {
sa_family_t sat_family; /* address family */
unsigned char sat_port; /* port */
struct at_addr sat_addr; /* net/node */ };
sat_family は 常 に AF_APPLETALK に 設 定 す る 。 sat_port は ポ ー ト を 与 え る 。 ポ ー ト 番 号 が 129 以 下 の ポ ー ト は 「 予 約 ポ ー ト (reserved port)」 と 呼 ば れ る 。 実 効 ユ ー ザ ー ID が 0 の プ ロ セ ス か 、 CAP_NET_BIND_SERVICE 権 限 を 持 つ プ ロ セ ス だ け が 、 こ の よ う な ソ ケ ッ ト を bind(2) で き る 。 sat_addr は ホ ス ト ア ド レ ス で あ る 。 struct at_addr の メ ン バ ー s_net に は ホ ス ト の ネ ッ ト ワ ー ク を ネ ッ ト ワ ー ク バ イ ト オ ー ダ ー で 与 え る 。 値 AT_ANYNET は ワ イ ル ド カ ー ド で 、 「 こ の ネ ッ ト ワ ー ク 」 も 暗 黙 の う ち に 含 ま れ る 。 struct at_addr の メ ン バ ー s_node に は ホ ス ト の ノ ー ド 番 号 を 与 え る 。 値 AT_ANYNODE は ワ イ ル ド カ ー ド で 、 「 こ の ノ ー ド 」 も 暗 黙 の う ち に 含 ま れ る 。 値 ATADDR_BCAST は ロ ー カ ル な ブ ロ ー ド キ ャ ス ト ア ド レ ス で あ る 。 ソ ケ ッ ト オ プ シ ョ ン プ ロ ト コ ル 固 有 の ソ ケ ッ ト オ プ シ ョ ン は な い 。
/proc
イ ン タ ー フ ェ
ー ス
Appletalk の グ ロ ー バ
ル パ ラ メ ー タ
ー の い く つ か
は 、 /proc イ ン タ
ー フ ェ ー ス を
通 し て 設 定 す
る こ と が で き
る 。 こ れ ら の
パ ラ メ ー タ ー
に は 、 /proc/sys/net/atalk/
デ ィ レ ク ト リ
内 の フ ァ イ ル
の 読 み 書 き で
ア ク セ ス で き
る 。
aarp−expiry−time
AARP キ ャ ッ シ ュ エ ン ト リ ー を 破 棄 す る ま で の タ イ ム イ ン タ ー バ ル (秒 単 位 )。
aarp−resolve−time
AARP キ ャ ッ シ ュ エ ン ト リ ー が 解 決 さ れ る ま で の タ イ ム イ ン タ ー バ ル (秒 単 位 )。
aarp−retransmit−limit
AARP ク エ リ ー の 最 大 再 送 信 回 数 。 こ の 回 数 を 越 え る と 、 そ の ノ ー ド は dead で あ る と み な さ れ る 。
aarp−tick−time タ イ マ ー 動 作 す る AARP の タ イ マ ー レ ー ト (秒 単 位 ) デ フ ォ ル ト の 値 で 仕 様 に マ ッ チ し て い る の で 、 変 更 す る 必 要 は 全 く な い は ず で あ る 。
ioctl
socket(7) に 記 述 さ れ
て い る す べ て
の ioctl が DDP に も 適
用 さ れ る 。
エ ラ ー
EACCES ユ ー ザ ー が 行 お う と し た 操 作 に 必 要 な 権 限 を 持 っ て い な い 。 broadcast |
フ ラ グ を セ ッ ト せ ず に ブ ロ ー ド キ ャ ス ト ア ド レ ス へ 送 信 を 行 お う と し た 、 実 効 ユ ー ザ ー ID が 0 で な く 、 CAP_NET_BIND_SERVICE 権 限 の な い プ ロ セ ス で 特 権 ポ ー ト を バ イ ン ド し よ う と し た 、 な ど が 考 え ら れ る 。
EADDRINUSE 既
に 使 用 さ れ て
い る ア ド レ ス
に バ イ ン ド し
よ う と し た 。
EADDRNOTAVAIL 存 在 し な
い イ ン タ ー フ
ェ ー ス が 要 求
さ れ た 。 ま た
は 要 求 さ れ た
ソ ー ス ア ド レ
ス が ロ ー カ ル
で な い 。
EAGAIN 非 ブ ロ ッ キ ン グ ソ ケ ッ ト に 対 し て ブ ロ ッ ク す る 操 作 を 行 っ た 。 |
EALREADY 非
ブ ロ ッ キ ン グ
ソ ケ ッ ト に 対
す る 接 続 操 作
が 既 に 実 行 中
で あ る 。
ECONNABORTED
accept(2) の 途 中 で 接 続 が ク ロ ー ズ さ れ た 。
EHOSTUNREACH 行 き 先 ア ド レ ス に マ ッ チ す る エ ン ト リ ー が ル ー テ ィ ン グ テ ー ブ ル に な い 。
EINVAL 渡 し た 引 数 が 不 正 。 |
EISCONN 接
続 済 み の ソ ケ
ッ ト に 対 し て
connect(2) が 呼 ば れ
た 。
EMSGSIZE デ ー タ グ ラ
ム が DDP MTU よ り 大
き い 。
ENODEV ネ ッ ト ワ ー ク デ バ イ ス が な い 。 あ る い は |
IP を 送 る こ と が で き な い 。 て SIOCGSTAMP が 呼 ば れ た 。 ENOMEM と ENOBUFS メ モ リ ー が 足 り な い 。
ENOPROTOOPT と
EOPNOTSUPP 無 効 な ソ
ケ ッ ト オ プ シ
ョ ン が 渡 さ れ
た 。
ESOCKTNOSUPPORT ソ ケ ッ ト が 設 定 さ れ て い な い 。 ま た は 未 知 の ソ ケ ッ ト タ イ プ が 要 求 さ れ た 。 バ ー ジ ョ ンAppleTalk は Linux 2.0 以 降 で サ ポ ー ト さ れ て い る 。 /proc イ ン タ ー フ ェ ー ス は Linux 2.2 以 降 に 存 在 す る 。 注 意SO_BROADCAST オ プ シ ョ ン を 用 い る 時 に は 慎 重 の 上 に も 慎 重 に な っ て ほ し い 。 Linux で は こ れ に 特 権 を 必 要 と し な い 。 不 注 意 に ブ ロ ー ド キ ャ ス ト ア ド レ ス に 送 信 を 行 う と 、 ネ ッ ト ワ ー ク の 状 態 が 簡 単 に 変 更 さ れ て し ま う 。 移 植 性 基 本 的 な Appletalk ソ ケ ッ ト イ ン タ ー フ ェ ー ス は BSD 由 来 の シ ス テ ム に お け る netatalk と 互 換 性 が あ る 。 多 く の BSD シ ス テ ム で は 、 ブ ロ ー ド キ ャ ス ト フ レ ー ム を 送 信 し よ う と し た と き の SO_BROADCAST の チ ェ ッ ク に 失 敗 す る 。 こ れ は 互 換 性 の 問 題 と な る か も し れ な い 。 raw ソ ケ ッ ト モ ー ド は Linux 独 特 の も の で 、 も う 一 方 の 実 装 で あ る CAP パ ッ ケ ー ジ や 、 Appletalk モ ニ タ ツ ー ル を よ り 簡 単 に 実 装 で き る よ う に な る 。 バ グエ ラ ー の 値 が ま っ た く 首 尾 一 貫 し て い な い 。 ル ー テ ィ ン グ テ ー ブ ル 、 デ バ イ ス 、 AARP テ ー ブ ル 、 そ の 他 の デ バ イ ス を 設 定 す る た め に 用 い ら れ る ioctl が ま だ 記 述 さ れ て い な い 。 関 連 項 目recvmsg(2), sendmsg(2), capabilities(7), socket(7) こ の 文 書 に つ い てこ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。 |