recvt_LS7000

Section: WIN SYSTEM (1W)
Updated: 2014.4.11
Index Return to Main Contents
 

名称

recvt_LS7000, recvt_LS7000d - 白山 LS7000 からのデータの受信  

形式


recvt_LS7000 [-ADBnNr] [-d pkts] [-f chfile] [-g group] [-i interface] [-m before][-p after] [-S dir/host:port] [-s bufsiz] [-y req_delay] port shmkey shmsize [ ctlfile [ logfile ]]

recvt_LS7000d [-ABnNr] [-d pkts] [-f chfile] [-g group] [-i interface] [-m before] [-p after] [-S dir/host:port] [-s bufsiz] [-y req_delay] port shmkey shmsize [ ctlfile [ logfile ]]

 

解説

recvt_LS7000 は、白山工業社製の LS7000 (LS7000XTではない)から自ホストの UDP ポート番号  port に宛てて送られるデータを受信し、A1 パケットはキー  shmkey で与えられる共有メモリ・セグメントに(巡回的に)書き込みます。 そのキーをもつ共有メモリ・セグメントが存在しない場合は、大きさ  shmsize  (KB) の共有メモリ・セグメントが作られます。すでに存在している場合は、 そのサイズが  shmsize  (KB) よりも小さいとエラーになります。 UDP ポート番号は16ビットの整数値、共有メモリ・キーは32ビットの 整数値です。 A8 及び A9 パケットはカレントディレクトリに書き込みます。

recvt_LS7000d は daemon モードで起動します。recvt_LS7000 でオプション -D を指定した時と同じ動作です。

制御ファイル  ctlfile が与えられた場合は、その中にリストされたチャネルのデータだけが 受信されます。ただし制御ファイル名の先頭に '-' を付けたときは、 そのファイルにリストされた以外の全チャネルのデータが受信されます。 制御ファイル名の先頭に '-' を付ける効果はチャネル番号による制御の 意味のみを逆転するもので、後述するホスト制御には影響しません。 ctlfile が与えられないか、または '-' である場合は、全チャネルが受信されます。
制御ファイル  ctlfile には、 1行に1チャネルずつ指定された16進数のチャネル番号(ただし"*"は 「すべてのチャネル」を表す)、または "+"か"-"で始まるホスト制御行を書くことができます。 チャネル番号を指定した行とホスト制御行は、混在していてもかまいません。 いずれの行も空白またはタブで区切られた左端の項目だけが読まれ、 その行の以降の部分は読み飛ばされます。'#'で始まる行はコメントと 見なされます。
ホスト制御行は、


       -host[:port]   パケットがhost[:port]からであれば捨てる
       +host[:port]   パケットがhost[:port]からであれば受け入れる
       +              パケットを受け入れる
       -              パケットを捨てる

の形式で書かれたルールです。ホスト名のあとに:で区切ってポート番号を 書いた場合は、ホストとポートの組が一致した場合にのみ有効になります。 ホスト制御については、パケットごとにルールを上から当てはめていき、 当てはまるルールがあったらそれが適用されます。最後まで当てはまるルールが なかったらそのパケットを受け入れます(つまり最後にはかならず "+" の行が あるのと同じ)。
 ctlfile にホスト制御行がない場合は、チャネル番号による選択のみが 行われます。1つ以上のホスト制御行がある場合、すべての ホスト制御ルールを適用した結果受け入れられたパケットに対して、 チャネル番号での選択が行われます。 したがって、  ctlfile にホスト制御行があってもチャネル番号を指定する行がない場合、 (制御ファイル名の先頭に '-'がない限り)すべてのデータが 捨てられてしまうことに注意してください。

ログファイル名  logfile を指定すると、ここに動作ログがとられます。指定しないとログ情報は標準出力に 送られます(ただし、daemon モードで動いている時は syslogd(8) に送られま す)。ログファイルは書き込みのたび毎にオープン/クローズされます。

recvt_LS7000 は、HUPシグナルを受けると制御ファイル  ctlfile を読み直し、ログファイル  logfile に送り元ホストごとの流量情報を書き出します。これには起動時、または 前回HUPシグナルを受けたときからの、

  パケット数、バイト数、毎秒パケット数、毎秒バイト数
が含まれます。

recvt_LS7000 は受信するデータのチャネル番号ごとに過去10パケットまでの タイムスタンプの履歴を保存しており、同じチャネル番号で10パケット 以内に同じタイムスタンプのデータ(この場合1チャネル×1秒分の ブロックのことです)が来ると、重複しているものとしてそのデータを廃棄します。 この機能は、設定のミスによって無限ループができてデータが増殖する ことを防ぐことや、複数の送信元から1つの受信ポートへわざと重複した データを送信しておく冗長構成を可能にします。

