DDP
Section: Linux Programmer's Manual (7)
Updated: 1999-05-01
Index
JM Home Page
roff page
名前
ddp - Linux での AppleTalk プロトコルの実装
書式
#include <sys/socket.h>
#include <netatalk/at.h>
ddp_socket = socket(PF_APPLETALK, SOCK_DGRAM, 0);
raw_socket = socket(PF_APPLETALK, SOCK_RAW, protocol);
説明
Linux は
Inside Appletalk
に記述されている Appletalk プロトコルを実装している。
カーネルにあるのは DDP 層と AARP だけである。これらは
netatalk
プロトコルライブラリを通して利用されるように設計されている。
このページは DDP 層を直接利用したいユーザーのために、
インターフェースを記述したものである。
Appletalk とユーザープログラムとの通信には、
BSD 互換のソケットインターフェースを利用する。
ソケットに関するより詳しい情報は
socket(7)
を見よ。
Appletalk ソケットは、
ソケットファミリーの引数に
PF_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 {
u_short s_net;
u_char s_node;
};
struct sockaddr_atalk {
sa_family_t sat_family; /* address family */
u_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
はローカルなブロードキャストアドレスである。
ソケットオプション
プロトコル固有のソケットオプションはない。
SYSCTL
Appletalk のグローバルパラメータのいくつかは、
sysctl を通して設定することができる。
これらの sysctl へアクセスするには、
proc/sys/net/atalk/*
ファイルを読み書きする方法と、インターフェースに対して
sysctl(2)
を用いる方法がある。
- 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
が呼ばれた。
- ENOMEM と ENOBUFS
-
メモリが足りない。
- ENOPKG
-
カーネルのサブシステムが設定されていない。
- ENOPROTOOPT と EOPNOTSUPP
-
渡したソケットオプションが不正。
- ENOTCONN
-
行おうとした操作は接続済みのソケットに対してのみ定義されているものだが、
そのソケットは接続されていなかった。
- EPERM
-
高い優先度に設定したり、設定を変更したり、
指定したプロセスやグループにシグナルを送るのに必要な権限を
ユーザが持っていない。
- EPIPE
-
接続が先方によって、通常以外のやり方でクローズまたはシャットダウンされた。
- ESOCKTNOSUPPORT
-
ソケットが設定されていない。または未知のソケットタイプが要求された。
バージョン
Appletalk は Linux 2.0 以降でサポートされている。
sysctl
インターフェースは 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)
Index
- 名前
-
- 書式
-
- 説明
-
- アドレスのフォーマット
-
- ソケットオプション
-
- SYSCTL
-
- ioctl
-
- エラー
-
- バージョン
-
- 注意
-
- 移植性
-
- バグ
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:36 GMT, November 19, 2007