Manpages

名 前

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_DGRAMraw ソ ケ ッ ト を オ ー プ ン す る 場 合 に は 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 を 送 る こ と が で き な い 。

ENOENT パ ケ ッ ト が 到 着 し て い な い ソ ケ ッ ト に 対 し

SIOCGSTAMP が 呼 ば れ た 。

ENOMEMENOBUFS メ モ リ ー が 足 り な い 。

ENOPKG カ ー ネ ル サ ブ シ ス テ ム が 設 定 さ れ て い な い 。

ENOPROTOOPTEOPNOTSUPP 無 効 な ソ ケ ッ ト オ プ シ ョ ン が 渡 さ れ た 。
ENOTCONN
接 続 さ れ て い な い ソ ケ ッ ト に 対 し て 、 接 続 状 態 で し か 定 義 さ れ て い な い 操 作 を 行 お う と し た 。

EPERM 高 い 優 先 度 に 設 定 し た り 、 設 定 を 変 更 し た り 、 指 定 し た プ ロ セ ス や グ ル ー プ に シ グ ナ ル を 送 る の に 必 要 な 権 限 を ユ ー ザ ー が 持 っ て い な い 。

EPIPE 接 続 が 接 続 相 手 に よ っ て 、 予 期 し な い や り 方 で ク ロ ー ズ ま た は シ ャ ッ ト ダ ウ ン さ れ た 。

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/ に 書 か れ て い る 。