recvt_LS7000 が受信するデータは、一般に記録の時間順に送られてくるとは 限りません。この場合、recvt_LS7000 が書き込んだ共有メモリ上でも、データは 時間順にはなりません。order(1W) はこれを時間順に並べ変えます。

recvt_LS7000 は引数なしで起動すると簡単な使用法を表示します。  

ネットワーク上の形式

LS7000 のマニュアルを参照下さい。  

再送プロトコル

受信側は送信元(ホストとポートの組)ごとにパケット番号を 監視していて、欠落したパケットの番号を送信元ポートに送ることによって、 そのパケットの再送を要求します。 再送要求パケットのフォーマットは LS7000 のマニュアルを参照下さい。 受信プロセスは最大64パケットの連続した 欠落までを再送要求します。recvt_LS7000 はパケット番号の連続性を監視して 再送要求を行なう相手先として、100ヶ所までの送信元を認識することが できます。100ヶ所を超えると、recvt_LS7000 は送信元テーブルを一旦白紙に戻し、 改めて登録を始めます。  

共有メモリ上の形式

recvt_LS7000 が共有メモリに書き込むデータは、オプション -B によ る別のもう一つの形式についてと同様に recvt(1W)と同じです。recvt(1W)の マニュアルを参照下さい。  

オプション

-A
タイムスタンプをチェックしません。タイムスタンプのない 形式のパケットも扱うことができます。受信した1パケットが 必ず共有メモリ上の1ブロックになります。
-B
共有メモリに別の形式(ブロック末尾にもブロックサイズを持つ形式)で書き込 みます。具体的には recvt(1W)のマニュアルを参照下さい。
-D
daemon モードで起動します。
-d pkts
recvt_LS7000 はチャネル番号とタイムスタンプの履歴を持っていて、受信した データ(1チャネル×1秒分のデータブロック)のチャネル番号とタイムスタンプを 検査し、すでに受信されていると読み捨てます。この履歴の長さを pkts パケット分にします。デフォルトは10パケット分です。
-i interface
パケットを受信するネットワークインターフェースを、そのインターフェースの IPアドレス interface で指定します。
-f chfile
ファイル chfile に指定されたチャネルを受信します。これは ctlfile での設定を補足するものです。まず ctlfile にしたがって受信すべきチャネルが決定され、 さらに chfile に指定されたチャネルが、受信すべきチャネルのリストに 追加されます。 chfile では、いずれの行も空白またはタブで区切られた左端の項目だけが読まれ、 その行の以降の部分は読み飛ばされます。'#'で始まる行はコメントと 見なされます。 ctlfile と違って chfile にはホスト制御やワイルドカードによるチャネルの指定は できません。 このオプションは複数個指定することができ、それにより複数(最大30個)の チャネルファイルを使用することができます。 recvt_LS7000 プロセスが HUPシグナルを受けたとき、 ctlfile とともに chfile も読み直されます。
-g group
IPマルチキャストアドレス group に対して送信されるパケットを受信します。
-m before
マシンの内部時計の時刻よりも before分以上前の(遅れた)タイムスタンプを もつパケットを、不正なパケットとして廃棄します。
-N
パケット番号がないものとして扱います。したがって共有メモリ には受信したデータがまるまる(通常パケット番号が入っているはずの 先頭2バイトも含めて)書き込まれます。再送制御は行いません。 受信した1パケットが必ず共有メモリ上の1ブロックになります。
-n
拒否すべき送り元アドレスからのパケット、重複して受信した再送パケット、 不正なチャネルヘッダーをもつパケット、不正(許容時間範囲外を含む)な タイムスタンプをもつパケットについての情報をログに報告しません。
-p after
マシンの内部時計の時刻よりも after分以上後の(進んだ)タイムスタンプを もつパケットを、不正なパケットとして廃棄します。
-r
再送要求パケットを送信しません。 DVB衛星配信ボードによる受信のような一方通行の伝送路の場合には、 これにより不要なパケット送信を抑制することができます。
-S dir/host:port
A8 及び A9 パケットの保存するディレクトリを dir にします。ネットワークに転送させたい場合は、転送先の ホスト host とUDPポート port を:で区切って与えます。
-s bufsiz
受信ソケットバッファサイズを bufsiz KBにします。ただしこれはシステムで許される値の範囲でなければ なりません。デフォルトは256KBです。
-y req_delay
再送要求するタイミングを req_delay パケット分だけ遅らせます。これにより、伝送中にパケット順が 入れ替わってパケット番号が不連続になっても、 req_delay パケットだけ待つことによって追い越されたパケットが到着すれば、 それに対する再送要求を出さなくてもすむことがあります。 最大60までの値が指定できます。
 

ソース

`recvt_LS7000.c'
 

関連事項

recvt(1W)


 

Index

名称
形式
解説
ネットワーク上の形式
再送プロトコル
共有メモリ上の形式
オプション
ソース
関連事項