.\" This man page is Copyright (C) 1998 Alan Cox. .\" Permission is granted to distribute possibly modified copies .\" of this page provided the header is included verbatim, .\" and in case of nontrivial modification author and date .\" of the modification is added to the header. .\" $Id: ddp.7,v 1.3 1999/05/13 11:33:22 freitag Exp $ .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH DDP 7 2008\-11\-20 Linux "Linux Programmer's Manual" .SH 名前 ddp \- Linux での AppleTalk プロトコルの実装 .SH 書式 \fB#include \fP .br \fB#include \fP .sp \fIddp_socket\fP\fB = socket(AF_APPLETALK, SOCK_DGRAM, 0);\fP .br \fIraw_socket\fP\fB = socket(AF_APPLETALK, SOCK_RAW, \fP\fIprotocol\fP\fB);\fP .SH 説明 Linux は \fIInside Appletalk\fP に記述されている Appletalk プロトコルを実装している。 カーネルにあるのは DDP 層と AARP だけである。これらは \fBnetatalk\fP プロトコルライブラリを通して利用されるように設計されている。 このページは DDP 層を直接利用したいユーザーのために、 インターフェースを記述したものである。 .PP Appletalk とユーザープログラムとの通信には、 BSD 互換のソケットインターフェースを利用する。 ソケットに関するより詳しい情報は \fBsocket\fP(7) を見よ。 .PP Appletalk ソケットは、 ソケットファミリーの引数に \fBAF_APPLETALK\fP を指定して \fBsocket\fP(2) 関数を呼び出すことによって生成される。指定できるソケットタイプは、 \fBddp\fP ソケットをオープンする場合には \fBSOCK_DGRAM\fP、 \fBraw\fP ソケットをオープンする場合には \fBSOCK_RAW\fP である。 \fIprotocol\fP は送受信される Appletalk プロトコルである。 ソケットタイプに \fBSOCK_RAW\fP を指定した場合は、プロトコルに \fBATPROTO_DDP\fP を指定しなければならない。 .PP raw ソケットは実効ユーザー ID が 0 のプロセスか、 \fBCAT_NEW_RAW\fP 権限を持ったプロセスでないとオープンできない。 .SS アドレスのフォーマット Appletalk ソケットアドレスはネットワーク番号・ノード番号・ポート番号の 組み合わせで定義される。 .PP .in +4n .nf 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 */ }; .fi .in .PP .\" FIXME this doesn't make sense [johnl] \fIsat_family\fP は常に \fBAF_APPLETALK\fP に設定する。 \fIsat_port\fP はポートを与える。ポート番号が 129 以下のポートは 「予約ポート (reserved port)」 と呼ばれる。実効ユーザー ID が 0 のプロセスか、 \fBCAP_NET_BIND_SERVICE\fP 権限を持つプロセスだけが、このようなソケットを \fBbind\fP(2) できる。 \fIsat_addr\fP はホストアドレスである。 \fIstruct at_addr\fP のメンバー \fIs_net\fP にはホストのネットワークをネットワークバイトオーダーで与える。値 \fBAT_ANYNET\fP はワイルドカードで、「このネットワーク」も暗黙のうちに含まれる。 \fIstruct at_addr\fP のメンバー \fIs_node\fP にはホストのノード番号を与える。値 \fBAT_ANYNODE\fP はワイルドカードで、「このノード」も暗黙のうちに含まれる。値 \fBATADDR_BCAST\fP はローカルなブロードキャストアドレスである。 .SS ソケットオプション プロトコル固有のソケットオプションはない。 .SS "/proc インタフェース" Appletalk のグローバルパラメータのいくつかは、 \fI/proc\fP インタフェースを通して設定することができる。 これらのパラメータには、 \fI/proc/sys/net/atalk/\fP ディレクトリ内のファイルの読み書きでアクセスできる。 .TP \fIaarp\-expiry\-time\fP AARP キャッシュエントリを破棄するまでのタイムインターバル (秒単位)。 .TP \fIaarp\-resolve\-time\fP AARP キャッシュエントリが解決されるまでのタイムインターバル (秒単位)。 .TP \fIaarp\-retransmit\-limit\fP AARP クエリーの最大再送信回数。この回数を越えると、 そのノードは dead であるとみなされる。 .TP \fIaarp\-tick\-time\fP タイマー動作する AARP のタイマーレート (秒単位) .PP デフォルトの値で仕様にマッチしているので、 変更する必要は全くないはずである。 .SS ioctl .\" FIXME Add a section about multicasting \fBsocket\fP(7) に記述されているすべての ioctl が DDP にも適用される。 .SH エラー .\" FIXME document all errors. We should really fix the kernels to .\" give more uniform error returns (ENOMEM vs ENOBUFS, EPERM vs .\" EACCES etc.) .TP \fBEACCES\fP ユーザが行おうとした操作に必要な権限を持っていない。 broadcast フラグをセットせずにブロードキャストアドレスへ送信を行おうとした、 実効ユーザー ID が 0 でなく、 \fBCAP_NET_BIND_SERVICE\fP 権限のないプロセスで特権ポートをバインドしようとした、などが考えられる。 .TP \fBEADDRINUSE\fP 既に使用されているアドレスにバインドしようとした。 .TP \fBEADDRNOTAVAIL\fP 存在しないインターフェースが要求された。または 要求されたソースアドレスがローカルでない。 .TP \fBEAGAIN\fP 非ブロッキングソケットに対してブロックする操作を行った。 .TP \fBEALREADY\fP 非ブロッキングソケットに対する接続操作が既に実行中である。 .TP \fBECONNABORTED\fP \fBaccept\fP(2) の途中で接続がクローズされた。 .TP \fBEHOSTUNREACH\fP 行き先アドレスにマッチするエントリがルーティングテーブルにない。 .TP \fBEINVAL\fP 渡した引数が不正。 .TP \fBEISCONN\fP 接続済みのソケットに対して \fBconnect\fP(2) が呼ばれた。 .TP \fBEMSGSIZE\fP データグラムが DDP MTU より大きい。 .TP \fBENODEV\fP ネットワークデバイスがない。あるいは IP を送ることができない。 .TP \fBENOENT\fP パケットが到着していないソケットに対して \fBSIOCGSTAMP\fP が呼ばれた。 .TP \fBENOMEM\fP と \fBENOBUFS\fP メモリが足りない。 .TP \fBENOPKG\fP カーネルサブシステムが設定されていない。 .TP \fBENOPROTOOPT\fP と \fBEOPNOTSUPP\fP 無効なソケットオプションが渡された。 .TP \fBENOTCONN\fP 接続されていないソケットに対して、 接続状態でしか定義されていない操作を行おうとした。 .TP \fBEPERM\fP 高い優先度に設定したり、設定を変更したり、 指定したプロセスやグループにシグナルを送るのに必要な権限を ユーザが持っていない。 .TP \fBEPIPE\fP 接続が接続相手によって、予期しないやり方でクローズまたはシャットダウンされた。 .TP \fBESOCKTNOSUPPORT\fP ソケットが設定されていない。または未知のソケットタイプが要求された。 .SH バージョン Appletalk は Linux 2.0 以降でサポートされている。 \fI/proc\fP インタフェースは Linux 2.2 以降に存在する。 .SH 注意 \fBSO_BROADCAST\fP オプションを用いる時には慎重の上にも慎重になってほしい。 Linux ではこれに特権を必要としない。 不注意にブロードキャストアドレスに送信を行うと、 ネットワークの状態が簡単に変更されてしまう。 .SS 移植性 基本的な Appletalk ソケットインターフェースは BSD 由来のシステムにおける \fBnetatalk\fP と互換性がある。多くの BSD システムでは、 ブロードキャストフレームを送信しようとしたときの \fBSO_BROADCAST\fP のチェックに失敗する。これは互換性の問題となるかもしれない。 .PP raw ソケットモードは Linux 独特のもので、もう一方の実装である CAP パッケージや、 Appletalk モニタツールをより簡単に実装できるようになる。 .SH バグ エラーの値がまったく首尾一貫していない。 .PP ルーティングテーブル・デバイス・ AARP テーブル・その他のデバイスを 設定するために用いられる ioctl がまだ記述されていない。 .SH 関連項目 \fBrecvmsg\fP(2), \fBsendmsg\fP(2), \fBcapabilities\fP(7), \fBsocket\fP(7) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。